summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS23
-rw-r--r--classes/autotools_stage.bbclass6
-rw-r--r--classes/base.bbclass16
-rw-r--r--classes/dietlibc.bbclass30
-rw-r--r--classes/efl.bbclass4
-rw-r--r--classes/failure-cleanup.bbclass18
-rw-r--r--classes/icecc.bbclass20
-rw-r--r--classes/image.bbclass24
-rw-r--r--classes/insane.bbclass2
-rw-r--r--classes/java-native.bbclass11
-rw-r--r--classes/kernel.bbclass12
-rw-r--r--classes/module_strip.bbclass6
-rw-r--r--classes/native.bbclass9
-rw-r--r--classes/package.bbclass10
-rw-r--r--classes/package_deb.bbclass32
-rw-r--r--classes/package_ipk.bbclass15
-rw-r--r--classes/qt4e.bbclass15
-rw-r--r--classes/qt4x11.bbclass3
-rw-r--r--classes/rootfs_deb.bbclass48
-rw-r--r--classes/rootfs_ipk.bbclass5
-rw-r--r--classes/sanity.bbclass6
-rw-r--r--conf/bitbake.conf45
-rw-r--r--conf/checksums.ini1384
-rw-r--r--conf/distro/angstrom-2008.1.conf34
-rw-r--r--conf/distro/chinook-compat.conf6
-rw-r--r--conf/distro/include/angstrom-2007-for-openmoko.inc1
-rw-r--r--conf/distro/include/angstrom-2008-preferred-versions.inc7
-rw-r--r--conf/distro/include/angstrom-uclibc.inc2
-rw-r--r--conf/distro/include/fso-autorev.inc3
-rw-r--r--conf/distro/include/kaeilos.inc292
-rw-r--r--conf/distro/include/moko-autorev.inc3
-rw-r--r--conf/distro/include/preferred-gpe-versions-2.8.inc2
-rw-r--r--conf/distro/include/preferred-om-2008-versions.inc67
-rw-r--r--conf/distro/include/preferred-slugos-versions.inc105
-rw-r--r--conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc2
-rw-r--r--conf/distro/include/sane-feed-deb.inc6
-rw-r--r--conf/distro/include/sane-feed-ipk.inc5
-rw-r--r--conf/distro/include/sane-feed.inc170
-rw-r--r--conf/distro/include/sane-srcdates.inc46
-rw-r--r--conf/distro/include/sane-srcrevs.inc60
-rw-r--r--conf/distro/include/sane-toolchain-eglibc.inc37
-rw-r--r--conf/distro/include/sane-toolchain-glibc.inc39
-rw-r--r--conf/distro/include/sane-toolchain-oabi.inc2
-rw-r--r--conf/distro/include/sane-toolchain-uclibc.inc42
-rw-r--r--conf/distro/include/sane-toolchain-uclinux-uclibc.inc26
-rw-r--r--conf/distro/include/sane-toolchain.inc142
-rw-r--r--conf/distro/include/slugos.inc204
-rw-r--r--conf/distro/kaeilos.conf187
-rw-r--r--conf/distro/minimal.conf164
-rw-r--r--conf/distro/openmoko.conf2
-rw-r--r--conf/distro/openprotium.conf6
-rw-r--r--conf/distro/slugos.conf2
-rw-r--r--conf/machine/beagleboard.conf18
-rw-r--r--conf/machine/collie.conf26
-rw-r--r--conf/machine/davinci-dvevm.conf1
-rw-r--r--conf/machine/davinci-sffsdr.conf6
-rw-r--r--conf/machine/gamecube.conf11
-rw-r--r--conf/machine/htcblackstone.conf10
-rw-r--r--conf/machine/htcdiamond.conf11
-rw-r--r--conf/machine/htckaiser.conf11
-rw-r--r--conf/machine/htcnike.conf10
-rw-r--r--conf/machine/htcpolaris.conf11
-rw-r--r--conf/machine/htcraphael.conf11
-rw-r--r--conf/machine/htctitan.conf9
-rw-r--r--conf/machine/htcvogue.conf11
-rw-r--r--conf/machine/include/htc-msm7.inc23
-rw-r--r--conf/machine/include/kexecboot.inc6
-rw-r--r--conf/machine/include/motorola-ezx-base.inc2
-rw-r--r--conf/machine/include/orion.inc2
-rw-r--r--conf/machine/include/tune-arm1136-novfp.inc2
-rw-r--r--conf/machine/include/tune-mips32.inc1
-rw-r--r--conf/machine/include/zaurus-2.6.inc20
-rw-r--r--conf/machine/mx31moboard.conf2
-rw-r--r--conf/machine/om-3d7k.conf39
-rw-r--r--conf/machine/omap3evm.conf19
-rw-r--r--conf/machine/omapzoom.conf57
-rw-r--r--conf/machine/overo.conf45
-rw-r--r--conf/machine/oxnas.conf (renamed from conf/machine/oxe810.conf)0
-rw-r--r--conf/machine/poodle.conf1
-rw-r--r--conf/machine/ronetix-pm9261.conf24
-rw-r--r--conf/machine/ronetix-pm9263.conf24
-rw-r--r--conf/machine/rx1950.conf2
-rw-r--r--conf/machine/stb225.conf16
-rw-r--r--conf/machine/tosa.conf3
-rw-r--r--conf/machine/vortex86sx.conf1
-rwxr-xr-xcontrib/angstrom/build-feeds.sh28
-rwxr-xr-xcontrib/angstrom/build-release.sh30
-rw-r--r--contrib/angstrom/local.conf28
-rwxr-xr-xcontrib/angstrom/sort.sh13
-rw-r--r--contrib/angstrom/upload-packages.sh3
-rw-r--r--contrib/artwork/oe.svg203
-rw-r--r--contrib/artwork/powered-by-oe.svg267
-rw-r--r--contrib/feed-browser/index.html47
-rw-r--r--contrib/feed-browser/index.php108
-rw-r--r--contrib/feed-browser/scripts/js/repo.js130
-rw-r--r--contrib/feed-browser/section.php85
-rw-r--r--docs/usermanual/Makefile62
-rw-r--r--docs/usermanual/README18
-rw-r--r--docs/usermanual/chapters/.mtn2git_empty0
-rw-r--r--docs/usermanual/chapters/common_use_cases.xml409
-rw-r--r--docs/usermanual/chapters/comparing.xml51
-rw-r--r--docs/usermanual/chapters/features.xml78
-rw-r--r--docs/usermanual/chapters/getting_oe.xml557
-rw-r--r--docs/usermanual/chapters/introduction.xml72
-rw-r--r--docs/usermanual/chapters/metadata.xml190
-rw-r--r--docs/usermanual/chapters/recipes.xml3710
-rw-r--r--docs/usermanual/chapters/usage.xml1193
-rw-r--r--docs/usermanual/chunk-code.xsl670
-rw-r--r--docs/usermanual/chunk-common.xsl1911
-rw-r--r--docs/usermanual/chunk-utf8.xsl52
-rw-r--r--docs/usermanual/docbook-utf8.xsl10
-rw-r--r--docs/usermanual/embworld-oe.dbk888
-rw-r--r--docs/usermanual/html.css282
-rw-r--r--docs/usermanual/reference/.mtn2git_empty0
-rw-r--r--docs/usermanual/reference/class_autotools.xml153
-rw-r--r--docs/usermanual/reference/class_binconfig.xml46
-rw-r--r--docs/usermanual/reference/class_distutils.xml48
-rw-r--r--docs/usermanual/reference/class_image.xml358
-rw-r--r--docs/usermanual/reference/class_pkgconfig.xml39
-rw-r--r--docs/usermanual/reference/class_rootfs_ipkg.xml215
-rw-r--r--docs/usermanual/reference/class_siteinfo.xml180
-rw-r--r--docs/usermanual/reference/class_update-alternatives.xml241
-rw-r--r--docs/usermanual/reference/class_update-rc.d.xml133
-rw-r--r--docs/usermanual/reference/dirs_install.xml198
-rw-r--r--docs/usermanual/reference/dirs_staging.xml169
-rw-r--r--docs/usermanual/reference/fakeroot.xml186
-rw-r--r--docs/usermanual/reference/image_types.xml385
-rw-r--r--docs/usermanual/reference/var_section.xml704
-rw-r--r--docs/usermanual/reference/var_src_uri.xml692
-rw-r--r--docs/usermanual/usermanual.xml122
-rw-r--r--files/device_table-minimal.txt8
-rw-r--r--packages/adobe-flash/flash-plugin_10.0.22.87.bb35
-rw-r--r--packages/alsa/alsa-state.bb2
-rw-r--r--packages/alsa/alsa-state/at91sam9263ek/asound.conf2
-rw-r--r--packages/alsa/alsa-state/at91sam9263ek/asound.state283
-rw-r--r--packages/alsa/alsa-utils_1.0.18.bb1
-rw-r--r--packages/alsa/files/alsa-utils-autoconf-strl-funcs.patch43
-rw-r--r--packages/amule/amule_2.1.3.bb2
-rw-r--r--packages/angstrom/angstrom-gpe-task-settings.bb5
-rw-r--r--packages/angstrom/bigbuckbunny-480p.bb13
-rw-r--r--packages/angstrom/bigbuckbunny-720p.bb14
-rw-r--r--packages/angstrom/e-wm-config-angstrom.bb3
-rw-r--r--packages/antlr/antlr-native_2.7.7.bb2
-rw-r--r--packages/aoetools/aoetools_29.bb9
-rw-r--r--packages/apache2/apache2-native_2.2.3.bb27
-rw-r--r--packages/apr/apr-util/configfix.patch49
-rw-r--r--packages/apr/apr-util/configure_fixes.patch10
-rw-r--r--packages/apr/apr-util/configure_fixes.patch.old25
-rw-r--r--packages/apr/apr-util_1.2.12.bb12
-rw-r--r--packages/apr/apr-util_1.3.4.bb34
-rw-r--r--packages/apr/apr/cleanup.patch42
-rw-r--r--packages/apr/apr/configfix.patch51
-rw-r--r--packages/apr/apr/configure_fixes.patch84
-rw-r--r--packages/apr/apr_1.2.12.bb7
-rw-r--r--packages/apr/apr_1.3.3.bb32
-rw-r--r--packages/apt/apt-0.7.20.2/no-curl.patch40
-rw-r--r--packages/apt/apt-0.7.20.2/noconfigure.patch35
-rw-r--r--packages/apt/apt-0.7.20.2/nodoc.patch19
-rw-r--r--packages/apt/apt-native.inc2
-rw-r--r--packages/apt/apt-native_0.6.46.2.bb2
-rw-r--r--packages/apt/apt-native_0.7.14.bb3
-rw-r--r--packages/apt/apt-native_0.7.19.bb3
-rw-r--r--packages/apt/apt-native_0.7.2.bb2
-rw-r--r--packages/apt/apt-native_0.7.20.2.bb6
-rw-r--r--packages/apt/apt-native_0.7.3.bb2
-rw-r--r--packages/apt/apt_0.7.20.2.bb26
-rw-r--r--packages/at76c503a/at76c503a-modules/at76_usb-0.17-.patch66
-rw-r--r--packages/at76c503a/at76c503a-modules_0.17.bb4
-rw-r--r--packages/aufs/aufs/aufs_create_no_manpage.patch34
-rw-r--r--packages/aufs/aufs_cvs.bb18
-rw-r--r--packages/automake/automake-1.10/path_prog_fixes.patch43
-rw-r--r--packages/automake/automake-1.8.2/automake182-update-configscripts.patch201
-rw-r--r--packages/automake/automake-1.9.2/automake182-update-configscripts.patch201
-rw-r--r--packages/automake/automake-1.9.3/automake182-update-configscripts.patch201
-rw-r--r--packages/automake/automake-native_1.10.2.bb (renamed from packages/automake/automake-native_1.9.3.bb)0
-rw-r--r--packages/automake/automake-native_1.10.bb5
-rw-r--r--packages/automake/automake-native_1.8.2.bb18
-rw-r--r--packages/automake/automake-native_1.8.4.bb18
-rw-r--r--packages/automake/automake-native_1.9.2.bb2
-rw-r--r--packages/automake/automake-native_1.9.6.bb3
-rw-r--r--packages/automake/automake_1.10.2.bb31
-rw-r--r--packages/automake/automake_1.10.bb31
-rw-r--r--packages/automake/automake_1.7.7.bb22
-rw-r--r--packages/automake/automake_1.8.2.bb26
-rw-r--r--packages/automake/automake_1.8.4.bb26
-rw-r--r--packages/automake/automake_1.9.2.bb27
-rw-r--r--packages/automake/automake_1.9.3.bb28
-rw-r--r--packages/automake/automake_1.9.6.bb31
-rw-r--r--packages/automake/files/path_prog_fixes.patch49
-rw-r--r--packages/avahi/avahi_0.6.24.bb5
-rw-r--r--packages/base-files/base-files/akita/fstab2
-rw-r--r--packages/base-files/base-files/c7x0/fstab2
-rw-r--r--packages/base-files/base-files/kaeilos/issue12
-rw-r--r--packages/base-files/base-files/kaeilos/issue.net12
-rw-r--r--packages/base-files/base-files/om-3d7k/fstab10
-rw-r--r--packages/base-files/base-files/poodle/fstab4
-rw-r--r--packages/base-files/base-files/spitz/fstab4
-rw-r--r--packages/base-files/base-files/tosa/fstab4
-rw-r--r--packages/base-files/base-files_3.0.14.bb2
-rw-r--r--packages/base-passwd/base-passwd-3.5.9/configure.patch23
-rw-r--r--packages/base-passwd/base-passwd-3.5.9/mysql.patch8
-rw-r--r--packages/base-passwd/base-passwd-3.5.9/nobash.patch13
-rw-r--r--packages/base-passwd/base-passwd-3.5.9/root-home.patch8
-rw-r--r--packages/base-passwd/base-passwd-3.5.9/slugos/README14
-rw-r--r--packages/base-passwd/base-passwd-3.5.9/slugos/root-home.patch8
-rw-r--r--packages/base-passwd/base-passwd_3.5.19.bb57
-rw-r--r--packages/base-passwd/base-passwd_3.5.20.bb57
-rw-r--r--packages/base-passwd/base-passwd_3.5.9.bb59
-rw-r--r--packages/base-passwd/files/mysql.patch (renamed from packages/base-passwd/base-passwd-3.5.19/mysql.patch)0
-rw-r--r--packages/base-passwd/files/nobash.patch (renamed from packages/base-passwd/base-passwd-3.5.19/nobash.patch)0
-rw-r--r--packages/base-passwd/files/root-home.patch (renamed from packages/base-passwd/base-passwd-3.5.19/root-home.patch)0
-rw-r--r--packages/base-passwd/files/slugos/README (renamed from packages/base-passwd/base-passwd-3.5.19/slugos/README)0
-rw-r--r--packages/base-passwd/files/slugos/root-home.patch (renamed from packages/base-passwd/base-passwd-3.5.19/slugos/root-home.patch)0
-rw-r--r--packages/binutils/binutils-2.19.1/110-arm-eabi-conf.patch22
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-2.16.1-e300c2c3.patch19
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch39
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-arm-pr7093.patch19
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-uclibc-100-uclibc-conf.patch34
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-uclibc-300-001_ld_makefile_patch.patch50
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-uclibc-300-006_better_file_error.patch43
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-uclibc-300-012_check_ldrunpath_length.patch47
-rw-r--r--packages/binutils/binutils-2.19.1/binutils-uclibc-gas-needs-libm.patch38
-rw-r--r--packages/binutils/binutils-cross-sdk_2.19.1.bb3
-rw-r--r--packages/binutils/binutils-cross_2.19.1.bb4
-rw-r--r--packages/binutils/binutils_2.19.1.bb19
-rw-r--r--packages/bison/bison-native_2.3.bb4
-rw-r--r--packages/blackbox/blackbox_0.70.1.bb9
-rw-r--r--packages/blueprobe/blueprobe-0.15/h6300.patch17
-rw-r--r--packages/blueprobe/blueprobe-0.15/hx4700.patch26
-rw-r--r--packages/blueprobe/blueprobe-0.16/h6300.patch17
-rw-r--r--packages/blueprobe/blueprobe-0.16/hx4700.patch30
-rw-r--r--packages/blueprobe/blueprobe-0.17/h2200-fixup.patch11
-rw-r--r--packages/blueprobe/blueprobe-0.17/htcuniversal.patch18
-rw-r--r--packages/blueprobe/blueprobe-0.17/hwuart.patch21
-rw-r--r--packages/blueprobe/blueprobe-0.17/hx4700.patch22
-rw-r--r--packages/blueprobe/blueprobe-0.18/fix-makefile.patch13
-rw-r--r--packages/blueprobe/blueprobe.inc3
-rw-r--r--packages/blueprobe/blueprobe_0.13.bb1
-rw-r--r--packages/blueprobe/blueprobe_0.14.bb1
-rw-r--r--packages/blueprobe/blueprobe_0.15.bb6
-rw-r--r--packages/blueprobe/blueprobe_0.16.bb6
-rw-r--r--packages/blueprobe/blueprobe_0.17.bb8
-rw-r--r--packages/blueprobe/blueprobe_0.18.bb12
-rw-r--r--packages/bluez/bluez-utils_3.33.bb9
-rw-r--r--packages/bluez/bluez-utils_3.36.bb13
-rw-r--r--packages/bluez/bluez4/fix-dfutool-usb-declaration-mismatch.patch13
-rw-r--r--packages/bluez/bluez4_4.27.bb53
-rw-r--r--packages/bluez/bluez4_4.31.bb60
-rw-r--r--packages/bonjour/bonjour_107.6.bb33
-rw-r--r--packages/bonjour/files/bonjour.conf14
-rwxr-xr-xpackages/bonjour/files/bonjour.init48
-rw-r--r--packages/bonnie/bonnie++.inc3
-rw-r--r--packages/bonnie/files/gcc-4.3-fixes.patch16
-rw-r--r--packages/boost/boost-36.inc6
-rw-r--r--packages/boost/boost_1.36.0.bb4
-rw-r--r--packages/bridge-utils/bridge-utils_1.2.bb15
-rw-r--r--packages/busybox/busybox-1.11.3/kaeilos/defconfig855
-rw-r--r--packages/busybox/busybox-1.13.2/angstrom/defconfig88
-rw-r--r--packages/busybox/busybox-1.13.2/defconfig194
-rw-r--r--packages/busybox/busybox-1.13.2/get_header_tar.patch11
-rw-r--r--packages/busybox/busybox-1.13.2/kaeilos/defconfig855
-rw-r--r--packages/busybox/busybox-1.13.2/slugos/defconfig12
-rw-r--r--packages/busybox/busybox-1.13.2/udhcpc-fix-nfsroot.patch40
-rw-r--r--packages/busybox/busybox-static-1.11.3/angstrom/defconfig855
-rw-r--r--packages/busybox/busybox-static-1.11.3/defconfig777
-rw-r--r--packages/busybox/busybox-static-1.11.3/fdisk_lineedit_segfault.patch12
-rw-r--r--packages/busybox/busybox-static-1.11.3/slugos/defconfig851
-rw-r--r--packages/busybox/busybox-static-1.11.3/udhcpscript.patch17
-rw-r--r--packages/busybox/busybox-static_1.11.3.bb11
-rw-r--r--packages/busybox/busybox.inc4
-rw-r--r--packages/busybox/busybox_1.11.3.bb4
-rw-r--r--packages/busybox/busybox_1.13.2.bb17
-rw-r--r--packages/busybox/busybox_1.7.2.bb4
-rw-r--r--packages/busybox/busybox_1.9.2.bb4
-rw-r--r--packages/busybox/files/busybox-appletlib-dependency.patch11
-rw-r--r--packages/busybox/files/mountall1
-rw-r--r--packages/busybox/slingbox_1.3.1.bb3
-rw-r--r--packages/byacc/byacc-native_20081225.bb5
-rw-r--r--packages/byacc/byacc.inc13
-rw-r--r--packages/byacc/byacc_20081225.bb3
-rw-r--r--packages/cdrkit/cdrkit_1.1.9.bb19
-rw-r--r--packages/cdrkit/files/xconfig.patch15
-rw-r--r--packages/cdrtools/cdrtools-native_2.01.bb7
-rw-r--r--packages/clutter/aaina_svn.bb1
-rw-r--r--packages/clutter/clutter-gtk-0.6_git.bb9
-rw-r--r--packages/clutter/clutter-gtk-0.8_git.bb9
-rw-r--r--packages/clutter/clutter-gtk.inc13
-rw-r--r--packages/clutter/clutter-gtk_git.bb10
-rw-r--r--packages/clutter/clutter.inc4
-rw-r--r--packages/clutter/clutter_0.8+git.bb13
-rw-r--r--packages/clutter/clutter_0.8+svn.bb14
-rw-r--r--packages/cmake/cmake-native_2.6.3.bb11
-rw-r--r--packages/connman/connman-gnome_0.4.bb20
-rw-r--r--packages/connman/connman.inc8
-rw-r--r--packages/connman/connman_0.10.bb36
-rw-r--r--packages/connman/connman_0.9.bb36
-rw-r--r--packages/connman/files/connman-applet.desktop10
-rw-r--r--packages/connman/files/phrase-lenght.diff23
-rw-r--r--packages/console-tools/console-tools_0.3.2.bb5
-rw-r--r--packages/coreutils/coreutils-5.0/configure.patch47
-rw-r--r--packages/coreutils/coreutils-5.0/malloc.patch19
-rw-r--r--packages/coreutils/coreutils-5.1.3/install-cross.patch27
-rw-r--r--packages/coreutils/coreutils-5.1.3/man.patch42
-rw-r--r--packages/coreutils/coreutils-5.1.3/rename-eaccess.patch44
-rw-r--r--packages/coreutils/coreutils-5.3.0/futimens.patch44
-rw-r--r--packages/coreutils/coreutils-5.3.0/install-cross.patch27
-rw-r--r--packages/coreutils/coreutils-5.3.0/man.patch42
-rw-r--r--packages/coreutils/coreutils-5.3.0/rename-tee-for-glibc2.5.patch33
-rw-r--r--packages/coreutils/coreutils-6.0/coreutils-install-use-STRIP.patch29
-rw-r--r--packages/coreutils/coreutils-7.1/automake-version.patch13
-rw-r--r--packages/coreutils/coreutils-7.1/man.patch47
-rw-r--r--packages/coreutils/coreutils-7.1/oe-old-tools.patch26
-rw-r--r--packages/coreutils/coreutils-7.1/onceonly.m463
-rw-r--r--packages/coreutils/coreutils-7.1/uptime-pow-lib.patch (renamed from packages/coreutils/coreutils-5.3.0/uptime-pow-lib.patch)0
-rw-r--r--packages/coreutils/coreutils-native_5.1.3.bb7
-rw-r--r--packages/coreutils/coreutils-native_5.3.0.bb7
-rw-r--r--packages/coreutils/coreutils-native_6.0.bb2
-rw-r--r--packages/coreutils/coreutils-native_7.1.bb5
-rw-r--r--packages/coreutils/coreutils.inc1
-rw-r--r--packages/coreutils/coreutils_5.0.bb9
-rw-r--r--packages/coreutils/coreutils_5.1.1.bb5
-rw-r--r--packages/coreutils/coreutils_5.1.3.bb81
-rw-r--r--packages/coreutils/coreutils_5.3.0.bb83
-rw-r--r--packages/coreutils/coreutils_6.0.bb19
-rw-r--r--packages/coreutils/coreutils_7.1.bb92
-rw-r--r--packages/cups/cups-1.3.8/use_echo_only_in_init.patch11
-rw-r--r--packages/cups/cups_1.2.10.bb4
-rw-r--r--packages/cups/cups_1.2.12.bb3
-rw-r--r--packages/cups/cups_1.3.8.bb8
-rw-r--r--packages/dbus/dbus.inc6
-rw-r--r--packages/dbus/dbus_1.0.3.bb2
-rw-r--r--packages/dbus/dbus_1.2.1.bb2
-rw-r--r--packages/ddccontrol/ddccontrol-db_20061014.bb10
-rw-r--r--packages/ddccontrol/ddccontrol_0.4.2.bb13
-rw-r--r--packages/dhcdbd/dhcdbd_1.14.bb2
-rw-r--r--packages/dhcdbd/dhcdbd_1.16.bb2
-rw-r--r--packages/dhcdbd/dhcdbd_2.0.bb2
-rw-r--r--packages/dhcdbd/dhcdbd_3.0.bb2
-rw-r--r--packages/dhcp/dhcp_3.0.2.bb9
-rw-r--r--packages/dietlibc/dietlibc_0.31.bb47
-rw-r--r--packages/dietlibc/files/ai_addrconfig.patch13
-rw-r--r--packages/dietlibc/files/ccache.patch74
-rw-r--r--packages/dietlibc/files/ceil.patch97
-rw-r--r--packages/directfb/directfb-1.2.7/ts_lib_autotools.patch22
-rw-r--r--packages/directfb/directfb-examples_1.2.0.bb17
-rw-r--r--packages/directfb/directfb_1.2.3.bb4
-rw-r--r--packages/directfb/directfb_1.2.7.bb28
-rw-r--r--packages/directfb/files/directfb-1.2.x-fix-pkgconfig-cflags.patch (renamed from packages/directfb/directfb-1.2.3/fix-pkgconfig-cflags.patch)0
-rw-r--r--packages/distcc/distcc_3.1.bb46
-rw-r--r--packages/dnsmasq/dnsmasq-dbus_2.46.bb14
-rw-r--r--packages/dnsmasq/dnsmasq-dbus_2.47.bb11
-rw-r--r--packages/dnsmasq/dnsmasq_2.46.bb3
-rw-r--r--packages/dnsmasq/dnsmasq_2.47.bb1
-rw-r--r--packages/dnsmasq/files/dbus_introspection.patch63
-rw-r--r--packages/dpkg/dpkg-1.14.25/ignore_extra_fields.patch24
-rw-r--r--packages/dpkg/dpkg-native.inc28
-rw-r--r--packages/dpkg/dpkg-native_1.13.22.bb15
-rw-r--r--packages/dpkg/dpkg-native_1.13.25.bb15
-rw-r--r--packages/dpkg/dpkg-native_1.14.19.bb16
-rw-r--r--packages/dpkg/dpkg-native_1.14.23.bb16
-rw-r--r--packages/dpkg/dpkg-native_1.14.25.bb3
-rw-r--r--packages/dpkg/dpkg_1.14.25.bb11
-rw-r--r--packages/dropbear/dropbear-0.52/allow-nopw.patch40
-rw-r--r--packages/dropbear/dropbear-0.52/configure.patch27
-rw-r--r--packages/dropbear/dropbear-0.52/fix-2kb-keys.patch12
-rw-r--r--packages/dropbear/dropbear-0.52/no-host-lookup.patch12
-rw-r--r--packages/dropbear/dropbear-0.52/urandom-xauth-changes-to-options.h.patch13
-rw-r--r--packages/dropbear/dropbear_0.52.bb7
-rw-r--r--packages/dsplink/codec-engine_2.21.bb73
-rw-r--r--packages/dsplink/dmai_1.16.bb32
-rw-r--r--packages/dsplink/dsplink.inc143
-rw-r--r--packages/dsplink/dsplink_1.60.bb18
-rwxr-xr-xpackages/dsplink/files/Makefile-dsplink-gpp2
-rw-r--r--packages/dsplink/files/Makefile-dsplink-kbuild74
-rwxr-xr-xpackages/dsplink/files/Makefile.dsplink59
-rw-r--r--packages/dsplink/files/cmem-class-device-27-and-sched-include-fix.patch23
-rw-r--r--packages/dsplink/files/cmemk-class-device-27.diff11
-rw-r--r--packages/dsplink/files/dmai-built-with-angstrom.patch48
-rw-r--r--packages/dsplink/files/dmai-do-not-panic-on-mixer-failure.patch31
-rw-r--r--packages/dsplink/files/dmai-support-32bit-align.patch17
-rw-r--r--packages/dsplink/files/dmai-update-cpu-name.patch16
-rw-r--r--packages/dsplink/files/dmai-update-fb-display.patch77
-rw-r--r--packages/dsplink/files/dmai-update-v4l2-display.patch127
-rw-r--r--packages/dsplink/files/dsplink-add-class-device-create-support.patch55
-rw-r--r--packages/dsplink/files/dsplink-semaphore-27.patch36
-rwxr-xr-xpackages/dsplink/files/loadmodules-ti-codec-engine-apps.sh37
-rwxr-xr-xpackages/dsplink/files/loadmodules-ti-dmai-apps.sh37
-rwxr-xr-xpackages/dsplink/files/loadmodules-ti-dsplink-apps.sh25
-rw-r--r--packages/dsplink/files/lpm-device-create-and-semaphore-include-fix.patch121
-rw-r--r--packages/dsplink/files/lpm-make-symbol-warnings-fix.patch117
-rw-r--r--packages/dsplink/files/sdma-class-device-and-includes-fix.patch59
-rwxr-xr-xpackages/dsplink/files/unloadmodules-ti-codec-engine-apps.sh12
-rwxr-xr-xpackages/dsplink/files/unloadmodules-ti-dmai-apps.sh12
-rwxr-xr-xpackages/dsplink/files/unloadmodules-ti-dsplink-apps.sh5
-rw-r--r--packages/dsplink/files/xdcpaths.mak232
-rw-r--r--packages/dsplink/gstreamer-ti/gst-buffsize.diff113
-rw-r--r--packages/dsplink/gstreamer-ti_svn.bb36
-rw-r--r--packages/dsplink/readme.txt10
-rw-r--r--packages/dsplink/ti-codec-combos_3.16.bb82
-rw-r--r--packages/dsplink/ti-codec-engine_2.21.bb275
-rw-r--r--packages/dsplink/ti-dmai_1.20.bb93
-rw-r--r--packages/dsplink/ti-paths.inc20
-rw-r--r--packages/dtnrg/dtn_2.5.0.bb16
-rw-r--r--packages/e17/e-wm/illume-disable-screensaver.patch13
-rw-r--r--packages/e17/e-wm_svn.bb5
-rw-r--r--packages/e17/entrance/allow-missing-xsession.patch8
-rw-r--r--packages/e17/entrance/config-db.patch57
-rw-r--r--packages/e17/entrance_0.9.0.010.bb4
-rw-r--r--packages/e2fsprogs/e2fsprogs/e2fsprogs_1.34.bb17
-rw-r--r--packages/e2fsprogs/e2fsprogs_1.38.bb15
-rw-r--r--packages/e2fsprogs/e2fsprogs_1.41.4.bb101
-rw-r--r--packages/ecj/libecj-bootstrap_3.4.1.bb8
-rw-r--r--packages/ecj/libecj-bootstrap_3.4.bb4
-rw-r--r--packages/efl1/ecore-native_svn.bb4
-rw-r--r--packages/efl1/ecore.inc2
-rw-r--r--packages/efl1/elementary_svn.bb9
-rw-r--r--packages/eglibc/eglibc-package.bbclass38
-rw-r--r--packages/eglibc/eglibc.inc2
-rw-r--r--packages/eglibc/eglibc_2.9.bb3
-rw-r--r--packages/eglibc/eglibc_svn.bb3
-rw-r--r--packages/ekiga/ekiga_3.0.2.bb2
-rw-r--r--packages/ekiga/ekiga_3.1.0.bb4
-rw-r--r--packages/ekiga/opal_3.5.2.bb3
-rw-r--r--packages/euphony/euphony_0.1.3.bb (renamed from packages/euphony/euphony_0.1.2.bb)0
-rw-r--r--packages/evtest/evtest_1.23.bb21
-rw-r--r--packages/ezx/ezx-gen-blob/gen-blobbin58368 -> 0 bytes
-rw-r--r--packages/ezx/ezx-gen-blob_20080707.bb32
-rw-r--r--packages/ezx/ezx-gen-blob_svn.bb39
-rw-r--r--packages/ezx/files/remove-bogus-sed.patch15
-rw-r--r--packages/fakeroot/fakeroot-1.9.6/configure-libtool.patch18
-rw-r--r--packages/fakeroot/fakeroot-1.9.6/fix-prefix.patch18
-rw-r--r--packages/fakeroot/fakeroot-native_1.12.1.bb20
-rw-r--r--packages/fakeroot/fakeroot-native_1.7.1.bb18
-rw-r--r--packages/fakeroot/fakeroot_1.12.1.bb21
-rw-r--r--packages/fakeroot/fakeroot_1.7.1.bb19
-rw-r--r--packages/fakeroot/files/configure-libtool.patch14
-rw-r--r--packages/fakeroot/files/fix-prefix.patch19
-rw-r--r--packages/fakeroot/files/work-with-older-libtool.patch11
-rw-r--r--packages/ffmpeg/ffmpeg_git.bb4
-rw-r--r--packages/forte/forte-0.3.5/forte-0.3.5_socket_reuse.patch20
-rw-r--r--packages/forte/forte-0.3.5/forte-0.3.5_stdlib_inc_fix.patch22
-rw-r--r--packages/forte/forte-0.3.5/forte-0.3.5_timer.patch48
-rw-r--r--packages/forte/forte-0.3/forte-0.3-patch_20081008.diff109
-rw-r--r--packages/forte/forte.inc15
-rw-r--r--packages/forte/forte_0.3.5.bb10
-rw-r--r--packages/forte/forte_0.3.bb10
-rw-r--r--packages/freesmartphone/frameworkd-devel_git.bb10
-rw-r--r--packages/freesmartphone/frameworkd/om-3d7k/frameworkd.conf30
-rw-r--r--packages/freesmartphone/frameworkd_git.bb5
-rw-r--r--packages/freesmartphone/fso-abyss_git.bb17
-rw-r--r--packages/freesmartphone/fso-monitord_git.bb3
-rw-r--r--packages/freesmartphone/libframeworkd-glib_git.bb9
-rw-r--r--packages/freesmartphone/libgsm0710_git.bb13
-rw-r--r--packages/freesmartphone/libgsm0710mux/abyss.conf0
-rw-r--r--packages/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf16
-rw-r--r--packages/freesmartphone/libgsm0710mux/om-gta01/abyss.conf15
-rw-r--r--packages/freesmartphone/libgsm0710mux/om-gta02/abyss.conf15
-rw-r--r--packages/freesmartphone/libgsm0710mux_git.bb38
-rw-r--r--packages/fuse/sshfs-fuse_2.2.bb15
-rw-r--r--packages/gcc/gcc-canadian-sdk_4.2.4.bb9
-rw-r--r--packages/gcc/gcc-common.inc5
-rw-r--r--packages/gcc/gcc-configure-canadian-sdk.inc13
-rw-r--r--packages/gcc/gcc-cross-sdk_4.3.1.bb2
-rw-r--r--packages/gcc/gcc-cross-sdk_4.3.2.bb2
-rw-r--r--packages/gcc/gcc-cross-sdk_4.3.3.bb2
-rw-r--r--packages/gcc/gcc-package-sdk.inc2
-rw-r--r--packages/gdb/gdbserver_6.8.bb1
-rw-r--r--packages/glib-2.0/glib-2.0_2.18.0.bb13
-rw-r--r--packages/glib-2.0/glib-2.0_2.18.1.bb15
-rw-r--r--packages/glib-2.0/glib-2.0_2.18.3.bb15
-rw-r--r--packages/glibc/glibc-initial.inc2
-rw-r--r--packages/glibc/glibc-initial_2.7.bb6
-rw-r--r--packages/glibc/glibc_2.7.bb6
-rw-r--r--packages/gnash/gnash.inc2
-rw-r--r--packages/gnash/gnash_0.8.5.bb38
-rw-r--r--packages/gnome/gnome-games_2.24.0.bb2
-rw-r--r--packages/gnome/gnome-icon-theme_2.24.0.bb17
-rw-r--r--packages/gnome/gnome-python-desktop_2.23.0.bb2
-rw-r--r--packages/gnome/gnome-python-extras_2.19.1.bb2
-rw-r--r--packages/gnome/gnome-python_2.22.1.bb2
-rw-r--r--packages/gnome/gnome-vfs-2.12.0/gconftool-lossage.patch11
-rw-r--r--packages/gnome/gnome-vfs-2.16.3/gconftool-lossage.patch11
-rw-r--r--packages/gnome/gnome-vfs-2.16.3/gnome-vfs-no-kerberos.patch51
-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-2.20.0/gconftool-lossage.patch11
-rw-r--r--packages/gnome/gnome-vfs-2.20.0/gnome-vfs-no-kerberos.patch51
-rw-r--r--packages/gnome/gnome-vfs-2.6.0/gconftool-lossage.patch11
-rw-r--r--packages/gnome/gnome-vfs-2.6.2/gconftool-lossage.patch11
-rw-r--r--packages/gnome/gnome-vfs_2.12.0.bb90
-rw-r--r--packages/gnome/gnome-vfs_2.16.3.bb38
-rw-r--r--packages/gnome/gnome-vfs_2.18.1.bb38
-rw-r--r--packages/gnome/gnome-vfs_2.20.0.bb42
-rw-r--r--packages/gnome/gnome-vfs_2.22.0.bb14
-rw-r--r--packages/gnome/gnome-vfs_2.6.0.bb76
-rw-r--r--packages/gnome/gnome-vfs_2.6.2.bb85
-rw-r--r--packages/gnome/libchamplain-gtk_0.2.8.bb9
-rw-r--r--packages/gnome/libchamplain_0.2.8.bb10
-rw-r--r--packages/gnome/libsoup-2.4_2.24.3.bb17
-rw-r--r--packages/gnome/pyorbit_2.24.0.bb2
-rw-r--r--packages/gnuchess/fltk-chess_0.51.bb29
-rw-r--r--packages/gnuchess/gnuchess_5.021.bb13
-rw-r--r--packages/gnuplot/gnuplot.inc2
-rw-r--r--packages/gnuplot/gnuplot_4.2.4.bb2
-rw-r--r--packages/gnuradio/gnuradio.inc3
-rw-r--r--packages/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch37
-rw-r--r--packages/gnutls/gnutls_2.4.2.bb3
-rw-r--r--packages/gob2/gob2-native_2.0.14.bb5
-rw-r--r--packages/gpe-gallery/files/makefile-fix.patch11
-rw-r--r--packages/gpe-gallery/files/svn-build.patch240
-rw-r--r--packages/gpe-gallery/gpe-gallery_0.97.bb16
-rw-r--r--packages/gpe-gallery/gpe-gallery_svn.bb9
-rw-r--r--packages/gpe-mini-browser/gpe-mini-browser2_svn.bb4
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo.inc4
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb2
-rw-r--r--packages/gpe-scap/gpe-scap_1.4.bb13
-rw-r--r--packages/gpe-scap/gpe-scap_svn.bb2
-rw-r--r--packages/gpgme/gpgme_1.1.4.bb2
-rw-r--r--packages/gpsd/gpsd.inc2
-rw-r--r--packages/gpsd/gpsd_2.37.bb3
-rw-r--r--packages/gpsd/gpsd_2.38.bb3
-rw-r--r--packages/grub/grub-0.97/menu.lst6
-rw-r--r--packages/grub/grub_0.97.bb16
-rw-r--r--packages/gstreamer/gst-ffmpeg/lower-rank.diff13
-rw-r--r--packages/gstreamer/gst-ffmpeg_0.10.6.bb3
-rw-r--r--packages/gstreamer/gst-plugins-bad_0.10.6.bb2
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.22.bb12
-rw-r--r--packages/gstreamer/gst-plugins-good_0.10.13.bb11
-rw-r--r--packages/gstreamer/gst-plugins-good_0.10.7.bb10
-rw-r--r--packages/gstreamer/gst-plugins-ugly/gstmad_16bit.patch27
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.10.bb18
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.7.bb17
-rw-r--r--packages/gstreamer/gst-plugins.inc7
-rw-r--r--packages/gstreamer/gstreamer_0.10.21.bb8
-rw-r--r--packages/gstreamer/gstreamer_0.10.22.bb6
-rw-r--r--packages/gtk+/gdk-pixbuf-csource-native_2.12.11.bb1
-rw-r--r--packages/gtk+/gdk-pixbuf_2.10.14.bb32
-rw-r--r--packages/gtk+/gtk+_2.14.2.bb7
-rw-r--r--packages/gtk-webcore/midori_git.bb33
-rw-r--r--packages/hal/gnome-device-manager_0.2.bb11
-rw-r--r--packages/hal/hal-0.5.11/wifi-2.6.27.diff64
-rw-r--r--packages/hal/hal.inc2
-rw-r--r--packages/hal/hal_0.5.11.bb5
-rw-r--r--packages/hdparm/hdparm_6.9.bb15
-rwxr-xr-xpackages/i2c-tools/picodlp-control/picodlp-control39
-rw-r--r--packages/i2c-tools/picodlp-control_0.1.bb2
-rw-r--r--packages/ica/ica-bin_10.6.bb2
-rw-r--r--packages/images/distcc-slave-image.bb22
-rw-r--r--packages/images/e-image.bb2
-rw-r--r--packages/images/epydial-image.bb78
-rw-r--r--packages/images/fso-console-image.bb5
-rw-r--r--packages/images/fso-illume-image.bb2
-rw-r--r--packages/images/fso-image-light.bb2
-rw-r--r--packages/images/fso-image-nox.bb2
-rw-r--r--packages/images/fso-image.bb144
-rw-r--r--packages/images/fso-image.inc143
-rw-r--r--packages/images/fso-paroli-image.bb12
-rw-r--r--packages/images/fso-zhone-image.bb13
-rw-r--r--packages/images/gnuradio-image.bb26
-rw-r--r--packages/images/jlime-opie.bb5
-rw-r--r--packages/images/moko-underground-image.bb40
-rw-r--r--packages/images/x11-gpe-image.bb1
-rw-r--r--packages/images/x11-gpe-java-image.bb1
-rw-r--r--packages/images/x11-office-image.bb1
-rw-r--r--packages/images/x11-pimlico-image.bb1
-rw-r--r--packages/images/zad-image.bb100
-rw-r--r--packages/inetutils/inetutils_1.5.bb21
-rw-r--r--packages/initrdscripts/files/00-psplash.sh8
-rw-r--r--packages/initrdscripts/files/80-ext3.sh2
-rw-r--r--packages/initrdscripts/files/98-aufs.sh2
-rw-r--r--packages/initrdscripts/files/99-psplash.sh6
-rw-r--r--packages/initrdscripts/files/init.sh7
-rw-r--r--packages/initrdscripts/initramfs-module-psplash_1.0.bb4
-rw-r--r--packages/initscripts/files/hostname.sh1
-rwxr-xr-xpackages/initscripts/initscripts-1.0/checkroot (renamed from packages/initscripts/initscripts-1.0/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/foonas/checkroot (renamed from packages/initscripts/initscripts-1.0/foonas/checkroot.sh)0
-rw-r--r--packages/initscripts/initscripts-1.0/foonas/domainname.sh1
-rwxr-xr-xpackages/initscripts/initscripts-1.0/jornada6xx/checkroot (renamed from packages/initscripts/initscripts-1.0/jornada6xx/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/jornada7xx/checkroot (renamed from packages/initscripts/initscripts-1.0/jornada7xx/checkroot.sh)0
-rw-r--r--packages/initscripts/initscripts-1.0/logicpd-pxa270/checkroot (renamed from packages/initscripts/initscripts-1.0/logicpd-pxa270/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/mtx-1/checkroot (renamed from packages/initscripts/initscripts-1.0/mtx-1/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/mtx-1/mountall.sh1
-rwxr-xr-xpackages/initscripts/initscripts-1.0/mtx-2/checkroot (renamed from packages/initscripts/initscripts-1.0/mtx-2/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/mtx-2/mountall.sh1
-rwxr-xr-xpackages/initscripts/initscripts-1.0/openprotium/checkroot (renamed from packages/initscripts/initscripts-1.0/openprotium/checkroot.sh)0
-rw-r--r--packages/initscripts/initscripts-1.0/openprotium/domainname.sh1
-rw-r--r--packages/initscripts/initscripts-1.0/openprotium/mountall.sh1
-rw-r--r--packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh2
-rwxr-xr-xpackages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot (renamed from packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh1
-rwxr-xr-xpackages/initscripts/initscripts-1.0/oplinux/checkroot (renamed from packages/initscripts/initscripts-1.0/oplinux/checkroot.sh)0
-rw-r--r--packages/initscripts/initscripts-slugos_1.0.bb13
-rw-r--r--packages/initscripts/initscripts_1.0.bb8
-rw-r--r--packages/iscsi-target/files/2.6.29.patch72
-rw-r--r--packages/iscsi-target/iscsi-target_0.4.17.bb3
-rw-r--r--packages/jack/jack_0.116.2.bb32
-rw-r--r--packages/jamvm/jamvm-native_1.5.1.bb4
-rw-r--r--packages/jamvm/jamvm-native_1.5.2.bb4
-rw-r--r--packages/jamvm/jamvm.inc2
-rw-r--r--packages/jamvm/jamvm_1.4.5.bb2
-rw-r--r--packages/jamvm/jamvm_1.5.0.bb2
-rw-r--r--packages/jamvm/jamvm_1.5.1.bb12
-rw-r--r--packages/jamvm/jamvm_1.5.2.bb12
-rw-r--r--packages/kaeilos/kaeilos-version.bb18
-rw-r--r--packages/kexecboot/device_table-oldmmc.txt36
-rw-r--r--packages/kexecboot/files/angstrom/logo-img.h246
-rw-r--r--packages/kexecboot/files/angstrom/logo.pngbin0 -> 3467 bytes
-rw-r--r--packages/kexecboot/files/logo-img.h271
-rw-r--r--packages/kexecboot/files/logo.pngbin0 -> 3803 bytes
-rw-r--r--packages/kexecboot/initramfs-kexecboot-image.bb11
-rw-r--r--packages/kexecboot/kexecboot-0.4/fb-render-16bit.patch21
-rw-r--r--packages/kexecboot/kexecboot-cfg_0.1.bb25
-rw-r--r--packages/kexecboot/kexecboot.inc39
-rw-r--r--packages/kexecboot/kexecboot_0.4.bb33
-rw-r--r--packages/kexecboot/kexecboot_0.5.bb4
-rw-r--r--packages/kexecboot/kexecboot_git.bb15
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.21-hh20/hx4700/defconfig652
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.24/akita/defconfig598
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.24/c7x0/defconfig601
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.24/poodle/defconfig33
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.24/spitz/defconfig600
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.26/akita/defconfig603
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.26/c7x0/defconfig616
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.26/poodle/defconfig1757
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.26/spitz/defconfig604
-rw-r--r--packages/kexecboot/linux-kexecboot.inc6
-rw-r--r--packages/kexecboot/linux-kexecboot_2.6.21-hh20.bb10
-rw-r--r--packages/kexecboot/linux-kexecboot_2.6.24.bb5
-rw-r--r--packages/kexecboot/linux-kexecboot_2.6.26.bb78
-rw-r--r--packages/konqueror/files/fix_KDE_LDPATH_HACK.patch27
-rw-r--r--packages/konqueror/files/fix_acinclude.patch5897
-rw-r--r--packages/konqueror/konqueror-embedded_20070316.bb7
-rw-r--r--packages/krb/krb5_1.6.3.bb14
-rw-r--r--packages/libcap/libcap2-2.16/make.patch23
-rw-r--r--packages/libcap/libcap2_2.16.bb31
-rw-r--r--packages/libdaemon/libdaemon_0.10.bb20
-rw-r--r--packages/libdaemon/libdaemon_0.11.bb20
-rw-r--r--packages/libdaemon/libdaemon_0.12.bb20
-rw-r--r--packages/libdaemon/libdaemon_0.13.bb12
-rw-r--r--packages/libdaemon/libdaemon_0.6.bb19
-rw-r--r--packages/libgc/libgc_7.1.bb19
-rw-r--r--packages/libnetfilter-queue/libnetfilter-queue.inc22
-rw-r--r--packages/libnetfilter-queue/libnetfilter-queue_0.0.13.bb30
-rw-r--r--packages/libnetfilter-queue/libnetfilter-queue_0.0.16.bb2
-rw-r--r--packages/libnfnetlink/libnfnetlink_0.0.39.bb25
-rw-r--r--packages/libnl/files/fix-includes.patch13
-rw-r--r--packages/libnl/libnl_1.1.bb2
-rw-r--r--packages/libpcap/libpcap-1.0.0/aclocal.patch156
-rw-r--r--packages/libpcap/libpcap-1.0.0/ieee80215-arphrd.patch22
-rw-r--r--packages/libpcap/libpcap-1.0.0/shared.patch0
-rw-r--r--packages/libpcap/libpcap.inc4
-rw-r--r--packages/libpcap/libpcap_1.0.0.bb29
-rw-r--r--packages/libpng/libpng-native_1.2.35.bb4
-rw-r--r--packages/libpng/libpng_1.2.35.bb14
-rw-r--r--packages/libsdl/libsdl-directfb_1.2.11.bb27
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/fix_Makefile.am.patch11
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/fix_configure.in.patch10
-rw-r--r--packages/libsdl/libsdl-qpe_1.2.9.bb4
-rw-r--r--packages/libsidplay/libsidplay_1.36.59.bb12
-rw-r--r--packages/libsmi/libsmi_0.4.8.bb15
-rw-r--r--packages/libssh/files/libssh_libdir_fix.patch13
-rw-r--r--packages/libssh/libssh_0.11.bb2
-rw-r--r--packages/libssh/libssh_0.2.bb28
-rw-r--r--packages/libtiff/tiff_3.8.2.bb17
-rw-r--r--packages/libtool/libtool-cross_2.2.4.bb12
-rw-r--r--packages/libtool/libtool-native_2.2.4.bb8
-rw-r--r--packages/libtool/libtool.inc1
-rw-r--r--packages/libtool/libtool_2.2.4.bb5
-rw-r--r--packages/libxsettings/libxsettings_0.11.bb6
-rw-r--r--packages/linux/at91_2.6.28.bb36
-rw-r--r--packages/linux/linux-2.6.24/oxnas/defconfig (renamed from packages/linux/linux-2.6.24/oxe810/defconfig)0
-rw-r--r--packages/linux/linux-2.6.24/oxnas/oxnas-pci-config-delay.patch56
-rw-r--r--packages/linux/linux-2.6.24/oxnas/oxnas-pci-max-size.patch21
-rw-r--r--packages/linux/linux-2.6.24/oxnas/oxnas-uart.patch176
-rw-r--r--packages/linux/linux-2.6.24/oxnas/oxnas.diff (renamed from packages/linux/linux-2.6.24/oxe810/oxe810.diff)0
-rw-r--r--packages/linux/linux-2.6.24/simpad/defconfig16
-rw-r--r--packages/linux/linux-2.6.25.20/ronetix-pm9261/defconfig1346
-rw-r--r--packages/linux/linux-2.6.25.20/ronetix-pm9263/defconfig1344
-rw-r--r--packages/linux/linux-2.6.27/boc01/005-090112-isl12024.patch950
-rw-r--r--packages/linux/linux-2.6.27/boc01/005-090217-isl12024.patch669
-rw-r--r--packages/linux/linux-2.6.27/boc01/012-090115-cy3218-btns.patch406
-rw-r--r--packages/linux/linux-2.6.27/boc01/012-090219-capsense.patch865
-rw-r--r--packages/linux/linux-2.6.27/boc01/013-090116-lcd.patch933
-rw-r--r--packages/linux/linux-2.6.27/boc01/013-090209-lcd.patch933
-rw-r--r--packages/linux/linux-2.6.27/boc01/014-090115-pm-wakeup.patch195
-rw-r--r--packages/linux/linux-2.6.27/boc01/014-090209-pm-wakeup.patch195
-rw-r--r--packages/linux/linux-2.6.27/boc01/boc01.dts7
-rw-r--r--packages/linux/linux-2.6.27/boc01/defconfig31
-rw-r--r--packages/linux/linux-2.6.28+2.6.29-rc6/tosa/0001--tosa-Set-a-bus_id-for-the-tc6393xb-so-that-the-clk.patch26
-rw-r--r--packages/linux/linux-2.6.28+2.6.29-rc6/tosa/defconfig2010
-rw-r--r--packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch106
-rw-r--r--packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch1228
-rw-r--r--packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch25
-rw-r--r--packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch25
-rw-r--r--packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch24
-rw-r--r--packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch722
-rw-r--r--packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch107
-rw-r--r--packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch70
-rw-r--r--packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch2629
-rw-r--r--packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch59
-rw-r--r--packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch803
-rw-r--r--packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch981
-rw-r--r--packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch528
-rw-r--r--packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch27
-rw-r--r--packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch43
-rw-r--r--packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch242
-rw-r--r--packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch137
-rw-r--r--packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch473
-rw-r--r--packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch103
-rw-r--r--packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch323
-rw-r--r--packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch40
-rw-r--r--packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch93
-rw-r--r--packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch148
-rw-r--r--packages/linux/linux-2.6.28/collie/defconfig1677
-rw-r--r--packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2 (renamed from packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2)bin67725 -> 67725 bytes
-rw-r--r--packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2 (renamed from packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-exp.patch.bz2)bin56841 -> 56841 bytes
-rw-r--r--packages/linux/linux-2.6.28/ronetix-pm9263/defconfig1438
-rw-r--r--packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch1751
-rw-r--r--packages/linux/linux-2.6.28/stb225/uImage.patch23
-rw-r--r--packages/linux/linux-2.6.28/tosa/commit-31c9b2867
-rw-r--r--packages/linux/linux-2.6.28/tosa/commit-ddfb33c39
-rw-r--r--packages/linux/linux-2.6.28/tosa/commit-f34ee7968
-rw-r--r--packages/linux/linux-davinci-2.6.25/8250_davinci.patch (renamed from packages/linux/linux-davinci/8250_davinci.patch)0
-rw-r--r--packages/linux/linux-davinci-2.6.25/davinci-dvevm/defconfig (renamed from packages/linux/linux-davinci/davinci-dvevm/defconfig)0
-rw-r--r--packages/linux/linux-davinci-2.6.25/davinci-dvevm/defconfig.eabi (renamed from packages/linux/linux-davinci/davinci-dvevm/defconfig.eabi)0
-rw-r--r--packages/linux/linux-davinci-2.6.25/davinci-sffsdr/defconfig1441
-rw-r--r--packages/linux/linux-davinci-2.6.25/davinci-sffsdr/sffsdr.patch (renamed from packages/linux/linux-davinci/davinci-sffsdr/sffsdr.patch)0
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0001-USB-musb-cppi-bugfixes.patch72
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0002-ARM-Mark-unsupported-syscalls-as-IGNORE.patch31
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0003-Add-macros-for-enabling-a-UART.patch29
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0004-Davinci-Enable-MAC-address-to-be-specified-on-kerne.patch54
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0005-Add-DAS-Mini-DAS-and-AFE-USB-machine-types.patch135
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0006-ALSA-ASoC-DaVinci-Fix-SFFSDR-compilation-error.patch65
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0007-ALSA-ASoC-Davinci-Fix-SFFSDR-FPGA-module-codec-FS.patch57
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0008-ALSA-ASoC-Davinci-Fix-incorrect-machine-type-for.patch26
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0009-sound-ASoC-Fix-DaVinci-module-unload-error.patch54
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0010-Add-generic-FPGA-bitstream-loader-driver.patch1512
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0011-Add-lyrvpss-example-driver-for-the-SFFSDR-board.patch919
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/0012-Update-SFFSDR-to-support-FPGA-and-lyrvpss-drivers.patch934
-rw-r--r--packages/linux/linux-davinci/davinci-sffsdr/defconfig825
-rw-r--r--packages/linux/linux-davinci_2.6.25.bb11
-rw-r--r--packages/linux/linux-davinci_2.6.27.bb2
-rw-r--r--packages/linux/linux-davinci_2.6.x+git-davinci.bb18
-rw-r--r--packages/linux/linux-davinci_git.bb32
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/a1200/defconfig1586
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/a780/defconfig1590
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/e680/defconfig1584
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX77
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/a1200-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/a1200-flip.patch47
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/a1200-kbd.patch98
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/a1200-pcap.patch83
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch38
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-flip.patch46
-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.patch187
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch90
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-ts.patch39
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-vibrator.patch102
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/asoc-fix-loopback.patch14
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/asoc-pxa-ssp.patch755
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log299
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/e6-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/e6-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/e6-pcap.patch83
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/e6-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch38
-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.patch300
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch45
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-mci.patch128
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch90
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch1302
-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.patch338
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-core.patch1016
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch269
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-enable-stuart.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/ezx-eoc.patch294
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-mtd-map.patch280
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch848
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch124
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-serial-bug-workaround.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/i2c-core-fix-a1200.patch15
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/index.html72
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/lcd_18BPP_support.diff270
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/mtdfix.patch41
-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.patch363
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/pxa-kbd.patch534
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-fix-a1200.patch36
-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/series106
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/rokre2/defconfig1583
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/rokre6/defconfig1586
-rw-r--r--packages/linux/linux-ezx-2.6.21/update_patches.sh16
-rwxr-xr-xpackages/linux/linux-ezx-2.6.23/a1200/defconfig1208
-rwxr-xr-xpackages/linux/linux-ezx-2.6.23/a780/defconfig1502
-rwxr-xr-xpackages/linux/linux-ezx-2.6.23/e680/defconfig1584
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX77
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch47
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch98
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a1200-pcap.patch83
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch38
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch46
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-leds.patch187
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch125
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch102
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/asoc-fix-loopback.patch14
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch755
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/binutils-buildid-arm.patch16
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/defconfig-a12001208
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/defconfig-a7801214
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/defconfig-e21189
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/defconfig-e61203
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/defconfig-e6801214
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log299
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e6-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch83
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch38
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch93
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-leds.patch300
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch126
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch1302
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch203
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch340
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-core.patch1016
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch269
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-enable-stuart.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-eoc.patch295
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch309
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-pcap.patch849
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-pm.patch108
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-fix-init-errorpath.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-fix-makefile.patch14
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-fix-tty-driver.patch125
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-fix.patch164
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-ifdef-ezx-features.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch297
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-remove-flipbuffers.patch269
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-remove-get_halted_bit.patch22
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux-remove-usbh_finished_resume.patch22
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux_cli.patch5396
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/mux_debug.patch551
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1108
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch363
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/pxa-kbd.patch545
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch3113
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/pxa27x_overlay-r7.patch2436
-rw-r--r--packages/linux/linux-ezx-2.6.23/patches/series106
-rwxr-xr-xpackages/linux/linux-ezx-2.6.23/rokre2/defconfig1189
-rwxr-xr-xpackages/linux/linux-ezx-2.6.23/rokre6/defconfig1203
-rw-r--r--packages/linux/linux-ezx-2.6.23/update_patches.sh16
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/a1200/defconfig1208
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/a780/defconfig1502
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/e680/defconfig1584
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX77
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch47
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch98
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch66
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch38
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch46
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch187
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch125
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch102
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch14
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch755
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch16
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-a12001205
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-a7801502
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-e21188
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-e61200
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-e6801211
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log299
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch66
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch38
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch93
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch300
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch126
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch1302
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch203
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch351
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch1042
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch269
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch295
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch309
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch852
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch108
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch14
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch125
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch164
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch297
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch269
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch22
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch22
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch5396
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch551
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch363
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch547
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch3114
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch2439
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml1204
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml1330
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml282
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml781
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml882
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml100
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml113
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/series105
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/rokre2/defconfig1189
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/rokre6/defconfig1203
-rw-r--r--packages/linux/linux-ezx-2.6.24/update_patches.sh16
-rw-r--r--packages/linux/linux-ezx/logo_linux_clut224.ppm226084
-rw-r--r--packages/linux/linux-ezx_2.6.21.bb116
-rw-r--r--packages/linux/linux-ezx_2.6.23.bb112
-rw-r--r--packages/linux/linux-ezx_2.6.24.bb111
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig2
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig2
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb2
-rw-r--r--packages/linux/linux-linkstationppc/defconfig95
-rw-r--r--packages/linux/linux-linkstationppc/fw-and-powerpc-install.patch36
-rw-r--r--packages/linux/linux-linkstationppc_2.6.27.10.bb22
-rw-r--r--packages/linux/linux-linkstationppc_2.6.28.4.bb23
-rw-r--r--packages/linux/linux-msm7xxxx/htcblackstone/defconfig1139
-rw-r--r--packages/linux/linux-msm7xxxx/htcdiamond/defconfig354
-rw-r--r--packages/linux/linux-msm7xxxx/htckaiser/defconfig288
-rw-r--r--packages/linux/linux-msm7xxxx/htcnike/defconfig1009
-rw-r--r--packages/linux/linux-msm7xxxx/htcpolaris/defconfig400
-rw-r--r--packages/linux/linux-msm7xxxx/htcraphael/defconfig354
-rw-r--r--packages/linux/linux-msm7xxxx/htctitan/defconfig250
-rw-r--r--packages/linux/linux-msm7xxxx/htcvogue/defconfig344
-rw-r--r--packages/linux/linux-msm7xxxx_git.bb33
-rw-r--r--packages/linux/linux-n1200/defconfig90
-rw-r--r--packages/linux/linux-n1200_2.6.27-rc9+git.bb2
-rw-r--r--packages/linux/linux-omap-2.6.26/omap3evm/defconfig2
-rw-r--r--packages/linux/linux-omap-2.6.27/omap3evm/defconfig2
-rw-r--r--packages/linux/linux-omap-2.6.27/omap5912osk/defconfig524
-rw-r--r--packages/linux/linux-omap-2.6.28/add-resizer-driver.patch19823
-rw-r--r--packages/linux/linux-omap-2.6.28/beagleboard/defconfig2
-rw-r--r--packages/linux/linux-omap-2.6.28/omap3-pandora/defconfig2
-rw-r--r--packages/linux/linux-omap-2.6.28/omap3evm/defconfig2
-rw-r--r--packages/linux/linux-omap-2.6.28/overo/defconfig2175
-rw-r--r--packages/linux/linux-omap-2.6.28/overo/overo-ehci.patch113
-rw-r--r--packages/linux/linux-omap-pm/0004-DSS-support-for-Beagle-Board.patch10
-rw-r--r--packages/linux/linux-omap-pm/add-cpufreq-for-omap3evm.diff28
-rw-r--r--packages/linux/linux-omap-pm/beagle-cpufreq.diff86
-rw-r--r--packages/linux/linux-omap-pm/beagleboard/defconfig241
-rw-r--r--packages/linux/linux-omap-pm/omap3-pandora/defconfig2
-rw-r--r--packages/linux/linux-omap-pm/omap3evm/defconfig36
-rw-r--r--packages/linux/linux-omap-pm/register-all-OPPs.diff12
-rw-r--r--packages/linux/linux-omap-pm/usbttyfix.patch29
-rw-r--r--packages/linux/linux-omap-pm_git.bb10
-rw-r--r--packages/linux/linux-omap/0001-board-omap3beagle-set-i2c-3-to-100kHz.patch30
-rw-r--r--packages/linux/linux-omap/beagleboard/defconfig2
-rw-r--r--packages/linux/linux-omap/omap3-pandora/defconfig2
-rw-r--r--packages/linux/linux-omap/omap3evm/defconfig2
-rw-r--r--packages/linux/linux-omap/overo/defconfig1967
-rw-r--r--packages/linux/linux-omap/usbttyfix.patch29
-rw-r--r--packages/linux/linux-omap2-git/omap3evm/defconfig2
-rw-r--r--packages/linux/linux-omap_2.6.28.bb13
-rw-r--r--packages/linux/linux-omap_git.bb2
-rw-r--r--packages/linux/linux-omapzoom/omapzoom/defconfig1832
-rw-r--r--packages/linux/linux-omapzoom_git.bb23
-rw-r--r--packages/linux/linux-openezx-devel_svn.bb64
-rw-r--r--packages/linux/linux-openmoko-2.6.28/0001-squashfs-with-lzma.patch5342
-rw-r--r--packages/linux/linux-openmoko-2.6.28/0002-squashfs-initrd.patch55
-rw-r--r--packages/linux/linux-openmoko-2.6.28/0003-squashfs-force-O2.patch17
-rw-r--r--packages/linux/linux-openmoko-2.6.28/0004-squashfs-Kconfig.patch61
-rw-r--r--packages/linux/linux-openmoko-2.6.28/0005-squashfs-Makefile.patch12
-rw-r--r--packages/linux/linux-openmoko-2.6.28/defconfig-oe.patch25
-rw-r--r--packages/linux/linux-openmoko-2.6.28/openwrt-ledtrig-netdev.patch474
-rw-r--r--packages/linux/linux-openmoko-2.6.28_git.bb14
-rw-r--r--packages/linux/linux-openmoko-devel/0001-squashfs-with-lzma.patch5342
-rw-r--r--packages/linux/linux-openmoko-devel/0002-squashfs-initrd.patch55
-rw-r--r--packages/linux/linux-openmoko-devel/0003-squashfs-force-O2.patch17
-rw-r--r--packages/linux/linux-openmoko-devel/0004-squashfs-Kconfig.patch61
-rw-r--r--packages/linux/linux-openmoko-devel/0005-squashfs-Makefile.patch12
-rw-r--r--packages/linux/linux-openmoko-devel/defconfig-oe.patch25
-rw-r--r--packages/linux/linux-openmoko-devel/openwrt-ledtrig-netdev.patch474
-rw-r--r--packages/linux/linux-openmoko-devel_git.bb15
-rw-r--r--packages/linux/linux-openmoko.inc16
-rw-r--r--packages/linux/linux-orion/defconfig271
-rw-r--r--packages/linux/linux-orion_2.6.27.10.bb26
-rw-r--r--packages/linux/linux-orion_2.6.28.4.bb26
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-akita40
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-c7x044
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-spitz57
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-tosa27
-rw-r--r--packages/linux/linux-rp-2.6.26/defconfig-akita378
-rw-r--r--packages/linux/linux-rp-2.6.26/defconfig-c7x0378
-rw-r--r--packages/linux/linux-rp-2.6.26/defconfig-collie8
-rw-r--r--packages/linux/linux-rp-2.6.26/defconfig-poodle6
-rw-r--r--packages/linux/linux-rp-2.6.26/defconfig-spitz95
-rw-r--r--packages/linux/linux-rp.inc22
-rw-r--r--packages/linux/linux-rp_2.6.23.bb2
-rw-r--r--packages/linux/linux-rp_2.6.24.bb8
-rw-r--r--packages/linux/linux-rp_2.6.25+2.6.26-rc4.bb2
-rw-r--r--packages/linux/linux-rp_2.6.26.bb6
-rw-r--r--packages/linux/linux.inc8
-rw-r--r--packages/linux/linux/defconfig989
-rw-r--r--packages/linux/linux/patch-2.6.28-gc32569
-rw-r--r--packages/linux/linux/tosa/defconfig1988
-rw-r--r--packages/linux/linux/vortex86sx/defconfig2130
-rw-r--r--packages/linux/linux_2.6.24.bb11
-rw-r--r--packages/linux/linux_2.6.25.20.bb32
-rw-r--r--packages/linux/linux_2.6.27.bb10
-rw-r--r--packages/linux/linux_2.6.28.bb50
-rw-r--r--packages/linux/linux_2.6.29-rc5.bb13
-rw-r--r--packages/linux/linux_2.6.29-rc6.bb19
-rw-r--r--packages/llvm/llvm-native_2.5.bb15
-rw-r--r--packages/lmbench/lmbench/lmbench-run2
-rw-r--r--packages/lmbench/lmbench_2.0.4.bb2
-rw-r--r--packages/lmbench/lmbench_2.5.bb2
-rw-r--r--packages/lowpan-utils/lowpan-utils_git.bb21
-rw-r--r--packages/ltp/ltp-20090131/cross-compile.patch352
-rw-r--r--packages/ltp/ltp-20090131/fix-tcore_patch_test_suites.patch20
-rw-r--r--packages/ltp/ltp-20090131/no-IDcheck.patch17
-rw-r--r--packages/ltp/ltp-20090131/no_epoll_create2_mips.patch17
-rw-r--r--packages/ltp/ltp-20090131/no_hyperthreading_tests.patch14
-rw-r--r--packages/ltp/ltp-20090131/runltp-path.patch17
-rw-r--r--packages/ltp/ltp_20090131.bb75
-rw-r--r--packages/lyx/files/no-session-manager.patch20
-rw-r--r--packages/lyx/lyx_1.4.1.bb24
-rw-r--r--packages/lyx/lyx_1.4.4.bb24
-rw-r--r--packages/lyx/lyx_1.5.1.bb25
-rw-r--r--packages/lyx/lyx_1.6.1.bb28
-rw-r--r--packages/maemo/osso-esd/qa-silence.patch13
-rw-r--r--packages/maemo/osso-esd_0.5.bb6
-rw-r--r--packages/maemo4/libosso/libosso-dont-use-inline.patch47
-rw-r--r--packages/maemo4/libosso_2.13.bb3
-rw-r--r--packages/make/mingw-make-canadian-sdk_3.81.bb16
-rw-r--r--packages/matchbox-panel/matchbox-panel-0.9.3/mb-applet-system-monitor-crash.patch85
-rw-r--r--packages/matchbox-panel/matchbox-panel_0.9.3.bb5
-rw-r--r--packages/mbw/mbw_1.1.bb14
-rw-r--r--packages/mc/mc-4.6.2/00-70-utf8-common.patch46
-rw-r--r--packages/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch21
-rw-r--r--packages/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch63
-rw-r--r--packages/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch23
-rw-r--r--packages/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch17
-rw-r--r--packages/mc/mc-4.6.2/01_ftpfs_symlink.patch32
-rw-r--r--packages/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch11
-rw-r--r--packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch312
-rw-r--r--packages/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch53
-rw-r--r--packages/mc/mc-4.6.2/cross-compile.patch16
-rw-r--r--packages/mc/mc-4.6.2/mc-cursor-appearance.patch52
-rw-r--r--packages/mc/mc-4.6.2/mc-esc-seq.patch11
-rw-r--r--packages/mc/mc-4.6.2/mc-utf8-look-and-feel.patch206
-rw-r--r--packages/mc/mc-4.6.2/mc-utf8-nlink.patch11
-rw-r--r--packages/mc/mc-4.6.2/mc-utf8-slang-codeset.patch20
-rw-r--r--packages/mc/mc-4.6.2/mc-utf8.patch5357
-rw-r--r--packages/mc/mc-4.6.2/mhl-stdbool.patch16
-rw-r--r--packages/mc/mc-4.6.2/multi-press-f-keys.patch55
-rw-r--r--packages/mc/mc.inc45
-rw-r--r--packages/mc/mc_4.6.2.bb76
-rw-r--r--packages/meta/meta-toolchain-slugos.bb9
-rwxr-xr-xpackages/meta/run-postinsts/run-postinsts36
-rw-r--r--packages/meta/run-postinsts/run-postinsts.awk30
-rw-r--r--packages/meta/run-postinsts_1.0.bb30
-rw-r--r--packages/meta/slugos-packages.bb6
-rw-r--r--packages/mingw/mingw-runtime-headers_3.15.2.bb3
-rw-r--r--packages/mingw/mingw-runtime_3.15.2.bb7
-rw-r--r--packages/mini-httpd/.mini-httpd_1.19.bb.swpbin0 -> 12288 bytes
-rw-r--r--packages/mini-httpd/files/init70
-rw-r--r--packages/mini-httpd/files/mini-httpd.conf37
-rw-r--r--packages/mini-httpd/files/new-bindir-mandir.patch15
-rw-r--r--packages/mini-httpd/files/remove-CC.patch13
-rw-r--r--packages/mini-httpd/mini-httpd_1.19.bb36
-rw-r--r--packages/minicom/minicom_2.3.bb11
-rw-r--r--packages/mktemp/files/add_destdir.patch20
-rw-r--r--packages/mktemp/files/disable-strip.patch12
-rw-r--r--packages/mktemp/mktemp_1.6.bb17
-rw-r--r--packages/modphp/modphp5.inc5
-rw-r--r--packages/modphp/modphp_5.1.6.bb2
-rw-r--r--packages/moin/moin_1.8.1.bb9
-rw-r--r--packages/motion/motion-3.2.11/ffmpeg-0.4.9.15594svn-20081010.diff14
-rw-r--r--packages/motion/motion_3.2.11.bb7
-rw-r--r--packages/mpeg-encode/files/fixup.patch76
-rw-r--r--packages/mpeg-encode/mpeg-encode_1.5b.bb16
-rw-r--r--packages/mtd/mtd-utils_1.2.0+git.bb1
-rw-r--r--packages/mumpot/files/mumpot-cyclemap.desktop2
-rw-r--r--packages/mumpot/files/mumpot-mapnik.desktop2
-rw-r--r--packages/mumpot/files/mumpot-tah.desktop2
-rw-r--r--packages/mumpot/mumpot_0.3.1.bb18
-rw-r--r--packages/mumpot/mumpot_0.4.bb (renamed from packages/mumpot/mumpot_0.3.2.bb)0
-rw-r--r--packages/musicpd/gmpc_0.13.0.bb12
-rw-r--r--packages/musicpd/gmpc_0.17.96.bb22
-rw-r--r--packages/musicpd/libmpd_0.17.96.bb12
-rw-r--r--packages/musicpd/libmpd_svn.bb21
-rw-r--r--packages/musicpd/mpc_0.12.1.bb10
-rw-r--r--packages/musicpd/mpc_0.15.bb10
-rw-r--r--packages/musicpd/mpd-alsa_0.14.2.bb62
-rw-r--r--packages/musicpd/mpd-alsa_svn.bb58
-rw-r--r--packages/musicpd/mpd/mpd.conf338
-rw-r--r--packages/musicpd/mpd_0.14.2.bb44
-rw-r--r--packages/musicpd/mpd_svn.bb38
-rw-r--r--packages/mutagen/mutagen_1.15.bb9
-rw-r--r--packages/mysql/mysql_4.1.22.bb3
-rw-r--r--packages/navit/navit_0.1.0.bb5
-rw-r--r--packages/ncurses/ncurses.inc70
-rw-r--r--packages/ncurses/ncurses_5.4.bb4
-rw-r--r--packages/neon/files/gnutls-2.patch11
-rw-r--r--packages/neon/neon_0.25.5.bb5
-rw-r--r--packages/net-snmp/net-snmp.inc97
-rw-r--r--packages/net-snmp/net-snmp_5.1.2.bb51
-rw-r--r--packages/net-snmp/net-snmp_5.4.1.bb47
-rw-r--r--packages/net-snmp/net-snmp_svn.bb27
-rw-r--r--[-rwxr-xr-x]packages/netatalk/files/init68
-rw-r--r--packages/netatalk/files/netatalk.conf44
-rw-r--r--packages/netatalk/netatalk_2.0.3.bb52
-rw-r--r--packages/netbase/netbase/om-3d7k/interfaces21
-rw-r--r--packages/netbase/netbase/om-gta01/interfaces2
-rw-r--r--packages/netbase/netbase/om-gta02/interfaces2
-rw-r--r--packages/netbase/netbase/ronetix-pm9261/interfaces72
-rw-r--r--packages/netbase/netbase/ronetix-pm9263/interfaces72
-rw-r--r--packages/netbase/netbase_4.21.bb22
-rw-r--r--packages/networkmanager/cnetworkmanager_git.bb21
-rw-r--r--packages/networkmanager/files/008-BACKEND-debian-fallback-to-generic-loopback.loom.patch64
-rw-r--r--packages/networkmanager/files/02-dbus_access_network_manager.patch14
-rw-r--r--packages/networkmanager/files/25NetworkManager4
-rw-r--r--packages/networkmanager/files/add_probe_for_v250_modems.patch342
-rw-r--r--packages/networkmanager/files/adding_no_scan_by_default.patch12
-rw-r--r--packages/networkmanager/files/avoid_frequent_scan.patch226
-rw-r--r--packages/networkmanager/files/cx3110_bring_up.patch19
-rw-r--r--packages/networkmanager/files/define_kernel_types_for_old_linux_headers.patch15
-rw-r--r--packages/networkmanager/files/define_kernel_types_for_old_linux_headers_and_warn_functions_from_glib_2_16.patch57
-rw-r--r--packages/networkmanager/files/fix_seg_fault.patch13
-rw-r--r--packages/networkmanager/files/mamona/25NetworkManager30
-rw-r--r--packages/networkmanager/files/remove-gtk-doc-make.patch11
-rw-r--r--packages/networkmanager/netm-cli-0.2/scan_support.patch69
-rw-r--r--packages/networkmanager/netm-cli_0.2.bb13
-rw-r--r--packages/networkmanager/netm-cli_git.bb15
-rw-r--r--packages/networkmanager/networkmanager-0.7.inc68
-rwxr-xr-xpackages/networkmanager/networkmanager-0.7/NetworkManager69
-rw-r--r--packages/networkmanager/networkmanager-0.7/cx3110_bring_up.patch20
-rw-r--r--packages/networkmanager/networkmanager-0.7/disable_wireless_by_default.patch22
-rw-r--r--packages/networkmanager/networkmanager-0.7/nm-system-settings.conf6
-rw-r--r--packages/networkmanager/networkmanager-applet_0.6.6.bb15
-rw-r--r--packages/networkmanager/networkmanager-pre0.7.inc79
-rw-r--r--packages/networkmanager/networkmanager.inc49
-rw-r--r--packages/networkmanager/networkmanager_0.6.5.bb9
-rw-r--r--packages/networkmanager/networkmanager_0.6.6.bb19
-rw-r--r--packages/networkmanager/networkmanager_0.7.bb25
-rw-r--r--packages/networkmanager/networkmanager_0.7olpc.bb11
-rw-r--r--packages/networkmanager/networkmanager_svn.bb60
-rw-r--r--packages/nfs-utils/nfs-utils-1.1.2/nfs-utils-tools-unset-cflags.patch92
-rw-r--r--packages/nfs-utils/nfs-utils_1.1.2.bb3
-rw-r--r--packages/nonworking/e2fsprogs/e2fsprogs_1.41.2.bb (renamed from packages/e2fsprogs/e2fsprogs_1.41.2.bb)0
-rw-r--r--packages/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch120
-rw-r--r--packages/nrlolsr/nrlolsr_7.8.1.bb27
-rw-r--r--packages/ntfs-3g/ntfs-3g_1.0.bb2
-rw-r--r--packages/ntfs-3g/ntfs-3g_2009.1.1.bb12
-rw-r--r--packages/ntpclient/ntpclient_2007_365.bb11
-rw-r--r--packages/numptyphysics/numptyphysics/numptyphysics.desktop2
-rw-r--r--packages/numptyphysics/numptyphysics_svn.bb2
-rw-r--r--packages/ogre/files/ogre-egl-update.diff165
-rw-r--r--packages/ogre/freeimage_3.11.0.bb29
-rw-r--r--packages/ogre/ogre-egl_svn.bb44
-rw-r--r--packages/ogre/wgois_1.2.0.bb15
-rw-r--r--packages/opkg/files/opkg_unarchive.patch13
-rw-r--r--packages/opkg/files/opkg_wget_nogpg_04_default_tmpdir.patch20
-rw-r--r--packages/opkg/opkg-native_svn.bb2
-rw-r--r--packages/opkg/opkg-nogpg-nocurl_svn.bb3
-rw-r--r--packages/opkg/opkg-nogpg_svn.bb2
-rw-r--r--packages/opkg/opkg-sdk_svn.bb2
-rw-r--r--packages/opkg/opkg.inc3
-rw-r--r--packages/opkg/opkg_svn.bb2
-rw-r--r--packages/parted/files/parted-1.8.x.patch1492
-rw-r--r--packages/parted/files/syscalls.h166
-rw-r--r--packages/parted/files/syscalls.patch10
-rw-r--r--packages/parted/files/use_llseek_syscall.patch28
-rw-r--r--packages/parted/parted-1.8.0/memory_allocation.patch42
-rw-r--r--packages/parted/parted_1.6.23.bb12
-rw-r--r--packages/parted/parted_1.6.25.1.bb17
-rw-r--r--packages/parted/parted_1.8.0.bb18
-rw-r--r--packages/parted/parted_1.8.2.bb16
-rw-r--r--packages/parted/parted_1.8.7.bb30
-rw-r--r--packages/parted/parted_1.8.8.bb10
-rw-r--r--packages/pax-utils/pax-utils-native_0.1.19.bb12
-rw-r--r--packages/pax-utils/pax-utils_0.1.13.bb4
-rw-r--r--packages/pax-utils/pax-utils_0.1.19.bb17
-rw-r--r--packages/pciutils/pciutils-3.1.2/pciutils.patch362
-rw-r--r--packages/pciutils/pciutils_3.1.2.bb59
-rw-r--r--packages/perl/libdate-manip-perl-native_5.54.bb5
-rw-r--r--packages/perl/libdate-manip-perl_5.54.bb14
-rw-r--r--packages/perl/libdbd-mysql-perl-native_4.010.bb8
-rw-r--r--packages/perl/libdbd-mysql-perl.inc10
-rw-r--r--packages/perl/libdbd-mysql-perl_4.010.bb13
-rw-r--r--packages/perl/libdbi-perl-native_1.607.bb5
-rw-r--r--packages/perl/libdbi-perl_1.607.bb15
-rw-r--r--packages/perl/libdevice-serialport-perl-native_1.04.bb5
-rw-r--r--packages/perl/libemail-date-format-perl-native_1.002.bb5
-rw-r--r--packages/perl/libemail-date-format-perl_1.002.bb13
-rw-r--r--packages/perl/libhtml-parser-perl_3.60.bb15
-rw-r--r--packages/perl/libhtml-tagset-perl_3.20.bb10
-rw-r--r--packages/perl/libmime-lite-perl-native_3.024.bb5
-rw-r--r--packages/perl/libmime-lite-perl_3.024.bb15
-rw-r--r--packages/perl/libmodule-load-perl-native_0.16.bb5
-rw-r--r--packages/perl/libmodule-load-perl_0.16.bb12
-rw-r--r--packages/perl/libphp-serialization-perl-native_0.30.bb5
-rw-r--r--packages/perl/libphp-serialization-perl_0.30.bb10
-rw-r--r--packages/perl/libsys-mmap-perl-native_0.13.bb5
-rw-r--r--packages/perl/libsys-mmap-perl_0.13.bb10
-rw-r--r--packages/perl/libx10-perl-native_0.03.bb5
-rw-r--r--packages/perl/libx10-perl_0.03.bb10
-rw-r--r--packages/php/php-native.inc2
-rw-r--r--packages/php/php-native_5.2.6.bb2
-rw-r--r--packages/pingus/pingus_0.7.2.bb4
-rw-r--r--packages/pkgconfig/pkgconfig-0.15.0/configure.patch495
-rw-r--r--packages/pkgconfig/pkgconfig-0.15.0/glibconfig-sysdefs.h6
-rw-r--r--packages/pkgconfig/pkgconfig-0.15.0/pkg.m4156
-rw-r--r--packages/pkgconfig/pkgconfig-0.22/autofoo.patch515
-rw-r--r--packages/pkgconfig/pkgconfig-0.22/glibconfig-sysdefs.h6
-rw-r--r--packages/pkgconfig/pkgconfig-0.22/sysrootfix.patch102
-rw-r--r--packages/pkgconfig/pkgconfig-native_0.15.0.bb7
-rw-r--r--packages/pkgconfig/pkgconfig-native_0.22.bb13
-rw-r--r--packages/pkgconfig/pkgconfig-native_0.23.bb2
-rw-r--r--packages/pkgconfig/pkgconfig_0.15.0.bb26
-rw-r--r--packages/pkgconfig/pkgconfig_0.22.bb2
-rw-r--r--packages/pkgconfig/pkgconfig_0.23.bb2
-rw-r--r--packages/pmount/pmount-0.9.18/gettext.patch133
-rw-r--r--packages/pmount/pmount-0.9.18/install.patch15
-rw-r--r--packages/pmount/pmount_0.9.18.bb22
-rwxr-xr-xpackages/pointercal/files/hx4700/pointercal1
-rwxr-xr-xpackages/pointercal/files/omapzoom/pointercalbin0 -> 42 bytes
-rw-r--r--packages/pointercal/pointercal_0.0.bb2
-rw-r--r--packages/popt/popt-1.13/iconv.patch25
-rw-r--r--packages/popt/popt-1.7/mkinstalldirs.patch566
-rw-r--r--packages/popt/popt-native_1.14.bb17
-rw-r--r--packages/popt/popt-native_1.7.bb17
-rw-r--r--packages/popt/popt.inc4
-rw-r--r--packages/popt/popt_1.14.bb18
-rw-r--r--packages/popt/popt_1.7.bb25
-rw-r--r--packages/powervr-drivers/libgles-omap3.inc46
-rwxr-xr-xpackages/powervr-drivers/libgles-omap3/rc.pvr10
-rw-r--r--packages/powervr-drivers/libgles-omap3_3.00.00.05.bb4
-rw-r--r--packages/powervr-drivers/libgles-omap3_3.00.00.06.bb21
-rw-r--r--packages/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch247
-rw-r--r--packages/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff11
-rw-r--r--packages/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb15
-rw-r--r--packages/procps/procps_3.2.7.bb5
-rw-r--r--packages/proftpd/files/make.patch51
-rw-r--r--packages/proftpd/proftpd_1.3.2.bb36
-rw-r--r--packages/psplash/files/kaeilos/psplash-hand-img.h958
-rw-r--r--packages/psplash/files/psplash-init12
-rw-r--r--packages/psplash/psplash-openmoko_svn.bb1
-rw-r--r--packages/psplash/psplash.inc3
-rw-r--r--packages/psplash/psplash_svn.bb2
-rw-r--r--packages/pyneo/epydial_svn.bb34
-rw-r--r--packages/pyneo/gsm0710muxd_1.7.bb21
-rw-r--r--packages/python/divmod.inc17
-rw-r--r--packages/python/files/06-libffi-enable-default-mips.patch12
-rw-r--r--packages/python/python-2.6.1/99-ignore-optimization-flag.patch19
-rw-r--r--packages/python/python-coherence_0.6.0.bb13
-rw-r--r--packages/python/python-coherence_0.6.2.bb20
-rw-r--r--packages/python/python-coherence_svn.bb25
-rw-r--r--packages/python/python-configobj_4.5.3.bb10
-rw-r--r--packages/python/python-divmodaxiom_0.5.30.bb8
-rw-r--r--packages/python/python-divmodepsilon-native_0.5.11.bb11
-rw-r--r--packages/python/python-divmodepsilon_0.5.11.bb7
-rw-r--r--packages/python/python-dweba_0.9.9+1.0.0pre14.bb14
-rw-r--r--packages/python/python-elementtree_1.2.7-20070827-preview.bb14
-rw-r--r--packages/python/python-gdata_1.2.4.bb15
-rw-r--r--packages/python/python-native-2.5.1/bindir-libdir.patch18
-rw-r--r--packages/python/python-native-2.5.1/catchup-with-swig.patch13
-rw-r--r--packages/python/python-native-2.5.1/cross-distutils.patch36
-rw-r--r--packages/python/python-native-2.5.1/default-is-optimized.patch13
-rw-r--r--packages/python/python-native-2.5.1/dont-modify-shebang-line.patch16
-rw-r--r--packages/python/python-native-2.5.1/fix-staging.patch38
-rw-r--r--packages/python/python-nevow_0.9.32.bb10
-rw-r--r--packages/python/python-pycairo_1.4.0.bb2
-rw-r--r--packages/python/python-pycairo_1.8.0.bb2
-rw-r--r--packages/python/python-pycrypto_git.bb13
-rw-r--r--packages/python/python-pyflakes_0.2.1.bb12
-rw-r--r--packages/python/python-pyflakes_0.3.0.bb12
-rw-r--r--packages/python/python-pygobject_2.16.0.bb6
-rw-r--r--packages/python/python-pygtk-1.2_0.6.12.bb8
-rw-r--r--packages/python/python-pylinda_0.6.bb2
-rw-r--r--packages/python/python-spyro_0.9.22.bb13
-rw-r--r--packages/python/python-twisted-native_8.2.0.bb9
-rw-r--r--packages/python/python-twisted_8.2.0.bb212
-rw-r--r--packages/python/python-xappy_0.5.bb2
-rw-r--r--packages/python/python_2.6.1.bb9
-rw-r--r--packages/qhull/qhull_2003.1.bb10
-rw-r--r--packages/qhull/tetgen_1.4.2.bb18
-rw-r--r--packages/qi/files/sanitize-makefile.patch27
-rw-r--r--packages/qi/qi.inc58
-rw-r--r--packages/qi/qi_git.bb6
-rw-r--r--packages/qmake/files/0008-backport-qt-lib-infix.patch33
-rw-r--r--packages/qmake/qmake2-native_2.10a.bb2
-rw-r--r--packages/qt4/qt-embedded-4.4.3/allow-configure-plugins.patch62
-rw-r--r--packages/qt4/qt-embedded.inc46
-rw-r--r--packages/qt4/qt-embedded_4.4.3.bb35
-rw-r--r--packages/qt4/qt4-x11-free_4.4.3.bb2
-rw-r--r--packages/qt4/qt_configuration.inc4
-rw-r--r--packages/qt4/qt_depends.inc2
-rw-r--r--packages/qt4/qt_packaging.inc8
-rw-r--r--packages/qt4/qtopia-core-4.3.3/0004-no-qmake.patch (renamed from packages/qt4/qtopia-core/0004-no-qmake.patch)0
-rw-r--r--packages/qt4/qtopia-core-4.3.3/build-tools.patch (renamed from packages/qt4/qtopia-core/build-tools.patch)0
-rw-r--r--packages/qt4/qtopia-core-4.3.3/linux-oe-qmake.conf (renamed from packages/qt4/qtopia-core/linux-oe-qmake.conf)0
-rw-r--r--packages/qt4/qtopia-core.inc43
-rw-r--r--packages/qt4/qtopia-core_4.3.3.bb44
-rw-r--r--packages/qt4/qtopia-core_4.4.3.bb6
-rw-r--r--packages/resolvconf/resolvconf_1.28.bb28
-rw-r--r--packages/resolvconf/resolvconf_1.43.bb (renamed from packages/resolvconf/resolvconf_1.41.bb)0
-rw-r--r--packages/rpm2cpio/rpm2cpio-native_1.2_2.bb4
-rw-r--r--packages/rt-tests/rt-tests_0.21.bb20
-rw-r--r--packages/rt-tests/rt-tests_0.28.bb20
-rw-r--r--packages/rt2x00/rt2570-k2wrlz_1.6.0.bb2
-rw-r--r--packages/rt2x00/rt2570-k2wrlz_1.6.1.bb2
-rw-r--r--packages/rt2x00/rt2570_1.1.0-b2.bb2
-rw-r--r--packages/rt2x00/rt61-firmware_1.2.bb14
-rw-r--r--packages/rt2x00/rt73-chumby_1.2.bb2
-rw-r--r--packages/rt2x00/rt73-firmware_1.8.bb2
-rw-r--r--packages/rt2x00/rt73-k2wrlz_1.0.0.bb2
-rw-r--r--packages/rt2x00/rt73-k2wrlz_2.0.1.bb2
-rw-r--r--packages/rt2x00/rt73-k2wrlz_3.0.0.bb2
-rw-r--r--packages/ruby/files/openssl.patch156
-rw-r--r--packages/ruby/ruby.inc1
-rw-r--r--packages/samba/files/config-h.patch (renamed from packages/samba/samba-3.2.7/config-h.patch)0
-rw-r--r--packages/samba/files/configure-3.2.8.patch92
-rw-r--r--packages/samba/files/configure-3.3.0.patch85
-rw-r--r--packages/samba/files/mtab.patch (renamed from packages/samba/samba-3.2.7/mtab.patch)0
-rw-r--r--packages/samba/files/smb.conf2
-rw-r--r--packages/samba/files/volatiles.03_samba2
-rw-r--r--packages/samba/samba-3.0.34/smb.conf266
-rw-r--r--packages/samba/samba-3.2.7/configure.patch86
-rw-r--r--packages/samba/samba-3.2.7/smb.conf266
-rw-r--r--packages/samba/samba-ads-3.3.0/wbstatic.patch194
-rw-r--r--packages/samba/samba-ads.inc38
-rw-r--r--packages/samba/samba-ads_3.2.8.bb10
-rw-r--r--packages/samba/samba-ads_3.3.0.bb15
-rw-r--r--packages/samba/samba-basic.inc24
-rw-r--r--packages/samba/samba.inc45
-rw-r--r--packages/samba/samba_3.0.23c.bb16
-rw-r--r--packages/samba/samba_3.0.34.bb19
-rw-r--r--packages/samba/samba_3.2.7.bb27
-rw-r--r--packages/samba/samba_3.2.8.bb24
-rw-r--r--packages/samba/samba_3.3.0.bb34
-rw-r--r--packages/samsung-soc-utils/s3c2410-boot-usb-native_svn.bb (renamed from packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb)0
-rw-r--r--packages/samsung-soc-utils/s3c24xx-gpio_svn.bb (renamed from packages/s3c24xx-utils/s3c24xx-gpio_svn.bb)0
-rw-r--r--packages/samsung-soc-utils/s3c64xx-gpio_svn.bb18
-rw-r--r--packages/samsung-soc-utils/sjf2410-linux-native_svn.bb (renamed from packages/s3c24xx-utils/sjf2410-linux-native_svn.bb)0
-rw-r--r--packages/screen/screen-4.0.2/screen_4.0.2-4.1sarge1.diff.gzbin0 -> 33782 bytes
-rw-r--r--packages/screen/screen-4.0.3/configure.patch970
-rw-r--r--packages/screen/screen_4.0.2.bb2
-rw-r--r--packages/screen/screen_4.0.3.bb17
-rw-r--r--packages/serial-utils/pty-forward-native.bb11
-rw-r--r--packages/serial-utils/serial-forward.bb12
-rw-r--r--packages/setpwc/files/Makefile.patch14
-rw-r--r--packages/setpwc/files/makefile.diff12
-rw-r--r--packages/setpwc/setpwc_0.9.bb18
-rw-r--r--packages/setpwc/setpwc_1.1.bb18
-rw-r--r--packages/setpwc/setpwc_1.2.bb19
-rw-r--r--packages/sg3-utils/files/Makefile.patch246
-rw-r--r--packages/sg3-utils/sg3-utils_1.24.bb13
-rw-r--r--packages/slugos-init/files/setup-optware.sh17
-rw-r--r--packages/slugos-init/files/sysconf8
-rw-r--r--packages/slugos-init/slugos-init_5.0.bb5
-rw-r--r--packages/sun-jre/sun-jre6_1.6.0.10.bb71
-rw-r--r--packages/swig/swig-native_1.3.38.bb7
-rw-r--r--packages/swig/swig_1.3.38.bb16
-rw-r--r--packages/tasks/task-base.bb22
-rw-r--r--packages/tasks/task-beagleboard-demo.bb4
-rw-r--r--packages/tasks/task-boot.bb22
-rw-r--r--packages/tasks/task-cli-tools.bb17
-rw-r--r--packages/tasks/task-fso-compliance.bb6
-rw-r--r--packages/tasks/task-gstreamer-ti.bb18
-rw-r--r--packages/tasks/task-native-sdk.bb4
-rw-r--r--packages/tasks/task-openmoko-feed.bb5
-rw-r--r--packages/tasks/task-python-everything.bb9
-rw-r--r--packages/tasks/task-sdk-bare.bb2
-rw-r--r--packages/tasks/task-slugos-toolchain-target.bb32
-rw-r--r--packages/tcpdump/files/0001-minimal-IEEE802.15.4-allowed.patch26
-rw-r--r--packages/tcpdump/files/no-ipv6-tcpdump4.patch22
-rw-r--r--packages/tcpdump/tcpdump_4.0.0.bb25
-rw-r--r--packages/tnef/tnef.inc7
-rw-r--r--packages/tnef/tnef_1.4.5.bb3
-rw-r--r--packages/tuxmath/tuxmath_1.6.0.bb17
-rw-r--r--packages/tuxmath/tuxmath_1.7.1.bb20
-rw-r--r--packages/tuxtype/tuxtype_1.7.3.bb20
-rw-r--r--packages/tzcode/tzcode-native_2007k.bb8
-rw-r--r--packages/u-boot/u-boot-1.1.2/oxnas.patch (renamed from packages/u-boot/u-boot-1.1.2/oxe810.patch)0
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/001-090115-SPI.patch90
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/001-090205-SPI.patch94
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/007-090112-CAPSENSE.patch546
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/007-090217-CAPSENSE.patch546
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/010-081212-LCD.patch24
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/013-081211-FIX_OOB_8BITS_LARGEPAGE_NAND.patch17
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/013-090206-FIX_OOB_8BITS_LARGEPAGE_NAND.patch29
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/014-081211-BOOT_RESCUE.patch14
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/015-090205-EMC.patch31
-rw-r--r--packages/u-boot/u-boot-1.3.2/boc01/016-090209-PM.patch56
-rw-r--r--packages/u-boot/u-boot_1.1.2.bb4
-rw-r--r--packages/u-boot/u-boot_1.3.2.bb11
-rw-r--r--packages/u-boot/u-boot_git.bb4
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/a780/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/akita/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/arm-linuxthreads.patch218
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/arm/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/armeb/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/armv4t/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/armv5te/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/armv6/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/armv7a/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/avr32/uClibc.machine54
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.config0
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.distro0
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.machine192
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/c7x0/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/cm-x270/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/collie/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/dht-walnut/uClibc.machine54
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/efika/uClibc.machine53
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/ep93xx/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/gumstix-connex/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/gumstix-verdex/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/h2200/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/h3600/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/h3800/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/h3900/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/h4000/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/h5000/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/hx4700/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/iwmmxt/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/ixp4xxbe/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/kilauea/uClibc.machine55
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/linuxthreads-changes.patch291
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/mipsel/uClibc.machine63
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/mpc8313e-rdb/uClibc.machine53
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/mpc8315e-rdb/uClibc.machine53
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/mpc8323e-rdb/uClibc.machine54
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/n1200/uClibc.machine53
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/om-gta01/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/palmld/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/palmz31/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/palmz72/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/poodle/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/pthread_atfork.patch42
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/qemux86/uClibc.machine68
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/sequoia/uClibc.machine53
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/simpad/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/spitz/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/titan/uClibc.machine52
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/uClibc.config0
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/uClibc.distro147
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/uClibc.machine.armv4t69
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/uClibc.machine.armv5te70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/uClibc.machine.iwmmxt70
-rw-r--r--packages/uclibc/uclibc-0.9.30.1/uClibc.machine.strongarm70
-rw-r--r--packages/uclibc/uclibc-initial_0.9.30.1.bb36
-rw-r--r--packages/uclibc/uclibc_0.9.30.1.bb33
-rw-r--r--packages/udev/files/boc01/mount.sh73
-rw-r--r--packages/udev/files/permissions.rules2
-rw-r--r--packages/udev/udev-092/permissions.rules8
-rw-r--r--packages/udev/udev-097/permissions.rules8
-rw-r--r--packages/udev/udev-100/permissions.rules8
-rw-r--r--packages/udev/udev-124/init2
-rw-r--r--packages/udev/udev-124/permissions.rules12
-rw-r--r--packages/udev/udev_092.bb2
-rw-r--r--packages/udev/udev_097.bb2
-rw-r--r--packages/udev/udev_100.bb2
-rw-r--r--packages/udev/udev_124.bb5
-rw-r--r--packages/update-alternatives/update-alternatives-dpkg-1.13.25/paths.patch26
-rw-r--r--packages/update-alternatives/update-alternatives-dpkg-native_1.13.25.bb14
-rw-r--r--packages/update-alternatives/update-alternatives-dpkg_1.13.25.bb12
-rw-r--r--packages/util-linux-ng/util-linux-ng-2.14/util-linux-ng-replace-siginterrupt.patch23
-rw-r--r--packages/util-linux-ng/util-linux-ng_2.14.bb3
-rw-r--r--packages/v4l2apps/libv4l_0.5.8.bb (renamed from packages/v4l2apps/libv4l_0.5.7.bb)0
-rw-r--r--packages/v86d/v86d_0.1.8.bb2
-rw-r--r--packages/vagalume/vagalume_0.7.bb1
-rw-r--r--packages/vala-terminal/vala-terminal_git.bb4
-rw-r--r--packages/vala/files/static-dbus-methods.patch26
-rw-r--r--packages/vala/vala-native_0.5.6.bb5
-rw-r--r--packages/vala/vala-native_0.5.7.bb10
-rw-r--r--packages/vala/vala-native_git.bb14
-rw-r--r--packages/vala/vala.inc11
-rw-r--r--packages/vala/vala_0.5.6.bb2
-rw-r--r--packages/vala/vala_0.5.7.bb2
-rw-r--r--packages/vblade/files/cross.patch12
-rw-r--r--packages/vblade/vblade_19.bb15
-rw-r--r--packages/vlc/libdvdcss_1.2.10.bb4
-rw-r--r--packages/vlc/vlc.inc1
-rw-r--r--packages/vlc/vlc_0.9.8a.bb2
-rw-r--r--packages/vte/files/vte.desktop.in76
-rw-r--r--packages/vte/vte.inc19
-rw-r--r--packages/vte/vte_0.16.13.bb1
-rw-r--r--packages/vte/vte_0.16.14.bb2
-rw-r--r--packages/webkit/webkit-gtk/GNUmakefile.am14
-rw-r--r--packages/webkit/webkit-gtk/acinclude.m4359
-rw-r--r--packages/webkit/webkit-gtk/autogen.sh10
-rw-r--r--packages/webkit/webkit-gtk/configure.ac160
-rw-r--r--packages/webkit/webkit-gtk_svn.bb10
-rw-r--r--packages/wireshark/files/acinclude-net-snmp-fix.patch13
-rw-r--r--packages/wireshark/files/ieee80215.4.patch9
-rw-r--r--packages/wireshark/files/libtool-fix.patch14
-rw-r--r--packages/wireshark/tshark_0.99.4.bb20
-rw-r--r--packages/wireshark/wireshark.inc20
-rw-r--r--packages/wireshark/wireshark_0.99.4.bb18
-rw-r--r--packages/wireshark/wireshark_1.0.5.bb70
-rw-r--r--packages/wpa-supplicant/wpa-supplicant-0.6.inc3
-rw-r--r--packages/wpa-supplicant/wpa-supplicant_0.6.7.bb3
-rw-r--r--packages/wt/wt3-2.99.0/ext.patch7
-rw-r--r--packages/wt/wt3-2.99.0/src.patch18
-rw-r--r--packages/wt/wt3-2.99.0/wgooglemap.patch15
-rw-r--r--packages/wt/wt3_2.99.0.bb41
-rw-r--r--packages/wt/wt_2.2.3.bb32
-rw-r--r--packages/xdiskusage/files/running_from_menu.patch14
-rw-r--r--packages/xdiskusage/files/xdiskusage.desktop10
-rw-r--r--packages/xdiskusage/files/xdiskusage.pngbin0 -> 312 bytes
-rw-r--r--packages/xdiskusage/xdiskusage_1.48.bb26
-rw-r--r--packages/xfsprogs/libattr_2.4.43.bb27
-rw-r--r--packages/xfsprogs/xfsprogs_2.8.16.bb2
-rw-r--r--packages/xorg-driver/xf86-video-geode_2.11.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-glamo_git.bb11
-rw-r--r--packages/xorg-driver/xf86-video-omapfb/omapfb-neon.diff146
-rw-r--r--packages/xorg-driver/xf86-video-omapfb_git.bb7
-rw-r--r--packages/xorg-font/xorg-font-common.inc1
-rw-r--r--packages/xorg-lib/libxfont-native_1.3.2.bb1
-rw-r--r--packages/xorg-lib/pixman/pixman-0.13.2-neon1.patch1702
-rw-r--r--packages/xorg-lib/pixman_0.13.2.bb6
-rw-r--r--packages/xorg-xserver/xserver-xorg-conf/omapzoom/xorg.conf29
-rw-r--r--packages/xorg-xserver/xserver-xorg-conf/overo/xorg.conf29
-rw-r--r--packages/xorg-xserver/xserver-xorg-conf_0.1.bb2
-rw-r--r--packages/xqt2/files/fix_seqfault_qtscreen.patch13
-rw-r--r--packages/xqt2/xqt2_20060509.bb5
-rw-r--r--packages/xqtlauncher/xqtlauncher.bb2
-rwxr-xr-xpackages/xqtlauncher/xqtlauncher/xqtlauncher-convert.sh2
-rw-r--r--packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver2
-rw-r--r--packages/yasr/files/yasr-0.6.9-gcc43.patch26
-rw-r--r--packages/yasr/files/yasr-0.6.9-remove-m4.patch29
-rw-r--r--packages/yasr/yasr_0.6.9.bb16
-rw-r--r--packages/zope/zope-native_3.3.1.bb10
-rw-r--r--packages/zope/zope_3.3.1.bb9
-rw-r--r--packages/zziplib/zziplib.inc12
-rw-r--r--packages/zziplib/zziplib_0.13.49.bb2
1580 files changed, 156467 insertions, 365273 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index c8c154f557..d740f0e9a2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -158,12 +158,10 @@ Machines: mx31ads
Recipes: mx31ads-kernel*
Person: Marcin Juszkiewicz
-Mail: hrw@openembedded.org
-Website: http://blog.haerwu.biz/
-Machines: progear, alix, nokia800, nokia770
+Mail: marcin@juszkiewicz.com.pl
+Website: http://marcin.juszkiewicz.com.pl/
+Machines: progear, alix, at91sam9263ek
Distros: Poky, Ångström
-Interests: WiFi, Native SDK, Nokia tablets
-Recipes: linux, linux-rp, linux-nokia*, gammu, ttf-fonts/*
Person: Matthias 'CoreDump' Hentges
Website: http://www.hentges.net
@@ -173,10 +171,10 @@ Recipes: altboot, webcam-server
Person: Michael 'Mickey' Lauer
Mail: mlauer@vanille-media.de
-Distros: Openmoko, Ångström, Generic
-Machines: om-gta01, om-gta02, nokia810, x86, qemuarm, qemux86
-Interests: Core OE infrastructure, everything Python, EFL
-Recipes: efl1/*, busybox/*, dbus/*, dropbear/*, freesmartphone/*, gstreamer/*, *python*
+Distros: Openmoko, Minimal
+Machines: om-gta01, om-gta02, om-3d7k, htcraphael, a780, a1200, a910
+Interests: Core OE infrastructure, Python, EFL, Vala, Freesmartphone.org
+Recipes: efl1/*, busybox/*, dbus/*, dropbear/*, freesmartphone/*, gstreamer/*, *python*, vala/
Person: Patrick Gfeller
Mail: gfellerpatrik@gmx.net
@@ -243,6 +241,11 @@ Mail: shanevolpe@gmail.com
Machines: logicpd-pxa270, at91-l9260
Recipes: directfb, php
+Person: Steffen Sledz
+Mail: sledz@dresearch.de
+Machines: oxnas
+Recipes: forte
+
Person: Stelios Koroneos
Mail: skoroneos@digital-opsis.com
Website: http://www.digital-opsis.com
@@ -282,7 +285,7 @@ Recipes: vsftpd, zd1211
Person: Henning Heinold 'woglinde'
Mail: heinold@inf.fu-berlin.de
Machines: simpad
-Recipes: classpath-minimal, midpath, cacao-cldc
+Recipes: uclibc, gettext
Person: Philipp Zabel
Mail: philipp.zabel@gmail.com
diff --git a/classes/autotools_stage.bbclass b/classes/autotools_stage.bbclass
new file mode 100644
index 0000000000..3007eef969
--- /dev/null
+++ b/classes/autotools_stage.bbclass
@@ -0,0 +1,6 @@
+inherit autotools
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/classes/base.bbclass b/classes/base.bbclass
index fca0edd2fc..18afc1a2fe 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -71,7 +71,13 @@ def base_chk_file(parser, pn, pv, src_uri, localpath, data):
file.write("[%s]\nmd5=%s\nsha256=%s\n\n" % (src_uri, md5data, shadata))
file.close()
- return False
+ if not bb.data.getVar("OE_STRICT_CHECKSUMS",data, True):
+ bb.note("This package has no entry in checksums.ini, please add one")
+ bb.note("\n[%s]\nmd5=%s\nsha256=%s" % (src_uri, md5data, shadata))
+ return True
+ else:
+ bb.note("Missing checksum")
+ return False
if not md5 == md5data:
bb.note("The MD5Sums did not match. Wanted: '%s' and Got: '%s'" % (md5,md5data))
@@ -867,8 +873,12 @@ python base_eventhandler() {
msg += messages.get(name[5:]) or name[5:]
elif name == "UnsatisfiedDep":
msg += "package %s: dependency %s %s" % (e.pkg, e.dep, name[:-3].lower())
- if msg:
- note(msg)
+
+ # Only need to output when using 1.8 or lower, the UI code handles it
+ # otherwise
+ if (int(bb.__version__.split(".")[0]) <= 1 and int(bb.__version__.split(".")[1]) <= 8):
+ if msg:
+ note(msg)
if name.startswith("BuildStarted"):
bb.data.setVar( 'BB_VERSION', bb.__version__, e.data )
diff --git a/classes/dietlibc.bbclass b/classes/dietlibc.bbclass
new file mode 100644
index 0000000000..7c7b5fec81
--- /dev/null
+++ b/classes/dietlibc.bbclass
@@ -0,0 +1,30 @@
+DEPENDS =+ "dietlibc"
+
+def dietlibc_after_parse(d):
+ import bb
+ # Remove the NLS
+ cfg = oe_filter_out('--(dis|en)able-nls', bb.data.getVar('EXTRA_OECONF', d, 1) or "", d)
+ # Remove shared and static and set it right
+ cfg += " --disable-nls --disbale-shared --enable-static"
+ bb.data.setVar('EXTRA_OECONF', cfg, d)
+ cfg = bb.data.getVar('EXTRA_OEMAKE', d, 1) or ""
+ cfg = oe_filter_out("\'CC=", bb.data.getVar('EXTRA_OEMAKE', d, 1) or "", d)
+ cfgtmp = "\'CC=diet ${CCACHE}"
+ cfgtmp += cfg
+ bb.data.setVar('EXTRA_OEMAKE', cfgtmp, d)
+
+python () {
+ dietlibc_after_parse(d)
+}
+
+set_dietlibc_env () {
+ export CC="diet ${CC}"
+}
+
+do_compile_prepend() {
+ set_dietlibc_env
+}
+
+do_configure_prepend() {
+ set_dietlibc_env
+}
diff --git a/classes/efl.bbclass b/classes/efl.bbclass
index d333c4b434..9d24a0f337 100644
--- a/classes/efl.bbclass
+++ b/classes/efl.bbclass
@@ -15,6 +15,10 @@ AUTOTOOLS_STAGE_PKGCONFIG = "1"
# do NOT inherit pkgconfig here, see note in autotools_stage_all
inherit autotools
+do_configure_prepend() {
+ touch config.rpath
+}
+
do_stage() {
autotools_stage_all
}
diff --git a/classes/failure-cleanup.bbclass b/classes/failure-cleanup.bbclass
new file mode 100644
index 0000000000..3870c756c8
--- /dev/null
+++ b/classes/failure-cleanup.bbclass
@@ -0,0 +1,18 @@
+# This class clean a package on failure, a nice way to keep diskspace usage down and force rebuilds
+
+# we want to be an event handler
+addhandler failure_eventhandler
+python failure_eventhandler() {
+ from bb import build, event, note, error, data
+ from bb.event import NotHandled, getName
+
+ if e.data is None or getName(e) == "MsgNote":
+ return NotHandled
+
+ name = getName(e)
+ if name == "PkgFailed":
+ bb.note("Exectuting -c clean on failed build")
+ build.exec_func('do_clean', e.data)
+
+ return NotHandled
+}
diff --git a/classes/icecc.bbclass b/classes/icecc.bbclass
index 7222f6b349..dce29fbbeb 100644
--- a/classes/icecc.bbclass
+++ b/classes/icecc.bbclass
@@ -83,13 +83,15 @@ def create_cross_env(bb,d):
#check if user has specified a specific icecc-create-env script
#if not use the OE provided one
- cr_env_script = bb.data.getVar('ICECC_ENV_EXEC', d) or bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
+ cr_env_script = bb.data.expand('${ICECC_ENV_EXEC}', d)
+ if cr_env_script == "${ICECC_ENV_EXEC}":
+ cr_env_script = bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
#call the modified create-env script
result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
"--silent",
- os.path.join(ice_dir,target_sys,'bin','gcc'),
- os.path.join(ice_dir,target_sys,'bin','g++'),
- os.path.join(ice_dir,target_sys,'bin','as'),
+ os.path.join(ice_dir, 'bin', "%s-gcc" % target_sys),
+ os.path.join(ice_dir, 'bin', "%s-g++" % target_sys),
+ os.path.join(ice_dir, 'bin', "%s-as" % target_sys),
os.path.join(ice_dir,"ice",cross_name) ) )
return tar_file
@@ -121,7 +123,9 @@ def create_native_env(bb,d):
#check if user has specified a specific icecc-create-env script
#if not use the OE provided one
- cr_env_script = bb.data.getVar('ICECC_ENV_EXEC', d) or bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
+ cr_env_script = bb.data.expand('${ICECC_ENV_EXEC}', d)
+ if cr_env_script == "${ICECC_ENV_EXEC}":
+ cr_env_script = bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
"--silent",
os.popen("%s gcc" % "which").read()[:-1],
@@ -290,9 +294,9 @@ def check_for_kernel(bb,d):
set_icecc_env() {
- ICECC_PATH=${@icc_path(bb,d)}
- if test x${ICECC_PATH} != x; then
- export PATH=${ICECC_PATH}$PATH
+ ICE_PATH=${@icc_path(bb,d)}
+ if test x${ICE_PATH} != x; then
+ export PATH=${ICE_PATH}$PATH
export CCACHE_PATH=$PATH
#check if we are building a kernel and select gcc-cross-kernel
if [ "${@check_for_kernel(bb,d)}" = "yes" ]; then
diff --git a/classes/image.bbclass b/classes/image.bbclass
index c493c73c01..fd0df4df08 100644
--- a/classes/image.bbclass
+++ b/classes/image.bbclass
@@ -2,11 +2,31 @@ inherit rootfs_${IMAGE_PKGTYPE}
LICENSE = "MIT"
PACKAGES = ""
-RDEPENDS += "${IMAGE_INSTALL}"
+
+#
+# udev, devfsd, busybox-mdev (from busybox) or none
+#
+IMAGE_DEV_MANAGER ?= "${@base_contains("MACHINE_FEATURES", "kernel26", "udev","",d)} "
+#
+# sysvinit, upstart
+#
+IMAGE_INIT_MANAGER ?= "sysvinit sysvinit-pidof"
+IMAGE_INITSCRIPTS ?= "initscripts"
+#
+# tinylogin, getty
+#
+IMAGE_LOGIN_MANAGER ?= "tinylogin"
+
+IMAGE_VARS = "${IMAGE_INITSCRIPTS} \
+${IMAGE_DEV_MANAGER} \
+${IMAGE_INIT_MANAGER} \
+${IMAGE_LOGIN_MANAGER} "
+
+RDEPENDS += "${IMAGE_INSTALL} ${IMAGE_VARS}"
# "export IMAGE_BASENAME" not supported at this time
IMAGE_BASENAME[export] = "1"
-export PACKAGE_INSTALL ?= "${IMAGE_INSTALL}"
+export PACKAGE_INSTALL ?= "${IMAGE_INSTALL} ${IMAGE_VARS}"
# We need to recursively follow RDEPENDS and RRECOMMENDS for images
do_rootfs[recrdeptask] += "do_deploy do_populate_staging"
diff --git a/classes/insane.bbclass b/classes/insane.bbclass
index 3a2cadcaff..5b31a0123d 100644
--- a/classes/insane.bbclass
+++ b/classes/insane.bbclass
@@ -359,6 +359,8 @@ def package_qa_hash_style(path, name, d, elf):
elf = True
if "GNU_HASH" in line:
sane = True
+ if "[mips32]" in line or "[mips64]" in line:
+ sane = True
if elf and not sane:
error_msg = "No GNU_HASH in the elf binary: '%s'" % path
diff --git a/classes/java-native.bbclass b/classes/java-native.bbclass
new file mode 100644
index 0000000000..7b67c6041c
--- /dev/null
+++ b/classes/java-native.bbclass
@@ -0,0 +1,11 @@
+# This is to be used by recipes which rely on java-library.bbclass
+# infrastructure and are a *-native recipe which needs to install
+# jar files into staging.
+#
+# This class has nothing to do with Java's JNI.
+
+inherit native
+
+do_stage () {
+ java_stage
+}
diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass
index d1f59e5e84..4c1dbda35c 100644
--- a/classes/kernel.bbclass
+++ b/classes/kernel.bbclass
@@ -74,9 +74,6 @@ UBOOT_ENTRYPOINT ?= "20008000"
UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
kernel_do_compile() {
- if [ ! -z "${INITRAMFS_IMAGE}" ]; then
- cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz" initramfs.cpio.gz
- fi
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
oe_runmake include/linux/version.h CC="${KERNEL_CC}" LD="${KERNEL_LD}"
if [ "${KERNEL_MAJOR_VERSION}" != "2.6" ]; then
@@ -188,7 +185,10 @@ kernel_do_install() {
}
kernel_do_configure() {
- yes '' | oe_runmake oldconfig
+ yes '' | oe_runmake oldconfig
+ if [ ! -z "${INITRAMFS_IMAGE}" ]; then
+ cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz" initramfs.cpio.gz
+ fi
}
do_menuconfig() {
@@ -295,12 +295,14 @@ python populate_packages_prepend () {
def extract_modinfo(file):
import tempfile, os, re
tempfile.tempdir = bb.data.getVar("WORKDIR", d, 1)
- tmpfile = tempfile.mkstemp()[1]
+ tf = tempfile.mkstemp()
+ tmpfile = tf[1]
cmd = "PATH=\"%s\" %sobjcopy -j .modinfo -O binary %s %s" % (bb.data.getVar("PATH", d, 1), bb.data.getVar("HOST_PREFIX", d, 1) or "", file, tmpfile)
os.system(cmd)
f = open(tmpfile)
l = f.read().split("\000")
f.close()
+ os.close(tf[0])
os.unlink(tmpfile)
exp = re.compile("([^=]+)=(.*)")
vals = {}
diff --git a/classes/module_strip.bbclass b/classes/module_strip.bbclass
index 63e6569799..3316e20c80 100644
--- a/classes/module_strip.bbclass
+++ b/classes/module_strip.bbclass
@@ -3,7 +3,11 @@
do_strip_modules () {
for p in ${PACKAGES}; do
if test -e ${WORKDIR}/install/$p/lib/modules; then
- modules="`find ${WORKDIR}/install/$p/lib/modules -name \*${KERNEL_OBJECT_SUFFIX}`"
+ if [ "${KERNEL_MAJOR_VERSION}" == "2.6" ]; then
+ modules="`find ${WORKDIR}/install/$p/lib/modules -name \*.ko`"
+ else
+ modules="`find ${WORKDIR}/install/$p/lib/modules -name \*.o`"
+ fi
if [ -n "$modules" ]; then
for module in $modules ; do
if ! [ -d "$module" ] ; then
diff --git a/classes/native.bbclass b/classes/native.bbclass
index 4f3856ccf5..69231e0b6b 100644
--- a/classes/native.bbclass
+++ b/classes/native.bbclass
@@ -82,14 +82,11 @@ export oldincludedir = "${STAGING_DIR_NATIVE}${layout_includedir}"
do_stage () {
if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ]
then
- if [ "${JAVA_NATIVE_STAGE_INSTALL}" = "1" ]
+ if [ "${AUTOTOOLS_NATIVE_STAGE_INSTALL}" != "1" ]
then
- java_stage
- elif [ "${AUTOTOOLS_NATIVE_STAGE_INSTALL}" = "1" ]
- then
- autotools_stage_all
- else
oe_runmake install
+ else
+ autotools_stage_all
fi
fi
}
diff --git a/classes/package.bbclass b/classes/package.bbclass
index a7cdb5f2d5..55595928c6 100644
--- a/classes/package.bbclass
+++ b/classes/package.bbclass
@@ -293,16 +293,6 @@ python package_do_split_locales() {
bb.data.setVar('DESCRIPTION_' + pkg, '%s translation for %s' % (l, pn), d)
bb.data.setVar('PACKAGES', ' '.join(packages), d)
-
- # Disabled by RP 18/06/07
- # Wildcards aren't supported in debian
- # They break with ipkg since glibc-locale* will mean that
- # glibc-localedata-translit* won't install as a dependency
- # for some other package which breaks meta-toolchain
- # Probably breaks since virtual-locale- isn't provided anywhere
- #rdep = (bb.data.getVar('RDEPENDS_%s' % mainpkg, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or "").split()
- #rdep.append('%s-locale*' % pn)
- #bb.data.setVar('RDEPENDS_%s' % mainpkg, ' '.join(rdep), d)
}
python populate_packages () {
diff --git a/classes/package_deb.bbclass b/classes/package_deb.bbclass
index 6d4abaf5d0..5127d32f33 100644
--- a/classes/package_deb.bbclass
+++ b/classes/package_deb.bbclass
@@ -1,5 +1,5 @@
#
-# Copyright 2006-2007 OpenedHand Ltd.
+# Copyright 2006-2008 OpenedHand Ltd.
#
inherit package
@@ -88,13 +88,20 @@ python do_package_deb () {
return
bb.mkdirhier(dvar)
+ packages = bb.data.getVar('PACKAGES', d, 1)
+ if not packages:
+ bb.debug(1, "PACKAGES not defined, nothing to package")
+ return
tmpdir = bb.data.getVar('TMPDIR', d, 1)
if os.access(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"),os.R_OK):
os.unlink(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"))
- packages = bb.data.getVar('PACKAGES', d, 1)
+ if packages == []:
+ bb.debug(1, "No packages; nothing to do")
+ return
+
for pkg in packages.split():
localdata = bb.data.createCopy(d)
pkgdest = bb.data.getVar('PKGDEST', d, 1)
@@ -242,17 +249,7 @@ python do_package_deb () {
bb.utils.unlockfile(lf)
raise bb.build.FuncFailed("dpkg-deb execution failed")
- for script in ["preinst", "postinst", "prerm", "postrm", "control" ]:
- scriptfile = os.path.join(controldir, script)
- try:
- os.remove(scriptfile)
- except OSError:
- pass
- try:
- os.rmdir(controldir)
- except OSError:
- pass
-
+ bb.utils.prunedir(controldir)
bb.utils.unlockfile(lf)
}
@@ -266,13 +263,8 @@ python () {
}
python do_package_write_deb () {
- packages = bb.data.getVar('PACKAGES', d, True)
- if not packages:
- bb.debug(1, "No PACKAGES defined, nothing to package")
- return
-
- bb.build.exec_func("read_subpackage_metadata", d)
- bb.build.exec_func("do_package_deb", d)
+ bb.build.exec_func("read_subpackage_metadata", d)
+ bb.build.exec_func("do_package_deb", d)
}
do_package_write_deb[dirs] = "${D}"
addtask package_write_deb before do_package_write after do_package
diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass
index 3a977291ff..d4cb3b62e2 100644
--- a/classes/package_ipk.bbclass
+++ b/classes/package_ipk.bbclass
@@ -244,6 +244,10 @@ python do_package_ipk () {
rprovides = (bb.data.getVar("RPROVIDES", localdata, 1) or "").split()
rreplaces = (bb.data.getVar("RREPLACES", localdata, 1) or "").split()
rconflicts = (bb.data.getVar("RCONFLICTS", localdata, 1) or "").split()
+
+ if not '-locale-' and not '-dbg' and not '-dev' in pkgname:
+ rdepends.append('%s-locale*' % pkgname)
+
if rdepends:
ctrlfile.write("Depends: %s\n" % ", ".join(rdepends))
if rsuggests:
@@ -293,16 +297,7 @@ python do_package_ipk () {
bb.utils.unlockfile(lf)
raise bb.build.FuncFailed("ipkg-build execution failed")
- for script in ["preinst", "postinst", "prerm", "postrm", "control" ]:
- scriptfile = os.path.join(controldir, script)
- try:
- os.remove(scriptfile)
- except OSError:
- pass
- try:
- os.rmdir(controldir)
- except OSError:
- pass
+ bb.utils.prunedir(controldir)
bb.utils.unlockfile(lf)
}
diff --git a/classes/qt4e.bbclass b/classes/qt4e.bbclass
new file mode 100644
index 0000000000..8beef29df4
--- /dev/null
+++ b/classes/qt4e.bbclass
@@ -0,0 +1,15 @@
+DEPENDS_prepend = "${@["qt-embedded ", ""][(bb.data.getVar('PN', d, 1) == 'qt-embedded')]}"
+inherit qmake2
+
+QT_DIR_NAME = "qtopia"
+# override variables set by qmake-base to compile Qt/Embedded apps
+#
+export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qtopia"
+export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}"
+export OE_QMAKE_LIBS_QT = "qt"
+export OE_QMAKE_LIBS_X11 = ""
+export OE_QMAKE_EXTRA_MODULES = "network"
+EXTRA_QMAKEVARS_PRE += " QT_LIBINFIX=E "
+
+# Qt4 uses atomic instructions not supported in thumb mode
+ARM_INSTRUCTION_SET = "arm"
diff --git a/classes/qt4x11.bbclass b/classes/qt4x11.bbclass
index 76a45c33cb..923717f8af 100644
--- a/classes/qt4x11.bbclass
+++ b/classes/qt4x11.bbclass
@@ -1,3 +1,6 @@
DEPENDS_prepend = "${@["qt4x11 ", ""][(bb.data.getVar('PN', d, 1) == 'qt4-x11-free')]}"
inherit qmake2
+
+# Qt4 uses atomic instructions not supported in thumb mode
+ARM_INSTRUCTION_SET = "arm"
diff --git a/classes/rootfs_deb.bbclass b/classes/rootfs_deb.bbclass
index 1b93767463..2768c2afb2 100644
--- a/classes/rootfs_deb.bbclass
+++ b/classes/rootfs_deb.bbclass
@@ -1,6 +1,8 @@
#
# Copyright 2006-2007 Openedhand Ltd.
#
+ROOTFS_PKGMANAGE = "run-postinsts dpkg"
+ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts"
do_rootfs[depends] += "dpkg-native:do_populate_staging apt-native:do_populate_staging"
do_rootfs[recrdeptask] += "do_package_write_deb"
@@ -14,7 +16,7 @@ fakeroot rootfs_deb_do_rootfs () {
rm -f ${STAGING_ETCDIR_NATIVE}/apt/preferences
> ${IMAGE_ROOTFS}/var/dpkg/status
> ${IMAGE_ROOTFS}/var/dpkg/available
- # > ${STAGING_DIR}/var/dpkg/status
+ mkdir -p ${IMAGE_ROOTFS}/var/dpkg/alternatives
priority=1
for arch in ${PACKAGE_ARCHS}; do
@@ -39,16 +41,14 @@ fakeroot rootfs_deb_do_rootfs () {
tac ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev > ${STAGING_ETCDIR_NATIVE}/apt/sources.list
cat "${STAGING_ETCDIR_NATIVE}/apt/apt.conf.sample" \
- | sed -e 's#Architecture ".*";#Architecture "${TARGET_ARCH}";#' \
+ | sed -e 's#Architecture ".*";#Architecture "${DPKG_ARCH}";#' \
> "${STAGING_ETCDIR_NATIVE}/apt/apt-rootfs.conf"
export APT_CONFIG="${STAGING_ETCDIR_NATIVE}/apt/apt-rootfs.conf"
export D=${IMAGE_ROOTFS}
export OFFLINE_ROOT=${IMAGE_ROOTFS}
export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
- export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT}
-
- mkdir -p ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives
+ export OPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
apt-get update
@@ -80,12 +80,20 @@ fakeroot rootfs_deb_do_rootfs () {
if [ $? -ne 0 ]; then
exit 1
fi
- find ${IMAGE_ROOTFS} -name \*.dpkg-new | for i in `cat`; do
- mv $i `echo $i | sed -e's,\.dpkg-new$,,'`
- done
done
fi
+ rm ${WORKDIR}/temp/log.do_$target-attemptonly.${PID}
+ if [ ! -z "${PACKAGE_INSTALL_ATTEMPTONLY}" ]; then
+ for i in ${PACKAGE_INSTALL_ATTEMPTONLY}; do
+ apt-get install $i --force-yes --allow-unauthenticated >> ${WORKDIR}/temp/log.do_rootfs-attemptonly.${PID} || true
+ done
+ fi
+
+ find ${IMAGE_ROOTFS} -name \*.dpkg-new | for i in `cat`; do
+ mv $i `echo $i | sed -e's,\.dpkg-new$,,'`
+ done
+
install -d ${IMAGE_ROOTFS}/${sysconfdir}
echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
@@ -110,22 +118,14 @@ fakeroot rootfs_deb_do_rootfs () {
set -e
- # Hacks to make dpkg/opkg coexist for now
- mv ${IMAGE_ROOTFS}/var/dpkg ${IMAGE_ROOTFS}/usr/
- if [ -e ${IMAGE_ROOTFS}/usr/dpkg/alternatives ]; then
- rmdir ${IMAGE_ROOTFS}/usr/dpkg/alternatives
+ # Hacks to allow opkg's update-alternatives and opkg to coexist for now
+ mkdir -p ${IMAGE_ROOTFS}${libdir}/opkg
+ if [ -e ${IMAGE_ROOTFS}/var/dpkg/alternatives ]; then
+ rmdir ${IMAGE_ROOTFS}/var/dpkg/alternatives
fi
- if [ ! -e ${IMAGE_ROOTFS}${libdir}/opkg ] ; then
- mkdir -p ${IMAGE_ROOTFS}${libdir}/opkg
- fi
-
- if [ ! -e ${IMAGE_ROOTFS}${sysconfdir}/opkg ] ; then
- mkdir -p ${IMAGE_ROOTFS}${sysconfdir}/opkg
- fi
-
- ln -sf ${libdir}/opkg/alternatives ${IMAGE_ROOTFS}/usr/dpkg/alternatives
- ln -sf /usr/dpkg/info ${IMAGE_ROOTFS}${libdir}/opkg/info
- ln -sf /usr/dpkg/status ${IMAGE_ROOTFS}${libdir}/opkg/status
+ ln -s ${libdir}/opkg/alternatives ${IMAGE_ROOTFS}/var/dpkg/alternatives
+ ln -s /var/dpkg/info ${IMAGE_ROOTFS}${libdir}/opkg/info
+ ln -s /var/dpkg/status ${IMAGE_ROOTFS}${libdir}/opkg/status
${ROOTFS_POSTPROCESS_COMMAND}
@@ -142,7 +142,7 @@ rootfs_deb_log_check() {
if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
then
echo "log_check: There were error messages in the logfile"
- printf "log_check: Matched keyword: [$keyword_die]\n"
+ echo -e "log_check: Matched keyword: [$keyword_die]\n"
echo "$lf_txt" | grep -v log_check | grep -C 5 -i "$keyword_die"
echo ""
do_exit=1
diff --git a/classes/rootfs_ipk.bbclass b/classes/rootfs_ipk.bbclass
index e752449305..f5714bd1a3 100644
--- a/classes/rootfs_ipk.bbclass
+++ b/classes/rootfs_ipk.bbclass
@@ -21,7 +21,10 @@ ONLINE_PACKAGE_MANAGEMENT ?= "full"
# Which packages to not install on the basis of a recommendation
BAD_RECOMMENDATIONS ?= ""
-DISTRO_EXTRA_RDEPENDS += "${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "opkg opkg-collateral", d)}"
+IPKG_VARIANT ?= "opkg"
+
+RDEPENDS_append = " ${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "${IPKG_VARIANT} opkg-collateral", d)}"
+PACKAGE_INSTALL_append = " ${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "${IPKG_VARIANT} opkg-collateral", d)}"
fakeroot rootfs_ipk_do_rootfs () {
set -x
diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass
index e442bf1807..29624c3f78 100644
--- a/classes/sanity.bbclass
+++ b/classes/sanity.bbclass
@@ -112,6 +112,12 @@ def check_sanity(e):
missing = missing.rstrip(',')
messages = messages + "Please install following missing utilities: %s\n" % missing
+ try:
+ if os.path.basename(os.readlink('/bin/sh')) == 'dash':
+ messages = messages + "Using dash as /bin/sh causes various subtle build problems, please use bash instead.\n"
+ except:
+ pass
+
omask = os.umask(022)
if omask & 0755:
messages = messages + "Please use a umask which allows a+rx and u+rwx\n"
diff --git a/conf/bitbake.conf b/conf/bitbake.conf
index 7c9dceee5f..a4483bcaeb 100644
--- a/conf/bitbake.conf
+++ b/conf/bitbake.conf
@@ -314,6 +314,8 @@ IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}"
IMAGE_LINK_NAME = "${IMAGE_BASENAME}-${MACHINE}"
IMAGE_EXTRA_SPACE = 10240
+UBI_VOLNAME ?= "${MACHINE}-rootfs"
+
IMAGE_CMD = ""
IMAGE_CMD_jffs2 = "mkfs.jffs2 -x lzo --root=${IMAGE_ROOTFS} --faketime --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${EXTRA_IMAGECMD}"
IMAGE_CMD_yaffs2 = "mkyaffs2image ${EXTRA_IMAGECMD} ${IMAGE_ROOTFS} ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.yaffs2"
@@ -329,7 +331,8 @@ IMAGE_CMD_tar.gz = "cd ${IMAGE_ROOTFS} && tar -zcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_
IMAGE_CMD_tar.bz2 = "cd ${IMAGE_ROOTFS} && tar -jcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.bz2 ."
IMAGE_CMD_cpio = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio) ${EXTRA_IMAGECMD}"
IMAGE_CMD_cpio.gz = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc | gzip -c -9 >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz) ${EXTRA_IMAGECMD}"
-IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubifs.img"
+IMAGE_CMD_ubi = "echo \[ubifs\] > ubinize.cfg ; echo mode=ubi >> ubinize.cfg ; echo image=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs >> ubinize.cfg ; echo vol_id=0 >> ubinize.cfg ; echo vol_type=dynamic >> ubinize.cfg ; echo vol_name=${UBI_VOLNAME} >> ubinize.cfg ; echo vol_flags=autoresize >> ubinize.cfg;mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubifs ${MKUBIFS_ARGS} && ubinize -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ubi ${UBINIZE_ARGS} ubinize.cfg"
+IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ubifs.img ${MKUBIFS_ARGS}"
EXTRA_IMAGECMD = ""
EXTRA_IMAGECMD_jffs2 = ""
@@ -338,6 +341,7 @@ EXTRA_IMAGECMD_squashfs = ""
EXTRA_IMAGECMD_squashfs-lzma = ""
EXTRA_IMAGECMD_cpio = ""
EXTRA_IMAGECMD_cpio.gz = ""
+EXTRA_IMAGECMD_ubi = ""
EXTRA_IMAGECMD_ubifs = ""
IMAGE_DEPENDS = ""
@@ -350,6 +354,7 @@ IMAGE_DEPENDS_ext3 = "genext2fs-native e2fsprogs-native"
IMAGE_DEPENDS_ext3.gz = "genext2fs-native e2fsprogs-native"
IMAGE_DEPENDS_squashfs = "squashfs-tools-native"
IMAGE_DEPENDS_squashfs-lzma = "squashfs-lzma-tools-native"
+IMAGE_DEPENDS_ubi = "mtd-utils-native"
IMAGE_DEPENDS_ubifs = "mtd-utils-native"
EXTRA_IMAGEDEPENDS = ""
@@ -472,26 +477,30 @@ export palmqtdir = "${palmtopdir}"
# Download locations and utilities.
##################################################################
-GNU_MIRROR = "ftp://ftp.gnu.org/gnu"
+OE_STRICT_CHECKSUMS ?= "1"
+
+ADOBE_MIRROR = "http://fpdownload.macromedia.com/get/flashplayer/current/"
+APACHE_MIRROR = "http://www.apache.org/dist"
DEBIAN_MIRROR = "ftp://ftp.debian.org/debian/pool"
-SOURCEFORGE_MIRROR = "http://downloads.sourceforge.net"
-GPE_MIRROR = "http://gpe.linuxtogo.org/download/source"
-GPEPHONE_MIRROR = "http://gpephone.linuxtogo.org/download/gpephone"
-GPE_SVN = "svn://projects.linuxtogo.org/svn/gpe/trunk/base;module=${PN}"
-GPE_EXTRA_SVN = "svn://projects.linuxtogo.org/svn/gpe/trunk/extra;module=${PN}"
-GPEPHONE_SVN = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source;module=${PN}"
-XLIBS_MIRROR = "http://xlibs.freedesktop.org/release"
-XORG_MIRROR = "http://xorg.freedesktop.org/releases"
-GNOME_MIRROR = "http://ftp.gnome.org/pub/GNOME/sources"
-FREEBSD_MIRROR = "ftp://ftp.freebsd.org/pub/FreeBSD/"
-HANDHELDS_CVS = "cvs://anoncvs:anoncvs@anoncvs.handhelds.org/cvs"
E_CVS = "cvs://anonymous@anoncvs.enlightenment.org/var/cvs/e"
E_URI = "http://enlightenment.freedesktop.org/files"
+FREEBSD_MIRROR = "ftp://ftp.freebsd.org/pub/FreeBSD/"
FREEDESKTOP_CVS = "cvs://anoncvs:anoncvs@anoncvs.freedesktop.org/cvs"
FREESMARTPHONE_GIT = "git://git.freesmartphone.org"
GENTOO_MIRROR = "http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles"
-APACHE_MIRROR = "http://www.apache.org/dist"
+GNOME_GIT = "git://git.gnome.org"
+GNOME_MIRROR = "http://ftp.gnome.org/pub/GNOME/sources"
+GNU_MIRROR = "ftp://ftp.gnu.org/gnu"
+GPE_MIRROR = "http://gpe.linuxtogo.org/download/source"
+GPE_EXTRA_SVN = "svn://projects.linuxtogo.org/svn/gpe/trunk/extra;module=${PN}"
+GPE_SVN = "svn://projects.linuxtogo.org/svn/gpe/trunk/base;module=${PN}"
+GPEPHONE_MIRROR = "http://gpephone.linuxtogo.org/download/gpephone"
+GPEPHONE_SVN = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source;module=${PN}"
+HANDHELDS_CVS = "cvs://anoncvs:anoncvs@anoncvs.handhelds.org/cvs"
KERNELORG_MIRROR = "http://kernel.org"
+SOURCEFORGE_MIRROR = "http://downloads.sourceforge.net"
+XLIBS_MIRROR = "http://xlibs.freedesktop.org/release"
+XORG_MIRROR = "http://xorg.freedesktop.org/releases"
# You can use the mirror of your country to get faster downloads by putting
# export DEBIAN_MIRROR = "ftp://ftp.de.debian.org/debian/pool"
@@ -499,16 +508,16 @@ KERNELORG_MIRROR = "http://kernel.org"
FETCHCMD_svn = "/usr/bin/env svn"
FETCHCMD_cvs = "/usr/bin/env cvs"
-FETCHCMD_wget = "/usr/bin/env wget -t 5"
+FETCHCMD_wget = "/usr/bin/env wget -t 5 --no-check-certificate"
FETCHCMD_bzr = "/usr/bin/env bzr"
FETCHCMD_hg = "/usr/bin/env hg"
FETCHCOMMAND = "ERROR, this must be a BitBake bug"
-FETCHCOMMAND_wget = "/usr/bin/env wget -t 5 --passive-ftp -P ${DL_DIR} ${URI}"
+FETCHCOMMAND_wget = "/usr/bin/env wget -t 5 --passive-ftp --no-check-certificate -P ${DL_DIR} ${URI}"
FETCHCOMMAND_cvs = "/usr/bin/env cvs '-d${CVSROOT}' co ${CVSCOOPTS} ${CVSMODULE}"
FETCHCOMMAND_svn = "/usr/bin/env svn co ${SVNCOOPTS} ${SVNROOT} ${SVNMODULE}"
RESUMECOMMAND = "ERROR, this must be a BitBake bug"
-RESUMECOMMAND_wget = "/usr/bin/env wget -c -t 5 --passive-ftp -P ${DL_DIR} ${URI}"
+RESUMECOMMAND_wget = "/usr/bin/env wget -c -t 5 --passive-ftp -P --no-check-certificate ${DL_DIR} ${URI}"
UPDATECOMMAND = "ERROR, this must be a BitBake bug"
UPDATECOMMAND_cvs = "/usr/bin/env cvs -d${CVSROOT} update -d -P ${CVSCOOPTS}"
UPDATECOMMAND_svn = "/usr/bin/env svn update ${SVNCOOPTS}"
@@ -569,6 +578,8 @@ export PKG_CONFIG_PATH = "${PKG_CONFIG_DIR}:${STAGING_DATADIR}/pkgconfig"
export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${BASE_PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}"
export PKG_CONFIG_DISABLE_UNINSTALLED = "yes"
+export XDG_DATA_DIRS = "${STAGING_DATADIR}"
+
export QMAKE_MKSPEC_PATH = "${STAGING_DATADIR_NATIVE}/qmake"
export STAGING_SIPDIR = "${STAGING_DATADIR_NATIVE}/sip"
export STAGING_IDLDIR = "${STAGING_DATADIR}/idl"
diff --git a/conf/checksums.ini b/conf/checksums.ini
index 58ca20f18a..80849c3244 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -94,6 +94,10 @@ sha256=8f9124bd76c378ae2a25b6b421ebb8f0a88069da697ac6c96943571d93af8b15
md5=8bd2a92fb94faa1b4fc43865d40bd988
sha256=a317cd11719659892bdae6ec54ee2e37549d0df7d5bdce02036963acc2ad1486
+[http://divmod.org/trac/attachment/wiki/SoftwareReleases/Axiom-0.5.30.tar.gz?format=raw]
+md5=8f0b3a27770e487ad08f4fafdccc4495
+sha256=4a4217e70e01e11d357c2c2c23bc72d244a78fa40a401cca48cd5f0a619c7060
+
[http://search.cpan.org/CPAN/authors/id/D/DC/DCLINTON/Cache-Cache-1.05.tar.gz]
md5=09e4d37979c8f8ce2518e1d1ccd10d99
sha256=10106d94e0897c18cd5eb0b782c3212371c9785eba78a15f4623335e01dda23c
@@ -126,6 +130,10 @@ sha256=8750d58745e57654820aa9359891cb0d875d804dbfcfa2e1bb95c56531e423d1
md5=3180cf36a7bc401aefb236f4b5dbf14e
sha256=2aa1906562387a5de05df25a3140ada89df648ccc4eac4ae7b583d0e029103e7
+[http://coherence.beebits.net/download/Coherence-0.6.2.tar.gz]
+md5=feaeeaa68cae420c0c365c3c27b2a21e
+sha256=1cb99720527ea0a5906f5e75152634b1797ff44bcc31f4014285bd5da41589cc
+
[http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Zlib-1.42.tar.gz]
md5=1ab76bfd6731d80f6abbd1643c90cabd
sha256=7794d91711e8c9e526431da72c53bb08e14790f326d0e330d9e9d651f3f6fc6c
@@ -146,10 +154,22 @@ sha256=dde5d254cd00e4182680b1241e9a5feebbc9b4887f5d0bac2ba2935f213c97e7
md5=dac0f6c217437819f620da18a97d505f
sha256=ec9ba2f4ac57fea244639d3ddcdcb0307a4130b250a2b7f3b3ef416aaa5cdb53
+[http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.010.tar.gz]
+md5=a63c9f73afef70b6c80d899424b003e9
+sha256=7068295a5e35ed7dcf20446bee6d80a8de8ba7af5eb5fa35c0b60135c3445c2f
+
+[http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.607.tar.gz]
+md5=bd5785b39675213948a61dea1b400012
+sha256=7090a1e6a0d13be2f7e27a724351c61e44ffa5d165a7720bfe505aa2c4d47e14
+
[http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Data-OptList-0.101.tar.gz]
md5=6e9bb994a8716112a78c1306261f4164
sha256=a96fb122261fb5f069341d7e69dcf07a2988da7cfd8df65d50843b8b102fb55c
+[http://search.cpan.org/CPAN/authors/id/S/SB/SBECK/Date-Manip-5.54.tar.gz]
+md5=16c343329bad644b17f4f8ec5fb243cf
+sha256=b61f4f0e3e580723ca7f5c0e1952922c101875535bff04afd772fbd3f193e22a
+
[http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Devel-StackTrace-1.13.tar.gz]
md5=35d85c3f2c91c1de389b13436659551a
sha256=fe044ec9817a31f2b76f701b2cfd980809676943a901ba3d49200162807fa1f9
@@ -186,6 +206,10 @@ sha256=f12ec5f0864d85268a8d67e4919cb7f3d7f0e06ed6cc278c952f6c342673d931
md5=caea8bcfc9c1d391e56d85e437005a5d
sha256=0875e553a17fe65e920ad810a67aa6faca582c53476d8dc75880a6b3da625d0b
+[http://directfb.org/downloads/Core/DirectFB-1.2.7.tar.gz]
+md5=59ca16f600e96c8c104a485ff7c322c6
+sha256=80ab8e34246a280bc380020cf331bcc0014cf816380cee3935ad455c108e661e
+
[http://www.directfb.org/downloads/Extras/DirectFB-examples-0.9.25.tar.gz]
md5=835e850fddba8d8214d39ddd0646c3e8
sha256=f83af60d53ab4319e5d71a4459cc10464ffd683efabacd6bd773bb807f8771fa
@@ -194,6 +218,14 @@ sha256=f83af60d53ab4319e5d71a4459cc10464ffd683efabacd6bd773bb807f8771fa
md5=0cdfb4dd248eada3dc35db4f8cf75f8d
sha256=c54e779a720841126e23d692de85243e23b0d94fb7792a958b96b5bd097a8b85
+[http://www.directfb.org/downloads/Extras/DirectFB-examples-1.2.0.tar.gz]
+md5=ce018f681b469a1d72ffc32650304b98
+sha256=830a1bd6775d8680523596a88a72fd8e4c6a74bf886d3e169b06d234a5cf7e3e
+
+[http://media.djangoproject.com/releases/1.0.2/Django-1.0.2-final.tar.gz]
+md5=89353e3749668778f1370d2e444f3adc
+sha256=50a5d228743a69a682899b20141194bf8fd3fd75eaf33ba5f2932f43ea93ea0d
+
[http://media.djangoproject.com/releases/1.0/Django-1.0.tar.gz]
md5=84d0490e4126f31d1c23f640e1e86f2f
sha256=4c780b9e2906944ce02a9325b15f480d2bd4c0b12137f752aa4800c0f8563acf
@@ -202,6 +234,14 @@ sha256=4c780b9e2906944ce02a9325b15f480d2bd4c0b12137f752aa4800c0f8563acf
md5=3bf4d8d285591a5b7f31170f9b87aba0
sha256=c196988f55fc6633d9f9f6d9ddc2ae9b4dfa1f300edf4cbbad865c06a8656df7
+[http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Email-Date-Format-1.002.tar.gz]
+md5=7ae25275da6ab272aa8b40141eac9f82
+sha256=0c7f3636dffa5ff151f6906baa17582c2efeb29109750f40f820fe5d2dc38e84
+
+[http://divmod.org/trac/attachment/wiki/SoftwareReleases/Epsilon-0.5.11.tar.gz?format=raw]
+md5=39710dfdeb42e51c953b17b6cded163e
+sha256=a5907a3b7584d63be30b3f79b0422b2b0778e73c053be9ac5a11004f1c9097dc
+
[http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS/Error-0.17004.tar.gz]
md5=4dfca8732331a4f79c6803c3bc6b722f
sha256=f464f0068772c276b81a7345f6788bdc3a243c13de24563346043d049a5497ba
@@ -226,6 +266,10 @@ sha256=1f8504c7f08d2d59c71a70915fc834a285b99587444ee33e23ee3f135c071da0
md5=a8cf945d09c6458cb27228218e9a2f45
sha256=8416e162d6fc921f14a61c8905e9f9a28dc25e67e1c71b75574360a13f0c28c7
+[http://downloads.sourceforge.net/fordiac/FORTE-0.3.5.zip]
+md5=d207d3b389ee9f2702df095681459f99
+sha256=2b87b331e931db2db07408c1b07bdb557227e0c16f8fe37f72e40b08fca0a09c
+
[http://downloads.sourceforge.net/fnorb/Fnorb-1.3.tar.gz]
md5=7de1500c7ef6592a603890b45e23261b
sha256=d4380ab7fa8b8a9f564592b4e07c96117abd2d3f677b8a73c824cf4f904aa294
@@ -242,6 +286,10 @@ sha256=2c0de0243ce1853bf62ed9b2da122472b6682a117843af0cce4b4cf9588194ff
md5=7030996497f3cf012bc9e99b4ca3e920
sha256=be21e3d5fa2edd1f5ff5952f67e6574dae15a027b26415910dfe813902fd5985
+[http://downloads.sourceforge.net/freeimage/FreeImage3110.zip]
+md5=ad1db36414391417654ba7bf1c0277d3
+sha256=84021b8c0b86e5801479474ad9a99c18d121508ee16d363e02ddcbf24195340c
+
[http://www.urban.ne.jp/home/kanemori/zaurus/FreeNote_1.12.0.tar.gz]
md5=06b5aeb6cc97107090438a364f0ce89b
sha256=e6a0a5b674c4803bfd1ffda9660c29f4399294623ed095b0d1c554367c7db73c
@@ -274,6 +322,14 @@ sha256=5673927f18790511f2a01004a51110e167f7950e7accf9e1bc6832a4bfed4feb
md5=c09f77e2af500b51d22e0238c0534994
sha256=01c75ebc523b77b88d5754fa93a283eeff77bcf799536db8697b61daf42f36bd
+[http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Parser-3.60.tar.gz]
+md5=fb97ea7e5bd832b079d8660732f9d8d9
+sha256=0f1365a546e8c54faf5e17c5d011d0b9db8784568fb6b03522ab558ad39d9a63
+
+[http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz]
+md5=d2bfa18fe1904df7f683e96611e87437
+sha256=adb17dac9e36cd011f5243881c9739417fd102fce760f8de4e9be4c7131108e2
+
[http://gallium.prg.dtu.dk/HVSC/random/HVSC_45-all-of-them.rar]
md5=5394dac412dbe34d2dfe63cb91bdce8d
sha256=6068499eeb3aad19d2f860390c65496cf38c5f5e5b54422db6ec2f67abbb8d10
@@ -350,6 +406,10 @@ sha256=dbe5d8a0ac16a7953b3b2d34841dabd2b3071a2f66585ff25a538bd2ad1513ca
md5=17a18e398af6c1730f72068022a152aa
sha256=f199f7558e6a071ae1ead06b9207c0819281b6b2094dcef6fc4201a4bdf8854d
+[http://downloads.sourceforge.net/libvncserver/LibVNCServer-0.9.1.tar.gz]
+md5=aa00efc3dabde82fde9509bfbab0aba4
+sha256=0fbda7fc37c1f360bdbeb586e48d6203a5ef56a8cfc3b78887d7d90db683f282
+
[http://heanet.dl.sourceforge.net/libvncserver/LibVNCServer-0.9.1.tar.gz]
md5=aa00efc3dabde82fde9509bfbab0aba4
sha256=0fbda7fc37c1f360bdbeb586e48d6203a5ef56a8cfc3b78887d7d90db683f282
@@ -358,6 +418,10 @@ sha256=0fbda7fc37c1f360bdbeb586e48d6203a5ef56a8cfc3b78887d7d90db683f282
md5=aa00efc3dabde82fde9509bfbab0aba4
sha256=0fbda7fc37c1f360bdbeb586e48d6203a5ef56a8cfc3b78887d7d90db683f282
+[http://downloads.sourceforge.net/libvncserver/LibVNCServer-0.9.tar.gz]
+md5=4769d70bcd9d8390afb64c5eddfcd60e
+sha256=0ef94a1857e03e826825c559b5b8f07a4b412112fb9326f5eb694d5216747071
+
[http://heanet.dl.sourceforge.net/libvncserver/LibVNCServer-0.9.tar.gz]
md5=4769d70bcd9d8390afb64c5eddfcd60e
sha256=0ef94a1857e03e826825c559b5b8f07a4b412112fb9326f5eb694d5216747071
@@ -386,6 +450,10 @@ sha256=ab8fdcfdbb6c74ecef4cfaf9e83f955aa422e43f8cd8683c1f2648c70070b88c
md5=a7bda690ec0ad0bed457fa525e28034a
sha256=ffac9cd4a6fbc59618bf4e79c389a927491a81b448528278e010a190e2483544
+[http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/MIME-Lite-3.024.tar.gz]
+md5=ca71d1d844f5c4f693e5079a2b4fa9a5
+sha256=886b57c7d8d9903b54dad07b68f58e398745d6d92522e89e2ce714472c09f903
+
[http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2]
md5=18c05d88e22c3b815a43ca8d7152ccdc
sha256=8dd9dd61a0fe56904f5b76ddedb99bd359abaaf486e0b83b45e3357fecc81063
@@ -422,6 +490,10 @@ sha256=3d73988ad3e87f6084a4593cc6b3aac63aca3e893d3e9409d892a6f51558e4c4
md5=22e03dc4038cd63f32c21eb60994892b
sha256=3d73988ad3e87f6084a4593cc6b3aac63aca3e893d3e9409d892a6f51558e4c4
+[http://downloads.sourceforge.net/mesa3d/MesaGLUT-7.0.2.tar.bz2]
+md5=3a33f8efc8c58a592a854cfc7a643286
+sha256=fa31ca39f00ff92c7da59d9993d0eefb8d901eb8a519743942e523fde120eb6c
+
[http://heanet.dl.sourceforge.net/mesa3d/MesaGLUT-7.0.2.tar.bz2]
md5=3a33f8efc8c58a592a854cfc7a643286
sha256=fa31ca39f00ff92c7da59d9993d0eefb8d901eb8a519743942e523fde120eb6c
@@ -458,6 +530,10 @@ sha256=9d4707b556960f6aef14480f91fcd4f868720f64321947ab1b2fd20e85ce7f9e
md5=93e6ed7924ff069a4f883b4fce5349dc
sha256=9d4707b556960f6aef14480f91fcd4f868720f64321947ab1b2fd20e85ce7f9e
+[http://downloads.sourceforge.net/mesa3d/MesaLib-7.0.3.tar.bz2]
+md5=e6e6379d7793af40a6bc3ce1bace572e
+sha256=ebdf3448eac8abb56bbfc0b7c015efce8e5d88f10ee3123dcc62c1ff47b62d22
+
[http://heanet.dl.sourceforge.net/mesa3d/MesaLib-7.0.3.tar.bz2]
md5=e6e6379d7793af40a6bc3ce1bace572e
sha256=ebdf3448eac8abb56bbfc0b7c015efce8e5d88f10ee3123dcc62c1ff47b62d22
@@ -478,6 +554,10 @@ sha256=a9cc62ab760afeebcb1319a193508734a2d470cab8effab2776a2d3c65bd9cd2
md5=598bb59b86c2c4842eeffb03392fab5b
sha256=8fd609d1e6b460b5c95ad5612cb823aa863d51360ed55caea987909a9bab50f5
+[http://search.cpan.org/CPAN/authors/id/K/KA/KANE/Module-Load-0.16.tar.gz]
+md5=851a225e31621a66621f28a25ec53d9a
+sha256=f05c3300c988dc5f5f02d55f8ee241c05fbf4565c512f804f47c6e72e5f69e33
+
[http://downloads.sourceforge.net/mysql-python/MySQL-python-1.2.1_p2.tar.gz]
md5=e6b9ea21fd91cb4a5663304da727bb70
sha256=59f44cd53cfa1189dcaa5bf2c48662d5765f347b03827feb807f4cd0ef18943e
@@ -502,6 +582,18 @@ sha256=59eddefa715b3810af20b2b190ae16b46d0b733144d36dc7ddd51b32adac013e
md5=b827d300eb28458f6588eb843cba418d
sha256=4ba65d64599ca6937b44b98d1efd04957278679ddd733081d0d8c2ecf6c0143b
+[http://people.redhat.com/dcbw/NetworkManager/0.6.6/NetworkManager-0.6.6.tar.gz]
+md5=412ed4db5d2db04285799c4303ddeeed
+sha256=36d48a11957e1c4f53a685b0fcc7d060e8972b435501c92b10737bb844dd95e2
+
+[http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.7/NetworkManager-0.7.0.tar.bz2]
+md5=64f780e7f95c252eaaed0201c3d9a4ca
+sha256=281234116b99b4c4b45fde038a435a0d26b7ee55beac0c351186b3f12c301659
+
+[http://divmod.org/trac/attachment/wiki/SoftwareReleases/Nevow-0.9.32.tar.gz?format=raw]
+md5=75828090af2b26f69fe4a7f148a400f6
+sha256=bc35ce187481db91f047055b3edbce49c14d291b1a2eb3e915e9c1c511620f9a
+
[http://downloads.sourceforge.net/numpy/Numeric-23.7.tar.gz]
md5=8054781c58ae9cf6fe498316860b5ea8
sha256=33225097777e84dfed251aee1265a9c0dd0976854e83f60e778a670027b12e7c
@@ -530,6 +622,10 @@ sha256=d60027a4a36e64d02723d00b76c08e8d92850cab6269b2edcda4a1bb30cc7723
md5=f4898b999f39c79d55c13c0e0f597c71
sha256=e7bc69a316e6e2a263987a0aec5c6249dc152361e9559b4818a680681409aac1
+[http://downloads.sourceforge.net/openipmi/OpenIPMI-2.0.14.tar.gz]
+md5=f766680bb237ca2f837c005efba54efa
+sha256=fbd907dde45054227568f3117df0418a7819cfee02875d3723779432e8a66dc9
+
[http://heanet.dl.sourceforge.net/openipmi/OpenIPMI-2.0.14.tar.gz]
md5=f766680bb237ca2f837c005efba54efa
sha256=fbd907dde45054227568f3117df0418a7819cfee02875d3723779432e8a66dc9
@@ -542,6 +638,10 @@ sha256=987eeb9460185950e066e5db3b5fa531e53e213742b545288405552a5a7bb704
md5=87f56e79ae0c20397f4207d61d154303
sha256=987eeb9460185950e066e5db3b5fa531e53e213742b545288405552a5a7bb704
+[http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/PHP-Serialization-0.30.tar.gz]
+md5=210b764fca7c791f4387717185f589b5
+sha256=09917ebe3b088649f0767723a7e25ae08fb8db921a85183e2e8c3d2e79ae6d10
+
[http://www.packagekit.org/releases/PackageKit-0.2.4.tar.gz]
md5=87bf41fd021077c93549d47de6d5fe07
sha256=3b1a6f451928ca7e36d25e6e5a2e3dec2adae11c20770406f8bdc484f38b1600
@@ -622,6 +722,10 @@ sha256=117c8f06012e0c0004e69527580a56fac3d814da1051ec1aa73d97d16b60279b
md5=a4145b39742a4d9df9b6bf06495f75f5
sha256=10482fed3832ac804a495d4e5795838a1f99d1994e1247f9dd608a99a3ec3c66
+[http://cvs.fedora.redhat.com/repo/pkgs/PyQt4/PyQt-x11-gpl-4.4.3.tar.gz/89e84c36a8520bf8b3a8a2b20e765154/PyQt-x11-gpl-4.4.3.tar.gz]
+md5=89e84c36a8520bf8b3a8a2b20e765154
+sha256=a7bb7e08c67f1386e4666388ec04a07dc968745b0bbfcadae0824ed388c09564
+
[http://www.vanille.de/mirror/PyQwt-20040118.tar.gz]
md5=51a8550e9ffbce9f0a1ff11bfc2f4a01
sha256=22cbbccabaea5262c1fae47bf475f06af6bb7b765898873c93149340cb2049b9
@@ -714,6 +818,10 @@ sha256=e005a93a0b463e01edba2b79038b54c29a7932efee61c851a2ac644b8a4e5dd4
md5=5ba9e3eaa598d299718189d96514e8bb
sha256=f69f44da154b204a1ca62faae67a87b9b2939b9b66013bb8f732456653b6370f
+[http://www.ralinktech.com.tw/data/RT61_Firmware_V1.2.zip]
+md5=d4c690c93b470bc9a681297c2adc6281
+sha256=481f113c505ed186049287bd8e9ad8fcb8dbbb32f3bb718f04e4dc148b63c8e4
+
[http://www.ralinktech.com.tw/data/RT71W_Firmware_V1.8.zip]
md5=1e7a5dc574e0268574fcda3fd5cf52f7
sha256=e2d3ac1aaf4815e0c9531bc3fb7f56f30604cd52351332f1f8d6a28bb9a953bf
@@ -874,6 +982,10 @@ sha256=6fd69febfd804437a9d5b610502c6d3c2caabef7a4832a3bcac2357515adaa71
md5=6d53a2a9901549d52fecfafb0012134b
sha256=6fd69febfd804437a9d5b610502c6d3c2caabef7a4832a3bcac2357515adaa71
+[http://search.cpan.org/CPAN/authors/id/S/SW/SWALTERS/Sys-Mmap-0.13.tar.gz]
+md5=e65a007157e3e26807db52299497109d
+sha256=e064a939bf7e37774b89a39515ecf96c4d19c81e050bcf0dae28d1eab4d86196
+
[http://sdgsystems.com/pub/ipaq/hx4700/src/TIInit_3.2.26.bts]
md5=8741490a25b98230973446400971bba9
sha256=c1f29cfd31c335a409bdc530c2e68661d20a1e3c2e5d64454470b6700a40681e
@@ -930,6 +1042,10 @@ sha256=9e488e3ee3fc0f56d8f8898f4729819512dd43afff0fba4e32390d1af4bd53d5
md5=56df2ae66db57932515a491c03bf514f
sha256=f3b2df3f4483752a42f1a775a1163da1f9e91bf5f19d302abc93544aca20d2cd
+[http://tmrc.mit.edu/mirror/twisted/Twisted/8.2/Twisted-8.2.0.tar.bz2]
+md5=c85f151999df3ecf04c49a781b4438d2
+sha256=e0602bb05e31f6100b6f9ab35cfa93ab9f7a1c50a351a0ddfcd236a923bddfb0
+
[http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/URI-1.35.tar.gz]
md5=1a933b1114c41a25587ee59ba8376f7c
sha256=1684cb64a6bd24e019532ae2e5d4a962d43d9215623e9d4dc77536f118fbf31b
@@ -946,6 +1062,10 @@ sha256=3d92318dadef22b1d1b062925ef66bac2ad48a0fd4fc83b88dcabba38c182b7b
md5=61eed8ed819688663e399b5e79ed006f
sha256=6a19418a074a7dec6fd67f00df74f3335e85eb38d2d2a17bd0e91cf8010537e3
+[http://search.cpan.org/CPAN/authors/id/R/RO/ROBF/X10-0.03.tar.gz]
+md5=056b3d98fab545865148b948de6784c7
+sha256=2b34d7c2112e8b79856c63f43403bff1a7ed5005d9b98db5f94c6f4cc7ba5623
+
[ftp://ftp.xfree86.org/pub/XFree86/4.3.0/source/X430src-1.tgz]
md5=4f241a4f867363f40efa2b00dca292af
sha256=5276b045e154948fce7abba7d686406c65862d90b43b50f2546b33e38378f0d7
@@ -1010,6 +1130,10 @@ sha256=f274a4bc969ae192994a856b7f786c6fce96bae77f96c1c2b71dd97599e06e43
md5=4be042a043ec520074b0ab6f7ca0bded
sha256=fa668e8f01fe43fdddb33f0c5e294698818f37519000b9f782f504ece071c740
+[http://www2.zoneminder.com/downloads/ZoneMinder-1.23.3.tar.gz]
+md5=ee803f0f71d6e67adf602c3557fb6bc9
+sha256=76cba999bf602b1d561921cfcbbf7a9eab64370f349a0b389efff75f4b0c3af2
+
[http://zope.org/Products/Zope/2.7.1/Zope-2.7.1.tgz]
md5=ae9d4bb3f7220dfffb6e91b42503b16c
sha256=341f56aa4ece9001a118be8ff9675bfad6410dc1df86dd86aeb726adc732341b
@@ -1030,6 +1154,10 @@ sha256=f4d2ac6f09f44eeb82621530b1970afe88fd97cfe82da43b61069800d0c06d12
md5=caa9f5bc44232dc8aeea773fea56be80
sha256=a21d724ab3b3933330194353687df82c475b5dfb997513eef4c25de6c865ec33
+[http://downloads.sourceforge.net/amule/aMule-2.1.3.tar.bz2]
+md5=0aafdd159edb8ad5f0064da87998b47d
+sha256=6e97e947bb7ac231b75e3b21a509a2ec0239bcd7e9dbfc6062c520a6d13b0244
+
[http://heanet.dl.sourceforge.net/amule/aMule-2.1.3.tar.bz2]
md5=0aafdd159edb8ad5f0064da87998b47d
sha256=6e97e947bb7ac231b75e3b21a509a2ec0239bcd7e9dbfc6062c520a6d13b0244
@@ -1294,6 +1422,14 @@ sha256=369fd18d406783acc92e6ced2b3536999aa0d33940398af2b4fb11dba46cbfa3
md5=1ef201f29283179c8e5ab618529cac78
sha256=744d8f3a8206fbc45a5558d92163d5ef7e5e0cc0700283bb6a617fb1201629f9
+[http://www.antlr2.org/download/antlr-2.7.7.tar.gz]
+md5=01cc9a2a454dd33dcd8c856ec89af090
+sha256=853aeb021aef7586bda29e74a6b03006bcb565a755c86b66032d8ec31b67dbb9
+
+[http://downloads.sourceforge.net/aoetools/aoetools-29.tar.gz]
+md5=6a77c8a017ef8dc0a5310db944b30035
+sha256=caba504ca4f769c5f3f8b4e97ed0da1888bd0be2efd3c33cac9bf36e7c285bc3
+
[http://ftp.hosting-studio.de/pub/linux/apache/ant/source/apache-ant-1.7.1-src.tar.bz2]
md5=0d68db4a1ada5c91bcbf53cefd0c2fd7
sha256=4dc49a7260ef90a6dc6611b7e96b9f047d507589736d4a2ad6efbe3edfc6fba6
@@ -1382,6 +1518,14 @@ sha256=db22b34c0bfcab8546632475c6de2c63990214fb8ae5e2ada565410a85e22134
md5=e77887dbafc515c63feac84686bcb3bc
sha256=384437f3c4eb7d53ad27fdadce6cbc295ef16653b7f7739a480d91c784082ec9
+[http://www.apache.org/dist/apr/apr-1.3.2.tar.bz2]
+md5=a0631c63640176371dd4a5bf13beeee8
+sha256=bb0c58efdd252fcaf6f0ff06681d0ebecbecbaa3864047f32dec7f82d1c4994c
+
+[http://www.apache.org/dist/apr/apr-1.3.3.tar.bz2]
+md5=2090c21dee4f0eb1512604127dcd158f
+sha256=d95f3b78366c86317043304864bb08cb836312c87ea7d142a4c02154e7e0dd37
+
[http://www.apache.org/dist/apr/apr-util-0.9.12.tar.gz]
md5=8e9cc71a1303b67b3278fbeab9799f2e
sha256=5768fcc4d38fa6f811b0a89e2ef450d0f52688ff9263e548819adb096fbfc9c3
@@ -1394,6 +1538,10 @@ sha256=7d70ff17bec733bdb04a6653a8e9c15ab7d88429dac91a4ae58c1db5caaee07f
md5=c3702668a640be1695956115857ec22e
sha256=8cd84eb2031a91572e1be2975f4171730a9be72c4cd88718c4c40ac7dc4fd7d3
+[http://www.apache.org/dist/apr/apr-util-1.3.4.tar.gz]
+md5=a10e2ca150ff07f484c724c36142211f
+sha256=3f07ffdb18fb853290c9b83e82cd5cae66b8fbc357bd391e846c0afdd24fed7e
+
[ftp://ftp.debian.org/debian/pool/main/a/apt/apt_0.5.28.6.tar.gz]
md5=26b37525371cdaaec552237e0667305d
sha256=57de084860870cccf510de62eb8ded252f5951a6e59e34a963d61d69de3aff10
@@ -1414,6 +1562,10 @@ sha256=fa00ce910ab6f0987c4a210962be357d4f013fc89ef72b015f39ae8649522b59
md5=6569fd95e829036c141a5ccaf8e5948c
sha256=fa00ce910ab6f0987c4a210962be357d4f013fc89ef72b015f39ae8649522b59
+[ftp://ftp.us.debian.org/debian/pool/main/a/apt/apt_0.6.25.tar.gz]
+md5=6569fd95e829036c141a5ccaf8e5948c
+sha256=fa00ce910ab6f0987c4a210962be357d4f013fc89ef72b015f39ae8649522b59
+
[ftp://ftp.debian.org/debian/pool/main/a/apt/apt_0.6.46.2.tar.gz]
md5=67d439a252996357b0313b3ad999739a
sha256=6f1a7340d0de2a9a524055d0ed4289aa919dc29e9e1fe60aae598f2019105686
@@ -1426,6 +1578,10 @@ sha256=6f1a7340d0de2a9a524055d0ed4289aa919dc29e9e1fe60aae598f2019105686
md5=67d439a252996357b0313b3ad999739a
sha256=6f1a7340d0de2a9a524055d0ed4289aa919dc29e9e1fe60aae598f2019105686
+[ftp://ftp.us.debian.org/debian/pool/main/a/apt/apt_0.6.46.2.tar.gz]
+md5=67d439a252996357b0313b3ad999739a
+sha256=6f1a7340d0de2a9a524055d0ed4289aa919dc29e9e1fe60aae598f2019105686
+
[ftp://ftp.nl.debian.org/debian/pool/main/a/apt/apt_0.7.14.tar.gz]
md5=19efa18fb1ef20c58b9b44e94258b814
sha256=8fc06effaf8a4e4333308eedcdc6840f1c8056f2e924210f151dfc076bcd4045
@@ -1446,6 +1602,18 @@ sha256=e7d58e2b202713b4df8cd5fd58bc20ba8d31c0da6e5e3b3c89a138dbf0b24ad9
md5=c66f943203fa24e85ed8c48f6ac5ad1e
sha256=e7d58e2b202713b4df8cd5fd58bc20ba8d31c0da6e5e3b3c89a138dbf0b24ad9
+[ftp://ftp.us.debian.org/debian/pool/main/a/apt/apt_0.7.2.tar.gz]
+md5=c66f943203fa24e85ed8c48f6ac5ad1e
+sha256=e7d58e2b202713b4df8cd5fd58bc20ba8d31c0da6e5e3b3c89a138dbf0b24ad9
+
+[ftp://ftp.debian.org/debian/pool/main/a/apt/apt_0.7.20.2.tar.gz]
+md5=e6ee1b594f6ed5fab5cb593ee46cfc21
+sha256=4dc935a520c65705795ada5942b658f6e86b22eefc7032342267272bd6566b05
+
+[ftp://ftp.us.debian.org/debian/pool/main/a/apt/apt_0.7.20.2.tar.gz]
+md5=e6ee1b594f6ed5fab5cb593ee46cfc21
+sha256=4dc935a520c65705795ada5942b658f6e86b22eefc7032342267272bd6566b05
+
[ftp://ftp.debian.org/debian/pool/main/a/apt/apt_0.7.3.tar.gz]
md5=e2e6e23f43bfdf135b923205659dfaf1
sha256=d3a71446234e567a24740b02abe5bc6c695836343df6139eb7c03ec11871e710
@@ -1458,6 +1626,10 @@ sha256=d3a71446234e567a24740b02abe5bc6c695836343df6139eb7c03ec11871e710
md5=e2e6e23f43bfdf135b923205659dfaf1
sha256=d3a71446234e567a24740b02abe5bc6c695836343df6139eb7c03ec11871e710
+[ftp://ftp.us.debian.org/debian/pool/main/a/apt/apt_0.7.3.tar.gz]
+md5=e2e6e23f43bfdf135b923205659dfaf1
+sha256=d3a71446234e567a24740b02abe5bc6c695836343df6139eb7c03ec11871e710
+
[ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.7.6.tar.gz]
md5=e0bb681ec46f6566e53fbda0ba25fd4b
sha256=4a4eb39ea162df9c795b472326e9df676dbf249dc34436517b67354f32a8d23f
@@ -1470,6 +1642,10 @@ sha256=d5b93fb8dbfa73e4a542bb8ad7d61c8b48dcf79948da26da9e9ef3b1a49c4221
md5=c6b1aa28bfecdd0c693a2afc43d7679e
sha256=d5b93fb8dbfa73e4a542bb8ad7d61c8b48dcf79948da26da9e9ef3b1a49c4221
+[http://downloads.sourceforge.net/argtable/argtable2-7.tar.gz]
+md5=a84130293aab3bc09631cbee717ede93
+sha256=f7bd2786309b6a7ce9c1e2b3fbdd75419ef0bcabfaa4444362bbe40897959f45
+
[http://heanet.dl.sourceforge.net/argtable/argtable2-7.tar.gz]
md5=a84130293aab3bc09631cbee717ede93
sha256=f7bd2786309b6a7ce9c1e2b3fbdd75419ef0bcabfaa4444362bbe40897959f45
@@ -1646,6 +1822,10 @@ sha256=0d77c73a3c151a7da647dd924f32151e5ee4574530568fd65067882f79cd5a44
md5=81dbae5162aaa8a398a81424d6631c77
sha256=0d77c73a3c151a7da647dd924f32151e5ee4574530568fd65067882f79cd5a44
+[ftp://ftp.us.debian.org/debian/pool/main/a/at/at_3.1.8-11.tar.gz]
+md5=81dbae5162aaa8a398a81424d6631c77
+sha256=0d77c73a3c151a7da647dd924f32151e5ee4574530568fd65067882f79cd5a44
+
[http://projects.linuxtogo.org/frs/download.php/222/atd-0.80.tar.gz]
md5=b64a8ae8592b4d32ac9baebf0b915c1e
sha256=456d2bf4550a37c70e829b3029acf3cb81f931908d35f1dbade7ec54f4cdb146
@@ -1666,6 +1846,10 @@ sha256=9aa41c8c88ecb1163b7ac69824ac390d6eaaa30ed31a0624486e43f414ec6b7a
md5=3b27365772d918050b2251d98a9c7c82
sha256=9c548c44d3cfdf259118d9fd4e468e1fe4567456dbff8ff59838c5f70ef62ea3
+[ftp://ftp.us.debian.org/debian/pool/main/a/atftp/atftp_0.7.orig.tar.gz]
+md5=3b27365772d918050b2251d98a9c7c82
+sha256=9c548c44d3cfdf259118d9fd4e468e1fe4567456dbff8ff59838c5f70ef62ea3
+
[ftp://ftp.gtk.org/pub/gtk/v2.8/atk-1.10.3.tar.bz2]
md5=c84a01fea567b365c0d44b227fead948
sha256=c596baf95f6a6cd7748b1018336b2ac45ca2ef668816e6c703b01691e09b8a89
@@ -1718,6 +1902,10 @@ sha256=dd3629e6ba6f638962f3a60035208facf6155397000c86b5f2f7ca2990ef59e1
md5=537dc236f4654dd5760e0f39484222a1
sha256=818a18c1ace9bc3e5b92bc91db1d62c859023cd16444d41692ecb3606cc6868c
+[ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_2.4.43-1.tar.gz]
+md5=91583a14bcbd637adaa9b07ea49c5d4b
+sha256=d358b233b3e2ad235e63fd8697e337006fc7506844e424b0d9dd7a24affec5bf
+
[http://www.68k.org/~michael/audiofile/audiofile-0.2.6.tar.gz]
md5=9c1049876cd51c0f1b12c2886cce4d42
sha256=4b6167b56e21556fb07c9ef06962fe32817064c62181ba47afd3322e0d0f22a9
@@ -1774,6 +1962,10 @@ sha256=e25caa0e9639ea54dd7c4f21e8146ac9859a61fa126f397edf874b5fdc147430
md5=4510391e6b3edaa4cffb3ced87c9560c
sha256=b26a3499672b0eddcbd87c8e61dfb60ae74d9ee0cc181a5d924fb73db62a25ec
+[ftp://ftp.gnu.org/gnu/automake/automake-1.10.2.tar.bz2]
+md5=1498208ab1c8393dcbd9afb7d06df6d5
+sha256=c38ac9fe53d9492b0a0a02a8e691cd2c96d7f4cc13aedeedc6d08613b77e640f
+
[ftp://ftp.gnu.org/gnu/automake/automake-1.10.tar.bz2]
md5=0e2e0f757f9e1e89b66033905860fded
sha256=2efebda5dd64fd52599a19564041d63dcaba68fafacc0080ffa6e8f0df8da697
@@ -1834,6 +2026,10 @@ sha256=9dc6f870b6ce050059054a26bfc15d6e7a836fa299edd1b89c63c1089bfedd52
md5=aab1a304851d8145ea5f6a85c10af9e9
sha256=dedf5325105f071e5d9f898fdb7337a7fe88a3a8a1f832a6056ba00477b8cc3d
+[http://avahi.org/download/avahi-0.6.24.tar.gz]
+md5=068c1d220b07037e64caf87d4a7a0504
+sha256=260070d46188ed58f5dc1174ce632c096679f6391a2b729366e7aba349d4b950
+
[http://www.apache.org/dist/excalibur/avalon-framework/source/avalon-framework-api-4.3-src.tar.gz]
md5=d4cffb4ba1d07bdc517ac6e322636495
sha256=a4d56a053609ddfc77f6a42c3f15a11708d5e0eb29ffc60a40b87e4cc7331d47
@@ -1878,6 +2074,14 @@ sha256=43debdc36c9aed8a2ef366bf3e98c1440e643a5ae9e7e1423b6309ddee5ae25e
md5=5afcef5d6047f14cd5f65d2fdbd86fb2
sha256=43debdc36c9aed8a2ef366bf3e98c1440e643a5ae9e7e1423b6309ddee5ae25e
+[ftp://ftp.debian.org/debian/pool/main/b/base-passwd/base-passwd_3.5.20.tar.gz]
+md5=1f93b419b35f0b0b2ae78cf3cb1ef491
+sha256=3f4f59d07af4fccdf6aed0822b25422ad7cfaee442a3ab870dc031f173d456f2
+
+[ftp://ftp.us.debian.org/debian/pool/main/b/base-passwd/base-passwd_3.5.20.tar.gz]
+md5=1f93b419b35f0b0b2ae78cf3cb1ef491
+sha256=3f4f59d07af4fccdf6aed0822b25422ad7cfaee442a3ab870dc031f173d456f2
+
[ftp://ftp.debian.org/debian/pool/main/b/base-passwd/base-passwd_3.5.9.tar.gz]
md5=2dd8ad238abcbab478db690085554d90
sha256=a9d7ac67598b2b004a53a9e70592e0f274d3c8731ed9395ed704fd0259f0c0af
@@ -2130,6 +2334,18 @@ sha256=1b4a5b5e48ad5e61a21586b7b59d5c0a88691a981e73e2c6dc5868197461791b
md5=b12426fd72bedf00c389a7fb458275a8
sha256=5a4a5b82dd8f485b4fef941cc216eb052184cf138f72b512eb62d836b460acdb
+[http://downloads.sourceforge.net/bftpd/bftpd-2.3.tar.gz]
+md5=4ab1eb33135fa5eaaf050e6d3dd0b319
+sha256=0af27ca6c49f696c64bcfb3e50452cad240997993e0b7afb65624898d3d95ff2
+
+[http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi]
+md5=ed7ed01e9aefba8ddd77c13332cec120
+sha256=40d1cf5bc8e1b0e55dac7bb2e3fbc2aea05b6679444864781299b24db044634f
+
+[http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi]
+md5=0da8fe124595f5b206d64cb1400bbefc
+sha256=b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c
+
[http://xorg.freedesktop.org/releases/individual/proto/bigreqsproto-1.0.2.tar.bz2]
md5=95c29d9d10bf2868996c0c47a3b9a8dc
sha256=30da0098a24578e645193464526cc4d5c2c7fecaf476d1b9dabe68118850adee
@@ -2234,6 +2450,10 @@ sha256=6fe3c4b2d45a50582f832bc77deb4e3da74a15ea8e09dbb214b9c44e7c3378fc
md5=9d22ee4dafa3a194457caf4706f9cf01
sha256=487a33a452f0edcf1f8bb8fc23dff5c7a82edec3f3f8b65632b6c945e961ee9b
+[ftp://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2]
+md5=09a8c5821a2dfdbb20665bc0bd680791
+sha256=3e8225b4d7ace0a2039de752e11fd6922d3b89a7259a292c347391c4788739f6
+
[ftp://ftp.gnu.org/gnu/binutils/binutils-2.19.tar.bz2]
md5=17a52219dee5a76c1a9d9b0bfd337d66
sha256=bd2ea10ffc2bf62a917b05f4fbe3d02212589c2bc177fa0c51a9c874d3da528a
@@ -2254,6 +2474,10 @@ sha256=52f78aa4761a74ceb7fdf770f3554dd84308c3b93c4255e3a5c17558ecda293e
md5=1e80b2a4e0d17aba3e377b3ee140ab5e
sha256=a226f7b37694669aa6efe6c30462e2d44f5881ca70604dac15c23fce66992872
+[http://download.berlios.de/bitbake/bitbake-1.8.12.tar.gz]
+md5=01f6404d96cfa1d165d07921d754271e
+sha256=ee81df164f8476dfe44c1841a27b3a0db49dea382c38d5ffb7e19a4747ca17af
+
[http://download.berlios.de/bitbake/bitbake-1.8.6.tar.gz]
md5=0e0dacaae704aed08a940389250e61e9
sha256=fd8a9e9e916314f9385f497d1f9b81d0885487f7741ad7be790972f44fc68b25
@@ -2302,6 +2526,10 @@ sha256=b1e6d5912546d2a4b704ec65c2b9664aa3b4663e7d800e06803330335a2cb764
md5=62edc09c9908107e69391c87f4f3fd40
sha256=b1e6d5912546d2a4b704ec65c2b9664aa3b4663e7d800e06803330335a2cb764
+[ftp://ftp.us.debian.org/debian/pool/main/b/blktool/blktool_4.orig.tar.gz]
+md5=62edc09c9908107e69391c87f4f3fd40
+sha256=b1e6d5912546d2a4b704ec65c2b9664aa3b4663e7d800e06803330335a2cb764
+
[http://gpe.linuxtogo.org/download/source/blueprobe-0.13.tar.gz]
md5=33745b0e86603124654773c1361df33e
sha256=b4318d0e1ba7422ba4415838448718e037efe4d8236cf12132075ccf36d1803d
@@ -2342,6 +2570,18 @@ sha256=ad1cbca751301b5b8c735509b905bf7642de6110ec3dda939153cbb9df6db8cb
md5=4f0bd19dd04a32eba6149b82b26c3f30
sha256=9e042fcf2d29a58bd60fe3743130095992c62da4c865d01e6fea2d8d6d20583a
+[http://www.kernel.org/pub/linux/bluetooth/bluez-4.29.tar.gz]
+md5=9198f428277693c16c212910996075b4
+sha256=4fe29e8b7c28e6802853867531307704a78f69f37a09d7565268141a2a462644
+
+[http://www.kernel.org/pub/linux/bluetooth/bluez-4.30.tar.gz]
+md5=f6a4b58907a6bec424247ee572d43a2c
+sha256=5a2e6e83062699fb01babfb5b211054e01dde097d3b31767135be5447bb05bde
+
+[http://www.kernel.org/pub/linux/bluetooth/bluez-4.31.tar.gz]
+md5=53a3347a1c38971bee4c4016b45bcf6d
+sha256=f6cfceb541a10849805f853b790bc8343309e7b21078a9c18a7a6a8cf2f94e3b
+
[http://www.kernel.org/pub/linux/bluetooth/bluez-4.7.tar.gz]
md5=2aa806940d2c841e57a9b2ab7302b750
sha256=ed384dea4f5f21157758fcd7db64db19ce0b410509c26630706e4a3c779287a0
@@ -2550,6 +2790,10 @@ sha256=6232e93205acbc8c705f44f15977aae158550c99a384f41606cff26c16393be0
md5=2b999b2fb7798e1737d1fff8fac602ef
sha256=6232e93205acbc8c705f44f15977aae158550c99a384f41606cff26c16393be0
+[http://downloads.sourceforge.net/boost/boost_1_34_1.tar.bz2]
+md5=2d938467e8a448a2c9763e0a9f8ca7e5
+sha256=0f866c75b025a4f1340117a106595cc0675f48ba1e5a9b5c221ec7f19e96ec4c
+
[http://heanet.dl.sourceforge.net/boost/boost_1_34_1.tar.bz2]
md5=2d938467e8a448a2c9763e0a9f8ca7e5
sha256=0f866c75b025a4f1340117a106595cc0675f48ba1e5a9b5c221ec7f19e96ec4c
@@ -2698,6 +2942,26 @@ sha256=cf3957b4548df051cd0971d179cb92dc0fcab3839977ddb70aae81c14cd04b03
md5=d113f2777e4f508faa8b674ece87a37b
sha256=f2b433270f22aad86f61cef61d95338aaa63dbe2f9468b9ed5defd1c01c9645f
+[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-depmod.patch]
+md5=7c9dfb5dcd66a1d6e837e72ad0cb05d4
+sha256=35e3854599a074ce1b47872ab1b97a625ed7d1ab3345b918f7f60524f5e390c5
+
+[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-init.patch]
+md5=7afb3a1b474742bc198b3c8450ab9a7e
+sha256=39a8efb5a50c56feb733e519365b4e188c25c0e925a1a63cc1ace9735a80100f
+
+[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-mdev.patch]
+md5=a72d169e9545e26257032e0e367feb95
+sha256=fd4a64c6a83e07586de0360258162c5bf431f164b3980301185743e4029940df
+
+[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-modprobe.patch]
+md5=b2b9d0992b055816077ec9e0e4ee7775
+sha256=ba540cad8a029ff2eec7b078e31a308f408c074a13160aa7eba80f5ca18ee703
+
+[http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-tar.patch]
+md5=90d093817855bc63ad16fbb8524f80df
+sha256=9427fa9b45f3c322bf4fe2463c99c972e6ae03df630899b38be4f29133708a0e
+
[http://www.busybox.net/downloads/busybox-1.13.2.tar.gz]
md5=aeb526108f13b91c02b115c8d86f9659
sha256=03fc9dbdc6f44afd2da55c0ab36646d2d063708cc35f3f4569b913b064f11d83
@@ -2766,6 +3030,10 @@ sha256=624381208d0faae6c123bc6198a59d6c4316cd4fffb1ba5aca206374f5a42df6
md5=53c44b73aa67d5e0282adfe928f3ba44
sha256=624381208d0faae6c123bc6198a59d6c4316cd4fffb1ba5aca206374f5a42df6
+[ftp://invisible-island.net/byacc/byacc-20081225.tgz]
+md5=b9715b9a2867c221176b597e8f73cbc9
+sha256=1364c7fe382de659e8b9841a1736b645345a460d2f4302303e80c02235a2a575
+
[http://downloads.sourceforge.net/bzflag/bzflag-1.10.6.20040515.tar.bz2]
md5=8e3e5fbef3cfa21079eb06269e6b3d8b
sha256=0329e3d0a59e9cc167733ed2b89a0dc2249725642a065cfd385bf1206fe30b19
@@ -2906,6 +3174,10 @@ sha256=837ba51635e01209dc2886491afbc2e97629bfaf32e73566a1862ea0dc090756
md5=ffd824f13f99011984399fc3b7526c71
sha256=837ba51635e01209dc2886491afbc2e97629bfaf32e73566a1862ea0dc090756
+[http://www.pengutronix.de/software/socket-can/download/canutils/v3.0/canutils-3.0.2.tar.bz2]
+md5=45787d61ba969bcf08b7a65143fad8e3
+sha256=3b10a3e62de58c593d53b7913e4d16b7785469b66fd9da0190b01fa3f6c73f92
+
[http://downloads.sourceforge.net/cbrpager/cbrpager-0.9.14.tar.gz]
md5=0ce88fc52025b44812d090d10244b2a4
sha256=9c86a5668a2834f02ec44967737d6341c575e2a1deec76944f47be0292a3cfd7
@@ -2954,10 +3226,18 @@ sha256=005db45ef4ee017f5c32ec124f913a0546e77014266c6a1c50df902a55fe64df
md5=7218e778b5970a86c958e597f952f193
sha256=1b79fae1aedc692f87d1344410f5c6b666961afccdc78bc5c4c257c450dfa008
+[http://cdrkit.org/releases/cdrkit-1.1.9.tar.gz]
+md5=cbc0647e5d85f0e8fb3a692ba1d42edd
+sha256=d5d58ab4c7bef036a53ef9742b4e57621f61310cd0cd28f558ba0b88c354efa2
+
[ftp://ftp.berlios.de/pub/cdrecord/cdrtools-2.01.tar.bz2]
md5=d44a81460e97ae02931c31188fe8d3fd
sha256=728b6175069a77c4d7d92ae60108cbda81fbbf7bc7aa02e25153ccf2092f6c22
+[http://ftp.berlios.de/pub/cdrecord/cdrtools-2.01.tar.bz2]
+md5=d44a81460e97ae02931c31188fe8d3fd
+sha256=728b6175069a77c4d7d92ae60108cbda81fbbf7bc7aa02e25153ccf2092f6c22
+
[http://downloads.sourceforge.net/cdstatus/cdstatus-0.96.05.tar.gz]
md5=cd7ea4ef72a08b388523c528d81ba3ca
sha256=f33cbb551e494747b76bfbeba3954b4839fe7c849f200746fd7dc21bd665aa56
@@ -3090,14 +3370,26 @@ sha256=cc7f90983aa61b3d893c3311e3f832c5faa204467143cff597ad80bf8ad24daa
md5=34a9d58cf5bcb04dbe3eb32b5367a3f8
sha256=702cb5928bff3d0e647a4a6b505d434e3a0f10f2af74bddac5239a200b92d1e2
+[http://downloads.sourceforge.net/clamav/clamav-0.90.2.tar.gz]
+md5=39d1f07a399b551b55096b6ec7325c33
+sha256=30df6a5d4a591dcd4acd7d4cce54dcfd260280fce6bbc9d19d240967bcdabbfa
+
[http://heanet.dl.sourceforge.net/clamav/clamav-0.90.2.tar.gz]
md5=39d1f07a399b551b55096b6ec7325c33
sha256=30df6a5d4a591dcd4acd7d4cce54dcfd260280fce6bbc9d19d240967bcdabbfa
+[http://downloads.sourceforge.net/clamav/clamav-0.90.3.tar.gz]
+md5=d42ccf7a32daeb7c7cc3c8c23a7793ea
+sha256=939913d15ad0dc583ba609274ae61a948f4fa18b848bd503d958feacdaab54a4
+
[http://heanet.dl.sourceforge.net/clamav/clamav-0.90.3.tar.gz]
md5=d42ccf7a32daeb7c7cc3c8c23a7793ea
sha256=939913d15ad0dc583ba609274ae61a948f4fa18b848bd503d958feacdaab54a4
+[http://downloads.sourceforge.net/clamav/clamav-0.91.1.tar.gz]
+md5=60152bf1e24b3fbdf0473794199e5215
+sha256=f98edecae40473c142fe49a0e02f5ff7fb28d778c4bd510dad747d208d20cb00
+
[http://heanet.dl.sourceforge.net/clamav/clamav-0.91.1.tar.gz]
md5=60152bf1e24b3fbdf0473794199e5215
sha256=f98edecae40473c142fe49a0e02f5ff7fb28d778c4bd510dad747d208d20cb00
@@ -3190,6 +3482,10 @@ sha256=be080113c9e9d137ee14eaf7f731c5ae58d24924748aaa725d0f061d59265f3b
md5=ff4104b0e58bca1b61d528edbd902769
sha256=71d8c6459a4be1912dbc445e2e9d46303be6623cea51563c21abe39c8b5b0bd2
+[http://downloads.sourceforge.net/clish/clish-0.7.1.tar.gz]
+md5=27d9b5c12f7d3a1877aeb34f2048e7fa
+sha256=5c7f2bf864b34d4bb17d7d046eca4f07f8174ce4ca3a73339b956fedd95c9752
+
[http://heanet.dl.sourceforge.net/clish/clish-0.7.1.tar.gz]
md5=27d9b5c12f7d3a1877aeb34f2048e7fa
sha256=5c7f2bf864b34d4bb17d7d046eca4f07f8174ce4ca3a73339b956fedd95c9752
@@ -3206,6 +3502,10 @@ sha256=a69fd566af24b85a10c5ecd957a85b7f5eb1c56995d2b999219b52f353ea1de9
md5=181cf9a827fd072717d9b09d1a1bda74
sha256=ef9af373ea953362e42c9a3bdcbf8ef317bca4a407ffab9fe36c1b2807680630
+[http://downloads.sourceforge.net/clucene/clucene-core-0.9.21b.tar.bz2]
+md5=ba1a8f764a2ca19c66ad907dddd88352
+sha256=202ee45af747f18642ae0a088d7c4553521714a511a1a9ec99b8144cf9928317
+
[http://heanet.dl.sourceforge.net/clucene/clucene-core-0.9.21b.tar.bz2]
md5=ba1a8f764a2ca19c66ad907dddd88352
sha256=202ee45af747f18642ae0a088d7c4553521714a511a1a9ec99b8144cf9928317
@@ -3230,6 +3530,10 @@ sha256=f20607d4f33376ea648307681630574662d0c3f59d88a7a02ad547b6320631f1
md5=e95ae003672dfc6c8151a1ee49a0d4a6
sha256=4999d3054a04e6cf4847a72316e32e9e98e6152b1fd72adc87d15e305f990f27
+[http://www.cmake.org/files/v2.6/cmake-2.6.3.tar.gz]
+md5=5ba47a94ce276f326abca1fd72a7e7c6
+sha256=3c3af80526a32bc2afed616e8f486b847144f2fa3a8e441908bd39c38b146450
+
[http://install.tarball.in.source.dir/codec_engine_2_10_01.tar.gz]
md5=32b0df93b285ee094e053552d9301cb6
sha256=eb9f4b4b5973f444d16920201dfea217fb30542fea23107cf80a1f189408b321
@@ -3370,6 +3674,10 @@ sha256=905ee280a38f479ab7da75e6dfba21f221b23bb068111ebddc4c2e853f3fff09
md5=c8be31ffebdae0e007ea587a11994e75
sha256=64dfe89e56167bde80c6a18831b5a4259215c78c34ca16f4cb9fde10ffe54437
+[http://pypi.python.org/packages/source/C/ConfigObj/configobj-4.5.3.tar.gz]
+md5=6e2b37301439705831bd510d2a198431
+sha256=4276fcc96d81f0ba923f3a8c44c3cb55ac72c00fa79d35f1e3ccb4d410b3d7c5
+
[http://download.savannah.gnu.org/releases/confuse/confuse-2.5.tar.gz]
md5=4bc9b73d77ebd571ac834619ce0b3582
sha256=65451d8d6f5d4ca1dbd0700f3ef2ef257b52b542b3bab4bbeddd539f1c23f859
@@ -3378,6 +3686,14 @@ sha256=65451d8d6f5d4ca1dbd0700f3ef2ef257b52b542b3bab4bbeddd539f1c23f859
md5=493aa462d01d7c5f0461d6d7f9f549b1
sha256=1d56be1036de59926548e3defa4b9af894af9e2121d3598da13769da5c0f55b1
+[http://ftp.moblin.org/connman/releases/connman-0.10.tar.gz]
+md5=094743343e062ea370fcd461aa48a7fe
+sha256=bba3adf21a59f5836b1ba2615894e891627d9bcc863525f1892bc36e4e76124e
+
+[http://repo.moblin.org/connman/releases/connman-0.10.tar.gz]
+md5=094743343e062ea370fcd461aa48a7fe
+sha256=bba3adf21a59f5836b1ba2615894e891627d9bcc863525f1892bc36e4e76124e
+
[ftp://ftp.moblin.org/connman/releases/connman-0.2.tar.gz]
md5=bf48aa07d3c1e5fe272c7f139bc01fc9
sha256=eacc3c57cffb411b09d834d2225323cde5676165b5d2fc2a27b16cde98e3ba97
@@ -3390,6 +3706,18 @@ sha256=e3a35e2ee2cc729bd637a69c7f82d6672317738d29dacab067468bb0634eb0de
md5=3f1995bf91846b601a25a37832c88cb6
sha256=d40272cfb9a9990a32f6985056735df53d7368eacc28b31b8141de1fb2cb414d
+[ftp://ftp.moblin.org/connman/releases/connman-0.9.tar.gz]
+md5=a5ebd17ff19e8f9b4d5e783d345d135b
+sha256=9c626bda7e2cc460cdbfe9a14c13208253de6922a341ef60ba51a673c0317996
+
+[ftp://ftp.moblin.org/connman/releases/connman-gnome-0.4.tar.gz]
+md5=c9a3b384f080ed4cdf139ce9377ef2c8
+sha256=d7acac8bc0a38dfcab098137a76f5e9f4ce30ca86e82b26540502658e6b4e4a7
+
+[http://repo.moblin.org/connman/releases/connman-gnome-0.4.tar.gz]
+md5=c9a3b384f080ed4cdf139ce9377ef2c8
+sha256=d7acac8bc0a38dfcab098137a76f5e9f4ce30ca86e82b26540502658e6b4e4a7
+
[http://www.conserver.com/conserver-8.1.14.tar.gz]
md5=f7825728e5af8992ed4a99fb560a3df8
sha256=48a9e2f8a02054bc6740ae354433bfa1636a6e726f2d62af22752d7a6103410b
@@ -3454,6 +3782,10 @@ sha256=7c3181475402d2b547a407a77b1a8de986eb3a19ee2051f2748e968a7ab83a8c
md5=c15219721e6590fa13bf50af49e712c2
sha256=efa27532ec6dc12a21f703ad4a0f612e613e9cc2575147685db81cc701952ac9
+[ftp://ftp.gnu.org/gnu/coreutils/coreutils-7.1.tar.gz]
+md5=cbb2b3d1718ee1237b808e00b5c11b1e
+sha256=813cb19fa19a885f342664109c7c5810f0081b624ff317bba8d1b6ccd83c2a05
+
[http://www.rpsys.net/openzaurus/patches/archive/corgi_rearrange_lcd-r0.patch]
md5=c1bec44c92f5da5abad97137c73b1365
sha256=d4dc8f0583e616e74ea41b103d5f6a29b6d079ce37eaf9f362825514c7082490
@@ -3610,6 +3942,10 @@ sha256=b4ff8e934da7db32d5654360ea9068faa0ed5a00fde02161ae53c2052510d00f
md5=bf44783d9b46130bee9f2995e6055470
sha256=e7485d6b3dcbd338a2361aff66c516f8dfafc1c81ea5b01396f6ee5f365c4eb3
+[ftp://ftp.easysw.com/pub/cups/1.3.8/cups-1.3.8-source.tar.bz2]
+md5=90ed7449948994ad1b22b0b177ab6ba6
+sha256=d488980f84ad0e6044a67859144306980624cafb654eb0cab071b3e46fee6e1d
+
[http://curl.haxx.se/download/curl-7.14.0.tar.bz2]
md5=46ce665e47d37fce1a0bad935cce58a9
sha256=72987b68c265c262f073f7a0273f3c2f57dfe8b455da0f92f03914418d86f081
@@ -3642,6 +3978,10 @@ sha256=b1f47a0177a5b13d317ab1f6570510502739909ede550e7da08ba814c3c73ae8
md5=c299c5e0f20f633791b4c4f7ced4effe
sha256=a0e28b019f022942650ffa4bdf46e4c09bd8ec18e6ca5f08ad273668115f51f7
+[http://downloads.sourceforge.net/curlftpfs/curlftpfs-0.9.2.tar.gz]
+md5=b452123f755114cd4461d56c648d9f12
+sha256=4eb44739c7078ba0edde177bdd266c4cfb7c621075f47f64c85a06b12b3c6958
+
[http://heanet.dl.sourceforge.net/curlftpfs/curlftpfs-0.9.2.tar.gz]
md5=b452123f755114cd4461d56c648d9f12
sha256=4eb44739c7078ba0edde177bdd266c4cfb7c621075f47f64c85a06b12b3c6958
@@ -3878,6 +4218,14 @@ sha256=4a319a08ae0838234f5b6fbd0b4d2e0fac7560a7553a4e1b043527cc17032aa3
md5=537cda2dff7dfaf87660fee91b2cf78f
sha256=bd7ce3b854678209e8624698a4000d3e5337339c3825c58a4b3a0a2fbf1a7819
+[http://downloads.sourceforge.net/ddccontrol/ddccontrol-0.4.2.tar.bz2]
+md5=b0eb367f3bc0564bd577e38d0b4107fc
+sha256=986f3b4b27ec04e1da493de3aaab01cd5ea9566d7572c1a40b8d43cd7a491e84
+
+[http://downloads.sourceforge.net/ddccontrol/ddccontrol-db-20061014.tar.bz2]
+md5=91951918e5bc553c251776cdff8cea9c
+sha256=ff88f8e5122a2ab7b69a961f267f74d09ec7c54e90453ee80930edf66955c7b8
+
[http://downloads.sourceforge.net/ddclient/ddclient-3.6.3.tar.bz2]
md5=42a3a420e492c0111adc58ac08ff6d04
sha256=28be7102bde3bc9b39be2732b89da9fbab79b7ac3898075ed414a45258bb3026
@@ -3894,6 +4242,14 @@ sha256=46c0991b71d1991aa2f90d6816d9efb737fc9f9b99713174fcdf8d323727a11c
md5=7fdd5f8395162d8728d4b79e97b9819e
sha256=d62e98fee5b1a758d83b62eed8d8bdec473677ff782fed89fc4ae3ba3f381401
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/d/debianutils/debianutils_2.30.tar.gz]
+md5=7fdd5f8395162d8728d4b79e97b9819e
+sha256=d62e98fee5b1a758d83b62eed8d8bdec473677ff782fed89fc4ae3ba3f381401
+
+[ftp://ftp.us.debian.org/debian/pool/main/d/debianutils/debianutils_2.30.tar.gz]
+md5=7fdd5f8395162d8728d4b79e97b9819e
+sha256=d62e98fee5b1a758d83b62eed8d8bdec473677ff782fed89fc4ae3ba3f381401
+
[ftp://ftp.gnu.org/gnu/dejagnu/dejagnu-1.4.4.tar.gz]
md5=053f18fd5d00873de365413cab17a666
sha256=d0fbedef20fb0843318d60551023631176b27ceb1e11de7468a971770d0e048d
@@ -4002,18 +4358,34 @@ sha256=44396b3b324433187cf7082d1059cd9f519f02accddd667e627a57ff8514d436
md5=1180dee7a51a4384d55768650634cf93
sha256=e5facfcab28377d32fd4c70aa1fe0820d3dba4abdfc48bd15eda712c8815e505
+[https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-1.14.tar.gz]
+md5=1180dee7a51a4384d55768650634cf93
+sha256=e5facfcab28377d32fd4c70aa1fe0820d3dba4abdfc48bd15eda712c8815e505
+
[http://people.redhat.com/dcantrel/dhcdbd/dhcdbd-1.16.tar.gz]
md5=002e9d7d85a2f0e6261b6bf501c53a3e
sha256=f399428e0e191233b4dcead88afbe78a26cc16bd9a47e305f6dd3299e011ef18
+[https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-1.16.tar.gz]
+md5=002e9d7d85a2f0e6261b6bf501c53a3e
+sha256=f399428e0e191233b4dcead88afbe78a26cc16bd9a47e305f6dd3299e011ef18
+
[http://dcantrel.fedorapeople.org/dhcdbd/dhcdbd-2.0.tar.bz2]
md5=d71de5c2f8aea4c8a18659bfa8387414
sha256=51d36747b8386e18631e5b2a278cf9ef077441cb116a66b72edddecb939724c4
+[https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-2.0.tar.bz2]
+md5=d71de5c2f8aea4c8a18659bfa8387414
+sha256=51d36747b8386e18631e5b2a278cf9ef077441cb116a66b72edddecb939724c4
+
[http://dcantrel.fedorapeople.org/dhcdbd/dhcdbd-3.0.tar.bz2]
md5=5316b1a0b3a3d53e972374627546d0bf
sha256=c62d5916dbd4d3148bd4deff355c3dfcb8092c2d9918d62dd24030e01c28361a
+[https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-3.0.tar.bz2]
+md5=5316b1a0b3a3d53e972374627546d0bf
+sha256=c62d5916dbd4d3148bd4deff355c3dfcb8092c2d9918d62dd24030e01c28361a
+
[ftp://ftp.isc.org/isc/dhcp/dhcp-2.0-history/dhcp-2.0pl5.tar.gz]
md5=ab22f363a7aff924e2cc9d1019a21498
sha256=ef0fa044354ea42983584fcf94838445d8c8167b07630ad1a1057ea4783794b7
@@ -4066,6 +4438,10 @@ sha256=31e8e536f5efd7d7d1d5f4e4458b42aa9cd7910acf3da933cb7fa3507cf7f752
md5=1fd89c902006271f00a774cc3183c15d
sha256=dcc1809e8477b95317a7ff503cdd8b6d3f85b8d83a3245252ff47cf631523620
+[http://kernel.org/pub/linux/libs/dietlibc/dietlibc-0.31.tar.bz2]
+md5=acb98d469ee932d902fdf6de07802b7c
+sha256=99613d6a67f747f52e4184c613f7cba5cbb76af237c9acd04742e3ca24cf56cd
+
[ftp://source.mvista.com/pub/xscale/pxa/diff-2.4.18-rmk7-pxa3.gz]
md5=249c7a63a506d302c96be26517a70298
sha256=ca569dfa1e5cfd2f4134f3f61f667bcfab5e15c7d43c8a6e835d384ac5b31a07
@@ -4126,6 +4502,10 @@ sha256=00ca6747501d1b6034398ba5482dcb1e7cf3aff8739fbff0c72e58602d68774c
md5=0d6b80a1efc3a3d816c4f4175f63eaa2
sha256=6500f1bc2a30b1f044ebed79c6ce15457d1712263e65f0db7d6046af262ba434
+[http://distcc.googlecode.com/files/distcc-3.1.tar.bz2]
+md5=a1a9d3853df7133669fffec2a9aab9f3
+sha256=f55dbafd76bed3ce57e1bbcdab1329227808890d90f4c724fcd2d53f934ddd89
+
[http://0pointer.de/public/distcc-avahi.patch]
md5=621dc7dc1e3b9b6770110117df45611a
sha256=e6651e3de7fee6d953b6ee56732eafa7d4666cb4070db5a925ba071626067c9a
@@ -4186,6 +4566,10 @@ sha256=7b5b456e6ccb3a36cc96b84b79ba148850ab59ac45316b759a090a1121f93e13
md5=79ec740d1a10ee75f13efa4ff36d0250
sha256=9888d96d7d91e518c96a034dc863f8f7d961acd9334a1acde849c6022e540212
+[http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.47.tar.gz]
+md5=4524081e56d0b935717d493e8e8d3e11
+sha256=f2716a43eb05b232c640a4ad647fd0fc21dd0c4f4ad20c9f5303568742399e5d
+
[http://www.docbook.org/sgml/3.1/docbk31.zip]
md5=432749c0c806dbae81c8bcb70da3b5d3
sha256=20261d2771b9a052abfa3d8fab1aa62be05791a010281c566f9073bf0e644538
@@ -4198,6 +4582,10 @@ sha256=deaafcf0a3677692e7ad4412c0e41c1db3e9da6cdcdb3dd32b2cc1f9c97d6311
md5=f89e1bd0b2c7a361e3f1f739e16b5d0d
sha256=0ac7960409b032c8e517483523ecb92af4e59196a33b3e2c5617daa22b7a8a6c
+[http://downloads.sourceforge.net/docbook/docbook-dsssl-1.79.tar.bz2]
+md5=bc192d23266b9a664ca0aba4a7794c7c
+sha256=2f329e120bee9ef42fbdd74ddd60e05e49786c5a7953a0ff4c680ae6bdf0e2bc
+
[http://heanet.dl.sourceforge.net/docbook/docbook-dsssl-1.79.tar.bz2]
md5=bc192d23266b9a664ca0aba4a7794c7c
sha256=2f329e120bee9ef42fbdd74ddd60e05e49786c5a7953a0ff4c680ae6bdf0e2bc
@@ -4266,6 +4654,10 @@ sha256=c33aeb300d93eaeac55927ce81dc6f3a1cf74b3b759b65182c9bfca31b75b98f
md5=0fc9fffc2c2cfa7107d8f422815078c1
sha256=c33aeb300d93eaeac55927ce81dc6f3a1cf74b3b759b65182c9bfca31b75b98f
+[ftp://ftp.us.debian.org/debian/pool/main/d/dpkg/dpkg_1.13.22.tar.gz]
+md5=0fc9fffc2c2cfa7107d8f422815078c1
+sha256=c33aeb300d93eaeac55927ce81dc6f3a1cf74b3b759b65182c9bfca31b75b98f
+
[ftp://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.13.24.tar.gz]
md5=d8ec0b2bf86d5277fb50f8d391c0dd4a
sha256=8b1ed52659c5f6723f37bf1122508d7f1b82e064aa9db04d18d726bde34c2713
@@ -4282,6 +4674,10 @@ sha256=a525f321e875a8c16f5b6942bc02ac66b0d284cc6c61704f93e74789ef89d817
md5=88effb358aa04d25036b662d588433a6
sha256=a525f321e875a8c16f5b6942bc02ac66b0d284cc6c61704f93e74789ef89d817
+[ftp://ftp.us.debian.org/debian/pool/main/d/dpkg/dpkg_1.13.25.tar.gz]
+md5=88effb358aa04d25036b662d588433a6
+sha256=a525f321e875a8c16f5b6942bc02ac66b0d284cc6c61704f93e74789ef89d817
+
[ftp://ftp.pl.debian.org/pub/debian/pool/main/d/dpkg/dpkg_1.14.19.tar.gz]
md5=dad1a4a08c475b31a6b62e7dc92fe9d2
sha256=5287e943265b9efe5bd59cd1f3145d3fbf9e266df28938ad78e2107fde3c1587
@@ -4290,6 +4686,14 @@ sha256=5287e943265b9efe5bd59cd1f3145d3fbf9e266df28938ad78e2107fde3c1587
md5=9c1744d32ceed71cbe1db863f64d329d
sha256=7d27f2389e05b8727c6a7126c0b65d67749c170ba143e648912a88f2fe707bca
+[ftp://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.14.25.tar.gz]
+md5=6bf3504b07d8fe2175a5d794391280de
+sha256=545ce9830f0cf649e3b1b40d25d13989c23302623bf9b50f4c24402f63c82184
+
+[ftp://ftp.us.debian.org/debian/pool/main/d/dpkg/dpkg_1.14.25.tar.gz]
+md5=6bf3504b07d8fe2175a5d794391280de
+sha256=545ce9830f0cf649e3b1b40d25d13989c23302623bf9b50f4c24402f63c82184
+
[http://xorg.freedesktop.org/releases/individual/proto/dri2proto-1.1.tar.bz2]
md5=1d70f0653b0b3a837853262dc5d34da4
sha256=69def6d1f64b3699ec9c729596d8b096623a62bdda6bbea78ed690421d174c11
@@ -4326,6 +4730,10 @@ sha256=39999c5bfb663404f6450da66d98d69193a5d0ab496d2d47cc53cd0202c4051c
md5=95d900913bee4b27d7e9ce55f8a55427
sha256=8daa89512f9349fc131d48555726ffe1187e0f7d9f4cef992464c8098d86e77c
+[http://matt.ucc.asn.au/dropbear/dropbear-0.52.tar.bz2]
+md5=a1fc7adf601bca53330a792a9c873439
+sha256=8c7b727a4c9066e90a14f7f01c47cab698afb5a854ffa0404da162d4286f04c1
+
[http://www.monkey.org/~dugsong/dsniff/dsniff-2.3.tar.gz]
md5=183e336a45e38013f3af840bddec44b4
sha256=82e492455486e655c315f027d393dbeb49ad930804acccdc51b30d57e1294ff5
@@ -4366,6 +4774,10 @@ sha256=dabbe5a77ffcffd906333589a75013e4b40113238b6b09f7f2ad280ba3bb6a1c
md5=e6e608907a291016a39c9e3442dfd50c
sha256=d8c6dedb4f828c90c1c0f36c35bc4539e81e2220c8b01cd5dc957f9116b4e478
+[http://downloads.sourceforge.net/duma/duma_2_5_7.tar.gz]
+md5=d3e981cdc2b78de652215da9b4ac399f
+sha256=6d851f4117002d3523354b70c3f9be4abe5325b084ff54d01ac6daa5ce9a5944
+
[http://heanet.dl.sourceforge.net/duma/duma_2_5_7.tar.gz]
md5=d3e981cdc2b78de652215da9b4ac399f
sha256=6d851f4117002d3523354b70c3f9be4abe5325b084ff54d01ac6daa5ce9a5944
@@ -4374,6 +4786,10 @@ sha256=6d851f4117002d3523354b70c3f9be4abe5325b084ff54d01ac6daa5ce9a5944
md5=cc101da3b436607ee2265b5af5001484
sha256=ab7c305be32708c4ede670e13783b718e6a28e35b5495e6c42c31c35a8b512a6
+[http://www.threekong.com/download/dweba/dweba-1.0.0-pre14.tar.gz]
+md5=6f0bd0bcda35c6a96cc3853f16ba82d4
+sha256=ea32ca58b6500d9061177da23ef03f918ef0c5bbbdd082a843f4834cef9c4957
+
[http://rcdrummond.net/uae/e-uae-0.8.28/e-uae-0.8.28.tar.bz2]
md5=9fc186f9256d04f940304044e29175ef
sha256=afc8b30fb9aa0819a4e53b3eb0db8e658e5a2b23d7dbf436f6b5a49b2269da86
@@ -4398,6 +4814,14 @@ sha256=635d6d07e5a4d615e599c051166af965baa754f9ff7435e746de1a5d2a5c0d56
md5=1c1c5177aea9a23b45b9b3f5b3241819
sha256=635d6d07e5a4d615e599c051166af965baa754f9ff7435e746de1a5d2a5c0d56
+[http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.41.4.tar.gz]
+md5=59033388df36987d2b9c9bbf7e19bd57
+sha256=2cc10fee2b29add737e454eb634513135b34a638f7ca2b18364864fe089020dc
+
+[http://qa.debian.org/watch/sf.php/e2fsprogs/e2fsprogs-1.41.4.tar.gz]
+md5=59033388df36987d2b9c9bbf7e19bd57
+sha256=2cc10fee2b29add737e454eb634513135b34a638f7ca2b18364864fe089020dc
+
[http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-libs-1.33.tar.gz]
md5=c7545bb05e0c2fc59174f0dc455c6519
sha256=a65d064bee3e97c164d07a490692db0e73da8da10019ad9a89866706c93ae703
@@ -4482,6 +4906,10 @@ sha256=2382f315fda4241a0043bac1dfc669f006d8e93e87fa382b263b1672972f4077
md5=412d8badd227807ef2f52608435240fb
sha256=dfe24798ca067c75c84f01bf4ee3734fde3e32e4f270f7222025218d3baffbbb
+[http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4.1-200809111700/ecjsrc-3.4.1.zip]
+md5=4c9fe7b0c4e760e13fa887b85f8db295
+sha256=b5725fa7f8b1f7dc28776e60591e9ef0c171629fe567ef49ab9be28516ff2cd6
+
[http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4-200806172000/ecjsrc-3.4.zip]
md5=f7b84d912e61dfdd77b7173065845250
sha256=a6ce5f0682462e85e5e47229e5b16555f74c60188fa0bb17536beb1138c537b4
@@ -4550,6 +4978,10 @@ sha256=889c8cff395bc488a6ccfb3fc22fd241a12c33f114bb7d7ec4138d5999da9c5d
md5=05c65e4cd84b36baa42e3eee1e652c97
sha256=8d5154877e0f8aa57401a288c5650e5c1dc0efe0b4104796aae1d4b303febace
+[http://downloads.sourceforge.net/ede/efltk-2.0.7.tar.gz]
+md5=f0300fd2fec47d4b05823297032ddb9f
+sha256=9636876e3c52f0dde5d6ac097568cad9fe8ea7088e28e27a3aad19b100d4e645
+
[http://heanet.dl.sourceforge.net/ede/efltk-2.0.7.tar.gz]
md5=f0300fd2fec47d4b05823297032ddb9f
sha256=9636876e3c52f0dde5d6ac097568cad9fe8ea7088e28e27a3aad19b100d4e645
@@ -4562,6 +4994,10 @@ sha256=03b1ab04397745d22d6e76bd71a6e7fbaf6988e0d75bf2d6face1c910309ac36
md5=e4d388137900b2e7f29b5a113b2a0b5b
sha256=9ec176847b1e01cd2083cd578e804fda2c619d0f465cd752ec11b38099f75f7f
+[http://downloads.egenix.com/python/egenix-mx-base-3.1.1.tar.gz]
+md5=d0f3b1adca33a68867bf50f000060cd6
+sha256=a0d03208e335610defc3049d8dd03f4ec7fcf477f44c4897b3f68adc478237ee
+
[http://rogers.com/eject-2.1.5.tar.gz]
md5=b96a6d4263122f1711db12701d79f738
sha256=ef9f7906484cfde4ba223b2682a37058f9a3c7d3bb1adda7a34a67402e2ffe55
@@ -4578,6 +5014,10 @@ sha256=fefd63c13ca28713f7f03320c1e341430ea2d016d3ab3e49163a12f4df2123e7
md5=ec8690ff84b364d2df5b2443a01ba529
sha256=e0360be0eecee68649246c022825dd5422f895958ffa736886dd2a0b9ec7ebda
+[http://effbot.org/media/downloads/elementtree-1.2.7-20070827-preview.zip]
+md5=30e2fe5edd143f347e03a8baf5d60f8a
+sha256=5071431068c58c1f56dcc8fff37f8a213351f3b45c012d3adb640ec9418053ad
+
[http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles/elfutils-0.108.tar.gz]
md5=fd318a634c8f67c7ac8a975f16965cc3
sha256=794070c8108a2d8b7c6890ba42edb37510cc845bf601517cf4a0ea5443dfde29
@@ -4694,6 +5134,10 @@ sha256=45299a4db47c9c08c3649d4f62b211ae79ef5143360c264a40371a728f6ad99b
md5=b5174b59e4a050fb462af5dbf28ebba3
sha256=45299a4db47c9c08c3649d4f62b211ae79ef5143360c264a40371a728f6ad99b
+[ftp://ftp.us.debian.org/debian/pool/main/e/enscript/enscript_1.6.4.orig.tar.gz]
+md5=b5174b59e4a050fb462af5dbf28ebba3
+sha256=45299a4db47c9c08c3649d4f62b211ae79ef5143360c264a40371a728f6ad99b
+
[http://enlightenment.freedesktop.org/files/entrance-0.9.0.007.tar.gz]
md5=b789d09fa76e76a6466a786f0628d0ff
sha256=789846f0a3df54b03a07cd117ee59b53f63a8677662cb2ff754a9be94032ec44
@@ -4722,6 +5166,10 @@ sha256=61d041afc953e0570ddae934179e92edf800f69f043d78058073806504e4137f
md5=383db51e46d13d986966459e4918d236
sha256=bb12585b433fd0eca11865541bdb877166b9e53b0ea12624776f11cce3ce189b
+[http://gstaedtner.net/projects/epiano/epiano-0.3.1.tar.gz]
+md5=7966c489329cff971d97441d69abe19b
+sha256=17e02481c2fec1912241c6a12e8a277f87c3664b73c3a0946ea93461c5a937ae
+
[http://ftp.gnome.org/pub/GNOME/sources/epiphany/2.21/epiphany-2.21.92.tar.bz2]
md5=2e0199851122ecb9d5f2863d92e18aa8
sha256=904275567e54f5fcdb068d544b42da34c0361d3b8d143dfecd878950850a54c9
@@ -4814,6 +5262,10 @@ sha256=4536d6bc9ce52b9f4d505ff36aefca23c1042a92fd2f9a54308eff6e09b1a22b
md5=3882c7c9cb9b4c37b08846dea9370245
sha256=4536d6bc9ce52b9f4d505ff36aefca23c1042a92fd2f9a54308eff6e09b1a22b
+[http://downloads.sourceforge.net/gkernel/ethtool-5.tar.gz]
+md5=5df7f165974e096e2de890e099f87a12
+sha256=9eaad6076e57a5e2019733e4387705dc66829ea17cce04701b436cf5f374bb8f
+
[http://heanet.dl.sourceforge.net/gkernel/ethtool-5.tar.gz]
md5=5df7f165974e096e2de890e099f87a12
sha256=9eaad6076e57a5e2019733e4387705dc66829ea17cce04701b436cf5f374bb8f
@@ -4834,6 +5286,10 @@ sha256=4a2a9f54f3fc68250a92eab43a030b6b96c4b6e251b698b3378bfee751f1cbd8
md5=f665cf82347a91f216184537f8f2c4bd
sha256=2b6b0d1af5b8af63eb5edf7052fdc9f46c55b6f7b607c8772b18927cb481ecf9
+[http://downloads.sourceforge.net/ettercap/ettercap-NG-0.7.3.tar.gz]
+md5=28fb15cd024162c55249888fe1b97820
+sha256=c74239052d62565c13a82f9bbf217a4fdcce4b34949e361b53bb3f28e3168543
+
[http://heanet.dl.sourceforge.net/ettercap/ettercap-NG-0.7.3.tar.gz]
md5=28fb15cd024162c55249888fe1b97820
sha256=c74239052d62565c13a82f9bbf217a4fdcce4b34949e361b53bb3f28e3168543
@@ -4846,6 +5302,10 @@ sha256=34a398c1c27b22652ceacf29b1b3f33feff33f612802ed0c9b57afc1dce9b27e
md5=f939fb9a2c7aab5877f7e420827af027
sha256=fedcf1b669873de67d69d3e81ad88a47414ccfede4a6a73ffa15ab82b1378460
+[http://projects.gstaedtner.net/euphony/euphony-0.1.3.tar.gz]
+md5=47d5663f0c66177e3529b9062f9b071f
+sha256=30f035bc39967f72f3ac8740d78f4d5e611577ea2b90f47f4cd72d6729fd4ce5
+
[http://enlightenment.freedesktop.org/files/evas-0.9.9.037.tar.gz]
md5=21cb713b01be39992a7c48d0ea23429b
sha256=400046d55db03c3ac2de9e3346e38d0a75753501fb85ea953a497cdafc1340a1
@@ -4898,6 +5358,10 @@ sha256=c424e6dd5cc0d998a311f5c49835de9803da4dbcb74ca7fbda29c1b953bf6d6b
md5=ad0e463ab1fe596fc52c03403a9b9f1e
sha256=d8803313e2a0b3fa3fe20fe613ac3ec85ec6848d5d446dd02e9cc5be8194f65c
+[http://beagleboard.googlecode.com/files/evtest.c]
+md5=da26fda6df8835a7cb95182e1fabe912
+sha256=ba2bdf6887eb0ef606402d51a2f4e68510d68dec5afd9f4d30d787950dece770
+
[http://enlightenment.freedesktop.org/files/ewl-0.0.4.007.tar.gz]
md5=29bc8aec80b53480c2ea53aea1796e15
sha256=0a0dba00517013082b8e094b4b7753162cf5fb71a170eb54cbc2eaa35717d5f6
@@ -4970,6 +5434,10 @@ sha256=7754930742d3c3cc2a05af38263ba58ba416b7359f8a0c598ae0f7377277d3b3
md5=6505c9d18ef6b5ce13fe2a668eb5724b
sha256=f7ff9bf972139b303616018a6937aa4c6df4e93c935ffd004b30845e2ad41ea6
+[http://hg.openjdk.java.net/jdk7/hotspot/hotspot/archive/f9d938ede196.tar.gz]
+md5=c8f78d48ac83987bc2adebeebcd354e9
+sha256=89952cf8bbe1bcce91c2c1fcf9a071991a890b3f8a783dee741cdb23c8ac763a
+
[http://downloads.sourceforge.net/faac/faac-1.24.tar.gz]
md5=e72dc74db17b42b06155613489077ad7
sha256=a5844ff3bce0d7c885af71f41da01395d3253dcfc33863306a027a78a7cfad9e
@@ -4998,6 +5466,10 @@ sha256=990cd830ea362ba2cb88ca7b59cd3f4d115a054621450b5cf211cadebed23ee0
md5=b885951b98f4316f9686699e9853513d
sha256=990cd830ea362ba2cb88ca7b59cd3f4d115a054621450b5cf211cadebed23ee0
+[ftp://ftp.us.debian.org/debian/pool/main/f/fakechroot/fakechroot_2.5.orig.tar.gz]
+md5=b885951b98f4316f9686699e9853513d
+sha256=990cd830ea362ba2cb88ca7b59cd3f4d115a054621450b5cf211cadebed23ee0
+
[http://www.hostname.org/fake_connect/fakeconnect-1.2.1.tar.gz]
md5=55220ebadef5f541d705b72fe222b5b1
sha256=4b891e1d58c8cdf397737ac81a9328d8c663743b41f835bb2267831866d75a3e
@@ -5006,6 +5478,14 @@ sha256=4b891e1d58c8cdf397737ac81a9328d8c663743b41f835bb2267831866d75a3e
md5=61d29fcb868c5f9c3d0a3686ce45263e
sha256=7796adabf4514ba535ccd518bb377c839c098cd2a28ba46984a627b2e9382e26
+[ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.12.1.tar.gz]
+md5=87970d6784f536cde84f9bcbaaa52720
+sha256=6810168a3f2e20103d936513bce225dfcdda4bf1ae5f9f8042af47025c097cef
+
+[ftp://ftp.us.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.12.1.tar.gz]
+md5=87970d6784f536cde84f9bcbaaa52720
+sha256=6810168a3f2e20103d936513bce225dfcdda4bf1ae5f9f8042af47025c097cef
+
[http://openzaurus.org/mirror/fakeroot_1.2.13.tar.gz]
md5=cf25d5d4c943ebf2293fe6f23ecba0fd
sha256=6f51ebdf0e18bea58d18f79e8ffebb797fe57bdf44b96dff9d84b70467af7841
@@ -5062,6 +5542,10 @@ sha256=06c2772ae6e446227f6798ad8994fcdb1fe64385bc83a34f7e29fd8af2e4f5da
md5=9441c981bfd4e521abcd5d93385f71d8
sha256=06c2772ae6e446227f6798ad8994fcdb1fe64385bc83a34f7e29fd8af2e4f5da
+[http://ftp.pwr.wroc.pl/debian/pool//main/f/fakeroot/fakeroot_1.9.6.tar.gz]
+md5=9441c981bfd4e521abcd5d93385f71d8
+sha256=06c2772ae6e446227f6798ad8994fcdb1fe64385bc83a34f7e29fd8af2e4f5da
+
[ftp://oss.sgi.com/projects/fam/download/stable/fam-2.6.10.tar.gz]
md5=1c5a2ea659680bdd1e238d7828a857a7
sha256=885ced3480aef3cee519a459a572e31cd2fd5e24bcd35b1d0c8833361699026e
@@ -5094,6 +5578,10 @@ sha256=e8cf4fe15d7e99e86016db3ddc1f403c35c49f40c4d37209d76cd5785c541aa8
md5=3e05910fb7c1d9b2bd3e272d96db069c
sha256=6510dee7c4f45cb63094d540e66aa39d53215c59f46944b8bb050c26b71bdb44
+[http://downloads.sourceforge.net/fbpanel/fbpanel-4.12.tgz]
+md5=12528e7b2936a3548840fe01acaf39f5
+sha256=9f665777df5023e3d3c33598a0f5d81d0b79314b75a128c16c07126ef0fc607f
+
[http://qa.debian.org/watch/sf.php/fbpanel/fbpanel-4.12.tgz]
md5=12528e7b2936a3548840fe01acaf39f5
sha256=9f665777df5023e3d3c33598a0f5d81d0b79314b75a128c16c07126ef0fc607f
@@ -5174,6 +5662,10 @@ sha256=c18e6f23315e0a3526229bd0ba5cf8ce0d747cb5e5ba7cb952ad08c85a1cafac
md5=9956b30139edaa4f5f77c4d0dbd80225
sha256=c18e6f23315e0a3526229bd0ba5cf8ce0d747cb5e5ba7cb952ad08c85a1cafac
+[ftp://ftp.us.debian.org/debian/pool/main/f/fetchmail/fetchmail_6.2.5.orig.tar.gz]
+md5=9956b30139edaa4f5f77c4d0dbd80225
+sha256=c18e6f23315e0a3526229bd0ba5cf8ce0d747cb5e5ba7cb952ad08c85a1cafac
+
[ftp://ftp.debian.org/debian/pool/main/f/fetchmail/fetchmail_6.3.8.orig.tar.gz]
md5=1b84621072b4f906b5686a4fbae0b1d7
sha256=d06e7244dcd2b462c0e7bea0d01edadb54905f4533afc45f971ab9f6ee46497c
@@ -5314,6 +5806,10 @@ sha256=ce4f7d11b3c04a7368c916ca4abc284dd0c0256f461dfb7f07df1ab445e7a5c0
md5=2bfc127cdda02834d0491ab531a20960
sha256=ce4f7d11b3c04a7368c916ca4abc284dd0c0256f461dfb7f07df1ab445e7a5c0
+[http://fpdownload.macromedia.com/get/flashplayer/current//flash-plugin-10.0.12.36-release.i386.rpm]
+md5=8845d4536fcd3a329690c93bce9bbf8e
+sha256=c7345faf10b269b3556f2e1373c4afc35f08891f8bbd54e45d49151a8c8e4ac0
+
[http://downloads.sourceforge.net/flex/flex-2.5.31.tar.bz2]
md5=363dcc4afc917dc51306eb9d3de0152f
sha256=701353279a17655d78e3b3678ad78d0375f5bf45877ad8b3507d589c42427f26
@@ -5342,6 +5838,10 @@ sha256=922225f7001e57a0fbace8833b0a48790a68f6c7b491f2d47c78ad537ab78a8b
md5=d44da0fc0fd495f580b9174d3beb6f7e
sha256=84fa995c461066ed39c587c834414ef1a320f605b6b6e1db2d10d12fa6a587db
+[ftp://ftp.microwindows.org/pub/microwindows/flnx/flnx-0.18-tar.gz]
+md5=2dfdb9b44a1a08a675985bb92d1439e6
+sha256=4a0d868889d5221cc6e4b96f6e8de19bd4fc770fa8e05012c6c169686088088b
+
[ftp://ftp-fourier.ujf-grenoble.fr/xcas/devel/sources/fltk-1.1.4-device.tar.gz]
md5=826c6afa88c9c4da734fe7393ed59639
sha256=a0e31ad5088414aaee003586a23127a5ace7717ba4f8fb4e02cf56bb9a5c30f4
@@ -5358,6 +5858,10 @@ sha256=facba5a97a20ca92b32504174474775c6b12fb67a6f646fa0de18db709c3edde
md5=ee34788a2dc9fdc088a6dc66c31eba34
sha256=c789b355d0ba03b018513c3904bba6d6fab01b3a83a460fbe1b20a79052f46a4
+[http://members.cheese.at/woody/zaurus/src/fltk-chess-0.51.tgz]
+md5=df1f73bdf32f30923d9a2a5717a70913
+sha256=3fffcaf0653c13b249931f76b12119dce8a5b01df056e4b5444f150fec1d5311
+
[http://savannah.nongnu.org/download/fluid/fluidsynth-1.0.8.tar.gz]
md5=e2abfd2e69fd8b28d965df968d7d44ee
sha256=45e7c9967d0fb0344f4da539ab343fb979384b36a429a8594c94cf466dff4320
@@ -5758,6 +6262,10 @@ sha256=3feaaab499b3f9c7e9b8bdc725dd40fde65b2fbb73794845d7f682746470f594
md5=89b65e010acaa3c5d370e1cc0ea9fce9
sha256=77fb4d23dfa8c12d69ccfda71f482af9804132fab800610970cd5fe9944a3016
+[http://kent.dl.sourceforge.net/sourceforge/fordiac/forte-0.3.zip]
+md5=2d01a3d3b9b16bf646e6bb89cb9b0faf
+sha256=c3a61174f6a69252983a9b26ea87005bcab6a72b0bd34ea693e3de89e70eaea6
+
[ftp://ftp.debian.org/debian/pool/main/f/fortune-mod/fortune-mod_1.99.1-2.diff.gz]
md5=5f059f7c997adbc0a260f27947605be1
sha256=d68c7c8ff6fe94341a3a73d22ab976da42921e3bec9bed628a428518c2c5f67a
@@ -5774,6 +6282,10 @@ sha256=fc51aee1f73c936c885f4e0f8b6b48f4f68103e3896eaddc6a45d2b71e14eace
md5=f208805b3b712e32997d7667e0ec52d8
sha256=fc51aee1f73c936c885f4e0f8b6b48f4f68103e3896eaddc6a45d2b71e14eace
+[ftp://ftp.us.debian.org/debian/pool/main/f/fortune-mod/fortune-mod_1.99.1.orig.tar.gz]
+md5=f208805b3b712e32997d7667e0ec52d8
+sha256=fc51aee1f73c936c885f4e0f8b6b48f4f68103e3896eaddc6a45d2b71e14eace
+
[http://linuxtogo.org/~florian/themes/foxbox-0.1.tar.gz]
md5=77bc0cc71d61af699e29f4b5c09b37bb
sha256=bcf668c1123f4d73a4c503ff189446cf4b30d64466fea49628999cdce8661c67
@@ -6022,6 +6534,10 @@ sha256=ab91922367ca4c7ae5b176823eca579b2323c463e5d8b71fe5cdfc1061860124
md5=7c3d52f81816e3a8e0cc2b5822a37e86
sha256=a26117fb74b3bf6a3c6867611c46c53b75d6749198933486ec8a778ac315f855
+[http://downloads.sourceforge.net/fuse/fuse-2.7.1.tar.gz]
+md5=f95b4a238a3df5a92e9013ecb55c2c17
+sha256=e4639f9e08f0b8cc9f4a0bb8cbe47da06fa57cb310b2c5a82221e0a9ba969e9a
+
[http://heanet.dl.sourceforge.net/fuse/fuse-2.7.1.tar.gz]
md5=f95b4a238a3df5a92e9013ecb55c2c17
sha256=e4639f9e08f0b8cc9f4a0bb8cbe47da06fa57cb310b2c5a82221e0a9ba969e9a
@@ -6150,10 +6666,18 @@ sha256=1bb7e12f80b7133c8b45965c4886abb1a7d3e87c74ccaf16b828605ad376f2b8
md5=e39930e94babd42731e20fc7b33ed12e
sha256=7848b7c1992ef202d54a5602904e7d7e190bce0195af69174baa79e741d07e87
+[http://dl.cihar.com/gammu/releases/gammu-1.23.0.tar.bz2]
+md5=bc547e99535a5a05bb7093fa8b4f36a6
+sha256=32ff5fed107ca5eb94976bf22bc5b82ff45c72b8e62f35dc6dba75a2f11e6425
+
[ftp://ftp.gnu.org/gnu/gawk/gawk-3.1.4.tar.gz]
md5=3c8935efb9fdc7202720894279ad04a7
sha256=5cdfe0c0919895e2ec87773c583cc6ebf2b84cba7617d5ec6cfd0150749e190f
+[http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.1.tar.gz]
+md5=2ff9924c7249ef7f736ecfe6f08f3f9b
+sha256=e3cef6028fe3efe7de3bcf4107c880eae50b3ee79841450d885467c09bcebf30
+
[http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.5.tar.gz]
md5=00bf95cdcbedfa7321d14e0133b31cdb
sha256=217df8b36d848a85eb81ec6fa2a411e9bf186a747c2ddb223cb82b5001e4d80b
@@ -6318,6 +6842,10 @@ sha256=e6bff5c00d7d93bade78535573494673f581118c38a8ca13c3afd63809335ba0
md5=be0a6d326cd8567e736fbc75df0a5c45
sha256=2ba10c830e24781ec2e0594c6e49353e512e8bda782bc9a1851e70a5e8ced93e
+[http://downloads.sourceforge.net/gdado/gdado-2.2.tar.gz]
+md5=b84114df6ca8b20560524afed0e21b25
+sha256=cc272f097832e074804bf405f2c013b4f941ad57f0f5f5ec6c08edecc9ad17fa
+
[http://heanet.dl.sourceforge.net/gdado/gdado-2.2.tar.gz]
md5=b84114df6ca8b20560524afed0e21b25
sha256=cc272f097832e074804bf405f2c013b4f941ad57f0f5f5ec6c08edecc9ad17fa
@@ -6330,6 +6858,10 @@ sha256=00f2b73fea5eff79ae26338928187f956427421bc70ddab0ab63fe5a58112b87
md5=1939de5fe43d12884d85fa5d7797e3c2
sha256=243dabf3c45530cac8be092f9a1d838a46b46a92d4138870423006ffd6ae4001
+[http://gdata-python-client.googlecode.com/files/gdata.py-1.2.4.tar.gz]
+md5=521f33a377d64f8a6505ba119415b787
+sha256=fc5ddb8f76b17abd728721a0e0177ea35f55a70106f44dc9010b22eceb06abde
+
[ftp://ftp.gnu.org/gnu/gdb/gdb-6.3.tar.gz]
md5=812de9e756d53c749ea5516d9ffa5905
sha256=c06bf9715436b3a28c189163aa5ca42b46af8286659827f033eaaf7d8b1fc342
@@ -6466,6 +6998,10 @@ sha256=8e7dfa34f3919226550dc6507a23753f9fda55e78b15b264291ecf5940d837e9
md5=1342f26b75d8edb1daa01999ce330d29
sha256=8e7dfa34f3919226550dc6507a23753f9fda55e78b15b264291ecf5940d837e9
+[ftp://ftp.us.debian.org/debian/pool/main/g/genext2fs/genext2fs_1.3.orig.tar.gz]
+md5=1342f26b75d8edb1daa01999ce330d29
+sha256=8e7dfa34f3919226550dc6507a23753f9fda55e78b15b264291ecf5940d837e9
+
[http://geos.refractions.net/geos-3.0.0rc4.tar.bz2]
md5=90d4dba51dd75f8f1f12378e0f910d76
sha256=7cd1b2266f5ae85a6d338c1c36ebe34e7c641ceb6a362e4526435c82d1e6fc5d
@@ -6542,10 +7078,18 @@ sha256=41f4befa851177e2ca9bbab2fad19926178c831454ca51f2cb91fec0ed9e243e
md5=a46acb413484300583ffca1fa54e0874
sha256=38ddc0ebc452968db653efce31864d61bc4a5e521a9694a8b9b8f4fe49a2d131
+[http://ftp.gnome.org/pub/GNOME/sources/gimp/2.3/gimp-2.3.10.tar.bz2]
+md5=a46acb413484300583ffca1fa54e0874
+sha256=38ddc0ebc452968db653efce31864d61bc4a5e521a9694a8b9b8f4fe49a2d131
+
[ftp://ftp.gimp.org/pub/gimp/v2.3/gimp-2.3.19.tar.bz2]
md5=9b5cc6aef0baca3735ce9bc4fdc949d9
sha256=f4e388b7b52db1e91e052dcd0aeab0844fcf83a14ccd24228bf033e7937007f0
+[http://ftp.gnome.org/pub/GNOME/sources/gimp/2.3/gimp-2.3.19.tar.bz2]
+md5=9b5cc6aef0baca3735ce9bc4fdc949d9
+sha256=f4e388b7b52db1e91e052dcd0aeab0844fcf83a14ccd24228bf033e7937007f0
+
[ftp://ftp.gimp.org/pub/gimp/v2.3/gimp-2.3.7.tar.bz2]
md5=dfc47a29b3a7ade07bd17244f0e83311
sha256=2a6c869ba61c1b18bbafa95bdf89cdc8fe1f07b068aa37dc9332a158b7e295eb
@@ -6554,6 +7098,10 @@ sha256=2a6c869ba61c1b18bbafa95bdf89cdc8fe1f07b068aa37dc9332a158b7e295eb
md5=393e7fb4e5e141faa2e3b44da3f301e3
sha256=ea5cb59c739357003b3c7fb0d1166e8d8f913be6e9f4737c1905e62b93b0246f
+[http://ftp.gnome.org/pub/GNOME/sources/gimp/2.3/gimp-2.3.8.tar.bz2]
+md5=393e7fb4e5e141faa2e3b44da3f301e3
+sha256=ea5cb59c739357003b3c7fb0d1166e8d8f913be6e9f4737c1905e62b93b0246f
+
[ftp://ftp.gimp.org/pub/gimp/v2.4/gimp-2.4.0.tar.bz2]
md5=35fecf14cd5237065aef624b93030d5e
sha256=ddeafb632050bba9163416c4a18c4cb8706b922c0fa99a0c216176584826a9dc
@@ -6614,6 +7162,10 @@ sha256=53af32530e58ba23cbb752f063364612bbea57b31de2ee35814973452c2f63f2
md5=b7200b08149599c4c0f56d88f0c7f208
sha256=53af32530e58ba23cbb752f063364612bbea57b31de2ee35814973452c2f63f2
+[http://downloads.sourceforge.net/gizmod/gizmod-3.4.tar.bz2]
+md5=f9185cc10aded1b8d32329369fb00dcb
+sha256=46b84f8850f39c2d329abedbe40eb827644c11e2a05929911d54181bac663921
+
[http://heanet.dl.sourceforge.net/gizmod/gizmod-3.4.tar.bz2]
md5=f9185cc10aded1b8d32329369fb00dcb
sha256=46b84f8850f39c2d329abedbe40eb827644c11e2a05929911d54181bac663921
@@ -7002,6 +7554,10 @@ sha256=cacf881ccdbc3fe5568636bf279392b5d339a481a5fb2c03d5c70a2de58f7407
md5=dbbb1880feb8b9c2493ece670520299b
sha256=7b47fd0d2e5a2f2d626b3e9e903ff8a0c0ce7c926925944dcea1f9ca3e6cfda1
+[http://downloads.sourceforge.net/musicpd/gmpc-0.17.96.tar.gz]
+md5=8876ca25ae70a379b62b6b407dc4f5ba
+sha256=c04149c5ea4325bf63a847649d9ae5e0ed9b3b6b1804856753b756782e02329c
+
[http://downloads.sourceforge.net/gmpy/gmpy-sources-101.zip]
md5=7b2e951912d4bee9613c35244ca32673
sha256=5cd061fa5d4906d6aa7183393c98d070dc689cbb946c13bebab6d6e4ecdc2231
@@ -7010,10 +7566,18 @@ sha256=5cd061fa5d4906d6aa7183393c98d070dc689cbb946c13bebab6d6e4ecdc2231
md5=7b2e951912d4bee9613c35244ca32673
sha256=5cd061fa5d4906d6aa7183393c98d070dc689cbb946c13bebab6d6e4ecdc2231
+[http://downloads.sourceforge.net/gmyth/gmyth-0.7.1.tar.gz]
+md5=ab6b7525fd9c71cf5203f9e61abec0c3
+sha256=ce7cbf087b377f027516d90525bbea6130f70b42f176b2d17386b7247b290fdb
+
[http://heanet.dl.sourceforge.net/gmyth/gmyth-0.7.1.tar.gz]
md5=ab6b7525fd9c71cf5203f9e61abec0c3
sha256=ce7cbf087b377f027516d90525bbea6130f70b42f176b2d17386b7247b290fdb
+[http://downloads.sourceforge.net/gmyth/gmyth-upnp_0.7-indt1.tar.gz]
+md5=29e58ea47e1548d70e4498cabca249a6
+sha256=f028ae7b331fdac9e5e70e4827fe1bcfa0274a9539e4224a9a49441776b2b517
+
[http://heanet.dl.sourceforge.net/gmyth/gmyth-upnp_0.7-indt1.tar.gz]
md5=29e58ea47e1548d70e4498cabca249a6
sha256=f028ae7b331fdac9e5e70e4827fe1bcfa0274a9539e4224a9a49441776b2b517
@@ -7038,6 +7602,10 @@ sha256=af1fd8454472e0ac588c015b09c67449392f32aa6297d4a625b8344dce11c39a
md5=b47a7ed4b7c66b8c2ebacc2286ef0d4b
sha256=6ffe4bdbc22de712e59205a27b46aa93a5372c67829c7f02d6b1c1778e9f9224
+[ftp://ftp.gnu.org/pub/gnu/gnash/0.8.5/gnash-0.8.5.tar.bz2]
+md5=366f703c2eb1747e4109602b75439ff4
+sha256=16f272214eed2ab50bcd9507d6299b82ed7d20e7e8eb253ab160e594eeb210b3
+
[http://gnokii.org/download/gnocky/gnocky-0.0.3.tar.bz2]
md5=239cfb4b743dc69723acbd01c44e7128
sha256=fb11b959c039f1a2c5471b2dc1270607acfc15fb667a69c2d4bdb0970b3595bb
@@ -7098,6 +7666,10 @@ sha256=7ebe5b0c2bb296386f1d62c3a5d30ed50e353c8d9dc390b77e0b5fdf56e4dad9
md5=16691f6bdc7c09445c457387adaba1f1
sha256=6a1499a1e50ac89210a9a1fdb36bc070ef6d1a02764a0f8d90de314dba01972e
+[http://hal.freedesktop.org/releases/gnome-device-manager-0.2.tar.bz2]
+md5=b833a90c940dd6cc992c42ad05ca6831
+sha256=fecb3bf79c3f10bebf0601c044344b0105738c1533f5da62f27dc84d0a3b30d3
+
[http://ftp.gnome.org/pub/GNOME/sources/gnome-doc-utils/0.10/gnome-doc-utils-0.10.3.tar.bz2]
md5=43f3a4086ec1254cbe20b85948192d18
sha256=19b5b4425bc578af8a1c58b61f1b9a416743d0b1fae3356cd9a0071f1f66632c
@@ -7342,6 +7914,10 @@ sha256=417922d35e66ee90cf93cf3e93fdf281ec6b92de4f7436c9c1a97c0cc35b94a8
md5=008820142c414517512ab0ad3e036c8b
sha256=d97ee0f1c45e1bfa880305a33e7e0ef695927094adce100cc76a76a0f57ef789
+[http://members.cheese.at/woody/fltk-chess/gnuchess_5.02.tar.gz]
+md5=01a9e1dc12613543f10ca3bc09acc0af
+sha256=64483bf3e98124e3490509a6054da0ff70b69ca0baa04f53444d7cf054deee06
+
[http://ftp.gnome.org/pub/GNOME/sources/gnumeric/1.6/gnumeric-1.6.3.tar.bz2]
md5=78ffd75ae6abc3bb20dd04407a082a26
sha256=badaa6899f71ef112515ce81aee02e559e18b5fa87c7f2262390764aaf9b1dc0
@@ -7974,6 +8550,10 @@ sha256=a7ec60003a96975523598c2ef5f2927c9a362e689e7159b268c7fe431754635a
md5=7ba3d2592585c8bcf9d3bf1aafeefef3
sha256=609e24aa1413b1053ee3fd42c36c6ccf05d8067867021511c7d50d4829875b44
+[http://gpe.linuxtogo.org/download/source/gpe-scap-1.4.tar.bz2]
+md5=eaf545561b0ad981c9d01833f30fcf95
+sha256=762778421fae7c62d5ec6a9d27986166c0dbbe2ff51fc10bb9b8baff5c367534
+
[http://gpe.linuxtogo.org/download/source/gpe-session-scripts-0.67.tar.gz]
md5=774c64ed54455f1297ecbeeffdc52eed
sha256=da051f5049d44415fff02b48368db4e3e3b6154135a50f990844d73896d18e19
@@ -8266,6 +8846,10 @@ sha256=c9ef8c2f61bbe9978b38341ca2bf09786416ddd82d4708066a26a0483341ca72
md5=bcc5621e09802e114c7f72a6f6172230
sha256=68cd94664882fdab5fa781b4b8fabe1ac49db7d97bdf3aa917563439afa9b9b6
+[http://downloads.sourceforge.net/lxde/gpicview-0.1.5.tar.gz]
+md5=5c484ea089f5a6455265e1e1f472240e
+sha256=7663e1849f3b1f2225a3310f907f86068d7ac5c8957d68fc4a684059b49211ca
+
[http://heanet.dl.sourceforge.net/lxde/gpicview-0.1.5.tar.gz]
md5=5c484ea089f5a6455265e1e1f472240e
sha256=7663e1849f3b1f2225a3310f907f86068d7ac5c8957d68fc4a684059b49211ca
@@ -8318,6 +8902,10 @@ sha256=0c9bf796b932dab2baab70829780eccde4113c08ce649768facd5010d6da640a
md5=6c96cc0b2df0279cb7baac1ebc5881d3
sha256=8860e61edc26f0665ad6ea0b34be4e3fd2cc7c51c5fd63b25c857a1870e8e137
+[http://download.berlios.de/gpsd/gpsd-2.38.tar.gz]
+md5=725c320ca6fa35bcdaa1de2d8908f392
+sha256=ae828da850ac0590fd47768856c4ec29021332204182abe4ad94098d72168474
+
[http://www.gpsdrive.cc/gpsdrive-2.10pre2.tar.gz]
md5=28b13b7253c8f019433be68686070558
sha256=5f53807375473b00f3748456fc8de33e7af300686032d74557fe5f0a931b3227
@@ -8554,6 +9142,10 @@ sha256=aa3d5ce29232ee5b24b6c032194ac1fc757309ea50ac850c0db46e45ab0a78ff
md5=0e0cd485311502ad1c0c028148e3186a
sha256=673f4a45a0f3aa99606a58097bde02d09ad51d7b2e702f0d68eeb6db21d47e93
+[http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.22.tar.bz2]
+md5=5d0f1e07f8f6db564971b50f75261e8a
+sha256=184c5aed03ebfe38a276fc03cb7d8685d9a6da5a48bf6a0565c83e11a29cd5f9
+
[http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.5.tar.bz2]
md5=2b5958fb0baaf8d1b4eae18f7b13d49b
sha256=fe2fb4fe446a1d3f8ccd4284ae7ffd25cb9f1b836b3d0e29d2494d10c1ae3eac
@@ -8574,6 +9166,10 @@ sha256=623e187f87037a690b5d0beef5991b3f2a58bb5058fad8c75329f48f0b07da4b
md5=79b086c2dc0e07ae0c8ddc91512bab3a
sha256=05323f065080e3df5f5c9cadceca977598ba106b3eebf2bbec46099becf796b1
+[http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.10.13.tar.bz2]
+md5=27f27151ccefad1157c9eaa322e14ac4
+sha256=dfffb80ef01b8fee9af3576311e65b60c378d9985099dea532be090ede54ebaa
+
[http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.10.2.tar.bz2]
md5=03d3d0b5f19014fe0065234a3ea65ee6
sha256=dd92993d08930cca071893b5d3f5cb40a4498f3ddaf12da98c0bbe8c27605e81
@@ -8670,6 +9266,10 @@ sha256=c839c3872510890bdbdfb43a79fd8b5646f3b9164b637127fb550351dc147eba
md5=7bad90af3fd81a1535363cf85359125c
sha256=94c185a0452b5fcddb538f6b686ff959b7afca8340c48fdbe47c87a2a459c3d3
+[http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.22.tar.bz2]
+md5=35dd8598837af4074753afe5b59e8ef2
+sha256=61489e0192b1362e6dc760154204c73c1edd9ad9d8c754535483ec00ad7e389e
+
[http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.4.tar.bz2]
md5=263a7800ecf44d0f38d0cbc80bce65ff
sha256=7b8add7db1e0b0e3671f374469ef32b151fa96bc9eb2aa265eefd79548752ffc
@@ -8910,6 +9510,10 @@ sha256=c1c2e1fb0168ecb3a5e773ac0cd74a0e5caeaaf402f108479337794dab8aa75f
md5=a56ea78c74fe93a604357d7c555af0e5
sha256=38c238ec57bf22023bbc50f70ecbaee8c06b817b9e11f1a3a0ae7faf95cc1f26
+[http://downloads.sourceforge.net/gtkterm/gtkterm2-0.2.3.tar.gz]
+md5=a49f93d15909dbd2e7011428ae01f0f0
+sha256=fb68b18d752ae2379f144186b94743be991af1a42c88bc1e6f0685e45cb1d573
+
[http://heanet.dl.sourceforge.net/gtkterm/gtkterm2-0.2.3.tar.gz]
md5=a49f93d15909dbd2e7011428ae01f0f0
sha256=fb68b18d752ae2379f144186b94743be991af1a42c88bc1e6f0685e45cb1d573
@@ -8962,6 +9566,10 @@ sha256=cd085871881f6c10d6ddc1206787ff692eb6b37a746a53b64f55aa9e91defeae
md5=5806534e2bd3a68552f620e4b35dd292
sha256=6874cc3ee7daa9695cf5d24c635d98e3fb9e7291df36fbd0b0ba8f46825473a8
+[http://downloads.sourceforge.net/gimp-print/gutenprint-5.1.3.tar.bz2]
+md5=276196ad27fa7d4b8b3ed3ca9c4af64c
+sha256=6be13b32d9f222506368bf214f8ba0a3ef08a36b1ebbed8be61cfe38ca2f35c7
+
[http://heanet.dl.sourceforge.net/gimp-print/gutenprint-5.1.3.tar.bz2]
md5=276196ad27fa7d4b8b3ed3ca9c4af64c
sha256=6be13b32d9f222506368bf214f8ba0a3ef08a36b1ebbed8be61cfe38ca2f35c7
@@ -8998,6 +9606,10 @@ sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
md5=3d6c191dfd2bf307014b421c12dc8469
sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
+[ftp://ftp.us.debian.org/debian/pool/main/g/gzip/gzip_1.3.5.orig.tar.gz]
+md5=3d6c191dfd2bf307014b421c12dc8469
+sha256=631820e566353eafc4bdc0d9d8221c26c7ef6b5d10a254783dbe9bcac88caa07
+
[http://rtpnet.nerim.net/ipaq/patches/2.6.17-1/WIP/h1940_batt.patch]
md5=2810d6a0aa41a349faf711bfc9facf14
sha256=0d68bfb125997599470dbc4822d43e777a831da2f1cfa5356b5dc791cdd8b27f
@@ -9070,6 +9682,10 @@ sha256=ba261a21539e1f204ba74590d313c501007e546b54aa9ae7210a99eaf3c097be
md5=bd9195d086566f56634c0bcbbbcbebea
sha256=ba261a21539e1f204ba74590d313c501007e546b54aa9ae7210a99eaf3c097be
+[http://downloads.sourceforge.net/haserl/haserl-0.9.23.tar.gz]
+md5=31d1f505afe3ba1b351e18612aa57a70
+sha256=bbe44edc3d519028761a22b282b912ab8f43db2003c6791c295c4a52f5db48bf
+
[http://heanet.dl.sourceforge.net/haserl/haserl-0.9.23.tar.gz]
md5=31d1f505afe3ba1b351e18612aa57a70
sha256=bbe44edc3d519028761a22b282b912ab8f43db2003c6791c295c4a52f5db48bf
@@ -9502,6 +10118,14 @@ sha256=ef6b1c8def236f16ea914eccbb050c84ee314c0028b03c560ed20ff96776f74c
md5=641ec45fe377529c7fd914f77b11b44f
sha256=9ff8360375432a7a5c476cc6d55b3fdea9d6f3edc080d295a60421d8f47b1834
+[http://icedtea.classpath.org/download/source/icedtea6-1.3.1.tar.gz]
+md5=6865c25cbc087e4142031a846b71ae56
+sha256=c15fb24475ad93e064ba252f2739c020f9981a808bde6cbd6c41eae38dd0143d
+
+[http://icedtea.classpath.org/download/source/icedtea6-1.4.tar.gz]
+md5=6428ca1b0c38111cca230f5b69460b03
+sha256=4f23aadcee80a9a03c858e36a8eaaa92149987ce0a3eac276e3003c9b2462739
+
[http://jalimo.evolvis.org/repository/sources/icepick-0.0+hg20080118.tar.bz2]
md5=ce7b1827e6f4cbe73b9ffa90b0d45a6a
sha256=63170836095f8451498c813a1f93a9ec70a1164d82aa30650c0f2216ca4377ab
@@ -9586,6 +10210,10 @@ sha256=7305d27b5718e83872329e0ade92fc3b9710226c63418188744a3ce8c4030ceb
md5=0c4cf072305b1e798e9e704558ec01f1
sha256=7305d27b5718e83872329e0ade92fc3b9710226c63418188744a3ce8c4030ceb
+[ftp://ftp.us.debian.org/debian/pool/main/i/ifupdown/ifupdown_0.6.8.tar.gz]
+md5=0c4cf072305b1e798e9e704558ec01f1
+sha256=7305d27b5718e83872329e0ade92fc3b9710226c63418188744a3ce8c4030ceb
+
[http://www.linuxprinting.org/ijs/download/ijs-0.35.tar.bz2]
md5=896fdcb7a01c586ba6eb81398ea3f6e9
sha256=11a5f5084488c480f3ff5a24d64d7147bb64272bf60a0ba51330a56c5b50cab9
@@ -9694,6 +10322,10 @@ sha256=74d6088a6f7521c36b73550baa9dd0381505d66658f0bc01802aa2dfc7430fbc
md5=97c606182f5e177eef70c1e8a55efc1f
sha256=74d6088a6f7521c36b73550baa9dd0381505d66658f0bc01802aa2dfc7430fbc
+[http://downloads.sourceforge.net/inkscape/inkscape-0.46.tar.bz2]
+md5=59997096c3640b2601c2b4afba8a3d75
+sha256=f2ea624b98544b9d780bae1b5f042eae97bbd2779c7779ba21390b7bf6a9ca8e
+
[http://www.geocities.co.jp/SiliconValley-Oakland/4550/inkwp-0.1.1.tar.gz]
md5=a19896b756f1b29a33411a1fb2842c4b
sha256=4afa4f4ddfdc40a32ef2c6034b2fa3bca415088b7eac4b7ad2b814202153f1e0
@@ -9702,6 +10334,10 @@ sha256=4afa4f4ddfdc40a32ef2c6034b2fa3bca415088b7eac4b7ad2b814202153f1e0
md5=8053f441fc3fe0f0c73cf483399da17b
sha256=84a111a6a979152cd25b60825b4945da4b167f19fb9ec115f9c59b4b49927547
+[http://downloads.sourceforge.net/inotify-tools/inotify-tools-3.12.tar.gz]
+md5=a593b2eabde56f122e2bb3d2d45f7ca7
+sha256=90f69ae24cc21fa6d33dc406077f16c06113b3000f7d267e7056e52f50d0abc0
+
[http://heanet.dl.sourceforge.net/inotify-tools/inotify-tools-3.12.tar.gz]
md5=a593b2eabde56f122e2bb3d2d45f7ca7
sha256=90f69ae24cc21fa6d33dc406077f16c06113b3000f7d267e7056e52f50d0abc0
@@ -9922,6 +10558,10 @@ sha256=84ac04a28ae41e17df0f181d8bc0049ae7a83baae07296e890ea5977a2952318
md5=0a9209f928002e5eee9cdff8fef4d4b3
sha256=c5c8a091ed9a1fa2dab86b4d87719064b50c202e8503046f50f299a361e6211c
+[http://downloads.sourceforge.net/iptstate/iptstate-2.2.1.tar.bz2]
+md5=6b08f09b9917f644629efea1febec4b3
+sha256=004f8358f4f84d90a260a76ac46ce8512126ac490d73460fcee6c11effd34362
+
[http://heanet.dl.sourceforge.net/iptstate/iptstate-2.2.1.tar.bz2]
md5=6b08f09b9917f644629efea1febec4b3
sha256=004f8358f4f84d90a260a76ac46ce8512126ac490d73460fcee6c11effd34362
@@ -10030,6 +10670,10 @@ sha256=a5d9fd696d7ee4a1c7679b5a688155bc1e0abbdf5f144d6762dbbee874df235f
md5=03a0f63b997ce7b83a1eeaa6b80f4388
sha256=a5d9fd696d7ee4a1c7679b5a688155bc1e0abbdf5f144d6762dbbee874df235f
+[http://jackaudio.org/downloads/jack-audio-connection-kit-0.116.2.tar.gz]
+md5=9c0ae9880e9b6e081f1a238fe6a28bd5
+sha256=ce6e1f61a3b003137af56b749e5ed4274584167c0877ea9ef2d83f47b11c8d3d
+
[http://downloads.sourceforge.net/jackit/jack-audio-connection-kit-0.99.0.tar.gz]
md5=a891a699010452258d77e59842ebe4a0
sha256=2096acc56c314e689faad0036bbc1d86dea1b9d9620f711d471de76b1dd6859e
@@ -10090,6 +10734,14 @@ sha256=663895bd69caf3a1fda6af5eea8263d90a5fd35ca8f4c32e2210ac410788901a
md5=5a82751b50391eb092c906ce64f3b6bf
sha256=663895bd69caf3a1fda6af5eea8263d90a5fd35ca8f4c32e2210ac410788901a
+[http://downloads.sourceforge.net/jamvm/jamvm-1.5.2.tar.gz]
+md5=2a564045670b459e9aed857b5f8a3391
+sha256=76c976616d344a3b1abd8896be6610c4d97a58af6960e1bc2f442b774bdda839
+
+[http://downloads.sourceforge.net/gakusei/jards_gakusei.cvs.sourceforge.net__20070212.tar.gz]
+md5=1282913edd226bc9e865f39d79573117
+sha256=3c884982ebf40aade899379902ec92c41782d18c19506cf0ec40bcf6a7df8e3b
+
[http://heanet.dl.sourceforge.net/gakusei/jards_gakusei.cvs.sourceforge.net__20070212.tar.gz]
md5=1282913edd226bc9e865f39d79573117
sha256=3c884982ebf40aade899379902ec92c41782d18c19506cf0ec40bcf6a7df8e3b
@@ -10202,6 +10854,14 @@ sha256=915ee6c4b8f1ffd5313d990875cd44e5e7092a51de259707daca797fd5c42b46
md5=7965d33e47a7cc97c4084c2e9aa0bf82
sha256=bc4f62cbac4716c2c1a25cf53b73343a03883964576d9dd590a9e4c7a70f465a
+[http://downloads.sourceforge.net/juce/juce_1_46.zip]
+md5=a746183ea41aebc27a0f771036f668e1
+sha256=1b8f50169bc2d827c6efe6bc98bbef2161f615219e4e8921e68227888fd50a9e
+
+[http://osdn.dl.sourceforge.jp/julius/37582/julius-4.1.2.tar.gz]
+md5=886a114b391aa1992567019213efc63e
+sha256=542c7f1042679c8484dc2f5f5536ed0c79fa79b2b9dd6cf6881278a6fdb37a84
+
[http://downloads.sourceforge.net/junit/junit-4.3.1-src.jar]
md5=170f9645a41398388e8553b32ff5f630
sha256=57d1e49ee3fd0dbdc0a68a852925c973af5c30b1725b6aa63bfb42df6f7c3349
@@ -10266,10 +10926,18 @@ sha256=779f563fdf0385b973f2238f04d82b5729aefe1c949e4d29482b6bb170aa3fe6
md5=3a9e14a245d293d143715c0318e3d0bd
sha256=63a7d777cfb610c06c3778b4fc780a7e3f4158b5a7125588ccbc0c59f11b48b8
+[http://downloads.sourceforge.net/kdepimpi/kdepimpi-2.2.10.tar.gz]
+md5=1b918fa70812b24df0c4de00bb2c8896
+sha256=88f68d15052932ac763c007570a6e12e7be6e0d177706f96ddda7c358adcf871
+
[http://heanet.dl.sourceforge.net/kdepimpi/kdepimpi-2.2.10.tar.gz]
md5=1b918fa70812b24df0c4de00bb2c8896
sha256=88f68d15052932ac763c007570a6e12e7be6e0d177706f96ddda7c358adcf871
+[http://downloads.sourceforge.net/kdepimpi/kdepimpi-2.2.3.tar.gz]
+md5=b452510c392d852c7a94bb08547f4e9a
+sha256=d6b21f0dad8277925abbb15d3c9cbc0a58af5b5119bbd1fde8637b600bae0489
+
[http://heanet.dl.sourceforge.net/kdepimpi/kdepimpi-2.2.3.tar.gz]
md5=b452510c392d852c7a94bb08547f4e9a
sha256=d6b21f0dad8277925abbb15d3c9cbc0a58af5b5119bbd1fde8637b600bae0489
@@ -10310,10 +10978,18 @@ sha256=a758c8f9b55d8288e2484dd1a2dcbd9c4ca3ca3052864a45cb104f613b7f712d
md5=b4f7ffcc294d41a6a4c40d6e44b7734d
sha256=280b34fefa12c3d7a3e432c3730fe5d0d56e8d169c28b695cce9ba6d8dbe6e38
+[http://projects.linuxtogo.org/frs/download.php/221/kexecboot-0.3.tar.gz]
+md5=3c3b8edb739146183b3ddff3e0af5f1c
+sha256=61a918b38a4b0b97e1469cbe3d9c4307af956bd95abec2067aa2fd278739cd96
+
[http://projects.linuxtogo.org/~jay7/kexecboot-0.4.tar.gz]
md5=b4a4509ca3f546cfedd23aa6f99ab81d
sha256=b8c9d3a51f04bdecabbb4135079d408e02c98cdf3156bab8418a6830cb64b890
+[http://projects.linuxtogo.org/frs/download.php/226/kexecboot-0.5.tar.gz]
+md5=a937303d7ef3fc645f9dccf89e1494e2
+sha256=49c95d62e32b66c9f97e791f667afa82f0714bc0a0e0ad48df010f4f36de42ab
+
[http://gpe.linuxtogo.org/download/source/keylaunch-2.0.10.tar.gz]
md5=2d81de20b26eac5ad44b759eb412e8eb
sha256=38715fcc508740deb3f169a01092f03ea4ce92c9ec3c2589a9510534aa52a540
@@ -10478,6 +11154,10 @@ sha256=f459280eb4eeb70be584895364c97ffab22b888235b2351a31e1c87ca9710727
md5=ad13d6cce7a7e068d85a66d30285af95
sha256=f459280eb4eeb70be584895364c97ffab22b888235b2351a31e1c87ca9710727
+[http://downloads.sourceforge.net/lcms/lcms-1.13.tar.gz]
+md5=902ea29818ab4f3c86225ec7d6b5d5b6
+sha256=28e1648256cd18ccb3d0df149d3c33f94e7e2e0384b344f2792aa62309f825d6
+
[http://heanet.dl.sourceforge.net/lcms/lcms-1.13.tar.gz]
md5=902ea29818ab4f3c86225ec7d6b5d5b6
sha256=28e1648256cd18ccb3d0df149d3c33f94e7e2e0384b344f2792aa62309f825d6
@@ -11158,6 +11838,10 @@ sha256=89f47d77d0f660cef80efeecc1cbd194ebf4afdd3be5ab2c3584bd8a90ac44c0
md5=9480e31cce6506091080d59211089bd4
sha256=89f47d77d0f660cef80efeecc1cbd194ebf4afdd3be5ab2c3584bd8a90ac44c0
+[ftp://ftp.us.debian.org/debian/pool/main/liba/libaio/libaio_0.3.106.orig.tar.gz]
+md5=9480e31cce6506091080d59211089bd4
+sha256=89f47d77d0f660cef80efeecc1cbd194ebf4afdd3be5ab2c3584bd8a90ac44c0
+
[http://www.xiph.org/ao/src/libao-0.8.4.tar.gz]
md5=0525549b0bf665f617913c916064cc87
sha256=a2f434898bd5319024a97294cc4c7ba1d89bda4951af2015a887feca116e162f
@@ -11206,6 +11890,10 @@ sha256=a3d8768aa8fd2f6ae79be2d756b3a6b48816b3889ae906be3d5ffb2de5a5c781
md5=f0f55eec32c641d0e8602c92acabd56c
sha256=f490172a14c264f390d682c25cf33353ac5e6f9876722c8348c1e2d4b11dd1dd
+[http://downloads.sourceforge.net/bedic/libbedic_1.1-0.tgz]
+md5=211ea5a881b5691ec7a1aedbe7fc406c
+sha256=0cb299278f17d4580d9b1b56df8b7c356afb016f2a68ce7d13a8169f74e2a16b
+
[http://heanet.dl.sourceforge.net/bedic/libbedic_1.1-0.tgz]
md5=211ea5a881b5691ec7a1aedbe7fc406c
sha256=0cb299278f17d4580d9b1b56df8b7c356afb016f2a68ce7d13a8169f74e2a16b
@@ -11258,6 +11946,10 @@ sha256=b0e3cb59e605412a52352cf9cf36344b165463d4e65916c95deb73fc51838272
md5=4426a413128142cab89eb2e6f13d8571
sha256=66c3f033fdc8f9ba0bd9d0ae2d1f2c11f9fa51bf0d1418e5cb75e29e6577a5bc
+[http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.16.tar.bz2]
+md5=6e2c9d0f3c3118e41cd07288ba9577ce
+sha256=9c5a41a5577d6f702fe4d29e92f91f1d586a2ef272f6b7fa137bae3f0e76cc2f
+
[http://downloads.sourceforge.net/libcdaudio/libcdaudio-0.99.12p2.tar.gz]
md5=15de3830b751818a54a42899bd3ae72c
sha256=5fdaf9af5ac4f75c0215d000b82b128fd054a582f81cc4f039a1e7fe69335ebb
@@ -11266,6 +11958,14 @@ sha256=5fdaf9af5ac4f75c0215d000b82b128fd054a582f81cc4f039a1e7fe69335ebb
md5=15de3830b751818a54a42899bd3ae72c
sha256=5fdaf9af5ac4f75c0215d000b82b128fd054a582f81cc4f039a1e7fe69335ebb
+[http://libchamplain.pierlux.com/release/0.2.8/libchamplain-0.2.8.tar.gz]
+md5=fa4a620efa1a1c1036b6701b7d4dafe1
+sha256=01e17811a85e93e5158f5d721b9b1b249db44683735a172fa0debd9759d3175c
+
+[http://libchamplain.pierlux.com/release/0.2.8/libchamplain-gtk-0.2.8.tar.gz]
+md5=c3e62c1912c0dba013c8f3df28fc809d
+sha256=03d751bd836174e2d6766d8036fc72e130dd090b13256d40a58ba6ab659475ef
+
[http://gpephone.linuxtogo.org/download/gpephone/libchenabler-0.1/libchenabler-0.1.tar.gz]
md5=866fd13611a8de946428db1df9be8468
sha256=74def55ba6a61e966e0873a4081fd3dd65089b94b837810d3bc056221d7e41c7
@@ -11310,6 +12010,10 @@ sha256=d23619f37fbc175027315ca641adbc51cae8a055fb78f169a35b965d6ebf3059
md5=baee4e3f0a765eb664922fc78f346014
sha256=9aa09bb2de91727de68ee57b1a1e4c03059cbbc7166f9f181ee8b5c2792e724d
+[http://downloads.sourceforge.net/libcwd/libcwd-0.99.47.tar.gz]
+md5=9f734d279fa7a91f81d07fb9fd5de049
+sha256=8e9bfe9838fce18bb55d41ec883be5b7330aeead265feec0347745e8e589822a
+
[http://heanet.dl.sourceforge.net/libcwd/libcwd-0.99.47.tar.gz]
md5=9f734d279fa7a91f81d07fb9fd5de049
sha256=8e9bfe9838fce18bb55d41ec883be5b7330aeead265feec0347745e8e589822a
@@ -11326,6 +12030,10 @@ sha256=d54efe38aad450363c46eaa32b1bf29cbd3b7f8c870c0ffcaec8891c22681eb0
md5=76596823cc1a6d1cdf7779b782ff0ee6
sha256=39e7c9f8644d1af310d076c1a5cc648040033e4724e7edfd85eb983ad88336d0
+[http://0pointer.de/lennart/projects/libdaemon/libdaemon-0.13.tar.gz]
+md5=ae9113fcd825d5a7f07e5ddccb3c3102
+sha256=bd949d459d2da54f1cdfbd1f4592e32541e8a195aca56fa7a8329ed79836d709
+
[http://0pointer.de/lennart/projects/libdaemon/libdaemon-0.6.tar.gz]
md5=5b83dd22fd72130cc4fdd46bd1a7fe8a
sha256=1f918fc7c51e8de4b97aa3556b829a03ef7a06bd44c344a494326dc222785a6a
@@ -11366,6 +12074,10 @@ sha256=f776abe417432b3c4ff8b063201c4b4b45479a563fb43e6fd64504b538ef4689
md5=181f063344a0e674e5c2546544d5e27f
sha256=b0159537f22453fcf30d7c4d7d9a39b6996233217c1f80a49ede135cf6ed32ca
+[http://downloads.sourceforge.net/libdmtx/libdmtx-0.5.2.tar.gz]
+md5=129d960e30498f2a68d31c2c40b145af
+sha256=bd9669e5f1a43d1cfcff4d3dc5f18736ba7c950c8ba7b71b1d9cf4436a3783b3
+
[http://heanet.dl.sourceforge.net/libdmtx/libdmtx-0.5.2.tar.gz]
md5=129d960e30498f2a68d31c2c40b145af
sha256=bd9669e5f1a43d1cfcff4d3dc5f18736ba7c950c8ba7b71b1d9cf4436a3783b3
@@ -12130,6 +12842,10 @@ sha256=10197df9daee806453c5a7e99e538d7eac0421796f2a9ae114d4369d85fcf3af
md5=6bb2fd1841d9c1be22edc999970a55a3
sha256=821290104ef79b6a35a4a7456d50aff0536f66f05a5d6c255e7155d1cacd12b6
+[http://downloads.sourceforge.net/freeassociation/libical-0.27.tar.gz]
+md5=87d48321bff08de08794132d60b55d94
+sha256=7f1fa404e5540c880cc747c4a680a89d88b87b10a1c77655f512780fcb0ca5d0
+
[http://heanet.dl.sourceforge.net/freeassociation/libical-0.27.tar.gz]
md5=87d48321bff08de08794132d60b55d94
sha256=7f1fa404e5540c880cc747c4a680a89d88b87b10a1c77655f512780fcb0ca5d0
@@ -12190,6 +12906,10 @@ sha256=d9ca5d502f8a4a6c146d1f0458ac27c95cc59724caa6d845e24946d299463bc5
md5=e898200ac89815365e89b7c6cc2f78fd
sha256=f23ac7320379d8e950340fe37633c21a56a5f4320d29c34a65819558fe6cdaa1
+[ftp://ftp.us.debian.org/debian/pool/main/libl/liblinebreak/liblinebreak_0.9.6.orig.tar.gz]
+md5=e898200ac89815365e89b7c6cc2f78fd
+sha256=f23ac7320379d8e950340fe37633c21a56a5f4320d29c34a65819558fe6cdaa1
+
[ftp://ftp.debian.org/debian/pool/main/libl/liblockfile/liblockfile_1.06.tar.gz]
md5=2de88389da013488bfd31356523070c0
sha256=14f9690328318d11f9ba13a9356a2c008bdd169b7a817f38cb7f9eb32cf7240e
@@ -12314,6 +13034,10 @@ sha256=ef2269cc4ba5c8574d38321349d76063c6b200857f0c9256ea97e608583e8857
md5=7f7a060e83b4278acf4b77d7a7b9d2c0
sha256=4bd54929a80850754f27b568d7891e1e3e1b8d2f208d371f27d1fda09e6f12a8
+[http://downloads.sourceforge.net/musicpd/libmpd-0.17.96.tar.gz]
+md5=dfbe478c4d4e9bf8e450c7349e104e2a
+sha256=f7e11c6137a1628d63985799ebcb78577832fca3ca4aeb2fc53d0e667cf699c0
+
[http://www2.autistici.org/bakunin/libmrss/libmrss-0.17.2.tar.gz]
md5=54935c6cff42df2f1daada267b701392
sha256=18f0e2df191219c29b47dc12b4b06b5be7eaeef34b3436156547e5a9f4eb51c1
@@ -12346,6 +13070,10 @@ sha256=cf6bf75d590884fa9d0725d4d86afa93211e29cf0c5f333a60bb4e4eb347dc29
md5=bf4983ea440542f3ec019cc1bb6ca87d
sha256=cf6bf75d590884fa9d0725d4d86afa93211e29cf0c5f333a60bb4e4eb347dc29
+[ftp://ftp.us.debian.org/debian/pool/main/libn/libnet0/libnet0_1.0.2a.orig.tar.gz]
+md5=bf4983ea440542f3ec019cc1bb6ca87d
+sha256=cf6bf75d590884fa9d0725d4d86afa93211e29cf0c5f333a60bb4e4eb347dc29
+
[ftp://ftp.debian.org/debian/pool/main/libn/libnet/libnet_1.1.2.1.orig.tar.gz]
md5=be845c41170d72c7db524f3411b50256
sha256=ab01882a3d0556176018c09342cd0731f7cbc8e687795009894c3326942c76ff
@@ -12354,14 +13082,30 @@ sha256=ab01882a3d0556176018c09342cd0731f7cbc8e687795009894c3326942c76ff
md5=be845c41170d72c7db524f3411b50256
sha256=ab01882a3d0556176018c09342cd0731f7cbc8e687795009894c3326942c76ff
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/libn/libnet/libnet_1.1.2.1.orig.tar.gz]
+md5=be845c41170d72c7db524f3411b50256
+sha256=ab01882a3d0556176018c09342cd0731f7cbc8e687795009894c3326942c76ff
+
+[ftp://ftp.us.debian.org/debian/pool/main/libn/libnet/libnet_1.1.2.1.orig.tar.gz]
+md5=be845c41170d72c7db524f3411b50256
+sha256=ab01882a3d0556176018c09342cd0731f7cbc8e687795009894c3326942c76ff
+
[http://www.netfilter.org/projects/libnetfilter_queue/files/libnetfilter_queue-0.0.13.tar.bz2]
md5=660cbfd3dc8c10bf9b1803cd2b688256
sha256=1d6b180272befbfb19fedd80b5641354b82d6e719bf3d9ffa2d8287c62046536
+[http://www.netfilter.org/projects/libnetfilter_queue/files/libnetfilter_queue-0.0.16.tar.bz2]
+md5=b36664e6cd39edbfe46b416a86118add
+sha256=977491a20928cd40fa91a51b99c625fe0aa7efb47d4207a551b5f2f5e5e4c391
+
[http://www.netfilter.org/projects/libnfnetlink/files/libnfnetlink-0.0.30.tar.bz2]
md5=7fd3c8ddc03d42fa9f0177a17a38f163
sha256=a6a336a5b3e063748d93ae910bbf6b2d36ead9f9ecd6011b14325b8814b54bc2
+[http://www.netfilter.org/projects/libnfnetlink/files/libnfnetlink-0.0.39.tar.bz2]
+md5=348fed8c1edbe5b873ffc7b192140093
+sha256=9cd2317dac67fd2161565a21c7b3f9f43b6b6cd93441233226310478ffd4bf50
+
[http://www.citi.umich.edu/projects/nfsv4/linux/libnfsidmap/libnfsidmap-0.20.tar.gz]
md5=9233cb77876eb642374a0d2bcaba1170
sha256=c2ae0a07d863536261b8a0562f3f77aa224fa1f413d85d824a765d00e37c5de4
@@ -12630,6 +13374,10 @@ sha256=cac67ef8837a2bdd20d7fb5e990e233d80a9ff398cf08a62bb7fac068a419b3e
md5=5208f24d0328ee7c20b52c43eaa9aa0e
sha256=c4158398de4411627b14f52626e4cef39443f4d5c1b9bce8c07f8526d18362f9
+[http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz]
+md5=9ad1358c5dec48456405eac197a46d3d
+sha256=a214c4e1d7e22a758f66fe1d08f0ce41c3ba801a4c13dd1188e1e38288ac73c0
+
[http://xorg.freedesktop.org/releases/individual/lib/libpciaccess-0.10.3.tar.bz2]
md5=6d5468debf76fac84576ca26c9535821
sha256=2f609ad3b5688ae66dcd18d7cdd1fc6b68531a2a85f89798f6cfb5eda6d680dc
@@ -12682,6 +13430,10 @@ sha256=24b354dcd8843274a20e1625e04d618d43f9851082254cb9dae6f33f15c2a5cd
md5=78d2f8c4e0d64f8948819563587302d3
sha256=24b354dcd8843274a20e1625e04d618d43f9851082254cb9dae6f33f15c2a5cd
+[http://downloads.sourceforge.net/libpng/libpng-1.2.35.tar.bz2]
+md5=b8b8d09adf6bee2c5902c8e54c4f2e68
+sha256=cafe6431f9e6d561fb7b396bf94ff73a9cd0f4279f3eea2fc714ab90e345eee6
+
[http://downloads.sourceforge.net/libpng/libpng-1.2.8.tar.bz2]
md5=00cea4539bea4bd34cbf8b82ff9589cd
sha256=9bec729a1e77d8bbc5800b14aa81f09290aa18daa40f344103f2c0d1d681531b
@@ -12762,6 +13514,10 @@ sha256=a33977201ff13a4c08d3a74de0fcdbe7f072e4a92a261d5f39fbf16aab069050
md5=ba3a1063a9e8cd5a730b3871e468c227
sha256=802c72f5f11d60f5cb75ef8acc116c5ab0600e3bc099fc5accf8a997e463b374
+[http://downloads.sourceforge.net/libserial/libserial-0.5.2.tar.gz]
+md5=7a3766e354c31513ff6d7859a4b2c1b8
+sha256=898012c30596bba605cdee76a80dd6a7a42506cc04d0137e23e2c40681573f03
+
[http://heanet.dl.sourceforge.net/libserial/libserial-0.5.2.tar.gz]
md5=7a3766e354c31513ff6d7859a4b2c1b8
sha256=898012c30596bba605cdee76a80dd6a7a42506cc04d0137e23e2c40681573f03
@@ -12790,6 +13546,10 @@ sha256=83e82b9afe296584a6c9f1f8b3e3a70d324209021e0049f68d28bd1de8c18136
md5=4f75fc9901c724b712c371c9a1e782d3
sha256=912a1fdb12d31af757e7881db49321e5b5240bd8bd4199e9fb0ce16d66568160
+[ftp://ftp.uni-frankfurt.de/pub/Mirrors2/gentoo.org/distfiles/libsidplay-1.36.59.tgz]
+md5=37c51ba4bd57164b1b0bb7b43b9adece
+sha256=3da9b38d4eb5bf9e936b9604ba92da0594ef38047d50cf806a8e11c400008024
+
[http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/libsidplay-1.36.59.tgz]
md5=37c51ba4bd57164b1b0bb7b43b9adece
sha256=3da9b38d4eb5bf9e936b9604ba92da0594ef38047d50cf806a8e11c400008024
@@ -12830,6 +13590,10 @@ sha256=bd55717374674ed69de46c13b52aaba0420d5c68582cac34d863e44f6f1d560e
md5=02e78c3cfbdb4be285d97653e563f65a
sha256=bd55717374674ed69de46c13b52aaba0420d5c68582cac34d863e44f6f1d560e
+[ftp://ftp.ibr.cs.tu-bs.de/pub/local/libsmi/libsmi-0.4.8.tar.gz]
+md5=760b6b1070738158708649ed2c63425e
+sha256=f048a5270f41bc88b0c3b0a8fe70ca4d716a46b531a0ecaaa87c462f49d74849
+
[http://www.mega-nerd.com/libsndfile/libsndfile-1.0.16.tar.gz]
md5=773b6639672d39b6342030c7fd1e9719
sha256=79e305112a4d9598b93b614a7747604f9ef10d9a2dee52c5903b554bbeaedd7c
@@ -12910,6 +13674,10 @@ sha256=8b4ebd22dcfa7511109c2f6fa9e304c2ef3acaa492d55423cdf9a6f54a2fdb22
md5=ad703c4702646c83ca4fcace92c220d3
sha256=94ca32ac10615a7c0ba19180e67f2e40e2bfa4cc8de6ceb2a3a54d2dd83141cb
+[http://www.0xbadc0de.be/libssh/libssh-0.2.tgz]
+md5=8a76c03579a3e27046e6bafe88ffd171
+sha256=46c3831fd563c54283ebef56e2cb11c27f47b1be9f6cb44f1465897dd7aea5ff
+
[http://snowball.tartarus.org/dist/libstemmer_c.tgz]
md5=8358a9ddaaffeeca7cb00725770f7cdb
sha256=f3e93a41ad76e91f08e3115fa5065df8b69fd3f2dbdd9e982ae890b892ac6477
@@ -13158,6 +13926,10 @@ sha256=69ad5d62946885a60368381a3354b8fd19597bc6fc9ee25b4598977771429b8d
md5=a5056dcf337e240e5370984f95d9ad68
sha256=676840669a82763ccc7b46ba033a6a01df815c46486f7b30916951769331b6d6
+[http://people.atrpms.net/~hdegoede/libv4l-0.5.8.tar.gz]
+md5=4f8ae9c743b215c8ac0e553eaa01e980
+sha256=9d006377ec51ca149ed415fbea5c3298b0fe7bae4cbd3bc2f54fd25a24ed9eb2
+
[http://downloads.sourceforge.net/libvisual/libvisual-0.1.3.tar.gz]
md5=e70e91d2e90831c0eb78944b6a9605ef
sha256=fc04f2f2bae4b3eef7eb331330e2e3fd336d1894dbf4cae631c8b635622cdd52
@@ -13166,6 +13938,10 @@ sha256=fc04f2f2bae4b3eef7eb331330e2e3fd336d1894dbf4cae631c8b635622cdd52
md5=e70e91d2e90831c0eb78944b6a9605ef
sha256=fc04f2f2bae4b3eef7eb331330e2e3fd336d1894dbf4cae631c8b635622cdd52
+[http://downloads.sourceforge.net/libvisual/libvisual-0.4.0.tar.gz]
+md5=f4e78547c79ea8a8ad111cf8b85011bb
+sha256=0b4dfdb87125e129567752089e3c8b54cefed601eef169d2533d8659da8dc1d7
+
[http://heanet.dl.sourceforge.net/libvisual/libvisual-0.4.0.tar.gz]
md5=f4e78547c79ea8a8ad111cf8b85011bb
sha256=0b4dfdb87125e129567752089e3c8b54cefed601eef169d2533d8659da8dc1d7
@@ -13418,6 +14194,10 @@ sha256=4e1f39ee16596fd2a83d28d6c3b065f742254f3336f93ce8ed1cae48ecbe49da
md5=fb3761c8fff39a792035db4767847169
sha256=90b3271e5ce4de91d3651ba11b92e64fc7afb2a54ebe01826023e5bb2b53a3bc
+[https://garage.maemo.org/frs/download.php/4626/lightmediascanner-0.2.0.0.tar.bz2]
+md5=ee1494b6dff3a50be64a3266819056d5
+sha256=98f980e8971fa4d04a589215c3b90d2eaf317ed70fd0d4988089e0fe5808c853
+
[http://www.lighttpd.net/download/lighttpd-1.4.13.tar.gz]
md5=d775d6478391b95d841a1018c8db0b95
sha256=62d5997fdb41afa9400adcdb040d04a1f5fa950045df96e3e3f593e8f0de5739
@@ -13430,6 +14210,10 @@ sha256=97d0ac5957745eeaf311ec38ebbbf3b30a5316b01c320a759af47129c994c20c
md5=c3e1b6c428218968e2963182c1df1fdc
sha256=cba8ac22d77bbf8f6ed4a98933242b89ee2426cbc216f54415eafcac1274547a
+[http://www.handhelds.org/~aquadran/distro/latest/sources/linda-0.6.tar.gz]
+md5=c3e1b6c428218968e2963182c1df1fdc
+sha256=cba8ac22d77bbf8f6ed4a98933242b89ee2426cbc216f54415eafcac1274547a
+
[http://downloads.sourceforge.net/lineak/lineakd-0.8.3.tar.gz]
md5=fc1d3add18afbb8e61b8277b89c525c6
sha256=cfde4a06df9fb4f26f8629d4ed3320ea813ba05a25217ec4ff55bbe5da04f504
@@ -13642,6 +14426,10 @@ sha256=5c7226b4c65b8420960eea372547b29236df3757d005bc1d7912b44b978d5669
md5=d351e44709c9810b85e29b877f50968a
sha256=ae0d97c55efe7fce01273c97f8152af0deff5541e3bbf5b9ad98689112b54380
+[http://kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.28.tar.bz2]
+md5=d351e44709c9810b85e29b877f50968a
+sha256=ae0d97c55efe7fce01273c97f8152af0deff5541e3bbf5b9ad98689112b54380
+
[http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2]
md5=e921200f074ca97184e150ef5a4af825
sha256=f5dba6366e87e91234d1b0069cfea655b0a4cb37ea97f899226f16998e6ab9f1
@@ -13762,6 +14550,10 @@ sha256=8cabd422f249ada736d864fc8a1f4d14aabefacb6f860c9beefbc53f93e0f96c
md5=bf43eee98c364fd79c7d2b72e645a15e
sha256=5fc295b3cf3de019962aee3be1c5efb49d6bf5041dae59451f6c0f544eb36bdc
+[http://llvm.org/releases/2.5/llvm-2.5.tar.gz]
+md5=55df2ea8665c8094ad2ef85187b9fc74
+sha256=8f3d69e63bc5d1ee2c2ee49ff07ccb7e070070a0e937813d2a6179b9e2e173ed
+
[http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-2.10.1.tar.gz]
md5=cdc857b78e813b88cbf8be92441aa299
sha256=a332cacfa9d0eed6e9158c394db714e536f38c27451d7df08b9634952118fa1b
@@ -13778,6 +14570,10 @@ sha256=5a729a49ce591a58d241ac39979cb496ab30687556633782557196d2b262921e
md5=eddf56af6f248812e3016a9e34b42bbd
sha256=5a729a49ce591a58d241ac39979cb496ab30687556633782557196d2b262921e
+[http://downloads.sourceforge.net/lmbench/lmbench-2.5.tgz]
+md5=d5b05498af26d5c09b372caab82a0337
+sha256=e7431530a4cf4c44b5068e23454f95765dc0b51e7d98bc2bd70451b17d505bd9
+
[http://heanet.dl.sourceforge.net/lmbench/lmbench-2.5.tgz]
md5=d5b05498af26d5c09b372caab82a0337
sha256=e7431530a4cf4c44b5068e23454f95765dc0b51e7d98bc2bd70451b17d505bd9
@@ -13914,10 +14710,18 @@ sha256=bfc8cf4258574b48d33e9d622627db496e6533a469a6a87fd7ed76098dabb8a6
md5=afd35e0770f28121a9f8d6093d20a62b
sha256=bfc8cf4258574b48d33e9d622627db496e6533a469a6a87fd7ed76098dabb8a6
+[http://downloads.sourceforge.net/ltp/ltp-full-20080229.tgz]
+md5=5860835de7e8d6f76a856243fd5f299e
+sha256=e4c56dbbbf2d1a4d641624234b561e9402c00e47b5b253ae126aa444182310a4
+
[http://heanet.dl.sourceforge.net/ltp/ltp-full-20080229.tgz]
md5=5860835de7e8d6f76a856243fd5f299e
sha256=e4c56dbbbf2d1a4d641624234b561e9402c00e47b5b253ae126aa444182310a4
+[http://downloads.sourceforge.net/ltp/ltp-full-20090131.tgz]
+md5=397b376dd659459e4a431474b42263a8
+sha256=5fa4353d826b719cc313e370dd8f4ab0793432e4d797a96cb5bb01e078ff1e10
+
[ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.4-1.diff.gz]
md5=89c0ebdd0a27bc7f68726100f4bb079b
sha256=27c0b2051949b88514d4a32300377d531db314d7c93750b0abff049c2b93d739
@@ -13942,6 +14746,10 @@ sha256=28bbab4a69a3c78539b2588d2219327009d93cafc74fb59b9a4ea5f5b794f8db
md5=8dbadad76ee360c2ed2caa915f5b1c8e
sha256=28bbab4a69a3c78539b2588d2219327009d93cafc74fb59b9a4ea5f5b794f8db
+[ftp://ftp.us.debian.org/debian/pool/main/l/ltrace/ltrace_0.4.orig.tar.gz]
+md5=8dbadad76ee360c2ed2caa915f5b1c8e
+sha256=28bbab4a69a3c78539b2588d2219327009d93cafc74fb59b9a4ea5f5b794f8db
+
[http://ltt.polymtl.ca/lttng/ltt-control-0.12-21062006.tar.gz]
md5=053abb5ce58363ae09340e00de28c520
sha256=c53f07c095642303e22b283212bb0da45020b0714e24310ed0e396c560a78e1f
@@ -13978,10 +14786,18 @@ sha256=2010f2152eee89a67f02edc3041574fb07442d075ca46fbcf84f981f0977a5d7
md5=30428b8ff783a0cfd61dab05a17cfaa7
sha256=fb423dc3ae75e64a256172c873732fe869ae482409cf1f3e7d980d222f070cee
+[http://downloads.sourceforge.net/lxde/lxde-common-0.3.2.1.tar.bz2]
+md5=f30eee998071ace04e7be33aa8ac6a5b
+sha256=bd9e9a368affb5565b50b0b79a3d04138d10f19d55ab13c8ea3ba3e32790876e
+
[http://qa.debian.org/watch/sf.php/lxde/lxde-common-0.3.2.1.tar.bz2]
md5=f30eee998071ace04e7be33aa8ac6a5b
sha256=bd9e9a368affb5565b50b0b79a3d04138d10f19d55ab13c8ea3ba3e32790876e
+[http://downloads.sourceforge.net/lxde/lxmenu-data-0.1.tar.gz]
+md5=1c35ad4bf05cd076ce4a9bb64a246351
+sha256=73e111f64d777f35b3ad2805aa39e7746c1d223ea4fa8f805e5767b595bfdfb6
+
[http://qa.debian.org/watch/sf.php/lxde/lxmenu-data-0.1.tar.gz]
md5=1c35ad4bf05cd076ce4a9bb64a246351
sha256=73e111f64d777f35b3ad2805aa39e7746c1d223ea4fa8f805e5767b595bfdfb6
@@ -13994,14 +14810,30 @@ sha256=2ac2154e3f66b5b32ca25d47e3977db115ac6dc52ddb7442ce16e65a4ac1afee
md5=2baa9f8ad14aa6dcfb763cfa0ce3bbcb
sha256=88903347bde122d50d358471788a6cc3f5dee18f2adee8c177d708f8c2773aae
+[http://codespeak.net/lxml/lxml-2.1.5.tgz]
+md5=22567ccc6ab8ec8c90c335c810cabe11
+sha256=8136076333789dc1b586858f30920aebe32512934c526ef0cb492be49c150b09
+
+[http://downloads.sourceforge.net/lxde/lxpanel-0.3.8.1.tar.gz]
+md5=18b03bd5556d14b8bd1adf00f4e95574
+sha256=b3d3a06b946dba977007a84035da6667bbaa3617e1aecb83483d6a207c319021
+
[http://qa.debian.org/watch/sf.php/lxde/lxpanel-0.3.8.1.tar.gz]
md5=18b03bd5556d14b8bd1adf00f4e95574
sha256=b3d3a06b946dba977007a84035da6667bbaa3617e1aecb83483d6a207c319021
+[http://downloads.sourceforge.net/lxde/lxpanel-0.3.99.tar.gz]
+md5=91f020d385ee29dcfff820d5c77a0e4f
+sha256=0edf3fe88faf41c72c1da4522ba22ba2493d900061a79603858a6a3f6a74a735
+
[http://qa.debian.org/watch/sf.php/lxde/lxpanel-0.3.99.tar.gz]
md5=91f020d385ee29dcfff820d5c77a0e4f
sha256=0edf3fe88faf41c72c1da4522ba22ba2493d900061a79603858a6a3f6a74a735
+[http://downloads.sourceforge.net/lxde/lxsession-lite-0.3.6.tar.gz]
+md5=909c3b0f4c6e4855f64dfbb47467c0b3
+sha256=3754ee460942bfde94e6a7fdf20c337a1b6a069cea6972d0c33a115db828dba4
+
[http://qa.debian.org/watch/sf.php/lxde/lxsession-lite-0.3.6.tar.gz]
md5=909c3b0f4c6e4855f64dfbb47467c0b3
sha256=3754ee460942bfde94e6a7fdf20c337a1b6a069cea6972d0c33a115db828dba4
@@ -14014,6 +14846,10 @@ sha256=daa670b686f959ab15e457425e57c50f0b973ee4d24d6a4171c33f467961ad1d
md5=0ae3b9ccb2aa74776be4af8c199dbbe9
sha256=d720ff082ed29d385c52e7ad370499d23275e595e9d7a321b383609f68acf23e
+[ftp://ftp.lyx.org/pub/lyx/stable/1.6.x/lyx-1.6.1.tar.bz2]
+md5=fdac2fc40b435857afa1089fc04c1fcb
+sha256=8f45da9653fc9ea927f3b8c7c96390fc8277d7c969b735a7b615c06e4e5c03d7
+
[http://downloads.sourceforge.net/sevenzip/lzma417.tar.bz2]
md5=b1ab85e4dc1eb1323d77fef47a2cb71c
sha256=84124d4501798ecb284fceb28931db023850535e1b1146c884add7b3b0331cbc
@@ -14114,6 +14950,10 @@ sha256=0f4e55d362408e189d0c0f4e6929f4b5be7eb281e46cbf0ce3f035370c00bc7e
md5=1ba8e147aff5e79bd2bfb983d86b53d5
sha256=815ce53853fbf6493617f467389b799208b1ec98296b95be44a683f8bcfd7c47
+[http://www.opensource.apple.com/darwinsource/tarballs/other/mDNSResponder-107.6.tar.gz]
+md5=aa4e0e5c57f94489463ea6576591ce9d
+sha256=43d427d3d5c78aef57a49898def469cc4cae28190462205368be1f3a0fcc0165
+
[ftp://ftp.gnu.org/gnu/macchanger/macchanger-1.5.0.tar.gz]
md5=79b7cdaeca3d8ebafa764c4b0dd03ab7
sha256=d44bfa27cb29c5a718627cb3ef3aa42eb5130426545eb2031120826cd73fa8fe
@@ -14126,6 +14966,10 @@ sha256=324d0a55f73c82ad48635a94a8d72277a2280030df6d036eafe3498c933dee6d
md5=6814b47ceaa99880c754c5195aa1aac1
sha256=5a79c7516ff7560dffc6a14399a389432bc619c905b13d3b73da22fa65acede0
+[http://downloads.sourceforge.net/madwifi/madwifi-0.9.3.tar.bz2]
+md5=26c31e8e1528fd098e3aaa11c0d34d99
+sha256=847596646417abbdce9cfd0e1dca2cced29c6a8b814d1bd28d0c7301e9e4e9d8
+
[http://heanet.dl.sourceforge.net/madwifi/madwifi-0.9.3.tar.bz2]
md5=26c31e8e1528fd098e3aaa11c0d34d99
sha256=847596646417abbdce9cfd0e1dca2cced29c6a8b814d1bd28d0c7301e9e4e9d8
@@ -14258,6 +15102,10 @@ sha256=5c578a8c573b4430358d4f6523f8acd8b2c5039579d907c88ec09dab13b226d3
md5=3ba08abd8bbd0a87ea5bad05cded3bc3
sha256=5c578a8c573b4430358d4f6523f8acd8b2c5039579d907c88ec09dab13b226d3
+[ftp://ftp.us.debian.org/debian/pool/main/m/mailx/mailx_8.1.2-0.20050715cvs.orig.tar.gz]
+md5=3ba08abd8bbd0a87ea5bad05cded3bc3
+sha256=5c578a8c573b4430358d4f6523f8acd8b2c5039579d907c88ec09dab13b226d3
+
[ftp://ftp.gnu.org/gnu/make/make-3.80.tar.bz2]
md5=0bbd1df101bc0294d440471e50feca71
sha256=a99b39e7b04c333724f48c38fede709481cfb69fafe7e32ae4285b7fadf92f1b
@@ -14286,6 +15134,10 @@ sha256=8599712f2b2b3778eea344f59e1512cea284e802560317fac436585885a41dfa
md5=89c4b6b4a89f6502626783716fc7d887
sha256=8599712f2b2b3778eea344f59e1512cea284e802560317fac436585885a41dfa
+[ftp://ftp.us.debian.org/debian/pool/main/m/makedev/makedev_2.3.1.orig.tar.gz]
+md5=89c4b6b4a89f6502626783716fc7d887
+sha256=8599712f2b2b3778eea344f59e1512cea284e802560317fac436585885a41dfa
+
[http://handhelds.org/~zecke/oe_packages/maki_V1.0.4ern.tar.gz]
md5=cb5e4656fc3b13aa02d94096966ef2a9
sha256=6d5f1f771de97e08378940070b28dd75ac394ea611965ed1751600adbd099a59
@@ -14322,6 +15174,10 @@ sha256=2257099c760c12daf094744c6b2269d476e3bc6b523366168ad81bdd2ebd2445
md5=7e989a8b0562054aea22c654507f2cb5
sha256=2257099c760c12daf094744c6b2269d476e3bc6b523366168ad81bdd2ebd2445
+[ftp://ftp.us.debian.org/debian/pool/main/m/masqmail/masqmail_0.2.21.orig.tar.gz]
+md5=7e989a8b0562054aea22c654507f2cb5
+sha256=2257099c760c12daf094744c6b2269d476e3bc6b523366168ad81bdd2ebd2445
+
[http://projects.o-hand.com/matchbox/sources/matchbox-common/0.8/matchbox-common-0.8.tar.bz2]
md5=107ac7cfb5f5ad3eacd14388a34a706b
sha256=39672384843942210eca6e16396768b979e479a8e1a8d42d092ad517f561c20d
@@ -14498,6 +15354,10 @@ sha256=396a2de3eed6d5d3c4604b372e11f6c0f18644ef3d8ee14978b715ec26aa0974
md5=18b20db6e40480a53bac2870c56fc3c4
sha256=086ab03daaac28a28c0ddb9a709040b59e1322f6bfa68e39d004d9c66b119e7e
+[http://www.midnight-commander.org/downloads/mc-4.6.2.tar.gz]
+md5=ec92966f4d0c8b50c344fe901859ae2a
+sha256=d34c913e7fff4ea61cf8640b10f9118829cc5359045a1821b6510f3c8b1be26e
+
[http://www.lilotux.net/~mikael/mcabber/files/mcabber-0.9.9.tar.bz2]
md5=189fb9d23f5a8412bc660884528475ea
sha256=2a231c9241211d33745f110f35cfa6bdb051b32791461b9579794b6623863bb1
@@ -14562,6 +15422,10 @@ sha256=5876c28d5015c9a947ba87b5005e23d0eeaffd5de9eea2f321d6f42c8a71ed17
md5=bfa110c41623ff689a60844430f91a34
sha256=5876c28d5015c9a947ba87b5005e23d0eeaffd5de9eea2f321d6f42c8a71ed17
+[http://downloads.sourceforge.net/mediatomb/mediatomb-0.9.1.tar.gz]
+md5=3cb8a14b17102ec828853679d879f7bc
+sha256=64821ec2c678e5da1582ee116d919ce2beef166301586e42c547e4482fb8d945
+
[http://heanet.dl.sourceforge.net/mediatomb/mediatomb-0.9.1.tar.gz]
md5=3cb8a14b17102ec828853679d879f7bc
sha256=64821ec2c678e5da1582ee116d919ce2beef166301586e42c547e4482fb8d945
@@ -14578,6 +15442,10 @@ sha256=cd907918ff4a7d1eea4ed618c181da0e0894bcfcdb1e3e4909a2795da120ae4c
md5=0e6f7335075443ed0863a0df75689359
sha256=2a4bf8bdac96d6498e323b93954099fb13a9d92ddd5704aa6553940b86a071bb
+[http://downloads.sourceforge.net/lxde/menu-cache-0.2.2.tar.gz]
+md5=2ebce9f1217553112ac35abc35360050
+sha256=ee28209d7cdcb759338ef0061e2f7c6ec7a021369659790adeef2cd888b58696
+
[http://qa.debian.org/watch/sf.php/lxde/menu-cache-0.2.2.tar.gz]
md5=2ebce9f1217553112ac35abc35360050
sha256=ee28209d7cdcb759338ef0061e2f7c6ec7a021369659790adeef2cd888b58696
@@ -14622,6 +15490,14 @@ sha256=fe3730d1bcca4eaa86f9e39f6524328a58d134b73f1d9261f21e0f89f7b3ca10
md5=203188db254cc418e9d9dd9791543b9a
sha256=8253a341c3bdd49467ecfdb5ccc03b359eacec5aec0b35bd77cdce341e157399
+[ftp://ftp.microwindows.org/pub/microwindows/microwindows-src-0.91.tar.gz]
+md5=901e912cf3975f6460a9bb4325557645
+sha256=c0a8473842fc757ff4c225f82b83d98bba5da0dca0cf843cfc7792064a393435
+
+[ftp://ftp.microwindows.org/pub/microwindows/microwindows-src-snapshot.tar.gz]
+md5=934348f3ccfb457f8faad0b17dc900cb
+sha256=319d155e2032b97c799faaf0c47dca0a247b4f6893d6d92153600329af32c9b7
+
[http://software.twotoasts.de/media/midori/midori-0.0.10.tar.gz]
md5=7a4a20e21fb3f3109c81f6ff9cc4647e
sha256=b79b8aad657d2a2b59fb773fed4ef7567fb28e5a3f3bd645ff904f69d50a0555
@@ -14662,6 +15538,10 @@ sha256=7861535eef2c0804dbdc6993db76574b4a812164bed7545a3697a3b97e36d2dd
md5=5169ead6783f374cedf3f89bf399bd75
sha256=a966641cf1b6e18e4f58aa3585a9a63905ed50252883804c006a3263674a32ec
+[http://git.xfce.org/kalikiana/midori/snapshot/midori-f30dff433056e239ca775d16f343bdb249f1a338.tar.bz2]
+md5=24f6c176246300b66c036de65fed0565
+sha256=6151809d337ea8d07769618acd4ac470c5ccd310790e40805b93cf8781904048
+
[http://downloads.sourceforge.net/midpath/midpath-0.3rc2.tar.gz]
md5=d03cd88f51f82bbcfcfa5b65df0da5b0
sha256=e235ca7470e7cdfb90e3806fbcc1b2c450db286276136a2523c7ae26a804a100
@@ -14682,22 +15562,42 @@ sha256=8ee3e48da07e20899a11adb9f2dd4dfc4922b43bcb1dc7bd78c55aceeb5eccc1
md5=d779a0b8f58776c28296ae62f253784e
sha256=8ee3e48da07e20899a11adb9f2dd4dfc4922b43bcb1dc7bd78c55aceeb5eccc1
+[ftp://ftp.us.debian.org/debian/pool/main/m/mime-support/mime-support_3.28-1.tar.gz]
+md5=d779a0b8f58776c28296ae62f253784e
+sha256=8ee3e48da07e20899a11adb9f2dd4dfc4922b43bcb1dc7bd78c55aceeb5eccc1
+
[ftp://ftp.debian.org/debian/pool/main/m/mime-support/mime-support_3.44-1.tar.gz]
md5=048aa29c31f067382cd669ee20934b9e
sha256=4f65183200955540c097b82bfb18f5d21b636ca79f47cd018a4ea8b89cd2998c
+[ftp://ftp.us.debian.org/debian/pool/main/m/mime-support/mime-support_3.44-1.tar.gz]
+md5=048aa29c31f067382cd669ee20934b9e
+sha256=4f65183200955540c097b82bfb18f5d21b636ca79f47cd018a4ea8b89cd2998c
+
[http://downloads.sourceforge.net/mingw/mingw-runtime-3.14-src.tar.gz]
md5=7d049a8331efcfe34600c0cda6934ac6
sha256=a145a90d0824c65cfc11c3fc843ba484585983e1e8ee14b79f4d09cf1d38b98b
+[http://downloads.sourceforge.net/mingw/mingw32-make-3.81-20080326-src.tar.gz]
+md5=7c21ed475aa72a0fd3115dcc12eaeaa2
+sha256=f05c64eaa334cf6a59aacdfff3213fc53d0b670e79662fb25f029bfb78148bac
+
[http://downloads.sourceforge.net/mingw/mingwrt-3.15.1-mingw32-src.tar.gz]
md5=0411b98fd5eeac0706e2abb7122526bb
sha256=4f4d19f3e15fdf00957932211be609b6bf4e689ad5938ce7bff666a638bde0e7
+[http://downloads.sourceforge.net/mingw/mingwrt-3.15.2-mingw32-src.tar.gz]
+md5=7bf0525f158213f3ac990ea68a5ec34d
+sha256=64d7c31354d318ec2085e39e724287c78742a66302fd0b27dab7a3f705d5c54d
+
[http://www.denx.de/twiki/pub/Know/MiniFOHome/mini_fo-0-6-1-pre1.tar.bz2]
md5=7e192e01b08023c7f3e63bf1c796bc14
sha256=68c64a38f0b29347f86871248f0399e7e1b12645dc6263af7b2e4940f1392eaa
+[http://www.acme.com/software/mini_httpd/mini_httpd-1.19.tar.gz]
+md5=7c68293ad265ecfe2edea917912f6f1f
+sha256=f7f36533b1338ea16d916ea525ea7006ab38fdd3544ac7df93a4688a8e270241
+
[http://gpe.linuxtogo.org/download/source/miniclipboard-0.3.tar.gz]
md5=8bea461bf4136aedbe110b6aec184d72
sha256=7f9c937c0f04760d215f7e7d9ca2709f8148e69be2693206d1ae81e2c88a656e
@@ -14706,6 +15606,10 @@ sha256=7f9c937c0f04760d215f7e7d9ca2709f8148e69be2693206d1ae81e2c88a656e
md5=1c8f3b247c38fb16c3c2170df9fc102a
sha256=7f04535b3839fbbb0affa780108c32c330b924caf4e41dacd57dd23aa1fec392
+[http://alioth.debian.org/frs/download.php/2332/minicom-2.3.tar.gz]
+md5=0ebe7a91898384ca906787cc4e2c3f25
+sha256=2acbc3d4a07e1134ee285a72fa44bbc27703b02dba02be68db9e6fd8320356fb
+
[http://gpe.linuxtogo.org/download/source/minilite-0.41.tar.gz]
md5=135996a65350d5c40a2c020a2ddaf5ef
sha256=2e01c8375e7d876a44b8703e00958aea88967124c1a9631031c4ea8019f5dd32
@@ -14814,6 +15718,10 @@ sha256=f79dff54153dc3beb9eb3f2e4776dbc55ed2a4d3d0adbf9c8a2d9eb230ed3850
md5=75bbd1dc425849e415a60afd9e74d2ff
sha256=e83b80b4ccd7863223fac4a2d54974a64a79c635d6bdda0c6e7039f966eae9e2
+[ftp://ftp.mktemp.org/pub/mktemp/mktemp-1.6.tar.gz]
+md5=3e66f91f8a39c7dc0a67b158aeb9c2ac
+sha256=a1275889c7bb6b3c353d5b9ebb983064e8ef1d29ef8688bd132cec065642d2d9
+
[http://www.informatik.hu-berlin.de/~tkunze/zaurus/patches/mmc-spi.patch]
md5=329fd64f8ccdb2731c54f6a1b8c6de14
sha256=27934de6da3f5ac94ed60ba4bfdd3acc2d93b01a2f932b576f87fb4508dcde6e
@@ -15022,6 +15930,10 @@ sha256=55bdff5fefa619682c4da7cf25c8e1281f21f405e98580b24d3cfb7ff781a87d
md5=a93a390315aacfec061c8df89fb5e35f
sha256=76e151048a736cf490630ace4909f2d4b65f1afe2447c7fd794d270eb956e045
+[http://downloads.sourceforge.net/musicpd/mpc-0.15.tar.bz2]
+md5=48897aeb3a7ee5c64f30e56789f105a8
+sha256=7b549ca4af77fc5b0472df1ecd9e76d2f8415258ddcfb63dfa64a55a04e1e590
+
[http://downloads.sourceforge.net/musicpd/mpd-0.11.2.tar.gz]
md5=b6e913dc4b63b161bb1b96030763c3a7
sha256=e784f78b3cce93367c105619c690465b78a88d3e4c616cc829f4cb5e66f2bbe0
@@ -15034,10 +15946,18 @@ sha256=30e454514ef84f65162182b7cbcd0e46fdda4c99111ac500b5b2df7678ca10fd
md5=1a9a1a9d31f00a43838b3752024f7ebe
sha256=30e454514ef84f65162182b7cbcd0e46fdda4c99111ac500b5b2df7678ca10fd
+[http://downloads.sourceforge.net/musicpd/mpd-0.14.2.tar.bz2]
+md5=66817a4b4c05454e6488f6b821f2a6a3
+sha256=0b3926a141873f179efc3c3b9d296b65d332dbb898340ac5e5d1dd0c3dd9fb20
+
[http://libmpeg2.sourceforge.net/files/mpeg2dec-0.4.0b.tar.gz]
md5=52d10ea80595ec83d8557ba7ac6dc8e6
sha256=9416376952812e5b479745d67a2bf874fbcad10137517314ce7de37abb756df8
+[http://bmrc.berkeley.edu/ftp/pub/multimedia/mpeg/encode/mpeg_encode-1.5b-src.tar.gz]
+md5=ff125fb82118efc7c852f0d26d5552c6
+sha256=dd8db42f88393bb0ff0d738defa271729a8aa9b8de24ed13bc6bd27014f2daf5
+
[http://www.mpfr.org/mpfr-2.1.1/mpfr-2.1.1.tar.bz2]
md5=843422d90349800ee721f6710d051c87
sha256=df551fb075d5e6d0824b74d231962cf0e104c43f646e233675d952ef3c03debc
@@ -15202,10 +16122,18 @@ sha256=c1454fdf5d3658f492253106c12bbf89a3bcc5789c36851a5f2f345d61a4ac0c
md5=115dc5380ffdb03ec2e71ff9d6d97e72
sha256=50bfab6d4b1b9af37ca6832b979f5c891f2dd9259a68700b37214d7897927c17
+[http://www.mumpot.org/download/mumpot-0.4.tar.gz]
+md5=52d1e64c63d70604f13985f1f326a802
+sha256=302bea9f0903fecf13ee0e9c24ed090203f2c77f7164a2a0f68c35fc8e1b9f10
+
[http://www.dotaster.com/~shuu/linux/murasaki/0.8/8/murasaki-0.8.8.tar.gz]
md5=ea7afa7e0bd9cfa0df7c04a9b270df88
sha256=2033168723ffd612336acb8a64b33fcd91f7dedeaf78949d3dfce231cb962ce9
+[http://www.sacredchao.net/~piman/software/mutagen-1.15.tar.gz]
+md5=c346e1290711a38c123727c31f3602f8
+sha256=636d816aa4c7e754496b9daec8a00d7e5f62b67d640440c91dea6d694c83c944
+
[ftp://ftp.mutt.org/mutt/devel/mutt-1.5.15.tar.gz]
md5=b2c1eb45fd958f6589ee52a98f2a3ce1
sha256=03fa1f45d4743cd395b634d19aebbc2c1918cf6b683e0af51076ccc79f643a9a
@@ -15318,6 +16246,10 @@ sha256=c069e983ea8bb9b6706d35126350d4d14619b9ce0ac888adbcdda3ff13362ab4
md5=c2ec1ddff62c2b248dbaeab1ab656d74
sha256=c069e983ea8bb9b6706d35126350d4d14619b9ce0ac888adbcdda3ff13362ab4
+[http://downloads.sourceforge.net/navit/navit-0.1.0.tar.gz]
+md5=92b0653189f34742f9960ba309a77f35
+sha256=9a2418f4651feaaf773ddd8617bf04e3695fa38a41b9387c5a3b959c940573fe
+
[http://downloads.sourceforge.net/nbd/nbd-2.8.7.tar.bz2]
md5=bc7995b4961385269abc645575bcaf4d
sha256=a69d1690ad587d81b85c34d1ef9bf47abf0ba21dc96876d95dd6a9a193a859f1
@@ -15366,6 +16298,10 @@ sha256=76472e51576b42bfc129e487ae7dd3a5e1f1f380105b422fc14ee408e3a881df
md5=516c576c0ca5c0a01ad24d018093cfee
sha256=8a29457052b73ac0139e3b2824a74323256dd7631b1691239ddb18124e231a71
+[http://www.webdav.org/neon/neon-0.28.2.tar.gz]
+md5=b99b3f44e8507ae2d17362f1b34aaf02
+sha256=d9cd601613db6affb25655e0908b0bf8c266669cef31999b6b4121d585ff9094
+
[http://downloads.sourceforge.net/net-snmp/net-snmp-5.1.2.tar.gz]
md5=8080555ab3f90011f25d5122042d9a8d
sha256=1fca69e934c3d526e308450cc5af2478d440e012922dd0bb10388fcf093ef32e
@@ -15374,6 +16310,10 @@ sha256=1fca69e934c3d526e308450cc5af2478d440e012922dd0bb10388fcf093ef32e
md5=8080555ab3f90011f25d5122042d9a8d
sha256=1fca69e934c3d526e308450cc5af2478d440e012922dd0bb10388fcf093ef32e
+[http://downloads.sourceforge.net/net-snmp/net-snmp-5.4.1.tar.gz]
+md5=6c974df7a5a5b1579f72115e6b045bda
+sha256=0ea976722c993c87dede8eb6348e6feb059e3851bbef2de824bf18ac97cdb565
+
[http://heanet.dl.sourceforge.net/net-snmp/net-snmp-5.4.1.tar.gz]
md5=6c974df7a5a5b1579f72115e6b045bda
sha256=0ea976722c993c87dede8eb6348e6feb059e3851bbef2de824bf18ac97cdb565
@@ -15394,6 +16334,10 @@ sha256=9d5e27f290bbb954d512f37912d39a94ae03536a7ba3ef4dacec4df5f2476f47
md5=17917abd7d255d231cc0c6188ccd27fb
sha256=b6e01cfc0b4223f60fd994eee950635b165d54a96cf63bbe607a5ff64355bd8c
+[http://developer.irexnet.com/pub/iOn/Sources/1.0/Third%20party/all/netbase-4.21.tar.gz]
+md5=b91eeb701d1733b3efb174b9463c5875
+sha256=cc74bd934a33e80e0218d9b2482d986191879d184ffd03deaefa78b0c8d7a76a
+
[ftp://ftp.debian.org/debian/pool/main/n/netbase/netbase_4.21.tar.gz]
md5=4e4582ed5f84fa074137c1a7ee39a689
sha256=aa54d1822f8505f600b4c8d5debdf289b956b3b86bfd72e2ba02026352c107fc
@@ -15458,6 +16402,10 @@ sha256=0578f4fafb309adf3413c9f56076b1b16476cb71e83c02ff7efafad172d91adb
md5=b50e49d5f0d3780438af0027a182b997
sha256=0578f4fafb309adf3413c9f56076b1b16476cb71e83c02ff7efafad172d91adb
+[ftp://ftp.us.debian.org/debian/pool/non-free/n/netperf/netperf_2.3.orig.tar.gz]
+md5=b50e49d5f0d3780438af0027a182b997
+sha256=0578f4fafb309adf3413c9f56076b1b16476cb71e83c02ff7efafad172d91adb
+
[ftp://ftp.debian.org/debian/pool/non-free/n/netperf/netperf_2.4.2.orig.tar.gz]
md5=c747042975c2965b2cd45ebf8525c5f8
sha256=844ba97e745a0b9f37afc7daa323cafcef00108cd0254667da0a00558eb323a7
@@ -15470,6 +16418,10 @@ sha256=6eed89b661ae9f2ac0d383414ca964abea8a115f8fba0f7ab37b49b565ffb2a8
md5=1c94a41e2399d261985a75f0cd3b895b
sha256=9cca3e34e23f00c82bc5e7237aa81639874e90d43a689e26fbfd938279ca31c9
+[http://ftp.gnome.org/pub/GNOME/sources/network-manager-applet/0.7/network-manager-applet-0.7.0.tar.bz2]
+md5=856fc7c4cf43c8614445d9fcf78177d1
+sha256=7c9fcb0b18c72071ad42316ff5e0369a418f92d05ef419874a67826fd9d8406a
+
[http://downloads.sourceforge.net/nfs/nfs-utils-1.0.6.tar.gz]
md5=f17e9983457e1cf61c37f0be4493fce6
sha256=aa99fcb016971290f9a871331eed60150ebdd84785dda1b252556a54760b97bf
@@ -15498,6 +16450,10 @@ sha256=fd5a85b48613452fbfc9ce6d6e3fa3f37992731422eb2843235fbf4e02d6f1e9
md5=af11dcd3fe71d67831c020e3bfd5073b
sha256=71d2ba992df209a00bb1dca45e3336729dc16e51b71526bd20f897cc6127a275
+[http://people.redhat.com/dcbw/NetworkManager/0.6.6/nm-applet-0.6.6.tar.gz]
+md5=16e95a3515e4255d034b14045a9effd5
+sha256=8eb264d5838d1f9e2e507a570cb23dc54e11505023b71b6868cee31da2dff38d
+
[http://download.insecure.org/nmap/dist-old/nmap-3.81.tar.bz2]
md5=0713306dda85aee2c95ef31b4b7d2838
sha256=1cfb120008f636a874b871f1625409082badaaf64177c9ac873480630390356c
@@ -15510,6 +16466,10 @@ sha256=aac281c7437e4007236eb461a668311eb3453e85012acf619aa3d62683330a6a
md5=af4c4ad64196f26a245c385a234f462f
sha256=5d6c456b30318cc05b19915aa601ea4c2cf46ddf43a39e33948dea6280ac5395
+[http://downloads.sourceforge.net/materm/no_debug_x.patch]
+md5=021613030ae67c5c9868ec2a0c031172
+sha256=a41c3eb4cf94fe7b059468983a2f533e0669d0204088fa5ece365b1663b560c7
+
[http://heanet.dl.sourceforge.net/materm/no_debug_x.patch]
md5=021613030ae67c5c9868ec2a0c031172
sha256=a41c3eb4cf94fe7b059468983a2f533e0669d0204088fa5ece365b1663b560c7
@@ -15526,6 +16486,10 @@ sha256=a99b07c2193eebeb766bc422dd2ebba6649680457d58a4f5a86f2567ce49b3fa
md5=0b8b1a58bfdb60fa41df46771a464b82
sha256=a99b07c2193eebeb766bc422dd2ebba6649680457d58a4f5a86f2567ce49b3fa
+[http://downloads.sourceforge.net/notecase/notecase-1.6.9_src.tar.gz]
+md5=da3267f271cd6e2c82d4efa4176ae583
+sha256=2d814209506cb52db87f4dae5cbb3de6165e1d46c845114d0eee242385165fb0
+
[http://heanet.dl.sourceforge.net/notecase/notecase-1.6.9_src.tar.gz]
md5=da3267f271cd6e2c82d4efa4176ae583
sha256=2d814209506cb52db87f4dae5cbb3de6165e1d46c845114d0eee242385165fb0
@@ -15558,6 +16522,10 @@ sha256=53d2f92c3d14423b49c2ff077855cf3987d38def963c82fd26fba5de379ca540
md5=139a1ed50a1a12e47b1f7deedf4f40c3
sha256=4310a3a526ae5461e17f57353fc29f71d13820a215eaa62c629190cc2a026173
+[http://downloads.pf.itd.nrl.navy.mil/olsr/nrlolsrdv7.8.1.tgz]
+md5=46291de38362acdcd335bcf259055046
+sha256=0e6b18e3bf77dd20395881535e3e7043bcd5171c220728310215d708f44f3b1c
+
[http://www.nlnetlabs.nl/downloads/nsd/nsd-2.0.0.tar.gz]
md5=a09542645b91ff60564b0f4db436af01
sha256=8f486c4ef4d3f60fba4e0f855399184ca557f03a747cae6adde4cc2dffc53ff2
@@ -15586,6 +16554,10 @@ sha256=0bf226bb3a1716e6eb97355e08a7ffcf09aadfb91ba41ccef2ef1ba7a01719a2
md5=873a8de662849d129fc7c475ad3f5447
sha256=b5bbf81230bb21573d69fc471721b0b0c404eaa5040ef28e7dcec38320a1b2e4
+[http://www.ntfs-3g.org/ntfs-3g-2009.1.1.tgz]
+md5=56e4aed24d0c2543597de0ba52b3ed64
+sha256=0e02ff891645658c1801ba7d665c0ff3a4231e5570b974a803ffc2974ef68e45
+
[http://downloads.sourceforge.net/ntop/ntop-3.0.tgz]
md5=1ec6055c75f1acbb5d5600492481ef85
sha256=c50cdf2c6cf7309f88c7ec0a56158eca76c80532502b36f3378eeca433423d83
@@ -15634,6 +16606,10 @@ sha256=d430273a77aed959c007595d969fefa36c59249807212d7d89f5d6cf2a701dd6
md5=af066b59a50bf5dbe1a14d6be3df6937
sha256=d430273a77aed959c007595d969fefa36c59249807212d7d89f5d6cf2a701dd6
+[http://downloads.sourceforge.net/gakusei/nunome-1.0.2.tar.bz2]
+md5=e5c9d2351de250aaa7abf581a1f2c0f4
+sha256=7bda9302036facd65b323d7042a809b08d55d5b61b38d4d40f22f41f27fec83c
+
[http://heanet.dl.sourceforge.net/gakusei/nunome-1.0.2.tar.bz2]
md5=e5c9d2351de250aaa7abf581a1f2c0f4
sha256=7bda9302036facd65b323d7042a809b08d55d5b61b38d4d40f22f41f27fec83c
@@ -15650,6 +16626,10 @@ sha256=ec1b9a9447bcbfe36cff46aaf4aaa6b3f8f945487438a92d0b8e70d9b7814f97
md5=2327cca8e6116fd6a96345566336d81d
sha256=069b3baa000b4a6125b86bddaf67c1b7fcd082eaf14b64113558fc30d6c71dd7
+[ftp://ftp.microwindows.org/pub/microwindows/nxlib-0.45.tar.gz]
+md5=9a1e3b81df0e32189fa873fd6fc086e5
+sha256=8e63251e1599474d18912ad82b2e6b0c6c612e7eb9507958ab0f60f92d7ea454
+
[http://64.34.161.181/download/3.2.0/sources/nxproxy-3.2.0-1.tar.gz]
md5=ac31e8f2f112e3720f3c00cec67c0734
sha256=5642ce40e2f34caeed433e8c0ac010e2e7e738c2c5aa8fc59bba892a8b542d84
@@ -15734,6 +16714,18 @@ sha256=3b46936339fe5c2dcb8fb2f9213fa36dcddefaa1e00d1d93b5640d8cc9898ca1
md5=b374415d7f5d485993fa697ab9a678b4
sha256=3b46936339fe5c2dcb8fb2f9213fa36dcddefaa1e00d1d93b5640d8cc9898ca1
+[ftp://ftp.us.debian.org/debian/pool/main/o/offlineimap/offlineimap_4.0.14.tar.gz]
+md5=b374415d7f5d485993fa697ab9a678b4
+sha256=3b46936339fe5c2dcb8fb2f9213fa36dcddefaa1e00d1d93b5640d8cc9898ca1
+
+[http://downloads.sourceforge.net/ogre/ogre-v1-6-1.tar.bz2]
+md5=6fbd72e81dd4c135a2cc4f78d596aeb4
+sha256=68b8978071f31615ad89119583e629ca7c3069ae0c2fb8f7c390c19807cce0bb
+
+[http://downloads.sourceforge.net/wgois/ois_1.2.0.tar.gz]
+md5=6a8cedad04f095127ca1455162fec955
+sha256=175414df5d7b924779fa513ea614081ae55ae708a5e29473e74911297e4be708
+
[http://www.olsr.org/releases/0.4/olsrd-0.4.10.tar.bz2]
md5=9807d4451e65cb4ec385155eef7bf3cf
sha256=af04bdd8abd85bb4715fd6011566054847c75fcbac5e5e9cdee80858ac2957d3
@@ -15806,6 +16798,10 @@ sha256=1bb805b13ca5fe4b889f21b74feff0cdbf2a4603c9570a2b0050ae51db7c6306
md5=1b48bbb5df6b4c12ebb42b92ae1bf1f9
sha256=908a69340b020f7d865acf70724e37837016a81a0cb499fb83441759cbef7616
+[http://software-dl.ti.com/sdo/sdo_apps_public_sw/omap3530_dvsdk_combos_tspa/omap3530_dvsdk_combos_tspa-3_16-Linux-x86.bin]
+md5=8347c8980ccf6cc46039ca75e8b0f543
+sha256=f9bd3921377ab64138c7dd550d5753e3668e99de37d743cf112b88ad933d4420
+
[http://www.devzero.net/openmoko/dist/omext-0.2.tar.gz]
md5=3c1fcd85f0a0cd3ccc4d7b4f26996b47
sha256=3d3cc3e4f92f7e0b6a352c3f68a337a599a90f4e4b6e6743adc0c70b570639f5
@@ -15862,6 +16858,14 @@ sha256=1d2d7996cc94f9b87d0c51cf0e028070ac177c4123ecbfd7ac1cb8d0b7d322d1
md5=7df692e3186109cc00db6825b777201e
sha256=1d2d7996cc94f9b87d0c51cf0e028070ac177c4123ecbfd7ac1cb8d0b7d322d1
+[http://download.java.net/openjdk/jdk6/promoted/b12/openjdk-6-src-b12-28_aug_2008.tar.gz]
+md5=b53e1ef643909ce82721ee4c970d958b
+sha256=f099b3b1f3c22b8cea950403b992267ec69f43ad8a80bbcb84448b26340807ab
+
+[http://download.java.net/openjdk/jdk6/promoted/b14/openjdk-6-src-b14-25_nov_2008.tar.gz]
+md5=9f9773a822156dd3d576d83d794364ce
+sha256=1272f975052e51d3faf2d7ac13d0b8b4ac68019a688bffe03d9b684a9e3b4480
+
[http://jalimo.evolvis.org/repository/sources/openjdk-langtools-jdk7-b31.tar.bz2]
md5=670931f67b2e4ac46c6e0cd15418f2fa
sha256=f8b8820e410c137d279d14dec7e7a93217cc371acdfe1b3343b2278d1728932e
@@ -15902,6 +16906,10 @@ sha256=3a80ba2524c66a46db3ac17a788a759015a1f79de6a495fcdf3a316e19fe7c23
md5=e270c40626dfa2131cc39dd1352b46f9
sha256=934e1e5438c46927236f1f3254265e94c7e38e7c0e02d92abb7efc4e03ce91e9
+[http://downloads.sourceforge.net/openrdate/openrdate-1.1.3.tar.gz]
+md5=af4785f615b9d87b9c86a32af4ecc225
+sha256=0f8a034107fc7593f28e77b276f964c1309343b4702ecdf0d61bb3e57ad0cb5f
+
[http://heanet.dl.sourceforge.net/openrdate/openrdate-1.1.3.tar.gz]
md5=af4785f615b9d87b9c86a32af4ecc225
sha256=0f8a034107fc7593f28e77b276f964c1309343b4702ecdf0d61bb3e57ad0cb5f
@@ -16002,6 +17010,10 @@ sha256=347c551e7c88affc1f4b7a4b715080253c9298dcc512ed29fe8ca5cd26d015d9
md5=7401faebc6baee9add32608709c54eec
sha256=063f00d5b889beee910eb113c8cfbb4fc85cd404693494bcaaf79dd09a98335c
+[http://downloads.sourceforge.net/gakusei/openwrt-imagetools-svn-rev7641.tar.bz2]
+md5=7f35543286911b827dcbf8d07a7d72be
+sha256=bad49b59646dbea380cc88be13a77d17c70488b8e11e85f7dd474930fa9cf36a
+
[http://heanet.dl.sourceforge.net/gakusei/openwrt-imagetools-svn-rev7641.tar.bz2]
md5=7f35543286911b827dcbf8d07a7d72be
sha256=bad49b59646dbea380cc88be13a77d17c70488b8e11e85f7dd474930fa9cf36a
@@ -16234,6 +17246,10 @@ sha256=de8bce2b3ae085a973dca4f7208c3cb1ab1fdc9bbcc9e3496ad3d56a4923dba0
md5=9bc57695db5885ffac0a352fc17a7f84
sha256=56dd1cb2364b8c8618f9019b641d17d6b307a5a797f3ac31c16a01247554e10c
+[http://filehost.perforce.com/perforce/r05.2/bin.linuxmips/p4]
+md5=ada4419eca356ab2f784a34b4b0c5e9c
+sha256=c8450262c6b4232b75eb90c61c76bb1c3cfdb790f3827c9a9d49bb77a4e613eb
+
[http://filehost.perforce.com/perforce/r04.2/bin.linuxarm/p4api.tar]
md5=1eb1fb53531e09a03f158957016d55a6
sha256=7d5455c9aa77aea548f3b52f579bf41fff034f0be1c283840b88be401f817792
@@ -16602,6 +17618,18 @@ sha256=31c35db09289c6e0436a258745d7180e0cd8f567949f27b3dab5a57a3664ed2f
md5=4550a418f0480b39e839735a7e0e8d82
sha256=fbb5ee21210a4e4e1fe25941c6e16ec0fe8634817e6c96145128f376ba0c640b
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.28.4.gz]
+md5=464f663266e2c18371e213adab3c0077
+sha256=4862e7bf53553f645d9d730d3657bbec79f7c03482a984259b38e10e25b54382
+
+[http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.29-rc5.bz2]
+md5=60193569887cb6fe98b9c0d483f911e7
+sha256=e5ad0ec9b0facaab5982a0d48534292e6d3a6a3e6dca60e798e8b8eeda2f8a8e
+
+[http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.29-rc6.bz2]
+md5=26f67d99666834cc579094619821d3c8
+sha256=035bbd4c1ac9c5b3a42e58777446e0370ca66d9258dc30a9f4c5ad48ebfacd65
+
[http://www.muru.com/linux/omap/patches/patch-2.6.9-omap1.bz2]
md5=d6249654087f0bcafaa860ac573316a4
sha256=91806347cb386002a8bfd20ee66e536e4a7dfb01f207dd751341f2971090d9ac
@@ -16638,10 +17666,22 @@ sha256=6e3549b8586d8ac3ae8b2251b6cff9065f12a5d648c9c464543988ddb670545b
md5=3aa902cb7a57a4aa09427de603ebf17b
sha256=3d087c88f6e2cc8fde8d2ab12ff2f85ca3ecb2c67754d0483d158f2e5802b015
+[http://dev.gentoo.org/~solar/pax/pax-utils-0.1.13.tar.bz2]
+md5=5f09df47a16e83462384b44b75310539
+sha256=72f3cdad93b5436070dcc63b67764a06c594f324ccc001e8bfb974a8d1a86f36
+
[http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles/pax-utils-0.1.13.tar.bz2]
md5=5f09df47a16e83462384b44b75310539
sha256=72f3cdad93b5436070dcc63b67764a06c594f324ccc001e8bfb974a8d1a86f36
+[http://gentoo.osuosl.org/distfiles/pax-utils-0.1.13.tar.bz2]
+md5=5f09df47a16e83462384b44b75310539
+sha256=72f3cdad93b5436070dcc63b67764a06c594f324ccc001e8bfb974a8d1a86f36
+
+[http://gentoo.osuosl.org/distfiles/pax-utils-0.1.19.tar.bz2]
+md5=98f6b9fe17a740a8cc577255422c6103
+sha256=3918628e9f2508708a1a28f5ed4cb39d07cbd5711747bbb3ddf63816d056c11e
+
[http://the.earth.li/pub/e3/pbltool-0.2.c]
md5=c8fd507f831d2b017dfecf60bc55e28a
sha256=2a1e31d4ae859e530895882273fad0170374a2d5b838bb4558303e59236e9cb6
@@ -16662,6 +17702,10 @@ sha256=8817295a7db11f31837c7c23f49e768131700b2b729d9fc724520d94a8b00f4b
md5=10bab01d3c8856426cdf79f124fd4173
sha256=61fd2a9225aad67d4e21727a297e571ddd6a973b845646cf10b24a92b88467bc
+[ftp://ftp.kernel.org/pub/software/utils/pciutils/pciutils-3.1.2.tar.bz2]
+md5=46387fd7a18c33fbb5311fdb3ab9ea12
+sha256=f66e40b8df5a7b6a93c463b0fb734ea6451c5f0c2cc772f58640b6c7f0d69397
+
[http://downloads.sourceforge.net/pcmanfm/pcmanfm-0.3.0.1.tar.gz]
md5=ac676498175495a37bef0b41bca9ace9
sha256=1f7dec1a275774cb6eff9a491b74bbea7a2276140d640c15ed260c798c8334ed
@@ -16682,6 +17726,10 @@ sha256=f840326e6d6569444adf1d1c5d0fb8e93e7d16f0ef71dca4b1eeefddab8282c5
md5=e735c8effc941912b5253a31d4136417
sha256=601c607115befa22567c7dae3399416787a549daaefcb03820851dcd8d8b4d50
+[http://downloads.sourceforge.net/pcmanfm/pcmanfm-0.5.tar.gz]
+md5=fe1a836eed6a42107e7d71a01a52f7ec
+sha256=87ebb12f012dc948e3c049936a14d757ac304087f662c17fb94e6c27864fe622
+
[http://qa.debian.org/watch/sf.php/pcmanfm/pcmanfm-0.5.tar.gz]
md5=fe1a836eed6a42107e7d71a01a52f7ec
sha256=87ebb12f012dc948e3c049936a14d757ac304087f662c17fb94e6c27864fe622
@@ -16934,6 +17982,14 @@ sha256=25b84792473fa17d118e69b588f32fe940d13a01c3b3db89290ce6516ad01b2e
md5=24a676bf495bec367b2d971cdca1c54c
sha256=2632d931b5732eb1d0de7a2e2d92c75d64412438958ee96dceb4443e4fc2a62f
+[http://alioth.debian.org/frs/download.php/2624/pmount-0.9.18.tar.gz]
+md5=d04973bde34edac7dd2e50bfe8f10700
+sha256=b216936e6e011b58fefee8e3f80d01008cb078b7fe2a5632b2ce98bc7bcb05c2
+
+[http://downloads.sourceforge.net/pmt/pngcrush-1.6.4.tar.gz]
+md5=a329caad3f49ed3ca105e6fd441f5b93
+sha256=22ffea3aed00da9a9518a9c25b619d212bbe27b9ec72165cf74640f930108b2f
+
[http://heanet.dl.sourceforge.net/pmt/pngcrush-1.6.4.tar.gz]
md5=a329caad3f49ed3ca105e6fd441f5b93
sha256=22ffea3aed00da9a9518a9c25b619d212bbe27b9ec72165cf74640f930108b2f
@@ -17062,6 +18118,10 @@ sha256=175be17571e9af3ad622531b494a0738ae632c60c8c6329273778b2b6fbbad74
md5=5988e7aeb0ae4dac8d83561265984cc9
sha256=4e75cb28793f0d44134f71fae53057d5f250805e6268fbd9c9780654b73b0dc1
+[http://rpm.org/releases/historical/rpm-4.1.x/popt-1.7.tar.gz]
+md5=5988e7aeb0ae4dac8d83561265984cc9
+sha256=4e75cb28793f0d44134f71fae53057d5f250805e6268fbd9c9780654b73b0dc1
+
[http://downloads.sourceforge.net/poqetp/poqetp_0.0.6_src.tar.gz]
md5=b003614237445d23b512cb9571565524
sha256=4347a70fe84bd2ccecc90738fb121d28298cf0bfdb4963ceee088c56d3109899
@@ -17118,6 +18178,10 @@ sha256=e8fb4429ecf03809f60b2e194be120a811be1c5cc3cc5d933ede938114357b61
md5=781e16ed4487c4caa082c6fef09ead4f
sha256=e8fb4429ecf03809f60b2e194be120a811be1c5cc3cc5d933ede938114357b61
+[ftp://ftp.us.debian.org/debian/pool/main/p/portmap/portmap_5.orig.tar.gz]
+md5=781e16ed4487c4caa082c6fef09ead4f
+sha256=e8fb4429ecf03809f60b2e194be120a811be1c5cc3cc5d933ede938114357b61
+
[ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.0.20.tar.gz]
md5=92479b64d132262be505a17ec02bc2a8
sha256=78c03b41d75f7402a63a5e5e13f3690005411a85299bc6ec9edbe04888db6d18
@@ -17182,6 +18246,10 @@ sha256=1e0fddb5f53613dd14ab10b25435e88092fed1eff09b4ac4448d5be01f3b0b11
md5=848f6c3cafeb6074ffeb293c3af79b7c
sha256=1e0fddb5f53613dd14ab10b25435e88092fed1eff09b4ac4448d5be01f3b0b11
+[http://downloads.sourceforge.net/sourceforge/pptpclient/pptp-1.7.1.tar.gz]
+md5=b47735ba5d6d37dfdbccb85afc044ede
+sha256=8e3fa9f17c22818eae68419f66966865423206d736eb74d212a3501f62423276
+
[http://heanet.dl.sourceforge.net/sourceforge/pptpclient/pptp-1.7.1.tar.gz]
md5=b47735ba5d6d37dfdbccb85afc044ede
sha256=8e3fa9f17c22818eae68419f66966865423206d736eb74d212a3501f62423276
@@ -17202,6 +18270,10 @@ sha256=4f6fe4eb08ca7a69c83658ab13b23a77aa153ec1a2663596ddcbbf35768b0cee
md5=75d494e881f7027f4e60b114163f6b67
sha256=4f6fe4eb08ca7a69c83658ab13b23a77aa153ec1a2663596ddcbbf35768b0cee
+[http://downloads.sourceforge.net/poptop/pptpd-1.3.4.tar.gz]
+md5=b38df9c431041922c997c1148bedf591
+sha256=c23a9bdd219a0a36ae7ca20e7c9749f2efdcdbf108aabeeeb5066ba442ec88b6
+
[http://heanet.dl.sourceforge.net/poptop/pptpd-1.3.4.tar.gz]
md5=b38df9c431041922c997c1148bedf591
sha256=c23a9bdd219a0a36ae7ca20e7c9749f2efdcdbf108aabeeeb5066ba442ec88b6
@@ -17250,6 +18322,10 @@ sha256=e70697c0c23da6b82b330c7db41537ee00dd770da87c92591682f486ab8d1752
md5=9b01aae72da2bb262f29392597847545
sha256=e70697c0c23da6b82b330c7db41537ee00dd770da87c92591682f486ab8d1752
+[ftp://ftp.us.debian.org/debian/pool/main/p/prelink/prelink_0.0.20061027.orig.tar.gz]
+md5=9b01aae72da2bb262f29392597847545
+sha256=e70697c0c23da6b82b330c7db41537ee00dd770da87c92591682f486ab8d1752
+
[ftp://ftp.debian.org/debian/pool/main/p/prelink/prelink_0.0.20071009.orig.tar.gz]
md5=6617a6681f4e5e3d8ddc48955d73d7ab
sha256=a1c6170e508a3516d0a23963d7fa5cf0a457be431c210096f6b1cecd0731a9f4
@@ -17258,6 +18334,10 @@ sha256=a1c6170e508a3516d0a23963d7fa5cf0a457be431c210096f6b1cecd0731a9f4
md5=6617a6681f4e5e3d8ddc48955d73d7ab
sha256=a1c6170e508a3516d0a23963d7fa5cf0a457be431c210096f6b1cecd0731a9f4
+[ftp://ftp.us.debian.org/debian/pool/main/p/prelink/prelink_0.0.20071009.orig.tar.gz]
+md5=6617a6681f4e5e3d8ddc48955d73d7ab
+sha256=a1c6170e508a3516d0a23963d7fa5cf0a457be431c210096f6b1cecd0731a9f4
+
[http://www.red-bean.com/~proski/firmware/primary.tar.bz2]
md5=0c7c82264602ee2b7ad832d5cd1e1940
sha256=3b5bd68653ff5054586f9fad7ad729bd2d551e76949aec2d14b8a89308393a36
@@ -17318,6 +18398,10 @@ sha256=6d52c706401af197bd9d7e0187c35b4a3463ea720392ffa0c020d94899b361e5
md5=f490bca772b16472962c7b9f23b1e97d
sha256=b439e04adab9b1e66e11f59c4331680da48f1722f2123123f7c16dfbed2c38dc
+[ftp://ftp.nl.uu.net/pub/unix/ftp/proftpd/ftp/distrib/source/proftpd-1.3.2.tar.gz]
+md5=756f762883cc8eed03d99dc3b1c56a8e
+sha256=5e00c20d74bbf98fb8bcc63bd4aecfd08480a87ec731dae8955bd9fca6a01bb3
+
[http://downloads.sourceforge.net/progear/progear-ac-0.1.tar.gz]
md5=60a89c2c907fb5ff2293ce3dfbcdace6
sha256=4124e24726369b42ed0a7aff33e5c572de5e4a0f46edd4e1e81125412c4bdf24
@@ -17402,6 +18486,10 @@ sha256=1ae8b587759b33ad954e717728fab6df58bd28088d0ac8faf22e90253b774975
md5=fa121f8e5dd4b98d65096de1b6c84021
sha256=6cc4aff778275f087cfbd65d2040b1587cafc588749499a452eb496329505ab0
+[http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-0.9.14.tar.gz]
+md5=0ed1115222d1d8c64cc14961cccb2eb0
+sha256=e6129f9239235981d329de40eeffa55041e6815a93aaa994d1eae242ea7446b5
+
[http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-0.9.5.tar.gz]
md5=99b5d9efd4fce35cabb4ae5d0ebb230d
sha256=cd82eabcf9fa310a64b58b621730cebe5d3edae7596a9c121155db455b1e58f6
@@ -17510,6 +18598,10 @@ sha256=dad803c34e902e286a3d6fb052f48b826c62a8ad19a54ced2936da7641b62907
md5=8567328b1ad7609f8851eec57658f1a0
sha256=19c6eeb42f2688464cf4fc7dadecf58faeebfa6a13f05974f6dad910f5fd6b98
+[http://downloads.sourceforge.net/pwgen/pwgen-2.06.tar.gz]
+md5=935aebcbe610fbc9de8125e7b7d71297
+sha256=61598c9e3a0f7eb2e7367d4ecc71522c4f16a7d41ed31db29e3afee8d9843454
+
[http://heanet.dl.sourceforge.net/pwgen/pwgen-2.06.tar.gz]
md5=935aebcbe610fbc9de8125e7b7d71297
sha256=61598c9e3a0f7eb2e7367d4ecc71522c4f16a7d41ed31db29e3afee8d9843454
@@ -17518,6 +18610,10 @@ sha256=61598c9e3a0f7eb2e7367d4ecc71522c4f16a7d41ed31db29e3afee8d9843454
md5=0fa33ba1b32b254abe0b731a52c0f2f9
sha256=62b254548ad7a9e71231a160275827d67ff39022ee8e2854a7c9d9fe9a688e65
+[http://downloads.sourceforge.net/pwsafe/pwsafe-0.2.0.tar.gz]
+md5=4bb36538a2772ecbf1a542bc7d4746c0
+sha256=61e91dc5114fe014a49afabd574eda5ff49b36c81a6d492c03fcb10ba6af47b7
+
[http://heanet.dl.sourceforge.net/pwsafe/pwsafe-0.2.0.tar.gz]
md5=4bb36538a2772ecbf1a542bc7d4746c0
sha256=61e91dc5114fe014a49afabd574eda5ff49b36c81a6d492c03fcb10ba6af47b7
@@ -17654,6 +18750,14 @@ sha256=ab10b00c209e9feaebfff944d411f300ca032d09d3ebb64e3498acf9fea09c6d
md5=e26e77919b606113f565d70036c1f504
sha256=9212afffee727e39ae99406b5a59ab3248556bcfebfae24d8278313678147e32
+[http://cairographics.org/releases/pycairo-1.8.0.tar.gz]
+md5=847f5377c32228a656819f5bd18eb6b4
+sha256=a2272dafceb25ed9fedd0b10429dfec9c412b3b36eb6137f79c87e7d004036d4
+
+[http://downloads.sourceforge.net/pycap/pycap-0.1.6.tar.gz]
+md5=c90bc5382dede1a941e023e7bc27c473
+sha256=961e37f49afeda70d89c21830751548a2ac4912a35122bf70bf29091eef5c4a0
+
[http://heanet.dl.sourceforge.net/pycap/pycap-0.1.6.tar.gz]
md5=c90bc5382dede1a941e023e7bc27c473
sha256=961e37f49afeda70d89c21830751548a2ac4912a35122bf70bf29091eef5c4a0
@@ -17726,6 +18830,10 @@ sha256=1fe008b728923f25d3c8ebd7f28cc538aa0814f3b090df817e25c266fcaecf6a
md5=e65d9245d706350b3db811280d897f30
sha256=3eecd66deecc2de5c31bb91a4b4479232087e80da94e3086e2a686879374cde9
+[http://pypi.python.org/packages/source/p/pyflakes/pyflakes-0.3.0.tar.gz]
+md5=ec7eee3444214bda18e57b82175e1da7
+sha256=019b6d4b549306d013974678872aaf2453af3f02760175504dbe8a9f89db0a2c
+
[http://pyftpdlib.googlecode.com/files/pyftpdlib-0.5.1.tar.gz]
md5=f64ac67ebec1d8ab47c0766082617384
sha256=6daed9475412eaab232e021ed76568c6520dacd75c58da406454139bef95c393
@@ -18066,6 +19174,10 @@ sha256=4756d0b4a4dc7dd88354bc6b37d381e4462dd328d0feef94803e90c0455835a5
md5=2a8219bcb375fac66cea66394c3c36fa
sha256=1e097fdccda0fc914c8229aab7d83964c5944cc95eb053fd69e357dca69461b9
+[http://www.qhull.org/download/qhull-2003.1.tar.gz]
+md5=48228e26422bff85ef1f45df5b6e3314
+sha256=68725c96603a426da748d38d0f83e7a9dd6a0bfc483525debe04001846475b0b
+
[http://www.klografx.net/qiv/download/qiv-1.9-src.tgz]
md5=b368e00543b2b1d9a87b37fd5ba60c57
sha256=7ffeb0b90892d71eff4f26227962f5b306d52a55539f1cb2a72993c8252ca518
@@ -18126,6 +19238,10 @@ sha256=5b070799c3eebf1dd94b1d800da0d532d2e9c353e061d4addc3466232e4a3072
md5=974ff064b13640329da21f565ac351e6
sha256=5b070799c3eebf1dd94b1d800da0d532d2e9c353e061d4addc3466232e4a3072
+[http://downloads.sourceforge.net/qpegps/qpegps_0.9.3.1_src.zip]
+md5=71b270b75bd773b81be3aaa0e4fc88cd
+sha256=f186ef1f117d3a9a9374ac19cfc8daad40a522638e5a758ec79fdd79fac351f4
+
[http://heanet.dl.sourceforge.net/qpegps/qpegps_0.9.3.1_src.zip]
md5=71b270b75bd773b81be3aaa0e4fc88cd
sha256=f186ef1f117d3a9a9374ac19cfc8daad40a522638e5a758ec79fdd79fac351f4
@@ -18510,6 +19626,10 @@ sha256=c0862c53aecd23724a72d32fb54706d61d9858925c78408a2852d042417e68bf
md5=b42cf15f6651c3ceff5cb84996c0d539
sha256=c0862c53aecd23724a72d32fb54706d61d9858925c78408a2852d042417e68bf
+[ftp://ftp.us.debian.org/debian/pool/main/r/reiserfsprogs/reiserfsprogs_3.6.19.orig.tar.gz]
+md5=b42cf15f6651c3ceff5cb84996c0d539
+sha256=c0862c53aecd23724a72d32fb54706d61d9858925c78408a2852d042417e68bf
+
[http://xorg.freedesktop.org/releases/individual/app/rendercheck-1.3.tar.bz2]
md5=eb6a358b79b0aeaf03d56c5e1f394365
sha256=60e83bebab37c2754ae77cc359c0b67e8bc72b46821c7fa260ccc5c811bd741f
@@ -18550,6 +19670,18 @@ sha256=357ae73b048a2a6db46c8b28e0b79bc9448dbae96f52e44b07db7e40895ef2cf
md5=f7cc9a2a30f480be3ecefedea363575c
sha256=357ae73b048a2a6db46c8b28e0b79bc9448dbae96f52e44b07db7e40895ef2cf
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/r/resolvconf/resolvconf_1.41.tar.gz]
+md5=f7cc9a2a30f480be3ecefedea363575c
+sha256=357ae73b048a2a6db46c8b28e0b79bc9448dbae96f52e44b07db7e40895ef2cf
+
+[ftp://ftp.debian.org/debian/pool/main/r/resolvconf/resolvconf_1.43.tar.gz]
+md5=15faef2aba7b99782f3b0b8b5d30f80a
+sha256=17e1105cddd928adf7d47e050f9bb49557850687f800b3e24cbbf22933ff31ae
+
+[ftp://ftp.us.debian.org/debian/pool/main/r/resolvconf/resolvconf_1.43.tar.gz]
+md5=15faef2aba7b99782f3b0b8b5d30f80a
+sha256=17e1105cddd928adf7d47e050f9bb49557850687f800b3e24cbbf22933ff31ae
+
[http://xlibs.freedesktop.org/release/resourceext-1.0.tar.bz2]
md5=007713326ca5f1adfd39f3cb587c3b9b
sha256=78e0a532bb84d6d85e90244bf3bb0ee9a5246545ebc9b677173e37e231d30cdc
@@ -18586,6 +19718,10 @@ sha256=24ee0f94226879038fe1d117c251900400376e942b4c82368d46f9466bb57243
md5=61b724a4e1a48d0735fb18d4f68c0506
sha256=13cce714959056d41627ec9442342d46072f9d72ef57554b9d03ebfb353ed2d1
+[ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R1.zip]
+md5=613eed8201d37be201805e5048ebb0c3
+sha256=084e250d2392369b2548b663e61bcf128baecb2f527e381e9ba89f0148db2c0d
+
[http://ftp.gnome.org/pub/GNOME/sources/rhythmbox/0.8/rhythmbox-0.8.5.tar.gz]
md5=5ac4e1b5ff4f2fdada81c007ac599cb9
sha256=654d6b190f4644d82c10b4ce5645b72405c2e78ea346ce3d8eb385fc3f3732de
@@ -18642,6 +19778,10 @@ sha256=a8168b8884ab40aadebba0ba696b889e25020d32a88e646d4f4bc56f2236b184
md5=63f39118ea5ef7cda84a0638002ed6d2
sha256=27ffe0392ae193eb04786a2159c099a00fe38ccdaebcebd72afc842c528bb6d3
+[http://www.freebsd.org/cgi/cvsweb.cgi/%7Echeckout%7E/ports/archivers/rpm2cpio/files/rpm2cpio?rev=1.2]
+md5=07f64fa3dae6eb8b1b578d01473a5c07
+sha256=a98cb1d9903192c4fcf40d82c705e091a5c193f87327703217749a5f4cc6197d
+
[http://downloads.sourceforge.net/rpyc/rpyc-3.02.tar.gz]
md5=4e855372c4a533b9ed605503156e6e04
sha256=3dbd653b27fc855bf86dfe0ac06ed9bf59c8b85c9bcb4b5488528b30c59970f4
@@ -18706,6 +19846,10 @@ sha256=d7d5a3d17f492049fceb2b9ea22c4c2af7243506219d83f7005b77ae410add29
md5=f8ed2d3f781e08dcabffc3f8099620ca
sha256=1215fd1b84944c8f945eb96ebd09e82ac756213123f5e00c4569f2d730412b00
+[http://www.kernel.org/pub/linux/kernel/people/tglx/rt-tests/rt-tests-0.28.tar.bz2]
+md5=761c3e9fab16290c10ab9421182d16e7
+sha256=48e5a43c03f42524dd91873d649a0b8a287debd727da993ab256dc4e839b0cee
+
[http://downloads.sourceforge.net/rt2400/rt2570-1.1.0-b2.tar.gz]
md5=f4131d670920a878b4d4a0f5d4d8b93a
sha256=a677291149687339396fed06c46cc08fd76fcb62d0f4459cae02c6cf54b4eb39
@@ -18814,10 +19958,18 @@ sha256=564d375388284d7f13003202cba9fc1976b045bd14b3f12adec1449cded33f26
md5=946368c1a4961ac0362436e967055f76
sha256=16554de4368956c1d3e1be4245d388bff4767390f2183bfe35b04327def508a5
+[http://downloads.sourceforge.net/sablevm/sablevm-1.12.tar.gz]
+md5=6648af9bb5dd3dbbc8cb6835371f5ecd
+sha256=576c1af8affdebb0d5e10f8a8edad10e994965cef6db7980a3c52e25e15d6b94
+
[http://heanet.dl.sourceforge.net/sablevm/sablevm-1.12.tar.gz]
md5=6648af9bb5dd3dbbc8cb6835371f5ecd
sha256=576c1af8affdebb0d5e10f8a8edad10e994965cef6db7980a3c52e25e15d6b94
+[http://downloads.sourceforge.net/sablevm/sablevm-classpath-1.12.tar.gz]
+md5=938602a0648660f13357115b6f1fbd60
+sha256=3e7b039a188ce5b2f74c86309936e193ea5d5eefcbdcaa92b38bc3f7e1e9fec4
+
[http://heanet.dl.sourceforge.net/sablevm/sablevm-classpath-1.12.tar.gz]
md5=938602a0648660f13357115b6f1fbd60
sha256=3e7b039a188ce5b2f74c86309936e193ea5d5eefcbdcaa92b38bc3f7e1e9fec4
@@ -18882,6 +20034,10 @@ sha256=22647c6bdd0f1b311bd0e3a893fb184f07d0f5e1c4b3bccd20a024fe18fd7567
md5=528677f261f3ed4a58f9483ca25ba6b2
sha256=4f2bb8c5785c50ad05d3adc0027c0881211b8a5c51e840651b53b7e455c004a3
+[http://samba.org/samba/ftp/stable/samba-3.2.8.tar.gz]
+md5=06efd6e6cc4aac628a1a0b082e4be0f2
+sha256=7e7fb53d6ff05993dcb8b871e3c3016bd4d161d72ded8f8760a4439e9d76aa3b
+
[http://samba.org/samba/ftp/stable/samba-3.3.0.tar.gz]
md5=adb048dc3988055533e1ea5d91d81f99
sha256=b00ca360e9b414744eff33ca4567f3eb1a28d32914e20f00b6672fbc141c9beb
@@ -19006,6 +20162,10 @@ sha256=2468f134a2a384eec8d154c7f8bdb9212c2601036aeec29bb38fdeaad3b14912
md5=ed68ea9b43d9fba0972cb017a24940a1
sha256=05d087656d232b38c82379dfc66bf526d08e75e1f4c626acea4a2dda1ebcc845
+[ftp://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz]
+md5=8506fd205028a96c741e4037de6e3c42
+sha256=78f0d5b1496084a5902586304d4a73954b2bfe33ea13edceecf21615c39e6c77
+
[ftp://ftp.debian.org/debian/pool/main/s/screen/screen_4.0.2-4.1.diff.gz]
md5=8f8725fa9b3385042115e84a06866ce6
sha256=c426660739a93f94364de29cde222f7c3621364d9843b52c91735ba8b6a81c62
@@ -19022,6 +20182,10 @@ sha256=2a19694b9825ec13349adac691933a8f890117ef566a9cd58a9e439030a96a3a
md5=659bf15bbbb31817ebad9372c8827618
sha256=2a19694b9825ec13349adac691933a8f890117ef566a9cd58a9e439030a96a3a
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/s/screen/screen_4.0.2-4.1sarge1.diff.gz]
+md5=659bf15bbbb31817ebad9372c8827618
+sha256=2a19694b9825ec13349adac691933a8f890117ef566a9cd58a9e439030a96a3a
+
[http://xorg.freedesktop.org/releases/individual/app/scripts-1.0.1.tar.bz2]
md5=08c7f078fc351196c21db3a8206d482d
sha256=1b154b4359302ca499818c45396325aef9ff364d6ff4ce5c3769e4803994a136
@@ -19062,6 +20226,10 @@ sha256=ac22ad70ad6f88c7c8450bc06ba38602331c7470abcafb9e7fe62bfb505b1a3b
md5=efc4207a7f10b24e9fc5afa10ed9c455
sha256=ac22ad70ad6f88c7c8450bc06ba38602331c7470abcafb9e7fe62bfb505b1a3b
+[http://downloads.sourceforge.net/scummvm/scummvm-0.6.1b.tar.bz2]
+md5=143dd7cfe0995922c49e1f8a6cdf2055
+sha256=29007f54d9e5a37a3da9f51670de7828dde9a3559beddbdd5c2f59796fb220f6
+
[http://heanet.dl.sourceforge.net/scummvm/scummvm-0.6.1b.tar.bz2]
md5=143dd7cfe0995922c49e1f8a6cdf2055
sha256=29007f54d9e5a37a3da9f51670de7828dde9a3559beddbdd5c2f59796fb220f6
@@ -19070,6 +20238,10 @@ sha256=29007f54d9e5a37a3da9f51670de7828dde9a3559beddbdd5c2f59796fb220f6
md5=143dd7cfe0995922c49e1f8a6cdf2055
sha256=29007f54d9e5a37a3da9f51670de7828dde9a3559beddbdd5c2f59796fb220f6
+[http://downloads.sourceforge.net/scummvm/scummvm-0.9.0.tar.bz2]
+md5=5eede9c97d1883f80770a3e211419783
+sha256=5824f67aa37b00fc8b92ac4fcc413a9a7d868174dcd6df580c4d706807e4545e
+
[http://heanet.dl.sourceforge.net/scummvm/scummvm-0.9.0.tar.bz2]
md5=5eede9c97d1883f80770a3e211419783
sha256=5824f67aa37b00fc8b92ac4fcc413a9a7d868174dcd6df580c4d706807e4545e
@@ -19094,6 +20266,10 @@ sha256=fca3763b05f064728c9ff248fa0766808d1ceae561b88ad202811924e4ccdb45
md5=4c9fb66fa496cf32542e92f32f821818
sha256=fca3763b05f064728c9ff248fa0766808d1ceae561b88ad202811924e4ccdb45
+[ftp://ftp.us.debian.org/debian/pool/main/s/scw/scw_0.4.3.orig.tar.gz]
+md5=4c9fb66fa496cf32542e92f32f821818
+sha256=fca3763b05f064728c9ff248fa0766808d1ceae561b88ad202811924e4ccdb45
+
[http://downloads.sourceforge.net/sdcc/sdcc-2.5.0.tar.gz]
md5=c572e7842fe36348f5b2972c1025a75a
sha256=138d2e59569f76f1a5d35bd5d85e7006eeebc4f48cd3dac902e2824ed50c3d80
@@ -19194,6 +20370,10 @@ sha256=827940306b30e3d92805052b31e8bff2f326fca7574b162260ca5386027091c1
md5=acc0266534c5dc13ad1153ec890c1b8d
sha256=ee8b74fc74229b76c95d1d3360a5540239e77f32d100f8c3ed318e76fd19e09b
+[http://www.vanheusden.com/setpwc/setpwc-1.2.tgz]
+md5=1bc721cdfcbac24027e2afc93685d29f
+sha256=855dcf73bda36e6445119f0b1b0a63464ba237d82794f115912464f8aebc5ed1
+
[http://downloads.sourceforge.net/setserial/setserial-2.17.tar.gz]
md5=c4867d72c41564318e0107745eb7a0f2
sha256=7e4487d320ac31558563424189435d396ddf77953bb23111a17a3d1487b5794a
@@ -19242,6 +20422,14 @@ sha256=4d710b17c5440518b43d3d1f7cbcb78a62c72f25e48a1b385a0ae3872ec8b40b
md5=350180a6e4132a2b1262c7a15162c007
sha256=4323581ddb6150677a36bcb87e3960100a7ea7c80906f0c7b7a27d1e43b055d9
+[ftp://ftp.debian.org/debian/pool/main/s/sg3-utils/sg3-utils_1.24.orig.tar.gz]
+md5=9e1b8811b013d8f97d8ea2e0942cebad
+sha256=0a06dae84a8f7f464c0c29c78a8f73f24a62894a2d3fc10b5f74a993f7b5abfe
+
+[ftp://ftp.us.debian.org/debian/pool/main/s/sg3-utils/sg3-utils_1.24.orig.tar.gz]
+md5=9e1b8811b013d8f97d8ea2e0942cebad
+sha256=0a06dae84a8f7f464c0c29c78a8f73f24a62894a2d3fc10b5f74a993f7b5abfe
+
[ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/sgml-common-0.6.3.tgz]
md5=103c9828f24820df86e55e7862e28974
sha256=7dc418c1d361123ffc5e45d61f1b97257940a8eb35d0bfbbc493381cc5b1f959
@@ -19370,6 +20558,10 @@ sha256=928fa03d1b8a2329f5e71dd9190080146b5275119e28c19c36fdd57e788d84ba
md5=9cabe6a0f61b73582cfc38b903576211
sha256=928fa03d1b8a2329f5e71dd9190080146b5275119e28c19c36fdd57e788d84ba
+[http://www.riverbankcomputing.co.uk/static/Downloads/sip4/sip-4.7.9.tar.gz]
+md5=597d7ff7edb42a18421c806ffd18a136
+sha256=7faaccb6f17296399051bd076a7f41e0f6d95a28eda3e30468f1bd7cf45898e1
+
[http://www.riverbankcomputing.com/static/Downloads/sip4/sip-4.7.9.tar.gz]
md5=597d7ff7edb42a18421c806ffd18a136
sha256=7faaccb6f17296399051bd076a7f41e0f6d95a28eda3e30468f1bd7cf45898e1
@@ -19498,6 +20690,10 @@ sha256=328531d0f522a207a9721223c92b823643af5c82e5958fc5e9c945ea36ddafd6
md5=09d027ee9817cc1a1b8c0e96271bade4
sha256=328531d0f522a207a9721223c92b823643af5c82e5958fc5e9c945ea36ddafd6
+[http://downloads.sourceforge.net/sofia-sip/sofia-sip-1.12.7.tar.gz]
+md5=c6d7c4c6318fe1ac661862062aad241a
+sha256=86a9522f4ccb17c3b86916784e1de1dce5fe72df6dab06db91f73c2cd3ab96f4
+
[http://heanet.dl.sourceforge.net/sofia-sip/sofia-sip-1.12.7.tar.gz]
md5=c6d7c4c6318fe1ac661862062aad241a
sha256=86a9522f4ccb17c3b86916784e1de1dce5fe72df6dab06db91f73c2cd3ab96f4
@@ -19558,6 +20754,10 @@ sha256=b652bc27f95dcf10a7626b1d2943a1084e1e0b7f9bd3a97f9a46b6688370fe4b
md5=3f2c1e3c1b09e09cff1b94e334247221
sha256=ddad6c18d9fbcbcd50452b3d432e6028e7703fb68c68612b28bf879a7c3fdb4c
+[http://www.codemonkey.org.uk/projects/git-snapshots/sparse/sparse-2009-03-02.tar.gz]
+md5=14bf874b362799222c3250ca87b1ce55
+sha256=9b49c0a659d1fc8eec85c04eb1c6a0da90f2cbaa241c43817ff9e85213782123
+
[http://mxhaard.free.fr/spca50x/Download/spca5xx-20060501.tar.gz]
md5=8fcec25715aea10f9ebec5728c37e752
sha256=b8049142742cc81bc945aadefb40d173aeb447e428ec62a93e781032ea9b40c2
@@ -19718,6 +20918,10 @@ sha256=ec3159feae5324e78f7fc09f8f534bd6a3e7ed735144ee8a8e9e7871e77115e0
md5=c252e5286b142afa54ca49829c51a33f
sha256=ec3159feae5324e78f7fc09f8f534bd6a3e7ed735144ee8a8e9e7871e77115e0
+[http://downloads.sourceforge.net/squashfs/squashfs3.3.tgz]
+md5=95c40fca0d886893631b5de14a0af25b
+sha256=8423027a1e7dc238d27ec227f47ce22d1317b4c9a0a9ee49a38b6e6f8da8a5c8
+
[http://heanet.dl.sourceforge.net/squashfs/squashfs3.3.tgz]
md5=95c40fca0d886893631b5de14a0af25b
sha256=8423027a1e7dc238d27ec227f47ce22d1317b4c9a0a9ee49a38b6e6f8da8a5c8
@@ -19742,6 +20946,10 @@ sha256=057626d78e5ade840568ab0e171a1d1ae87348ab51bf9e35d1cdc074fc4e2edb
md5=3c575cf89a6d3d8ab6063c2f60bd5b25
sha256=057626d78e5ade840568ab0e171a1d1ae87348ab51bf9e35d1cdc074fc4e2edb
+[http://downloads.sourceforge.net/fuse/sshfs-fuse-2.2.tar.gz]
+md5=26e9206eb5169e87e6f95f54bc005a4f
+sha256=206ebcbc4cb9f5039bfcc7059678a0f61120605a5cdcbffa3ae5716c113e5423
+
[ftp://ftp.debian.org/debian/pool/main/s/ssmtp/ssmtp_2.61.orig.tar.gz]
md5=957e6fff08625fe34f4fc33d0925bbc9
sha256=2151ad18cb73f9a254f796dde2b48be7318b45410b59fedbb258db5a41044fb5
@@ -19750,6 +20958,10 @@ sha256=2151ad18cb73f9a254f796dde2b48be7318b45410b59fedbb258db5a41044fb5
md5=957e6fff08625fe34f4fc33d0925bbc9
sha256=2151ad18cb73f9a254f796dde2b48be7318b45410b59fedbb258db5a41044fb5
+[ftp://ftp.us.debian.org/debian/pool/main/s/ssmtp/ssmtp_2.61.orig.tar.gz]
+md5=957e6fff08625fe34f4fc33d0925bbc9
+sha256=2151ad18cb73f9a254f796dde2b48be7318b45410b59fedbb258db5a41044fb5
+
[http://www.kegel.com/crosstool/crosstool-0.43/patches/binutils-2.16.1/stabs-tweak.patch]
md5=404d3f5e5adfd757dd91e58bd66ed10e
sha256=393d1f60ee4e3b4ce8138481e17da02ca2f23e06887a0650be2f5ecf85628844
@@ -19866,6 +21078,10 @@ sha256=3f753cd91828808ecbdeffd1fe3125eccc6f71ecad7756115acc08b3e2c764dc
md5=d693ff044ac7d34f8aaea202cd96f679
sha256=778126fdcc3ecb54d4a8dad6164001603bcc3b79ba64b3c2c5285275bc0cbedf
+[http://downloads.sourceforge.net/strigi/strigi-0.5.10.tar.bz2]
+md5=cfaa2114ea27f2a00e6773c374e98ec4
+sha256=3851f803de3759490073c1d682d018592b010437b9ac2b85394eaddc63621faf
+
[http://heanet.dl.sourceforge.net/strigi/strigi-0.5.10.tar.bz2]
md5=cfaa2114ea27f2a00e6773c374e98ec4
sha256=3851f803de3759490073c1d682d018592b010437b9ac2b85394eaddc63621faf
@@ -19898,6 +21114,10 @@ sha256=8260a2d3a67c5cebc100e7662f81679582c0f05a2a28260e235bdf051e72aee3
md5=4c333a5fe827568c67d195cda7a5e154
sha256=763b8c9c16c03adc3ad00ccf1b5b47a08b5ffe94e499d3c87bb02acbc1026b53
+[http://subversion.tigris.org/downloads/subversion-1.5.5.tar.bz2]
+md5=6f3701a0f2acf3fe53093491ba3d77ee
+sha256=88cf24ba5d589351791709ff7556ababc019ec59f3240ac2087dacabb9ad77be
+
[http://ftp.sudo.ws/sudo/dist/sudo-1.6.8p12.tar.gz]
md5=b29893c06192df6230dd5f340f3badf5
sha256=56f7d86032538a4a98d90af3742903a09ba16d6db82b593e4a47605f87fa581a
@@ -19966,6 +21186,10 @@ sha256=8f2275d9667909d3418213522d5d4ef3312c158190429062f79da6b982b9ce6b
md5=7c10acf574f09ae5cb9eb2a4b9bf93ff
sha256=8f2275d9667909d3418213522d5d4ef3312c158190429062f79da6b982b9ce6b
+[http://downloads.sourceforge.net/super-tux/supertux-0.1.3.tar.bz2]
+md5=f2fc288459f33d5cd8f645fbca737a63
+sha256=0092588351776626955339caaa62d12ce5954bb80c5f6952f60a122f53c2ad97
+
[http://heanet.dl.sourceforge.net/super-tux/supertux-0.1.3.tar.bz2]
md5=f2fc288459f33d5cd8f645fbca737a63
sha256=0092588351776626955339caaa62d12ce5954bb80c5f6952f60a122f53c2ad97
@@ -20010,6 +21234,10 @@ sha256=c2ad63095e34b4a474e7ff4adb6ea8b7ab238bb5738d00a739102bb8bb71d805
md5=4a0bae63e3713e89b26db7209b6a7e05
sha256=c2ad63095e34b4a474e7ff4adb6ea8b7ab238bb5738d00a739102bb8bb71d805
+[http://downloads.sourceforge.net/swig/swig-1.3.38.tar.gz]
+md5=650c774917be49c526a4f8a3e733c898
+sha256=e7cbddc8c68b1eccba1c82edd5427595397d9a483c8fb1184abc9303afe08045
+
[http://crosswire.org/ftpmirror/pub/sword/source/v1.5/sword-1.5.10.tar.gz]
md5=4c920f2a3ee72040df8a8e105ad840df
sha256=5fb3f030e9395e23a48c02bde6bc81ad42b1c4056a011d9ee15c4c85110eb847
@@ -20162,6 +21390,10 @@ sha256=34ff6a85d1dae64d06b5aca04fb17822dd26a734f40cd966e3dd980afa4a037a
md5=cc5d4130b25bb8a1c930488b78930e9b
sha256=34ff6a85d1dae64d06b5aca04fb17822dd26a734f40cd966e3dd980afa4a037a
+[ftp://ftp.us.debian.org/debian/pool/main/t/t1lib/t1lib_5.0.2.orig.tar.gz]
+md5=cc5d4130b25bb8a1c930488b78930e9b
+sha256=34ff6a85d1dae64d06b5aca04fb17822dd26a734f40cd966e3dd980afa4a037a
+
[http://repository.maemo.org/pool/maemo4.1/free/t/tablet-browser-interface/tablet-browser-interface_0.0.5-1.tar.gz]
md5=930b83fa92154a2abb3d711b9e3af87a
sha256=199fcaa5bc5b0b56537d43c522a9f0d839e61d7ffc58438da56574f642159519
@@ -20170,6 +21402,10 @@ sha256=199fcaa5bc5b0b56537d43c522a9f0d839e61d7ffc58438da56574f642159519
md5=dcd50ddb2544faeae77f194804559404
sha256=0ff805bb8dbf72a45d347f2310f7e5c86e2e7419a069d546e53cf5f221c196ab
+[http://developer.kde.org/~wheeler/files/src/taglib-1.5.tar.gz]
+md5=7b557dde7425c6deb7bbedd65b4f2717
+sha256=ba610716ec539d4858133e008d079728953820c583b200ff0936e36fc0550ec2
+
[http://tango-project.org/releases/tango-icon-theme-0.7.2.tar.gz]
md5=eace48f8340a95d7134632bad6287100
sha256=6b368373f9a01f3f33f77ac25c170cbd052b29d6910f72308e55dc0a39af7722
@@ -20270,6 +21506,10 @@ sha256=d701a3e4d7ab296fecdd6f8f84610a3c6d275839f9db4269b1ff7db3e0a9c0e5
md5=2aacf4dc9a3bc500a8b4f3887a32cdd5
sha256=09f1daece22a3555f1ca1f9779caf36357cc8d5b9ad1964606093c7e884e0da4
+[http://www.tcpdump.org/release/tcpdump-4.0.0.tar.gz]
+md5=b22ca72890df2301d922c9f2d17867f9
+sha256=5fe99efe0274b5764c9974417c96a38b5f94e21096d8a94cc1fa172a42035284
+
[http://downloads.sourceforge.net/tcpick/tcpick-0.1.22.tar.gz]
md5=77b991a686e83cb716fd241aaa6ea432
sha256=db19142fd2ca6218ead04fb3144b1640e2ad5a1c784a4e790c8816a37a79ac2e
@@ -20286,6 +21526,10 @@ sha256=08ce9b24ab7b6ad45ac7f668eccfb7007ef182406f7db0b7e455decfb0b49bec
md5=f27e025d9e69f36a7d8b679c047daba1
sha256=2bfbdd6df159c815b392cd99146df5a450c1a8ffab30a13fd34bced8ee33cda0
+[http://downloads.sourceforge.net/tea-editor/tea-17.3.5.tar.bz2]
+md5=c28db354576aaec2152970b06d534640
+sha256=a7147079740acef2df0d2caab164062b12806d988216aa03667198d1100f5eb2
+
[http://heanet.dl.sourceforge.net/tea-editor/tea-17.3.5.tar.bz2]
md5=c28db354576aaec2152970b06d534640
sha256=a7147079740acef2df0d2caab164062b12806d988216aa03667198d1100f5eb2
@@ -20334,14 +21578,26 @@ sha256=49dca0428d69f43c856800967b2def8c890cd322fbdd0aa47c227aec5820a690
md5=21bfda9e1fa12e25b4173deb9ffd0b5d
sha256=3ed0cb5dd687e4d9fa838a318f9ef12a8c221894ff188687c27625f0ac3bce82
+[http://downloads.sourceforge.net/tapioca-voip/telepathy-inspector-0.5.0.tar.gz]
+md5=7fe5810c15edacb0d9c5590d3767f8f0
+sha256=16ff39f1d80e6898d0c58e634211254833e6067bd55bc3b4eefabf53cbe6844d
+
[http://heanet.dl.sourceforge.net/tapioca-voip/telepathy-inspector-0.5.0.tar.gz]
md5=7fe5810c15edacb0d9c5590d3767f8f0
sha256=16ff39f1d80e6898d0c58e634211254833e6067bd55bc3b4eefabf53cbe6844d
+[http://downloads.sourceforge.net/mission-control/telepathy-mission-control-4.21.tar.gz]
+md5=2ad61079a79b0426c81593ad69f56ada
+sha256=0b98c93fc64409aae43d8f2941784f8f11639ad68b67320417554fa471a86508
+
[http://heanet.dl.sourceforge.net/mission-control/telepathy-mission-control-4.21.tar.gz]
md5=2ad61079a79b0426c81593ad69f56ada
sha256=0b98c93fc64409aae43d8f2941784f8f11639ad68b67320417554fa471a86508
+[http://downloads.sourceforge.net/mission-control/telepathy-mission-control-4.22.tar.gz]
+md5=aa8a8264c596c666f886f85356b56e09
+sha256=a36371f8f9d86cb767e4ea84ed378d6546750843d4b1c0d57f7e53153e8da51b
+
[http://heanet.dl.sourceforge.net/mission-control/telepathy-mission-control-4.22.tar.gz]
md5=aa8a8264c596c666f886f85356b56e09
sha256=a36371f8f9d86cb767e4ea84ed378d6546750843d4b1c0d57f7e53153e8da51b
@@ -20350,6 +21606,10 @@ sha256=a36371f8f9d86cb767e4ea84ed378d6546750843d4b1c0d57f7e53153e8da51b
md5=75c59f2c0f990326fc1b66c0bc762c43
sha256=926a8c047bd43a1fc21539c2ec5b9bf00426083ffe18c2db8c44964b80286b6a
+[http://downloads.sourceforge.net/mission-control/telepathy-mission-control-4.45.tar.gz]
+md5=b7810e1a53579bc496796538aefcc014
+sha256=cb5565a66fb233d7c0b9418bcef53fe330c8a5a0f904a9a04de087ad0b4d0be9
+
[http://heanet.dl.sourceforge.net/mission-control/telepathy-mission-control-4.45.tar.gz]
md5=b7810e1a53579bc496796538aefcc014
sha256=cb5565a66fb233d7c0b9418bcef53fe330c8a5a0f904a9a04de087ad0b4d0be9
@@ -20422,6 +21682,10 @@ sha256=9c0f7eaeb5ba6dc6f66433404d264941bf95cded2fa798b1f7a9dd580c21649b
md5=ed9d30d9162d16ac8d5065cde6e0f6fa
sha256=6c3b8fa619749cbb28ca0f8847e56773d13e0bb92f1ea34287420950373640c2
+[http://www.wias-berlin.de/people/si/tetgen1.4.2.tar.gz]
+md5=59c92b223f69cc7e50ae6cd9d1539db1
+sha256=38f24694983f20e5bffa2ebc1d35a7c3abea50479a6df6449cc900bf2732891d
+
[ftp://ftp.gnu.org/gnu/texinfo/texinfo-4.8a.tar.bz2]
md5=0f429f87de9f20d6c0d952e63bf8e3fa
sha256=efcda677be7ef093757d965736dff3b5af8c9fd36b3e7d3db09289a4a1d5d013
@@ -20570,6 +21834,10 @@ sha256=794687ae1b34aba9a3cf6f9b118d0ba91b8f83858fe92a9ded0611225db3ca0e
md5=2f9ef4509198e96bb184577fdddfce6d
sha256=794687ae1b34aba9a3cf6f9b118d0ba91b8f83858fe92a9ded0611225db3ca0e
+[http://downloads.sourceforge.net/tnef/tnef-1.4.5.tar.gz]
+md5=ec46d47525c6afb928642e3edec21058
+sha256=42067fbc00d1ad4bcbb67440d61869aa43ed2d3d099fc691d3da8ad4296fa6b1
+
[http://tofrodos.sourceforge.net/download/tofrodos-1.7.8.tar.gz]
md5=aaa044f9817a048e126d9eb7a7535e96
sha256=e1d78226c5b54c0ce8e1c7de8bdd025aec6bf684960d5cee28310cf8dce48bb9
@@ -20734,6 +22002,10 @@ sha256=4746c04c9a4ad9e0788a38e0a2f81919a630d8070ceabc89f156b6d41d8ceb37
md5=4c3e6ae586be277537ebb68f2a45b883
sha256=4746c04c9a4ad9e0788a38e0a2f81919a630d8070ceabc89f156b6d41d8ceb37
+[ftp://ftp.us.debian.org/debian/pool/main/t/ttf-gentium/ttf-gentium_1.02.orig.tar.gz]
+md5=4c3e6ae586be277537ebb68f2a45b883
+sha256=4746c04c9a4ad9e0788a38e0a2f81919a630d8070ceabc89f156b6d41d8ceb37
+
[http://www.bedroomlan.org/~alexios/files/SOFTWARE/ttyconv/ttyconv_0.2.3.tar.gz]
md5=7997ba54401a7685290a6666b9d28585
sha256=d91b4addcbb241b04b6cf795447163ed890a436b10205d2cd9cc1885ea3d9433
@@ -20746,10 +22018,18 @@ sha256=ef5e9bf276b65bb831f9c2554cd8784bd5b4ee65353808f82b7e2aef851587ec
md5=3aa0e0e488719611f0bc4441b63a6f56
sha256=f3aae7e2f67cf12f3da98325388c7b2f6718729aa69c5c804d1866d6a49f8592
+[http://alioth.debian.org/frs/download.php/2733/tuxmath_w_fonts-1.7.1.tar.gz]
+md5=4ab3d5bd74adb0d0aeacb721b8cac395
+sha256=d0aebfb352add3ada95537aeef163019f93d5a0f9385a2fcae678125b77d5035
+
[http://heanet.dl.sourceforge.net/sourceforge/tuxnes/tuxnes-0.75.tar.gz]
md5=5db0cd42dfdff3e681805e93b4867c43
sha256=217fc57fdd2a5ec360c197ea36110ec929d3f27c88cf875f0f4723b3496ed7c2
+[http://alioth.debian.org/frs/download.php/2767/tuxtype_w_fonts-1.7.3.tar.gz]
+md5=9b76e5ebb3daf3d93545dc561229e2a5
+sha256=1834524115d9b4ab49552dd078f56febd618deae88e064260744721e35fe60f6
+
[http://linuz.sns.it/~max/twin/twin-0.4.6.tar.gz]
md5=92429bb5550a4c231085585a3473bf4d
sha256=67c4b7677469040b4fc37c084bc4f1ef4c365477e79862c3dc7c256c9f9257c2
@@ -20790,6 +22070,10 @@ sha256=d9be06167a3a882e39abed547037f1404935fa80410022af455060a1ba9c8bbb
md5=1f1de10e168b78681756cc6411ea8145
sha256=1e5630747b12d82e106ff52173f890fe1975e2e72768872db8c64de9eace33d4
+[http://bent.latency.net/bent/darcs/zoneinfo-2007k/src/tzcode2007k.tar.gz]
+md5=1f1de10e168b78681756cc6411ea8145
+sha256=1e5630747b12d82e106ff52173f890fe1975e2e72768872db8c64de9eace33d4
+
[ftp://elsie.nci.nih.gov/pub/tzdata2007e.tar.gz]
md5=b74e5f71714e5222340f1fb30da30a76
sha256=51d14a60ea12aa901bf91e5d39ea30c13ffdc299640e8ec9cb0d35a128874767
@@ -20806,6 +22090,10 @@ sha256=70bb254ae0da44d71f6d0932ffe34f61457bf41c38dfd389a7bf5bfb544a362b
md5=595b3b197174fa0c2dd654c52969fb2a
sha256=37e986086ce1a1ccb9a4f24c2b77ede54f0eae2ee9959e7a191a49cedb405783
+[http://bent.latency.net/bent/darcs/zoneinfo-2007k/src/tzdata2007k.tar.gz]
+md5=595b3b197174fa0c2dd654c52969fb2a
+sha256=37e986086ce1a1ccb9a4f24c2b77ede54f0eae2ee9959e7a191a49cedb405783
+
[ftp://elsie.nci.nih.gov/pub/tzdata2008b.tar.gz]
md5=dbeb9a327bbff77ab4078488b8c5323a
sha256=633d76612d73a7add41a3b90fe5721ea5f4282d52bd8408b9d4fab261443aa6c
@@ -20878,6 +22166,10 @@ sha256=c8bc5383eafaa299e9874ae50acc6549f8b54bc29ed64a9a3387b3e4cd7f4bcb
md5=61dc55f43b17a38a074f347e74095b20
sha256=ca70501ae859cd86b387bb196908838275b4b06e6f4d692f9aa51b8a633334a7
+[http://www.uclibc.org/downloads/uClibc-0.9.30.1.tar.bz2]
+md5=1a4b84e5536ad8170563ffa88c34679c
+sha256=2d9769a02c46cff73f56a076268192da1ce91c913e2e4e31c120be098f704c8c
+
[http://www.uclibc.org/downloads/uClibc-0.9.30.tar.bz2]
md5=e5766e2566e0297adebebbcc0aba1f2d
sha256=67e7e6b983cd2caa163f177d5196282434ae1e18b7270495cd6c65f5c1549555
@@ -20942,6 +22234,10 @@ sha256=4467f57484124b735450e05617c2aa0f75e0e56306e92c74f9dfe59bd028fcd9
md5=2ea9229208154229c5d6df6222f74ad7
sha256=cc9f58ff58fbd3f5868e1f1e368e3c93e1f441afd0ac1dcbd5d01a9ce5b5b0d7
+[http://kernel.org/pub/linux/utils/kernel/hotplug/udev-137.tar.gz]
+md5=a3fcdcd21b2f33d598f45a68fff892bd
+sha256=ee3922bd46dbdc406be5d498be5bc062a0b39f05f1c0a1b22c3657eb0e805975
+
[http://udhcp.busybox.net/source/udhcp-0.9.8.tar.gz]
md5=2d7e548820d2ded5e183933cb701defb
sha256=da0ca1e821e3fa7cfbe73ddb1480b921002ee992f5e5fbc611422c103b907443
@@ -20978,6 +22274,10 @@ sha256=0ecaf4e174c5b8eb3c1225cc60917404e14ad613f57fd2ca290d31548f089bcf
md5=cea56d3a1a7e4f1a4d12697330c4526b
sha256=00f40bf3c8e4ed3ca169ec54352fc7499d443e443d91b7460997ddca5448905e
+[http://downloads.sourceforge.net/ulxmlrpcpp/ulxmlrpcpp-1.7.3-src.tar.bz2]
+md5=7c5d849d8d1cd9ccfb4b90350145d503
+sha256=0d568ff00cd45f73f3634723f8cb453f8bc952760cad3829bcbca88378a2ed83
+
[http://heanet.dl.sourceforge.net/ulxmlrpcpp/ulxmlrpcpp-1.7.3-src.tar.bz2]
md5=7c5d849d8d1cd9ccfb4b90350145d503
sha256=0d568ff00cd45f73f3634723f8cb453f8bc952760cad3829bcbca88378a2ed83
@@ -21286,6 +22586,10 @@ sha256=a1cef2b1f56c46cf787af855c43468ff7dcb4acd4e253c85e302cd8bd37dbbac
md5=c4e3d285ffacd6c5971788215588420b
sha256=7f2f0492b0e1f9f96bd416e6c7a34e77c46faa20eeaff28c81c5932c91534ffc
+[http://download.gnome.org/sources/vala/0.5/vala-0.5.7.tar.bz2]
+md5=5e6c4ce07091725d9afdac7cf00e553c
+sha256=d0425be8572be85b8a7ae802a19bcb73fdeac74906f7bcbbc129697ea6a86f3a
+
[http://www.valgrind.org/downloads/valgrind-3.2.1.tar.bz2]
md5=9407d33961186814cef0e6ecedfd6318
sha256=7f9a15d7be16ca03a0912191e8d55a486bf69690e11bb76ccece3eaff3730a33
@@ -21298,6 +22602,10 @@ sha256=5af08229d77fe55437a6c558aee9babcff23f28c8a9c8f1f0a7d152754e9947a
md5=0539e2fa4aadb2cd4ca4bba65b1fe8b5
sha256=95b7b4d815bd479332637c93e69ec24167cd28d4f9d9f9b718e1b091bb88aafa
+[http://downloads.sourceforge.net/aoetools/vblade-19.tgz]
+md5=59d45caa6454388eea60441dcf6631db
+sha256=779c8c9e80ce09e8ef1737216c8438c6e614d7001e1a6f312e4a82191e34870e
+
[http://downloads.sourceforge.net/vde/vde-2.0.2.tar.bz2]
md5=d97a8dbc72942c57542f50322b538a48
sha256=05b473815f9706387a3c5eaeb4da2e492f624e0b7783432179454f9d69bb973c
@@ -21466,6 +22774,10 @@ sha256=c31e1e930bce109cccd40dc0378b7ee28933482855918f46573e79d9db818be7
md5=40480f20f6b7664f3d364e4f2ed27889
sha256=edfb74b0bef469ee122ab67c3e4562043e97803c8a32899caf5bd3a71c464a6d
+[http://ftp.gnome.org/pub/GNOME/sources/vte/0.16/vte-0.16.14.tar.bz2]
+md5=9df3e35b81b209952ac1cf7904f7b620
+sha256=40cf321980d3139c8f084e818504e1366be81bed817eeeec9021257e04c1c0db
+
[http://ftp.gnome.org/pub/GNOME/sources/vte/0.16/vte-0.16.8.tar.bz2]
md5=65344de3023c41c8dda2b35a415bf969
sha256=1dc06ad4224c18061b000de0435b81b7c249215da4163edecb62a8d46090098f
@@ -21642,6 +22954,10 @@ sha256=a4f15c73e2b67c888cbedfaa8093661dff6cb859357c197c60f3026baddb939e
md5=05fada181e12bfa94b52f0b10395b28c
sha256=a4f15c73e2b67c888cbedfaa8093661dff6cb859357c197c60f3026baddb939e
+[http://downloads.sourceforge.net/wireshark/wireshark-1.0.5.tar.bz2]
+md5=4c6a93e00123d8bb7af48a009519aca4
+sha256=4f923e24d674ac62ded3da402a4de6d402886d80e3d7cac91cf026921f32fcf7
+
[ftp://ftp.elmeg.de/artem/ClientCards/11b/linux/wl_lkm_718_release.tar.gz]
md5=049c6c3d410e9f46884627b57485d3e7
sha256=a28c7ea94d57a5354b7de06cf5f6416d80a40596911c129d4b6a4087dc916831
@@ -21718,6 +23034,14 @@ sha256=f70b18243e049bbda66254388b6e94d404e747d913b8496d6e93a9c56bbf4af2
md5=eb06a9a05d3916addf9451297a558aa2
sha256=0c10e59dd079c4e5d9ec6eebe9a8ac0e1b9e472cccef49c705f87a78391e79fa
+[http://hostap.epitest.fi/releases/wpa_supplicant-0.6.7.tar.gz]
+md5=b61f6e94b63f92173f4286b5e6a84140
+sha256=7c698fe145785b63e584da02b21a7e9a32b0929e35fc0bc67ad99af6d5217f64
+
+[http://downloads.sourceforge.net/wqy/wqy-zenhei-0.6.26-0.tar.gz]
+md5=bf2c1cb512606d995873bada27c777da
+sha256=47355b6ec84bb309614b6d657ddfda993b96ed0be569264f82e523b254f945b2
+
[http://heanet.dl.sourceforge.net/wqy/wqy-zenhei-0.6.26-0.tar.gz]
md5=bf2c1cb512606d995873bada27c777da
sha256=47355b6ec84bb309614b6d657ddfda993b96ed0be569264f82e523b254f945b2
@@ -21738,6 +23062,14 @@ sha256=f91445e5e1a02ee16f0bc1eb31a1cdfa53c4bb1e1cb4f76fae33436d472e9345
md5=c990186db06cf188cb267d12bc21e2da
sha256=f91445e5e1a02ee16f0bc1eb31a1cdfa53c4bb1e1cb4f76fae33436d472e9345
+[http://downloads.sourceforge.net/witty/wt-2.2.3.tar.gz]
+md5=2f4c34f1e092451d3c4d2e7f8c250015
+sha256=c6f692956d93765f12402a0b22617566decc52a9bb1a707b4e8d12affd1528d3
+
+[http://downloads.sourceforge.net/witty/wt-2.99.0.tar.gz]
+md5=3d35c181dfab7dfd3fe898738dffb421
+sha256=64e6bd25d18e838e1c60693eccbd11926c65b228d6ac69c4dafc7ebe7341dbbf
+
[http://downloads.sourceforge.net/wvware/wv-1.2.0.tar.gz]
md5=b6319d5e75611fe2210453b5feb82c0c
sha256=a76f44468e78591e6d510d326702e7c3999d2b9dd3ab8ab8c1c9811fd5b111e4
@@ -21794,10 +23126,18 @@ sha256=1e09f6ad9dd987403f9549c2640680cf932ba00df5afa20a4531e98544b413a5
md5=029ff5aac16ff5c42c89b9a7c7ac4029
sha256=7c03f8e02b023c8843bc959bf32d972cdca27d5f6601c6c2ce1c1174208966d4
+[http://downloads.sourceforge.net/wxwindows/wxBase-2.6.4.tar.bz2]
+md5=6e55324d2a522d23fd8834ad8656e0b6
+sha256=1679c29f94983f3fb855f79dcffa2335eb638c6e159444185506e0ff50e6672a
+
[http://heanet.dl.sourceforge.net/wxwindows/wxBase-2.6.4.tar.bz2]
md5=6e55324d2a522d23fd8834ad8656e0b6
sha256=1679c29f94983f3fb855f79dcffa2335eb638c6e159444185506e0ff50e6672a
+[http://downloads.sourceforge.net/wxwindows/wxBase-2.8.9.tar.bz2]
+md5=2f78233829bb8979ca31f86b6de87ee9
+sha256=5bad521a93021ee7af10127b8c9b4235c16274ad06943585022bfc23a6f4b005
+
[http://heanet.dl.sourceforge.net/wxwindows/wxBase-2.8.9.tar.bz2]
md5=2f78233829bb8979ca31f86b6de87ee9
sha256=5bad521a93021ee7af10127b8c9b4235c16274ad06943585022bfc23a6f4b005
@@ -21806,6 +23146,10 @@ sha256=5bad521a93021ee7af10127b8c9b4235c16274ad06943585022bfc23a6f4b005
md5=7af577ac8a6d78d6a0fef1b09cf1093e
sha256=f4f42e8b649285fb0d8cf8109e420f6a0d16b2315985d017935279ceb26eb035
+[http://downloads.sourceforge.net/wxwindows/wxWidgets-2.6.4.tar.gz]
+md5=43cbe5c7508f7dc3e141c346a897fbe7
+sha256=b31c3bc4e85e7f972db1dfb7b447d213694569e2a5794a84116295c334a11f43
+
[http://heanet.dl.sourceforge.net/wxwindows/wxWidgets-2.6.4.tar.gz]
md5=43cbe5c7508f7dc3e141c346a897fbe7
sha256=b31c3bc4e85e7f972db1dfb7b447d213694569e2a5794a84116295c334a11f43
@@ -22078,6 +23422,10 @@ sha256=4511dc4df6ebb320a4a516b3b712c86f6924e5ee9832618f58ebba06c64712ea
md5=b3884eaec59a63691f66bc29ce57a56d
sha256=75378ad3eacbe32c625de3b4af3e1f6fc9772ab45c1cd1393483d95ac4da3b22
+[http://xdiskusage.sourceforge.net/xdiskusage-1.48.tgz]
+md5=a902aa9d73761ade98256c3cd5c1f533
+sha256=7842aa42510bf52c367164d44a977915ad9f070864d5175157738f8d6894274b
+
[http://xorg.freedesktop.org/releases/individual/app/xditview-1.0.1.tar.bz2]
md5=e9a7192ef29453b8c810ddd556a463c0
sha256=177194e5f83b31c2f934e3a0b573e8ae359edf2ef1a2403ee8e1dad383558117
@@ -22858,6 +24206,10 @@ sha256=c6032ec1753a0f5975b5a7488ca3ca0d46f84bc5dd8fcb42eebd807c7faec765
md5=c209e54fa8dcd3cd3342e84d261b02db
sha256=d03eb7e5b47e2f1e1a665700f4e22d15651dc949196b0ec880f0d63cafb6814c
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.11.0.tar.bz2]
+md5=1dbede8f6393edfe6c1ecab2f754b3b2
+sha256=d70c198cde981c3a53b1c41b717dea4bbf1d397d82957f584c641bb5fd02c82d
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.8.0.tar.bz2]
md5=a2b9c70a32b0a6436d837d67fa7aae18
sha256=f0b68171dd4256c927fbee91ecf84fa28c409b5b6b39cbf47eaa48fd73db305f
@@ -23750,6 +25102,10 @@ sha256=8d5f6ad0318a8958eaf5772657007ffb545a36c9cd8190f2511cfa03c0069d63
md5=632c7745f884dc5e6fd707a18971aca3
sha256=b3195456c99ab66103fd235ab410d6f3e6a56f2bdb7fb31d9d3789f2d453ec3f
+[http://slackware.osuosl.org/slackware-12.0/source/a/xfsprogs/xfsprogs_2.8.16-1.tar.gz]
+md5=632c7745f884dc5e6fd707a18971aca3
+sha256=b3195456c99ab66103fd235ab410d6f3e6a56f2bdb7fb31d9d3789f2d453ec3f
+
[http://www.us.xfce.org/archive/xfce-4.2.0/src/xfwm4-4.2.0.tar.gz]
md5=da6d773f31ef91400174c2045f0f1a80
sha256=4ba4bad5bf750045175dc6af58ec29d046c91fa30c3b769213ce69fc739c8046
@@ -24666,10 +26022,18 @@ sha256=a3cfc867672924f27d5ed39a99bc089cc9417d193513984f0a081a92230e947b
md5=9bcab80b474d5454477d1ca166a68c34
sha256=27b9dc2203de9b1706ca39fa6ca80ecab8807909ec901c4a345b8e41178800a1
+[http://downloads.sourceforge.net/xvidcap/xvidcap-1.1.6.tar.gz]
+md5=c6add7ae452e5cecbdda6e55e7c67cdb
+sha256=17ca7b7f8ce12f7e312b2abc2da7f381dc0e964cdac6312631cd7987f02b9fba
+
[http://heanet.dl.sourceforge.net/xvidcap/xvidcap-1.1.6.tar.gz]
md5=c6add7ae452e5cecbdda6e55e7c67cdb
sha256=17ca7b7f8ce12f7e312b2abc2da7f381dc0e964cdac6312631cd7987f02b9fba
+[http://downloads.sourceforge.net/xvidcap/xvidcap-1.1.7rc1.tar.gz]
+md5=449ee23b6ea171f090b9de48ffefb364
+sha256=487bf07b2f9ead6a59682d091081e47cfe4ca5777de32e6cec5bef55fa51c82f
+
[http://heanet.dl.sourceforge.net/xvidcap/xvidcap-1.1.7rc1.tar.gz]
md5=449ee23b6ea171f090b9de48ffefb364
sha256=487bf07b2f9ead6a59682d091081e47cfe4ca5777de32e6cec5bef55fa51c82f
@@ -24746,6 +26110,10 @@ sha256=5beb94529cc7ac79b17e354f9b03aea311f5af17be5d48bc39e6f1db5059f70f
md5=43c606bbd27c500b0022471ed704ab78
sha256=014e744f40c773bf225328bce1ca80f5dde4835c1f6671e989a4f8c4ed24555f
+[http://downloads.sourceforge.net/yasr/yasr-0.6.9.tar.gz]
+md5=daec224676fb2db5a1936b399f559473
+sha256=41f17cfab8e88824a8dc1476602a0944b9030a8f8da2538a7a6549e3534e3bdf
+
[http://download.devbase.at/voip/yeaphone-0.1.tar.gz]
md5=476552b3b88b651ba161d22c1db5314d
sha256=2f596ef4c57e29708d6246949289341d9f9756d162bf49e89f0828180329aa51
@@ -24782,6 +26150,10 @@ sha256=e145638ab4b0f267075b82db5ab9f7170ae2abf1fa1212d5175c31fe4bd28477
md5=96eb282a1a3e4fea69b94f1db069f4e9
sha256=f218b25c4be2261c49b9c9e1f10c93b64eaf6132ace6bc4052cf0489e3ac56e8
+[http://downloads.sourceforge.net/bedic/zbedic_1.2-2.tgz]
+md5=c7e8e267567a96cff7920a0365978c4d
+sha256=b991cc5635849353081c2a3350142484763323bc58bfa49b62285645aac129b9
+
[http://heanet.dl.sourceforge.net/bedic/zbedic_1.2-2.tgz]
md5=c7e8e267567a96cff7920a0365978c4d
sha256=b991cc5635849353081c2a3350142484763323bc58bfa49b62285645aac129b9
@@ -24954,6 +26326,10 @@ sha256=a832819915838b364dd19f7f5d8d632b7d0493d8a19e2d011f9b5a3f2e8cf266
md5=918c8ebb03c0e2f3272e0d90a92f2289
sha256=12f5b654f6b91953391d2492a09d2c9586d5b7af419f0eeb306e1d30245659d3
+[http://downloads.sourceforge.net/zapping/zvbi-0.2.25.tar.bz2]
+md5=b63c626baf1fc385df04d88bc9628a4a
+sha256=fa85c35ae5694e6b1ce0dee920c1ecb93698b66c35717368143560930aedbc13
+
[http://heanet.dl.sourceforge.net/zapping/zvbi-0.2.25.tar.bz2]
md5=b63c626baf1fc385df04d88bc9628a4a
sha256=fa85c35ae5694e6b1ce0dee920c1ecb93698b66c35717368143560930aedbc13
@@ -24966,10 +26342,18 @@ sha256=f684397ce39ec400ba3369521892b7c3a8711d3ef1be59115db9f8d57707bbb8
md5=a6538f6c44ceeed0ed7e8e356f444168
sha256=f684397ce39ec400ba3369521892b7c3a8711d3ef1be59115db9f8d57707bbb8
+[http://downloads.sourceforge.net/zziplib/zziplib-0.12.83.tar.bz2]
+md5=4943ab7aa141af2c339266cd66b05c74
+sha256=5cc1a53bb909922596bdd0fa967b654fe1bfbe0dcf1d34608f0b7c90e0c27867
+
[http://heanet.dl.sourceforge.net/zziplib/zziplib-0.12.83.tar.bz2]
md5=4943ab7aa141af2c339266cd66b05c74
sha256=5cc1a53bb909922596bdd0fa967b654fe1bfbe0dcf1d34608f0b7c90e0c27867
+[http://downloads.sourceforge.net/zziplib/zziplib-0.13.49.tar.bz2]
+md5=5f7b88ebb2bcd7e8044328482d079661
+sha256=f57c4e33eb2cdd87a6c2f01bfa4794340fbe61ea1a1cfc7dac3b6671e1dd22af
+
[http://heanet.dl.sourceforge.net/zziplib/zziplib-0.13.49.tar.bz2]
md5=5f7b88ebb2bcd7e8044328482d079661
sha256=f57c4e33eb2cdd87a6c2f01bfa4794340fbe61ea1a1cfc7dac3b6671e1dd22af
diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf
index 72787d69cf..cde01e155f 100644
--- a/conf/distro/angstrom-2008.1.conf
+++ b/conf/distro/angstrom-2008.1.conf
@@ -3,7 +3,6 @@
#@NAME: Angstrom <http://www.angstrom-distribution.org>
#@DESCRIPTION: The Linux Distribution for Kernel 2.6 based devices
#@MAINTAINER: Koen Kooi <koen@openembedded.org>
-#@MAINTAINER: Michael 'Mickey' Lauer <mickey@Vanille-media.de>
#@--------------------------------------------------------------------
# This is a aimed to be the next stable angstrom release.
@@ -91,17 +90,12 @@ ANGSTROM_GCC_VERSION_xilinx-ml403 ?= "4.1.1"
# Blackfin has its on gcc
ANGSTROM_GCC_VERSION_bfin = "4.1.2"
-#for proper NEON support we need a CSL toolchain
-#ANGSTROM_GCC_VERSION_armv7a = "4.2.1+csl-arm-2007q3-53"
ANGSTROM_GCC_VERSION_armv7a = "4.3.1"
ANGSTROM_GCC_VERSION_486sx = "4.3.2"
-#Horrible workaround for armv7a follows:
-# gcc 4.3.1 builds a kernel that oopses with a null-pointer in the rcu-update function
-# gcc 4.2.1 (the one from *gasp* csl) builds a working kernel, but non-working userspace
-
-KERNEL_CCSUFFIX_armv7a= "-4.2.1+csl-arm-2007q3-53"
+# Uncomment this if want need to build an armv7a kernel with CSL toolchain (<2.6.27 don't boot with mainline gcc)
+#KERNEL_CCSUFFIX_armv7a= "-4.2.1+csl-arm-2007q3-53"
#avr32 only has support for gcc 4.2.2
ANGSTROM_GCC_VERSION_avr32 ?= "4.2.2"
@@ -186,14 +180,23 @@ PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
require conf/distro/include/angstrom${ARM_ABI}.inc
+
+
+# If we're using an .ipk based rootfs, we want to have opkg-nogpg installed so postinst script can run
+# We also take this opportunity to inject angstrom-version and the feed configs into the rootfs
+IPKG_VARIANT = "opkg-nogpg angstrom-version ${ANGSTROM_FEED_CONFIGS}"
+
# do some task-base stuff here
# We want to ship extra debug utils in the rootfs when doing a debug build
DEBUG_APPS ?= ""
DEBUG_APPS += '${@base_conditional("DISTRO_TYPE", "release", "", "strace procps",d)}'
-# Angstrom want to ship some extra stuff. This should be moved into task-base eventually
-# contains ipkg specific stuff as well :(
+# This hooks into task-base, so it won't do anything if your images doesn't include task-base.
+# angstrom-version: ship this to have an identifiable rootfs so user can report bugs against a specific version
+# ANGSTROM_FEED_CONFIGS: configfiles for the online feeds
+# util-linux-ng-mount util-linux-ng-umount: busybox mount is broken
+# angstrom-libc-fixup-hack: fixes an obscure bug with libc.so symlink
DISTRO_EXTRA_RDEPENDS += "\
angstrom-version \
${ANGSTROM_FEED_CONFIGS} \
@@ -201,6 +204,15 @@ DISTRO_EXTRA_RDEPENDS += "\
angstrom-libc-fixup-hack \
"
+# This also hooks into task-base, but isn't mandatory.
+# If you don't want parts of this in your task-base using images you can put this in the image recipe:
+# BAD_RECOMMENDATIONS = "avahi-daemon avahi-autoipd"
+# Note that BAD_RECOMMENDATIONS is a feature of rootfs_ipk.bbclass, not angstrom
+# kernel modules: ship fs modules so you can mount stuff and af-packet so networking works
+# avahi: makes finding your device on the network a lot easier
+# openssh-sftp-server: provides sftp which combined with avahi makes it real easy to use things like sshfs
+# psplash-angstrom: angstrom branded psplash, you can add your own psplash-foo to an image, it uses update-alternatives
+# DEBUG_APPS: ship strace and procpc to make simple debugging a lot easier
DISTRO_EXTRA_RRECOMMENDS += " \
kernel-module-vfat \
kernel-module-ext2 \
@@ -213,5 +225,3 @@ DISTRO_EXTRA_RRECOMMENDS += " \
${DEBUG_APPS} \
"
-SEPPUKU_NEWREPORT = "http://bugs.openembedded.net/post_bug.cgi?bug_file_loc=http%3A%2F%2F&version=Angstrom%202008.x&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Other&"
-
diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf
index e0757a7abd..7bb9e4b0bb 100644
--- a/conf/distro/chinook-compat.conf
+++ b/conf/distro/chinook-compat.conf
@@ -78,6 +78,8 @@ PREFERRED_VERSION_linux-libc-headers = "2.6.20"
PREFERRED_VERSION_glibc = "2.5"
PREFERRED_VERSION_glibc-initial = "2.5"
+PREFERRED_VERSION_libtool-native = "1.5.10"
+PREFERRED_VERSION_libtool-cross = "1.5.10"
PREFERRED_VERSION_libtool = "1.5.6"
require conf/distro/include/sane-srcrevs.inc
@@ -122,7 +124,7 @@ PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
# This is a hack to avoid building mesa which crashes the compiler
PREFERRED_PROVIDER_virtual/libsdl = "libsdl-directfb"
-PREFERRED_VERSION_libsdl-directfb = "1.2.9"
+PREFERRED_VERSION_libsdl-directfb = "1.2.11"
PREFERRED_VERSION_libsdl-image = "1.2.3"
PREFERRED_VERSION_libsdl-mixer = "1.2.6"
@@ -157,6 +159,8 @@ PREFERRED_VERSION_pixman = "0.9.6"
PREFERRED_PROVIDER_virtual/libqte2 = "qte-mt"
PREFERRED_PROVIDER_avahi = "avahi"
+PREFERRED_VERSION_avahi = "0.6.20"
+
PREFERRED_VERSION_libsoup = "2.2.7"
PREFERRED_VERSION_libglade = "2.4.2"
PREFERRED_VERSION_gnutls = "1.4.5"
diff --git a/conf/distro/include/angstrom-2007-for-openmoko.inc b/conf/distro/include/angstrom-2007-for-openmoko.inc
index 5675e75723..daf4dd01bb 100644
--- a/conf/distro/include/angstrom-2007-for-openmoko.inc
+++ b/conf/distro/include/angstrom-2007-for-openmoko.inc
@@ -3,7 +3,6 @@
#@NAME: Angstrom <http://www.angstrom-distribution.org>
#@DESCRIPTION: The Linux Distribution for Kernel 2.6 based devices
#@MAINTAINER: Koen Kooi <koen@openembedded.org>
-#@MAINTAINER: Michael 'Mickey' Lauer <mickey@Vanille.de>
#@--------------------------------------------------------------------
DISTRO_VERSION = "2007.11RC3"
diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc
index bc5785343f..a42ddae0fa 100644
--- a/conf/distro/include/angstrom-2008-preferred-versions.inc
+++ b/conf/distro/include/angstrom-2008-preferred-versions.inc
@@ -1,5 +1,5 @@
-PREFERRED_VERSION_automake-native = "1.10"
-PREFERRED_VERSION_busybox = "1.11.3"
+PREFERRED_VERSION_automake-native = "1.10.2"
+PREFERRED_VERSION_busybox = "1.13.2"
PREFERRED_VERSION_cairo = "1.8.0"
PREFERRED_VERSION_dbus = "1.2.1"
PREFERRED_VERSION_dropbear = "0.51"
@@ -20,10 +20,11 @@ PREFERRED_VERSION_libtool-native = "2.2.4"
PREFERRED_VERSION_libtool-cross = "2.2.4"
PREFERRED_VERSION_libtool-sdk = "2.2.4"
PREFERRED_VERSION_pango = "1.22.0"
-PREFERRED_VERSION_pixman = "0.12.0"
+PREFERRED_VERSION_pixman = "0.13.2"
PREFERRED_VERSION_pkgconfig = "0.23"
PREFERRED_VERSION_pkgconfig-native = "0.23"
PREFERRED_VERSION_pulseaudio = "0.9.10"
PREFERRED_VERSION_tiff = "3.8.2+4.0.0beta2"
PREFERRED_VERSION_udev = "124"
+PREFERRED_VERSION_wpa-supplicant = "0.6.7"
PREFERRED_VERSION_xserver-kdrive = "1.4.0.90"
diff --git a/conf/distro/include/angstrom-uclibc.inc b/conf/distro/include/angstrom-uclibc.inc
index 1f0b41f05e..86a9afd465 100644
--- a/conf/distro/include/angstrom-uclibc.inc
+++ b/conf/distro/include/angstrom-uclibc.inc
@@ -34,7 +34,7 @@ BUILD_OPTIMIZATION = "-Os"
#Note that this testing was done without the gcc-pr32889.patch.
FULL_OPTIMIZATION_avr32 = "-Os -fomit-frame-pointer"
-TARGET_LINK_HASH_STYLE = "${@['-Wl,--hash-style=gnu',''][bb.data.getVar('TARGET_ARCH',d,1) in ['mips', 'mipsel']]}"
+TARGET_LINK_HASH_STYLE = "${@['-Wl,--hash-style=gnu',''][bb.data.getVar('TARGET_ARCH',d,1) in ['mips', 'mipsel', 'avr32']]}"
CXXFLAGS += "-fvisibility-inlines-hidden"
diff --git a/conf/distro/include/fso-autorev.inc b/conf/distro/include/fso-autorev.inc
index a84faf1234..6de3c82a38 100644
--- a/conf/distro/include/fso-autorev.inc
+++ b/conf/distro/include/fso-autorev.inc
@@ -3,6 +3,7 @@ SRCREV_pn-dbus-hlid = "${AUTOREV}"
SRCREV_pn-frameworkd = "${AUTOREV}"
SRCREV_pn-frameworkd-devel = "${AUTOREV}"
SRCREV_pn-fsod = "${AUTOREV}"
+SRCREV_pn-fso-abyss = "${AUTOREV}"
SRCREV_pn-fso-apm = "${AUTOREV}"
SRCREV_pn-fso-gsm0710muxd = "${AUTOREV}"
SRCREV_pn-fso-gpsd = "${AUTOREV}"
@@ -11,6 +12,8 @@ SRCREV_pn-fso-sounds = "${AUTOREV}"
SRCREV_pn-gsmd2 = "${AUTOREV}"
SRCREV_pn-illume-theme-freesmartphone = "${AUTOREV}"
SRCREV_pn-libframeworkd-glib = "${AUTOREV}"
+SRCREV_pn-libgsm0710 = "${AUTOREV}"
+SRCREV_pn-libgsm0710mux = "${AUTOREV}"
SRCREV_pn-mickeydbus = "${AUTOREV}"
SRCREV_pn-mickeyterm = "${AUTOREV}"
SRCREV_pn-python-pytrc = "${AUTOREV}"
diff --git a/conf/distro/include/kaeilos.inc b/conf/distro/include/kaeilos.inc
new file mode 100644
index 0000000000..6d5ceb8da8
--- /dev/null
+++ b/conf/distro/include/kaeilos.inc
@@ -0,0 +1,292 @@
+#@TYPE: Distribution
+#@NAME: KaeilOS
+#@DESCRIPTION: Release independent distribution configuration for KaeilOS
+#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
+# KaeilOS is a registered trade mark of KOAN - Bergamo - Italia
+# Product website : http://www.KaeilOS.com
+
+# Preserve original DISTRO value
+USERDISTRO := "${DISTRO}"
+DISTRO = "kaeilos"
+DISTRO_NAME = "KaeilOS"
+
+TARGET_VENDOR = "-kaeilos"
+
+# Add FEED_ARCH to overrides
+OVERRIDES .= ":${FEED_ARCH}"
+
+# Put links to sources in deploy/sources to make it easier for people to be GPL compliant
+SRC_DIST_LOCAL ?= "symlink"
+INHERIT += "src_distribute_local"
+
+# Can be "glibc", "eglibc" or "uclibc"
+ANGSTROMLIBC ?= "glibc"
+PSTAGE_EXTRAPATH = "${ANGSTROMLIBC}"
+
+CACHE = "${TMPDIR}/cache/${ANGSTROMLIBC}/${MACHINE}"
+DEPLOY_DIR = "${TMPDIR}/deploy/${ANGSTROMLIBC}"
+require conf/distro/include/angstrom-${ANGSTROMLIBC}.inc
+
+# ARM920T and up can use thumb mode to decrease binary size at the expense of speed
+# (the complete story is a bit more nuanced due to cache starvation)
+# KaeilOS turns on thumb for armv4t machine according to this RFC:
+# http://lists.linuxtogo.org/pipermail/angstrom-distro-devel/2008-October/002714.html
+
+# We can't do ARM_INSTRUCTION_SET_armv4t since that will un-overridable in recipes like gcc
+ANGSTROM_ARM_INSTRUCTION_SET ?= "arm"
+ANGSTROM_ARM_INSTRUCTION_SET_armv4t = "thumb"
+ANGSTROM_ARM_INSTRUCTION_SET_armv5te = "thumb"
+
+
+ARM_INSTRUCTION_SET = "${ANGSTROM_ARM_INSTRUCTION_SET}"
+# "arm" "thumb"
+# The instruction set the compiler should use when generating application
+# code. The kernel is always compiled with arm code at present. arm code
+# is the original 32 bit ARM instruction set, thumb code is the 16 bit
+# encoded RISC sub-set. Thumb code is smaller (maybe 70% of the ARM size)
+# but requires more instructions (140% for 70% smaller code) so may be
+# slower.
+
+THUMB_INTERWORK = "yes"
+# "yes" "no"
+# Whether to compile with code to allow interworking between the two
+# instruction sets. This allows thumb code to be executed on a primarily
+# arm system and vice versa. It is strongly recommended that DISTROs not
+# turn this off - the actual cost is very small.
+
+
+#Use this variable in feeds and other parts that need a URI
+ANGSTROM_URI ?= "http://www.angstrom-distribution.org"
+
+#Use this variable to select which recipe you want to use to get feed configs (/etc/ipkg/, /etc/apt/sources.list)
+# usefull for derivative distros and local testing
+# As this is runtime we can't and won't use virtual/feed-configs
+ANGSTROM_FEED_CONFIGS ?= "angstrom-feed-configs"
+
+#Set the default maintainer to angstrom-dev
+MAINTAINER = "KaeilOS Developers <info@koansoftware.com>"
+
+#use debian style naming
+INHERIT += "debian"
+
+#activate config checker
+INHERIT += "sanity"
+
+#make devshell available as task
+INHERIT += "devshell"
+
+#use angstrom source mirrors to combat 404s
+INHERIT += "angstrom-mirrors"
+
+#run QA tests on builds and packages and log them
+INHERIT += "insane"
+QA_LOG = "1"
+
+ANGSTROM_PKG_FORMAT ?= "ipk"
+require conf/distro/include/angstrom-package-${ANGSTROM_PKG_FORMAT}.inc
+
+# We don't want to keep OABI compat
+ARM_KEEP_OABI = "0"
+
+#Generate locales on the buildsystem instead of on the target. Speeds up first boot, set to "1" to enable
+PREFERRED_PROVIDER_qemu-native = "qemu-native"
+ENABLE_BINARY_LOCALE_GENERATION ?= "1"
+
+# We only want to build UTF8 locales
+LOCALE_UTF8_ONLY = "1"
+
+#qemu doesn't like armv6/eabi/vfp
+ENABLE_BINARY_LOCALE_GENERATION_armv7a = "0"
+
+#qemu has taken a dislike to armeb as well
+ENABLE_BINARY_LOCALE_GENERATION_armeb = "0"
+
+#ARM EABI is softfloat by default, but let's make sure :)
+#make it overridable for platforms with FPU, like ep93xx or i.mx31
+TARGET_FPU_arm ?= "soft"
+TARGET_FPU_armeb ?= "soft"
+TARGET_FPU_ixp4xx ?= "soft"
+TARGET_FPU_ppc405 ?= "soft"
+
+TARGET_FPU_armv6 ?= "hard"
+TARGET_FPU_armv6-novfp ?= "soft"
+TARGET_FPU_armv7a ?= "hard"
+TARGET_FPU_ppc603e ?= "hard"
+
+# webkit-gtk and cairo have alignment issues with double instructions on armv5 so
+# disable them here
+TARGET_CC_ARCH_pn-webkit-gtk_armv5te = "-march=armv4t"
+TARGET_CC_ARCH_pn-cairo_armv5te = "-march=armv4t"
+
+#Set the right arch for the feeds
+#Alphabetically sorted
+
+FEED_ARCH ?= "${TARGET_ARCH}"
+
+#blackfin machines
+FEED_ARCH_bfin = "blackfin"
+
+#armv4t machines
+
+FEED_ARCH_acern30 = "armv4t"
+FEED_ARCH_amsdelta = "armv4t"
+FEED_ARCH_ep93xx = "armv4t"
+FEED_ARCH_eteng500 = "armv4t"
+FEED_ARCH_om-gta01 = "armv4t"
+FEED_ARCH_om-gta02 = "armv4t"
+FEED_ARCH_h1940 = "armv4t"
+FEED_ARCH_h6300 = "armv4t"
+FEED_ARCH_kb9202 = "armv4t"
+FEED_ARCH_ks8695 = "armv4t"
+FEED_ARCH_rx1950 = "armv4t"
+FEED_ARCH_rx3000 = "armv4t"
+FEED_ARCH_sarge-at91 = "armv4t"
+FEED_ARCH_smdk2440 = "armv4t"
+FEED_ARCH_smdk2443 = "armv4t"
+
+#armv5t machines
+
+FEED_ARCH_a1200 = "armv5te"
+FEED_ARCH_a780 = "armv5te"
+FEED_ARCH_akita = "armv5te"
+FEED_ARCH_asus620 = "armv5te"
+FEED_ARCH_asus730 = "armv5te"
+FEED_ARCH_at91sam9263ek = "armv5te"
+FEED_ARCH_aximx50 = "armv5te"
+FEED_ARCH_aximx50v = "armv5te"
+FEED_ARCH_c7x0 = "armv5te"
+FEED_ARCH_compulab-pxa270 = "armv5te"
+FEED_ARCH_davinci-dvevm = "armv5te"
+FEED_ARCH_devkitidp-pxa255 = "armv5te"
+FEED_ARCH_e680 = "armv5te"
+FEED_ARCH_er0100 = "armv5te"
+FEED_ARCH_gumstix = "armv5te"
+FEED_ARCH_gumstix-verdex = "armv5te"
+FEED_ARCH_gumstix-connex = "armv5te"
+FEED_ARCH_h1910 = "armv5te"
+FEED_ARCH_h2200 = "armv5te"
+FEED_ARCH_h3900 = "armv5te"
+FEED_ARCH_h4000 = "armv5te"
+FEED_ARCH_h5000 = "armv5te"
+FEED_ARCH_htcalpine = "armv5te"
+FEED_ARCH_htcapache = "armv5te"
+FEED_ARCH_htcblueangel = "armv5te"
+FEED_ARCH_htchimalaya = "armv5te"
+FEED_ARCH_htcsable = "armv5te"
+FEED_ARCH_htctornado = "armv5te"
+FEED_ARCH_htcuniversal = "armv5te"
+FEED_ARCH_hx2000 = "armv5te"
+FEED_ARCH_hx4700 = "armv5te"
+FEED_ARCH_ixp4xxle = "armv5te"
+FEED_ARCH_logicpd-pxa270 = "armv5te"
+FEED_ARCH_looxc550 = "armv5te"
+FEED_ARCH_lsarm = "armv5te"
+FEED_ARCH_magician = "armv5te"
+FEED_ARCH_mainstone = "armv5te"
+FEED_ARCH_mnci = "armv5te"
+FEED_ARCH_mtx-3 = "armv5te"
+FEED_ARCH_mx21ads = "armv5te"
+FEED_ARCH_n2100 = "armv5te"
+FEED_ARCH_navman-icn330 = "armv5te"
+FEED_ARCH_netbook-pro = "armv5te"
+FEED_ARCH_nokia770 = "armv5te"
+FEED_ARCH_rokre2 = "armv5te"
+FEED_ARCH_nslu2le = "armv5te"
+FEED_ARCH_omap1510inn = "armv5te"
+FEED_ARCH_omap1610h2 = "armv5te"
+FEED_ARCH_omap1710h3 = "armv5te"
+FEED_ARCH_omap5912osk = "armv5te"
+FEED_ARCH_palmld = "armv5te"
+FEED_ARCH_palmt650 = "armv5te"
+FEED_ARCH_palmt680 = "armv5te"
+FEED_ARCH_palmtc = "armv5te"
+FEED_ARCH_palmtt = "armv5te"
+FEED_ARCH_palmtt3 = "armv5te"
+FEED_ARCH_palmtt5 = "armv5te"
+FEED_ARCH_palmtx = "armv5te"
+FEED_ARCH_palmz31 = "armv5te"
+FEED_ARCH_palmz71 = "armv5te"
+FEED_ARCH_palmz72 = "armv5te"
+FEED_ARCH_poodle = "armv5te"
+FEED_ARCH_qemuarm = "armv5te"
+FEED_ARCH_spitz = "armv5te"
+FEED_ARCH_tosa = "armv5te"
+FEED_ARCH_triton = "armv5te"
+
+FEED_ARCH_ixp4xxbe = "armv5teb"
+FEED_ARCH_nslu2be = "armv5teb"
+
+# armv6
+
+FEED_ARCH_mx31ads = "armv6"
+FEED_ARCH_mx31moboard = "armv6"
+FEED_ARCH_nokia800 = "armv6"
+FEED_ARCH_omap2420h4 = "armv6"
+FEED_ARCH_omap2430sdp = "armv6"
+
+#i486 machines
+FEED_ARCH_geodegx = "i486"
+FEED_ARCH_geodelx = "i486"
+FEED_ARCH_netvista = "i486"
+FEED_ARCH_wrap = "i486"
+FEED_ARCH_x86 = "i486"
+
+#i586 machines
+FEED_ARCH_epia = "i586"
+FEED_ARCH_i586-generic = "i586"
+FEED_ARCH_qemux86 = "i586"
+
+#i686 machines
+
+FEED_ARCH_alix = "i686"
+FEED_ARCH_colinux = "i686"
+FEED_ARCH_guinness = "i686"
+FEED_ARCH_i686-generic = "i686"
+FEED_ARCH_progear = "i686"
+
+#powerpc machines
+
+FEED_ARCH_dht-walnut = "ppc405"
+FEED_ARCH_magicbox = "ppc405"
+FEED_ARCH_xilinx-ml403 = "ppc405"
+FEED_ARCH_xilinx-ml410 = "ppc405"
+FEED_ARCH_sequoia = "ppc440e"
+FEED_ARCH_efika = "ppc603e"
+FEED_ARCH_lite5200 = "ppc603e"
+FEED_ARCH_lsppchd = "ppc603e"
+FEED_ARCH_lsppchg = "ppc603e"
+FEED_ARCH_storcenter = "ppc603e"
+FEED_ARCH_turbostation = "ppc603e"
+FEED_ARCH_mpc8313e-rdb = "ppce300c3"
+FEED_ARCH_mpc8323e-rdb = "ppce300c2"
+
+
+#strongarm machines, no EABI
+
+FEED_ARCH_collie = "arm-oabi"
+FEED_ARCH_h3600 = "arm-oabi"
+FEED_ARCH_h3800 = "arm-oabi"
+FEED_ARCH_htcwallaby = "arm-oabi"
+FEED_ARCH_jornada56x = "arm-oabi"
+FEED_ARCH_jornada7xx = "arm-oabi"
+FEED_ARCH_shark = "arm-oabi"
+FEED_ARCH_simpad = "arm-oabi"
+
+
+#Tweak packaging for strongarm machines since they can't use EABI
+
+PACKAGE_EXTRA_ARCHS_collie = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_h3600 = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_h3800 = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_simpad = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_htcwallaby = "arm-oabi"
+
+
+#Name the generated images in a sane way
+IMAGE_NAME = "${DISTRO_NAME}-${IMAGE_BASENAME}-${ANGSTROMLIBC}-${ANGSTROM_PKG_FORMAT}-${DISTRO_VERSION}-${MACHINE}"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}"
+
+# KaeilOS *always* has some form of release config, so error out if someone thinks he knows better
+DISTRO_CHECK := "${@bb.data.getVar("DISTRO_VERSION",d,1) or bb.fatal('Remove this line or set a dummy DISTRO_VERSION if you really want to build an unversioned distro')}"
+
+# We want images supporting the following features (for task-base)
diff --git a/conf/distro/include/moko-autorev.inc b/conf/distro/include/moko-autorev.inc
index 08279e8f98..ce9f488e77 100644
--- a/conf/distro/include/moko-autorev.inc
+++ b/conf/distro/include/moko-autorev.inc
@@ -59,8 +59,9 @@ SRCREV_pn-opkg ?= "${AUTOREV}"
SRCREV_pn-opkg-native ?= "${AUTOREV}"
SRCREV_pn-opkg-sdk ?= "${AUTOREV}"
SRCREV_pn-packagekit ?= "${AUTOREV}"
+SRCREV_pn-paroli ?= "${AUTOREV}"
SRCREV_pn-pyefl-sudoku ?= "${AUTOREV}"
-SRCREV_pn-python-gsmd ?= "${AUTOREV}"
+SRCREV_pn-qi ?= "${AUTOREV}"
SRCREV_pn-tichy ?= "${AUTOREV}"
SRCREV_pn-u-boot-openmoko ?= "${AUTOREV}"
SRCREV_pn-u-boot-openmoko-devel ?= "${AUTOREV}"
diff --git a/conf/distro/include/preferred-gpe-versions-2.8.inc b/conf/distro/include/preferred-gpe-versions-2.8.inc
index 55e51409be..0bcd834b1a 100644
--- a/conf/distro/include/preferred-gpe-versions-2.8.inc
+++ b/conf/distro/include/preferred-gpe-versions-2.8.inc
@@ -78,7 +78,7 @@ PREFERRED_VERSION_gpe-synctool ?= "0.2"
PREFERRED_VERSION_gpe-announce ?= "0.13"
PREFERRED_VERSION_gpe-timesheet ?= "0.32"
PREFERRED_VERSION_gpe-irc ?= "0.08"
-PREFERRED_VERSION_starling ?= "0.2"
+PREFERRED_VERSION_starling ?= "0.9"
PREFERRED_VERSION_gpe-keylock ?= "0.12"
PREFERRED_VERSION_gpe-ownerinfo ?= "0.28"
PREFERRED_VERSION_gpe-question ?= "0.04"
diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc
index 8bcb65542d..2c3b338cce 100644
--- a/conf/distro/include/preferred-om-2008-versions.inc
+++ b/conf/distro/include/preferred-om-2008-versions.inc
@@ -18,7 +18,7 @@ PREFERRED_VERSION_aliens-qt ?= "1.0.0"
PREFERRED_VERSION_alsa-lib ?= "1.0.15"
PREFERRED_VERSION_alsa-oss ?= "1.0.15"
PREFERRED_VERSION_alsa-plugins ?= "1.0.14"
-PREFERRED_VERSION_alsa-state ?= "0.1.0"
+PREFERRED_VERSION_alsa-state ?= "0.2.0"
PREFERRED_VERSION_alsa-utils ?= "1.0.15"
PREFERRED_VERSION_anthy ?= "7811"
PREFERRED_VERSION_anthy-native ?= "7811"
@@ -56,8 +56,8 @@ PREFERRED_VERSION_aumix ?= "2.8"
PREFERRED_VERSION_autoconf ?= "2.61"
PREFERRED_VERSION_autoconf-native ?= "2.61"
PREFERRED_VERSION_autofs ?= "4.1.4"
-PREFERRED_VERSION_automake ?= "1.9.6"
-PREFERRED_VERSION_automake-native ?= "1.9.6"
+PREFERRED_VERSION_automake ?= "1.10.2"
+PREFERRED_VERSION_automake-native ?= "1.10.2"
PREFERRED_VERSION_avahi ?= "0.6.22"
PREFERRED_VERSION_avahi-python ?= "0.6.21"
PREFERRED_VERSION_avahi-ui ?= "0.6.21"
@@ -175,12 +175,12 @@ PREFERRED_VERSION_comprec ?= "0.02"
PREFERRED_VERSION_confuse ?= "2.5"
PREFERRED_VERSION_confuse-native ?= "2.5"
PREFERRED_VERSION_connect ?= "0.1"
-PREFERRED_VERSION_connman ?= "0.8"
+PREFERRED_VERSION_connman ?= "0.10"
PREFERRED_VERSION_conserver ?= "8.1.14"
PREFERRED_VERSION_console-tools ?= "0.3.2"
PREFERRED_VERSION_contacts ?= "0.7"
-PREFERRED_VERSION_coreutils ?= "5.3.0"
-PREFERRED_VERSION_coreutils-native ?= "5.3.0"
+PREFERRED_VERSION_coreutils ?= "7.1"
+PREFERRED_VERSION_coreutils-native ?= "7.1"
PREFERRED_VERSION_corkscrew ?= "2.0"
PREFERRED_VERSION_corsair ?= "0.2.6"
PREFERRED_VERSION_cpio ?= "2.5"
@@ -281,7 +281,7 @@ PREFERRED_VERSION_dvb-image ?= "1.0"
PREFERRED_VERSION_dvbtraffic ?= "0.0cvs20060814"
PREFERRED_VERSION_dviviewer ?= "1.0.2"
PREFERRED_VERSION_e2fsprogs ?= "1.38"
-PREFERRED_VERSION_e2fsprogs-libs ?= "1.42.2"
+PREFERRED_VERSION_e2fsprogs-libs ?= "1.41.2"
PREFERRED_VERSION_e2fsprogs-libs-native ?= "1.35"
PREFERRED_VERSION_e2fsprogs-native ?= "1.38"
PREFERRED_VERSION_e2tools ?= "0.0.16"
@@ -536,7 +536,6 @@ PREFERRED_VERSION_gpe-edit ?= "0.40"
PREFERRED_VERSION_gpe-expenses ?= "0.0.6"
PREFERRED_VERSION_gpe-filemanager ?= "0.30"
PREFERRED_VERSION_gpe-fsi ?= "0.1"
-PREFERRED_VERSION_gpe-gallery ?= "0.97"
PREFERRED_VERSION_gpe-go ?= "0.05"
PREFERRED_VERSION_gpe-helpviewer ?= "1.0"
PREFERRED_VERSION_gpe-icons ?= "0.25"
@@ -589,7 +588,7 @@ PREFERRED_VERSION_gpicview ?= "0.1.5"
PREFERRED_VERSION_gpm ?= "1.20.1"
PREFERRED_VERSION_gpp ?= "2.21"
PREFERRED_VERSION_gpsbabel ?= "1.3.3"
-PREFERRED_VERSION_gpsd ?= "2.34"
+PREFERRED_VERSION_gpsd ?= "2.38"
PREFERRED_VERSION_gpsdrive ?= "2.10pre4"
PREFERRED_VERSION_gpstk ?= "1.2"
PREFERRED_VERSION_gqview ?= "2.1.1"
@@ -606,16 +605,16 @@ PREFERRED_VERSION_gsoap ?= "2.7.7"
PREFERRED_VERSION_gsoap-native ?= "2.7.7"
PREFERRED_VERSION_gsoko ?= "0.4.2-gpe6"
PREFERRED_VERSION_gspcav1 ?= "20070110"
-PREFERRED_VERSION_gst-ffmpeg ?= "0.10.2"
+PREFERRED_VERSION_gst-ffmpeg ?= "0.10.6"
PREFERRED_VERSION_gst-meta-base ?= "0.10"
PREFERRED_VERSION_gst-plugin-pulse ?= "0.9.7"
PREFERRED_VERSION_gst-plugins-bad ?= "0.10.6"
-PREFERRED_VERSION_gst-plugins-base ?= "0.10.17"
+PREFERRED_VERSION_gst-plugins-base ?= "0.10.22"
PREFERRED_VERSION_gst-plugins-farsight ?= "0.10.1"
-PREFERRED_VERSION_gst-plugins-good ?= "0.10.7"
-PREFERRED_VERSION_gst-plugins-ugly ?= "0.10.7"
+PREFERRED_VERSION_gst-plugins-good ?= "0.10.13"
+PREFERRED_VERSION_gst-plugins-ugly ?= "0.10.10"
PREFERRED_VERSION_gst-pulse = "0.9.7"
-PREFERRED_VERSION_gstreamer ?= "0.10.17"
+PREFERRED_VERSION_gstreamer ?= "0.10.22"
PREFERRED_VERSION_gthumb ?= "2.6.9"
PREFERRED_VERSION_gtk+ ?= "2.12.11"
PREFERRED_VERSION_gtk2-ssh-askpass ?= "0.3"
@@ -659,7 +658,7 @@ PREFERRED_VERSION_hexatrolic ?= "1.0beta3"
PREFERRED_VERSION_hfsplusutils ?= "1.0.4-4"
PREFERRED_VERSION_hfsutils ?= "3.2.6"
PREFERRED_VERSION_hibernate-script ?= "1.12"
-PREFERRED_VERSION_hicolor-icon-theme ?= "0.9"
+PREFERRED_VERSION_hicolor-icon-theme ?= "0.10"
PREFERRED_VERSION_hiker ?= "0.9.1"
PREFERRED_VERSION_hildon-base-lib ?= "0.11.1"
PREFERRED_VERSION_hildon-control-panel ?= "0.9.1-1.2"
@@ -769,7 +768,6 @@ PREFERRED_VERSION_keymaps ?= "1.0"
PREFERRED_VERSION_keyring ?= "0.6.8"
PREFERRED_VERSION_kf ?= "0.5.4.1"
PREFERRED_VERSION_kismet ?= "2007-10-R1"
-PREFERRED_VERSION_klibc ?= "1.1.1"
PREFERRED_VERSION_klimt ?= "0.6.1"
PREFERRED_VERSION_knights ?= "1.14"
PREFERRED_VERSION_konqueror-embedded ?= "20070212"
@@ -1042,10 +1040,10 @@ PREFERRED_VERSION_libtinymail ?= "0.0.3"
PREFERRED_VERSION_libtododb ?= "0.11"
PREFERRED_VERSION_libtomcrypt ?= "0.97b"
PREFERRED_VERSION_libtomoe-gtk ?= "0.1.0"
-PREFERRED_VERSION_libtool ?= "1.5.24"
-PREFERRED_VERSION_libtool-cross ?= "1.5.10"
-PREFERRED_VERSION_libtool-native ?= "1.5.10"
-PREFERRED_VERSION_libtool-sdk ?= "1.5.10"
+PREFERRED_VERSION_libtool ?= "2.2.4"
+PREFERRED_VERSION_libtool-cross ?= "2.2.4"
+PREFERRED_VERSION_libtool-native ?= "2.2.4"
+PREFERRED_VERSION_libtool-sdk ?= "2.2.4"
PREFERRED_VERSION_libungif ?= "4.1.3"
PREFERRED_VERSION_libupnp ?= "1.3.1"
PREFERRED_VERSION_liburiparser ?= "0.5.1"
@@ -1313,7 +1311,7 @@ PREFERRED_VERSION_nano ?= "2.0.7"
PREFERRED_VERSION_nasm-native ?= "0.98.38"
PREFERRED_VERSION_nautilus ?= "2.12.2"
PREFERRED_VERSION_nautilus-cd-burner ?= "2.8.5"
-PREFERRED_VERSION_navit ?= "0.0.4"
+PREFERRED_VERSION_navit ?= "0.1.0"
PREFERRED_VERSION_nbd ?= "2.8.7"
PREFERRED_VERSION_ncftp ?= "3.2.0"
PREFERRED_VERSION_ncmpc ?= "0.11.1"
@@ -1435,15 +1433,15 @@ PREFERRED_VERSION_phoneserver ?= "1.0"
PREFERRED_VERSION_php ?= "5.2.0"
PREFERRED_VERSION_php-native ?= "5.2.0"
PREFERRED_VERSION_picocom ?= "1.4"
-PREFERRED_VERSION_pidgin ?= "2.2.1"
+PREFERRED_VERSION_pidgin ?= "2.5.3"
PREFERRED_VERSION_pine ?= "4.64"
PREFERRED_VERSION_pipeman ?= "1.0.0"
PREFERRED_VERSION_pipepanic ?= "0.1.1"
PREFERRED_VERSION_pivotinit ?= "1.0.0"
PREFERRED_VERSION_pixman ?= "0.11.4"
PREFERRED_VERSION_pixops-test ?= "1.0"
-PREFERRED_VERSION_pkgconfig ?= "0.22"
-PREFERRED_VERSION_pkgconfig-native ?= "0.22"
+PREFERRED_VERSION_pkgconfig ?= "0.23"
+PREFERRED_VERSION_pkgconfig-native ?= "0.23"
PREFERRED_VERSION_plinciv ?= "0.16"
PREFERRED_VERSION_plone ?= "2.1.2"
PREFERRED_VERSION_plot ?= "0.28"
@@ -1523,7 +1521,7 @@ PREFERRED_VERSION_python-logilab-common ?= "0.9.3"
PREFERRED_VERSION_python-lxml ?= "1.3.3"
PREFERRED_VERSION_python-mad ?= "0.6"
PREFERRED_VERSION_python-mysqldb ?= "1.2.1"
-PREFERRED_VERSION_python-native ?= "2.5.1"
+PREFERRED_VERSION_python-native ?= "2.6.1"
PREFERRED_VERSION_python-numarray ?= "1.1.1"
PREFERRED_VERSION_python-numeric ?= "23.7"
PREFERRED_VERSION_python-ogg ?= "1.3"
@@ -1539,8 +1537,8 @@ PREFERRED_VERSION_python-pyfits ?= "1.1"
PREFERRED_VERSION_python-pyflakes ?= "0.2.1"
PREFERRED_VERSION_python-pygame ?= "1.8.1"
PREFERRED_VERSION_python-pygnome ?= "2.16.2"
-PREFERRED_VERSION_python-pygobject ?= "2.14.2"
-PREFERRED_VERSION_python-pygobject-native ?= "2.14.2"
+PREFERRED_VERSION_python-pygobject ?= "2.16.0"
+PREFERRED_VERSION_python-pygobject-native ?= "2.16.0"
PREFERRED_VERSION_python-pygoogle ?= "0.6"
PREFERRED_VERSION_python-pygtk-1.2 ?= "0.6.12"
PREFERRED_VERSION_python-pygtk ?= "2.10.4"
@@ -1554,9 +1552,9 @@ PREFERRED_VERSION_python-pyrad ?= "0.8"
PREFERRED_VERSION_python-pyraf ?= "1.4"
PREFERRED_VERSION_python-pyreverse ?= "0.5.2"
PREFERRED_VERSION_python-pyrex ?= "0.9.8.4"
-PREFERRED_VERSION_python-pyrex-native ?= "0.9.8.4"
+PREFERRED_VERSION_python-pyrex-native ?= "0.9.8.5"
PREFERRED_VERSION_python-pyro ?= "3.7"
-PREFERRED_VERSION_python-pyserial ?= "2.2"
+PREFERRED_VERSION_python-pyserial ?= "2.4"
PREFERRED_VERSION_python-pytester ?= "0.6.0"
PREFERRED_VERSION_python-pythondaap ?= "0.4"
PREFERRED_VERSION_python-pyvisa ?= "1.1"
@@ -1569,7 +1567,7 @@ PREFERRED_VERSION_python-scapy ?= "1.1.1"
PREFERRED_VERSION_python-scons ?= "0.97"
PREFERRED_VERSION_python-scons-native ?= "0.97"
PREFERRED_VERSION_python-setuptools ?= "0.6c8"
-PREFERRED_VERSION_python-setuptools-native ?= "0.6c8"
+PREFERRED_VERSION_python-setuptools-native ?= "0.6c9"
PREFERRED_VERSION_python-sgmlop ?= "1.1"
PREFERRED_VERSION_python-simplejson ?= "1.7.1"
PREFERRED_VERSION_python-snmplib ?= "0.1.1"
@@ -1812,7 +1810,6 @@ PREFERRED_VERSION_tapioca-xmpp ?= "0.3.9"
PREFERRED_VERSION_tar ?= "1.18"
PREFERRED_VERSION_tasklistapplet ?= "1.0.5"
PREFERRED_VERSION_tasks ?= "0.10"
-PREFERRED_VERSION_tcl ?= "8.4.11"
PREFERRED_VERSION_tcpdump ?= "3.9.7"
PREFERRED_VERSION_tcpick ?= "0.1.22"
PREFERRED_VERSION_tcptraceroute ?= "1.5beta6"
@@ -1840,7 +1837,6 @@ PREFERRED_VERSION_thunar ?= "0.8.0"
PREFERRED_VERSION_thunderbird ?= "1.0.7"
PREFERRED_VERSION_tickypip ?= "0.1.2"
PREFERRED_VERSION_tickypip-levels ?= "1.1"
-PREFERRED_VERSION_tiff ?= "3.7.2"
PREFERRED_VERSION_tightvnc ?= "1.3dev7"
PREFERRED_VERSION_tiinit ?= "3.2.26"
PREFERRED_VERSION_time ?= "1.7"
@@ -1850,7 +1846,6 @@ PREFERRED_VERSION_tin ?= "1.9.1"
PREFERRED_VERSION_tinc ?= "1.0.2"
PREFERRED_VERSION_tinylogin ?= "1.4"
PREFERRED_VERSION_tinyscheme ?= "1.35"
-PREFERRED_VERSION_tk ?= "8.4.11"
PREFERRED_VERSION_tmake ?= "1.11"
PREFERRED_VERSION_tmdns ?= "20030116"
PREFERRED_VERSION_tn5250 ?= "0.16.5"
@@ -1932,8 +1927,8 @@ PREFERRED_VERSION_util-macros ?= "1.1.5"
PREFERRED_VERSION_util-macros-native ?= "1.1.5"
PREFERRED_VERSION_uucp ?= "1.07"
PREFERRED_VERSION_v4l2apps ?= "20020317"
-PREFERRED_VERSION_vala ?= "0.5.1"
-PREFERRED_VERSION_vala-native ?= "0.5.1"
+PREFERRED_VERSION_vala ?= "0.5.7"
+PREFERRED_VERSION_vala-native ?= "0.5.7"
PREFERRED_VERSION_vde ?= "2.0.2"
PREFERRED_VERSION_vectoroids ?= "1.1.0"
PREFERRED_VERSION_videoplayer ?= "0.1"
@@ -1953,7 +1948,7 @@ PREFERRED_VERSION_void11 ?= "0.2.0"
PREFERRED_VERSION_vorbis-tools ?= "1.0.1"
PREFERRED_VERSION_vpnc ?= "0.3.3"
PREFERRED_VERSION_vsftpd ?= "2.0.5"
-PREFERRED_VERSION_vte ?= "0.16.13"
+PREFERRED_VERSION_vte ?= "0.16.14"
PREFERRED_VERSION_vtun ?= "2.6"
PREFERRED_VERSION_w3cam ?= "0.7.2"
PREFERRED_VERSION_wakelan ?= "1.1"
diff --git a/conf/distro/include/preferred-slugos-versions.inc b/conf/distro/include/preferred-slugos-versions.inc
new file mode 100644
index 0000000000..6bab616cb1
--- /dev/null
+++ b/conf/distro/include/preferred-slugos-versions.inc
@@ -0,0 +1,105 @@
+#===============================================================================#
+#===============================================================================#
+# NOTE NOTE NOTE
+#
+# This *forces* the preferred kernel version; making it unable to be overridden
+# in the local.conf file. This is a Very Bad Thing. This is temporary, and
+# is intended to facilitate some SlugOS-specific testing without disturbing
+# other distros that use the ixp4xx machine type (which is currently where the
+# preferred kernel version is set).
+#
+# This *must* be removed after initial testing is completed. MJW 08-Dec-2008
+#
+PREFERRED_VERSION_linux-ixp4xx = "2.6.27.8+svnr${SRCREV}"
+#
+#===============================================================================#
+#===============================================================================#
+# NOTE NOTE NOTE
+#
+# Override the sane-srcrev file with regard to the opkg versions - this should
+# be removed as soon as opkg starts to work correctly again as newer opkg
+# versions fix a number of bugs and add some desireable features.
+#
+SRCREV_pn-opkg = "160"
+SRCREV_pn-opkg-native = "160"
+SRCREV_pn-opkg-sdk = "160"
+#
+#===============================================================================#
+#===============================================================================#
+
+### Standard package preferred versions go here, sorted
+### alphabetically. Note that the main slugos.inc file
+### may include preferred versions for toolchain components.
+
+PREFERRED_VERSION_automake-native ?= "1.10"
+PREFERRED_VERSION_binutils ?= "2.18.50.0.7"
+PREFERRED_VERSION_binutils-cross ?= "2.18.50.0.7"
+PREFERRED_VERSION_binutils-cross-sdk ?= "2.18.50.0.7"
+PREFERRED_VERSION_busybox ?= "1.13.2"
+PREFERRED_VERSION_dbus ?= "1.2.1"
+PREFERRED_VERSION_gcc ?= "4.2.4"
+PREFERRED_VERSION_gcc-cross ?= "4.2.4"
+PREFERRED_VERSION_gcc-cross-sdk ?= "4.2.4"
+PREFERRED_VERSION_gcc-cross-initial ?= "4.2.4"
+PREFERRED_VERSION_gcc-cross-intermediate ?= "4.2.4"
+PREFERRED_VERSION_glib-2.0 ?= "2.18.3"
+PREFERRED_VERSION_glib-2.0-native ?= "2.18.0"
+PREFERRED_VERSION_glibc ?= "2.6.1"
+PREFERRED_VERSION_glibc-initial ?= "2.6.1"
+PREFERRED_VERSION_ipkg ?= "0.99.163"
+PREFERRED_VERSION_ipkg-native ?= "0.99.163"
+PREFERRED_VERSION_libtool ?= "1.5.10"
+PREFERRED_VERSION_libtool-native ?= "1.5.10"
+PREFERRED_VERSION_libtool-cross ?= "1.5.10"
+PREFERRED_VERSION_libtool-sdk ?= "1.5.10"
+PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
+PREFERRED_VERSION_m4 ?= "1.4.8"
+PREFERRED_VERSION_m4-native ?= "1.4.8"
+PREFERRED_VERSION_netatalk ?= "2.0.3"
+PREFERRED_VERSION_nslu2-linksys-firmware ?= "2.3r63"
+PREFERRED_VERSION_pkgconfig ?= "0.23"
+PREFERRED_VERSION_pkgconfig-native ?= "0.23"
+PREFERRED_VERSION_udev ?= "118"
+
+##################### Stuff with special notes, and broken stuff:
+
+# libtool/pkgconfig victims -- these packages are locked down because
+# newer versions also require newer libtool/pkgconfig versions.
+
+PREFERRED_VERSION_avahi ?= "0.6.23"
+PREFERRED_VERSION_gstreamer ?= "0.10.17"
+PREFERRED_VERSION_gst-plugins-base ?= "0.10.17"
+PREFERRED_VERSION_tiff ?= "3.7.2"
+PREFERRED_VERSION_fakeroot ?= "1.9.6"
+PREFERRED_VERSION_fakeroot-native ?= "1.9.6"
+
+# Hack alert - selecting this version of libusb effectively selects
+# the use of libusb1 and libusb-compat in the case that something
+# still depends on libusb. This is required because otherwise
+# libusb will overwrite libusb-compat in staging.
+PREFERRED_VERSION_libusb ?= "0.0.0"
+
+# mtd-utils 1.2.0+git cannot be fetched, so SlugOS will stick
+# with 1.1.0 for now:
+PREFERRED_VERSION_mtd-utils ?= "1.1.0"
+
+# boost 1.36 won't build
+PREFERRED_VERSION_boost ?= "1.33.1"
+
+####################### Obsolete stuff, not sure why we keep this:
+
+# New pango and older glib-2.0 versions don't mix,
+# so specify exactly what we would like to build.
+#PREFERRED_VERSION_pango ?= "1.20.5"
+#PREFERRED_VERSION_glib-2.0 ?= "2.16.1"
+#PREFERRED_VERSION_cairo ?= "1.4.8"
+#
+# Stick with an older gettext and e2fsprogs stuff
+# and gnutls... (our autotools is too old at the moment)
+#PREFERRED_VERSION_gnutls ?= "1.6.3"
+#PREFERRED_VERSION_gettext ?= "0.14.1"
+#PREFERRED_VERSION_gettext-native ?= "0.14.1"
+#PREFERRED_VERSION_e2fsprogs-libs ?= "1.39"
+#PREFERRED_VERSION_e2fsprogs ?= "1.38"
+#PREFERRED_VERSION_e2fsprogs-native ?= "1.38"
+
diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc b/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
index a81d5eca71..1f6076525f 100644
--- a/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
+++ b/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
@@ -2,6 +2,6 @@
PREFERRED_VERSION_xserver-xorg ?= "1.5.3"
PREFERRED_VERSION_xf86-input-evdev ?= "2.1.0"
+PREFERRED_VERSION_xf86-video-geode ?= "2.11.0"
PREFERRED_VERSION_libxi ?= "1.2.0"
PREFERRED_VERSION_inputproto ?= "1.5.0"
-
diff --git a/conf/distro/include/sane-feed-deb.inc b/conf/distro/include/sane-feed-deb.inc
new file mode 100644
index 0000000000..4f38b8f936
--- /dev/null
+++ b/conf/distro/include/sane-feed-deb.inc
@@ -0,0 +1,6 @@
+
+
+INHERIT += "package_deb"
+
+PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
+PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
diff --git a/conf/distro/include/sane-feed-ipk.inc b/conf/distro/include/sane-feed-ipk.inc
new file mode 100644
index 0000000000..a33a4ad2b4
--- /dev/null
+++ b/conf/distro/include/sane-feed-ipk.inc
@@ -0,0 +1,5 @@
+INHERIT += "package_ipk"
+
+PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
+PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
+
diff --git a/conf/distro/include/sane-feed.inc b/conf/distro/include/sane-feed.inc
new file mode 100644
index 0000000000..5bc19a1806
--- /dev/null
+++ b/conf/distro/include/sane-feed.inc
@@ -0,0 +1,170 @@
+# Originally brought to you by the Angstrom Distribution
+
+#############################################################################
+# FEED BUILDING SETTINGS
+#############################################################################
+
+# Put links to sources in deploy/sources to make it easier for people to be GPL compliant
+INHERIT += "src_distribute_local"
+SRC_DIST_LOCAL ?= "symlink"
+
+# Add FEED_ARCH to overrides
+OVERRIDES .= ":${FEED_ARCH}"
+
+FEED_ARCH ?= "${TARGET_ARCH}"
+
+# Blackfin machines
+FEED_ARCH_bfin = "blackfin"
+
+# armv4t machines
+
+FEED_ARCH_acern30 = "armv4t"
+FEED_ARCH_amsdelta = "armv4t"
+FEED_ARCH_ep93xx = "armv4t"
+FEED_ARCH_eteng500 = "armv4t"
+FEED_ARCH_om-gta01 = "armv4t"
+FEED_ARCH_om-gta02 = "armv4t"
+FEED_ARCH_h1940 = "armv4t"
+FEED_ARCH_h6300 = "armv4t"
+FEED_ARCH_kb9202 = "armv4t"
+FEED_ARCH_ks8695 = "armv4t"
+FEED_ARCH_rx1950 = "armv4t"
+FEED_ARCH_rx3000 = "armv4t"
+FEED_ARCH_sarge-at91 = "armv4t"
+FEED_ARCH_smdk2440 = "armv4t"
+FEED_ARCH_smdk2443 = "armv4t"
+
+# armv5t machines
+
+FEED_ARCH_a1200 = "armv5te"
+FEED_ARCH_a780 = "armv5te"
+FEED_ARCH_akita = "armv5te"
+FEED_ARCH_asus620 = "armv5te"
+FEED_ARCH_asus730 = "armv5te"
+FEED_ARCH_at91sam9263ek = "armv5te"
+FEED_ARCH_aximx50 = "armv5te"
+FEED_ARCH_aximx50v = "armv5te"
+FEED_ARCH_c7x0 = "armv5te"
+FEED_ARCH_compulab-pxa270 = "armv5te"
+FEED_ARCH_davinci-dvevm = "armv5te"
+FEED_ARCH_devkitidp-pxa255 = "armv5te"
+FEED_ARCH_e680 = "armv5te"
+FEED_ARCH_er0100 = "armv5te"
+FEED_ARCH_gumstix = "armv5te"
+FEED_ARCH_gumstix-verdex = "armv5te"
+FEED_ARCH_gumstix-connex = "armv5te"
+FEED_ARCH_h1910 = "armv5te"
+FEED_ARCH_h2200 = "armv5te"
+FEED_ARCH_h3900 = "armv5te"
+FEED_ARCH_h4000 = "armv5te"
+FEED_ARCH_h5000 = "armv5te"
+FEED_ARCH_htcalpine = "armv5te"
+FEED_ARCH_htcapache = "armv5te"
+FEED_ARCH_htcblueangel = "armv5te"
+FEED_ARCH_htchimalaya = "armv5te"
+FEED_ARCH_htcsable = "armv5te"
+FEED_ARCH_htctornado = "armv5te"
+FEED_ARCH_htcuniversal = "armv5te"
+FEED_ARCH_hx2000 = "armv5te"
+FEED_ARCH_hx4700 = "armv5te"
+FEED_ARCH_ixp4xxle = "armv5te"
+FEED_ARCH_logicpd-pxa270 = "armv5te"
+FEED_ARCH_looxc550 = "armv5te"
+FEED_ARCH_lsarm = "armv5te"
+FEED_ARCH_magician = "armv5te"
+FEED_ARCH_mainstone = "armv5te"
+FEED_ARCH_mnci = "armv5te"
+FEED_ARCH_mtx-3 = "armv5te"
+FEED_ARCH_mx21ads = "armv5te"
+FEED_ARCH_n2100 = "armv5te"
+FEED_ARCH_navman-icn330 = "armv5te"
+FEED_ARCH_netbook-pro = "armv5te"
+FEED_ARCH_nokia770 = "armv5te"
+FEED_ARCH_rokre2 = "armv5te"
+FEED_ARCH_nslu2le = "armv5te"
+FEED_ARCH_omap1510inn = "armv5te"
+FEED_ARCH_omap1610h2 = "armv5te"
+FEED_ARCH_omap1710h3 = "armv5te"
+FEED_ARCH_omap5912osk = "armv5te"
+FEED_ARCH_palmld = "armv5te"
+FEED_ARCH_palmt650 = "armv5te"
+FEED_ARCH_palmt680 = "armv5te"
+FEED_ARCH_palmtc = "armv5te"
+FEED_ARCH_palmtt = "armv5te"
+FEED_ARCH_palmtt3 = "armv5te"
+FEED_ARCH_palmtt5 = "armv5te"
+FEED_ARCH_palmtx = "armv5te"
+FEED_ARCH_palmz31 = "armv5te"
+FEED_ARCH_palmz71 = "armv5te"
+FEED_ARCH_palmz72 = "armv5te"
+FEED_ARCH_poodle = "armv5te"
+FEED_ARCH_qemuarm = "armv5te"
+FEED_ARCH_spitz = "armv5te"
+FEED_ARCH_tosa = "armv5te"
+FEED_ARCH_triton = "armv5te"
+
+FEED_ARCH_ixp4xxbe = "armv5teb"
+FEED_ARCH_nslu2be = "armv5teb"
+
+# armv6 machines
+
+FEED_ARCH_mx31ads = "armv6"
+FEED_ARCH_mx31moboard = "armv6"
+FEED_ARCH_nokia800 = "armv6"
+FEED_ARCH_omap2420h4 = "armv6"
+FEED_ARCH_omap2430sdp = "armv6"
+
+# i486 machines
+FEED_ARCH_geodegx = "i486"
+FEED_ARCH_geodelx = "i486"
+FEED_ARCH_netvista = "i486"
+FEED_ARCH_wrap = "i486"
+FEED_ARCH_x86 = "i486"
+
+# i586 machines
+FEED_ARCH_epia = "i586"
+FEED_ARCH_i586-generic = "i586"
+FEED_ARCH_qemux86 = "i586"
+
+# i686 machines
+
+FEED_ARCH_alix = "i686"
+FEED_ARCH_colinux = "i686"
+FEED_ARCH_guinness = "i686"
+FEED_ARCH_i686-generic = "i686"
+FEED_ARCH_progear = "i686"
+
+# powerpc machines
+
+FEED_ARCH_dht-walnut = "ppc405"
+FEED_ARCH_magicbox = "ppc405"
+FEED_ARCH_xilinx-ml403 = "ppc405"
+FEED_ARCH_xilinx-ml410 = "ppc405"
+FEED_ARCH_sequoia = "ppc440e"
+FEED_ARCH_efika = "ppc603e"
+FEED_ARCH_lite5200 = "ppc603e"
+FEED_ARCH_lsppchd = "ppc603e"
+FEED_ARCH_lsppchg = "ppc603e"
+FEED_ARCH_storcenter = "ppc603e"
+FEED_ARCH_turbostation = "ppc603e"
+FEED_ARCH_mpc8313e-rdb = "ppce300c3"
+FEED_ARCH_mpc8323e-rdb = "ppce300c2"
+
+# strongarm machines, no EABI
+
+FEED_ARCH_collie = "arm-oabi"
+FEED_ARCH_h3600 = "arm-oabi"
+FEED_ARCH_h3800 = "arm-oabi"
+FEED_ARCH_htcwallaby = "arm-oabi"
+FEED_ARCH_jornada56x = "arm-oabi"
+FEED_ARCH_jornada7xx = "arm-oabi"
+FEED_ARCH_shark = "arm-oabi"
+FEED_ARCH_simpad = "arm-oabi"
+
+# Tweak packaging for strongarm machines since they can't use EABI
+
+PACKAGE_EXTRA_ARCHS_collie = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_h3600 = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_h3800 = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_simpad = "arm-oabi"
+PACKAGE_EXTRA_ARCHS_htcwallaby = "arm-oabi"
diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc
index a2fffdf88d..8be99a363d 100644
--- a/conf/distro/include/sane-srcdates.inc
+++ b/conf/distro/include/sane-srcdates.inc
@@ -5,51 +5,6 @@
SRCDATE_at76c503a-modules ?= "20060814"
SRCDATE_prism54-module ?= "20060814"
-# X11 libs, extentions and protos
-SRCDATE_compositeext ?= "20060814"
-SRCDATE_drm ?= "20060814"
-SRCDATE_drm-kernel ?= "20060814"
-SRCDATE_fixesext ?= "20060814"
-SRCDATE_libxext-native ?= "20060814"
-SRCDATE_libxss ?= "20060814"
-SRCDATE_recordext ?= "20060814"
-SRCDATE_renderext ?= "20060814"
-SRCDATE_calibrateproto ?= "20070802"
-SRCDATE_libxcalibrate ?= "20070802"
-SRCDATE_xxf86dgaext ?= "20060814"
-SRCDATE_xxf86vmext ?= "20060814"
-
-# Matchbox / O-hand
-SRCDATE_contacts ?= "20060707"
-SRCDATE_dates ?= "20060707"
-SRCDATE_fstests ?= "20061122"
-SRCDATE_eds-dbus ?= "20070704"
-SRCDATE_libmatchbox ?= "20060612"
-SRCDATE_libfakekey ?= "20051101"
-SRCDATE_matchbox-common ?= "20060612"
-SRCDATE_matchbox-config-gtk ?= "20060612"
-SRCDATE_matchbox-desktop ?= "20060612"
-SRCDATE_matchbox-keyboard ?= "20070816"
-SRCDATE_matchbox-panel ?= "20060612"
-SRCDATE_matchbox-panel-manager ?= "20060612"
-SRCDATE_matchbox-stroke ?= "20060612"
-SRCDATE_matchbox-themes-extra ?= "20060612"
-SRCDATE_matchbox-wm ?= "20060612"
-SRCDATE_libmatchbox ?= "20060612"
-SRCDATE_libfakekey ?= "20051101"
-SRCDATE_psplash ?= "20070330"
-SRCDATE_web ?= "20060613"
-SRCDATE_zaurusd ?= "20060628"
-
-# GPE
-SRCDATE_dasher-gpe ?= "20060814"
-SRCDATE_rosetta ?= "20060804"
-SRCDATE_gpesyncd ?= "20070701"
-
-# GNOME
-SRCDATE_gnome-vfs ?= "20060119"
-SRCDATE_gtkhtml2 ?= "20060323"
-
# Misc packages, sorted by alphabet
SRCDATE_aufs ?= "20081203"
SRCDATE_avetanabt ?= "20060814"
@@ -91,6 +46,7 @@ SRCDATE_xcompmgr ?= "20060814"
SRCDATE_xirssi ?= "20060814"
SRCDATE_xsvg ?= "20060814"
SRCDATE_yamonenv ?= "20060814"
+SRCDATE_zaurusd ?= "20060628"
# Freedesktop.org
SRCDATE_poppler0.6 = "20070708"
diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc
index 077cb85775..e0b8dba733 100644
--- a/conf/distro/include/sane-srcrevs.inc
+++ b/conf/distro/include/sane-srcrevs.inc
@@ -22,6 +22,9 @@ SRCREV_pn-bootchart-lite ?= "4"
SRCREV_pn-clutter-box2d ?= "3197"
SRCREV_pn-clutter-cairo ?= "3210"
SRCREV_pn-clutter-gst ?= "3188"
+SRCREV_pn-clutter-gtk-0.6 ?= "2ba362a1a223c2b28541030a80aa11191615340a"
+SRCREV_pn-clutter-gtk-0.8 ?= "7d3c3230376e731c06c21afa9d8c1d44dbea27cd"
+SRCREV_pn-clutter-gtk ?= "70f4b0cbd568dfa265484a03be3bd08ad15ed12e"
SRCREV_pn-clutter ?= "3240"
SRCREV_pn-comic-reader ?= "54"
SRCREV_pn-connman ?= "103706c4f4da0c89f8b6f33cccdc3149f4ecc09a"
@@ -43,27 +46,29 @@ SRCREV_pn-exalt ?= "79"
SRCREV_pn-exalt-daemon ?= "78"
SRCREV_pn-exalt-module ?= "78"
SRCREV_pn-ezx-boot-usb-native ?= "2371"
+SRCREV_pn-ezx-gen-blob ?= "2426"
SRCREV_pn-ezxd ?= "2074"
SRCREV_pn-elf2flt ?= "1786"
SRCREV_pn-epiphany ?= "7837"
-SRCREV_pn-epydial ?= "215"
SRCREV_pn-etk-theme-ninja ?= "5"
SRCREV_pn-fbgrab-viewer-native ?= "1943"
SRCREV_pn-flashrom ?= "3682"
-SRCREV_pn-frameworkd ?= "b10138017b9fcf4dac8d16f22a184c333ddab9ab"
-SRCREV_pn-frameworkd-devel ?= "${SRCREV_pn-frameworkd}"
+SRCREV_pn-frameworkd ?= "b652f9cc4efbccc1df941c0d93e156631879f174"
+SRCREV_pn-frameworkd-devel ?= "858c8d58d1f7e807f2c09532787c4e7b1a5daa52"
SRCREV_pn-fsod ?= "3fa5eb6f2edcf7c9f0fc2027fda47b91d9f0f136"
+SRCREV_pn-fso-abyss ?= "6ed342f833930474ac506cbaad705c0d8beaa71f"
SRCREV_pn-fso-apm ?= "eb39ce7fb81bfa64e1a9eb5f142ca3d1065be3fa"
-SRCREV_pn-fso-gpsd ?= "15f75f335efb52dd50a22a05f47a0f63eb07378b"
+SRCREV_pn-fso-gpsd ?= "78fe48dffb923175bde9f0aabc3500a9264a57e0"
SRCREV_pn-fso-gsm0710muxd ?= "abcbcd7cc532a8834906de3fc24c8f8fe7643cd4"
-SRCREV_pn-fso-monitord ?= "31b4d3d1a40b1cc2cbe186e5ea80490a0c80b55f"
-SRCREV_pn-fso-sounds ?= "b24d3c2e66fee10a5e288101cd1b6f5bbd3da7e2"
+SRCREV_pn-fso-monitord ?= "0f64979a11d6263c7b7ed0e945a0889744f295f1"
+SRCREV_pn-fso-sounds ?= "3d2cf5231cb0e81770a246530574142bd2b8bbff"
SRCREV_pn-fstests ?= "204"
SRCREV_pn-gconf-dbus ?= "641"
SRCREV_pn-gnuradio ?= "10302"
+SRCREV_pn-gpe-conf ?= "9798"
SRCREV_pn-gpe-contacts ?= "9312"
+SRCREV_pn-gpe-gallery ?= "9376"
SRCREV_pn-gpe-sketchbook ?= "9547"
-SRCREV_pn-gpe-conf ?= "9798"
SRCREV_pn-gsmd2 ?= "963f34df8fa3ff4b301079dcf86e9acea6b6fe0f"
SRCREV_pn-gtkhtml2 ?= "1158"
SRCREV_pn-gypsy ?= "134"
@@ -77,8 +82,10 @@ SRCREV_pn-libefso ?= "60"
SRCREV_pn-libexalt ?= "78"
SRCREV_pn-libexalt-dbus ?= "76"
SRCREV_pn-libfakekey ?= "1455"
-SRCREV_pn-libframeworkd-glib ?= "703017c8f874a325d917931378071c614597110e"
+SRCREV_pn-libframeworkd-glib ?= "e90f7c208356b53c34e025585248ea0a7a2ea13c"
SRCREV_pn-libgdbus ?= "aeab6e3c0185b271ca343b439470491b99cc587f"
+SRCREV_pn-libgsm0710 ?= "6fdfbc2bb50c6ce49d644b92cd371a1df5942e1d"
+SRCREV_pn-libgsm0710mux ?= "a97b263f939f9a09d0a38c3346807215c72a6197"
SRCREV_pn-libgsmd ?= "4505"
SRCREV_pn-libiac ?= "1590"
SRCREV_pn-libjana ?= "713"
@@ -95,8 +102,8 @@ SRCREV_pn-linux-bfin ?= "3758"
SRCREV_pn-linux-hackndev-2.6 ?= "1308"
SRCREV_pn-linux-ixp4xx ?= "1085"
SRCREV_pn-linux-openmoko-2.6.24 ?= "fb42ce6724576fc173faf8abfb04aa2c36d213b7"
-SRCREV_pn-linux-openmoko-2.6.28 ?= "34240a1c06ae36180dee695aa25bbae869b2aa26"
-SRCREV_pn-linux-openmoko-devel ?= "34240a1c06ae36180dee695aa25bbae869b2aa26"
+SRCREV_pn-linux-openmoko-2.6.28 ?= "8aa6cdde17381dd8865d10ba15ee62c092ec2ba5"
+SRCREV_pn-linux-openmoko-devel ?= "b9aa5bf345a0b802af0d10b6cf1079738fe4fd12"
SRCREV_pn-linux-eten ?= "ab2d414f4f13816af0ec0401b608133ca946624a"
SRCREV_pn-llvm-gcc4 ?= "374"
SRCREV_pn-llvm-gcc4-cross ?= "374"
@@ -110,6 +117,7 @@ SRCREV_pn-matchbox-panel-2 ?= "1626"
SRCREV_pn-matchbox-stroke ?= "1820"
SRCREV_pn-mickeydbus ?= "f894801916cc4d0e912e4553490dc215276c52a9"
SRCREV_pn-mickeyterm ?= "f894801916cc4d0e912e4553490dc215276c52a9"
+SRCREV_pn-midori ?= "f30dff433056e239ca775d16f343bdb249f1a338"
SRCREV_pn-moblin-proto ?= "8f2cb524fe06555182c25b4ba3202d7b368ac0ce"
SRCREV_pn-moko-gtk-engine ?= "4734"
SRCREV_pn-mokoko ?= "127"
@@ -171,13 +179,13 @@ SRCREV_pn-openmoko-theme-standard2 ?= "4338"
SRCREV_pn-openmoko-theme-standard2-qvga ?= "3425"
SRCREV_pn-openmoko-today2 ?= "4168"
SRCREV_pn-openmoko-today2-folders ?= "3704"
-SRCREV_pn-openmoko-toolchain-scripts ?= "4878"
+SRCREV_pn-openmoko-toolchain-scripts ?= "4913"
SRCREV_pn-openmoko-worldclock2 ?= "3365"
SRCREV_pn-openocd ?= "517"
SRCREV_pn-openocd-native ?= "517"
-SRCREV_pn-opkg ?= "197"
-SRCREV_pn-opkg-native ?= "197"
-SRCREV_pn-opkg-sdk ?= "197"
+SRCREV_pn-opkg ?= "204"
+SRCREV_pn-opkg-native ?= "204"
+SRCREV_pn-opkg-sdk ?= "204"
SRCREV_pn-opkg-utils ?= "4578"
SRCREV_pn-opkg-utils-native ?= "4595"
SRCREV_pn-oprofileui ?= "173"
@@ -185,15 +193,15 @@ SRCREV_pn-packagekit ?= "813fa8cfb139246cf180d52895b52b28616ae2f5"
SRCREV_pn-paroli ?= "9279b50ed72a94100d7f0f49090043134302f2eb"
SRCREV_pn-portaudio-v19 ?= "1387"
SRCREV_pn-psplash ?= "249"
-SRCREV_pn-pty-forward-native ?= "4214"
+SRCREV_pn-pty-forward-native ?= "4907"
SRCREV_pn-pyefl-sudoku ?= "49"
SRCREV_pn-pygsm ?= "976477f6b403f422b4ea730f71ebf409f6671141"
SRCREV_pn-pylgrim ?= "20"
-SRCREV_pn-pyneod ?= "41de4d538b50b27ab2a2f5aae1a180b880a05b6a"
-SRCREV_pn-pyneog ?= "41de4d538b50b27ab2a2f5aae1a180b880a05b6a"
+SRCREV_pn-python-coherence ?= "1161"
SRCREV_pn-python-connexion ?= "1439"
SRCREV_pn-python-formencode ?= "3148"
SRCREV_pn-python-gsmd ?= "148"
+SRCREV_pn-python-pycrypto ?= "d087280d7e9643a3e3f68f209932119fe6738b3c"
SRCREV_pn-python-pyrtc ?= "eb39ce7fb81bfa64e1a9eb5f142ca3d1065be3fa"
SRCREV_pn-python-pyyaml ?= "344"
QEMUSRCREV ?= "4242"
@@ -201,11 +209,12 @@ SRCREV_pn-tslib ?= "53"
SRCREV_pn-qemu-native ?= "${QEMUSRCREV}"
SRCREV_pn-qemu-sdk ?= "${QEMUSRCREV}"
SRCREV_pn-qemu ?= "${QEMUSRCREV}"
-SRCREV_pn-qi ?= "ed52486b43dca91891305b9e832c8366a2742798"
+SRCREV_pn-qi ?= "3b8513d8b3d9615ebda605de4bda18371aa3f359"
SRCREV_pn-remoko ?= "121"
SRCREV_pn-remoko-server ?= "121"
-SRCREV_pn-s3c24xx-gpio ?= "4130"
-SRCREV_pn-serial-forward ?= "4214"
+SRCREV_pn-s3c24xx-gpio ?= "4949"
+SRCREV_pn-s3c64xx-gpio ?= "4949"
+SRCREV_pn-serial-forward ?= "4907"
SRCREV_pn-settings-daemon ?= "2006"
SRCREV_pn-sjf2410-linux-native ?= "4268"
SRCREV_pn-socketcan-modules ?= "917"
@@ -215,28 +224,29 @@ SRCREV_pn-starling ?= "9574"
SRCREV_pn-table ?= "2191"
SRCREV_pn-tichy ?= "ab68d849502009cf3214df48ffa8075a10cc2177"
SRCREV_pn-tmut ?= "60"
-SRCREV_pn-toscoterm ?= "52bf31309b6cc5f669f4cab3b1f04d491c2680c7"
+SRCREV_pn-toscoterm ?= "f02add76f365a2fecd2dbefc230ceaab20244f96"
SRCREV_pn-u-boot-openmoko ?= "650149a53dbdd48bf6dfef90930c8ab182adb512"
SRCREV_pn-u-boot-openmoko-devel ?= "ba029a1426bfca169572bf80d50a8b190a6b0e19"
SRCREV_pn-uclibc ?= "24279"
SRCREV_pn-uclibc-initial ?= "24279"
SRCREV_pn-usbpath ?= "3172"
SRCREV_pn-usbpath-native ?= "3172"
-SRCREV_pn-vala-terminal ?= "502d62d7eb100f86380b0e78474cc360ad7944b5"
-SRCREV_pn-webkit-gtk ?= "39964"
+SRCREV_pn-vala-terminal ?= "94117f453ce884e9c30b611fae6fc19f85f98f2b"
+SRCREV_pn-webkit-gtk ?= "40814"
SRCREV_pn-webkit-qt ?= "28656"
SRCREV_pn-webkit-qtopia ?= "28656"
SRCREV_pn-wlan-ng-modules ?= "1859"
SRCREV_pn-wlan-ng-utils ?= "1859"
SRCREV_pn-wmiconfig ?= "4522"
+SRCREV_pn-xf86-video-glamo ?= "8062d7aa7bac7e06c1a00bd88ca78098550606ed"
SRCREV_pn-xoo ?= "1971"
SRCREV_pn-xserver-kdrive-glamo ?= "9b28d998424c77fbc057dd3a022ccbb122793a52"
-SRCREV_pn-zhone ?= "cedaa8a6dd70fc3e13bd8bcda7fe84019cf9ef54"
+SRCREV_pn-zhone ?= "f38cc52fbf11f7fe945797a6b8ade29ed479d924"
# Enlightenment Foundation Libraries
# Caution: This is not alphabetically, but (roughly) dependency-sorted.
# Please leave it like that.
-EFL_SRCREV ?= "38544"
+EFL_SRCREV ?= "39263"
SRCREV_pn-edb-native ?= "${EFL_SRCREV}"
SRCREV_pn-edb ?= "${EFL_SRCREV}"
SRCREV_pn-eina-native ?= "${EFL_SRCREV}"
diff --git a/conf/distro/include/sane-toolchain-eglibc.inc b/conf/distro/include/sane-toolchain-eglibc.inc
new file mode 100644
index 0000000000..e780349137
--- /dev/null
+++ b/conf/distro/include/sane-toolchain-eglibc.inc
@@ -0,0 +1,37 @@
+# Originally brought to you by the Angstrom Distribution
+
+# eglibc:
+PREFERRED_PROVIDER_virtual/libiconv = "eglibc"
+PREFERRED_PROVIDER_virtual/libintl = "eglibc"
+PREFERRED_PROVIDER_virtual/libc = "eglibc"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial = "eglibc-initial"
+
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "eglibc"
+PREFERRED_PROVIDER_virtual/arm${TARGET_VENDOR}-linux-gnueabi-libc-for-gcc = "eglibc"
+PREFERRED_PROVIDER_virtual/armeb${TARGET_VENDOR}-linux-gnueabi-libc-for-gcc = "eglibc"
+PREFERRED_PROVIDER_virtual/arm${TARGET_VENDOR}-linux-libc-for-gcc = "eglibc"
+PREFERRED_PROVIDER_virtual/powerpc${TARGET_VENDOR}-linux-libc-for-gcc = "eglibc"
+PREFERRED_PROVIDER_virtual/mipsel${TARGET_VENDOR}-linux-libc-for-gcc = "eglibc"
+PREFERRED_PROVIDER_virtual/sparc${TARGET_VENDOR}-linux-libc-for-gcc = "eglibc"
+
+TARGET_OS = "linux${@['','-gnueabi'][bb.data.getVar('TARGET_ARCH',d,1) in ['arm', 'armeb'] and bb.data.getVar('MACHINE',d) not in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
+
+#TARGET_OS = "linux-gnuspe"
+
+#mess with compiler flags to use -Os instead of -O2
+#Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info
+# perl has some problems, see http://bugs.openembedded.net/show_bug.cgi?id=1616
+# [23:00] oxo: glibc (any version) on sparc does not like (repeat me) "-Os"
+
+FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"
+FULL_OPTIMIZATION_pn-perl = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O1"
+FULL_OPTIMIZATION_sparc = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
+
+BUILD_OPTIMIZATION = "-Os"
+BUILD_OPTIMIZATION_pn-perl = "-O1"
+BUILD_OPTIMIZATION_sparc = "-O2"
+
+TARGET_LINK_HASH_STYLE = "${@['-Wl,--hash-style=gnu',''][bb.data.getVar('TARGET_ARCH',d,1) in ['mips', 'mipsel']]}"
+
+CXXFLAGS += "-fvisibility-inlines-hidden"
+
diff --git a/conf/distro/include/sane-toolchain-glibc.inc b/conf/distro/include/sane-toolchain-glibc.inc
new file mode 100644
index 0000000000..b14f880328
--- /dev/null
+++ b/conf/distro/include/sane-toolchain-glibc.inc
@@ -0,0 +1,39 @@
+# glibc:
+PREFERRED_PROVIDER_virtual/libiconv ?= "glibc"
+PREFERRED_PROVIDER_virtual/libintl ?= "glibc"
+PREFERRED_PROVIDER_virtual/libc ?= "glibc"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial ?= "glibc-initial"
+PREFERRED_PROVIDER_linux-libc-headers ?= "linux-libc-headers"
+
+#Set preferred provider for the C library that is used to build the crosscompiler (NPTL voodoo)
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/arm-angstrom-linux-gnueabi-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/armeb-angstrom-linux-gnueabi-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/arm-angstrom-linux-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/powerpc-angstrom-linux-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/mipsel-angstrom-linux-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/sparc-angstrom-linux-libc-for-gcc = "glibc"
+
+
+TARGET_OS = "linux${@['','-gnueabi'][bb.data.getVar('TARGET_ARCH',d,1) in ['arm', 'armeb'] and bb.data.getVar('MACHINE',d) not in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
+
+#mess with compiler flags to use -Os instead of -O2
+#Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info
+# perl has some problems, see http://bugs.openembedded.net/show_bug.cgi?id=1616
+# [23:00] oxo: glibc (any version) on sparc does not like (repeat me) "-Os"
+
+FULL_OPTIMIZATION = "-fexpensive-optimizations -frename-registers -fomit-frame-pointer -O2"
+
+FULL_OPTIMIZATION_pn-perl = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O1"
+FULL_OPTIMIZATION_pn-glibc = "-fexpensive-optimizations -fomit-frame-pointer -O2"
+FULL_OPTIMIZATION_sparc = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2"
+
+BUILD_OPTIMIZATION = "-O2"
+BUILD_OPTIMIZATION_pn-perl = "-O1"
+BUILD_OPTIMIZATION_pn-glibc = "-O2"
+BUILD_OPTIMIZATION_sparc = "-O2"
+
+TARGET_LINK_HASH_STYLE = "${@['-Wl,--hash-style=gnu',''][bb.data.getVar('TARGET_ARCH',d,1) in ['mips', 'mipsel']]}"
+
+CXXFLAGS += "-fvisibility-inlines-hidden"
+
diff --git a/conf/distro/include/sane-toolchain-oabi.inc b/conf/distro/include/sane-toolchain-oabi.inc
new file mode 100644
index 0000000000..816d44230e
--- /dev/null
+++ b/conf/distro/include/sane-toolchain-oabi.inc
@@ -0,0 +1,2 @@
+PACKAGE_ARCH = "arm-oabi"
+BASE_PACKAGE_ARCH = "arm-oabi"
diff --git a/conf/distro/include/sane-toolchain-uclibc.inc b/conf/distro/include/sane-toolchain-uclibc.inc
new file mode 100644
index 0000000000..66ac81a508
--- /dev/null
+++ b/conf/distro/include/sane-toolchain-uclibc.inc
@@ -0,0 +1,42 @@
+# Originally brought to you by the Angstrom Distribution
+
+# uclibc:
+#fix some iconv issues, needs to be adjusted when doing uclibc builds
+PREFERRED_PROVIDER_virtual/libc = "uclibc"
+PREFERRED_PROVIDER_virtual/libiconv ?= "libiconv"
+PREFERRED_PROVIDER_virtual/libintl ?= "gettext"
+PREFERRED_PROVIDER_virtual/libintl_avr32 = "proxy-libintl"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "uclibc"
+PREFERRED_PROVIDER_virtual/arm-${TARGET_VENDOR}-linux-uclibcgnueabi-libc-for-gcc = "uclibc-initial"
+PREFERRED_PROVIDER_virtual/armeb-${TARGET_VENDOR}-linux-uclibcgnueabi-libc-for-gcc = "uclibc-initial"
+
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+
+USE_NLS ?= "no"
+USE_NLS_glib-2.0 = "yes"
+USE_NLS_glib-2.0-native = "yes"
+USE_NLS_gcc-cross = "no"
+
+TARGET_OS_UC = "linux${@['-uclibc','-uclibcgnueabi'][bb.data.getVar('TARGET_ARCH',d,1) in ['arm', 'armeb'] and bb.data.getVar('MACHINE',d) not in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
+TARGET_OS = "${@['${TARGET_OS_UC}', 'uclinux-uclibc'][bb.data.getVar('TARGET_ARCH',d) in ['bfin']]}"
+
+#mess with compiler flags to use -Os instead of -O2
+#Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info
+FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"
+BUILD_OPTIMIZATION = "-Os"
+
+#Gcc will die with 'internal consistency error when using the above optimizations
+#with gcc-4.2.1-atmel.1.0.3 (and probably most other avr32 gcc ports).
+#However, some packages require optimizations to compile (e.g. libmad).
+#It appears the guilty optimization is "-frename-registers", leaving that one
+#out allows the build to proceed normally. -fexpensive-optimizations may be OK,
+#it was removed while debugging an issue that ultimately turned out to be due
+#to the ICE fixed by gcc-pr32889.patch. It needs to be tested again.
+#Note that this testing was done without the gcc-pr32889.patch.
+FULL_OPTIMIZATION_avr32 = "-Os -fomit-frame-pointer"
+
+TARGET_LINK_HASH_STYLE = "${@['-Wl,--hash-style=gnu',''][bb.data.getVar('TARGET_ARCH',d,1) in ['mips', 'mipsel', 'avr32']]}"
+
+CXXFLAGS += "-fvisibility-inlines-hidden"
+
diff --git a/conf/distro/include/sane-toolchain-uclinux-uclibc.inc b/conf/distro/include/sane-toolchain-uclinux-uclibc.inc
new file mode 100644
index 0000000000..85ccddf704
--- /dev/null
+++ b/conf/distro/include/sane-toolchain-uclinux-uclibc.inc
@@ -0,0 +1,26 @@
+# Originally brought to you by the Angstrom Distribution
+
+# uclibc:
+#fix some iconv issues, needs to be adjusted when doing uclibc builds
+PREFERRED_PROVIDER_virtual/libc = "uclibc"
+PREFERRED_PROVIDER_virtual/libiconv ?= "libiconv"
+PREFERRED_PROVIDER_virtual/libintl ?= "gettext"
+
+USE_NLS ?= "no"
+USE_NLS_glib-2.0 = "yes"
+USE_NLS_glib-2.0-native = "yes"
+USE_NLS_gcc-cross = "no"
+
+TARGET_OS_UC = "uclinux${@['-uclibc','-uclibcgnueabi'][bb.data.getVar('TARGET_ARCH',d,1) in ['arm', 'armeb'] and bb.data.getVar('MACHINE',d) not in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
+
+#mess with compiler flags to use -Os instead of -O2
+#Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info
+FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"
+BUILD_OPTIMIZATION = "-Os"
+
+#Gcc will die with 'internal consistency error when using the above optimizations
+FULL_OPTIMIZATION_avr32 = ""
+BUILD_OPTIMIZATION_avr32 = ""
+
+CXXFLAGS += "-fvisibility-inlines-hidden"
+
diff --git a/conf/distro/include/sane-toolchain.inc b/conf/distro/include/sane-toolchain.inc
new file mode 100644
index 0000000000..b261d635af
--- /dev/null
+++ b/conf/distro/include/sane-toolchain.inc
@@ -0,0 +1,142 @@
+# Originally brought to you by the Angstrom Distribution
+
+#############################################################################
+# TOOLCHAIN VERSION SETTINGS
+#############################################################################
+
+# Base line versions, good for most things
+PREFERRED_GCC_VERSION ?= "4.2.4"
+PREFERRED_BINUTILS ?= "2.18"
+
+# Prefer glibc 2.6 and uclibc 0.9.30, these have had the most testing.
+PREFERRED_VERSION_glibc ?= "2.6.1"
+PREFERRED_VERSION_glibc-initial ?= "2.6.1"
+PREFERRED_VERSION_uclibc ?= "0.9.30"
+PREFERRED_VERSION_uclibc-initial ?= "0.9.30"
+
+# Some systems need a special gcc version
+PREFERRED_GCC_VERSION_486sx ?= "4.3.2"
+PREFERRED_GCC_VERSION_avr32 ?= "4.2.2"
+PREFERRED_GCC_VERSION_armv7a ?= "4.3.1"
+PREFERRED_GCC_VERSION_bfin ?= "4.1.2"
+PREFERRED_GCC_VERSION_ppc405 ?= "4.1.1"
+PREFERRED_GCC_VERSION_xilinx-ml403 ?= "4.1.1"
+PREFERRED_GCC_VERSION_xilinx-ml403 ?= "4.1.1"
+
+# This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against
+PREFERRED_VERSION_linux-libc-headers = "2.6.23"
+
+# Uncomment this if want need to build an armv7a kernel with CSL toolchain (<2.6.27 don't boot with mainline gcc)
+#KERNEL_CCSUFFIX_armv7a= "-4.2.1+csl-arm-2007q3-53"
+
+# Binutils
+PREFERRED_VERSION_binutils ?= "${PREFERRED_BINUTILS}"
+PREFERRED_VERSION_binutils-cross ?= "${PREFERRED_BINUTILS}"
+PREFERRED_VERSION_binutils-cross-sdk ?= "${PREFERRED_BINUTILS}"
+
+# Avr32 only has patches for binutils 2.17 in OE
+PREFERRED_VERSION_binutils_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
+
+# Compiler versions
+PREFERRED_VERSION_gcc ?= "${PREFERRED_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross ?= "${PREFERRED_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross-sdk ?= "${PREFERRED_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross-initial ?= "${PREFERRED_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross-intermediate ?= "${PREFERRED_GCC_VERSION}"
+
+# Compiler selection
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+
+# Others
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+
+#############################################################################
+# TOOLCHAIN CUSTOMIZATION
+#############################################################################
+
+# Branding
+TARGET_VENDOR = "-oe"
+
+# ARM920T and up can use thumb mode to decrease binary size at the expense of speed
+# (the complete story is a bit more nuanced due to cache starvation)
+# Minimal turns on thumb for armv4t machine according to this RFC:
+# http://lists.linuxtogo.org/pipermail/angstrom-distro-devel/2008-October/002714.html
+
+# We can't set ARM_INSTRUCTION_SET_<override> directly since that will un-overridable in recipes like gcc
+PREFERRED_ARM_INSTRUCTION_SET ?= "arm"
+PREFERRED_ARM_INSTRUCTION_SET_armv4t = "thumb"
+PREFERRED_ARM_INSTRUCTION_SET_armv5te = "thumb"
+PREFERRED_ARM_INSTRUCTION_SET_armv5teb = "thumb"
+ARM_INSTRUCTION_SET = "${PREFERRED_ARM_INSTRUCTION_SET}"
+# "arm" "thumb"
+# The instruction set the compiler should use when generating application
+# code. The kernel is always compiled with arm code at present. arm code
+# is the original 32 bit ARM instruction set, thumb code is the 16 bit
+# encoded RISC sub-set. Thumb code is smaller (maybe 70% of the ARM size)
+# but requires more instructions (140% for 70% smaller code) so may be
+# slower.
+
+THUMB_INTERWORK = "yes"
+# "yes" "no"
+# Whether to compile with code to allow interworking between the two
+# instruction sets. This allows thumb code to be executed on a primarily
+# arm system and vice versa. It is strongly recommended that DISTROs not
+# turn this off - the actual cost is very small.
+
+# We don't want to keep OABI compat
+ARM_KEEP_OABI = "0"
+
+# ARM EABI is softfloat by default, but let's make sure :)
+# make it overridable for platforms with FPU, like ep93xx or i.mx31
+TARGET_FPU_arm ?= "soft"
+TARGET_FPU_armeb ?= "soft"
+TARGET_FPU_ixp4xx ?= "soft"
+TARGET_FPU_ppc405 ?= "soft"
+
+TARGET_FPU_armv6 ?= "hard"
+TARGET_FPU_armv6-novfp ?= "soft"
+TARGET_FPU_armv7a ?= "hard"
+TARGET_FPU_ppc603e ?= "hard"
+
+# webkit-gtk and cairo have alignment issues with double instructions on armv5 so
+# disable them here. TODO: This knowledge should rather be encoded in the actual
+# recipes!
+TARGET_CC_ARCH_pn-webkit-gtk_armv5te = "-march=armv4t"
+TARGET_CC_ARCH_pn-cairo_armv5te = "-march=armv4t"
+
+#############################################################################
+# C LIBRARY SETTINGS
+#############################################################################
+
+# Can be "glibc", "eglibc" or "uclibc"
+PREFERRED_LIBC ?= "glibc"
+PSTAGE_EXTRAPATH = "${PREFERRED_LIBC}"
+
+CACHE = "${TMPDIR}/cache/${PREFERRED_LIBC}/${MACHINE}"
+DEPLOY_DIR = "${TMPDIR}/deploy/${PREFERRED_LIBC}"
+require conf/distro/include/sane-toolchain-${PREFERRED_LIBC}.inc
+
+# Generate locales on the buildsystem instead of on the target. Speeds up first boot, set to "1" to enable
+PREFERRED_PROVIDER_qemu-native = "qemu-native"
+ENABLE_BINARY_LOCALE_GENERATION ?= "1"
+
+# We only want to build UTF8 locales
+LOCALE_UTF8_ONLY = "1"
+
+# Qemu doesn't like armv6/eabi/vfp
+ENABLE_BINARY_LOCALE_GENERATION_armv6 = "0"
+ENABLE_BINARY_LOCALE_GENERATION_armv6-novfp = "0"
+ENABLE_BINARY_LOCALE_GENERATION_armv7a = "0"
+
+#qemu has taken a dislike to armeb as well
+ENABLE_BINARY_LOCALE_GENERATION_armeb = "0"
+
+# This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH}
+ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
+include conf/distro/include/sane-toolchain-${ARM_ABI}.inc
diff --git a/conf/distro/include/slugos.inc b/conf/distro/include/slugos.inc
index c74624b0ed..b141548ce3 100644
--- a/conf/distro/include/slugos.inc
+++ b/conf/distro/include/slugos.inc
@@ -5,45 +5,6 @@
# WARNING: this file should not be used directly, use one of
# the supported slugos-derived distributions instead.
-#===============================================================================#
-#===============================================================================#
-#===============================================================================#
-# NOTE NOTE NOTE
-#
-# This *forces* the preferred kernel version; making it unable to be overridden
-# in the local.conf file. This is a Very Bad Thing. This is temporary, and
-# is intended to facilitate some SlugOS-specific testing without disturbing
-# other distros that use the ixp4xx machine type (which is currently where the
-# preferred kernel version is set).
-#
-# This *must* be removed after initial testing is completed. MJW 08-Dec-2008
-#
-PREFERRED_VERSION_linux-ixp4xx = "2.6.27.8+svnr${SRCREV}"
-#
-#===============================================================================#
-#===============================================================================#
-#===============================================================================#
-
-
-
-#===============================================================================#
-#===============================================================================#
-#===============================================================================#
-# NOTE NOTE NOTE
-#
-# Override the sane-srcrev file with regard to the opkg versions - this should
-# be removed as soon as opkg starts to work correctly again as newer opkg
-# versions fix a number of bugs and add some desireable features.
-#
-SRCREV_pn-opkg = "160"
-SRCREV_pn-opkg-native = "160"
-SRCREV_pn-opkg-sdk = "160"
-#
-#===============================================================================#
-#===============================================================================#
-#===============================================================================#
-
-
#----------------------------------------------------------------------------------
# STANDARD SLUGOS DEFINITIONS
#----------------------------------------------------------------------------------
@@ -55,7 +16,7 @@ SRCREV_pn-opkg-sdk = "160"
#TARGET_OS "linux" or "linux-uclibc"
# The following may be overridden to make sub-versions
-SLUGOS_VERSION = "5.2"
+SLUGOS_VERSION = "5.4"
DISTRO_REVISION ?= ""
DISTRO_VERSION ?= "${SLUGOS_VERSION}${DISTRO_REVISION}-${DISTRO_TYPE}"
# For release (only):
@@ -92,9 +53,7 @@ FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-reg
# We need to keep OABI compat for things like madwifi-ng.
ARM_KEEP_OABI = "1"
-# We may wish to experiment with this as a further performance improvement, but
-# small steps at a time are the best strategy.
-#TARGET_LINK_HASH_STYLE = "-Wl,--hash-style=gnu"
+TARGET_LINK_HASH_STYLE = "-Wl,--hash-style=gnu"
CXXFLAGS += "-fvisibility-inlines-hidden"
@@ -141,6 +100,12 @@ DISTRO_EXTRA_DEPENDS ?= ""
DISTRO_EXTRA_RDEPENDS ?= ""
DISTRO_EXTRA_RRECOMMENDS ?= ""
+CVS_TARBALL_STASH = "http://sources.nslu2-linux.org/sources/"
+INHERIT += "nslu2-mirrors"
+
+#FIXME: HACK: REMOVE THIS
+IGNORE_STRIP_ERRORS = ""
+
#----------------------------------------------------------------------------------
# PACKAGE VERSION CONTROL
#----------------------------------------------------------------------------------
@@ -150,127 +115,60 @@ DISTRO_EXTRA_RRECOMMENDS ?= ""
# kernel, so there has to be a non-libc gcc to build the kernel!)
# Virtuals:
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
#Set preferred provider for the C library that is used to build the crosscompiler (NPTL voodoo)
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc"
-PREFERRED_PROVIDER_virtual/arm-linux-libc-for-gcc = "glibc"
-PREFERRED_PROVIDER_virtual/armeb-linux-libc-for-gcc = "glibc"
-PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-libc-for-gcc = "glibc"
-PREFERRED_PROVIDER_virtual/armeb-linux-gnueabi-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/arm-linux-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/armeb-linux-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-libc-for-gcc = "glibc"
+PREFERRED_PROVIDER_virtual/armeb-linux-gnueabi-libc-for-gcc = "glibc"
# Set the preferred provider for a few toolchain-related items, otherwise
# these may be selected from the external-toolchain instead.
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
-PREFERRED_PROVIDER_virtual/arm-linux-binutils = "binutils-cross"
-PREFERRED_PROVIDER_virtual/armeb-linux-binutils = "binutils-cross"
-PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
-
-# compiler/binary/library versions
-PREFERRED_VERSION_binutils ?= "2.18.50.0.7"
-PREFERRED_VERSION_binutils-cross ?= "2.18.50.0.7"
-PREFERRED_VERSION_binutils-cross-sdk ?= "2.18.50.0.7"
-PREFERRED_VERSION_gcc ?= "4.2.4"
-PREFERRED_VERSION_gcc-cross ?= "4.2.4"
-PREFERRED_VERSION_gcc-cross-sdk ?= "4.2.4"
-PREFERRED_VERSION_gcc-cross-initial ?= "4.2.4"
-PREFERRED_VERSION_gcc-cross-intermediate ?= "4.2.4"
-PREFERRED_VERSION_glibc ?= "2.6.1"
-PREFERRED_VERSION_glibc-initial ?= "2.6.1"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_virtual/arm-linux-binutils = "binutils-cross"
+PREFERRED_PROVIDER_virtual/armeb-linux-binutils = "binutils-cross"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
# Select the smallest provider of x11 libraries
-PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11"
-SRCDATE_diet-x11 ?= "20060106"
-
-# Ensure consistency across all SlugOS builds for the provider of a
-# relational database - use the latest version of the SleepyCat
-# Berkeley database
-PREFERRED_PROVIDER_virtual/db = "db"
-PREFERRED_PROVIDER_virtual/db-native = "db-native"
-
-SRCDATE_ipkg-utils ?= "20060106"
-SRCDATE_ipkg-utils-native ?= "20060106"
-SRCDATE_ipkg-link ?= "20060106"
-SRCDATE_irssi ?= "20050930"
-
-CVS_TARBALL_STASH = "http://sources.nslu2-linux.org/sources/"
-INHERIT += "nslu2-mirrors"
-
-PREFERRED_VERSION_nslu2-linksys-firmware ?= "2.3r63"
-
-PREFERRED_VERSION_ipkg ?= "0.99.163"
-PREFERRED_VERSION_ipkg-native ?= "0.99.163"
-
-#FIXME: HACK: REMOVE THIS
-IGNORE_STRIP_ERRORS = ""
-
-PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
+PREFERRED_PROVIDER_virtual/libx11 = "diet-x11"
+SRCDATE_diet-x11 ?= "20060106"
-# New pango and older glib-2.0 versions don't mix,
-# so specify exactly what we would like to build.
-#PREFERRED_VERSION_pango ?= "1.20.5"
-#PREFERRED_VERSION_glib-2.0 ?= "2.16.1"
-#PREFERRED_VERSION_cairo ?= "1.4.8"
+# Ensure consistency across all SlugOS builds for the provider of a relational
+# database - use the latest version of the SleepyCat Berkeley database
+PREFERRED_PROVIDER_virtual/db = "db"
+PREFERRED_PROVIDER_virtual/db-native = "db-native"
-PREFERRED_VERSION_udev ?= "118"
-
-# Stick with an older gettext and e2fsprogs stuff
-# and gnutls... (our autotools is too old at the moment)
-#PREFERRED_VERSION_gnutls ?= "1.6.3"
-#PREFERRED_VERSION_gettext ?= "0.14.1"
-#PREFERRED_VERSION_gettext-native ?= "0.14.1"
-#PREFERRED_VERSION_e2fsprogs-libs ?= "1.39"
-#PREFERRED_VERSION_e2fsprogs ?= "1.38"
-#PREFERRED_VERSION_e2fsprogs-native ?= "1.38"
+SRCDATE_ipkg-utils ?= "20060106"
+SRCDATE_ipkg-utils-native ?= "20060106"
+SRCDATE_ipkg-link ?= "20060106"
+SRCDATE_irssi ?= "20050930"
# we don't ship gtk-directfb by default
-PREFERRED_PROVIDER_gtk+ ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
-
-PREFERRED_PROVIDER_avahi ?= "avahi"
-PREFERRED_PROVIDER_gconf ?= "gconf"
-
-# These shouldn't be here either -- these versions should
-# be pulled from a separate include file. But they can
-# go here for now.
-PREFERRED_VERSION_automake-native ?= "1.10"
-PREFERRED_VERSION_busybox ?= "1.13.2"
-PREFERRED_VERSION_dbus ?= "1.2.1"
-PREFERRED_VERSION_glib-2.0 ?= "2.18.3"
-PREFERRED_VERSION_glib-2.0-native ?= "2.18.0"
-PREFERRED_VERSION_libtool ?= "1.5.10"
-PREFERRED_VERSION_libtool-native ?= "1.5.10"
-PREFERRED_VERSION_libtool-cross ?= "1.5.10"
-PREFERRED_VERSION_libtool-sdk ?= "1.5.10"
-PREFERRED_VERSION_m4 ?= "1.4.8"
-PREFERRED_VERSION_m4-native ?= "1.4.8"
-PREFERRED_VERSION_pkgconfig ?= "0.23"
-PREFERRED_VERSION_pkgconfig-native ?= "0.23"
-
-# Hack alert - selecting this version of libusb effectively selects
-# the use of libusb1 and libusb-compat in the case that something
-# still depends on libusb. This is required because otherwise
-# libusb will overwrite libusb-compat in staging.
-PREFERRED_VERSION_libusb ?= "0.0.0"
-
-# mtd-utils 1.2.0+git cannot be fetched, so SlugOS will stick
-# with 1.1.0 for now:
-PREFERRED_VERSION_mtd-utils ?= "1.1.0"
-
+PREFERRED_PROVIDER_gtk+ ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
+
+PREFERRED_PROVIDER_avahi ?= "avahi"
+PREFERRED_PROVIDER_gconf ?= "gconf"
+
+# Include any package preferred versions and srcrevs:
+
+require conf/distro/include/preferred-slugos-versions.inc
require conf/distro/include/sane-srcdates.inc
require conf/distro/include/sane-srcrevs.inc
diff --git a/conf/distro/kaeilos.conf b/conf/distro/kaeilos.conf
new file mode 100644
index 0000000000..a65bbff2c8
--- /dev/null
+++ b/conf/distro/kaeilos.conf
@@ -0,0 +1,187 @@
+#@--------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: KaeilOS
+#@DESCRIPTION: KaeilOS Linux Distribution for Kernel 2.6 based devices
+#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
+#@--------------------------------------------------------------------
+
+#DISTRO_VERSION = "2008.1"
+DISTRO_VERSION = "2008.1-test-${DATE}"
+DISTRO_REVISION = "1"
+DISTRO_PR = ".1"
+
+#build staging from packages
+INHERIT += "packaged-staging"
+
+require conf/distro/include/sane-srcdates.inc
+require conf/distro/include/sane-srcrevs.inc
+require conf/distro/include/angstrom-2008-preferred-versions.inc
+require conf/distro/include/preferred-opie-versions-1.2.4.inc
+
+PREFERRED_VERSION_xserver-kdrive = "1.3.0.0"
+PREFERRED_VERSION_busybox = "1.13.2"
+
+IMAGE_DEV_MANAGER = "busybox-mdev"
+
+#Images built can have to modes:
+# 'debug': empty rootpassword, strace included
+# 'release' no root password, no strace and gdb by default
+DISTRO_TYPE ?= "debug"
+#DISTRO_TYPE = "release"
+
+# Ship just basic locale by default. Locales are big (~1Mb uncompr.), so
+# shipping some adhoc subset will be still useless and size burden for
+# users of all other languages/countries. Instead, worth to make it easy
+# to install additional languages: installer/wizard + metapackages which
+# will RRECOMMEND as much as possible content for a given language
+# (locales, UI transalations, help, etc. - useless for pros, but really
+# helpful for common users).
+# Also, it appears that no locales fit in 16Mb for now. "C" locale rules!
+IMAGE_LINGUAS = '${@base_less_or_equal("ROOT_FLASH_SIZE", "16", "", "en-us", d)}'
+
+
+# set feed path variables
+FEED_BASEPATH = "feeds/2008/${ANGSTROM_PKG_FORMAT}/${ANGSTROMLIBC}/"
+
+
+#The angstrom-mirrors.bbclass should have everything, but we can use this as a fallback
+CVS_TARBALL_STASH ?= "\
+ http://www.angstrom-distribution.org/unstable/sources/ \
+ "
+
+PCMCIA_MANAGER = "pcmciautils"
+
+#This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against
+PREFERRED_VERSION_linux-libc-headers = "2.6.23"
+
+#Prefer glibc 2.6 and uclibc 0.9.30, these have had the most testing.
+PREFERRED_VERSION_glibc ?= "2.6.1"
+PREFERRED_VERSION_glibc-initial ?= "2.6.1"
+PREFERRED_VERSION_uclibc ?= "0.9.30"
+PREFERRED_VERSION_uclibc-initial ?= "0.9.30"
+
+PREFERRED_PROVIDER_avahi = "avahi"
+
+#Small machines prefer kdrive, but we might ship full Xorg in other images
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
+PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+
+#powerpc needs additional patches to gcc
+ANGSTROM_GCC_VERSION_ppc405 ?= "4.1.1"
+ANGSTROM_GCC_VERSION_xilinx-ml403 ?= "4.1.1"
+ANGSTROM_GCC_VERSION_xilinx-ml403 ?= "4.1.1"
+
+# Blackfin has its own gcc
+ANGSTROM_GCC_VERSION_bfin = "4.1.2"
+
+#for proper NEON support we need a CSL toolchain
+#ANGSTROM_GCC_VERSION_armv7a = "4.2.1+csl-arm-2007q3-53"
+ANGSTROM_GCC_VERSION_armv7a = "4.3.1"
+
+#Horrible workaround for armv7a follows:
+# gcc 4.3.1 builds a kernel that oopses with a null-pointer in the rcu-update function
+# gcc 4.2.1 (the one from *gasp* csl) builds a working kernel, but non-working userspace
+
+KERNEL_CCSUFFIX_armv7a= "-4.2.1+csl-arm-2007q3-53"
+
+#avr32 only has support for gcc 4.2.2
+ANGSTROM_GCC_VERSION_avr32 ?= "4.2.2"
+
+#Everybody else can just use this:
+ANGSTROM_GCC_VERSION ?= "4.2.4"
+PREFERRED_VERSION_binutils ?= "2.18.50.0.7"
+PREFERRED_VERSION_binutils-cross ?= "2.18.50.0.7"
+PREFERRED_VERSION_binutils-cross-sdk ?= "2.18.50.0.7"
+
+PREFERRED_VERSION_gcc ?= "${ANGSTROM_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross ?= "${ANGSTROM_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross-sdk ?= "${ANGSTROM_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross-initial ?= "${ANGSTROM_GCC_VERSION}"
+PREFERRED_VERSION_gcc-cross-intermediate ?= "${ANGSTROM_GCC_VERSION}"
+
+#Loads preferred versions from files, these have weak assigments (?=), so put them at the bottom
+require conf/distro/include/preferred-e-versions.inc
+require conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
+require conf/distro/include/preferred-xorg-versions-X11R7.4.inc
+
+#avr32 only has patches for binutils 2.17 in OE
+PREFERRED_VERSION_binutils_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
+
+# Virtuals:
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+
+# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
+PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
+
+PREFERRED_PROVIDER_virtual/db ?= "db"
+PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
+PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_virtual/libxine ?= "libxine-x11"
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
+
+# Others:
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
+PREFERRED_PROVIDER_esound ?= "pulseaudio"
+PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
+PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
+PREFERRED_PROVIDER_tslib ?= "tslib"
+PREFERRED_PROVIDER_tslib-conf ?= "tslib"
+PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
+PREFERRED_PROVIDER_ntp ?= "ntp"
+PREFERRED_PROVIDER_hotplug = "udev"
+PREFERRED_PROVIDER_libxss = "libxss"
+PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
+
+# we don't ship gtk-directfb by default
+PREFERRED_PROVIDER_gtk+ ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
+
+#Silence a warning during parsing
+PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+
+require conf/distro/include/kaeilos.inc
+
+# do some task-base stuff here
+
+# We want to ship extra debug utils in the rootfs when doing a debug build
+DEBUG_APPS ?= ""
+DEBUG_APPS += '${@base_conditional("DISTRO_TYPE", "release", "", "strace procps",d)}'
+
+# KaeilOS want to ship some extra stuff. This should be moved into task-base eventually
+# contains ipkg specific stuff as well :(
+DISTRO_EXTRA_RDEPENDS += "\
+ update-modules \
+ ${@base_contains("MACHINE_FEATURES", "screen", "psplash", "",d)} \
+ kaeilos-version \
+ opkg-nogpg opkg-collateral ${ANGSTROM_FEED_CONFIGS} \
+ util-linux-ng-mount util-linux-ng-umount \
+ ${DEBUG_APPS} angstrom-libc-fixup-hack \
+ "
+
+DISTRO_EXTRA_RRECOMMENDS += " \
+ kernel-module-vfat \
+ kernel-module-ext2 \
+ kernel-module-af-packet \
+ openssh-sftp-server \
+ "
diff --git a/conf/distro/minimal.conf b/conf/distro/minimal.conf
index 3ca22b128c..b5f7ddc1e4 100644
--- a/conf/distro/minimal.conf
+++ b/conf/distro/minimal.conf
@@ -1,84 +1,124 @@
-#-----------------------------------------------------------------------------
+#############################################################################
#@TYPE: Distribution
#@NAME: Minimal
-#@DESCRIPTION: Embedded Linux Distribution Configuration (minimal)
+#@DESCRIPTION: Embedded Linux Distribution Configuration
#
-#@COMMENT: This distribution configuration serves as a starting point for
+#@COMMENT: This distribution configuration can serve as a starting point for
#@COMMENT: the integration of new target platforms, machines, or distributions.
-#@COMMENT: It bases on conservative settings and should always be buildable.
-#-----------------------------------------------------------------------------
+#############################################################################
-#
-# Header
-#
-DISTRO_NAME = "minimal-glibc"
+#############################################################################
+# NAME and VERSION
+#############################################################################
+DISTRO_NAME = "minimal"
DISTRO_VERSION = ".dev-snapshot-${SRCDATE}"
#DISTRO_TYPE = "release"
DISTRO_TYPE = "debug"
-#
-# Naming schemes
-#
+# Ensure some form of release config, so error out if someone thinks he knows better
+DISTRO_CHECK := "${@bb.data.getVar("DISTRO_VERSION",d,1) or bb.fatal('Remove this line or set a dummy DISTRO_VERSION")
+
+#############################################################################
+# FEATURE SELECTION
+#############################################################################
+# Use bluetooth 4.0
+DISTRO_BLUETOOTH_MANAGER = "bluez4"
+# We want images supporting the following features (for task-base)
+DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 vfat pcmcia usbgadget usbhost pci"
+
+#############################################################################
+# LIBRARY NAMES
+#############################################################################
+# libfoo -> libfoo0-2 (etc)
INHERIT += "debian"
-#
-# Packaging and output format
-#
+#############################################################################
+# STAGING AREA
+#############################################################################
+# Controlled by packaging system
+INHERIT += "packaged-staging"
+
+#############################################################################
+# PACKAGING & FEEDS
+#############################################################################
+# Chose the packaging system
INHERIT += "package_ipk"
-IMAGE_FSTYPES ?= "tar.gz ext2.gz jffs2"
+IMAGE_FSTYPES = "tar.gz jffs2"
-#
-# Kernel
-#
-KERNEL = "kernel26"
-MACHINE_KERNEL_VERSION = "2.6"
+require conf/distro/include/sane-feed.inc
+PREFERRED_PKG_FORMAT ?= "ipk"
+require conf/distro/include/sane-feed-${PREFERRED_PKG_FORMAT}.inc
-#
-# Binutils & Compiler
-#
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
-PREFERRED_PROVIDER_virtual/arm-linux-binutils = "binutils-cross"
-PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
-
-PREFERRED_VERSION_gcc ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-initial ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-intermediate ?= "4.1.1"
-PREFERRED_VERSION_binutils ?= "2.18"
-PREFERRED_VERSION_binutils-cross ?= "2.18"
+# If we're using an .ipk based rootfs, we want to have opkg-nogpg installed so postinst script can run
+IPKG_VARIANT = "opkg-nogpg"
-#
-# Target OS & FPU system
-#
-TARGET_OS = "linux"
-TARGET_FPU_arm = "soft"
-TARGET_FPU_armeb = "soft"
+#############################################################################
+# IMAGES
+#############################################################################
+# Name the generated images in a sane way
+IMAGE_NAME = "${DISTRO_NAME}-${IMAGE_BASENAME}-${PREFERRED_LIBC}-${PREFERRED_PKG_FORMAT}-${DISTRO_VERSION}-${MACHINE}"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}"
-#
-# C library
-#
-PREFERRED_PROVIDER_virtual/libiconv = "glibc"
-PREFERRED_PROVIDER_virtual/libintl = "glibc"
-PREFERRED_PROVIDER_virtual/libc = "glibc"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc"
-PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
-PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
-PREFERRED_VERSION_glibc ?= "2.5"
+#############################################################################
+# KERNEL
+#############################################################################
+KERNEL = "kernel26"
+MACHINE_KERNEL_VERSION = "2.6"
-#
-# Bootstrap & Init
-#
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+#############################################################################
+# TOOLCHAIN
+#############################################################################
+PREFERRED_LIBC = "glibc"
+require conf/distro/include/sane-toolchain.inc
-#
-# Preferred versions
-#
+#############################################################################
+# PREFERRED PROVIDERS
+#############################################################################
+PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+PREFERRED_PROVIDER_avahi = "avahi"
+PREFERRED_PROVIDER_gconf = "gconf-dbus"
+PREFERRED_PROVIDER_gtk+ = "gtk+"
+PREFERRED_PROVIDER_libgpewidget = "libgpewidget"
+PREFERRED_PROVIDER_virtual/db = "db3"
+PREFERRED_PROVIDER_virtual/db-native = "db3-native"
+PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+#############################################################################
+# PREFERRED VERSIONS
+#############################################################################
require conf/distro/include/sane-srcdates.inc
require conf/distro/include/sane-srcrevs.inc
-
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+require conf/distro/include/preferred-e-versions.inc
+require conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
require conf/distro/include/preferred-xorg-versions-X11R7.4.inc
+
+
+#############################################################################
+# CONTENTS
+#############################################################################
+
+# Ship extra debug utils in the rootfs when doing a debug build
+DEBUG_APPS ?= ""
+DEBUG_APPS += '${@base_conditional("DISTRO_TYPE", "release", "", "task-cli-tools-debug",d)}'
+
+# Additional content I (only valid if you include task-base)
+# distro-feed-configs: configuration files for the online feeds
+# util-linux-ng-mount util-linux-ng-umount: busybox mount is broken
+# angstrom-libc-fixup-hack: fixes an obscure bug with libc.so symlink
+DISTRO_EXTRA_RDEPENDS += "\
+ distro-feed-configs \
+ util-linux-ng-mount util-linux-ng-umount \
+ angstrom-libc-fixup-hack \
+"
+
+# Additional content II (can be masked with BAD_RECOMMENDS)
+DISTRO_EXTRA_RRECOMMENDS += " \
+ kernel-module-vfat \
+ kernel-module-ext2 \
+ kernel-module-ext3 \
+ kernel-module-af-packet \
+ avahi-daemon \
+ avahi-autoipd \
+ openssh-sftp-server \
+"
diff --git a/conf/distro/openmoko.conf b/conf/distro/openmoko.conf
index c038096231..cb1513de4b 100644
--- a/conf/distro/openmoko.conf
+++ b/conf/distro/openmoko.conf
@@ -30,7 +30,7 @@ DISTRO_FEED_URI ?= "http://downloads.openmoko.org/repository/testing"
AB_DEPLOY_EXTRA ?= ""
DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE_ARCH}/${AB_DEPLOY_EXTRA}"
-DISTRO_INITSCRIPTS = "initscripts-openmoko"
+IMAGE_INITSCRIPTS = "initscripts-openmoko"
# We try to minimize the distro features in the default image.
DISTRO_FEATURES = "wifi ppp alsa ext2 vfat usbhost"
diff --git a/conf/distro/openprotium.conf b/conf/distro/openprotium.conf
index b794d4a4ec..633e3bcaef 100644
--- a/conf/distro/openprotium.conf
+++ b/conf/distro/openprotium.conf
@@ -8,10 +8,10 @@ TARGET_OS = "linux"
#
# Basic configuration
#
-DISTRO_DEV_MANAGER = "udev"
+IMAGE_DEV_MANAGER = "udev"
DISTRO_SSH_DAEMON = "dropbear"
-DISTRO_INIT_MANAGER = "sysvinit"
-DISTRO_LOGIN_MANAGER = "tinylogin"
+IMAGE_INIT_MANAGER = "sysvinit"
+IMAGE_LOGIN_MANAGER = "tinylogin"
MACHINE_TASK_PROVIDER = "task-openprotium"
#
diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf
index 6182591d6a..3e816f7c58 100644
--- a/conf/distro/slugos.conf
+++ b/conf/distro/slugos.conf
@@ -12,6 +12,8 @@ DISTRO_TYPE = "alpha"
TARGET_ARCH ?= "armeb"
ARM_INSTRUCTION_SET = "arm"
TARGET_OS = "linux-gnueabi"
+IPKG_VARIANT ?= "opkg-nogpg-nocurl"
+IMAGE_INITSCRIPTS ?= "initscripts-slugos"
require conf/distro/include/slugos.inc
diff --git a/conf/machine/beagleboard.conf b/conf/machine/beagleboard.conf
index f5bcb79550..78c63019ae 100644
--- a/conf/machine/beagleboard.conf
+++ b/conf/machine/beagleboard.conf
@@ -13,9 +13,6 @@ XSERVER = "xserver-xorg \
# Only has DVI connector for external screen
GUI_MACHINE_CLASS = "bigscreen"
-#Ship all kernel modules till the board support has matured enough
-MACHINE_EXTRA_RRECOMMENDS = " kernel-modules"
-
#include conf/machine/include/tune-arm1136jf-s.inc
# requires gcc 4.3.0:
include conf/machine/include/tune-cortexa8.inc
@@ -35,6 +32,21 @@ UBOOT_ENTRYPOINT = "0x80008000"
UBOOT_LOADADDRESS = "0x80008000"
UBOOT_MACHINE = "omap3_beagle_config"
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 1996 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 1996"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
+
PREFERRED_VERSION_u-boot = "git"
EXTRA_IMAGEDEPENDS += "u-boot x-load"
diff --git a/conf/machine/collie.conf b/conf/machine/collie.conf
index b1635c022c..6d09406375 100644
--- a/conf/machine/collie.conf
+++ b/conf/machine/collie.conf
@@ -3,19 +3,29 @@
#@DESCRIPTION: Machine configuration for the SA1100 based Sharp Zaurus SL-5000 and SL-5500 devices
TARGET_ARCH = "arm"
-
-MACHINE_KERNEL_VERSION ?= "2.6"
-require conf/machine/include/zaurus-${MACHINE_KERNEL_VERSION}.inc
-require conf/machine/include/kexecboot.inc
require conf/machine/include/tune-strongarm.inc
-PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+MACHINE_KERNEL_VERSION = "2.6"
+KERNEL_IMAGE_MAXSIZE = "1048576"
+KERNEL_IMAGETYPE = "zImage"
+SERIAL_CONSOLE = "115200 ttySA0"
+
+ROOT_FLASH_SIZE = "14"
+# actually 14680064, see EXTRA_IMAGECMD
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+
+XSERVER ?= "xserver-kdrive-fbdev"
EXTRA_IMAGECMD_jffs2 = "--pad=14680064 --little-endian --eraseblock=0x20000 -n"
+
IMAGE_LINGUAS ?= ""
IMAGE_FSTYPES ?= "jffs2 tar.gz"
-ROOT_FLASH_SIZE = "14"
-# actually 14680064, see EXTRA_IMAGECMD above
+PCMCIA_MANAGER ?= "pcmciautils"
-XSERVER ?= "xserver-kdrive-fbdev"
+GUI_MACHINE_CLASS = "smallscreen"
+MACHINE_FEATURES = "kernel26 apm alsa pcmcia irda usbgadget keyboard touchscreen screen vfat"
+
+require conf/machine/include/kexecboot.inc
diff --git a/conf/machine/davinci-dvevm.conf b/conf/machine/davinci-dvevm.conf
index 50c6561a95..f52efc2aab 100644
--- a/conf/machine/davinci-dvevm.conf
+++ b/conf/machine/davinci-dvevm.conf
@@ -6,7 +6,6 @@ TARGET_ARCH = "arm"
HOTPLUG = "udev"
-PREFERRED_PROVIDER_xserver = "xserver-kdrive"
PREFERRED_PROVIDER_virtual/kernel = "linux-davinci"
PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross"
diff --git a/conf/machine/davinci-sffsdr.conf b/conf/machine/davinci-sffsdr.conf
index e28d3a102c..e3c0554f71 100644
--- a/conf/machine/davinci-sffsdr.conf
+++ b/conf/machine/davinci-sffsdr.conf
@@ -9,8 +9,6 @@ HOTPLUG = "udev"
PREFERRED_PROVIDER_virtual/kernel = "linux-davinci"
PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross"
-PREFERRED_VERSION_linux-davinci = "2.6.25"
-
PREFERRED_VERSION_u-boot = "git"
UBOOT_MACHINE = "davinci_sffsdr_config"
@@ -26,8 +24,8 @@ EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n"
MACHINE_FEATURES = "kernel26 serial"
-MACHINE_EXTRA_RDEPENDS = "dsplink"
-MACHINE_EXTRA_RRECOMMENDS = "dsplink-module"
+#MACHINE_EXTRA_RDEPENDS = "dsplink"
+#MACHINE_EXTRA_RRECOMMENDS = "dsplink-module"
require conf/machine/include/tune-arm926ejs.inc
diff --git a/conf/machine/gamecube.conf b/conf/machine/gamecube.conf
new file mode 100644
index 0000000000..30323baf9e
--- /dev/null
+++ b/conf/machine/gamecube.conf
@@ -0,0 +1,11 @@
+#@TYPE: Machine
+#@Name: Nintendo GameCube
+#@DESCRIPTION: Machine configuration for the Nintendo GameCube
+
+TARGET_ARCH = "powerpc"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux"
+
+MACHINE_FEATURES = "kernel26 ext2"
+
+KERNEL_IMAGETYPE = "zImage"
diff --git a/conf/machine/htcblackstone.conf b/conf/machine/htcblackstone.conf
new file mode 100644
index 0000000000..880e4d036b
--- /dev/null
+++ b/conf/machine/htcblackstone.conf
@@ -0,0 +1,10 @@
+#@TYPE: Machine
+#@NAME: HTC Blackstone
+#@DESCRIPTION: Machine configuration for HTC Blackstone smartphone (aka HTC Touch HD)
+
+require conf/machine/include/htc-msm7.inc
+
+MACHINE_DISPLAY_WIDTH_PIXELS = "480"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "800"
+
+MACHINE_FEATURES = "kernel26 touchscreen screen phone gps usb keyboard"
diff --git a/conf/machine/htcdiamond.conf b/conf/machine/htcdiamond.conf
index e4b07ea794..f4d3874e7b 100644
--- a/conf/machine/htcdiamond.conf
+++ b/conf/machine/htcdiamond.conf
@@ -1,15 +1,10 @@
#@TYPE: Machine
-#@NAME: HTC Diamond phone
-#@DESCRIPTION: Machine configuration for HTC Diamond phone
-require conf/machine/include/tune-arm1136-novfp.inc
+#@NAME: HTC Diamond
+#@DESCRIPTION: Machine configuration for the HTC Diamond smartphone
-PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+require conf/machine/include/htc-msm7.inc
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-XSERVER = "xserver-kdrive-fbdev"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
MACHINE_FEATURES = "kernel26 touchscreen screen phone gps usb"
-
-IMAGE_FSTYPES += "tar.gz cpio.gz"
diff --git a/conf/machine/htckaiser.conf b/conf/machine/htckaiser.conf
index c977ba2eb6..29e33519c7 100644
--- a/conf/machine/htckaiser.conf
+++ b/conf/machine/htckaiser.conf
@@ -1,15 +1,10 @@
#@TYPE: Machine
-#@NAME: HTC Kaiser phone
-#@DESCRIPTION: Machine configuration for HTC Kaiser phone (aka HTC TyTN II)
-require conf/machine/include/tune-arm1136-novfp.inc
+#@NAME: HTC Kaiser
+#@DESCRIPTION: Machine configuration for the HTC Kaiser smartphone (aka HTC TyTN II)
-PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+require conf/machine/include/htc-msm7.inc
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-XSERVER = "xserver-kdrive-fbdev"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
MACHINE_FEATURES = "kernel26 touchscreen screen keyboard phone gps"
-
-IMAGE_FSTYPES += "tar.gz cpio.gz"
diff --git a/conf/machine/htcnike.conf b/conf/machine/htcnike.conf
new file mode 100644
index 0000000000..34287dd961
--- /dev/null
+++ b/conf/machine/htcnike.conf
@@ -0,0 +1,10 @@
+#@TYPE: Machine
+#@NAME: HTC Nike
+#@DESCRIPTION: Machine configuration for the HTC Nike smartphone
+
+require conf/machine/include/htc-msm7.inc
+
+MACHINE_DISPLAY_WIDTH_PIXELS = "240"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
+
+MACHINE_FEATURES = "kernel26 touchscreen screen phone gps"
diff --git a/conf/machine/htcpolaris.conf b/conf/machine/htcpolaris.conf
index 0afc65a198..1473fa4a34 100644
--- a/conf/machine/htcpolaris.conf
+++ b/conf/machine/htcpolaris.conf
@@ -1,15 +1,10 @@
#@TYPE: Machine
-#@NAME: HTC Polaris phone
-#@DESCRIPTION: Machine configuration for HTC Polaris phone
-require conf/machine/include/tune-arm1136-novfp.inc
+#@NAME: HTC Polaris
+#@DESCRIPTION: Machine configuration for the HTC Polaris smartphone
-PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+require conf/machine/include/htc-msm7.inc
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-XSERVER = "xserver-kdrive-fbdev"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
MACHINE_FEATURES = "kernel26 touchscreen screen phone gps"
-
-IMAGE_FSTYPES += "tar.gz cpio.gz"
diff --git a/conf/machine/htcraphael.conf b/conf/machine/htcraphael.conf
index ad4329714d..b9aa609bf1 100644
--- a/conf/machine/htcraphael.conf
+++ b/conf/machine/htcraphael.conf
@@ -1,15 +1,10 @@
#@TYPE: Machine
-#@NAME: HTC Raphael phone
-#@DESCRIPTION: Machine configuration for HTC Raphael phone (aka HTC Touch Pro)
-require conf/machine/include/tune-arm1136-novfp.inc
+#@NAME: HTC Raphael
+#@DESCRIPTION: Machine configuration for HTC Raphael smartphone (aka HTC Touch Pro)
-PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+require conf/machine/include/htc-msm7.inc
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-XSERVER = "xserver-kdrive-fbdev"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
MACHINE_FEATURES = "kernel26 touchscreen screen phone gps usb keyboard"
-
-IMAGE_FSTYPES += "tar.gz cpio.gz"
diff --git a/conf/machine/htctitan.conf b/conf/machine/htctitan.conf
index 2882f8d4d7..bcd4ab8795 100644
--- a/conf/machine/htctitan.conf
+++ b/conf/machine/htctitan.conf
@@ -1,15 +1,10 @@
#@TYPE: Machine
#@NAME: HTC Titan phone
-#@DESCRIPTION: Machine configuration for HTC Titan phone
-require conf/machine/include/tune-arm1136-novfp.inc
+#@DESCRIPTION: Machine configuration for HTC Titan smartphone
-PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+require conf/machine/include/htc-msm7.inc
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-XSERVER = "xserver-kdrive-fbdev"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
MACHINE_FEATURES = "kernel26 touchscreen screen phone gps camera keyboard"
-
-IMAGE_FSTYPES += "tar.gz cpio.gz"
diff --git a/conf/machine/htcvogue.conf b/conf/machine/htcvogue.conf
index 7bf0f6d0b8..c0670024a4 100644
--- a/conf/machine/htcvogue.conf
+++ b/conf/machine/htcvogue.conf
@@ -1,15 +1,10 @@
#@TYPE: Machine
-#@NAME: HTC Vogue phone
-#@DESCRIPTION: Machine configuration for HTC Vogue phone
-require conf/machine/include/tune-arm1136-novfp.inc
+#@NAME: HTC Vogue
+#@DESCRIPTION: Machine configuration for HTC Vogue smartphone
-PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+require conf/machine/include/htc-msm7.inc
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-XSERVER = "xserver-kdrive-fbdev"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
MACHINE_FEATURES = "kernel26 touchscreen screen phone gps camera"
-
-IMAGE_FSTYPES += "tar.gz cpio.gz"
diff --git a/conf/machine/include/htc-msm7.inc b/conf/machine/include/htc-msm7.inc
new file mode 100644
index 0000000000..5d7596f38d
--- /dev/null
+++ b/conf/machine/include/htc-msm7.inc
@@ -0,0 +1,23 @@
+# kernel
+PREFERRED_PROVIDER_virtual/kernel = "linux-msm7xxxx"
+
+# xserver
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+XSERVER = "xserver-kdrive-fbdev"
+
+# capability database
+MACHINE_DISPLAY_WIDTH_PIXELS = "480"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
+
+# use this for overrides
+MACHINE_CLASS = "htc-msm7"
+
+# features
+MACHINE_FEATURES = "kernel26 touchscreen screen phone gps usb keyboard"
+
+# filesystems
+IMAGE_FSTYPES = "tar.gz"
+
+# CPU
+require conf/machine/include/tune-arm1136-novfp.inc
+
diff --git a/conf/machine/include/kexecboot.inc b/conf/machine/include/kexecboot.inc
index 7e2200853c..1835af4727 100644
--- a/conf/machine/include/kexecboot.inc
+++ b/conf/machine/include/kexecboot.inc
@@ -2,7 +2,10 @@
# NOTE: include this file after zaurus-2.6.inc for zaurus machines
-MACHINE_FEATURES_append = "kexecboot"
+MACHINE_FEATURES_append = " kexecboot "
+
+IMAGE_FSTYPES += " tar.gz "
+EXTRA_IMAGEDEPENDS += "linux-kexecboot"
# Include Kernel image in kexecboot enabled images
RDEPENDS_kernel-base = "kernel-image"
@@ -10,3 +13,4 @@ RDEPENDS_kernel-base = "kernel-image"
# we store kernel images in rootfs and only a minimal initramfs kernel in mtd1 for booting other kernels
DONT_CHECK_KERNELSIZE ?= "1"
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_append = " kexecboot-cfg"
diff --git a/conf/machine/include/motorola-ezx-base.inc b/conf/machine/include/motorola-ezx-base.inc
index 296ce6a2ed..fe28a3cb4d 100644
--- a/conf/machine/include/motorola-ezx-base.inc
+++ b/conf/machine/include/motorola-ezx-base.inc
@@ -1,7 +1,7 @@
TARGET_ARCH = "arm"
PREFERRED_PROVIDER_xserver = "xserver-kdrive"
-PREFERRED_PROVIDER_virtual/kernel ?= "linux-ezx"
+PREFERRED_PROVIDER_virtual/kernel ?= "openezx-kernel"
#cat /proc/mtd
#dev: size erasesize name
diff --git a/conf/machine/include/orion.inc b/conf/machine/include/orion.inc
index c6fe6e3678..9e16805bd2 100644
--- a/conf/machine/include/orion.inc
+++ b/conf/machine/include/orion.inc
@@ -10,7 +10,7 @@ USE_DEVFS = "0"
PREFERRED_PROVIDER_virtual/bootloader = ""
PREFERRED_PROVIDER_virtual/kernel = "linux-orion"
-PREFERRED_VERSION_linux-orion = "2.6.27.10"
+PREFERRED_VERSION_linux-orion = "2.6.28.4"
IMAGE_DEVICE_TABLES = "files/device_table-slugos.txt"
IMAGE_FSTYPES = "tar.gz"
diff --git a/conf/machine/include/tune-arm1136-novfp.inc b/conf/machine/include/tune-arm1136-novfp.inc
index 372148e7a2..e1f7945a0f 100644
--- a/conf/machine/include/tune-arm1136-novfp.inc
+++ b/conf/machine/include/tune-arm1136-novfp.inc
@@ -6,3 +6,5 @@ FEED_ARCH = "armv6-novfp"
BASE_PACKAGE_ARCH = "armv6-novfp"
PACKAGE_EXTRA_ARCHS += "armv4 armv4t armv5te armv6-novfp"
+# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish
+require conf/machine/include/tune-thumb.inc
diff --git a/conf/machine/include/tune-mips32.inc b/conf/machine/include/tune-mips32.inc
new file mode 100644
index 0000000000..93da66b158
--- /dev/null
+++ b/conf/machine/include/tune-mips32.inc
@@ -0,0 +1 @@
+TARGET_CC_ARCH = "-march=mips32"
diff --git a/conf/machine/include/zaurus-2.6.inc b/conf/machine/include/zaurus-2.6.inc
index eee7631018..aeba16b67c 100644
--- a/conf/machine/include/zaurus-2.6.inc
+++ b/conf/machine/include/zaurus-2.6.inc
@@ -2,7 +2,6 @@
# Additionally, clamshell specific stuff in zaurus-clamshell.inc
TARGET_ARCH = "arm"
-PACKAGE_EXTRA_ARCHS_collie = ""
MACHINE_KERNEL_VERSION = "2.6"
@@ -10,14 +9,11 @@ ERASEBLOCKSIZE = "0x4000"
ERASEBLOCKSIZE_akita = "0x20000"
EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=${ERASEBLOCKSIZE} --pad --faketime -n"
-IMAGE_CMD_jffs2 = "mkfs.jffs2 -x lzo --root=${IMAGE_ROOTFS} --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${EXTRA_IMAGECMD}"
-ZAURUS-UPDATER_collie = ""
ZAURUS-UPDATER = "zaurus-updater"
EXTRA_IMAGEDEPENDS += "${ZAURUS-UPDATER}"
SERIAL_CONSOLE = "115200 ttyS0"
-SERIAL_CONSOLE_collie = "115200 ttySA0"
PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
@@ -35,16 +31,11 @@ MACHINE_EXTRA_RRECOMMENDS_c7x0 = "kernel-module-snd-soc-corgi kernel-module-px
MACHINE_EXTRA_RRECOMMENDS_akita = "kernel-module-snd-soc-spitz kernel-module-pxa2xx-cs kernel-module-pcmcia"
MACHINE_EXTRA_RRECOMMENDS_spitz = "kernel-module-snd-soc-spitz"
MACHINE_EXTRA_RRECOMMENDS_poodle = "kernel-module-snd-soc-poodle kernel-module-pxa2xx-cs kernel-module-pcmcia"
-MACHINE_EXTRA_RRECOMMENDS_collie = "kernel-module-locomo-spi kernel-module-sa1100-cs kernel-module-mmc-block \
- kernel-module-collie-ts kernel-module-leds-locomo kernel-module-locomokbd kernel-module-mmc-spi \
- kernel-module-power"
GUI_MACHINE_CLASS = "bigscreen"
-GUI_MACHINE_CLASS_collie = "smallscreen"
GUI_MACHINE_CLASS_poodle = "smallscreen"
KERNEL_IMAGE_MAXSIZE = "1294336"
-KERNEL_IMAGE_MAXSIZE_collie = "1048576"
MACHINE_POSTPROCESS_COMMAND = "zaurus_make_installkit"
@@ -69,17 +60,14 @@ zaurus_make_installkit () {
[ -f ${IMAGE_NAME}.rootfs.jffs2 ] && cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/initrd.bin
fi
- # All zaurus machines except collie need updater.sh
- if [ "${MACHINE}" != "collie" ]; then
- cp updater.sh.${MACHINE} ${IMAGE_NAME}-installkit/updater.sh
- fi
+ cp updater.sh.${MACHINE} ${IMAGE_NAME}-installkit/updater.sh
+
tar czf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit.tgz ${IMAGE_NAME}-installkit/
md5sum ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit.tgz > ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit.tgz.md5
rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/
}
-# Don't include kernels in standard images for Zaurus machines
-RDEPENDS_kernel-base = ""
-
KERNEL_IMAGETYPE ?= "zImage"
+
+require conf/machine/include/kexecboot.inc
diff --git a/conf/machine/mx31moboard.conf b/conf/machine/mx31moboard.conf
index a00a9b1be3..a1a5212ee9 100644
--- a/conf/machine/mx31moboard.conf
+++ b/conf/machine/mx31moboard.conf
@@ -20,7 +20,7 @@ module_conf_g_ether = "alias usb0 g_ether"
module_conf_rt2570-k2wrlz = "alias rausb0 rt2570"
# tinylogin is broken for our speeds
-DISTRO_LOGIN_MANAGER = "busybox"
+IMAGE_LOGIN_MANAGER = "busybox"
# used by sysvinit_2
SERIAL_CONSOLE = "-Lh 921600 ttymxc0 vt100"
diff --git a/conf/machine/om-3d7k.conf b/conf/machine/om-3d7k.conf
new file mode 100644
index 0000000000..95bfd40b23
--- /dev/null
+++ b/conf/machine/om-3d7k.conf
@@ -0,0 +1,39 @@
+#-----------------------------------------------------------------------------
+#@TYPE: Machine
+#@NAME: Openmoko 3D7K
+#@DESCRIPTION: Machine configuration for the Openmoko 3D7K GSM phone
+#-----------------------------------------------------------------------------
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-openmoko-devel"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost phone vfat ext2"
+MACHINE_DISPLAY_WIDTH_PIXELS = "480"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
+MACHINE_DISPLAY_ORIENTATION = "0"
+MACHINE_DISPLAY_PPI = "285"
+XSERVER = "xserver-xorg"
+
+# package machine specific modules
+MACHINE_EXTRA_RRECOMMENDS = "\
+ kernel-modules \
+"
+
+# device has 4 UARTS:
+# ttySAC0: mc75 GSM modem
+# ttySAC1: NC
+# ttySAC2: NC
+# ttySAC3: serial console
+SERIAL_CONSOLE = "115200 ttySAC3"
+USE_VT = "0"
+
+# used by some images
+ROOT_FLASH_SIZE = "256"
+
+# boots only from SD
+IMAGE_FSTYPES = "tar.bz2"
+
+# tune for S3C6410
+include conf/machine/include/tune-arm1176jzf-s.inc
diff --git a/conf/machine/omap3evm.conf b/conf/machine/omap3evm.conf
index 646db492ef..610b1dfc12 100644
--- a/conf/machine/omap3evm.conf
+++ b/conf/machine/omap3evm.conf
@@ -25,7 +25,7 @@ EXTRA_IMAGECMD_jffs2 = "-lnp "
SERIAL_CONSOLE = "115200 ttyS0"
-PREFERRED_PROVIDER_virtual/kernel ?= "linux-omap"
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-omap-pm"
KERNEL_IMAGETYPE = "uImage"
@@ -36,3 +36,20 @@ UBOOT_MACHINE = "omap3_evm_config"
MACHINE_FEATURES = "kernel26 apm usbgadget usbhost vfat ext2 screen touchscreen"
+# NOTE: there are NAND and OneNAND versions of this board...
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 1996 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 1996"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
+
diff --git a/conf/machine/omapzoom.conf b/conf/machine/omapzoom.conf
new file mode 100644
index 0000000000..22fe5d4643
--- /dev/null
+++ b/conf/machine/omapzoom.conf
@@ -0,0 +1,57 @@
+#@TYPE: Machine
+#@NAME: omapzoom machine
+#@DESCRIPTION: Machine configuration for the http://omapzoom.org board
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-omapfb \
+ xf86-input-keyboard"
+
+# Only has DVI connector for external screen
+GUI_MACHINE_CLASS = "bigscreen"
+
+#include conf/machine/include/tune-arm1136jf-s.inc
+# requires gcc 4.3.0:
+include conf/machine/include/tune-cortexa8.inc
+
+
+IMAGE_FSTYPES += "tar.bz2 jffs2"
+EXTRA_IMAGECMD_jffs2 = "-lnp "
+
+# Guesswork
+SERIAL_CONSOLE = "115200 ttyS2"
+
+# Will be merged into the linux-omap recipe soon
+PREFERRED_PROVIDER_virtual/kernel = "linux-omapzoom"
+
+KERNEL_IMAGETYPE = "uImage"
+
+UBOOT_ENTRYPOINT = "0x80008000"
+UBOOT_LOADADDRESS = "0x80008000"
+UBOOT_MACHINE = "omap3_zoom1_config"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 1996 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 1996"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
+
+
+PREFERRED_VERSION_u-boot = "git"
+#EXTRA_IMAGEDEPENDS += "u-boot x-load"
+
+#MACHINE_EXTRA_RRECOMMENDS = " omap3-sgx-modules "
+# and sdio
+MACHINE_FEATURES = "kernel26 touchscreen phone screen apm usbgadget usbhost vfat alsa"
diff --git a/conf/machine/overo.conf b/conf/machine/overo.conf
new file mode 100644
index 0000000000..2a93ab069d
--- /dev/null
+++ b/conf/machine/overo.conf
@@ -0,0 +1,45 @@
+#@TYPE: Machine
+#@NAME: overo machine
+#@DESCRIPTION: Machine configuration for the Gumstix Overo
+
+include conf/machine/include/tune-cortexa8.inc
+
+TARGET_ARCH = "arm"
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat alsa touchscreen"
+
+UBOOT_ENTRYPOINT = "0x80008000"
+UBOOT_LOADADDRESS = "0x80008000"
+UBOOT_MACHINE_overo = "omap3_overo_config"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-omap"
+
+KERNEL_IMAGETYPE = "uImage"
+SERIAL_CONSOLE = "115200 ttyS2"
+
+IMAGE_FSTYPES += "tar.bz2"
+EXTRA_IMAGEDEPENDS += " u-boot-omap3 x-load"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-input-tslib \
+ xf86-video-omapfb \
+ xf86-input-keyboard"
+
+GUI_MACHINE_CLASS = "bigscreen"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 1996 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 1996"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
diff --git a/conf/machine/oxe810.conf b/conf/machine/oxnas.conf
index 08213297c8..08213297c8 100644
--- a/conf/machine/oxe810.conf
+++ b/conf/machine/oxnas.conf
diff --git a/conf/machine/poodle.conf b/conf/machine/poodle.conf
index c7c81c9f9a..4e8f011a1e 100644
--- a/conf/machine/poodle.conf
+++ b/conf/machine/poodle.conf
@@ -3,7 +3,6 @@
#@DESCRIPTION: Machine configuration for the PXA250 based Sharp Zaurus SL-B500 and SHarp Zaurus SL-5600 devices
require conf/machine/include/zaurus-2.6.inc
-require conf/machine/include/kexecboot.inc
require conf/machine/include/tune-xscale.inc
IMAGE_FSTYPES ?= "jffs2"
diff --git a/conf/machine/ronetix-pm9261.conf b/conf/machine/ronetix-pm9261.conf
new file mode 100644
index 0000000000..5af1e721a7
--- /dev/null
+++ b/conf/machine/ronetix-pm9261.conf
@@ -0,0 +1,24 @@
+#@TYPE: Machine
+#@Name: Ronetix PM9261 CPU Module
+#@DESCRIPTION: Machine.configuration for the Ronetix evaluation board with PM9261 CPU module
+#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+
+KERNEL_IMAGETYPE = "uImage"
+
+#don't try to access tty1
+USE_VT = "0"
+
+MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget screen touchscreen"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+IMAGE_FSTYPES ?= "jffs2"
+EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n"
+
+require conf/machine/include/tune-arm926ejs.inc
+
diff --git a/conf/machine/ronetix-pm9263.conf b/conf/machine/ronetix-pm9263.conf
new file mode 100644
index 0000000000..96acbe25dd
--- /dev/null
+++ b/conf/machine/ronetix-pm9263.conf
@@ -0,0 +1,24 @@
+#@TYPE: Machine
+#@Name: Ronetix PM9263 CPU Module
+#@DESCRIPTION: Machine.configuration for the Ronetix evaluation board with PM9263 CPU module
+#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+
+KERNEL_IMAGETYPE = "uImage"
+
+#don't try to access tty1
+USE_VT = "0"
+
+MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget screen touchscreen"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+IMAGE_FSTYPES ?= "jffs2"
+EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n"
+
+require conf/machine/include/tune-arm926ejs.inc
+
diff --git a/conf/machine/rx1950.conf b/conf/machine/rx1950.conf
index 0ec1b32a2d..1495e867d9 100644
--- a/conf/machine/rx1950.conf
+++ b/conf/machine/rx1950.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/stb225.conf b/conf/machine/stb225.conf
index 97370e1fe8..c57adb09f8 100644
--- a/conf/machine/stb225.conf
+++ b/conf/machine/stb225.conf
@@ -1,8 +1,14 @@
# PNX8335 STB225 board
+
TARGET_ARCH = "mipsel"
-TARGET_CC_ARCH="-march=mips32"
+
MACHINE_FEATURES = "kernel26"
-IMAGE_FSTYPES="tar.gz"
-PREFERRED_PROVIDER_virtual/kernel="linux"
-KERNEL_IMAGETYPE="vmlinux"
-KERNEL_OUTPUT="${KERNEL_IMAGETYPE}"
+
+IMAGE_FSTYPES += "tar.gz"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+KERNEL_IMAGETYPE = "uImage"
+
+SERIAL_CONSOLE ?= "115200 ttySA0"
+
+require conf/machine/include/tune-mips32.inc
diff --git a/conf/machine/tosa.conf b/conf/machine/tosa.conf
index 0b86a3c5d4..593ceab33d 100644
--- a/conf/machine/tosa.conf
+++ b/conf/machine/tosa.conf
@@ -4,9 +4,8 @@
require conf/machine/include/zaurus-2.6.inc
require conf/machine/include/tune-xscale.inc
-require conf/machine/include/kexecboot.inc
-IMAGE_FSTYPES ?= "jffs2 tar.gz"
+IMAGE_FSTYPES += "jffs2 tar.gz"
# wlan-ng Modules
# OHCI suspend/resume fixup
diff --git a/conf/machine/vortex86sx.conf b/conf/machine/vortex86sx.conf
index 4595b6aebe..b2a116d109 100644
--- a/conf/machine/vortex86sx.conf
+++ b/conf/machine/vortex86sx.conf
@@ -4,7 +4,6 @@
require conf/machine/include/tune-i486sx.inc
MACHINE_FEATURES += "x86"
-MACHINE_EXTRA_RRECOMMENDS = "kernel-module-uvesafb v86d"
KERNEL_IMAGETYPE = "bzImage"
diff --git a/contrib/angstrom/build-feeds.sh b/contrib/angstrom/build-feeds.sh
index 693e96baf9..7e5f1b6f83 100755
--- a/contrib/angstrom/build-feeds.sh
+++ b/contrib/angstrom/build-feeds.sh
@@ -80,12 +80,17 @@ do
bluez-gnome \
bluez-hcidump \
boa \
+ bonjour \
camera-assistant \
cdparanoia \
+ cdstatus \
checkers \
cherokee \
claws-mail \
+ connman \
+ connman-gnome \
contacts \
+ cron \
cvs \
cwiid \
dates \
@@ -133,6 +138,7 @@ do
gimp \
glider \
gmp \
+ gmpc \
gnome-games \
gnome-mplayer \
gnome-panel \
@@ -169,13 +175,17 @@ do
iptables \
irssi \
iscsi-target \
+ ivman \
jamvm \
kismet \
konqueror-embedded \
labyrinth \
+ lcd4linux \
leafpad \
lighttpd \
links-x11 \
+ lirc \
+ lowpan-utils \
m4 \
madplay \
mahjongg \
@@ -226,13 +236,16 @@ do
pipeman \
pkgconfig \
places \
+ pmount \
pocketcellar \
povray \
prboom \
prelink \
+ proftpd \
pushover \
python \
python-pybluez \
+ python-coherence \
qfish2 \
qmatrix \
qpe-nmap \
@@ -270,6 +283,7 @@ do
task-opie-apps \
task-opie-games \
task-proper-tools \
+ task-xqtlauncher \
tasks \
texinfo \
thttpd \
@@ -289,9 +303,13 @@ do
viking \
vlc \
vpnc \
+ w3cam \
wifi-radar \
win4 \
+ wireshark \
wpa-gui \
+ wt \
+ wt3 \
x11vnc \
xf86-input-evdev \
xf86-input-keyboard \
@@ -335,7 +353,8 @@ done
# machine packages (machine specific (sub)packages)
-for machine in beagleboard omap3evm neuros-osd2 efika dht-walnut palmt650 omap5912osk ixp4xxle ixp4xxbe c7x0 poodle tosa akita spitz collie simpad om-gta01 om-gta02 a780 at91sam9263ek qemuarm h2200 h3900 h4000 hx4700 nokia800 dns323 mv2120 kuropro lspro tsx09 ts409 qemux86
+for machine in overo omap3-pandora beagleboard omap3evm neuros-osd2 efika dht-walnut palmt650 omap5912osk ixp4xxle ixp4xxbe c7x0 poodle tosa akita spitz collie simpad om-gta01 om-gta02 a780 at91sam9263ek qemuarm h2200 h3900 h4000 hx4700 nokia800 dns323 mv2120 kuropro lspro tsx09 ts409 qemux86
+
do
BUILD_MACHINE=$machine
BUILD_CLEAN="opkg-native qmake-native qmake2-native qt-x11-free python python-native python-pygtk gnome-icon-theme"
@@ -349,3 +368,10 @@ do
do_build
done
+for machine in collie h2200 hx4700 spitz akita tosa poodle c7x0
+do
+ BUILD_MACHINE=$machine
+ BUILD_TARGETS="linux-kexecboot \
+ "
+ do_build
+done
diff --git a/contrib/angstrom/build-release.sh b/contrib/angstrom/build-release.sh
index 1668717cd3..1cbb1e2a70 100755
--- a/contrib/angstrom/build-release.sh
+++ b/contrib/angstrom/build-release.sh
@@ -60,7 +60,7 @@ done
# No graphics
-for machine in dns323 mv2120 kuropro lspro tsx09 ts409 gumstix-connex gumstix-verdex efika dht-walnut omap5912osk
+for machine in dns323 mv2120 kuropro lspro tsx09 ts409 gumstix-connex gumstix-verdex efika dht-walnut omap5912osk afeb9260
do
BUILD_MACHINE=$machine
BUILD_CLEAN="base-files"
@@ -76,17 +76,8 @@ do
do_build
done
-# build altboot images for zaurus
-for machine in c7x0 poodle tosa akita spitz collie
-do
- BUILD_CLEAN="base-files"
- BUILD_MACHINE=$machine
- BUILD_TARGETS="altboot-console-image"
- do_build
-done
-
# build kexecboot kernels for supported machines
-for machine in poodle collie
+for machine in h2200 hx4700 c7x0 akita spitz poodle collie tosa
do
BUILD_MACHINE=$machine
BUILD_TARGETS="linux-kexecboot"
@@ -94,17 +85,8 @@ do
done
-# Make uclibc initramfs-bootmenu-image for ipaqs, this should move to more generic klibc stuff, but till then:
-DO_UCLIBC=1
-for machine in h2200 h3900 h4000 h5000 hx4700
-do
- BUILD_MACHINE=$machine
- BUILD_TARGETS="initramfs-bootmenu-image"
-done
-DO_UCLIBC=0
-
# graphics, flash storage
-for machine in beagleboard omap3evm om-gta01 om-gta02 a780 at91sam9263ek qemuarm qemux86 h2200 h3900 h4000 h5000 poodle tosa hx4700 c7x0 spitz akita collie simpad
+for machine in overo omap3-pandora beagleboard omap3evm om-gta01 om-gta02 a780 at91sam9263ek qemuarm qemux86 h2200 h3900 h4000 h5000 poodle tosa hx4700 c7x0 spitz akita collie simpad palmz72
do
BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
@@ -113,7 +95,7 @@ do
done
# graphics, disk storage
-for machine in spitz beagleboard omap3evm
+for machine in spitz overo omap3-pandora beagleboard omap3evm
do
BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
@@ -130,7 +112,7 @@ do
done
# omap3 boards
-for machine in beagleboard omap3evm
+for machine in overo omap3-pandora beagleboard omap3evm
do
BUILD_MACHINE=$machine
BUILD_TARGETS="beagleboard-demo-image"
@@ -138,7 +120,7 @@ do
done
# Opie
-for machine in h2200 h3900 h4000 h5000 hx4700 htcuniversal akita c7x0 collie poodle spitz tosa simpad
+for machine in h2200 h3900 h4000 h5000 hx4700 htcuniversal akita c7x0 collie poodle spitz tosa simpad palmz72
do
BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
diff --git a/contrib/angstrom/local.conf b/contrib/angstrom/local.conf
new file mode 100644
index 0000000000..76e38396cc
--- /dev/null
+++ b/contrib/angstrom/local.conf
@@ -0,0 +1,28 @@
+# Where to store sources
+DL_DIR = "/OE/downloads"
+
+INHERIT += " rm_work "
+
+# Make sure you have these installed
+ASSUME_PROVIDED += "gdk-pixbuf-csource-native imagemagick-native librsvg-native"
+
+# Which files do we want to parse:
+BBFILES := "/OE/org.openembedded.dev/packages/*/*.bb"
+BBMASK = ""
+
+# What kind of images do we want?
+IMAGE_FSTYPES += " tar.bz2 "
+
+# Set TMPDIR instead of defaulting it to $pwd/tmp
+TMPDIR = "/OE/${DISTRO}-dev"
+
+# Make use of SMP and fast disks
+PARALLEL_MAKE = "-j4"
+BB_NUMBER_THREADS = "4"
+
+#tinderbox
+#INHERIT += "oestats-client"
+OESTATS_BUILDER = "myname"
+
+DISTRO = "angstrom-2008.1"
+
diff --git a/contrib/angstrom/sort.sh b/contrib/angstrom/sort.sh
index 90d5dda9fd..21731668ac 100755
--- a/contrib/angstrom/sort.sh
+++ b/contrib/angstrom/sort.sh
@@ -58,7 +58,7 @@ case "$arch" in
"armv7")
machines="" ;;
"armv7a")
- machines="beagleboard omap3evm omap3-pandora" ;;
+ machines="beagleboard omap3evm omap3-pandora overo" ;;
"avr32")
machines="atngw100 at32stk1000" ;;
"bfin")
@@ -144,9 +144,6 @@ for i in ../* ; do
echo " DONE"
cd ${BPWD}
-echo -n "Stripping source lines from Package files"
-for i in `find . -name Packages` ; do grep -v ^Source: $i|gzip -c9>$i.gz ;gunzip -c $i.gz>$i ; touch $i.sig ; done
-echo " DONE"
}
echo "Processing 'all' feed"
@@ -162,4 +159,10 @@ if [ "$1" != "--skip-sorted-list" ]; then
for i in $(find ../ -name "*.ipk"| grep -v unsorted) ; do basename $i ; done > files-sorted
fi
-#(cd ~/website/repo ; php update.php)
+( cd ~/website/repo-updater ; php update.php ; rm ../repo/feeds.db* ; cp feeds.db* ../repo )
+
+echo -n "Stripping source lines from Package files"
+for i in `find .. -name Packages` ; do grep -v ^Source: $i|gzip -c9>$i.gz ;gunzip -c $i.gz>$i ; touch $i.sig ; done
+echo " DONE"
+
+
diff --git a/contrib/angstrom/upload-packages.sh b/contrib/angstrom/upload-packages.sh
index 4d3362b6d2..1ae7086cab 100644
--- a/contrib/angstrom/upload-packages.sh
+++ b/contrib/angstrom/upload-packages.sh
@@ -31,6 +31,9 @@ echo "Checking for duplicates"
cat files-remote files-local | sort | uniq -u >files-uniq
cat files-uniq files-local | sort | uniq -d > files-trans
+# Remove SGX files
+rm -f upload-queue/*3.00.*
+
# Copy over non-duplicate files
echo "Starting rsync..."
rsync -vz --copy-links --progress --files-from=files-trans upload-queue/ $REMOTEM:$REMOTED/unsorted/
diff --git a/contrib/artwork/oe.svg b/contrib/artwork/oe.svg
index 8f3dd17041..4af9587094 100644
--- a/contrib/artwork/oe.svg
+++ b/contrib/artwork/oe.svg
@@ -1,123 +1,80 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
-<svg
- id="svg1"
- sodipodi:version="0.32"
- inkscape:version="0.38.1"
- width="8.0000000cm"
- height="6.0000000cm"
- sodipodi:docname="oe-2.svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:xml="http://www.w3.org/XML/1998/namespace"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- sodipodi:docbase="/home/kergoth/docs/oe/logos/phil">
- <defs
- id="defs3" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="4.9119411"
- inkscape:cx="130.17182"
- inkscape:cy="82.153497"
- inkscape:window-width="1600"
- inkscape:window-height="1181"
- showguides="true"
- snaptoguides="true"
- inkscape:window-x="0"
- inkscape:window-y="0" />
- <path
- style="fill:#9ca3c2;fill-rule:evenodd;stroke:#000000;stroke-width:0.8625;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;"
- d="M 150.60592,91.743209 C 150.60592,126.90946 122.06521,155.45016 86.898980,155.45016 C 51.732741,155.45016 23.192037,126.90946 23.192037,91.743209 C 23.192037,56.576987 51.732741,28.036281 86.898980,28.036281 C 122.06521,28.036281 150.60592,56.576987 150.60592,91.743209 z M 125.59088,91.743225 C 125.59088,123.01260 108.25691,148.39065 86.898996,148.39065 C 65.541064,148.39065 48.207098,123.01260 48.207098,91.743225 C 48.207098,60.473843 65.541064,35.095803 86.898996,35.095803 C 108.25691,35.095803 125.59088,60.473843 125.59088,91.743225 z "
- id="path861" />
- <path
- style="fill:#9ca3c2;fill-rule:evenodd;stroke:#000000;stroke-width:0.8625;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1.0000000;fill-opacity:1.0000000;stroke-dasharray:none;"
- d="M 132.75147,91.356420 C 132.87448,64.917742 151.72789,27.858725 196.63972,27.835097 C 207.45455,27.890687 223.63895,35.346804 225.55952,41.517017 C 183.84040,25.116588 151.35632,59.619550 151.26456,91.865400 C 151.42728,124.36573 184.86806,158.68422 225.66493,141.78379 C 222.82764,147.71089 208.80153,155.59326 196.50275,155.65048 C 151.84536,155.85942 132.62846,118.04958 132.75147,91.356420 z "
- id="path869"
- sodipodi:nodetypes="csczcsz" />
- <path
- style="fill:#9ca3c2;fill-rule:evenodd;stroke:#000000;stroke-width:0.8625;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;"
- d="M 173.2093 62.12526 C 187.1012 61.82853 198.1696 76.01726 198.3348 91.56551 C 198.4135 107.2003 187.9133 121.6873 173.1847 121.1256 C 187.7964 112.1516 188.1917 94.48494 188.1594 91.61621 C 188.1270 88.66092 187.4490 70.73875 173.2093 62.12526 z "
- id="path877"
- sodipodi:nodetypes="czczc" />
- <g
- id="g921"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-188.5137,-265.4138)">
- <text
- xml:space="preserve"
- style="font-size:56.000000;stroke-width:3.0000000pt;font-family:Verdana;"
- x="417.81043"
- y="1061.9202"
- id="text902"
- sodipodi:linespacing="100%"
- transform="matrix(0.631134,0.000000,0.000000,0.631134,3.430357,0.000000)">
- <tspan
- id="tspan903"
- style="fill:#000000;fill-opacity:1.0000000;">open</tspan>
- </text>
- <text
- xml:space="preserve"
- style="font-size:56.000000;fill:#929292;stroke-width:3.0000000pt;font-family:Verdana;"
- x="567.82333"
- y="1061.9202"
- id="text905"
- sodipodi:linespacing="100%"
- transform="scale(0.631134,0.631134)">
- <tspan
- id="tspan906"
- style="fill:#929292;fill-opacity:1.0000000;">embedded</tspan>
- </text>
- </g>
- <g
- id="g945"
- style="stroke:#000000;stroke-opacity:0.1200;">
- <path
- style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-opacity:0.1200;"
- d="M 210.10063,527.64010 L 600.37556,527.64010"
- id="path840"
- sodipodi:nodetypes="cc"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 577.34380,527.64009 C 577.34380,579.33452 535.38890,621.28942 483.69447,621.28942 C 432.00004,621.28942 390.04514,579.33452 390.04514,527.64009 C 390.04514,475.94566 432.00004,433.99076 483.69447,433.99076 C 535.38890,433.99076 577.34380,475.94566 577.34380,527.64009 z "
- id="path849"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 378.24332,527.64008 C 378.24332,558.43082 353.25373,583.42040 322.46301,583.42040 C 291.67226,583.42040 266.68267,558.43082 266.68267,527.64008 C 266.68267,496.84933 291.67226,471.85976 322.46301,471.85976 C 353.25373,471.85976 378.24332,496.84933 378.24332,527.64008 z "
- id="path839"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 322.46300,422.21153 L 322.46300,633.06864"
- id="path841"
- sodipodi:nodetypes="cc"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 539.47480,527.64009 C 539.47480,558.43083 514.48521,583.42041 483.69449,583.42041 C 452.90374,583.42041 427.91415,558.43083 427.91415,527.64009 C 427.91415,496.84934 452.90374,471.85977 483.69449,471.85977 C 514.48521,471.85977 539.47480,496.84934 539.47480,527.64009 z "
- id="path850"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 483.69448,422.21153 L 483.69448,633.06864"
- id="path851"
- sodipodi:nodetypes="cc"
- transform="matrix(0.680271,0.000000,0.000000,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.76683110;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 144.34955,91.743214 C 144.34955,123.45594 118.61168,149.19380 86.898970,149.19380 C 55.186251,149.19380 29.448400,123.45594 29.448400,91.743214 C 29.448400,60.030495 55.186251,34.292644 86.898970,34.292644 C 118.61168,34.292644 144.34955,60.030495 144.34955,91.743214 z "
- id="path943" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.76683110;stroke-linejoin:round;stroke-opacity:0.1200;"
- d="M 254.03070,91.743050 C 254.03070,123.45578 228.29283,149.19364 196.58012,149.19364 C 164.86740,149.19364 139.12954,123.45578 139.12954,91.743050 C 139.12954,60.030332 164.86740,34.292480 196.58012,34.292480 C 228.29283,34.292480 254.03070,60.030332 254.03070,91.743050 z "
- id="path944" />
- </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="209.104px" height="167.858px" viewBox="0 0 209.104 167.858" enable-background="new 0 0 209.104 167.858"
+ xml:space="preserve">
+<g>
+ <g>
+ <path fill="#00BCE4" d="M74.145,145.897c-0.568,0.568-0.841,1.228-0.841,2.03v0.339h5.744v-0.339c0-1.601-1.273-2.87-2.872-2.872
+ C75.372,145.056,74.713,145.33,74.145,145.897z M73.304,154.262c0,0.876,0.729,1.605,1.605,1.605h6.334
+ c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.334c-1.657,0-3.101-0.58-4.265-1.73
+ c-1.15-1.163-1.731-2.607-1.731-4.265v-6.334c0-4.041,3.221-7.261,7.262-7.263c2.019,0,3.752,0.705,5.148,2.115
+ c1.41,1.396,2.114,3.13,2.114,5.147v4.729H73.304V154.262z"/>
+ <path fill="#00BCE4" d="M99.738,140.665c1.662,0,3.094,0.584,4.246,1.75c1.166,1.153,1.749,2.584,1.75,4.246v11.4
+ c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195v-11.4c0-0.922-0.684-1.604-1.605-1.605h-1.604v13.006
+ c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195v-13.006h-3.21v13.006c0,1.357-0.838,2.195-2.195,2.195
+ s-2.195-0.838-2.195-2.195V142.86c0-1.357,0.838-2.195,2.195-2.195H99.738z"/>
+ <path fill="#00BCE4" d="M123.308,154.262c0,3.37-2.625,5.995-5.995,5.995h-6.334c-1.356,0-2.194-0.838-2.194-2.195V135.26
+ c0-1.356,0.838-2.195,2.194-2.195c1.357,0,2.195,0.839,2.195,2.195v5.405h4.139c3.472,0,5.993,2.658,5.995,5.995V154.262z
+ M113.174,145.056v10.812h4.139c0.903,0,1.604-0.701,1.604-1.605v-7.601c0-0.927-0.678-1.604-1.605-1.605H113.174z"/>
+ <path fill="#00BCE4" d="M130.897,145.897c-0.568,0.568-0.842,1.228-0.842,2.03v0.339h5.744v-0.339c0-1.601-1.273-2.87-2.872-2.872
+ C132.124,145.056,131.466,145.33,130.897,145.897z M130.056,154.262c0,0.876,0.729,1.605,1.605,1.605h6.334
+ c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.334c-1.657,0-3.102-0.58-4.266-1.73
+ c-1.148-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.221-7.261,7.263-7.263c2.019,0,3.752,0.705,5.147,2.115
+ c1.41,1.396,2.115,3.13,2.115,5.147v4.729h-10.135V154.262z"/>
+ <path fill="#00BCE4" d="M143.688,143.646c1.129-1.972,2.906-2.98,5.201-2.981h4.139v-5.405c0-1.356,0.838-2.195,2.195-2.195
+ s2.195,0.839,2.195,2.195v22.802c0,1.357-0.838,2.195-2.195,2.195h-6.334c-1.657,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-7.601C142.894,145.581,143.157,144.572,143.688,143.646z M147.741,145.532
+ c-0.307,0.309-0.457,0.665-0.457,1.129v7.601c0,0.878,0.727,1.605,1.605,1.605h4.139v-10.812h-4.139
+ C148.433,145.056,148.067,145.207,147.741,145.532z"/>
+ <path fill="#00BCE4" d="M160.917,143.646c1.129-1.972,2.905-2.98,5.201-2.981h4.139v-5.405c0-1.356,0.838-2.195,2.195-2.195
+ c1.356,0,2.195,0.839,2.195,2.195v22.802c0,1.357-0.839,2.195-2.195,2.195h-6.334c-1.657,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-7.601C160.122,145.581,160.386,144.572,160.917,143.646z M164.97,145.532
+ c-0.308,0.309-0.457,0.665-0.457,1.129v7.601c0,0.878,0.727,1.605,1.605,1.605h4.139v-10.812h-4.139
+ C165.661,145.056,165.296,145.207,164.97,145.532z"/>
+ <path fill="#00BCE4" d="M182.583,145.897c-0.568,0.568-0.842,1.228-0.842,2.03v0.339h5.743l0.001-0.339
+ c0-1.601-1.273-2.87-2.873-2.872C183.81,145.056,183.15,145.33,182.583,145.897z M181.741,154.262
+ c0,0.876,0.729,1.605,1.605,1.605h6.333c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.333
+ c-1.658,0-3.102-0.58-4.266-1.73c-1.149-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.221-7.261,7.262-7.263
+ c2.019,0,3.752,0.705,5.148,2.115c1.41,1.396,2.114,3.13,2.114,5.147v4.729h-10.134V154.262z"/>
+ <path fill="#00BCE4" d="M195.374,143.646c1.129-1.972,2.905-2.98,5.2-2.981h4.139v-5.405c0-1.356,0.839-2.195,2.195-2.195
+ c1.357,0,2.195,0.839,2.195,2.195v22.802c0,1.357-0.838,2.195-2.195,2.195h-6.333c-1.658,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-7.601C194.579,145.582,194.843,144.572,195.374,143.646z M199.427,145.532
+ c-0.308,0.309-0.457,0.665-0.457,1.129v7.601c0,0.878,0.727,1.605,1.605,1.605h4.138v-10.812h-4.138
+ C200.118,145.056,199.753,145.207,199.427,145.532z"/>
+ </g>
+ <g>
+ <path fill="#5C6F7B" d="M19.423,140.665h6.333c1.662,0,3.094,0.584,4.246,1.75c1.167,1.153,1.75,2.585,1.75,4.246v7.601
+ c0,1.651-0.587,3.082-1.748,4.244c-1.152,1.167-2.586,1.751-4.248,1.751h-4.138v5.406c0,1.357-0.838,2.195-2.195,2.195
+ s-2.195-0.839-2.195-2.195V142.86C17.228,141.503,18.066,140.665,19.423,140.665z M21.619,155.867h4.138
+ c0.903,0,1.605-0.701,1.605-1.605v-7.601c0-0.928-0.679-1.604-1.605-1.605h-4.138V155.867z"/>
+ <path fill="#5C6F7B" d="M39.688,145.897c-0.569,0.568-0.841,1.228-0.841,2.03v0.339h5.743v-0.339c0-1.601-1.272-2.87-2.872-2.872
+ C40.915,145.056,40.256,145.33,39.688,145.897z M38.847,154.262c0,0.876,0.729,1.605,1.605,1.605h6.333
+ c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.333c-1.657,0-3.101-0.58-4.265-1.73
+ c-1.15-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.22-7.261,7.262-7.263c2.018,0,3.752,0.705,5.147,2.115
+ c1.411,1.396,2.115,3.13,2.115,5.147v4.729H38.847V154.262z"/>
+ <path fill="#5C6F7B" d="M51.685,142.86c0-1.357,0.838-2.195,2.195-2.195h6.334c1.662,0,3.094,0.584,4.246,1.75
+ c1.167,1.153,1.749,2.584,1.75,4.246v11.4c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195v-11.4
+ c0-0.922-0.684-1.604-1.605-1.605h-4.138v13.006c0,1.357-0.838,2.195-2.195,2.195c-1.357,0-2.195-0.838-2.195-2.195V142.86z"/>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M10.134,147.928c0-1.601-1.273-2.87-2.872-2.872
+ c-1.599,0-2.872,1.273-2.872,2.872v5.067c0,0.824,0.267,1.485,0.822,2.049c0.564,0.555,1.226,0.823,2.05,0.823
+ c1.601,0,2.871-1.273,2.872-2.873V147.928z M0,147.928c0-4.041,3.22-7.261,7.262-7.263c2.019,0,3.752,0.705,5.148,2.115
+ c1.411,1.396,2.114,3.13,2.114,5.147v5.067c0,4.041-3.222,7.262-7.262,7.262c-1.997,0-3.732-0.713-5.147-2.114
+ C0.713,156.727,0,154.991,0,152.995V147.928z"/>
+ </g>
+ <g>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M25.428,79.124C25.428,35.424,60.853,0,104.552,0
+ s79.123,35.424,79.123,79.124c0,14.938-4.139,28.909-11.333,40.828h-26.366c10.352-10.5,16.738-24.918,16.738-40.828
+ c0-32.123-26.039-58.163-58.162-58.163s-58.163,26.04-58.163,58.163c0,15.91,6.388,30.328,16.738,40.828H36.761
+ C29.568,108.032,25.428,94.062,25.428,79.124z"/>
+ </g>
+ <g>
+ <path fill="#00BCE4" d="M94.122,79.124c0-2.882,1.168-5.491,3.059-7.379l17.436-17.494c-9.682-3.913-21.184-1.944-29.033,5.905
+ c-10.476,10.476-10.476,27.461,0,37.937c10.476,10.477,27.461,10.477,37.938,0c4.547-4.547,7.12-10.321,7.721-16.256l18.46-18.461
+ c5.838,16.774,2.056,36.151-11.345,49.553c-18.67,18.67-48.939,18.67-67.609,0c-18.67-18.67-18.67-48.938,0-67.608
+ c18.669-18.67,48.939-18.67,67.609,0c2.535,2.536,4.728,5.287,6.574,8.193l-32.986,32.997c-1.888,1.89-4.511,3.045-7.393,3.045
+ C98.791,89.554,94.122,84.884,94.122,79.124z"/>
+ </g>
+</g>
+</svg>
diff --git a/contrib/artwork/powered-by-oe.svg b/contrib/artwork/powered-by-oe.svg
index 7e1c382f57..2898b095cc 100644
--- a/contrib/artwork/powered-by-oe.svg
+++ b/contrib/artwork/powered-by-oe.svg
@@ -1,144 +1,123 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- 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://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- id="svg1"
- sodipodi:version="0.32"
- inkscape:version="0.45.1"
- width="8.0000000cm"
- height="6.0000000cm"
- sodipodi:docname="oe.svg"
- sodipodi:docbase="/home/mallum/Desktop"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <metadata
- id="metadata22">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs3" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="3.621852"
- inkscape:cx="141.73228"
- inkscape:cy="106.29921"
- inkscape:window-width="1600"
- inkscape:window-height="972"
- showguides="true"
- snaptoguides="true"
- inkscape:window-x="0"
- inkscape:window-y="25"
- inkscape:current-layer="svg1" />
- <path
- style="fill:#9ca3c2;fill-rule:evenodd;stroke:#000000;stroke-width:0.86250001;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
- d="M 150.60592,99.743209 C 150.60592,134.90946 122.06521,163.45016 86.89898,163.45016 C 51.732741,163.45016 23.192037,134.90946 23.192037,99.743209 C 23.192037,64.576987 51.732741,36.036281 86.89898,36.036281 C 122.06521,36.036281 150.60592,64.576987 150.60592,99.743209 z M 125.59088,99.743225 C 125.59088,131.0126 108.25691,156.39065 86.898996,156.39065 C 65.541064,156.39065 48.207098,131.0126 48.207098,99.743225 C 48.207098,68.473843 65.541064,43.095803 86.898996,43.095803 C 108.25691,43.095803 125.59088,68.473843 125.59088,99.743225 z "
- id="path861" />
- <path
- style="fill:#9ca3c2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.86250001;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
- d="M 132.75147,99.35642 C 132.87448,72.917742 151.72789,35.858725 196.63972,35.835097 C 207.45455,35.890687 223.63895,43.346804 225.55952,49.517017 C 183.8404,33.116588 151.35632,67.61955 151.26456,99.8654 C 151.42728,132.36573 184.86806,166.68422 225.66493,149.78379 C 222.82764,155.71089 208.80153,163.59326 196.50275,163.65048 C 151.84536,163.85942 132.62846,126.04958 132.75147,99.35642 z "
- id="path869"
- sodipodi:nodetypes="csczcsz" />
- <path
- style="fill:#9ca3c2;fill-rule:evenodd;stroke:#000000;stroke-width:0.86250001;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
- d="M 173.2093,70.12526 C 187.1012,69.82853 198.1696,84.01726 198.3348,99.56551 C 198.4135,115.2003 187.9133,129.6873 173.1847,129.1256 C 187.7964,120.1516 188.1917,102.48494 188.1594,99.61621 C 188.127,96.66092 187.449,78.73875 173.2093,70.12526 z "
- id="path877"
- sodipodi:nodetypes="czczc" />
- <g
- id="g921"
- transform="matrix(0.680271,0,0,0.680271,-188.5137,-257.4138)">
- <text
- xml:space="preserve"
- style="font-size:56px;line-height:100%;stroke-width:3pt;font-family:Verdana"
- x="417.81042"
- y="1061.9202"
- id="text902"
- sodipodi:linespacing="100%"
- transform="matrix(0.631134,0,0,0.631134,3.430357,0)"> <tspan
- id="tspan903"
- style="fill:#000000;fill-opacity:1">open</tspan> </text>
- <text
- xml:space="preserve"
- style="font-size:56px;line-height:100%;fill:#929292;stroke-width:3pt;font-family:Verdana"
- x="567.8233"
- y="1061.9202"
- id="text905"
- sodipodi:linespacing="100%"
- transform="scale(0.631134,0.631134)"> <tspan
- id="tspan906"
- style="fill:#929292;fill-opacity:1">embedded</tspan> </text>
- </g>
- <g
- id="g945"
- style="stroke:#000000;stroke-opacity:0.12000002"
- transform="translate(0,8)">
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:0.12000002"
- d="M 210.10063,527.6401 L 600.37556,527.6401"
- id="path840"
- sodipodi:nodetypes="cc"
- transform="matrix(0.680271,0,0,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 577.3438,527.64009 C 577.3438,579.33452 535.3889,621.28942 483.69447,621.28942 C 432.00004,621.28942 390.04514,579.33452 390.04514,527.64009 C 390.04514,475.94566 432.00004,433.99076 483.69447,433.99076 C 535.3889,433.99076 577.3438,475.94566 577.3438,527.64009 z "
- id="path849"
- transform="matrix(0.680271,0,0,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 378.24332,527.64008 C 378.24332,558.43082 353.25373,583.4204 322.46301,583.4204 C 291.67226,583.4204 266.68267,558.43082 266.68267,527.64008 C 266.68267,496.84933 291.67226,471.85976 322.46301,471.85976 C 353.25373,471.85976 378.24332,496.84933 378.24332,527.64008 z "
- id="path839"
- transform="matrix(0.680271,0,0,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 322.463,422.21153 L 322.463,633.06864"
- id="path841"
- sodipodi:nodetypes="cc"
- transform="matrix(0.680271,0,0,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 539.4748,527.64009 C 539.4748,558.43083 514.48521,583.42041 483.69449,583.42041 C 452.90374,583.42041 427.91415,558.43083 427.91415,527.64009 C 427.91415,496.84934 452.90374,471.85977 483.69449,471.85977 C 514.48521,471.85977 539.4748,496.84934 539.4748,527.64009 z "
- id="path850"
- transform="matrix(0.680271,0,0,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 483.69448,422.21153 L 483.69448,633.06864"
- id="path851"
- sodipodi:nodetypes="cc"
- transform="matrix(0.680271,0,0,0.680271,-132.4632,-267.1952)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.7668311;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 144.34955,91.743214 C 144.34955,123.45594 118.61168,149.1938 86.89897,149.1938 C 55.186251,149.1938 29.4484,123.45594 29.4484,91.743214 C 29.4484,60.030495 55.186251,34.292644 86.89897,34.292644 C 118.61168,34.292644 144.34955,60.030495 144.34955,91.743214 z "
- id="path943" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.7668311;stroke-linejoin:round;stroke-opacity:0.12000002"
- d="M 254.0307,91.74305 C 254.0307,123.45578 228.29283,149.19364 196.58012,149.19364 C 164.8674,149.19364 139.12954,123.45578 139.12954,91.74305 C 139.12954,60.030332 164.8674,34.29248 196.58012,34.29248 C 228.29283,34.29248 254.0307,60.030332 254.0307,91.74305 z "
- id="path944" />
- </g>
- <text
- sodipodi:linespacing="100%"
- id="text2180"
- y="24.027855"
- x="71.040924"
- style="font-size:24.0431633px;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:#929292;stroke-width:3pt;font-family:Verdana"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan2195"
- x="71.040924"
- y="24.027855">Powered by</tspan></text>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="209.104px" height="204.298px" viewBox="0 0 209.104 204.298" enable-background="new 0 0 209.104 204.298"
+ xml:space="preserve">
+<g id="Layer_1">
+ <g>
+ <g>
+ <path fill="#00BCE4" d="M74.145,182.337c-0.568,0.568-0.841,1.228-0.841,2.03v0.339h5.743v-0.339c0-1.601-1.272-2.87-2.872-2.872
+ C75.372,181.495,74.713,181.77,74.145,182.337z M73.304,190.701c0,0.876,0.729,1.605,1.604,1.605h6.334
+ c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.334c-1.657,0-3.101-0.58-4.265-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.221-7.261,7.262-7.263c2.019,0,3.752,0.705,5.148,2.115
+ c1.41,1.396,2.114,3.13,2.114,5.147v4.729H73.304V190.701z"/>
+ <path fill="#00BCE4" d="M99.737,177.104c1.662,0,3.094,0.584,4.246,1.75c1.166,1.153,1.749,2.584,1.75,4.246v11.4
+ c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195v-11.4c0-0.922-0.684-1.604-1.605-1.605h-1.604v13.006
+ c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195v-13.006h-3.21v13.006c0,1.357-0.838,2.195-2.195,2.195
+ s-2.195-0.838-2.195-2.195V179.3c0-1.357,0.838-2.195,2.195-2.195H99.737z"/>
+ <path fill="#00BCE4" d="M123.308,190.701c0,3.37-2.625,5.995-5.995,5.995h-6.334c-1.356,0-2.194-0.838-2.194-2.195v-22.802
+ c0-1.356,0.838-2.195,2.194-2.195c1.357,0,2.195,0.839,2.195,2.195v5.405h4.139c3.472,0,5.993,2.658,5.995,5.995V190.701z
+ M113.174,181.495v10.812h4.139c0.903,0,1.604-0.701,1.604-1.605v-7.601c0-0.927-0.678-1.604-1.605-1.605H113.174z"/>
+ <path fill="#00BCE4" d="M130.897,182.337c-0.568,0.568-0.842,1.228-0.842,2.03v0.339h5.744v-0.339
+ c0-1.601-1.273-2.87-2.872-2.872C132.124,181.495,131.466,181.77,130.897,182.337z M130.056,190.701
+ c0,0.876,0.729,1.605,1.605,1.605h6.334c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.334
+ c-1.657,0-3.102-0.58-4.266-1.73c-1.148-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.221-7.261,7.263-7.263
+ c2.019,0,3.752,0.705,5.147,2.115c1.41,1.396,2.115,3.13,2.115,5.147v4.729h-10.135V190.701z"/>
+ <path fill="#00BCE4" d="M143.688,180.086c1.129-1.972,2.906-2.98,5.201-2.981h4.139v-5.405c0-1.356,0.838-2.195,2.195-2.195
+ s2.195,0.839,2.195,2.195v22.802c0,1.357-0.838,2.195-2.195,2.195h-6.334c-1.657,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-7.601C142.894,182.021,143.157,181.012,143.688,180.086z M147.741,181.972
+ c-0.307,0.309-0.457,0.665-0.457,1.129v7.601c0,0.878,0.727,1.605,1.605,1.605h4.139v-10.812h-4.139
+ C148.433,181.495,148.067,181.646,147.741,181.972z"/>
+ <path fill="#00BCE4" d="M160.917,180.086c1.129-1.972,2.905-2.98,5.201-2.981h4.139v-5.405c0-1.356,0.838-2.195,2.195-2.195
+ c1.356,0,2.195,0.839,2.195,2.195v22.802c0,1.357-0.839,2.195-2.195,2.195h-6.334c-1.657,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-7.601C160.122,182.021,160.386,181.012,160.917,180.086z M164.97,181.972
+ c-0.308,0.309-0.457,0.665-0.457,1.129v7.601c0,0.878,0.727,1.605,1.605,1.605h4.139v-10.812h-4.139
+ C165.661,181.495,165.296,181.646,164.97,181.972z"/>
+ <path fill="#00BCE4" d="M182.583,182.337c-0.568,0.568-0.842,1.228-0.842,2.03v0.339h5.743l0.001-0.339
+ c0-1.601-1.273-2.87-2.873-2.872C183.81,181.495,183.15,181.77,182.583,182.337z M181.741,190.701
+ c0,0.876,0.729,1.605,1.605,1.605h6.333c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.333
+ c-1.658,0-3.102-0.58-4.266-1.73c-1.149-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.221-7.261,7.262-7.263
+ c2.019,0,3.752,0.705,5.148,2.115c1.41,1.396,2.114,3.13,2.114,5.147v4.729h-10.134V190.701z"/>
+ <path fill="#00BCE4" d="M195.374,180.086c1.129-1.972,2.905-2.98,5.2-2.981h4.139v-5.405c0-1.356,0.839-2.195,2.195-2.195
+ c1.357,0,2.195,0.839,2.195,2.195v22.802c0,1.357-0.838,2.195-2.195,2.195h-6.333c-1.658,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-7.601C194.579,182.021,194.843,181.012,195.374,180.086z M199.427,181.972
+ c-0.308,0.309-0.457,0.665-0.457,1.129v7.601c0,0.878,0.727,1.605,1.605,1.605h4.138v-10.812h-4.138
+ C200.118,181.495,199.753,181.646,199.427,181.972z"/>
+ </g>
+ <g>
+ <path fill="#5C6F7B" d="M19.423,177.104h6.334c1.661,0,3.094,0.584,4.245,1.75c1.167,1.153,1.75,2.585,1.75,4.246v7.601
+ c0,1.651-0.587,3.082-1.747,4.244c-1.152,1.167-2.587,1.751-4.248,1.751h-4.139v5.406c0,1.357-0.838,2.195-2.195,2.195
+ s-2.195-0.839-2.195-2.195V179.3C17.228,177.942,18.065,177.104,19.423,177.104z M21.618,192.307h4.139
+ c0.903,0,1.605-0.701,1.605-1.605v-7.601c0-0.928-0.679-1.604-1.605-1.605h-4.139V192.307z"/>
+ <path fill="#5C6F7B" d="M39.688,182.337c-0.569,0.568-0.842,1.228-0.842,2.03v0.339h5.743v-0.339c0-1.601-1.272-2.87-2.872-2.872
+ C40.915,181.495,40.256,181.77,39.688,182.337z M38.847,190.701c0,0.876,0.729,1.605,1.605,1.605h6.333
+ c1.357,0,2.195,0.838,2.195,2.194c0,1.357-0.838,2.195-2.195,2.195h-6.333c-1.657,0-3.102-0.58-4.266-1.73
+ c-1.149-1.163-1.73-2.607-1.73-4.265v-6.334c0-4.041,3.221-7.261,7.263-7.263c2.018,0,3.752,0.705,5.147,2.115
+ c1.41,1.396,2.114,3.13,2.114,5.147v4.729H38.847V190.701z"/>
+ <path fill="#5C6F7B" d="M51.685,179.3c0-1.357,0.838-2.195,2.195-2.195h6.334c1.661,0,3.094,0.584,4.245,1.75
+ c1.167,1.153,1.749,2.584,1.75,4.246v11.4c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195v-11.4
+ c0-0.922-0.684-1.604-1.605-1.605h-4.138v13.006c0,1.357-0.838,2.195-2.195,2.195s-2.195-0.838-2.195-2.195V179.3z"/>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M10.134,184.367c0-1.601-1.273-2.87-2.872-2.872
+ c-1.6,0-2.872,1.273-2.872,2.872v5.067c0,0.824,0.268,1.485,0.822,2.049c0.564,0.555,1.226,0.823,2.05,0.823
+ c1.601,0,2.871-1.273,2.872-2.873V184.367z M0,184.367c0-4.041,3.22-7.261,7.262-7.263c2.019,0,3.752,0.705,5.147,2.115
+ c1.411,1.396,2.114,3.13,2.114,5.147v5.067c0,4.041-3.222,7.262-7.262,7.262c-1.997,0-3.732-0.713-5.147-2.114
+ C0.713,193.166,0,191.431,0,189.435V184.367z"/>
+ </g>
+ <g>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M25.428,115.563c0-43.699,35.425-79.124,79.124-79.124
+ s79.123,35.424,79.123,79.124c0,14.938-4.139,28.909-11.333,40.828h-26.366c10.352-10.5,16.738-24.918,16.738-40.828
+ c0-32.123-26.039-58.163-58.162-58.163s-58.163,26.04-58.163,58.163c0,15.91,6.388,30.328,16.738,40.828H36.761
+ C29.567,144.472,25.428,130.501,25.428,115.563z"/>
+ </g>
+ <g>
+ <path fill="#00BCE4" d="M94.122,115.563c0-2.882,1.168-5.491,3.059-7.379l17.436-17.494c-9.682-3.913-21.185-1.944-29.033,5.905
+ c-10.477,10.476-10.477,27.461,0,37.937c10.476,10.477,27.461,10.477,37.938,0c4.547-4.547,7.12-10.321,7.721-16.256
+ l18.46-18.461c5.838,16.774,2.056,36.151-11.345,49.553c-18.67,18.67-48.939,18.67-67.609,0s-18.67-48.938,0-67.608
+ s48.939-18.67,67.609,0c2.535,2.536,4.728,5.287,6.574,8.193l-32.986,32.997c-1.888,1.89-4.511,3.045-7.393,3.045
+ C98.791,125.993,94.122,121.323,94.122,115.563z"/>
+ </g>
+ </g>
+</g>
+<g id="text">
+ <g>
+ <path fill="#5C6F7B" d="M14.716,13.858c0-2.304-0.072-4.283-0.144-5.903h4.751l0.252,2.447h0.072
+ c1.296-1.872,3.312-2.843,5.867-2.843c3.852,0,7.307,3.347,7.307,8.963c0,6.407-4.067,9.431-7.991,9.431
+ c-2.124,0-3.78-0.864-4.571-2.016h-0.072v8.747h-5.471V13.858z M20.188,17.998c0,0.432,0.036,0.828,0.108,1.152
+ c0.36,1.476,1.62,2.592,3.204,2.592c2.376,0,3.78-1.98,3.78-4.967c0-2.808-1.26-4.932-3.708-4.932
+ c-1.548,0-2.916,1.152-3.276,2.772c-0.072,0.288-0.108,0.647-0.108,0.972V17.998z"/>
+ <path fill="#5C6F7B" d="M53.093,16.558c0,6.443-4.571,9.395-9.287,9.395c-5.147,0-9.107-3.384-9.107-9.071
+ c0-5.688,3.743-9.323,9.395-9.323C49.494,7.559,53.093,11.267,53.093,16.558z M40.351,16.738c0,3.023,1.26,5.292,3.599,5.292
+ c2.124,0,3.492-2.124,3.492-5.292c0-2.628-1.008-5.292-3.492-5.292C41.323,11.446,40.351,14.146,40.351,16.738z"/>
+ <path fill="#5C6F7B" d="M59.143,7.955l1.404,7.199c0.36,1.8,0.72,3.78,1.008,5.795h0.072c0.36-2.016,0.864-4.031,1.296-5.759
+ l1.872-7.235h4.319l1.764,7.019c0.468,1.979,0.936,3.959,1.295,5.975h0.072c0.252-2.016,0.612-3.996,1.008-6.011l1.512-6.983
+ h5.363l-5.399,17.602h-5.147l-1.656-6.191c-0.432-1.728-0.756-3.275-1.116-5.471h-0.072c-0.324,2.196-0.684,3.852-1.152,5.471
+ l-1.764,6.191h-5.147L53.563,7.955H59.143z"/>
+ <path fill="#5C6F7B" d="M85.836,18.501c0.18,2.268,2.412,3.348,4.967,3.348c1.872,0,3.384-0.252,4.859-0.72l0.72,3.708
+ c-1.8,0.72-3.996,1.116-6.372,1.116c-5.975,0-9.395-3.492-9.395-8.999c0-4.463,2.771-9.395,8.891-9.395
+ c5.688,0,7.847,4.427,7.847,8.783c0,0.936-0.108,1.764-0.18,2.16H85.836z M92.28,14.758c0-1.332-0.576-3.563-3.096-3.563
+ c-2.304,0-3.24,2.088-3.384,3.563H92.28z"/>
+ <path fill="#5C6F7B" d="M100.15,13.75c0-2.592-0.072-4.283-0.144-5.795h4.715l0.181,3.239h0.144
+ c0.899-2.556,3.06-3.635,4.751-3.635c0.504,0,0.756,0,1.152,0.072v5.184c-0.396-0.108-0.864-0.18-1.477-0.18
+ c-2.016,0-3.383,1.08-3.743,2.771c-0.071,0.36-0.108,0.792-0.108,1.224v8.927h-5.471V13.75z"/>
+ <path fill="#5C6F7B" d="M117.387,18.501c0.18,2.268,2.411,3.348,4.967,3.348c1.872,0,3.384-0.252,4.859-0.72l0.721,3.708
+ c-1.801,0.72-3.996,1.116-6.372,1.116c-5.976,0-9.395-3.492-9.395-8.999c0-4.463,2.771-9.395,8.891-9.395
+ c5.688,0,7.847,4.427,7.847,8.783c0,0.936-0.107,1.764-0.18,2.16H117.387z M123.83,14.758c0-1.332-0.576-3.563-3.096-3.563
+ c-2.305,0-3.24,2.088-3.385,3.563H123.83z"/>
+ <path fill="#5C6F7B" d="M148.803,0v20.301c0,1.98,0.071,4.067,0.143,5.255h-4.859l-0.252-2.592h-0.071
+ c-1.116,1.98-3.239,2.988-5.507,2.988c-4.176,0-7.523-3.563-7.523-9.035c-0.036-5.939,3.672-9.359,7.883-9.359
+ c2.16,0,3.852,0.756,4.644,1.979h0.071V0H148.803z M143.33,15.406c0-0.288-0.035-0.684-0.071-0.972
+ c-0.324-1.476-1.512-2.7-3.204-2.7c-2.483,0-3.779,2.232-3.779,5.003c0,2.988,1.477,4.859,3.744,4.859
+ c1.584,0,2.844-1.08,3.167-2.628c0.108-0.396,0.144-0.792,0.144-1.26V15.406z"/>
+ <path fill="#5C6F7B" d="M159.748,0h5.471v10.042h0.072c1.044-1.512,2.88-2.483,5.328-2.483c4.211,0,7.307,3.491,7.271,8.891
+ c0,6.335-4.031,9.503-8.063,9.503c-2.051,0-4.031-0.756-5.291-2.844h-0.072l-0.215,2.448h-4.645
+ c0.072-1.152,0.145-3.275,0.145-5.255V0z M165.219,18.069c0,0.36,0.037,0.684,0.108,0.972c0.36,1.476,1.62,2.592,3.204,2.592
+ c2.34,0,3.779-1.8,3.779-4.968c0-2.735-1.225-4.895-3.779-4.895c-1.477,0-2.844,1.116-3.204,2.7
+ c-0.071,0.324-0.108,0.648-0.108,1.008V18.069z"/>
+ <path fill="#5C6F7B" d="M184.162,7.955l2.628,8.639c0.287,1.044,0.647,2.34,0.863,3.275h0.108c0.252-0.936,0.54-2.268,0.792-3.275
+ l2.159-8.639h5.867l-4.104,11.59c-2.52,6.983-4.211,9.791-6.19,11.555c-1.908,1.656-3.924,2.231-5.292,2.412l-1.151-4.644
+ c0.684-0.108,1.548-0.432,2.375-0.936c0.828-0.432,1.729-1.295,2.269-2.195c0.18-0.252,0.288-0.54,0.288-0.792
+ c0-0.18-0.036-0.468-0.253-0.9l-6.443-16.09H184.162z"/>
+ </g>
+</g>
+</svg>
diff --git a/contrib/feed-browser/index.html b/contrib/feed-browser/index.html
new file mode 100644
index 0000000000..08b1d9a804
--- /dev/null
+++ b/contrib/feed-browser/index.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>Feed browser</title>
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <style type="text/css" media="all">@import "css/feed.css";</style>
+ <script language="javascript" type="text/javascript" src="scripts/js/repo.js"></script>
+ </head>
+ <body onLoad=" qs(); getLetter(); getSection();">
+ <div id="right">
+ <div id="searchletter"</div>
+ <form name="pkg_query" onsubmit="javascript:pkgQuery();return false"">
+ <fieldset>
+ <label for="name">Package name</label>
+ <input id="pkgsearch" type="text" name="pkgsearch" value="" />
+ <select name="arch">
+ <option value="" selected="selected">all architectures</option>
+ <option value="all">no arch</option>
+<?php
+
+foreach($archs_list as $architecture)
+{
+ echo "<option value='{$architecture['p_arch']}'";
+
+ if($architecture['p_arch'] == $arch)
+ {
+ echo ' selected="selected"';
+ }
+ echo ">{$architecture['p_arch']}</option>";
+}
+
+?>
+
+
+ </select>
+ <input type="submit" value="Search" />
+ </fieldset>
+ </form>
+ <div id="opkgoutput"><?php echo $ipkgoutput; ?></div>
+ </div>
+ <div id="left">
+ <h1>Sections list</h1>
+ <div id="sectionslist"></div>
+ </div>
+ </body>
+</html>
diff --git a/contrib/feed-browser/index.php b/contrib/feed-browser/index.php
deleted file mode 100644
index eca57e9269..0000000000
--- a/contrib/feed-browser/index.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/*
- * (c) Koen Kooi 2006, 2007
- * (c) Marcin Juszkiewicz 2006, 2007
- *
- * This php script is intended to do the following:
- *
- * - have searchable webfronted for the feed like packages.ubuntu.com
- *
- * ToDo:
- *
- * - search functionality
- * - provide feed-management functionality
- * - allow uploading of new software
- *
- *
- * This program is free software; you can redistribute 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 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 Library General Public License along
- * with this 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.
- *
- */
-
-require_once 'includes/config.inc';
-require_once 'includes/functions.inc';
-
-if(!check_database())
-{
- die("Database not found and cannot be created.");
-}
-
-read_vars_from_get(array('name', 'arch', 'pkgsearch', 'letter', 'pkgname', 'section'));
-
-$ipkgoutput = '';
-
-if(!empty($section))
-{
- $ipkgoutput = searchsection($section);
-}
-elseif(!empty($letter))
-{
- $ipkgoutput = searchpkg("{$letter}%", $arch);
-}
-elseif(!empty($pkgname))
-{
- $ipkgoutput = pkgdetails($pkgname);
-}
-elseif(!empty($pkgsearch) OR !empty($arch))
-{
- $ipkgoutput = searchpkg("%{$pkgsearch}%", $arch);
-}
-
-$archs_list = get_arch_list();
-
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
- <head>
- <title>Feed browser</title>
- <meta http-equiv="Content-Style-Type" content="text/css" />
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style type="text/css" media="all">@import "css/feed.css";</style>
- </head>
- <body >
- <div id="right">
- <?php echo searchletter(); ?>
- <form action="" method="get">
- <fieldset>
- <label for="name">Package name</label>
- <input type="text" name="pkgsearch" value="<?php echo $pkgsearch; ?>" />
- <select name="arch">
- <option value="" selected="selected">all architectures</option>
- <option value="all">no arch</option>
-<?php
-
-foreach($archs_list as $architecture)
-{
- echo "<option value='{$architecture['p_arch']}'";
-
- if($architecture['p_arch'] == $arch)
- {
- echo ' selected="selected"';
- }
- echo ">{$architecture['p_arch']}</option>";
-}
-
-?>
- </select>
- <input type="submit" value="Search" />
- </fieldset>
- </form>
- <?php echo $ipkgoutput; ?>
- </div>
- <div id="left">
- <h1>Sections list</h1>
- <?php echo sectionslist(); ?>
- </div>
- </body>
-</html>
diff --git a/contrib/feed-browser/scripts/js/repo.js b/contrib/feed-browser/scripts/js/repo.js
new file mode 100644
index 0000000000..edd1fd503e
--- /dev/null
+++ b/contrib/feed-browser/scripts/js/repo.js
@@ -0,0 +1,130 @@
+/* The following function creates an XMLHttpRequest object... */
+
+function createRequestObject(){
+ var request_o; //declare the variable to hold the object.
+ var browser = navigator.appName; //find the browser name
+ if(browser == "Microsoft Internet Explorer"){
+ /* Create the object using MSIE's method */
+ request_o = new ActiveXObject("Microsoft.XMLHTTP");
+ } else {
+ /* Create the object using other browser's method */
+ request_o = new XMLHttpRequest();
+ }
+ return request_o; //return the object
+}
+
+/* The variable http will hold our new XMLHttpRequest object. */
+var sectionHTTP = createRequestObject();
+var queryHTTP = createRequestObject();
+var http = createRequestObject();
+
+var qsParm = new Array();
+qsParm['pkgsearch'] = null;
+qsParm['arch'] = null;
+qsParm['section'] = null;
+qsParm['pkgname'] = null;
+
+
+function qs() {
+ var query = window.location.search.substring(1);
+ var parms = query.split('&');
+ for (var i=0; i<parms.length; i++) {
+ var pos = parms[i].indexOf('=');
+ if (pos > 0) {
+ var key = parms[i].substring(0,pos);
+ var val = parms[i].substring(pos+1);
+ qsParm[key] = val;
+ }
+ }
+ if (qsParm['pkgsearch']) {
+ document.getElementById('pkgsearch').value = qsParm['pkgsearch'];
+ pkgQuery();
+ }
+ if (qsParm['pkgname']) {
+ document.getElementById('pkgsearch').value = qsParm['pkgname'];
+ pkgQuery();
+ }
+ if (qsParm['section']) {
+ pkgQuery();
+ }
+
+}
+
+function pkgQuery() {
+ var action = 'pkgquery';
+ var params = '';
+
+ if (qsParm['pkgname']) {
+ action = 'pkgname';
+ params = '&pkgname=' + qsParm['pkgname'];
+ qsParm['pkgname'] = null;
+ }
+
+ if (document.getElementById('pkgsearch').value != "") {
+ params = params + '&pkgsearch=' + document.getElementById('pkgsearch').value;
+ } else {
+ if (qsParm['pkgsearch']) {
+ params = params + '&pkgsearch=' + qsParm['pkgsearch'];
+ }
+ }
+ if (qsParm['arch']) {
+ params = params + '&arch=' + qsParm['arch'];
+ qsParm['arch'] = null;
+ }
+ if (qsParm['section']) {
+ action = 'section';
+ params = params + '&section=' + qsParm['section'];
+ qsParm['section'] = null;
+ }
+
+ params = '&action=' + action + params;
+
+ queryHTTP.open('post', 'section.php');
+ queryHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ queryHTTP.onreadystatechange = queryProgress;
+ queryHTTP.send(params);
+
+}
+
+function getLetter() {
+ var params = 'action=searchletter';
+ http.open('post', 'section.php');
+ http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ http.onreadystatechange = letterProgress;
+ http.send(params);
+
+}
+
+function getSection() {
+ var params = 'action=sectionslist';
+ sectionHTTP.open('post', 'section.php');
+ sectionHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ sectionHTTP.onreadystatechange = sectionProgress;
+ sectionHTTP.send(params);
+
+}
+
+function letterProgress() {
+ if(http.readyState == 4){
+ var response = http.responseText;
+ document.getElementById('searchletter').innerHTML = response;
+
+ }
+}
+
+function sectionProgress() {
+ if(sectionHTTP.readyState == 4){
+ var response = sectionHTTP.responseText;
+ document.getElementById('sectionslist').innerHTML = response;
+
+ }
+}
+
+function queryProgress() {
+ document.getElementById('opkgoutput').innerHTML = "loading, please wait";
+ if(queryHTTP.readyState == 4){
+ var response = queryHTTP.responseText;
+ document.getElementById('opkgoutput').innerHTML = response;
+
+ }
+}
diff --git a/contrib/feed-browser/section.php b/contrib/feed-browser/section.php
new file mode 100644
index 0000000000..083910bc46
--- /dev/null
+++ b/contrib/feed-browser/section.php
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ * (c) Koen Kooi 2006, 2007, 2008, 2009
+ * (c) Marcin Juszkiewicz 2006, 2007
+ *
+ * This php script is intended to do the following:
+ *
+ * - have searchable webfronted for the feed like packages.ubuntu.com
+ *
+ * ToDo:
+ *
+ * - search functionality
+ * - provide feed-management functionality
+ * - allow uploading of new software
+ *
+ *
+ * This program is free software; you can redistribute 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 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 Library General Public License along
+ * with this 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.
+ *
+ */
+
+require_once 'includes/config.inc';
+require_once 'includes/functions.inc';
+
+if(!check_database())
+{
+ die("Database not found and cannot be created.");
+}
+
+if (isset($_POST["action"]) && $_POST["action"] != "") {
+ $action = $_POST["action"];
+} else {
+ print "Invalid action: $action";
+ exit;
+}
+
+if (isset($_POST["pkgsearch"]) && $_POST["pkgsearch"] != "") {
+ $pkgsearch = $_POST["pkgsearch"];
+}
+
+if (isset($_POST["section"]) && $_POST["section"] != "") {
+ $section = $_POST["section"];
+}
+
+if (isset($_POST["arch"]) && $_POST["arch"] != "") {
+ $arch = $_POST["arch"];
+} else {
+ $arch = "";
+}
+
+if (isset($_POST["pkgname"]) && $_POST["pkgname"] != "") {
+ $pkgname = $_POST["pkgname"];
+}
+
+
+//print("$action");
+switch($action) {
+case "sectionslist":
+ echo sectionslist();
+ break;
+case "searchletter":
+ echo searchletter();
+ break;
+case "pkgquery":
+ echo searchpkg("%{$pkgsearch}%", $arch);
+ break;
+case "pkgname":
+ echo pkgdetails($pkgname);
+ break;
+case "section":
+ echo searchsection($section);
+ break;
+}
+?>
diff --git a/docs/usermanual/Makefile b/docs/usermanual/Makefile
new file mode 100644
index 0000000000..75fdd9ebc7
--- /dev/null
+++ b/docs/usermanual/Makefile
@@ -0,0 +1,62 @@
+# XSL sytlesheets downloaded from http://docbook.sourceforge.net/release/xsl/current/html/
+
+topdir = .
+manual = $(topdir)/usermanual.xml
+# types = pdf txt rtf ps xhtml html man tex texi dvi
+# types = pdf txt
+types = $(xmltotypes) $(htmltypes) $(docbooktotypes)
+xmltotypes =
+docbooktotypes = dvi pdf ps rtf tex texi txt
+htmltypes = html xhtml
+htmlxsl = $(if $(filter $@,$(foreach type,$(htmltypes),$(type)-nochunks)),docbook-utf8.xsl,chunk-utf8.xsl)
+htmlcssfile = docbook.css
+htmlcss = $(topdir)/html.css
+# htmlcssfile =
+# htmlcss =
+cleanfiles = $(foreach i,$(types),$(topdir)/$(i))
+
+ifdef DEBUG
+define command
+ $(1)
+endef
+else
+define command
+ @echo $(2) $(3) $(4)
+ @$(1)
+endef
+endif
+
+all: $(types)
+
+lint: $(manual) FORCE
+ $(call command,xmllint --xinclude --postvalid --noout $(manual),XMLLINT $(manual))
+
+$(types) $(foreach type,$(htmltypes),$(type)-nochunks): lint FORCE
+
+$(foreach type,$(htmltypes),$(type)-nochunks): $(if $(htmlcss),$(htmlcss)) $(manual)
+ @mkdir -p $@
+ifdef htmlcss
+ $(call command,install -m 0644 $(htmlcss) $@/$(htmlcssfile),CP $(htmlcss) $@/$(htmlcssfile))
+endif
+ $(call command,xsltproc --stringparam base.dir $@/ $(if $(htmlcssfile),--stringparam html.stylesheet $(htmlcssfile)) $(htmlxsl) $(manual) > $@/index.$(patsubst %-nochunks,%,$@),XSLTPROC $@ $(manual))
+
+$(htmltypes): $(if $(htmlcss),$(htmlcss)) $(manual)
+ @mkdir -p $@
+ifdef htmlcss
+ $(call command,install -m 0644 $(htmlcss) $@/$(htmlcssfile),CP $(htmlcss) $@/$(htmlcssfile))
+endif
+ $(call command,xsltproc --param use.id.as.filename 1 --stringparam base.dir $@/ $(if $(htmlcssfile),--stringparam html.stylesheet $(htmlcssfile)) $(htmlxsl) $(manual),XSLTPROC $@ $(manual))
+
+$(xmltotypes): $(manual)
+ $(call command,xmlto --extensions -o $(topdir)/$@ $@ $(manual),XMLTO $@ $(manual))
+
+$(docbooktotypes): $(manual)
+ $(call command,docbook2$@ $(manual),DOCBOOK2 $@ $(manual))
+
+clean:
+ rm -rf $(cleanfiles)
+
+$(foreach i,$(types) $(foreach type,$(htmltypes),$(type)-nochunks),clean-$(i)):
+ rm -rf $(patsubst clean-%,%,$@)
+
+FORCE:
diff --git a/docs/usermanual/README b/docs/usermanual/README
new file mode 100644
index 0000000000..f2aecf8a6e
--- /dev/null
+++ b/docs/usermanual/README
@@ -0,0 +1,18 @@
+To generate the user-manual, run:
+
+ make <type>
+
+in this directory, where type is one of:
+
+ xhtml
+ html
+ dvi
+ pdf
+ ps
+ rtf
+ tex
+ texi
+ txt
+
+For html and xhtml you need xsltproc installed.
+For the other you need docbook-utils installed.
diff --git a/docs/usermanual/chapters/.mtn2git_empty b/docs/usermanual/chapters/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/docs/usermanual/chapters/.mtn2git_empty
diff --git a/docs/usermanual/chapters/common_use_cases.xml b/docs/usermanual/chapters/common_use_cases.xml
new file mode 100644
index 0000000000..4497683fa9
--- /dev/null
+++ b/docs/usermanual/chapters/common_use_cases.xml
@@ -0,0 +1,409 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_common_use_cases">
+ <title>Common Use-cases/tasks</title>
+
+ <section id="commonuse_new_distro">
+ <title>Creating a new Distribution</title>
+
+ <para>Creating a new distribution is not complicated, however we urge you
+ to try existing distributions first, because it's also very easy to do
+ wrong. The config need to be created in /conf/distro directory. So what
+ has to be inside? <itemizedlist>
+ <listitem>
+ <para><command>DISTRO_VERSION</command> so users will know which
+ version of distribution they use.</para>
+ </listitem>
+
+ <listitem>
+ <para><command>DISTRO_TYPE</command> (release/debug) variable is
+ used in some recipes to enable/disable some features - for example
+ kernel output on screen for "debug" builds.</para>
+ </listitem>
+
+ <listitem>
+ <para>Type of libc used: will it be glibc
+ (<command>TARGET_OS</command> = "linux") or uclibc
+ (<command>TARGET_OS</command> = "linux-uclibc")?</para>
+ </listitem>
+
+ <listitem>
+ <para>Toolchain versions - for example gcc 3.4.4 based distro will
+ have: <screen>
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
+
+PREFERRED_VERSION_binutils = "2.16"
+PREFERRED_VERSION_binutils-cross = "2.16"
+
+PREFERRED_VERSION_gcc = "3.4.4"
+PREFERRED_VERSION_gcc-cross = "3.4.4"
+PREFERRED_VERSION_gcc-initial-cross = "3.4.4"
+ </screen></para>
+ </listitem>
+
+ <listitem>
+ <para><command>DISTRO_FEATURES</command> which describe which
+ features distro has. More about it in <link
+ linkend="task-base">task-base</link> section.</para>
+ </listitem>
+
+ <listitem>
+ <para>Versions of kernels used for supported devices: <screen>
+PREFERRED_VERSION_linux-omap1_omap5912osk ?= "2.6.18+git"
+PREFERRED_VERSION_linux-openzaurus ?= "2.6.17"
+ </screen></para>
+ </listitem>
+
+ <listitem>
+ <para>To get more stable build it is good to make use of
+ sane-srcdates.inc file which contain working SRCDATE for many of
+ floating recipes. <screen>
+require conf/distro/include/sane-srcdates.inc
+ </screen> It also should have global <command>SRCDATE</command>
+ value set (format is ISO date: YYYYMMDD): <screen>
+SRCDATE = "20061014"
+ </screen></para>
+ </listitem>
+ </itemizedlist></para>
+ </section>
+
+ <section id="commonuse_new_machine">
+ <title>Adding a new Machine</title>
+
+ <para>To be able to build for device OpenEmbedded have to know it, so
+ machine config file need to be written. All those configs are stored in
+ /conf/machine/ directory.</para>
+
+ <para>As usual some variables are required: <itemizedlist>
+ <listitem>
+ <para><command>TARGET_ARCH</command> which describe which CPU
+ architecture does machine use.</para>
+ </listitem>
+
+ <listitem>
+ <para><command>MACHINE_FEATURES</command> which describe which
+ features device has. More about it in <link
+ linkend="task-base">task-base</link> section.</para>
+ </listitem>
+
+ <listitem>
+ <para><command>PREFERRED_PROVIDER_virtual/kernel</command> has to
+ point into proper kernel recipe for this machine.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Next kernel recipe needs to be added.</para>
+ </section>
+
+ <section id="commonuse_new_package">
+ <title>Adding a new Package</title>
+
+ <para>This section is a stub, help us by expanding it. Learn by example, go through the
+ recipes that are already there and mimic them to do what you want.</para>
+
+ <section>
+ <title>building from unstable source code</title>
+ <para>Building against the latest, bleeding-edge source has some intricacies of its own.
+ For one, it is desirable to pin down a souce code revision that is known to build to
+ prevent random breakage in OE at the most inopportune time for all OE users. Here is
+ how to do that properly.
+ <itemizedlist>
+ <listitem><para>for svn: add 'PV = "1.1+svnr${SRCREV}"' to your bb file.</para></listitem>
+ <listitem><para>for cvs: add 'PV = "1.1+cvs${SRCREV}"' to your bb file.</para></listitem>
+ </itemizedlist>
+ Accompany either with an entry to conf/distro/include/sane-srcrevs.inc for a revision that you know
+ builds successfully.
+ </para>
+ <para>
+ If you really absolutely have to follow the latest commits, you can do that by adding
+ 'SRCREV_pn-linux-davinci ?= ${AUTOREV}' to your local.conf, for example. In this case,
+ you'd build against the most recent and unstable source for the pn-linux-davinci package.
+ </para>
+ </section>
+ </section>
+
+ <section id="commonuse_new_image">
+ <title>Creating your own image</title>
+
+ <para>Creating own image is easy - only few variables needs to be set:
+ <itemizedlist>
+ <listitem>
+ <para><command>IMAGE_BASENAME</command> to give a name for your own
+ image</para>
+ </listitem>
+
+ <listitem>
+ <para><command>PACKAGE_INSTALL</command> to give a list of packages
+ to install into the image</para>
+ </listitem>
+
+ <listitem>
+ <para><command>RDEPENDS</command> to give a list of recipes which
+ are needed to be built to create this image</para>
+ </listitem>
+
+ <listitem>
+ <para><command>IMAGE_LINGUAS</command> is an optional list of
+ languages which has to be installed into the image</para>
+ </listitem>
+ </itemizedlist> Then adding of the <emphasis>image</emphasis> class use:
+ <screen>
+inherit image
+</screen> And the image recipe is ready for usage.</para>
+ </section>
+
+ <section id="commonuse_prebuilt_toolchain">
+ <title>Using a prebuilt toolchain to create your packages</title>
+
+ <para>It might be necessary to integrate a prebuilt toolchain and other
+ libraries but still be use OpenEmbedded to build packages. One of many
+ approaches is shown and discussed here.</para>
+
+ <section>
+ <title>The toolchain</title>
+
+ <para>We assume the toolchain provides a C and C++ compiler, an
+ assembler and other tools to build packages. The list below shows a gcc
+ 3.4.4 toolchain for ARM architectures using glibc. We assume that the
+ toolchain is in your <command>PATH</command>.</para>
+
+ <screen>
+<command>ls</command> pre-built/cross/bin
+
+arm-linux-g++
+arm-linux-ld
+arm-linux-ranlib
+arm-linux-ar
+arm-linux-g77
+arm-linux-readelf
+arm-linux-as
+arm-linux-gcc
+arm-linux-gcc-3.4.4
+arm-linux-c++
+arm-linux-size
+arm-linux-c++filt
+arm-linux-nm
+arm-linux-strings
+arm-linux-cpp
+arm-linux-objcopy
+arm-linux-strip
+arm-linux-objdump
+</screen>
+ </section>
+
+ <section>
+ <title>The prebuilt libraries</title>
+
+ <para>We need the header files and the libraries itself. The following
+ directory layout is assume. <command>PRE_BUILT</command> has two
+ subdirectories one is called <emphasis>include</emphasis> and holds the
+ header files and the other directory is called <emphasis>lib</emphasis>
+ and holds the shared and static libraries. Additionally a Qt2 directory
+ is present having a <emphasis>include</emphasis> and
+ <emphasis>lib</emphasis> sub-directory.</para>
+
+ <screen>
+<command>ls</command> $PRE_BUILT
+include
+lib
+qt2
+</screen>
+ </section>
+
+ <section>
+ <title>Setting up OpenEmbedded</title>
+
+ <para>OpenEmbedded will be setup here. We assume that your machine and
+ distribution is not part of OpenEmbedded and they will be created ad-hoc
+ in the <emphasis>local.conf</emphasis> file. You will need to have
+ <application>BitBake</application> and a current OpenEmbedded version
+ available.</para>
+
+ <section>
+ <title>Sourcable script</title>
+
+ <para>To ease the usage of OpenEmbedded we start by creating a
+ source-able script. This is actually a small variation from the
+ already seen script. We will name it <emphasis>build_source</emphasis>
+ and you will need to source it.</para>
+
+ <screen>
+BITBAKE_PATH=/where/is/bitbake/bin
+TOOLCHAIN=/where/is/toolchain/bin
+HOST_TOOLS=/where/is/hosttools/bin
+export PRE_BUILT=/where/is/pre-built
+
+export PATH=$BITBAKE_PATH:$TOOLCHAIN:$HOST_TOOLS:$PATH
+export OEDIR=$PWD
+export LOCALDIR=$PWD/secret-isv
+ </screen>
+
+ <para>Use <command>source build_source</command> to source the script,
+ use <command>env</command> to check that the variable where
+ exported.</para>
+ </section>
+
+ <section>
+ <title>Creating the local.conf</title>
+
+ <para>We will configure OpenEmbedded now, it is very similar to what
+ we have done above.</para>
+
+ <screen>
+DL_DIR = "${OEDIR}/sources"
+BBFILES := "${OEDIR}/openembedded/packages/*/*.bb ${LOCALDIR}/packages/*/*.bb"
+BBFILE_COLLECTIONS = "upstream local"
+BBFILE_PATTERN_upstream = "^${OEDIR}/openembedded/packages/"
+BBFILE_PATTERN_local = "^${LOCALDIR}/packages/"
+BBFILE_PRIORITY_upstream = "5"
+BBFILE_PRIORITY_local = "10"
+BBMASK = ""
+ </screen>
+
+ <para>${OEDIR}/openembedded will be a upstream release of
+ OpenEmbedded. Above we have assumed it is in the current working
+ directory. Additionally we have a ${LOCALDIR}, we combine these two
+ directories as a special <link linkend="collections">BitBake
+ Collection</link>.</para>
+
+ <screen>
+#
+# machine stuff
+#
+MACHINE = "secret-killer"
+PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5te iwmmxt xscale""
+TARGET_CC_ARCH = "-mcpu=xscale -mtune=iwmmxt"
+TARGET_ARCH = "arm"
+PACKAGE_ARCH="xscale"
+ </screen>
+
+ <para>We tell OpenEmbedded that we build for the ARM platform and
+ optimize for xscale and iwmmxt.</para>
+
+ <screen>
+INHERIT += " package_ipk debian"
+TARGET_OS = "linux"
+TARGET_FPU = "soft"
+DISTRO = "secret-disro"
+DISTRO_NAME = "secret-distro"
+DISTRO_VERSION = "x.y.z"
+DISTRO_TYPE = "release"
+ </screen>
+
+ <para>Create a distribution ad-hoc as well. We tell OpenEmbedded that
+ we build for linux and glibc using soft float as fpu. If your
+ toolchain is a uclibc toolchain you will need to set
+ <command>TARGET_OS</command> to linux-uclibc.</para>
+
+ <screen>
+export CC="${CCACHE}arm-linux-gcc-3.4.4 ${HOST_CC_ARCH}"
+export CXX="${CCACHE}arm-linux-g++ ${HOST_CC_ARCH}"
+export CPP="arm-linux-gcc-3.4.4 -E"
+export LD="arm-linux-ld"
+export AR="arm-linux-ar"
+export AS="arm-linux-as"
+export RANLIB="arm-linux-ranlib"
+export STRIP="arm-linux-strip"
+ </screen>
+
+ <para>The above variables replace the ones from
+ <emphasis>bitbake.conf</emphasis>. This will make OpenEmbedded use the
+ prebuilt toolchain.</para>
+
+ <screen>
+#
+# point OE to the lib and include directory
+#
+TARGET_CPPFLAGS_append = " -I${PRE_BUILT}/include "
+TARGET_LDFLAGS_prepend = " -L${PRE_BUILT}/qt2/lib -L${PRE_BUILT}/lib \
+-Wl,-rpath-link,${PRE_BUILT}/lib -Wl,-rpath-link,${PRE_BUILT}/qt2/lib "
+
+# special to Qt/Qtopia
+QTDIR = "${PRE_BUILT}/qt2"
+QPEDIR = "${PRE_BUILT}"
+palmtopdir = "/opt/Qtopia"
+palmqtdir = "/opt/Qtopia"
+ </screen>
+
+ <para>We will add the <command>PRE_BUILT</command> libraries to the
+ include and library paths. And the same is done for the special
+ version of Qt we have in your <command>PRE_BUILT</command>
+ directory.</para>
+
+ <screen>
+ASSUME_PROVIDED += " virtual/${TARGET_PREFIX}gcc "
+ASSUME_PROVIDED += " virtual/libc "
+ASSUME_PROVIDED += " virtual/qte "
+ASSUME_PROVIDED += " virtual/libqpe "
+ASSUME_PROVIDED += " libqpe-opie "
+ </screen>
+
+ <para>Now we have told <application>BitBake</application> that the C
+ library, compiler and Qtopia is already provided. These lines will
+ avoid building binutils, gcc initial, glibc, gcc.</para>
+
+ <screen>
+<command>source</command> build_source
+<command>bitbake</command> your-killer-app
+ </screen>
+
+ <para>You should be able to create the packages you want to using the
+ prebuilt toolchain now.</para>
+ </section>
+ </section>
+
+ <section>
+ <title>Useful hints</title>
+
+ <para>If you have more prebuilt libraries you need to add additional
+ <command>ASSUME_PROVIDED</command> lines to your
+ <emphasis>local.conf</emphasis>. Using <command>bitbake -vvv
+ PACKAGE</command> you can easily see the package names you could
+ <command>ASSUME_PROVIDED</command> if you have some prebuilt.</para>
+ </section>
+
+ <section>
+ <title>Issues with this approach</title>
+
+ <screen>
+NOTE: Couldn't find shared library provider for libqtopia.so.1
+NOTE: Couldn't find shared library provider for libqtopia2.so.2
+NOTE: Couldn't find shared library provider for libqpe.so.1
+NOTE: Couldn't find shared library provider for libpthread.so.0
+NOTE: Couldn't find shared library provider for libstdc++.so.6
+NOTE: Couldn't find shared library provider for libqte.so.2
+NOTE: Couldn't find shared library provider for libgcc_s.so.1
+NOTE: Couldn't find shared library provider for libc.so.6
+NOTE: Couldn't find shared library provider for libm.so.6
+</screen>
+
+ <para>OpenEmbedded tries to automatically add run-time dependencies
+ (RDEPENDS) to the package. It uses the <emphasis><link
+ linkend="shlibs">shlibs</link></emphasis> system to do add them, in this
+ case it was not able to find packages providing these libraries as they
+ are prebuilt. This means they will not be added to the RDEPENDS of the
+ just created package. The result can be fatal. If you use OpenEmbedded
+ to create images you will end up with a image without a libc being
+ installed. This will lead to a fatal failure. To workaround this issue
+ you could create a package for the metadata to install every needed
+ library and use ${BOOTSTRAP_EXTRA_RDEPENDS} to make sure this package is
+ installed when creating images.</para>
+
+ <para>However, the correct way to resolve this is to provide explicit
+ mapping using ASSUME_SHLIBS variable. For example, for the libraries
+ above (partial):
+ <screen>
+ASSUME_SHLIBS = "libqtopia2.so.2:qtopia2_2.4 libc.so.6:libc"
+</screen>
+ The format is shlib_file_name:package[_version]. If a version is specified it will be
+ used as the minimal (>=) version for the dependency.</para>
+ </section>
+ </section>
+
+ <section id="commonuse_new_package_format">
+ <title>Using a new package format</title>
+
+ <para>This section is a stub, help us by expanding it</para>
+ </section>
+</chapter>
diff --git a/docs/usermanual/chapters/comparing.xml b/docs/usermanual/chapters/comparing.xml
new file mode 100644
index 0000000000..1347010977
--- /dev/null
+++ b/docs/usermanual/chapters/comparing.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_comparing">
+ <title>Comparing</title>
+
+ <section id="comparing_buildroot">
+ <title>buildroot</title>
+
+ <para>Writing of <application>BitBake</application> recipes is more easy
+ and more intuitive than writing Makefiles while providing higher
+ flexibility. This allows you to tweak specific recipes for your very
+ special needs and to add new recipes very fast. You can build toolchains,
+ Software Distribution Kits (SDKs), complete Distributions or just single
+ packages. The flexibility of OpenEmbedded allows you to reuse the once
+ written recipes for many different purposes. OpenEmbedded provides
+ everything buildroot will be able to provide. But in contrast to buildroot
+ OpenEmbedded will allow you to achieve what you really want to achieve.
+ You can add new package formats, new filesystems, new output formats
+ easily. OpenEmbedded will suit your need.</para>
+ </section>
+
+ <section id="comparing_crosstool">
+ <title>crosstool</title>
+
+ <para>Crosstool allows to create toolchains for you. It can only create
+ the initial toolchain for you. It will not compile other needed libraries
+ or applications for you, it will not be able to track dependencies or to
+ package them properly. OpenEmbedded supports all configurations crosstool
+ supports. You can start to create toolchains with OpenEmbedded, then as
+ your needs grow create a more complete SDK from already present base
+ libraries and applications and if you recognize you need to have packages
+ for the target you have them almost built already.</para>
+ </section>
+
+ <section id="comparing_handmade">
+ <title>handmade</title>
+
+ <para>Cross-compilation is a tough business. It is not that
+ cross-compiling is hard itself but many people misuse the buildsystem they
+ use to build their software. This will lead to a variety of issues you can
+ run into. This can be failing tests on configuration because of executing
+ cross compiled binaries or crashes at run-time due wrong sizes of basic
+ types. When utilizing OpenEmbedded you avoid searching for patches at many
+ different places and will be able to get things done more quickly.
+ <application>OpenEmbedded</application> allows you to choose from a pool
+ of ready to use software packages.</para>
+
+ <para>OpenEmbedded will create complete flashable images using different
+ output formats and filesystems. This allows you to create complete and
+ specialized distributions easily.</para>
+ </section>
+</chapter> \ No newline at end of file
diff --git a/docs/usermanual/chapters/features.xml b/docs/usermanual/chapters/features.xml
new file mode 100644
index 0000000000..8eecaa9ed4
--- /dev/null
+++ b/docs/usermanual/chapters/features.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_special_features">
+ <title>Special features</title>
+
+ <section id="special_debian_naming">
+ <title>Debian package naming <anchor id="debian" /></title>
+
+ <screen>INHERIT += "debian"</screen>
+
+ <para>Placing the above line into your <emphasis>${DISTRO}.conf</emphasis>
+ or <emphasis>local.conf</emphasis> will trigger renaming of packages if
+ they only ship one library. Imagine a package where the package name
+ (<command>PN</command>) is foo and this packages ships a file named
+ <command>libfoo.so.1.2.3</command>. Now this package will be renamed to
+ <command>libfoo1</command> to follow the Debian package naming
+ policy.</para>
+ </section>
+
+ <section id="special_shlibs">
+ <title>Shared Library handling (shlibs) <anchor id="shlibs" /></title>
+
+ <para>Run-time Dependencies (<command>RDEPENDS</command>) will be added
+ when packaging the software. They should only contain the minimal
+ dependencies to run the program. OpenEmbedded will analyze each packaged
+ binary and search for <command>SO_NEEDED</command> libraries. The
+ libraries are absolutely required by the program then OpenEmbedded is
+ searching for packages that installs these libraries. these packages are
+ automatically added to the <command>RDEPENDS</command>. As a packager you
+ don't need to worry about shared libraries anymore they will be added
+ automatically.</para>
+
+ <remark>NOTE: This does not apply to plug-ins used by the
+ program.</remark>
+ </section>
+
+ <section id="special_bitbake_collections">
+ <title>BitBake Collections <anchor id="collections" /></title>
+
+ <para>This section is a stub, help us by expanding it</para>
+
+ <para><screen>
+BBFILES := "${OEDIR}/openembedded/packages/*/*.bb ${LOCALDIR}/packages/*/*.bb"
+BBFILE_COLLECTIONS = "upstream local"
+BBFILE_PATTERN_upstream = "^${OEDIR}/openembedded/packages/"
+BBFILE_PATTERN_local = "^${LOCALDIR}/packages/"
+BBFILE_PRIORITY_upstream = "5"
+BBFILE_PRIORITY_local = "10"
+</screen></para>
+ </section>
+
+ <section id="special_task_base">
+ <title>Task-base <anchor id="task-base" /></title>
+
+ <para>Task-base is new way of creating basic root filesystems. Instead of
+ having each machine setting a ton of duplicate variables, this allow a
+ machine to specify its features and <command>task-base</command> builds it
+ a customised package based on what the machine needs along with what the
+ distro supports.</para>
+
+ <para>To illustrate, the distro config file can say: <screen>
+DISTRO_FEATURES = "nfs smbfs ipsec wifi ppp alsa bluetooth ext2 irda pcmcia usbgadget usbhost"
+</screen> and the machine config: <screen>
+MACHINE_FEATURES = "kernel26 apm alsa pcmcia bluetooth irda usbgadget"
+</screen> and the resulting <command>task-base</command> would support pcmcia
+ but not usbhost.</para>
+
+ <para>Task-base details exactly which options are either machine or distro
+ settings (or need to be in both). Machine options are meant to reflect
+ capabilities of the machine, distro options list things distribution
+ maintainers might want to add or remove from their distros images.</para>
+ </section>
+
+ <section id="special_overrides">
+ <title>Overrides <anchor id="overrides" /></title>
+
+ <para>This section is a stub, help us by expanding it</para>
+ </section>
+</chapter> \ No newline at end of file
diff --git a/docs/usermanual/chapters/getting_oe.xml b/docs/usermanual/chapters/getting_oe.xml
new file mode 100644
index 0000000000..d71ea71e72
--- /dev/null
+++ b/docs/usermanual/chapters/getting_oe.xml
@@ -0,0 +1,557 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_getting_oe">
+ <title>Getting Started</title>
+
+ <section id="gettingoe_directory_setup">
+ <title>OpenEmbedded Directory Structure</title>
+
+ <para>Before you begin downloading OpenEmbedded, you need to setup your
+ working environment.</para>
+
+ <para>The first step is to decide where on your system you wish to
+ work. This document will use the <varname>$OEBASE</varname> variable to
+ denote the base directory of the OpenEmbedded environment. For
+ example, <varname>$OEBASE</varname> could
+ be <literal>/home/joe/work/oe</literal>.</para>
+
+ <para>The base directory of your OpenEmbedded environment
+ (<varname>$OEBASE</varname>) is the location where sources will be checked
+ out (or unpacked). You must choose a location with <emphasis>no symlinks
+ above it</emphasis>.</para>
+
+ <para>To create the directory structure:
+
+ <screen>
+$ mkdir -p $OEBASE/build/conf
+$ cd $OEBASE</screen>
+
+ The <literal>$OEBASE/build</literal> directory will contain your
+ local configurations and extensions to the OpenEmbedded system which allow
+ you to build your applications and images.
+ </para>
+
+ <para>The <varname>$OEBASE</varname> will also contain both bitbake/ and
+ openembedded/ directories. These will be discussed in
+ <xref linkend="gettingoe_getting_bitbake"/> and
+ <xref linkend="gettingoe_getting_oe"/>.
+ </para>
+ </section>
+
+ <section id="gettingoe_getting_bitbake">
+ <title>Getting <application>BitBake</application></title>
+
+ <para>Before using OE, you must first obtain the build tool it needs:
+ bitbake.</para>
+
+ <para>It is recommended to run bitbake without installing it, as a sibling
+ directory of <literal>openembedded/</literal>
+ and <literal>build/</literal> directories. Indeed, as bitbake is written
+ in python it does not need compilation for being used. You'll just have to
+ set the PATH variable so that the BitBake tools are accessible (see
+ <xref linkend="gettingoe_configuring_oe"/>).</para>
+
+ <section><title>Getting <application>BitBake</application> Using Subversion</title>
+ <para>To checkout the latest version of the BitBake 1.8 branch, use the
+ following command:
+ <screen>
+$ cd $OEBASE
+$ <command>svn</command> co svn://svn.berlios.de/bitbake/branches/bitbake-1.8/ bitbake
+</screen>
+ </para>
+
+ <para><application>BitBake</application> is checked out now and
+ the <varname>$OEBASE</varname> directory will contain
+ a <literal>bitbake/</literal> subdirectory.</para>
+
+ <para>If you need to access a Subversion server through a proxy, see the
+ <ulink url="http://subversion.tigris.org/faq.html#proxy">SVN FAQ</ulink>
+ </para>
+ </section>
+
+ <section><title>Updating <application>BitBake</application></title>
+ <para>Bitbake is being revised fairly often. Periodically it's a good
+ idea to check the repository of bitbake stable branches to see if a
+ new stable branch is available or if the current branch has been
+ revised. Compare your existing bitbake directory with the latest
+ bitbake branch in the repository. Your existing bitbake branch and
+ its 'last changed revision' number can be found as follows:
+
+ <screen>$ cd $OEBASE/bitbake; svn info</screen>
+
+ If there is a new stable branch, you will want to move or delete
+ your existing bitbake directory and repeat the process listed above
+ under "To obtain bitbake". If there is no new branch, it is easy to
+ update bitbake:
+
+ <screen>$ cd $OEBASE/bitbake; svn update</screen>
+ </para>
+ </section>
+ </section>
+
+
+ <section id="gettingoe_getting_oe">
+ <title>Getting OpenEmbedded</title>
+
+ <para><emphasis>Note:</emphasis> Once upon a time OpenEmbedded used
+ Monotone for version control. If you have an OE Monotone repository on
+ your computer, you should replace it with the Git repository.</para>
+
+ <para>The OpenEmbedded metadata has a high rate of development, so it's a
+ good idea to stay up to date. You'll need Git to get the metadata and
+ stay up to date. Git is available in most distributions and has binaries
+ at <ulink url="http://git-scm.com/">Git homepage</ulink>.</para>
+
+ <section><title>Checking Out OpenEmbedded With Git</title>
+ <para>Once you have installed Git, checkout the OpenEmbedded repository:
+ <screen>
+$ cd $OEBASE
+$ git clone git://git.openembedded.net/openembedded</screen>
+ The <literal>$OEBASE/openembedded/</literal> directory should now
+ exist.</para>
+ </section>
+
+ <section><title>Updating OpenEmbedded</title>
+ <para>The <literal>org.openembedded.dev</literal> branch of OpenEmbedded
+ is updated very frequently (as much as several times an hour). The
+ distro branches are not updated as much but still fairly often. It
+ seems good practice to update your OpenEmbedded tree at least
+ daily. To do this, run:
+ <screen>
+$ cd $OEBASE
+$ git pull</screen>
+ </para>
+ </section>
+ <section><title>Changing Branches</title>
+ <para>Working with multiple branches is very easy to do with Git. The
+ OpenEmbedded repository holds many branches. To list all branches, use this command:
+ <screen>$ git branch -a</screen>
+ Branch names that begin with <literal>origin/</literal> denote
+ branches that exist on the remote server. The name with a * in front
+ of it is the branch currently checked out. If you want to work with a
+ remote branch, you must first create a local copy of it. The following
+ command will create a local copy of a remote branch:
+ <screen>$ git branch &lt;local_name&gt; &lt;remote_name&gt;</screen>
+ To change branches, use this command:
+ <screen>$ git checkout &lt;branch_name&gt;</screen>
+ There are more complicated branch operations that can be done with git,
+ but those are beyond the scope of this document.</para>
+ </section>
+ </section>
+
+ <section id="gettingoe_configuring_oe">
+ <title>Configuring OpenEmbedded</title>
+
+ <para>At this point, your <literal>$OEBASE/</literal> directory should
+ contain at least the following subdirectories:
+ <itemizedlist>
+ <listitem><simpara><literal>build/</literal></simpara></listitem>
+ <listitem><simpara><literal>bitbake/</literal></simpara></listitem>
+ <listitem><simpara><literal>openembedded/</literal></simpara></listitem>
+ </itemizedlist>
+ </para>
+
+ <section><title>Environment Setup</title>
+ <para>There are a few environment variables that you will need to set
+ before you can build software for OpenEmbedded using BitBake. You will
+ need to set these variables every time you open a terminal for
+ development. You can automate this in
+ <filename>~/.profile</filename>, <filename>/etc/profile</filename>, or
+ perhaps use a script to set the necessary variables for using BitBake.
+ </para>
+
+ <para>Since the path to your OpenEmbedded installation will be used in
+ many places, setting it in your environment will allow you to use
+ the <varname>$OEBASE</varname> variable in all pathes and make it
+ easier to change in the future should the need arise. To
+ set <varname>$OEBASE</varname> if you use a Bourne like shell
+ <footnote>
+ <para>If you use a CSH like shell (e.g. on a FreeBSD system), you
+ will set environment variables like this:
+ <screen>
+$ setenv VAR_NAME "VAR_VALUE"</screen>
+ </para>
+ </footnote>, do this:
+
+ <screen>
+$ export OEBASE=/path/to/your/oe/installation</screen>
+
+ </para>
+
+ <para>If you followed the recommendation to use BitBake from svn, you
+ will need to add the path to the BitBake executable to
+ your <varname>PATH</varname> environment variable like this:
+
+ <screen>
+$ export PATH=$OEBASE/bitbake/bin:$PATH</screen>
+ </para>
+
+ <para>In order for bitbake to find the configuration files for
+ OpenEmbedded, you will need to set the <varname>BBPATH</varname>
+ variable.
+
+ <screen>
+$ export BBPATH=$OEBASE/build:$OEBASE/openembedded</screen>
+ </para>
+
+ <para>Finally, if you wish to allow BitBake to inherit
+ the <varname>$OEBASE</varname> variable from the environment, you will
+ need to set the <varname>BB_ENV_EXTRAWHITE</varname> variable:
+
+ <screen>
+$ export BB_ENV_EXTRAWHITE="OEBASE"</screen>
+
+ Note the absence of the "$" character which implies that you are
+ setting <varname>BB_ENV_EXTRAWHITE</varname> to the variable name, not
+ the variable value.
+ </para>
+ </section>
+
+ <section><title>Local Configuration</title>
+ <para>It is now time to create your local configuration. While you could
+ copy the default <filename>local.conf.sample</filename> like this:
+
+ <screen>
+$ cd $OEBASE
+$ cp openembedded/conf/local.conf.sample build/conf/local.conf
+$ vi build/conf/local.conf</screen>
+
+ It is actually recommended to start smaller and
+ keep <filename>local.conf.sample</filename> in the background. Add
+ entries from there step-by-step as you understand and need
+ them. Please, do not just edit
+ <filename>build/conf/local.conf.sample</filename> but
+ actually <emphasis>READ</emphasis> it (read it and then edit it).
+ </para>
+
+ <para>For building an <literal>org.openembedded.dev</literal> branch, in
+ your <filename>local.conf</filename> file, you should have at least
+ the following three
+ entries: <varname>BBFILES</varname>, <varname>DISTRO</varname>
+ and <varname>MACHINE</varname>. For example, consider the following
+ mininal <literal>local.conf</literal> file for the &Aring;ngstr&ouml;m
+ distribution and the Openmoko gta01 machine:
+
+ <screen>
+BBFILES = "${OEBASE}/openembedded/packages/*/*.bb"
+DISTRO = "angstrom-2008.1"
+MACHINE = "om-gta01"</screen>
+ </para>
+ </section>
+ </section>
+
+ <section id="gettingoe_building_software">
+ <title>Building Software</title>
+
+ <para>The primary interface to the build system is
+ the <command>bitbake</command> command (see
+ the <ulink url="http://subversion.tigris.org/faq.html#proxy">BitBake
+ users manual</ulink>). BitBake will download and patch files from the
+ internet, so it helps if you are on a well connected machine.
+ </para>
+
+ <para>Note that you should issue all BitBake commands from inside of the
+ <filename>build/</filename> directory, or you should
+ override <varname>TMPDIR</varname> in
+ your <filename>$OEBASE/build/conf/local.conf</filename> to point
+ elsewhere (by default it goes to <filename>tmp/</filename> relative to
+ the directory you run <command>bitbake</command> commands in).
+ </para>
+
+ <note>
+ <para>BitBake might complain that there is a problem with the setting in
+ <filename>/proc/sys/vm/mmap_min_addr</filename>, which needs to be set
+ to zero. You can set it by doing the following as root:
+
+ <screen># echo 0 > /proc/sys/vm/mmap_min_addr</screen>
+
+ Note that you can not use a text editor to do this since files
+ in <filename>/proc</filename> are not real files. Also note that this
+ above change will be lost when you reboot your system. To have the
+ change made automatically when the system boots, some systems provide
+ a <filename>/etc/sysctl.conf</filename> file. Add the following line
+ to that file:
+
+ <screen>vm.mmap_min_addr=0</screen>
+
+ If your system does not provide
+ the <filename>/etc/sysctl.conf</filename> mechanism, you can try adding
+ the above <command>echo</command> command line to
+ your <filename>/etc/rc.local</filename>.
+ </para>
+ </note>
+
+ <para>Once BitBake and OpenEmbedded are set up and configured, you can build
+ software and images like this:
+
+ <screen>$ bitbake &lt;recipe_name&gt;</screen>
+
+ A recipe name corresponds to a BitBake <filename>.bb</filename> file. A
+ BitBake file is a logical unit of tasks to be executed. Normally this is
+ a package to be built. Inter-recipe dependencies are obeyed. The recipes
+ are located by BitBake via the <varname>BBFILES</varname> variable (set
+ in your <filename>$OEBASE/build/conf/local/conf</filename>), which is a
+ space separated list of <filename>.bb</filename> files, and does handle
+ wildcards.
+ </para>
+
+ <para>To build a single package, bypassing the long parse step (and
+ therefore its dependencies -- use with care):
+
+ <screen>$ bitbake -b $OEBASE/openembedded/packages/blah/blah.bb</screen>
+ </para>
+
+ <para>There are a few groups of special recipes located in subdirectories
+ of the <filename>$OEBASE/openembedded/packages/</filename>
+ directory. These groups are:
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>tasks/</filename></term>
+ <listitem><para>A collection of meta-packages that depend on real
+ packages to make managing package sets easier.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>meta/</filename></term>
+ <listitem><para>A collection of usefull meta tasks and recipes that
+ don't fit in a general category.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>images/</filename></term>
+ <listitem><para>A collection of image targets that depend on
+ packages that will be installed into an image which can be put
+ on the target system.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <section><title>Useful Target Recipes</title>
+ <para>Although BitBake can build individual packages, it is often more
+ useful to build a set of packages and combine them into an image. The
+ following recipe names are commonly used to that effect.
+ </para>
+
+ <section><title>Images</title>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><literal>helloworld-image</literal></term>
+ <listitem>
+ <para>Builds an image, that if used as a root filesystem, will
+ start a static executable that prints hello world then
+ loops infinitely. Can be used to test the Linux boot
+ procedure into user space (init).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>bootstrap-image</literal></term>
+ <listitem>
+ <para>Build image contains task-base packages.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>console-image</literal></term>
+ <listitem>
+ <para>Build an image without the X11, gtk+, or qt windowing
+ libraries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>x11-image</literal></term>
+ <listitem>
+ <para>Builds an image with X11.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>beagleboard-demo-image</literal></term>
+ <listitem>
+ <para>Builds the &Aring;ngstr&ouml;m distribution like Koen
+ proposed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>opie-image</literal></term>
+ <listitem>
+ <para>Build image based on the
+ <ulink url="http://opie.handhelds.org/">Open Palmtop
+ Integrated Environment</ulink> (OPIE). OPIE is a completely
+ Open Source based graphical user environment and suite of
+ applications for small form-factor devices, such as PDAs,
+ running Linux.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>opie-kdepim-image</literal></term>
+ <listitem>
+ <para>Build image based on the OPIE and full featured
+ KDE-based PIM (pi-sync, ko/pi, ka/pi, etc).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>pivotboot-image</literal></term>
+ <listitem>
+ <para>Build image that is necessary to flash a Sharp SL C3000,
+ Zaurus. It pivots after booting from the NAND and finalizes
+ the install to the HD during the first boot.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>twin-image</literal></term>
+ <listitem>
+ <para>A image with task-base plus a couple of editors, nano and
+ vim (why two?), and a mail reader, mutt.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>uml-image</literal></term>
+ <listitem>
+ <para>A root image for user-mode-linux. Includes task-base,
+ and parts of opie.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>gpe-image</literal></term>
+ <listitem>
+ <para>Build a <ulink url="http://opie.handhelds.org/">GPE
+ Palmtop Environment</ulink> based kernel and rootfs. The GPE
+ provides a user interface environment for palmtop/handheld
+ computers running the GNU/Linux or any other UNIX-like
+ operating system.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </section>
+
+ <section><title>Tasks</title>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><literal>task-base</literal></term>
+ <listitem>
+ <para>Build a kernel and core packages for a basic
+ installation. You won't be able to do much more than ssh to
+ the machine if this is all that is installed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>task-dvb</literal></term>
+ <listitem>
+ <para>Meta-package for DVB application (DVB = Digital Video
+ Broadcasting).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>task-python-everything</literal></term>
+ <listitem>
+ <para>All of python.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>task-native-sdk</literal></term>
+ <listitem>
+ <para>Mata-package for native (on-device) SDK.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </section>
+
+ <section><title>Meta</title>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><literal>meta-opie</literal></term>
+ <listitem>
+ <para>Build all OPIE related packages and some more for OPIE
+ based usage.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>meta-gpe</literal></term>
+ <listitem>
+ <para>Basic packages to go with gpe-image.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </section>
+
+ <section><title>Other</title>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><literal>helloworld</literal></term>
+ <listitem>
+ <para>Builds a static executable that prints hello
+ world then loops infinitely.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>world</literal></term>
+ <listitem>
+ <para>Build everything. This takes a long time, a lot
+ of network bandwidth, and a lot of disc space. Can also
+ break your toolchain.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>package-index</literal></term>
+ <listitem>
+ <para>Target to update the "feed" files to reflect the current
+ set of .ipk's that exist in the deploy directory. Commonly
+ used after building some packages individually to update the
+ feed and allow them to be installed via a package manager or
+ the ipkg command line tools.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>virtual/kernel</literal></term>
+ <listitem>
+ <para>Builds the appropriate kernel for your device.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </section>
+ </section>
+ </section>
+</chapter>
diff --git a/docs/usermanual/chapters/introduction.xml b/docs/usermanual/chapters/introduction.xml
new file mode 100644
index 0000000000..cbe58332e1
--- /dev/null
+++ b/docs/usermanual/chapters/introduction.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_introduction">
+ <title>Introduction</title>
+
+ <section id="intro_overview">
+ <title>Overview</title>
+
+ <para>Like any build tool (make, ant, jam), the OpenEmbedded build tool
+ BitBake controls how to build things and the build dependencies. But
+ unlike single project tools like <command>make</command> it is not based
+ on one makefile or a closed set of inter-dependent makefiles, but collects
+ and manages an open set of largely independent build descriptions (package
+ recipes) and builds them in proper order.</para>
+
+ <para>To be more precise: <ulink
+ url="http://www.openembedded.org"><application>OpenEmbedded</application></ulink>
+ is a set of metadata used to cross-compile, package and install software
+ packages. <application>OpenEmbedded</application> is being used to build
+ and maintain a number of embedded Linux distributions, including
+ OpenZaurus, &Aring;ngstr&ouml;m, Familiar and SlugOS.</para>
+
+ <para>The primary use-case of <application>OpenEmbedded</application> are:
+ <itemizedlist>
+ <listitem>
+ <para>Handle cross-compilation.</para>
+ </listitem>
+
+ <listitem>
+ <para>Handle inter-package dependencies</para>
+ </listitem>
+
+ <listitem>
+ <para>Must be able to emit packages (tar, rpm, ipk)</para>
+ </listitem>
+
+ <listitem>
+ <para>Must be able to create images and feeds from packages</para>
+ </listitem>
+
+ <listitem>
+ <para>Must be highly configurable to support many machines,
+ distribution and architectures.</para>
+ </listitem>
+
+ <listitem>
+ <para>Writing of metadata must be easy and reusable</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Together with <ulink
+ url="http://bitbake.berlios.de/manual"><application>BitBake</application></ulink>,
+ OpenEmbedded satisfies all these and many more. Flexibility and power have
+ always been the priorities.</para>
+ </section>
+
+ <section id="intro_history">
+ <title>History</title>
+
+ <para>OpenEmbedded was invented and founded by the creators of the
+ OpenZaurus project. At this time the project had pushed
+ <emphasis>buildroot</emphasis> to its limits. It supported the creation of
+ <emphasis>ipk</emphasis> packages, feeds and images and had support for
+ more than one machine. But it was impossible to use different patches,
+ files for different architectures, machines or distributions. To overcome
+ this shortcoming OpenEmbedded was created.</para>
+
+ <para>After a few months other projects started using OpenEmbedded and
+ contributing back. On 7 December 2004 Chris Larson split the project into
+ two parts: BitBake, a generic task executor and OpenEmbedded, the metadata
+ for BitBake.</para>
+ </section>
+</chapter>
diff --git a/docs/usermanual/chapters/metadata.xml b/docs/usermanual/chapters/metadata.xml
new file mode 100644
index 0000000000..54fb523553
--- /dev/null
+++ b/docs/usermanual/chapters/metadata.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_metadata">
+ <title>Metadata</title>
+
+ <section id="metadata_file_layout">
+ <title>File Layout</title>
+
+ <para>The OpenEmbedded
+ directory, <filename>$OEBASE/openembedded/</filename>, has seven
+ directories, three of which hold
+ <application>BitBake</application> metadata.
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>classes/</filename></term>
+ <listitem>
+ <para>Contains <application>BitBake</application>
+ <filename>.bbclass</filename> files. These classes can
+ be inherited by other <application>BitBake</application>
+ files. Every <application>BitBake</application>
+ <filename>.bb</filename> file automatically inherits the
+ <filename>base.bbclass</filename>. <varname>BBPATH</varname>
+ is used to find the <filename>.bbclass</filename> files.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>conf/</filename></term>
+ <listitem>
+ <para>Contains the configuration files for OpenEmbedded.
+ The <filename>bitbake.conf</filename> is read when
+ <application>BitBake</application> is started and this will
+ include the <filename>local.conf</filename>, the machine and
+ distribution configuration files, among others. These files
+ will be located using the <varname>BBPATH</varname> environment
+ variable as a search path.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>contrib/</filename></term>
+ <listitem>
+ <para>Contains miscellaneous scripts that do not
+ belong in the other directories.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>docs/</filename></term>
+ <listitem>
+ <para>Contains the source for the user manual and other
+ documentation files.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>files/</filename></term>
+ <listitem><para>Contains setup tables for populating
+ the <filename>/dev</filename> directory of various target images.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>packages/</filename></term>
+ <listitem>
+ <para>Conatins all of the
+ <application>BitBake</application> <filename>.bb</filename>
+ files. There is a subdirectory for each task or application
+ and within that subdirectory is
+ a <application>BitBake</application> <filename>.bb</filename> file
+ for each supported version of an application or task.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>site/</filename></term>
+ <listitem>
+ <para>Contains site configuration files for
+ the <application>autoconf</application>/<application>automake</application>
+ system.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </section>
+
+ <section id="metadata_syntax">
+ <title>Syntax</title>
+
+ <para>OpenEmbedded has files ending with <emphasis>.conf</emphasis>,
+ <emphasis>.inc</emphasis>, <emphasis>.bb</emphasis>
+ and<emphasis>.bbclass</emphasis>. The syntax and semantic of these files
+ are best described in the <ulink
+ url="http://bitbake.berlios.de/manual"><application>BitBake</application>
+ manual</ulink>.</para>
+ </section>
+
+ <section id="metadata_classes">
+ <title>Classes</title>
+
+ <para>OpenEmbedded provides special <application>BitBake</application>
+ classes to ease compiling, packaging and other things. FIXME.</para>
+ </section>
+
+ <section id="metadata_writing_data">
+ <title>Writing Meta Data (Adding packages)</title>
+
+ <para>This page will guide you trough the effort of writing a .bb file or
+ <emphasis>recipe</emphasis> in BitBake speak.</para>
+
+ <para>Let's start with the easy stuff, like the package description,
+ license, etc: <screen>
+DESCRIPTION = "My first application, a really cool app containing lots of foo and bar"
+LICENSE = "GPLv2"
+HOMEPAGE = "http://www.host.com/foo/"
+ </screen> The description and license fields are mandatory, so
+ better check them twice.</para>
+
+ <para>The next step is to specify what the package needs to build and run,
+ the so called <emphasis>dependencies</emphasis>: <screen>
+DEPENDS = "gtk+"
+RDEPENDS = "cool-ttf-fonts"
+ </screen> The package needs gtk+ to build ('DEPENDS') and
+ requires the 'cool-ttf-fonts' package to run ('RDEPENDS'). OE will add
+ run-time dependencies on libraries on its own via the so called
+ <emphasis>shlibs</emphasis>-code, but you need to specify everything other
+ by yourself, which in this case is the 'cool-ttf-fonts' package.</para>
+
+ <para>After entering all this OE will know what to build before trying to
+ build your application, but it doesn't know where to get it yet. So let's
+ add the source location: <screen>
+SRC_URI = "http://www.host.com/foo/files/${P}.tar.bz2;md5sum=yoursum"
+ </screen> This will tell the fetcher to where to download the
+ sources from and it will check the integrity using md5sum if you provided
+ the appropriate <emphasis>yoursum</emphasis>. You can make one by doing
+ <screen>md5sum foo-1.9.tar.bz2</screen> and replacing
+ <emphasis>yoursum</emphasis> with the md5sum on your screen. A typical
+ md5sum will look like this: <screen>a6434b0fc8a54c3dec3d6875bf3be8mtn </screen>Notice
+ the <emphasis>${P}</emphasis> variable, that one holds the package name,
+ <emphasis>${PN}</emphasis> in BitBake speak and the package version,
+ <emphasis>${PV}</emphasis> in BitBake speak. It's a short way of writing
+ <emphasis>${PN}-${PV}</emphasis>. Using this notation means you can copy
+ the recipe when a new version is released without having to alter the
+ contents. You do need to check if everything is still correct, because new
+ versions mean new bugs.</para>
+
+ <para>Before we can move to the actual building we need to find out which
+ build system the package is using. If we're lucky, we see a
+ <emphasis>configure</emphasis> file in the build tree this is an indicator
+ that we can <emphasis>inherit autotools</emphasis> if we see a
+ <emphasis>.pro</emphasis> file, it might be qmake, which needs
+ <emphasis>inherit qmake</emphasis>. Virtually all gtk apps use autotools:
+ <screen>
+inherit autotools pkgconfig
+ </screen> We are in luck! The package is a well-behaved
+ application using autotools and pkgconfig to configure and build it
+ self.</para>
+
+ <para>Lets start the build: <screen>
+<command>bitbake</command> foo
+ </screen> Depending on what you have built before and the
+ speed of your computer this can take a few seconds to a few hours, so be
+ prepared.</para>
+
+ <para>.... some time goes by .....</para>
+
+ <para>Your screen should now have something like this on it: <screen>
+NOTE: package foo-1.9-r0: task do_build: completed
+NOTE: package foo-1.9: completed
+NOTE: build 200605052219: completed
+ </screen></para>
+
+ <para>All looks well, but wait, let's scroll up: <screen>
+NOTE: the following files where installed but not shipped:
+ /usr/weirdpath/importantfile.foo
+ </screen> OE has a standard list of paths which need to be
+ included, but it can't know everything, so we have to tell OE to include
+ that file as well: <screen>
+FILES_${PN} += "/usr/weirdpath/importantfile.foo"
+ </screen> It's important to use <emphasis>+=</emphasis> so it
+ will get appended to the standard file-list, not replace the standard
+ one.</para>
+ </section>
+</chapter>
diff --git a/docs/usermanual/chapters/recipes.xml b/docs/usermanual/chapters/recipes.xml
new file mode 100644
index 0000000000..c1ca456fa0
--- /dev/null
+++ b/docs/usermanual/chapters/recipes.xml
@@ -0,0 +1,3710 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_recipes" xreflabel="Recipes chapter">
+ <title>Recipes</title>
+
+ <section id="recipes_introduction" xreflabel="introduction">
+ <title>Introduction</title>
+
+ <para>A bitbake recipe is a set of instructions that describe what needs
+ to be done to retrieve the source code for some application, apply any
+ necessary patches, provide any additional files (such as init scripts),
+ compile it, install it and generated binary packages. The end result is a
+ binary package that you can install on your target device, and maybe some
+ intermediate files, such as libraries and headers, which can be used when
+ building other application.</para>
+
+ <para>In many ways the process is similar to creating .deb or .rpm
+ packages for your standard desktop distributions with one major difference
+ - in OpenEmbedded everything is being cross-compiled. This often makes the
+ task far more difficult (depending on how well suited the application is
+ to cross compiling), then it is for other packaging systems and sometime
+ impossible.</para>
+
+ <para>This chapter assumes that you are familiar with working with
+ bitbake, including the work flow, required directory structures, bitbake
+ configuration and the use of monotone. If you are not familiar with these
+ then first take a look at the chapter on bitbake usage.</para>
+ </section>
+
+ <section id="recipes_syntax" xreflabel="syntax">
+ <title>Syntax of recipes</title>
+
+ <para>The basic items that make up a bitbake recipe file are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>functions</term>
+
+ <listitem>
+ <para>Functions provide a series of actions to be performed.
+ Functions are usually used to override the default implementation of
+ a task function, or to compliment (append or prepend to an existing
+ function) a default function. Standard functions use sh shell
+ syntax, although access to OpenEmbedded variables and internal
+ methods is also available.</para>
+
+ <para>The following is an example function from the sed
+ recipe:</para>
+
+ <para><screen>do_install () {
+ autotools_do_install
+ install -d ${D}${base_bindir}
+ mv ${D}${bindir}/sed ${D}${base_bindir}/sed.${PN}
+}</screen>It is also possible to implement new functions, that are not
+ replacing or complimenting the default functions, which are called
+ between existing tasks. It is also possible to implement functions
+ in python instead of sh. Both of these options are not seen in the
+ majority of recipes.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>variable assignments and manipulations</term>
+
+ <listitem>
+ <para>Variable assignments allow a value to be assigned to a
+ variable. The assignment may be static text or might include the
+ contents of other variables. In addition to assignment, appending
+ and prepending operations are also supported.</para>
+
+ <para>The follow example shows the some of the ways variables can be
+ used in recipes:<screen>S = "${WORKDIR}/postfix-${PV}"
+PR = "r4"
+CFLAGS += "-DNO_ASM"
+SRC_URI_append = "file://fixup.patch;patch=1"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>keywords</term>
+
+ <listitem>
+ <para>Only a few keywords are used in bitbake recipes. They are used
+ for things such as including common functions
+ (<emphasis>inherit</emphasis>), loading parts of a recipe from other
+ files (<emphasis>include</emphasis> and
+ <emphasis>require</emphasis>) and exporting variables to the
+ environment (export).</para>
+
+ <para>The following example shows the use of some of these
+ keywords:<screen>export POSTCONF = "${STAGING_BINDIR}/postconf"
+inherit autoconf
+require otherfile.inc</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>comments</term>
+
+ <listitem>
+ <para>Any lines that begin with a # are treated as comment lines and
+ are ignored.<screen># This is a comment</screen></para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The following is a summary of the most important (and most commonly
+ used) parts of the recipe syntax:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Line continuation: \</term>
+
+ <listitem>
+ <para>To split a line over multiple lines you should place a \ at
+ the end of the line that is to be continued on the next line.</para>
+
+ <screen>VAR = "A really long \
+ line"</screen>
+
+ <para>Note that there must not be anything (no spaces or tabs) after
+ the \.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Comments: #</term>
+
+ <listitem>
+ <para>Any lines beginning with a # are comments and will be
+ ignored.<screen># This is a comment</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Using variables: ${...}</term>
+
+ <listitem>
+ <para>To access the contents of a variable you need to access it via
+ <emphasis>${&lt;varname&gt;}</emphasis>:<screen>SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Quote all assignments</term>
+
+ <listitem>
+ <para>All variable assignments should be quoted with double quotes.
+ (It may work without them at present, but it will not work in the
+ future).<screen>VAR1 = "${OTHERVAR}"
+VAR2 = "The version is ${PV}"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Conditional assignment</term>
+
+ <listitem>
+ <para>Conditional assignement is used to assign a value to a
+ variable, but only when the variable is currently unset. This is
+ commonly used to provide a default value for use when no specific
+ definition is provided by the machine or distro configuration of the
+ users local.conf configuration.</para>
+
+ <para>The following example:<screen>VAR1 ?= "New value"</screen>will
+ set <emphasis role="bold">VAR1</emphasis> to <emphasis>"New
+ value"</emphasis> if its currently empty. However if it was already
+ set it would be unchanged. In the following <emphasis
+ role="bold">VAR1</emphasis> is left with the value
+ <emphasis>"Original value"</emphasis>:<screen>VAR1 = "Original value"
+VAR1 ?= "New value"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Appending: +=</term>
+
+ <listitem>
+ <para>You can append values to existing variables using the
+ <emphasis>+=</emphasis> operator. Note that this operator will add a
+ space between the existing content of the variable and the new
+ content.<screen>SRC_URI += "file://fix-makefile.patch;patch=1"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Prepending: =+</term>
+
+ <listitem>
+ <para>You can prepend values to existing variables using the
+ <emphasis>=+</emphasis> operator. Note that this operator will add a
+ space between the new content and the existing content of the
+ variable.<screen>VAR =+ "Starts"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Appending: _append</term>
+
+ <listitem>
+ <para>You can append values to existing variables using the
+ <emphasis>_append</emphasis> method. Note that this operator does
+ not add any additional space, and it is applied after all the
+ <emphasis>+=</emphasis>, and <emphasis>=+</emphasis> operators have
+ been applied.</para>
+
+ <para>The following example show the space being explicitly added to
+ the start to ensure the appended value is not merged with the
+ existing value:<screen>SRC_URI_append = " file://fix-makefile.patch;patch=1"</screen>The
+ <emphasis>_append</emphasis> method can also be used with overrides,
+ which result in the actions only being performed for the specified
+ target or machine: [TODO: Link to section on overrides]<screen>SRC_URI_append_sh4 = " file://fix-makefile.patch;patch=1"</screen>Note
+ that the appended information is a variable itself, and therefore
+ it's possible to used <emphasis>+=</emphasis> or
+ <emphasis>=+</emphasis> to assign variables to the
+ <emphasis>_append</emphasis> information:<screen>SRC_URI_append = " file://fix-makefile.patch;patch=1"
+SRC_URI_append += "file://fix-install.patch;patch=1"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Prepending: _prepend</term>
+
+ <listitem>
+ <para>You can prepend values to existing variables using the
+ _prepend method. Note that this operator does not add any additional
+ space, and it is applied after all the <emphasis>+=</emphasis>, and
+ <emphasis>=+</emphasis> operators have been applied.</para>
+
+ <para>The following example show the space being explicitly added to
+ the end to ensure the prepended value is not merged with the
+ existing value:<screen>CFLAGS_prepend = "-I${S}/myincludes "</screen>The
+ <emphasis>_prepend</emphasis> method can also be used with
+ overrides, which result in the actions only being performed for the
+ specified target or machine: [TODO: Link to section on
+ overrides]<screen>CFLAGS_prepend_sh4 = " file://fix-makefile.patch;patch=1"</screen>Note
+ that the appended information is a variable itself, and therefore
+ it's possible to used <emphasis>+=</emphasis> or
+ <emphasis>=+</emphasis> to assign variables to the
+ <emphasis>_prepend</emphasis> information:<screen>CFLAGS_prepend = "-I${S}/myincludes "
+CFLAGS_prepend += "-I${S}/myincludes2 "</screen>Note also the lack of a space
+ when using += to append to a prepend value - remember that the +=
+ operator is adding space itself.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Spaces vs tabs</term>
+
+ <listitem>
+ <para>Spaces should be used for indentation, not hard tabs. Both
+ currently work, however it is a policy decision of OE that spaces
+ always be used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Style: oe-stylize.py</term>
+
+ <listitem>
+ <para>To help with using the correct style in your recipes there is
+ a python script in the contrib directory called
+ <emphasis>oe-stylize.py</emphasis> which can be used to reformat
+ your recipes to the correct style. The output will contain a list of
+ warning (to let you know what you did wrong) which should be edited
+ out before using the new file.<screen>contrib/oe-stylize.py myrecipe.bb &gt; fixed-recipe.bb
+vi fixed-recipe.bb
+mv fixed.recipe.bb myrecipe.bb</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Using python for complex operations: ${@...}</term>
+
+ <listitem>
+ <para>For more advanced processing it is possible to use python code
+ during variable assignments, for doing search and replace on a
+ variable for example.</para>
+
+ <para>Python code is indicated by a proceeding @ sign in the
+ variable assignment.<screen>CXXFLAGS := "${@'${CXXFLAGS}'.replace('-frename-registers', '')}"</screen>More
+ information about using python is available in the <xref
+ linkend="recipes_advanced_python" /> section.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Shell syntax</term>
+
+ <listitem>
+ <para>When describing a list of actions to take shell syntax is used
+ (as if you were writing a shell script). You should ensure that you
+ script would work with a generic sh and not require any bash (or
+ other shell) specific functionality. The same applies to various
+ system utilities (sed, grep, awk etc) that you may wish to use. If
+ in doubt you should check with multiple implementations - including
+ those from busybox.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>For a detailed description of the syntax for the bitbake recipe
+ files you should refer to the bitbake use manual.</para>
+ </section>
+
+ <section id="recipes_versioning" xreflabel="versioning">
+ <title>Recipe naming: Names, versions and releases</title>
+
+ <para>Recipes in OpenEmbedded use a standard naming convention that
+ includes the package name and version number in the filename. In addition
+ to the name and version there is also a release number, which is indicates
+ changes to the way the package is built and/or packaged. The release
+ number is contained within the recipe itself.</para>
+
+ <para>The expected format of recipe name is:<screen>&lt;package-name&gt;_&lt;version&gt;.bb</screen></para>
+
+ <para>where <emphasis>&lt;package-name&gt;</emphasis> is the name of the
+ package (application, library, module, or whatever it is that is being
+ packaged) and <emphasis>version</emphasis> is the version number.</para>
+
+ <para>So a typical recipe name would be:<screen>strace_4.5.14.bb</screen>which
+ would be for version <emphasis>4.5.14</emphasis> of the
+ <emphasis>strace</emphasis> application.</para>
+
+ <para>The release version is defined via the package release variable, PR,
+ contained in the recipe. The expected format is:<screen>r&lt;n&gt;</screen>where
+ <emphasis>&lt;n&gt;</emphasis> is an integer number starting from 0
+ initially and then incremented each time the recipe, or something that
+ effects the recipe, is modified. So a typical definition of the release
+ would be:<screen>PR = "r1"</screen>to specify release number
+ <emphasis>1</emphasis> (the second release, the first would have been
+ <emphasis>0</emphasis>). If there is no definition of PR in the recipe
+ then the default value of "r0" is used.</para>
+
+ <para><note>
+ <para>It is good practice to always define PR in your recipes, even
+ for the <emphasis>"r0"</emphasis> release, so that when editing the
+ recipe it is clear that the PR number needs to be updated.</para>
+
+ <para>You should always increment PR when modifying a recipe.
+ Sometimes this can be avoided if the change will have no effect on the
+ actual packages generated by the recipe, such as updating the SRC_URI
+ to point to a new host. If in any doubt then you should increase the
+ PR regardless of what has been changed.</para>
+
+ <para>The PR value should never be decremented. If you accidentally
+ submit a large PR value for example then it should be left at the
+ value and just increased for new releases, not reset back to a lower
+ version.</para>
+ </note></para>
+
+ <para>When a recipe is being processed some variables are automatically
+ set based on the recipe file name and can be used for other purposes from
+ within the recipe itself. These include:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>PN</term>
+
+ <listitem>
+ <para>The package name. Determined from the recipe filename -
+ everything up until the first underscore is considered to be the
+ package name. For the <command>strace_4.5.14.bb</command> recipe the
+ PN variable would be set to <emphasis>"strace"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>PV</term>
+
+ <listitem>
+ <para>The package version. Determined from the recipe filename -
+ everything between the first underscore and the final .bb is
+ considered to be the package version. For the
+ <command>strace_4.5.14.bb</command> recipe the PV variable would be
+ set to <emphasis>"4.5.14"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>PR</term>
+
+ <listitem>
+ <para>The package release. This is explicitly set in the recipe, or
+ if not set it defaults to "<emphasis>r0"</emphasis> if not
+ set.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>P</term>
+
+ <listitem>
+ <para>The package name and versions separated by a hyphen.<screen>P = "${PN}-${PV}"</screen></para>
+
+ <para>For the <command>strace_4.5.14.bb</command> recipe the P
+ variable would be set to
+ <emphasis>"strace-4.5.14"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>PF</term>
+
+ <listitem>
+ <para>The package name, version and release separated by
+ hyphens.<screen>PF = "${PN}-${PV}-${PR}"</screen></para>
+
+ <para>For the s<command>trace_4.5.14.bb recipe</command>, with PR
+ set to <emphasis>"r1"</emphasis> in the recipe, the PF variable
+ would be set to <emphasis>"strace-4.5.14-r1"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>While some of these variables are not commonly used in recipes (they
+ are used internally though) both PN and PV are used a lot.</para>
+
+ <para>In the following example we are instructing the packaging system to
+ include an additional directory in the package. We use PN to refer to the
+ name of the package rather than spelling out the package name:<screen>FILES_${PN} += "${sysconfdir}/myconf"</screen></para>
+
+ <para>In the next example we are specifying the URL for the package
+ source, by using PV in place of the actual version number it is possible
+ to duplicate, or rename, the recipe for a new version without having to
+ edit the URL:<screen>SRC_URI = "ftp://ftp.vim.org/pub/vim/unix/vim-${PV}.tar.bz2"</screen></para>
+ </section>
+
+ <section id="recipes_variables" xreflabel="variables">
+ <title>Variables</title>
+
+ <para>One of the most confusing part of bitbake recipes for new users is
+ the large amount of variables that appear to be available to change and/or
+ control the behaviour of some aspect of the recipe. Some variables, such
+ as those derived from the file name are reasonably obvious, others are not
+ at all obvious.</para>
+
+ <para>There are several places where these variables are derived from
+ and/or used:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>A large number of variables are defined in the bitbake
+ configuration file conf/bitbake.conf - it's often a good idea to look
+ through that file when trying to determine what a particular variable
+ means.</para>
+ </listitem>
+
+ <listitem>
+ <para>Machine and distribution configuration files in conf/machine and
+ conf/distro will sometimes define some variables specific to the
+ machine and/or distribution. You should look at the appropriate files
+ for your targets to see if anything is being defined that effects the
+ recipes you are building.</para>
+ </listitem>
+
+ <listitem>
+ <para>Bitbake itself will define some variables. The FILE variables
+ that defines the name of the bitbake recipe being processed is set by
+ bitbake itself for example. Refer to the bitbake manual for more
+ information on the variables that bitbake sets.</para>
+ </listitem>
+
+ <listitem>
+ <para>The classes, that are used via the inherit keyword, define
+ and/or use the majority of the remaining variables. A class is a like
+ a library that contain parts of a bitbake recipe that are used by
+ multiple recipes. To make them usable in more situations they often
+ include a large number of variables to control how the class
+ operates.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Another important aspect is that there are three different types of
+ things that binaries and libraries are used for and they often have
+ different variables for each. These include:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>target</term>
+
+ <listitem>
+ <para>Refers to things built for the target are expected to be run
+ on the target device itself.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>native</term>
+
+ <listitem>
+ <para>Refers to things built to run natively on the build host
+ itself.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cross</term>
+
+ <listitem>
+ <para>Refers to things built to run natively on the build host
+ itself, but produce output which is suitable for the target device.
+ Cross versions of packages usually only exist for things like
+ compilers and assemblers - i.e. things which are used to produce
+ binary applications themselves.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section id="recipes_header" xreflabel="header">
+ <title>Header</title>
+
+ <para>Practically all recipes start was the header section which describes
+ various aspects of the package that is being built. This information is
+ typically used directly by the package format (such as ipkg or deb) as
+ it's meta data used to describe the package.</para>
+
+ <para>Variables used in the header include:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>DESCRIPTION</term>
+
+ <listitem>
+ <para>Describes what the software does. Hopefully this gives enough
+ information to a use to know if it's the right application for
+ them.</para>
+
+ <para>The default description is: <emphasis>"Version ${PV}-${PR} of
+ package ${PN}"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>HOMEPAGE</term>
+
+ <listitem>
+ <para>The URL of the home page of the application where new releases
+ and more information can be found.</para>
+
+ <para>The default homepage is <emphasis>"unknown"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SECTION</term>
+
+ <listitem>
+ <para>The section is used to categorise the application into a
+ specific group. Often used by GUI based installers to help users
+ when searching for software.</para>
+
+ <para>See <xref linkend="section_variable" /> for a list of the
+ available sections.</para>
+
+ <para>The default section is <emphasis>"base"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>PRIORITY</term>
+
+ <listitem>
+ <para>The default priority is
+ <emphasis>"optional"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>LICENSE</term>
+
+ <listitem>
+ <para>The license for the application. If it is not one of the
+ standard licenses then the license itself must be included
+ (where?).</para>
+
+ <para>As well as being used in the package meta-data the license is
+ also used by the src_distribute class.</para>
+
+ <para>The default license is <emphasis>"unknown"</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section id="recipes_sources" xreflabel="sources">
+ <title>Sources: Downloading, patching and additional files</title>
+
+ <para>A recipes purpose is to describe how to take a software package and
+ build it for your target device. The location of the source file (or
+ files) is specified via the <xref linkend="src_uri_variable" /> in the
+ recipe. This can describe several types of URI's, the most common
+ are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>http and https</term>
+
+ <listitem>
+ <para>Specifies files to be downloaded. A copy is stored locally so
+ that future builds will not download the source again.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cvs, svn and git</term>
+
+ <listitem>
+ <para>Specifies that the files are to be retrieved using the
+ specified version control system.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>files</term>
+
+ <listitem>
+ <para>Plain files which are included locally. These can be used for
+ adding documentation, init scripts or any other files that need to
+ be added to build the package under openembedded.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>patches</term>
+
+ <listitem>
+ <para>Patches are plain files which are treated as patched and
+ automatically applied.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>If a http, https or file URI refers to a compressed file, an archive
+ file or a compressed archive file, such as .tar.gz or .zip, then the files
+ will be uncompressed and extracted from the archive automatically.</para>
+
+ <para>Archive files will be extracted from with the working directory,
+ <emphasis role="bold">${WORKDIR}</emphasis> and plain files will be copied
+ into the same directory. Patches will be applied from within the unpacked
+ source directory, <emphasis role="bold">${S}</emphasis>. (Details on these
+ directories is provided in the next section.)</para>
+
+ <para>The following example from the havp recipe shows a typical <emphasis
+ role="bold">SRC_URI</emphasis> definition:<screen>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"</screen></para>
+
+ <para>This describes several files</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>http://www.server-side.de/download/havp-${PV}.tar.gz</term>
+
+ <listitem>
+ <para>This is the URI of the havp source code. Note the use of the
+ <emphasis role="bold">${PV}</emphasis> variable to specify the
+ version. This is done to enable the recipe to be renamed for a new
+ version without the need the edit the recipe itself. Because this is
+ a .tar.gz compressed archive the file will be decompressed and
+ extracted in the working dir <emphasis
+ role="bold">${WORKDIR}</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>file://sysconfdir-is-etc.patch;patch=1</term>
+
+ <listitem>
+ <para>This is a local file that is used to patch the extracted
+ source code. The patch=1 is what specifies that this is a patch. The
+ patch will be applied from the unpacked source directory, <emphasis
+ role="bold">${S}</emphasis>. In this case <emphasis
+ role="bold">${S}</emphasis> will be <emphasis
+ role="bold">${WORKDIR}/havp-0.82</emphasis>, and luckily the
+ <emphasis role="bold">havp-0.82.tar.gz</emphasis> file extracts
+ itself into that directory (so no need to explicitly change
+ <emphasis role="bold">${S}</emphasis>).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>file://havp.init file://doc.configure.txt
+ file://volatiles.05_havp"</term>
+
+ <listitem>
+ <para>These are plain files which are just copied into the working
+ directory <emphasis role="bold">${WORKDIR}</emphasis>. These are
+ then used during the install task in the recipe to provide init
+ scripts, documentation and volatiles configuration information for
+ the package.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Full details on the <emphasis role="bold">SRC_URI</emphasis>
+ variable and all the support URI's is available in the <xref
+ linkend="src_uri_variable" /> section of the reference chapter.</para>
+ </section>
+
+ <section id="recipes_directories" xreflabel="directories">
+ <title>Directories: What goes where</title>
+
+ <para>A large part of the work or a recipe is involved with specifying
+ where files and found and where they have to go. It's important for
+ example that programs do not try and use files from <emphasis
+ role="bold">/usr/include</emphasis> or <emphasis
+ role="bold">/usr/lib</emphasis> since they are for the host system, not
+ the target. Similarly you don't want programs installed into <emphasis
+ role="bold">/usr/bin</emphasis> since that may overwrite your host system
+ programs with versions that don't work on the host!</para>
+
+ <para>The following are some of the directories commonly referred to in
+ recipes and will be described in more detail in the rest of this
+ section:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Working directory: WORKDIR</term>
+
+ <listitem>
+ <para>This working directory for a recipe is where archive files
+ will be extracted, plain files will be placed, subdirectories for
+ logs, installed files etc will be created.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Unpacked source code directory: S</term>
+
+ <listitem>
+ <para>This is where patches are applied and where the program is
+ expected to be compiled in.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Destination directory: D</term>
+
+ <listitem>
+ <para>The destination directory. This is where your package should
+ be installed into. The packaging system will then take the files
+ from directories under here and package them up for installation on
+ the target.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Installation directories: bindir, docdir, ...</term>
+
+ <listitem>
+ <para>There are a set of variables available to describe all of the
+ paths on the target that you may want to use. Recipes should use
+ these variables rather than hard coding any specific paths.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Staging directories: STAGING_LIBDIR, STAGING_INCDIR, ...</term>
+
+ <listitem>
+ <para>Staging directories are a special area for headers, libraries
+ and other files that are generated by one recipe that may be needed
+ by another recipe. A library package for example needs to make the
+ library and headers available to other recipes so that they can link
+ against them.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>File path directories: FILE, FILE_DIRNAME, FILESDIR,
+ FILESPATH</term>
+
+ <listitem>
+ <para>These directories are used to control where files are found.
+ Understanding these can help you separate patches for different
+ versions or releases of your recipes and/or use the same patch over
+ multiple versions etc.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <section>
+ <title>WORKDIR: The working directory</title>
+
+ <para>The working directory is where the source code is extracted, to
+ which plain files (not patches) are copied and where the logs and
+ installation files are created. A typical reason for needing to
+ reference the work directory is for the handling of non patch
+ files.</para>
+
+ <para>If we take a look at the recipe for quagga we can see an example
+ non patch files for configuration and init scripts:<screen>SRC_URI = "http://www.quagga.net/download/quagga-${PV}.tar.gz \
+ file://fix-for-lib-inpath.patch;patch=1 \
+ file://quagga.init \
+ file://quagga.default \
+ file://watchquagga.init \
+ file://watchquagga.default"</screen>The recipe has two init files
+ and two configuration files, which are not patches, but are actually
+ files that it wants to include in the generated packages. Bitbake will
+ copy these files into the work directory. So to access them during the
+ install task we refer to them via the <emphasis
+ role="bold">WORKDIR</emphasis> variable:<screen>do_install () {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d ${D}${sysconfdir}/quagga
+ install -m 0644 ${WORKDIR}/quagga.default ${D}${sysconfdir}/default/quagga
+ install -m 0644 ${WORKDIR}/watchquagga.default ${D}${sysconfdir}/default/watchquagga
+ install -m 0755 ${WORKDIR}/quagga.init ${D}${sysconfdir}/init.d/quagga
+ install -m 0755 ${WORKDIR}/watchquagga.init ${D}${sysconfdir}/init.d/watchquagga
+ ...</screen></para>
+ </section>
+
+ <section>
+ <title>S: The unpacked source code directory</title>
+
+ <para>Bitbake expects to find the extracted source for a package in a
+ directory called <emphasis
+ role="bold">&lt;packagename&gt;-&lt;version&gt;</emphasis> in the
+ <emphasis role="bold">WORKDIR</emphasis> directory. This is the
+ directory in which it will change into before patching, compiling and
+ installating the package.</para>
+
+ <para>For example, we have a package called <emphasis
+ role="bold">widgets_1.2.bb</emphasis> which we are extracting from the
+ <emphasis role="bold">widgets-1.2.tar.gz</emphasis> file. Bitbake
+ expects the source to end up in a directory called <emphasis
+ role="bold">widgets-1.2</emphasis> within the work directory. If the
+ source does not end up in this directory then bitbake needs to be told
+ this by explicitly setting <emphasis role="bold">S</emphasis>.</para>
+
+ <para>If <emphasis role="bold">widgets-1.2.tar.gz</emphasis> actually
+ extracts into a directory called <emphasis
+ role="bold">widgets</emphasis>, without the version number, instead of
+ <emphasis role="bold">widgets-1.2</emphasis> then the <emphasis
+ role="bold">S</emphasis> variable will be wrong and patching and/or
+ compiling will fail. Therefore we need to override the default value of
+ <emphasis role="bold">S</emphasis> to specify the directory the source
+ was actually extracted into:<screen>SRC_URI = "http://www.example.com/software/widgets-${PN}.tar.gz"
+S = "${WORKDIR}/widgets"</screen></para>
+ </section>
+
+ <section>
+ <title>D: The destination directory</title>
+
+ <para>The destination directory is where the completed application and
+ all of it's files are installed into in preparation for packaging.
+ Typically an installation would places files in directories such as
+ <emphasis role="bold">/etc</emphasis> and <emphasis
+ role="bold">/usr/bin</emphasis> by default. Since those directories are
+ used by the host system we do not want the packages to install into
+ those locations. Instead they need to install into the directories below
+ the destination directory.</para>
+
+ <para>So instead of installing into <emphasis
+ role="bold">/usr/bin</emphasis> the package needs to install into
+ <emphasis role="bold">${D}/usr/bin</emphasis>.</para>
+
+ <para>The following example from arpwatch shows the make install command
+ being passed a <emphasis role="bold">${D}</emphasis> as the <emphasis
+ role="bold">DESTDIR</emphasis> variable to control where the makefile
+ installs everything:<screen>do_install() {
+ ...
+ oe_runmake install DESTDIR=${D}</screen></para>
+
+ <para>The following example from quagga shows the use of the destination
+ directory to install the configuration files and init scripts for the
+ package:<screen>do_install () {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d ${D}${sysconfdir}/quagga
+ install -m 0644 ${WORKDIR}/quagga.default ${D}${sysconfdir}/default/quagga
+ install -m 0755 ${WORKDIR}/quagga.init ${D}${sysconfdir}/init.d/quagga</screen><note>
+ <para>You should not use directories such as <emphasis
+ role="bold">/etc</emphasis> and <emphasis
+ role="bold">/usr/bin</emphasis> directly in your recipes. You should
+ use the variables that define these locations. The full list of
+ these variables can be found in the <xref
+ linkend="directories_installation" /> section of the reference
+ chapter.</para>
+ </note></para>
+ </section>
+
+ <section>
+ <title>Staging directories</title>
+
+ <para>Staging is used to make libraries, headers and binaries available
+ for the build of one recipe for use by another recipe. Building a
+ library for example requires that packages be created containing the
+ libraries and headers for development on the target as well as making
+ them available on the host for building other packages that need the
+ libraries and headers.</para>
+
+ <para>Making the libraries, headers and binaries available for use by
+ other recipes on the host is called staging and is performed by the
+ <emphasis>stage</emphasis> task in the recipe. Any recipes that contain
+ items that are required to build other packages should have a
+ <emphasis>stage</emphasis> task to make sure the items are all correctly
+ placed into the staging area. The following example from clamav show the
+ clamav library and header being placed into the staging area:<screen>do_stage () {
+ oe_libinstall -a -so libclamav ${STAGING_LIBDIR}
+ install -m 0644 libclamav/clamav.h ${STAGING_INCDIR}
+}</screen></para>
+
+ <para>The following from the p3scan recipe show the path to the clamav
+ library and header being passed to the configure script. Without this
+ the configure script would either fail to find the library, or worse
+ still search the host systems directories for the library. Passing in
+ the location results in it searching the correct location and finding
+ the clamav library and headers:<screen>EXTRA_OECONF = "--with-clamav=${STAGING_LIBDIR}/.. \
+ --with-openssl=${STAGING_LIBDIR}/.. \
+ --disable-ripmime"</screen>While the staging directories are
+ automatically added by OpenEmbedded to the compiler and linking commands
+ it is sometimes necessary, as in the p3scan example above, to explicitly
+ specify the location of the staging directories. Typically this is
+ needed for autoconf scripts that search in multiple places for the
+ libraries and headers.</para>
+
+ <note>
+ <para>Many of the helper classes, such as pkgconfig and autotools add
+ appropriate commands to the stage task for you. Check with the
+ individual class descriptions in the reference section to determine
+ what each class is staging automatically for you.</para>
+ </note>
+
+ <para>A full list of staging directories can be found in the <xref
+ linkend="directories_staging" /> section in the reference
+ chapter.</para>
+ </section>
+
+ <section id="recipes_filespath_dir" xreflabel="FILESPATH/FILESDIR">
+ <title>FILESPATH/FILESDIR: Finding local files</title>
+
+ <para>The file related variables are used by bitbake to determine where
+ to look for patches and local files.</para>
+
+ <para>Typically you will not need to modify these, but it is useful to
+ be aware of the default values. In particular when searching for patches
+ and/or files (file:// URI's), the default search path is:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>${FILE_DIRNAME}/${PF}</term>
+
+ <listitem>
+ <para>This is the package name, version and release, such as
+ "<emphasis role="bold">strace-4.5.14-r1</emphasis>". This is very
+ rarely used since the patches would only be found for the one
+ exact release of the recipe.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>${FILE_DIRNAME}/${P}</term>
+
+ <listitem>
+ <para>This is the package name and version, such as "<emphasis
+ role="bold">strace-4.5.14</emphasis>". This is by far the most
+ common place to place version specified patches.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>${FILE_DIRNAME}/${PN}</term>
+
+ <listitem>
+ <para>This is the package name only, such as "<emphasis
+ role="bold">strace</emphasis>". This is not commonly used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>${FILE_DIRNAME}/files</term>
+
+ <listitem>
+ <para>This is just the directory called "<emphasis
+ role="bold">files</emphasis>". This is commonly used for patches
+ and files that apply to all version of the package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>${FILE_DIRNAME}/</term>
+
+ <listitem>
+ <para>This is just the base directory of the recipe. This is very
+ rarely used since it would just clutter the main directory.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Each of the paths is relative to <emphasis
+ role="bold">${FILE_DIRNAME}</emphasis> which is the directory in which
+ the recipe that is being processed is located.</para>
+
+ <para>The full set of variables that control the file locations and
+ patch are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>FILE</term>
+
+ <listitem>
+ <para>The path to the .bb file which is currently being
+ processed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILE_DIRNAME</term>
+
+ <listitem>
+ <para>The path to the directory which contains the FILE which is
+ currently being processed.<screen>FILE_DIRNAME = "${@os.path.dirname(bb.data.getVar('FILE', d))}"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILESPATH</term>
+
+ <listitem>
+ <para>The default set of directories which are available to use
+ for the file:// URI's. Each directory is searched, in the
+ specified order, in an attempt to find the file specified by each
+ file:// URI: <screen>FILESPATH = "${FILE_DIRNAME}/${PF}:${FILE_DIRNAME}/${P}:\
+${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/files:${FILE_DIRNAME}"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILESDIR</term>
+
+ <listitem>
+ <para>The default directory to search for file:// URI's. Only used
+ if the file is not found in FILESPATH. This can be used to easily
+ add one additional directory to the search path without having to
+ modify the default FILESPATH setting. By default this is just the
+ first directory from FILESPATH. <screen>FILESDIR = "${@bb.which(bb.data.getVar('FILESPATH', d, 1), '.')}" </screen></para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Sometimes recipes will modify the <emphasis
+ role="bold">FILESPATH</emphasis> or <emphasis
+ role="bold">FILESDIR</emphasis> variables to change the default search
+ path for patches and files. The most common situation in which this is
+ done is when one recipe includes another one in which the default values
+ will be based on the name of the package doing the including, not the
+ included package. Typically the included package will expect the files
+ to be located in a directories based on it's own name.</para>
+
+ <para>As an example the m4-native recipe includes the m4 recipe. This is
+ fine, except that the m4 recipes expects its files and patches to be
+ located in a directory called <emphasis role="bold">m4</emphasis>
+ directory while the native file name results in them being searched for
+ in <emphasis role="bold">m4-native</emphasis>. So the m4-native recipe
+ sets the <emphasis role="bold">FILESDIR</emphasis> variable to the value
+ that of m4 to add the actual m4 directory (where m4 itself has its files
+ stored) to the list of directories search for:<screen> include m4_${PV}.bb
+ inherit native
+ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/m4"</screen></para>
+ </section>
+ </section>
+
+ <section id="recipes_examples" xreflabel="examples">
+ <title>Basic examples</title>
+
+ <para>By now you should know enough about the bitbake recipes to be able
+ to create a basic recipe. We'll cover a simple single file recipe and then
+ a more advanced example that uses the autotools helper class (to be
+ described later) to build an autoconf based package.</para>
+
+ <section id="recipes_helloworld_example" xreflabel="hello world example">
+ <title>Hello world</title>
+
+ <para>Now it's time for our first recipe. This is going to be one of the
+ simplest possible recipes: all code is included and there's only one
+ file to compile and one readme file. While this isn't all that common
+ it's a useful example because it doesn't depend on any of the helper
+ classes which can sometime hide a lot of what is going on.</para>
+
+ <para>First we'll create the myhelloworld.c file and a readme file.
+ We'll place this in the files subdirectory, which is one of the places
+ that is searched for file:// URI's:<screen>mkdir packages/myhelloworld
+mkdir packages/myhelloworld/files
+cat &gt; packages/myhelloworld/files/myhelloworld.c
+#include &lt;stdio.h&gt;
+
+int main(int argc, char** argv)
+{
+ printf("Hello world!\n");
+ return 0;
+}
+^D
+cat &gt; packages/myhelloworld/files/README.txt
+Readme file for myhelloworld.
+^D</screen></para>
+
+ <para>Now we have a directory for our recipe, packages/myhelloworld, and
+ we've created a files subdirectory in there to store our local files.
+ We've created two local files, the C source code for our helloworld
+ program and a readme file. Now we need to create the bitbake
+ recipe.</para>
+
+ <para>First we need the header section, which will contain a description
+ of the package and the release number. We'll leave the other header
+ variables out for now:<screen>DESCRIPTION = "My hello world program"
+PR = "r0"</screen></para>
+
+ <para>Next we need to tell it which files we want to be included in the
+ recipe, which we do via file:// URI's and the SRC_URI variable:<screen>SRC_URI = "file://myhelloworld.c \
+ file://README.txt"</screen></para>
+
+ <para>Note the use of the \ to continue a file and the file of file://
+ local URI's, rather than other types such as http://.</para>
+
+ <para>Now we need provide a compile task which tells bitbake how to
+ compile this program. We do this by defining a do_compile function in
+ the recipe and providing the appropriate commands:</para>
+
+ <para><screen>do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld
+}</screen></para>
+
+ <para>Note the:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>use of the pre-defined compiler variables, <emphasis
+ role="bold">${CC}</emphasis>, <emphasis
+ role="bold">${CFLAGS}</emphasis> and <emphasis
+ role="bold">${LDFLAGS}</emphasis>. These are setup automatically to
+ contain the settings required to cross-compile the program for the
+ target.</para>
+ </listitem>
+
+ <listitem>
+ <para>use of <emphasis role="bold">${WORKDIR}</emphasis> to find the
+ source file. As mentioned previously all files are copied into the
+ working directory and can be referenced via the <emphasis
+ role="bold">${WORKDIR}</emphasis> variable.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>And finally we want to install the program and readme file into
+ the destination directory so that it'll be packaged up correctly. This
+ is done via the install task, so we need to define a do_install function
+ in the recipe to describe how to install the package:<screen>do_install() {
+ install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld
+ install -m 0644 ${S}/myhelloworld ${D}${bindir}
+ install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld
+}</screen></para>
+
+ <para>Note the:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>use the <emphasis role="bold">install</emphasis> command to
+ create directories and install the files, not cp.</para>
+ </listitem>
+
+ <listitem>
+ <para>way directories are created before we attempt to install any
+ files into them. The install command takes care of any
+ subdirectories that are missing, so we only need to create the full
+ path to the directory - no need to create the subdirectories.</para>
+ </listitem>
+
+ <listitem>
+ <para>way we install everything into the destination directory via
+ the use of the <emphasis role="bold">${D}
+ </emphasis>variable.</para>
+ </listitem>
+
+ <listitem>
+ <para>way we use variables to refer to the target directories, such
+ as <emphasis role="bold">${bindir}</emphasis> and <emphasis
+ role="bold">${docdir}</emphasis>.</para>
+ </listitem>
+
+ <listitem>
+ <para>use of <emphasis role="bold">${WORKDIR}</emphasis> to get
+ access to the <emphasis role="bold">README.txt</emphasis> file,
+ which was provided via file:// URI.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>We'll consider this release 0 and version 0.1 of a program called
+ helloworld. So we'll name the recipe myhelloworld_0.1.bb:<screen>cat &gt; packages/myhelloworld/myhelloworld_0.1.bb
+DESCRIPTION = "Hello world program"
+PR = "r0"
+
+SRC_URI = "file://myhelloworld.c \
+ file://README.txt"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld
+}
+
+do_install() {
+ install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld
+ install -m 0644 ${S}/myhelloworld ${D}${bindir}
+ install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld
+}
+^D</screen>Now we are ready to build our package, hopefully it'll all work
+ since it's such a simple example:<screen>~/oe%&gt; bitbake -b packages/myhelloworld/myhelloworld_0.1.bb
+NOTE: package myhelloworld-0.1: started
+NOTE: package myhelloworld-0.1-r0: task do_fetch: started
+NOTE: package myhelloworld-0.1-r0: task do_fetch: completed
+NOTE: package myhelloworld-0.1-r0: task do_unpack: started
+NOTE: Unpacking /home/lenehan/devel/oe/local-packages/myhelloworld/files/helloworld.c to /home/lenehan/devel/oe/build/titan-glibc-25/tmp/work/myhelloworld-0.1-r0/
+NOTE: Unpacking /home/lenehan/devel/oe/local-packages/myhelloworld/files/README.txt to /home/lenehan/devel/oe/build/titan-glibc-25/tmp/work/myhelloworld-0.1-r0/
+NOTE: package myhelloworld-0.1-r0: task do_unpack: completed
+NOTE: package myhelloworld-0.1-r0: task do_patch: started
+NOTE: package myhelloworld-0.1-r0: task do_patch: completed
+NOTE: package myhelloworld-0.1-r0: task do_configure: started
+NOTE: package myhelloworld-0.1-r0: task do_configure: completed
+NOTE: package myhelloworld-0.1-r0: task do_compile: started
+NOTE: package myhelloworld-0.1-r0: task do_compile: completed
+NOTE: package myhelloworld-0.1-r0: task do_install: started
+NOTE: package myhelloworld-0.1-r0: task do_install: completed
+NOTE: package myhelloworld-0.1-r0: task do_package: started
+NOTE: package myhelloworld-0.1-r0: task do_package: completed
+NOTE: package myhelloworld-0.1-r0: task do_package_write: started
+NOTE: Not creating empty archive for myhelloworld-dbg-0.1-r0
+Packaged contents of myhelloworld into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/myhelloworld_0.1-r0_sh4.ipk
+Packaged contents of myhelloworld-doc into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/myhelloworld-doc_0.1-r0_sh4.ipk
+NOTE: Not creating empty archive for myhelloworld-dev-0.1-r0
+NOTE: Not creating empty archive for myhelloworld-locale-0.1-r0
+NOTE: package myhelloworld-0.1-r0: task do_package_write: completed
+NOTE: package myhelloworld-0.1-r0: task do_populate_staging: started
+NOTE: package myhelloworld-0.1-r0: task do_populate_staging: completed
+NOTE: package myhelloworld-0.1-r0: task do_build: started
+NOTE: package myhelloworld-0.1-r0: task do_build: completed
+NOTE: package myhelloworld-0.1: completed
+Build statistics:
+ Attempted builds: 1
+~/oe%&gt;</screen></para>
+
+ <para>The package was successfully built, the output consists of two
+ .ipkg files, which are ready to be installed on the target. One contains
+ the binary and the other contains the readme file:<screen>~/oe%&gt; ls -l tmp/deploy/ipk/*/myhelloworld*
+-rw-r--r-- 1 lenehan lenehan 3040 Jan 12 14:46 tmp/deploy/ipk/sh4/myhelloworld_0.1-r0_sh4.ipk
+-rw-r--r-- 1 lenehan lenehan 768 Jan 12 14:46 tmp/deploy/ipk/sh4/myhelloworld-doc_0.1-r0_sh4.ipk
+~/oe%&gt;</screen></para>
+
+ <para>It's worthwhile looking at the working directory to see where
+ various files ended up:<screen>~/oe%&gt; find tmp/work/myhelloworld-0.1-r0
+tmp/work/myhelloworld-0.1-r0
+tmp/work/myhelloworld-0.1-r0/myhelloworld-0.1
+tmp/work/myhelloworld-0.1-r0/myhelloworld-0.1/patches
+tmp/work/myhelloworld-0.1-r0/myhelloworld-0.1/myhelloworld
+tmp/work/myhelloworld-0.1-r0/temp
+tmp/work/myhelloworld-0.1-r0/temp/run.do_configure.21840
+tmp/work/myhelloworld-0.1-r0/temp/log.do_stage.21840
+tmp/work/myhelloworld-0.1-r0/temp/log.do_install.21840
+tmp/work/myhelloworld-0.1-r0/temp/log.do_compile.21840
+tmp/work/myhelloworld-0.1-r0/temp/run.do_stage.21840
+tmp/work/myhelloworld-0.1-r0/temp/log.do_configure.21840
+tmp/work/myhelloworld-0.1-r0/temp/run.do_install.21840
+tmp/work/myhelloworld-0.1-r0/temp/run.do_compile.21840
+tmp/work/myhelloworld-0.1-r0/install
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-locale
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-dbg
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-dev
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-doc
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-doc/usr
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-doc/usr/share
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-doc/usr/share/doc
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-doc/usr/share/doc/myhelloworld
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld-doc/usr/share/doc/myhelloworld/README.txt
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld/usr
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld/usr/bin
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld/usr/bin/myhelloworld
+tmp/work/myhelloworld-0.1-r0/image
+tmp/work/myhelloworld-0.1-r0/image/usr
+tmp/work/myhelloworld-0.1-r0/image/usr/bin
+tmp/work/myhelloworld-0.1-r0/image/usr/share
+tmp/work/myhelloworld-0.1-r0/image/usr/share/doc
+tmp/work/myhelloworld-0.1-r0/image/usr/share/doc/myhelloworld
+tmp/work/myhelloworld-0.1-r0/myhelloworld.c
+tmp/work/myhelloworld-0.1-r0/README.txt
+~/oe%&gt;</screen>Things to note here are:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The two source files are in <emphasis
+ role="bold">tmp/work/myhelloworld-0.1-r0</emphasis>, which is the
+ working directory as specified via the <emphasis
+ role="bold">${WORKDIR}</emphasis> variable;</para>
+ </listitem>
+
+ <listitem>
+ <para>There's logs of the various tasks in <emphasis
+ role="bold">tmp/work/myhelloworld-0.1-r0/temp</emphasis> which you
+ can look at for more details on what was done in each task;</para>
+ </listitem>
+
+ <listitem>
+ <para>There's an image directory at <emphasis
+ role="bold">tmp/work/myhelloworld-0.1-r0/image</emphasis> which
+ contains just the directories that were to be packaged up. This is
+ actually the destination directory, as specified via the <emphasis
+ role="bold">${D}</emphasis> variable. The two files that we
+ installed were originally in here, but during packaging they were
+ moved into the install area into a subdirectory specific to the
+ package that was being created (remember we have a main package and
+ a -doc package being created.</para>
+ </listitem>
+
+ <listitem>
+ <para>The program was actually compiled in the <emphasis
+ role="bold">tmp/work/myhelloworld-0.1-r0/myhelloworld-0.1</emphasis>
+ directory, this is the source directory as specified via the
+ <emphasis role="bold">${S}</emphasis> variable.</para>
+ </listitem>
+
+ <listitem>
+ <para>There's an install directory at <emphasis
+ role="bold">tmp/work/myhelloworld-0.1-r0/install</emphasis> which
+ contains the packages that were being generated and the files that
+ go in the package. So we can see that the myhelloworld-doc package
+ contains the single file <emphasis
+ role="bold">/usr/share/doc/myhelloworld/README.txt</emphasis>, the
+ myhelloworld package contains the single file <emphasis
+ role="bold">/usr/bin/myhelloworld</emphasis> and the -dev, -dbg and
+ -local packages are all empty.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>At this stage it's good to verify that we really did produce a
+ binary for the target and not for our host system. We can check that
+ with the file command:<screen>~/oe%&gt; file tmp/work/myhelloworld-0.1-r0/install/myhelloworld/usr/bin/myhelloworld
+tmp/work/myhelloworld-0.1-r0/install/myhelloworld/usr/bin/myhelloworld: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped
+~/oe%&gt; file /bin/ls
+/bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), for GNU/Linux 2.4.0, stripped
+~/oe%&gt;</screen>This shows us that the helloworld program is for an SH
+ processor (obviously this will change depending on what your target
+ system is), while checking the <emphasis role="bold">/bin/ls</emphasis>
+ program on host shows us that the host system is an AMD X86-64 system.
+ That's exactly what we wanted.</para>
+ </section>
+
+ <section id="recipes_autoconf_example" xreflabel="autoconf example">
+ <title>An autotools package</title>
+
+ <para>Now for an example of a package that uses autotools. These are
+ programs that you need to run a configure script for, passing various
+ parameters, and then make. To make these work when cross-compiling you
+ need to provides a lot of variables to the configure script. But all the
+ hard work as already been done for you. There's an <xref
+ linkend="autotools_class" /> which takes care of most of the complexity
+ of building an autotools based packages.</para>
+
+ <para>Let's take a look at the tuxnes recipe which is an example of a
+ very simple autotools based recipe:<screen>%~oe&gt; cat packages/tuxnes/tuxnes_0.75.bb
+DESCRIPTION = "Tuxnes Nintendo (8bit) Emulator"
+HOMEPAGE = "http://prdownloads.sourceforge.net/tuxnes/tuxnes-0.75.tar.gz"
+LICENSE = "GPLv2"
+SECTION = "x/games"
+PRIORITY = "optional"
+PR = "r1"
+
+SRC_URI = "http://heanet.dl.sourceforge.net/sourceforge/tuxnes/tuxnes-0.75.tar.gz"
+
+inherit autotools</screen></para>
+
+ <para>This is a really simple recipe. There's the standard header that
+ describes the package. Then the SRC_URI, which in this case is a http
+ URL that causes the source code to be downloaded from the specified URI.
+ And finally there's an "<emphasis role="bold">inherit
+ autotools</emphasis>" command which loads the autotools class. The
+ autotools class will take care of generating the require configure,
+ compile and install tasks. So in this case there's nothing else to do -
+ that's all there is to it.</para>
+
+ <para>It would be nice if it was always this simple. Unfortunately
+ there's usually a lot more involved for various reasons including the
+ need to:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Pass parameters to configure to enable and disable
+ features;</para>
+ </listitem>
+
+ <listitem>
+ <para>Pass parameters to configure to specify where to find
+ libraries and headers;</para>
+ </listitem>
+
+ <listitem>
+ <para>Make modifications to prevent searching for headers and
+ libraries in the normal locations (since they below to the host
+ system, not the target);</para>
+ </listitem>
+
+ <listitem>
+ <para>Make modifications to prevent the configure script from tying
+ to compile and run programs - any programs it compiles will be for
+ the target and not the host and so cannot be run.</para>
+ </listitem>
+
+ <listitem>
+ <para>Manually implement staging scripts;</para>
+ </listitem>
+
+ <listitem>
+ <para>Deal with lots of other more complex issues;</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Some of these items are covered in more detail in the advanced
+ autoconf section.</para>
+ </section>
+ </section>
+
+ <section id="recipes_depenencies" xreflabel="dependencies">
+ <title>Dependencies: What's needed to build and/or run the
+ package?</title>
+
+ <para>Dependencies should be familiar to anyone who has used an .rpm and
+ .deb based desktop distribution. A dependency is something that a package
+ requires either to run the package (a run-time dependency) or to build the
+ package (a build-time or compile-time, dependency).</para>
+
+ <para>There are two variables provided to allow the specifications of
+ dependencies:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>DEPENDS</term>
+
+ <listitem>
+ <para>Specifies build-time dependencies, via a list of bitbake
+ recipes to build prior to build the recipe. These are programs
+ (flex-native) or libraries (libpcre) that are required in order to
+ build the package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>RDEPENDS</term>
+
+ <listitem>
+ <para>Specifies run-time dependencies, via a list of packages to
+ install prior to installing the current package. These are programs
+ or libraries that are required in order to run the program. Note
+ that libraries which are dynamically linked to an application will
+ be automatically detected and added to <emphasis
+ role="bold">RDEPENDS</emphasis> and therefore do not need to be
+ explicitly declared. If a library was dynamically loaded then it
+ would need to be explicitly listed.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>If we take openssh for an example, it requires zlib and openssl in
+ order to both built and run. In the recipe we have:<screen>DEPENDS = "zlib openssl"</screen>This
+ tells bitbake that it will need to build and stage zlib and openssl prior
+ to trying to build openssh, since openssh requires both of them. Note that
+ there is no <emphasis role="bold">RDEPENDS</emphasis> even though openssh
+ requires both of them to run. The run time dependencies on libz1 (the name
+ of the package containing the zlib library) and libssl0 (the name of the
+ package containing the ssl library) are automatically determined and added
+ via the auto shared libs dependency code.</para>
+ </section>
+
+ <section id="recipes_methods" xreflabel="methods">
+ <title>Methods: Inbuilt methods to make your life easier</title>
+
+ <para>There are several helper functions defined by the base class, which
+ is included by default for all recipes. Many of these are used a lot in
+ both recipes and other classes.</para>
+
+ <para>The most commonly seen, and most useful functions, include:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>oe_runmake</term>
+
+ <listitem>
+ <para>This function is used to run make. However unlike calling make
+ yourself this will pass the EXTRA_OEMAKE settings to make, will
+ display a note about the make command and will check for any errors
+ generated via the call to make.</para>
+
+ <para>You should never have any reason to call make directly and
+ should also use oe_runmake when you need to run make.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>oe_runconf (autotools only)</term>
+
+ <listitem>
+ <para>This function is used to run the configure script of a package
+ that is using the autotools class. This takes care of passing all of
+ the correct parameters for cross-compiling and for installing into
+ the appropriate target directory.</para>
+
+ <para>It also passes the value of the <emphasis
+ role="bold">EXTRA_OECONF</emphasis> variable to the configure
+ script. For many situations setting <emphasis
+ role="bold">EXTRA_OECONF</emphasis> is sufficient and you'll have no
+ need to define your own configure task in which you call oe_runconf
+ manually.</para>
+
+ <para>If you need to write your own <emphasis>configure</emphasis>
+ task for an autotools package you can use oe_runconf to manually
+ call the configure process when it is required. The following
+ example from net-snmp shows oe_runconf being called manually so that
+ the parameter for specifying the endianess can be computed and
+ passed in to the configure script:<screen>do_configure() {
+ # Additional flag based on target endiness (see siteinfo.bbclass)
+ ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
+ oenote Determined endianess as: $ENDIANESS
+ oe_runconf $ENDIANESS
+}</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>oe_libinstall</term>
+
+ <listitem>
+ <para>This function is used to install <emphasis
+ role="bold">.so</emphasis>, <emphasis role="bold">.a</emphasis> and
+ associated libtool <emphasis role="bold">.la</emphasis> libraries.
+ It will determine the appropriate libraries to install and take care
+ of any modifications that may be require for <emphasis
+ role="bold">.la</emphasis> files.</para>
+
+ <para>This function supports the following options:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>-C &lt;dir&gt;</term>
+
+ <listitem>
+ <para>Change into the specified directory before attempting to
+ install a library. Used when the libraries are in
+ subdirectories of the main package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-s</term>
+
+ <listitem>
+ <para>Require the presence of a <emphasis
+ role="bold">.so</emphasis> library as one of the libraries
+ that is installed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-a</term>
+
+ <listitem>
+ <para>Require the presence of a <emphasis
+ role="bold">.a</emphasis> library as one of the libraries that
+ is installed.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The following example from gdbm shows the installation of
+ <emphasis role="bold">.so</emphasis>, <emphasis
+ role="bold">.a</emphasis> (and associated <emphasis
+ role="bold">.la</emphasis>) libraries into the staging library
+ area:<screen>do_stage () {
+ oe_libinstall -so -a libgdbm ${STAGING_LIBDIR}
+ install -m 0644 ${S}/gdbm.h ${STAGING_INCDIR}/
+}</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>oenote</term>
+
+ <listitem>
+ <para>Used to display an informational messages to the user.</para>
+
+ <para>The following example from net-snmp uses oenote to tell the
+ user which endianess it determined was appropriate for the target
+ device:<screen>do_configure() {
+ # Additional flag based on target endiness (see siteinfo.bbclass)
+ ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
+ oenote Determined endianess as: $ENDIANESS
+ oe_runconf $ENDIANESS
+}</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>oewarn</term>
+
+ <listitem>
+ <para>Used to display a warning message to the user, warning of
+ something that may be problematic or unexpected.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>oedebug</term>
+
+ <listitem>
+ <para>Used to display debugging related information. These messages
+ will only be visible when bitbake is run with the <emphasis
+ role="bold">-D</emphasis> flag to enable debug output.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>oefatal</term>
+
+ <listitem>
+ <para>Used to display a fatal error message to the user, and then
+ abort the bitbake run.</para>
+
+ <para>The following example from linux-libc-headers shows the use of
+ oefatal to tell the user when it cannot find the kernel source code
+ for the specified target architecture:<screen>do_configure () {
+ 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=ppc ;;
+ s390*) ARCH=s390 ;;
+ sh*) ARCH=sh ;;
+ sparc64*) ARCH=sparc64 ;;
+ sparc*) ARCH=sparc ;;
+ x86_64*) ARCH=x86_64 ;;
+ esac
+ if test ! -e include/asm-$ARCH; then
+ oefatal unable to create asm symlink in kernel headers
+ fi
+...</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>base_conditional (python)</term>
+
+ <listitem>
+ <para>The base conditional python function is used to set a variable
+ to one of two values based on the definition of a third variable.
+ The general usage is:<screen>${@base_conditional('&lt;variable-name&gt;', '&lt;value&gt;', '&lt;true-result&gt;', &lt;false-result&gt;', d)}"</screen>where:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>variable-name</term>
+
+ <listitem>
+ <para>This is the name of a variable to check.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>value</term>
+
+ <listitem>
+ <para>This is the value to compare the variable
+ against.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>true-result</term>
+
+ <listitem>
+ <para>If the variable equals the value then this is what is
+ returned by the function.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>false-result</term>
+
+ <listitem>
+ <para>If the variable does not equal the value then this is
+ what is returned by the function.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <note>
+ <para>The ${@...} syntax is used to call python functions from
+ within a recipe or class. This is described in more detail in the
+ <xref linkend="recipes_advanced_python" /> section.</para>
+ </note>
+
+ <para>The following example from the openssl recipe shows the
+ addition of either <emphasis role="bold">-DL_ENDING</emphasis> or
+ <emphasis role="bold">-DB_ENDIAN</emphasis> depending on the value
+ of <emphasis role="bold">SITEINFO_ENDIANESS</emphasis> which is set
+ to le for little endian targets and to be for big endian
+ targets:<screen>do_compile () {
+ ...
+ # Additional flag based on target endiness (see siteinfo.bbclass)
+ CFLAG="${CFLAG} ${@base_conditional('SITEINFO_ENDIANESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)}"
+ ...</screen></para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section id="recipes_packages" xreflabel="packages">
+ <title>Packaging: Defining packages and their contents</title>
+
+ <para>A bitbake recipe is a set of instructions from creating one, or
+ more, packages for installation on the target device. Typically these are
+ .ipkg or .deb packages (although bitbake itself isn't associated with any
+ particular packaging format).</para>
+
+ <para>By default several packages are produced automatically without any
+ special action required on the part of the recipe author. The following
+ example of the packaging output from the helloworld example above shows
+ this packaging in action:<screen>[NOTE: package helloworld-0.1-r0: task do_package_write: started
+NOTE: Not creating empty archive for helloworld-dbg-0.1-r0
+Packaged contents of helloworld into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/helloworld_0.1-r0_sh4.ipk
+Packaged contents of helloworld-doc into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/helloworld-doc_0.1-r0_sh4.ipk
+NOTE: Not creating empty archive for helloworld-dev-0.1-r0
+NOTE: Not creating empty archive for helloworld-locale-0.1-r0
+NOTE: package helloworld-0.1-r0: task do_package_write: completed</screen>We
+ can see from above that the packaging did the following:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Created a main package, <emphasis
+ role="bold">helloworld_0.1-r0_sh4.ipk</emphasis>. This package
+ contains the helloworld binary <emphasis
+ role="bold">/usr/bin/helloworld</emphasis>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Created a documentation package, <emphasis
+ role="bold">helloworld-doc_0.1-r0_sh4.ipk</emphasis>. This package
+ contains the readme file <emphasis
+ role="bold">/usr/share/doc/helloworld/README.txt</emphasis>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Considered creating a debug package, <emphasis
+ role="bold">helloworld-dbg-0.1-r0_sh4.ipk</emphasis>, a development
+ package <emphasis role="bold">helloworld-dev-0.1-r0_sh4.ipk</emphasis>
+ and a locale package <emphasis
+ role="bold">helloworld-locale-0.1-r0_sh4.ipk</emphasis>. It didn't
+ create the package due to the fact that it couldn't find any files
+ that would actually go in the package.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>There are several things happening here which are important to
+ understand:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>There is a default set of packages that are considered for
+ creation. This set of packages is controlled via the <emphasis
+ role="bold">PACKAGES</emphasis> variable.</para>
+ </listitem>
+
+ <listitem>
+ <para>For each package there is a default set of files and/or
+ directories that are considered to belong to those packages. The
+ documentation packages for example include anything found <emphasis
+ role="bold">/usr/share/doc</emphasis>. The set of files and
+ directories is controlled via the <emphasis
+ role="bold">FILES_&lt;package-name&gt;</emphasis> variables.</para>
+ </listitem>
+
+ <listitem>
+ <para>By default packages that contain no files are not created and no
+ error is generated. The decision to create empty packages or not is
+ controlled via the <emphasis role="bold">ALLOW_EMPTY</emphasis>
+ variable.</para>
+ </listitem>
+ </orderedlist>
+
+ <section>
+ <title>Philosophy</title>
+
+ <para>Separate packaging, where possible, is of high importance in
+ OpenEmbedded. Many of the target devices have limited storage space and
+ RAM and giving distributions and users the option of not installing a
+ part of the package they don't need allows them to reduce the amount of
+ storage space required.</para>
+
+ <para>As an example almost no distributions will include documentation
+ or development libraries since they are not required for the day to day
+ operation of the device. In particular if your package provides multiple
+ binaries, and it would be common to only use one or the other, then you
+ should consider separating them into separate packages.</para>
+
+ <para>By default several groups of files are automatically separate out,
+ including:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>dev</term>
+
+ <listitem>
+ <para>Any files required for development. This includes header
+ files, static libraries, the shared library symlinks required only
+ for linking etc. These would only ever need to be installed by
+ someone attempt to compile applications on the target device.
+ While this does happen it is very uncommon and so these files are
+ automatically moved into a separate package</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>doc</term>
+
+ <listitem>
+ <para>Any documentation related files, including man pages. These
+ are files which are of informational purposes only. For many
+ embedded devices there is no way for the user to see any of the
+ documentation anyway, and documentation can consume a lot of
+ space. By separating these out they don't take any space by
+ default but distributions and/or users may choose to install them
+ if they need some documentation on a specific package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>locale</term>
+
+ <listitem>
+ <para>Locale information provides translation information for
+ packages. Many users do not require these translations, and many
+ devices will only want to provide them for user visible
+ components, such as UI related items, and not for system binaries.
+ By separating these out it is left up to the distribution or users
+ to decide if they are required or not.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section>
+ <title>Default packages and files</title>
+
+ <para>The defaults package settings are defined in <emphasis
+ role="bold">conf/bitbake.conf</emphasis> and are suitable for a lot of
+ recipes without any changes. The following list shows the default values
+ for the packaging related variables:</para>
+
+ <para><variablelist>
+ <varlistentry>
+ <term>PACKAGES</term>
+
+ <listitem>
+ <para>This variable lists the names of each of the packages that
+ are to be generated.<screen>PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-dev ${PN}-locale"</screen>Note
+ that the order of packages is important: the packages are
+ processed in the listed order. So if two packages specify the
+ same file then the first package listed in packages will get the
+ file. This is important when packages use wildcards to specify
+ their contents.</para>
+
+ <para>For example if the main package, <emphasis
+ role="bold">${PN}</emphasis>, contains <emphasis
+ role="bold">/usr/bin/*</emphasis> (i.e. all files in <emphasis
+ role="bold">/usr/bin</emphasis>), but you want <emphasis
+ role="bold">/usr/bin/tprogram</emphasis> in a separate package,
+ <emphasis role="bold">${PN}-tpackage</emphasis>, you would need
+ to either ensure that <emphasis
+ role="bold">${PN}-tpackage</emphasis> is listed prior to
+ <emphasis role="bold">${PN}</emphasis> in <emphasis
+ role="bold">PACKAGES</emphasis> or that <emphasis
+ role="bold">FILES_${PN}</emphasis> was modified to not contain
+ the wildcard that matches <emphasis
+ role="bold">/usr/bin/tprogram</emphasis>.</para>
+
+ <para>Note that the -dbg package contains the debugging
+ information that has been extracted from binaries and libraries
+ prior to them being stripped. This package should always be the
+ first package in the package list to ensure that the debugging
+ information is correctly extracted and moved to the package
+ prior to any other packaging decisions being made.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILES_${PN}</term>
+
+ <listitem>
+ <para>The base package, this includes everything needed to
+ actually run the application on the target system.<screen>FILES_${PN} = "\
+ ${bindir}/* \
+ ${sbindir}/* \
+ ${libexecdir}/* \
+ ${libdir}/lib*.so.* \
+ ${sysconfdir} \
+ ${sharedstatedir} \
+ ${localstatedir} \
+ /bin/* \
+ /sbin/* \
+ /lib/*.so* \
+ ${datadir}/${PN} \
+ ${libdir}/${PN}/* \
+ ${datadir}/pixmaps \
+ ${datadir}/applications \
+ ${datadir}/idl \
+ ${datadir}/omf \
+ ${datadir}/sounds \
+ ${libdir}/bonobo/servers"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILES_${PN}-dbg</term>
+
+ <listitem>
+ <para>The debugging information extracted from non-stripped
+ versions of libraries and executable's. OpenEmbedded
+ automatically extracts the debugging information into files in
+ .debug directories and then strips the original files.<screen>FILES_${PN}-dbg = "\
+ ${bindir}/.debug \
+ ${sbindir}/.debug \
+ ${libexecdir}/.debug \
+ ${libdir}/.debug \
+ /bin/.debug \
+ /sbin/.debug \
+ /lib/.debug \
+ ${libdir}/${PN}/.debug"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILES_${PN}-doc</term>
+
+ <listitem>
+ <para>Documentation related files. All documentation is
+ separated into it's own package so that it does not need to be
+ installed unless explicitly required.<screen>FILES_${PN}-doc = "\
+ ${docdir} \
+ ${mandir} \
+ ${infodir} \
+ ${datadir}/gtk-doc \
+ ${datadir}/gnome/help"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILES_${PN}-dev</term>
+
+ <listitem>
+ <para>Development related files. Any headers, libraries and
+ support files needed for development work on the target.<screen>FILES_${PN}-dev = "\
+ ${includedir} \
+ ${libdir}/lib*.so \
+ ${libdir}/*.la \
+ ${libdir}/*.a \
+ ${libdir}/*.o \
+ ${libdir}/pkgconfig \
+ /lib/*.a \
+ /lib/*.o \
+ ${datadir}/aclocal"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FILES_${PN}-locale</term>
+
+ <listitem>
+ <para>Locale related files.<screen>FILES_${PN}-locale = "${datadir}/locale"</screen></para>
+ </listitem>
+ </varlistentry>
+ </variablelist></para>
+ </section>
+
+ <section>
+ <title>Wildcards</title>
+
+ <para>Wildcards used in the <emphasis role="bold">FILES</emphasis>
+ variables are processed via the python function <emphasis
+ role="bold">fnmatch</emphasis>. The following items are of note about
+ this function:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">/&lt;dir&gt;/*</emphasis>: This will
+ match all files and directories in the <emphasis
+ role="bold">dir</emphasis> - it will not match other
+ directories.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">/&lt;dir&gt;/a*</emphasis>: This will
+ only match files, and not directories.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">/dir</emphasis>: will include the
+ directory <emphasis role="bold">dir</emphasis> in the package, which
+ in turn will include all files in the directory and all
+ subdirectories.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Note that the order of packages effects the files that will be
+ matched via wildcards. Consider the case where we have three binaries in
+ the <command>/usr/bin</command> directory and we want the test program
+ in a separate package:<screen>/usr/bin/programa /usr/bin/programb /usr/bin/test</screen>So
+ we define a new package and instruct bitbake to include /usr/bin/test in
+ it.</para>
+
+ <screen>FILES-${PN}-test = "${bindir}/test"
+PACKAGES += "FILES-${PN}-test"</screen>
+
+ <para>When the package is regenerated no <emphasis
+ role="bold">${PN}-test</emphasis> package will be created. The reason
+ for this is that the <emphasis role="bold">PACKAGES</emphasis> line now
+ looks like this:<screen>{PN}-dbg ${PN} ${PN}-doc ${PN}-dev ${PN}-locale ${PN}-test</screen>Note
+ how <emphasis role="bold">${PN}</emphasis> is listed prior to <emphasis
+ role="bold">${PN}-test</emphasis>, and if we look at the definition of
+ <emphasis role="bold">FILES-${PN}</emphasis> it contains the <emphasis
+ role="bold">${bindir}/*</emphasis> wildcard. Since <emphasis
+ role="bold">${PN}</emphasis> is first it'll match that wildcard are be
+ moved into the <emphasis role="bold">${PN}</emphasis> package prior to
+ processing of the <emphasis role="bold">${PN}-test</emphasis>
+ package.</para>
+
+ <para>To achieve what we are trying to accomplish we have two
+ options:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Modify the definition of <emphasis
+ role="bold">${PN}</emphasis> so that the wildcard does not match the
+ test program.</para>
+
+ <para>We could do this for example:<screen>FILES-${PN} = "${bindir}/p*"</screen>So
+ now this will only match things in the bindir that start with p, and
+ therefore not match our test program. Note that <emphasis
+ role="bold">FILES-${PN}</emphasis> contains a lot more entries and
+ we'd need to add any of the other that refer to files that are to be
+ included in the package. In this case we have no other files, so
+ it's safe to do this simple declaration.</para>
+ </listitem>
+
+ <listitem>
+ <para>Modify the order of packages so that the <emphasis
+ role="bold">${PN}-test</emphasis> package is listed first.</para>
+
+ <para>The most obvious way to do this would be to prepend our new
+ package name to the packages list instead of appending it:<screen>PACKAGES =+ "FILES-${PN}-test"</screen>In
+ some cases this would work fine, however there is a problem with
+ this for packages that include binaries. The package will now be
+ listed before the -dbg package and often this will result in the
+ .debug directories being included in the package. In this case we
+ are explicitly listing only a single file (and not using wildcards)
+ and therefore it would be ok.</para>
+
+ <para>In general it's more common to have to redefine the entire
+ package list to include your new package plus any of the default
+ packages that you require:<screen>PACKAGES = "${PN}-dbg ${PN}-test ${PN} ${PN}-doc ${PN}-dev ${PN}-locale"</screen></para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section>
+ <title>Checking the packages</title>
+
+ <para>During recipe development it's useful to be able to check on
+ exactly what files went into each package, which files were not packaged
+ and which packages contain no files.</para>
+
+ <para>One of easiest method is to run find on the install directory. In
+ the install directory there is one subdirectory created per package, and
+ the files are moved into the install directory as they are matched to a
+ specific package. The following shows the packages and files for the
+ helloworld example:<screen>~/oe%&gt; find tmp/work/helloworld-0.1-r0/install
+tmp/work/helloworld-0.1-r0/install
+tmp/work/helloworld-0.1-r0/install/helloworld-locale
+tmp/work/helloworld-0.1-r0/install/helloworld-dbg
+tmp/work/helloworld-0.1-r0/install/helloworld-dev
+tmp/work/helloworld-0.1-r0/install/helloworld-doc
+tmp/work/helloworld-0.1-r0/install/helloworld-doc/usr
+tmp/work/helloworld-0.1-r0/install/helloworld-doc/usr/share
+tmp/work/helloworld-0.1-r0/install/helloworld-doc/usr/share/doc
+tmp/work/helloworld-0.1-r0/install/helloworld-doc/usr/share/doc/helloworld
+tmp/work/helloworld-0.1-r0/install/helloworld-doc/usr/share/doc/helloworld/README.txt
+tmp/work/helloworld-0.1-r0/install/helloworld
+tmp/work/helloworld-0.1-r0/install/helloworld/usr
+tmp/work/helloworld-0.1-r0/install/helloworld/usr/bin
+tmp/work/helloworld-0.1-r0/install/helloworld/usr/bin/helloworld
+~/oe%&gt;</screen>The above shows that the -local, -dbg and -dev packages are
+ all empty, and the -doc and base package contain a single file each.
+ Uses "<emphasis role="bold">-type f</emphasis>" option to find to show
+ just files will make this clearer as well.</para>
+
+ <para>In addition to the install directory the image directory (which
+ corresponds to the destination directory, <emphasis
+ role="bold">D</emphasis>) will contain any files that were not
+ packaged:<screen>~/oe%&gt; find tmp/work/helloworld-0.1-r0/image
+tmp/work/helloworld-0.1-r0/image
+tmp/work/helloworld-0.1-r0/image/usr
+tmp/work/helloworld-0.1-r0/image/usr/bin
+tmp/work/helloworld-0.1-r0/image/usr/share
+tmp/work/helloworld-0.1-r0/image/usr/share/doc
+tmp/work/helloworld-0.1-r0/image/usr/share/doc/helloworld
+~/oe%&gt;</screen>In this case all files were packaged and so there are no
+ left over files. Using find with "<emphasis role="bold">-type
+ f</emphasis>" makes this much clearer:<screen>~/oe%&gt; find tmp/work/helloworld-0.1-r0/image -type f
+~/oe%&gt;</screen></para>
+
+ <para>Messages reading missing files are also display by bitbake during
+ the package task:<screen>NOTE: package helloworld-0.1-r0: task do_package: started
+NOTE: the following files were installed but not shipped in any package:
+NOTE: /usualdir/README.txt
+NOTE: package helloworld-0.1-r0: task do_package: completed</screen>Except in
+ very unusual circumstances there should be no unpackaged files left
+ behind by a recipe.</para>
+ </section>
+
+ <section>
+ <title>Excluding files</title>
+
+ <para>There's no actual support for explicitly excluding files from
+ packaging. You could just leave them out of any package, but then you'll
+ get warnings (or errors if requesting full package checking) during
+ packaging which is not desirable. It also doesn't let other people know
+ that you've deliberately avoided packaging the file or files.</para>
+
+ <para>In order to exclude a file totally you should avoid installing it
+ in the first place during the install task.</para>
+
+ <para>In some cases it may be easier to let the package install the file
+ and then explicitly remove the file and the end of the install task. The
+ following example from the samba recipe shows the removal of several
+ files that get installed via the default install task generated by the
+ <xref linkend="autotools_class" />. By using
+ <emphasis>do_install_append</emphasis> these commands and run after the
+ autotools generated install task:</para>
+
+ <screen>do_install_append() {
+ ...
+ rm -f ${D}${bindir}/*.old
+ rm -f ${D}${sbindir}/*.old
+ ...
+}</screen>
+ </section>
+
+ <section>
+ <title>Debian naming</title>
+
+ <para>A special <emphasis>debian library name</emphasis> policy can be
+ applied for packages that contain a single shared library. When enabled
+ packages will be renamed to match the debian policy for such
+ packages.</para>
+
+ <para>Debian naming is enabled by including the debian class via either
+ <command>local.conf</command> or your distributions configuration
+ file:<screen>INHERIT += "debian"</screen></para>
+
+ <para>The policy works by looking at the shared library name and version
+ and will automatically rename the package to
+ <emphasis>&lt;libname&gt;&lt;lib-major-version&gt;</emphasis>. For
+ example if the package name (PN) is <command>foo</command> and the
+ package ships a file named <command>libfoo.so.1.2.3</command> then the
+ package will be renamed to <command>libfoo1</command> to follow the
+ debian policy.</para>
+
+ <para>If we look at the <emphasis>lzo_1.08.bb</emphasis> recipe,
+ currently at release 14, it generates a package containing a single
+ shared library :<screen>~oe/build/titan-glibc-25%&gt; find tmp/work/lzo-1.08-r14/install/
+tmp/work/lzo-1.08-r14/install/lzo
+tmp/work/lzo-1.08-r14/install/lzo/usr
+tmp/work/lzo-1.08-r14/install/lzo/usr/lib
+tmp/work/lzo-1.08-r14/install/lzo/usr/lib/liblzo.so.1
+tmp/work/lzo-1.08-r14/install/lzo/usr/lib/liblzo.so.1.0.0</screen>Without
+ debian naming this package would have been called
+ <command>lzo_1.08-r14_sh4.ipk</command> (and the corresponding dev and
+ dbg packages would have been called
+ <command>lzo-dbg_1.08-r14_sh4.ipk</command> and
+ <command>lzo-dev_1.08-r14_sh4.ipk</command>). However with debian naming
+ enabled the package is renamed based on the name of the shared library,
+ which is <command>liblzo.so.1.0.0</command> in this case. So the name
+ <command>lzo</command> is replaced with
+ <command>liblzo1</command>:<screen>~oe/build/titan-glibc-25%&gt; find tmp/deploy/ipk/ -name '*lzo*'
+tmp/deploy/ipk/sh4/liblzo1_1.08-r14_sh4.ipk
+tmp/deploy/ipk/sh4/liblzo-dev_1.08-r14_sh4.ipk
+tmp/deploy/ipk/sh4/liblzo-dbg_1.08-r14_sh4.ipk</screen></para>
+
+ <para>Some variables are available which effect the operation of the
+ debian renaming class:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>LEAD_SONAME</term>
+
+ <listitem>
+ <para>If the package actually contains multiple shared libraries
+ then one will be selected automatically and a warning will be
+ generated. This variable is a regular expression which is used to
+ select which shared library from those available is to be used for
+ debian renaming.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DEBIAN_NOAUTONAME_&lt;pkgname&gt;</term>
+
+ <listitem>
+ <para>If this variable is set to 1 for a package then debian
+ renaming will not be applied for the package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>AUTO_LIBNAME_PKGS</term>
+
+ <listitem>
+ <para>If set this variable specifies the prefix of packages which
+ will be subject to debian renaming. This can be used to prevent
+ all of the packages being renamed via the renaming policy.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section>
+ <title>Empty packages</title>
+
+ <para>By default empty packages are ignored. Occasionally you may wish
+ to actually created empty packages, typically done when you want a
+ virtual package which will install other packages via dependencies
+ without actually installing anything itself. The <emphasis
+ role="bold">ALLOW_EMPTY</emphasis> variable is used to control the
+ creation of empty packages:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>ALLOW_EMPTY</term>
+
+ <listitem>
+ <para>Controls if empty packages will be created or not. By
+ default this is <emphasis role="bold">"0"</emphasis> and empty
+ packages are not created. Setting this to <emphasis
+ role="bold">"1"</emphasis> will permit the creation of empty
+ packages (packages containing no files).</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+ </section>
+
+ <section id="recipes_tasks" xreflabel="tasks">
+ <title>Tasks: Playing with tasks</title>
+
+ <para>Bitbake steps through a series of tasks when building a recipe.
+ Sometimes you need to explicitly define what a class does, such as
+ providing a <emphasis role="bold">do_install</emphasis> function to
+ implement the <emphasis>install</emphasis> task in a recipe and sometimes
+ they are provided for you by common classes, such as the autotools class
+ providing the default implementations of <emphasis>configure</emphasis>,
+ <emphasis>compile</emphasis> and <emphasis>install</emphasis>
+ tasks.</para>
+
+ <para>There are several methods available to modify the tasks that are
+ being run:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Overriding the default task implementation</term>
+
+ <listitem>
+ <para>By defining your own implementation of task you'll override
+ any default or class provided implementations.</para>
+
+ <para>For example, you can define you own implementation of the
+ compile task to override any default implementation:<screen>do_compile() {
+ oe_runmake DESTDIR=${D}
+}</screen></para>
+
+ <para>If you with to totally prevent the task from running you need
+ to define your own empty implementation. This is typically done via
+ the definition of the task using a single colon:<screen>do_configure() {
+ :
+}</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Appending or prepending to the task</term>
+
+ <listitem>
+ <para>Sometime you want the default implementation, but you require
+ addition functionality. This can done by appending or pre-pending
+ additional functionality onto the task.</para>
+
+ <para>The following example from units shows an example of
+ installing an addition file which for some reason was not installed
+ via the autotools normal <emphasis>install</emphasis> task:<screen>do_install_append() {
+ install -d ${D}${datadir}
+ install -m 0655 units.dat ${D}${datadir}
+}</screen></para>
+
+ <para>The following example from the cherokee recipe show an example
+ of adding functionality prior to the default
+ <emphasis>install</emphasis> task. In this case it compiles a
+ program that is used during installation natively so that it will
+ work on the host. Without this the autotools default
+ <emphasis>install</emphasis> task would fail since it'd try to run
+ the program on the host which was compiled for the target:<screen>do_install_prepend () {
+ # It only needs this app during the install, so compile it natively
+ $BUILD_CC -DHAVE_SYS_STAT_H -o cherokee_replace cherokee_replace.c
+}</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Defining a new task</term>
+
+ <listitem>
+ <para>Another option is define a totally new task, and then register
+ that with bitbake so that it runs in between two of the existing
+ tasks.</para>
+
+ <para>The following example shows a situation in which a cvs tree
+ needs to be copied over the top of an extracted tar.gz archive, and
+ this needs to be done before any local patches are applied. So a new
+ task is defined to perform this action, and then that task is
+ registered to run between the existing <emphasis>unpack</emphasis>
+ and <emphasis>patch</emphasis> tasks:<screen>do_unpack_extra(){
+ cp -pPR ${WORKDIR}/linux/* ${S}
+}
+addtask unpack_extra after do_unpack before do_patch</screen></para>
+
+ <note>
+ <para>The task to add does not have the do_ prepended to it,
+ however the tasks to insert it after and before do have the _do
+ prepended. No errors will be generated if this is wrong, the
+ additional task simple won't be executed.</para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Using overrides</term>
+
+ <listitem>
+ <para>Overrides (described fully elsewhere) allow for various
+ functionality to be performed conditionally based on the target
+ machine, distribution, architecture etc.</para>
+
+ <para>While not commonly used it is possible to use overrides when
+ defining tasks. The following example from udev shows an additional
+ file being installed for the specified machine only by performing an
+ append to the <emphasis>install</emphasis> task for the h2200
+ machine only:<screen>do_install_append_h2200() {
+ install -m 0644 ${WORKDIR}/50-hostap_cs.rules ${D}${sysconfdir}/udev/rules.d/50-hostap_cs.rules
+}</screen></para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section id="recipes_classes" xreflabel="classes">
+ <title>Classes: The separation of common functionality</title>
+
+ <para>Often a certain pattern is followed in more than one recipe, or
+ maybe some complex python based functionality is required to achieve the
+ desired end result. This is achieved through the use of classes, which can
+ be found in the classes subdirectory at the top-level of on OE
+ checkout.</para>
+
+ <para>Being aware of the available classes and understanding their
+ functionality is important because classes:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Save developers time being performing actions that they would
+ otherwise need to perform themselves;</para>
+ </listitem>
+
+ <listitem>
+ <para>Perform a lot of actions in the background making a lot of
+ recipes difficult to understand unless you are aware of classes and
+ how they work;</para>
+ </listitem>
+
+ <listitem>
+ <para>A lot of detail on how things work can be learnt for looking at
+ how classes are implement.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>A class is used via the inherit method. The following is an example
+ for the <emphasis>curl</emphasis> recipe showing that it uses three
+ classes:<screen>inherit autotools pkgconfig binconfig</screen>In this case
+ it is utilising the services of three separate classes:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>autotools</term>
+
+ <listitem>
+ <para>The <xref linkend="autotools_class" /> is used by programs
+ that use the GNU configuration tools and takes care of the
+ configuration and compilation of the software;</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>pkgconfig</term>
+
+ <listitem>
+ <para>The <xref linkend="pkgconfig_class" /> is used to stage the
+ <emphasis>.pc</emphasis> files which are used by the <emphasis
+ role="bold">pkg-config</emphasis> program to provide information
+ about the package to other software that wants to link to this
+ software;</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>binconfig</term>
+
+ <listitem>
+ <para>The <xref linkend="binconfig_class" /> is used to stage the
+ <emphasis>&lt;name&gt;-config</emphasis> files which are used to
+ provide information about the package to other software that wants
+ to link to this software;</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Each class is implemented via the file in the <emphasis
+ role="bold">classes</emphasis> subdirectory named <emphasis
+ role="bold">&lt;classname&gt;.bbclass</emphasis> and these can be examined
+ for further details on a particular class, although sometimes it's not
+ easy to understand everything that's happening. Many of the classes are
+ covered in detail in various sections in this user manual.</para>
+ </section>
+
+ <section id="recipes_staging" xreflabel="staging">
+ <title>Staging: Making includes and libraries available for
+ building</title>
+
+ <para>Staging is the process of making files, such as include files and
+ libraries, available for use by other recipes. This is different to
+ installing because installing is about making things available for
+ packaging and then eventually for use on the target device. Staging on the
+ other hand is about making things available on the host system for use by
+ building later applications.</para>
+
+ <para>Taking bzip2 as an example you can see that it stages a header file
+ and it's library files:<screen>do_stage () {
+ install -m 0644 bzlib.h ${STAGING_INCDIR}/
+ oe_libinstall -a -so libbz2 ${STAGING_LIBDIR}
+}</screen></para>
+
+ <para>The <emphasis>oe_libinstall</emphasis> method used in the bzip2
+ recipe is described in the <xref linkend="recipes_methods" /> section, and
+ it takes care of installing libraries (into the staging area in this
+ case). The staging variables are automatically defined to the correct
+ staging location, in this case the main staging variables are used:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>STAGING_INCDIR</term>
+
+ <listitem>
+ <para>The directory into which staged headers files should be
+ installed. This is the equivalent of the standard <emphasis
+ role="bold">/usr/include</emphasis> directory.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>STAGING_LIBDIR</term>
+
+ <listitem>
+ <para>The directory into which staged library files should be
+ installed. This is the equivalent of the standard <emphasis
+ role="bold">/usr/lib</emphasis> directory.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Additional staging related variables are covered in the <xref
+ linkend="directories_staging" /> section in <xref
+ linkend="chapter_reference" />.</para>
+
+ <para>Looking in the staging area under tmp you can see the result of the
+ bzip2 recipes staging task:<screen>%&gt; find tmp/staging -name '*bzlib*'
+tmp/staging/sh4-linux/include/bzlib.h
+%&gt; find tmp/staging -name '*libbz*'
+tmp/staging/sh4-linux/lib/libbz2.so
+tmp/staging/sh4-linux/lib/libbz2.so.1.0
+tmp/staging/sh4-linux/lib/libbz2.so.1
+tmp/staging/sh4-linux/lib/libbz2.so.1.0.2
+tmp/staging/sh4-linux/lib/libbz2.a</screen></para>
+
+ <para>As well as being used during the stage task the staging related
+ variables are used when building other packages. Looking at the gnupg
+ recipe we see two bzip2 related items:<screen>DEPENDS = "zlib <emphasis
+ role="bold">bzip2</emphasis>"
+...
+EXTRA_OECONF = "--disable-ldap \
+ --with-zlib=${STAGING_LIBDIR}/.. \
+ <emphasis role="bold">--with-bzip2=${STAGING_LIBDIR}/..</emphasis> \
+ --disable-selinux-support"
+</screen></para>
+
+ <para>Bzip2 is referred to in two places in the recipe:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>DEPENDS</term>
+
+ <listitem>
+ <para>Remember that <emphasis role="bold">DEPENDS</emphasis> defines
+ the list of build time dependencies. In this case the staged headers
+ and libraries from bzip2 are required to build gnupg, and therefore
+ we need to make sure the bzip2 recipe has run and staging the
+ headers and libraries. By adding the <emphasis
+ role="bold">DEPENDS</emphasis> on bzip2 this ensures that this
+ happens.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><emphasis role="bold">EXTRA_OECONF</emphasis></term>
+
+ <listitem>
+ <para>This variable is used by the <xref
+ linkend="autotools_class" /> to provide options to the configure
+ script of the package. In the gnupg case it needs to be told where
+ the bzip2 headers and libraries files are, and this is done via the
+ <emphasis>--with-bzip2</emphasis> option. In this case it needs to
+ the directory which include the lib and include subdirectories.
+ Since OE doesn't define a variable for one level above the include
+ and lib directories <emphasis role="bold">..</emphasis> is used to
+ indicate one directory up. Without this gnupg would search the host
+ system headers and libraries instead of those we have provided in
+ the staging area for the target.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Remember that staging is used to make things, such as headers and
+ libraries, available to used by other recipes later on. While header and
+ libraries are the most common item requiring staging other items such as
+ the pkgconfig files need to be staged as well, while for native packages
+ the binaries also need to be staged.</para>
+ </section>
+
+ <section id="recipes_autoconf" xreflabel="about autoconf">
+ <title>Autoconf: All about autotools</title>
+
+ <para>This section is to be completed:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>About building autoconf packages</para>
+ </listitem>
+
+ <listitem>
+ <para>EXTRA_OECONF</para>
+ </listitem>
+
+ <listitem>
+ <para>Problems with /usr/include, /usr/lib</para>
+ </listitem>
+
+ <listitem>
+ <para>Configuring to search in the staging area</para>
+ </listitem>
+
+ <listitem>
+ <para>-L${STAGING_LIBDIR} vs ${TARGET_LDFLAGS}</para>
+ </listitem>
+
+ <listitem>
+ <para>Site files</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section id="recipes_installation_scripts" xreflabel="installation scripts">
+ <title>Installation scripts: Running scripts during package install and/or
+ removal</title>
+
+ <para>Packaging system such as .ipkg and .deb support pre and post
+ installation and pre and post removal scripts which are run during package
+ install and/or package removal on the target system.</para>
+
+ <para>These scripts can be defined in your recipes to enable actions to be
+ performed at the appropriate time. Common uses include starting new
+ daemons on installation, stopping daemons during uninstall, creating new
+ user and/or group entries during install, registering and unregistering
+ alternative implementations of commands and registering the need for
+ volatiles.</para>
+
+ <para>The following scripts are supported:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>preinst</term>
+
+ <listitem>
+ <para>The preinst script is run prior to installing the contents of
+ the package. During preinst the contents of the package are not
+ available to be used as part of the script. The preinst scripts are
+ not commonly used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>postinst</term>
+
+ <listitem>
+ <para>The postinst script is run after the installation of the
+ package has completed. During postinst the contents of the package
+ are available to be used. This is often used for the creation of
+ volatile directories, registration of daemons, starting of daemons
+ and fixing up of SUID binaries.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>prerm</term>
+
+ <listitem>
+ <para>The prerm is run prior to the removal of the contents of a
+ package. During prerm the contents of the package are still
+ available for use by the script. The prerm scripts</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>postrm</term>
+
+ <listitem>
+ <para>The postrm script is run after the completion of the removal
+ of the contents of a package. During postrm the contents of the
+ package no longer exist and therefore are not available for use by
+ the script. Postrm is most commonly used for update alternatives (to
+ tell the alternatives system that this alternative is not available
+ and another should be selected).</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Scripts are registered by defining a function for:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>pkg_&lt;scriptname&gt;_&lt;packagename&gt;</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The following example from ndisc6 shows postinst scripts being
+ registered for three of the packages that ndisc6 creates:<screen># Enable SUID bit for applications that need it
+pkg_postinst_${PN}-rltraceroute6 () {
+ chmod 4555 ${bindir}/rltraceroute6
+}
+pkg_postinst_${PN}-ndisc6 () {
+ chmod 4555 ${bindir}/ndisc6
+}
+pkg_postinst_${PN}-rdisc6 () {
+ chmod 4555 ${bindir}/rdisc6
+}</screen></para>
+
+ <note>
+ <para>These scripts will be run via <emphasis
+ role="bold">/bin/sh</emphasis> on the target device, which is typically
+ the busybox sh but could also be bash or some other sh compatible shell.
+ As always you should not use any bash extensions in your scripts and
+ stick to basic sh syntax.</para>
+ </note>
+
+ <para>Note that several classes will also register scripts, and that any
+ script you declare will have the script for the classes append to by these
+ classes. The following classes all generate additional script
+ contents:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>update-rc.d</term>
+
+ <listitem>
+ <para>This class is used by daemons to register there init scripts
+ with the init code.</para>
+
+ <para>Details are provided in the <xref
+ linkend="recipes_initscripts" /> section.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>module</term>
+
+ <listitem>
+ <para>This class is used by linux kernel modules. It's responsible
+ for calling depmod and update-modules during kernel module
+ installation and removal.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>kernel</term>
+
+ <listitem>
+ <para>This class is used by the linux kernel itself. There is a lot
+ of housekeeping required both when installing and removing a kernel
+ and this class is responsible for generating the required
+ scripts.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>qpf</term>
+
+ <listitem>
+ <para>This class is used when installing and/or removing qpf fonts.
+ It register scripts to update the font paths and font cache
+ information to ensure that the font information is kept up to date
+ as fonts and installed and removed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>update-alternatives</term>
+
+ <listitem>
+ <para>This class is used by packages that contain binaries which may
+ also be available for other packages. It tells that system that
+ another alternative is available for consideration. The alternatives
+ system will create a symlink to the correct alternative from one or
+ more available on the system.</para>
+
+ <para>Details are provided in the <xref
+ linkend="recipes_alternatives" /> section.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gtk-icon-cache</term>
+
+ <listitem>
+ <para>This class is used by packages that add new gtk icons. It's
+ responsible for updating the icon cache when packages are installed
+ and removed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gconf</term>
+
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>package</term>
+
+ <listitem>
+ <para>The base class used by packaging classes such as those for
+ .ipkg and .deb. The package class may create scripts used to update
+ the dynamic linkers ld cache.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The following example from p3scan shows and postinst script which
+ ensure that the required user and group entries exist, and registers the
+ need for volatiles (directories and/or files under <emphasis
+ role="bold">/var</emphasis>). In addition to explicitly declaring a
+ postinst script it uses the update-rc.d class which will result in an
+ additional entry being added to the postinst script to register the init
+ scripts and start the daemon (via call to update-rc.d as describes in the
+ <xref linkend="recipes_alternatives" /> section).<screen>inherit autotools update-rc.d
+
+...
+
+# Add havp's user and groups
+pkg_postinst_${PN} () {
+ grep -q mail: /etc/group || addgroup --system havp
+ grep -q mail: /etc/passwd || \
+ adduser --disabled-password --home=${localstatedir}/mail --system \
+ --ingroup mail --no-create-home -g "Mail" mail
+ /etc/init.d/populate-volatile.sh update
+}</screen></para>
+
+ <para>Several scripts in existing recipes will be of the following
+ form:<screen>if [ x"$D" = "x" ]; then
+ ...
+fi</screen></para>
+
+ <para>This is testing if the installation directory, <emphasis
+ role="bold">D</emphasis>, is defined and if it is no actions are
+ performed. The installation directory will not be defined under normal
+ circumstances. The primary use of this test is to permit the application
+ to be installed during root filesystem generation. In that situation the
+ scripts cannot be run since the root filesystem is generated on the host
+ system and not on the target. Any required script actions would need to be
+ performed via an alternative method if the package is to be installed in
+ the initial root filesystem (such as including any required users and
+ groups in the default <emphasis role="bold">passwd</emphasis> and
+ <emphasis role="bold">group</emphasis> files for example.)</para>
+ </section>
+
+ <section id="recipes_conffiles" xreflabel="conf files">
+ <title>Configuration files</title>
+
+ <para>Configuration files that are installed as part of a package require
+ special handling. Without special handling as soon as the user upgrades to
+ a new version of the package then changes they have made to the
+ configuration files will be lost.</para>
+
+ <para>In order to prevent this from happening you need to tell the
+ packaging system which files are configuration files. Such files will
+ result in the user being asked how the user wants to handle any
+ configuration file changes (if any), as shown in this example:<screen>Downloading http://nynaeve.twibble.org/ipkg-titan-glibc//./p3scan_2.9.05d-r1_sh4.ipk
+ Configuration file '/etc/p3scan/p3scan.conf'
+ ==&gt; File on system created by you or by a script.
+ ==&gt; File also in package provided by package maintainer.
+ What would you like to do about it ? Your options are:
+ Y or I : install the package maintainer's version
+ N or O : keep your currently-installed version
+ D : show the differences between the versions (if diff is installed)
+ The default action is to keep your current version.
+ *** p3scan.conf (Y/I/N/O/D) [default=N] ?</screen>To declare a file as a
+ configuration file you need to define the
+ <command>CONFFILES_&lt;pkgname&gt;</command> variable as a whitespace
+ separated list of configuration files. The following example from clamav
+ shows two files being marked as configuration files:<screen>CONFFILES_${PN}-daemon = "${sysconfdir}/clamd.conf \
+ ${sysconfdir}/default/clamav-daemon"</screen>Note
+ the user of <command>${PN}-daemon</command> as the package name. The
+ <command>${PN}</command> variable will expand to <command>clamav</command>
+ and therefore these conf files are declared as being in the clamav-daemon
+ package.</para>
+ </section>
+
+ <section id="recipes_package_relationships"
+ xreflabel="package relationships files">
+ <title>Package relationships</title>
+
+ <para>Explicit relationships between packages are support by packaging
+ formats such as ipkg and deb. These relationships include describing
+ conflicting packages and recommended packages.</para>
+
+ <para>The following variables control the package relationships in the
+ recipes:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>RRECOMMENDS</term>
+
+ <listitem>
+ <para>Used to specify other packages that are recommended to be
+ installed when this package is installed. Generally this means while
+ the recommended packages are not required they provide some sort of
+ functionality which users would usually want.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>RCONFLICTS</term>
+
+ <listitem>
+ <para>Used to specify other packages that conflict with this
+ package. Two packages that conflict cannot be installed at the same
+ time.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>RREPLACES</term>
+
+ <listitem>
+ <para>Used to specify that the current package replaces an older
+ package with a different name. During package installing the package
+ that is being replaced will be removed since it is no longer needed
+ when this package is installed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>RSUGGESTS</term>
+
+ <listitem>
+ <para>Used to provide a list of suggested packages to install. These
+ are packages that are related to and useful for the current package
+ but which are not actually required to use the package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>RPROVIDES</term>
+
+ <listitem>
+ <para>Used to explicitly specify what a package provides at runtime.
+ For example hotplug support is provided by several packages, such as
+ udev and linux-hotplug. Both declare that they runtime provide
+ "hotplug". So any packages that require "hotplug" to work simply
+ declare that it RDEPENDS on "hotplug". It's up to the distribution
+ to specify which actual implementation of "virtual/xserver" is
+ used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>PROVIDES</term>
+
+ <listitem>
+ <para>Used to explicitly specify what a package provides at build
+ time. This is typically used when two or more packages can provide
+ the same functionality. For example there are several different X
+ servers in OpenEmbedded, and each as declared as providing
+ "virtual/xserver". Therefore a package that depends on an X server
+ to build can simply declare that it DEPENDS on "virtual/xserver".
+ It's up to the distribution to specify which actual implementation
+ of "virtual/xserver" is used.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section id="recipes_fakeroot" xreflabel="fakeroot">
+ <title>Fakeroot: Dealing with the need for "root"</title>
+
+ <para>Sometimes packages requires root permissions in order to perform
+ some action, such as changing user or group owners or creating device
+ nodes. Since OpenEmbedded will not keep the user and group information
+ it's usually preferably to remove that from the makefiles. For device
+ nodes it's usually preferably to create them from the initial device node
+ lists or via udev configuration.</para>
+
+ <para>However if you can't get by without root permissions then you can
+ use <xref linkend="fakeroot" /> to simulate a root environment, without
+ the need to really give root access.</para>
+
+ <para>Using <xref linkend="fakeroot" /> is done by prefixing the
+ task:<screen>fakeroot do_install() {</screen>Since this requires fakeroot
+ you also need to add a dependency on
+ <command>fakeroot-native</command>:<screen>DEPENDS = "fakeroot-native"</screen>See
+ the fuse recipe for an example. Further information on <xref
+ linkend="fakeroot" />, including a description of it works, is provided in
+ the reference section: <xref linkend="fakeroot" />.</para>
+ </section>
+
+ <section id="recipes_native" xreflabel="native">
+ <title>Native: Packages for the build host</title>
+
+ <para>This section is to be completed.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>What native packages are</para>
+ </listitem>
+
+ <listitem>
+ <para>Using require with the non-native package</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section id="recipes_development" xreflabel="development">
+ <title>Development: Strategies for developing recipes</title>
+
+ <para>This section is to be completed.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>How to go about developing recipes</para>
+ </listitem>
+
+ <listitem>
+ <para>How do handle incrementally creating patches</para>
+ </listitem>
+
+ <listitem>
+ <para>How to deal with site file issues</para>
+ </listitem>
+
+ <listitem>
+ <para>Strategies for autotools issues</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section id="recipes_advanced_versioning" xreflabel="advanced versioning">
+ <title>Advanced versioning: How to deal with rc and pre versions</title>
+
+ <para>Special care needs to be taken when specify the version number for
+ rc and pre versions of packages.</para>
+
+ <para>Consider the case where we have an existing 1.5 version and there's
+ a new 1.6-rc1 release that you want to add.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>1.5: Existing version;</para>
+ </listitem>
+
+ <listitem>
+ <para>1.6-rc1: New version.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>If the new package is given the version number 1.6-rc1 then
+ everything will work fine initially. However when the final release
+ happens it will be called 1.6. If you now create a 1.6 version of the
+ package you'll find that the packages are sorted into the following
+ order:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>1.5</para>
+ </listitem>
+
+ <listitem>
+ <para>1.6</para>
+ </listitem>
+
+ <listitem>
+ <para>1.6-rc1</para>
+ </listitem>
+ </orderedlist>
+
+ <para>This in turn result in packaging system, such as ipkg, considering
+ the released version to be older then the rc version.</para>
+
+ <para>In OpenEmbedded the correct naming of pre and rc versions is to use
+ the previous version number followed by a + followed by the new version
+ number. So the 1.6-rc1 release would be given the version number:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>1.5+1.6-rc1</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>These would result in the eventually ordering being:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>1.5</para>
+ </listitem>
+
+ <listitem>
+ <para>1.5+1.6-rc1</para>
+ </listitem>
+
+ <listitem>
+ <para>1.6</para>
+ </listitem>
+ </orderedlist>
+
+ <para>This is the correct order and the packaging system will now work as
+ expected.</para>
+ </section>
+
+ <section id="recipes_require" xreflabel="require">
+ <title>Require/include: Reusing recipe contents</title>
+
+ <para>In many packages where you are maintaining multiple versions you'll
+ often end up with several recipes which are either identical, or have only
+ minor differences between them.</para>
+
+ <para>The require and/or include directive can be used to include common
+ content from one file into other. You should always look for a way to
+ factor out common functionality into an include file when adding new
+ versions of a recipe.</para>
+
+ <note>
+ <para>Both require and include perform the same function - including the
+ contents of another file into this recipe. The difference is that
+ require will generate an error if the file is not found while include
+ will not. For this reason include should not be used in new
+ recipes.</para>
+ </note>
+
+ <para>For example the clamav recipe looks like this:<screen>require clamav.inc
+
+PR = "r0"</screen>Note that all of the functionality of the recipe is provided
+ in the clamav.inc file, only the release number is defined in the recipe.
+ Each of the recipes includes the same <emphasis
+ role="bold">clamav.inc</emphasis> file to save having to duplicate any
+ functionality. This also means that as new versions are released it's a
+ simple matter of copying the recipe and resetting the release number back
+ to zero.</para>
+
+ <para>The following example from iproute2 shows the recipe adding
+ additional patches that are not specified by the common included file.
+ These are patches only needed for newer release and by only adding them in
+ this recipe it permits the common code to be used for both old and new
+ recipes:<screen>PR = "r1"
+
+SRC_URI += "file://iproute2-2.6.15_no_strip.diff;patch=1;pnum=0 \
+ file://new-flex-fix.patch;patch=1"
+
+require iproute2.inc
+
+DATE = "060323"</screen></para>
+
+ <para>The following example from cherokee shows a similar method of
+ including additional patches for this version only. However it also show
+ another technique in which the configure task is defined in the recipe for
+ this version, thus replacing the <emphasis>configure</emphasis> task that
+ is provided by the common include:<screen>PR = "r7"
+
+SRC_URI_append = "file://configure.patch;patch=1 \
+ file://Makefile.in.patch;patch=1 \
+ file://Makefile.cget.patch;patch=1 \
+ file://util.patch;patch=1"
+
+require cherokee.inc
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+ sed -i 's:-L\$:-L${STAGING_LIBDIR} -L\$:' ${S}/*libtool
+}</screen></para>
+ </section>
+
+ <section id="recipes_advanced_python" xreflabel="advanced python">
+ <title>Python: Advanced functionality with python</title>
+
+ <para>Recipes permit the use of python code in order to perform complex
+ operations which are not possible with the normal recipe syntax and
+ variables. Python can be used in both variable assignments and in the
+ implementation of tasks.</para>
+
+ <para>For variable assignments python code is indicated via the use of
+ <emphasis>${@...}</emphasis>, as shown in the following example:<screen>TAG = ${@bb.data.getVar('PV',d,1).replace('.', '_')}</screen></para>
+
+ <para>The above example retrieves the PV variable from the bitbake data
+ object, the replaces any dots with underscores. Therefore if the <emphasis
+ role="bold">PV</emphasis> was <emphasis role="bold">0.9.0</emphasis> then
+ <emphasis role="bold">TAG</emphasis> will be set to <emphasis
+ role="bold">0-9-0</emphasis>.</para>
+
+ <para>Some of the more common python code in use in existing recipes is
+ shown in the following table:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>bb.data.getVar(&lt;var&gt;,d,1)</term>
+
+ <listitem>
+ <para>Retrieve the data for the specified variable from the bitbake
+ database for the current recipe.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>&lt;variable&gt;.replace(&lt;key&gt;,
+ &lt;replacement&gt;)</term>
+
+ <listitem>
+ <para>Find each instance of the key and replace it with the
+ replacement value. This can also be used to remove part of a string
+ by specifying <emphasis role="bold">''</emphasis> (two single
+ quotes) as the replacement.</para>
+
+ <para>The following example would remove the <emphasis
+ role="bold">'-frename-registers'</emphasis> option from the
+ <emphasis role="bold">CFLAGS</emphasis> variable:<screen>CFLAGS := "${@'${CFLAGS}'.replace('-frename-registers', '')}"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>os.path.dirname(&lt;filename&gt;)</term>
+
+ <listitem>
+ <para>Return the directory only part of a filename.</para>
+
+ <para>This is most commonly seen in existing recipes when settings
+ the <emphasis role="bold">FILESDIR</emphasis> variable (as described
+ in the <xref linkend="recipes_filespath_dir" /> section). By
+ obtaining name of the recipe file itself, <emphasis
+ role="bold">FILE</emphasis>, and then using os.path.dirname to strip
+ the filename part:<screen>FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/make-${PV}"</screen>Note
+ however that this is no longer required as <emphasis
+ role="bold">FILE_DIRNAME</emphasis> is automatically set to the
+ dirname of the <emphasis role="bold">FILE</emphasis> variable and
+ therefore this would be written in new recipes as:<screen>FILESDIR = "$FILE_DIRNAME/make-${PV}"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>&lt;variable&gt;.split(&lt;key&gt;)[&lt;index&gt;]</term>
+
+ <listitem>
+ <para>Splits are variable around the specified key. Use <emphasis
+ role="bold">[&lt;index&gt;]</emphasis> to select one of the matching
+ items from the array generated by the split command.</para>
+
+ <para>The following example from the recipe g<emphasis
+ role="bold">enext2fs_1.3+1.4rc1.bb</emphasis> would take the
+ <emphasis role="bold">PV</emphasis> of <emphasis
+ role="bold">1.3+1.4rc1</emphasis> and split it around the <emphasis
+ role="bold">+</emphasis> sign, resulting in an array containing
+ <emphasis role="bold">1.3</emphasis> and <emphasis
+ role="bold">1.4rc1</emphasis>. It then uses the index of <emphasis
+ role="bold">[1]</emphasis> to select the second item from the list
+ (the first item is at index <emphasis role="bold">0</emphasis>).
+ Therefore <emphasis role="bold">TRIMMEDV</emphasis> would be set to
+ <emphasis role="bold">1.4rc1</emphasis> for this recipe:</para>
+
+ <screen>TRIMMEDV = "${@bb.data.getVar('PV', d, 1).split('+')[1]}"</screen>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>As well as directly calling built-in python functions, those
+ functions defined by the existing classes may also be called. A set of
+ common functions is provided by the base class in <emphasis
+ role="bold">classes/base.bbclass</emphasis>:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>base_conditional</term>
+
+ <listitem>
+ <para>This functions is used to set a variable to one of two values
+ based on the definition of a third variable. The general usage
+ is:<screen>${@base_conditional('&lt;variable-name&gt;', '&lt;value&gt;', '&lt;true-result&gt;', &lt;false-result&gt;', d)}"</screen>where:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>variable-name</term>
+
+ <listitem>
+ <para>This is the name of a variable to check.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>value</term>
+
+ <listitem>
+ <para>This is the value to compare the variable
+ against.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>true-result</term>
+
+ <listitem>
+ <para>If the variable equals the value then this is what is
+ returned by the function.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>false-result</term>
+
+ <listitem>
+ <para>If the variable does not equal the value then this is
+ what is returned by the function.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The following example from the openssl recipe shows the
+ addition of either <emphasis role="bold">-DL_ENDING</emphasis> or
+ <emphasis role="bold">-DB_ENDIAN</emphasis> depending on the value
+ of <emphasis role="bold">SITEINFO_ENDIANESS</emphasis> which is set
+ to le for little endian targets and to be for big endian
+ targets:<screen>do_compile () {
+ ...
+ # Additional flag based on target endiness (see siteinfo.bbclass)
+ CFLAG="${CFLAG} ${@base_conditional('SITEINFO_ENDIANESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)}"
+ ...</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>base_contains</term>
+
+ <listitem>
+ <para>Similar to base_conditional expect that it is checking for the
+ value being an element of an array. The general usage is:<screen>${@base_contains('&lt;array-name&gt;', '&lt;value&gt;', '&lt;true-result&gt;', &lt;false-result&gt;', d)}"</screen></para>
+
+ <para>where:<variablelist>
+ <varlistentry>
+ <term>array-name</term>
+
+ <listitem>
+ <para>This is the name of the array to search.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>value</term>
+
+ <listitem>
+ <para>This is the value to check for in the array.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>true-result</term>
+
+ <listitem>
+ <para>If the value is found in the array then this is what
+ is returned by the function.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>false-result</term>
+
+ <listitem>
+ <para>If the value is not found in the array then this is
+ what is returned by the function.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>The following example from the task-angstrom-x11
+ recipe shows base_contains being used to add a recipe to the runtime
+ dependency list but only for machines which have a
+ touchscreen:</para>
+
+ <screen>RDEPENDS_angstrom-gpe-task-base := "\
+ ...
+ ${@base_contains("MACHINE_FEATURES", "touchscreen", "libgtkstylus", "",d)} \
+ ...</screen>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Tasks may be implemented in python by prefixing the task function
+ with "python ". In general this should not be needed and should be avoided
+ where possible. The following example from the devshell recipe shows how
+ the compile task is implemented python:<screen>python do_compile() {
+ import os
+ import os.path
+
+ workdir = bb.data.getVar('WORKDIR', d, 1)
+ shellfile = os.path.join(workdir, bb.data.expand("${TARGET_PREFIX}${DISTRO}-${MACHINE}-devshell", d))
+
+ f = open(shellfile, "w")
+
+ # emit variables and shell functions
+ devshell_emit_env(f, d, False, ["die", "oe", "autotools_do_configure"])
+
+ f.close()
+}</screen></para>
+ </section>
+
+ <section id="recipes_defaultpreference" xreflabel="default preference">
+ <title>Preferences: How to disable packages</title>
+
+ <para>When bitbake is asked to build a package and multiple versions of
+ that package are available then bitbake will normally select the version
+ that has the highest version number (where the version number is defined
+ via the <command>PV</command> variable).</para>
+
+ <para>For example if we were to ask bitbake to build procps and the
+ following packages are available:<screen>~/oe%&gt; ls packages/procps
+procps-3.1.15/ procps-3.2.1/ procps-3.2.5/ procps-3.2.7/ procps.inc
+procps_3.1.15.bb procps_3.2.1.bb procps_3.2.5.bb procps_3.2.7.bb
+~/oe%&gt;</screen>then we would expect it to select version
+ <command>3.2.7</command> (the highest version number) to build.</para>
+
+ <para>Sometimes this is not actually what you want to happen though.
+ Perhaps you have added a new version of the package that does not yet work
+ or maybe the new version has no support for your target yet. Help is at
+ hand since bitbake is not only looking at the version numbers to decided
+ which version to build but it is also looking at the preference for each
+ of those version. The preference is defined via the
+ <command>DEFAULT_PREFERENCE</command> variable contained within the
+ recipe.</para>
+
+ <para>The default preference (when no
+ <command>DEFAULT_PREFERENCE</command> is specified) is zero. Bitbake will
+ find the highest preference that is available and then for all the
+ packages at the preference level it will select the package with the
+ highest version. In general this means that adding a positive
+ <command>DEFAULT_PREFERENCE</command> will cause the package to be
+ preferred over other versions and a negative
+ <command>DEFAULT_PREFERENCE</command> will cause all other packages to be
+ preferred.</para>
+
+ <para>Imagine that you are adding procps version 4.0.0, but that it does
+ not yet work. You could delete or rename your new recipe so you can build
+ a working image, but what you really to do is just ignore the new 4.0.0
+ version until it works. By adding:<screen>DEFAULT_PREFERENCE = "-1"</screen>to
+ the recipe this is what will happen. Bitbake will now ignore this version
+ (since all of the existing versions have a preference of 0). Note that you
+ can still call bitbake directly on the recipe:<screen>bitbake -b packages/procps/procps_4.0.0.bb</screen>This
+ enables you to test, and fix the package manually without having bitbake
+ automatically select normally.</para>
+
+ <para>By using this feature in conjunction with overrides you can also
+ disable (or select) specific versions based on the override. The following
+ example from glibc shows that this version has been disabled for the sh3
+ architecture because it doesn't support sh3. This will force bitbake to
+ try and select one of the other available versions of glibc
+ instead:<screen>packages/glibc/glibc_2.3.2+cvs20040726.bb:DEFAULT_PREFERENCE_sh3 = "-99"</screen></para>
+ </section>
+
+ <section id="recipes_initscripts" xreflabel="initscripts">
+ <title>Initscripts: How to handle daemons</title>
+
+ <para>This section is to be completed.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>update-rc.d class</para>
+ </listitem>
+
+ <listitem>
+ <para>sh syntax</para>
+ </listitem>
+
+ <listitem>
+ <para>stop/stop/restart params</para>
+ </listitem>
+
+ <listitem>
+ <para>samlpe/standard script?</para>
+ </listitem>
+
+ <listitem>
+ <para>volatiles</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section id="recipes_alternatives" xreflabel="alternatives">
+ <title>Alternatives: How to handle the same command in multiple
+ packages</title>
+
+ <para>Alternatives are used when the same command is provided by multiple
+ packages. A classic example is busybox, which provides a whole set of
+ commands such as <emphasis role="bold">/bin/ls</emphasis> and <emphasis
+ role="bold">/bin/find</emphasis>, which are also provided by other
+ packages such as coreutils (<emphasis role="bold">/bin/ls</emphasis>) and
+ findutils (<emphasis role="bold">/bin/find</emphasis>).</para>
+
+ <para>A system for handling alternatives is required to allow the user to
+ choose which version of the command they wish to have installed. It should
+ be possible to install either one, or both, or remove one when both are
+ installed etc, and to have no issues with the packages overwriting files
+ from other packages.</para>
+
+ <para>The most common reason for alternatives is to reduce the size of the
+ binaries. But cutting down on features, built in help and error messages
+ and combining multiple binaries into one large binary it's possible to
+ save considerable space. Often users are not expected to use the commands
+ interactively in embedded appliances and therefore these changes have no
+ visible effect to the user. In some situations users may have interactive
+ access, or they may be more advanced users who want shell access on
+ appliances that normal don't provide it, and in these cases they should be
+ able to install the full functional version if they desire.</para>
+
+ <section>
+ <title>Example of alternative commands</title>
+
+ <para>Most distributions include busybox in place of the full featured
+ version of the commands. The following example shows a typical install
+ in which the find command, which we'll use as an example here, is the
+ busybox version:<screen>root@titan:~$ find --version
+find --version
+BusyBox v1.2.1 (2006.12.17-05:10+0000) multi-call binary
+
+Usage: find [PATH...] [EXPRESSION]
+
+root@titan:~$ which find
+which find
+/usr/bin/find</screen>If we now install the full version of find:<screen>root@titan:~$ ipkg install findutils
+ipkg install findutils
+Installing findutils (4.2.29-r0) to root...
+Downloading http://nynaeve.twibble.org/ipkg-titan-glibc//./findutils_4.2.29-r0_sh4.ipk
+Configuring findutils
+
+update-alternatives: Linking //usr/bin/find to find.findutils
+update-alternatives: Linking //usr/bin/xargs to xargs.findutils</screen></para>
+
+ <para>Then we see that the standard version of find changes to the full
+ featured implement ion:<screen>root@titan:~$ find --version
+find --version
+GNU find version 4.2.29
+Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
+root@titan:~$ which find
+which find
+/usr/bin/find</screen></para>
+ </section>
+
+ <section>
+ <title>Using update-alternatives</title>
+
+ <para>Two methods of using the alternatives system are available:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Via the <xref linkend="update-alternatives_class" />. This is
+ the simplest method, but is not usable in all situations.</para>
+ </listitem>
+
+ <listitem>
+ <para>Via directly calling the update-alternatives command.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>The <xref linkend="update-alternatives_class" /> is the provides
+ the simplest method of using alternatives but it only works for a single
+ alternative. For multiple alternatives they need to be manually
+ registered during post install.</para>
+
+ <para>Full details on both methods is provided in the <xref
+ linkend="update-alternatives_class" /> section of the reference
+ manual.</para>
+ </section>
+ </section>
+
+ <section id="recipes_volatiles" xreflabel="volatiles">
+ <title>Volatiles: How to handle the /var directory</title>
+
+ <para>The <emphasis role="bold">/var</emphasis> directory is for storing
+ volatile information, that is information which is constantly changing and
+ which in general may be easily recreated. In embedded applications it is
+ often desirable that such files are not stored on disk or flash for
+ various reasons including:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The possibility of a reduced lifetime of the flash;</para>
+ </listitem>
+
+ <listitem>
+ <para>The limited amount of storage space available;</para>
+ </listitem>
+
+ <listitem>
+ <para>To ensure filesystem corruption cannot occur due to a sudden
+ power loss.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>For these reasons many of the OpenEmbedded distributions use a tmpfs
+ based memory filesystem for <emphasis role="bold">/var</emphasis> instead
+ of using a disk or flash based filesystem. The consequence of this is that
+ all contents of the <emphasis role="bold">/var</emphasis> directory is
+ lost when the device is powered off or restarted. Therefore special
+ handling of <emphasis role="bold">/var</emphasis> is required in all
+ packages. Even if your distrubution does not use a tmpfs based <emphasis
+ role="bold">/var</emphasis> you need to assume it does when creating
+ packages to ensure the package can be used on those distributions that do
+ use a tmpfs based <emphasis role="bold">/var</emphasis>. This special
+ handling is provided via the <emphasis
+ role="bold">populate-volatiles.sh</emphasis> script.</para>
+
+ <note>
+ <para>If your package requires any files, directories or symlinks in
+ <emphasis role="bold">/var</emphasis> then it should be using the
+ populate-volatiles facilities.</para>
+ </note>
+
+ <section>
+ <title>Declaring volatiles</title>
+
+ <para>This section is to be completed.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>how volatiles work</para>
+ </listitem>
+
+ <listitem>
+ <para>default volatiles</para>
+ </listitem>
+
+ <listitem>
+ <para>don't include any /var stuff in packages</para>
+ </listitem>
+
+ <listitem>
+ <para>even if your distro don't use /var in tmpfs, others do</para>
+ </listitem>
+
+ <listitem>
+ <para>updating the volatiles cache during install</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>Logging and log files</title>
+
+ <para>As a consequence of the non-volatile and/or small capacity of the
+ <emphasis role="bold">/var</emphasis> file system some distributions
+ choose methods of logging other than writing to a file. The most typical
+ is the use of an in-memory circular log buffer which can be read using
+ the <emphasis role="bold">logread</emphasis> command.</para>
+
+ <para>To ensure that each distribution is able to implement logging in a
+ method that is suitable for its goals all packages should be configured
+ by default to log via syslog, and not log directly to a file, if
+ possible. If the distribution and/or end-user requires logging to a file
+ then they can configured syslog and/or your application to implement
+ this.</para>
+ </section>
+
+ <section>
+ <title>Summary</title>
+
+ <para>In summary the following are required when dealing with
+ <command>/var</command>:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Configure all logging to use syslog whenever possible. This
+ leaves the decision on where to log upto the individual
+ distributions.</para>
+ </listitem>
+
+ <listitem>
+ <para>Don't include any <command>/var</command> directories, file or
+ symlinks in packages. They would be lost on a reboot and so should
+ not be included in packages.</para>
+ </listitem>
+
+ <listitem>
+ <para>The only directories that you can assume exist are those
+ listed in the default volatiles file:
+ <command>packages/initscripts/initscripts-1.0/volatiles</command>.</para>
+ </listitem>
+
+ <listitem>
+ <para>For any other directories, files or links that are required in
+ <command>/var</command> you should install your own volatiles list
+ as part of the package.</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+
+ <section id="recipes_misc">
+ <title>Miscellaneous</title>
+
+ <para>This section is to be completed.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>about optimisation</para>
+ </listitem>
+
+ <listitem>
+ <para>about download directories</para>
+ </listitem>
+
+ <listitem>
+ <para>about parallel builds</para>
+ </listitem>
+
+ <listitem>
+ <para>about determining endianess (aka net-snmp, openssl, hping etc
+ style)</para>
+ </listitem>
+
+ <listitem>
+ <para>about PACKAGES_DYNAMIC</para>
+ </listitem>
+
+ <listitem>
+ <para>about LEAD_SONAME</para>
+ </listitem>
+
+ <listitem>
+ <para>about "python () {" - looks like it is always run when a recipe
+ is parsed? see pam/libpam</para>
+ </listitem>
+
+ <listitem>
+ <para>about SRCDATE with svn/cvs?</para>
+ </listitem>
+
+ <listitem>
+ <para>about INHIBIT_DEFAULT_DEPS?</para>
+ </listitem>
+
+ <listitem>
+ <para>about COMPATIBLE_MACHINE and COMPATIBLE_HOST</para>
+ </listitem>
+
+ <listitem>
+ <para>about SUID binaries, and the need for postinst to fix them
+ up</para>
+ </listitem>
+
+ <listitem>
+ <para>about passwd and group (some comment in install scripts section
+ already).</para>
+ </listitem>
+ </itemizedlist>
+
+ <para></para>
+ </section>
+</chapter> \ No newline at end of file
diff --git a/docs/usermanual/chapters/usage.xml b/docs/usermanual/chapters/usage.xml
new file mode 100644
index 0000000000..9fe20faf8c
--- /dev/null
+++ b/docs/usermanual/chapters/usage.xml
@@ -0,0 +1,1193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="chapter_using_bitbake_and_oe">
+ <title>Using bitbake and OpenEmbedded</title>
+
+ <section id="usage_introduction" xreflabel="introduction">
+ <title>Introduction</title>
+
+ <para>If your reading this manual you probably already have some idea of
+ what OpenEmbedded is all about, which is taking a lot of software and
+ creating something that you can run on another device. This involves
+ downloading some source code, compiling it, creating packages (like .deb
+ or .rpm) and/or creating boot images that can written to flash on the
+ device. The difficulties of cross-compiling and the variety of devices
+ which can be supported lead to a lot more complexity in an OpenEmbedded
+ based distribution than you'd find in a typical desktop distribution
+ (which cross-compiling isn't needed).</para>
+
+ <para>A major part of OpenEmbedded deals with compiling source code for
+ various projects. For each project this generally requires the same basic
+ set of tasks:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Download the source code, and any supporting files (such as
+ initscripts);</para>
+ </listitem>
+
+ <listitem>
+ <para>Extract the source code and apply any patches that might be
+ wanted;</para>
+ </listitem>
+
+ <listitem>
+ <para>Configure the software if needed (such as is done by running the
+ configure script);</para>
+ </listitem>
+
+ <listitem>
+ <para>Compile everything;</para>
+ </listitem>
+
+ <listitem>
+ <para>Package up all the files into some package format, like .deb or
+ .rpm or .ipk, ready for installation.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>There's nothing particular unusual about this process when building
+ on the machine the package is to be installed on. What makes this
+ difficult is:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Cross-compiling: cross-compiling is difficult, and lots of
+ software has no support for cross-compiling - all packages included in
+ OE are cross-compiled;</para>
+ </listitem>
+
+ <listitem>
+ <para>Target and host are different: This means you can't compile up a
+ program and then run it - it's compiled to run on the target system,
+ not on the system compiling it. Lots of software tries to build and
+ run little helper and/or test applications and this won't work when
+ cross-compiling.</para>
+ </listitem>
+
+ <listitem>
+ <para>Tool chains (compiler, linker etc) are often difficult to
+ compile. Cross tool chains are even more difficult. Typically you'd go
+ out and download a tool chain made by someone else - but not when your
+ using OE. In OE the entire toolchain is built as part of the process.
+ This may make things take longer initially and may make it more
+ difficult to get started but makes it easier to apply patches and test
+ out changes to the tool chain.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Of course there's a lot more to OE then just compiling packages
+ though. Some of the features that OE supports includes:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Support for both glibc and uclibc;</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for building for multiple target devices from the one
+ code base;</para>
+ </listitem>
+
+ <listitem>
+ <para>Automatically building anything that is required for the package
+ to compile and/or run (build and run time dependencies);</para>
+ </listitem>
+
+ <listitem>
+ <para>Creation of flash and disk images of any one of a number of
+ types (jffs2, ext2.gz, squashfs etc) for booting directly on the
+ target device;</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for various packaging formats;</para>
+ </listitem>
+
+ <listitem>
+ <para>Automatic building all of the cross-compiling tools you'll
+ need;</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for "native" packages that are built for the host
+ computer and not for the target and used to help during the build
+ process;</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The rest of this chapter assumes you have mastered the Getting Start
+ guides to OpenEmbedded (see the OpenEmbedded web site for details), and
+ therefore have an appropriately configured setup and that you have managed
+ to actually build the cross-compilers for your target. This section talks
+ you through some of the background on what is happening with the aim of
+ helping you understand how to debug and develop within
+ OpenEmbedded.</para>
+
+ <para>You'll also not a lot of reference to variables that define specific
+ directories or change the behaviour of some part of the build process. You
+ should refer to <xref linkend="chapter_recipes" /> for full details on
+ these variables.</para>
+ </section>
+
+ <section id="usage_configuration" xreflabel="configuration">
+ <title>Configuration</title>
+
+ <para>Configuration covers basic items such as where the various files can
+ be found and where output should be placed to more specific items such as
+ which hardware is being targeted and what features you want to have
+ included in the final image. The main configuration areas in OE
+ are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>conf/machine</term>
+
+ <listitem>
+ <para>This directory contains machine configuration information. For
+ each physical device a configuration file is required in this
+ directory that describes various aspects of the device, such as
+ architecture of the device, hardware features of the device (does it
+ have usb? a keyboard? etc), the type of flash or disk images needed
+ for the device, the serial console settings (if any) etc. If you are
+ adding support for a new device you would need to create a machine
+ configuration in this directory for the device.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>conf/distro</term>
+
+ <listitem>
+ <para>This directory contains distribution related files. A
+ distribution decides how various activities are handled in the final
+ image, such as how networking configured, if usb devices will be
+ supported, what packaging system is used, which libc is used
+ etc.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>conf/bitbake.conf</term>
+
+ <listitem>
+ <para>This is the main bitbake configuration file. This file is not
+ to be edited but it is useful to look at it since it declares a
+ larger number of the predefined variables used by OE and controls a
+ lot of the base functionality provided by OE.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>conf/local.conf</term>
+
+ <listitem>
+ <para>This is the end-user specific configuration. This file needs
+ to be copied and edited and is used to specify the various working
+ directories, the machine to build for and the distribution to
+ use.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section id="usage_workspace" xreflabel="workspace">
+ <title>Work space</title>
+
+ <para>Let's start out by taking a look at a typically working area. Note
+ that this may not be exactly what see - there are a lot of options that
+ can effect exactly how things are done, but it gives us a pretty good idea
+ of whats going on. What we are looking at here is the tmp directory (as
+ specified by TMPDIR in your local.conf):<screen>~%&gt; find tmp -maxdepth 2 -type d
+tmp
+tmp/stamps
+tmp/cross
+tmp/cross/bin
+tmp/cross/libexec
+tmp/cross/lib
+tmp/cross/share
+tmp/cross/sh4-linux
+tmp/cache
+tmp/cache/titan
+tmp/work
+tmp/work/busybox-1.2.1-r13
+tmp/work/libice-1_1.0.3-r0
+tmp/work/arpwatch-2.1a15-r2
+...
+tmp/rootfs
+tmp/rootfs/bin
+tmp/rootfs/usr
+tmp/rootfs/media
+tmp/rootfs/dev
+tmp/rootfs/var
+tmp/rootfs/lib
+tmp/rootfs/sbin
+tmp/rootfs/mnt
+tmp/rootfs/boot
+tmp/rootfs/sys
+tmp/rootfs/proc
+tmp/rootfs/etc
+tmp/rootfs/home
+tmp/rootfs/tmp
+tmp/staging
+tmp/staging/man
+tmp/staging/x86_64-linux
+tmp/staging/pkgdata
+tmp/staging/pkgmaps
+tmp/staging/var
+tmp/staging/sh4-linux
+tmp/staging/local
+tmp/staging/etc
+tmp/deploy
+tmp/deploy/addons
+tmp/deploy/ipk
+tmp/deploy/sources
+tmp/deploy/images</screen></para>
+
+ <para>The various top level directories under tmp include:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>stamps</term>
+
+ <listitem>
+ <para>Nothing of interest to users in here. These time stamps are
+ used by bitbake to keep track of what tasks it has completed and
+ what tasks it still has outstanding. This is how it knows that
+ certain actions have been completed and it doesn't need to do them
+ again.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cross</term>
+
+ <listitem>
+ <para>Contains the cross-compiler toolchain. That is the gcc and
+ binutils that run on the host system but produce output for the
+ target system.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cache</term>
+
+ <listitem>
+ <para>Nothing of interest to users in here. This contains the
+ bitbake parse cache and is used to avoid the need to parse all of
+ the recipes each time bitbake is run. This makes bitbake a lot
+ faster on the 2nd and subsequent runs.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>work</term>
+
+ <listitem>
+ <para>The work directory. This is the directory in which all
+ packages are built - this is where the source code is extract,
+ patches applied, software configure, compiled, installed and
+ package. This is where you'll spend most of you time looking when
+ working in OE.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>rootfs</term>
+
+ <listitem>
+ <para>The generated root filesystem image for your target device.
+ This is the contents of the root filesystem (NOTE: fakeroot means it
+ doesn't have the correct device special nodes and permissions to use
+ directly).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>staging</term>
+
+ <listitem>
+ <para>Contains the staging area, which is used to stored natively
+ compiled tools and and libraries and headers for the target that are
+ required for building other software.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>deploy</term>
+
+ <listitem>
+ <para>Contains the final output from OE. This includes the
+ installation packages (typically .ipkg packages) and flash and/or
+ disk images. This is where you go to get the final product.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>When people refer to the <emphasis>"tmp directory"</emphasis> this
+ is the directory them are talking about.</para>
+
+ <para>To perform a complete rebuild from script you would usually rename
+ or delete tmp and then restart your build. I recommend keeping one old
+ version of tmp around to use for comparison if something goes wrong with
+ your new build. For example:<screen>%&gt; rm -fr tmp.OLD
+$&gt; mv tmp tmp.OLD
+%&gt; bitbake bootstrap-image</screen></para>
+
+ <section id="usage_workdir" xreflabel="work directory">
+ <title>work directory (tmp/work)</title>
+
+ <para>The work directory is where all source code is unpacked into,
+ where source is configured, compiled and packaged. In other words this
+ is where all the action happens. Each bitbake recipe will produce a
+ corresponding sub directory in the work directory. The sub directory
+ name will contain the recipe name, version and the release number (as
+ defined by the PR variable within the recipe).</para>
+
+ <para>Here's an example of a few of the subdirectories under the work
+ directory:<screen>~%&gt; find tmp/work -maxdepth 1 -type d | head -4
+tmp/work
+tmp/work/busybox-1.2.1-r13
+tmp/work/libice-1_1.0.3-r0
+tmp/work/arpwatch-2.1a15-r2</screen>You can see that the first three (of
+ several hundred) recipes here and they are for release 13 of busybox
+ 1.2.1, release 0 or libice 1.1.0.3 and release 2 of arpwatch 2.1a15.
+ It's also possible that you may just have a sub directory for your
+ targets architecture and operating system in which case these
+ directories will be in that additional subdirectory, as shown
+ here:<screen>~%&gt; find tmp/work -maxdepth 2 -type d | head -4
+tmp/work
+tmp/work/sh4-linux
+tmp/work/sh4-linux/busybox-1.2.1-r13
+tmp/work/sh4-linux/libice-1_1.0.3-r0
+tmp/work/sh4-linux/arpwatch-2.1a15-r2</screen></para>
+
+ <para>The <emphasis role="bold">sh4-linux</emphasis> directory in the
+ above example is a combination of the target architecture (sh4) and
+ operating system (linux). This subdirectory has been added by the use of
+ one of OpenEmbedded's many features. In this case it's the
+ <emphasis>multimachine</emphasis> feature which is used to allow builds
+ for multiple targets within the one work directory and can be enabled on
+ a per distribution basis. This feature enables the sharing of native and
+ architecture neutral packages and building for multiple targets that
+ support the same architecture but require different linux kernels (for
+ example). We'll assume multimachine isn't being used for the rest of
+ this chapter, just remember to add the extra directory if your
+ distribution is using it.</para>
+
+ <para>Using lzo 1.08 as an example we'll examine the contents of the
+ working directory for a typical recipe:<screen>~%&gt; find tmp/work/lzo-1.08-r14 -maxdepth 1
+tmp/work/lzo-1.08-r14
+tmp/work/lzo-1.08-r14/temp
+tmp/work/lzo-1.08-r14/lzo-1.08
+tmp/work/lzo-1.08-r14/install
+tmp/work/lzo-1.08-r14/image</screen></para>
+
+ <para>The directory, <emphasis
+ role="bold">tmp/work/lzo-1.08-r14</emphasis>, is know as the
+ <emphasis>"working directory"</emphasis> for the recipe and is specified
+ via the <emphasis role="bold">WORKDIR</emphasis> variable in bitbake.
+ You'll sometimes see recipes refer directly to <emphasis
+ role="bold">WORKDIR</emphasis> and this is the directory they are
+ referencing. The <emphasis role="bold">1.08</emphasis> is the version of
+ lzo and <emphasis role="bold">r14</emphasis> is the release number, as
+ defined by the <emphasis role="bold">PR</emphasis> variable within the
+ recipe.</para>
+
+ <para>Under the working directory (<emphasis
+ role="bold">WORKDIR</emphasis>) there are four subdirectories:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>temp</term>
+
+ <listitem>
+ <para>The temp directories contains logs and in some cases scripts
+ that actually implement specific tasks (such as a script to
+ configure or compile the source).</para>
+
+ <para>You can look at the logs in this directory to get more
+ information into what happened (or didn't happen). This is usually
+ the first thing to look at when things are going wrong and these
+ usually need to be included when reporting bugs.</para>
+
+ <para>The scripts can be used to see what a particular task, such
+ as configure or compile, is trying to do.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>lzo-1.08</term>
+
+ <listitem>
+ <para>This is the unpacked source code directory, which was
+ created when the lzo source code was extracted in this directory.
+ The name and format of this directory is therefore dependent on
+ the actual source code packaging. Within recipes this directory is
+ referred to as <emphasis role="bold">S</emphasis> and is usually
+ expected to be named like this, that is
+ <emphasis>"&lt;name&gt;-&lt;version&gt;"</emphasis>. If the source
+ code extracts to somewhere else then that would need to be
+ declared in the recipe by explicitly setting the value of the
+ variable <emphasis role="bold">S</emphasis> to the appropriate
+ directory.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>image</term>
+
+ <listitem>
+ <para>The image directory (or destination directory) is where the
+ software needs to be installed into in order to be packaged. This
+ directory is referred to as <emphasis role="bold">D</emphasis> in
+ recipes. So instead of installing binaries into <emphasis
+ role="bold">/usr/bin</emphasis> and libraries into <emphasis
+ role="bold">/usr/lib</emphasis> for example you would need to
+ install into <emphasis role="bold">${D}/usr/bin</emphasis> and
+ <emphasis role="bold">${D}/usr/lib</emphasis> instead. When
+ installed on the target the ${D} will be not be included so
+ they'll end up in the correct place. You definitely don't wont
+ files on your host system being replaced by cross-compiled
+ binaries for your target!</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>install</term>
+
+ <listitem>
+ <para>The install directory is used to split the installed files
+ into separate packages. One subdirectory is created per package to
+ be generated and the files are moved from the image directory
+ (<emphasis role="bold">D</emphasis>) over to this directory, and
+ into the appropriate package subdirectory, as each packaging
+ instruction is processed. Typically there will be separate
+ documentation (<emphasis>-doc</emphasis>), debugging
+ (<emphasis>-dbg</emphasis>) and development
+ (<emphasis>-dev</emphasis>) packages automatically created. There
+ are variables such as <emphasis role="bold">FILES_</emphasis> and
+ <emphasis role="bold">PACKAGES</emphasis> used in recipes which
+ control the separation of various files into individual
+ packages.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>So lets show some examples of the useful information you now have
+ access to.</para>
+
+ <para>How about checking out what happened during the configuration of
+ lzo? Well that requires checking the log file for configure that is
+ generated in the temp directory:<screen>~%&gt; less tmp/work/lzo-1.08-r14/temp/log.do_configure.*
+...
+checking whether ccache sh4-linux-gcc -ml -m4 suffers the -fschedule-insns bug... unknown
+checking whether ccache sh4-linux-gcc -ml -m4 suffers the -fstrength-reduce bug... unknown
+checking whether ccache sh4-linux-gcc -ml -m4 accepts -fstrict-aliasing... yes
+checking the alignment of the assembler... 0
+checking whether to build assembler versions... no
+configure: creating ./config.status
+config.status: creating Makefile
+config.status: creating examples/Makefile
+config.status: creating include/Makefile
+config.status: creating ltest/Makefile
+config.status: creating minilzo/Makefile
+config.status: creating src/Makefile
+config.status: creating tests/Makefile
+config.status: creating config.h
+config.status: executing depfiles commands</screen></para>
+
+ <para>Or perhaps you want to see how the files were distributed into
+ individual packages prior to packaging? The install directory is where
+ the files are split into separate packages and so that shows us which
+ files end up where:<screen>~%&gt; find tmp/work/lzo-1.08-r14/install
+tmp/work/lzo-1.08-r14/install
+tmp/work/lzo-1.08-r14/install/lzo-doc
+tmp/work/lzo-1.08-r14/install/lzo-dbg
+tmp/work/lzo-1.08-r14/install/lzo-dbg/usr
+tmp/work/lzo-1.08-r14/install/lzo-dbg/usr/lib
+tmp/work/lzo-1.08-r14/install/lzo-dbg/usr/lib/.debug
+tmp/work/lzo-1.08-r14/install/lzo-dbg/usr/lib/.debug/liblzo.so.1.0.0
+tmp/work/lzo-1.08-r14/install/lzo-dev
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo2a.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1y.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1b.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1f.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzoconf.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1x.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo16bit.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1a.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1z.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzoutil.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1c.h
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib/liblzo.a
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib/liblzo.so
+tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib/liblzo.la
+tmp/work/lzo-1.08-r14/install/lzo.shlibdeps
+tmp/work/lzo-1.08-r14/install/lzo-locale
+tmp/work/lzo-1.08-r14/install/lzo
+tmp/work/lzo-1.08-r14/install/lzo/usr
+tmp/work/lzo-1.08-r14/install/lzo/usr/lib
+tmp/work/lzo-1.08-r14/install/lzo/usr/lib/liblzo.so.1
+tmp/work/lzo-1.08-r14/install/lzo/usr/lib/liblzo.so.1.0.0</screen></para>
+ </section>
+ </section>
+
+ <section id="usage_tasks" xreflabel="tasks">
+ <title>Tasks</title>
+
+ <para>When you go about building and installing a software package there
+ are a number of tasks that you generally follow with most software
+ packages. You probably need to start out by downloading the source code,
+ then unpacking the source code. Maye you need to apply some patches for
+ some reason. Then you might run the configure script of the package,
+ perhaps passing it some options to configure it to your liking. The you
+ might run "make install" to install the software. If your actually going
+ to make some packages, such as .deb or .rpm, then you'd have additional
+ tasks you'd perform to make them.</para>
+
+ <para>You find that building things in OpenEmbedded works in a similar way
+ - there are a number of tasks that are executed in a predefined order for
+ each recipe. Any many of the tasks correspond to those listed above like
+ <emphasis>"download the source"</emphasis>. In fact you've probably
+ already seen some of the names of these tasks - bitbake displays them as
+ they are processed:<screen>~%&gt; bitbake lzo
+NOTE: Psyco JIT Compiler (http://psyco.sf.net) not available. Install it to increase performance.
+NOTE: Handling BitBake files: \ (4541/4541) [100 %]
+NOTE: Parsing finished. 4325 cached, 0 parsed, 216 skipped, 0 masked.
+NOTE: build 200705041709: started
+
+OE Build Configuration:
+BB_VERSION = "1.8.2"
+OE_REVISION = "&lt;unknown&gt;"
+TARGET_ARCH = "sh4"
+TARGET_OS = "linux"
+MACHINE = "titan"
+DISTRO = "erouter"
+DISTRO_VERSION = "0.1-20070504"
+TARGET_FPU = ""
+
+NOTE: Resolving missing task queue dependencies
+NOTE: preferred version 2.5 of glibc not available (for item virtual/sh4-linux-libc-for-gcc)
+NOTE: Preparing Runqueue
+NOTE: Executing runqueue
+NOTE: Running task 208 of 226 (ID: 11, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_fetch</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_fetch</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_fetch</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 209 of 226 (ID: 2, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_unpack</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_unpack</emphasis>: started
+NOTE: Unpacking /home/lenehan/devel/oe/sources/lzo-1.08.tar.gz to /home/lenehan/devel/oe/build/titan-glibc-25/tmp/work/lzo-1.08-r14/
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_unpack</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 216 of 226 (ID: 3, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_patch</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_patch</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_patch</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 217 of 226 (ID: 4, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_configure</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_configure</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_configure</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 218 of 226 (ID: 12, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_qa_configure</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_qa_configure</emphasis>: started
+NOTE: Checking sanity of the config.log file
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_qa_configure</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 219 of 226 (ID: 0, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_compile</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_compile</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_compile</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 220 of 226 (ID: 1, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_install</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_install</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_install</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 221 of 226 (ID: 5, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_package</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_package</emphasis>: started
+NOTE: DO PACKAGE QA
+NOTE: Checking Package: lzo-dbg
+NOTE: Checking Package: lzo
+NOTE: Checking Package: lzo-doc
+NOTE: Checking Package: lzo-dev
+NOTE: Checking Package: lzo-locale
+NOTE: DONE with PACKAGE QA
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_package</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 222 of 226 (ID: 8, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, <emphasis
+ role="bold">do_package_write</emphasis>)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_package_write</emphasis>: started
+Packaged contents of lzo-dbg into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/liblzo-dbg_1.08-r14_sh4.ipk
+Packaged contents of lzo into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/liblzo1_1.08-r14_sh4.ipk
+NOTE: Not creating empty archive for lzo-doc-1.08-r14
+Packaged contents of lzo-dev into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/liblzo-dev_1.08-r14_sh4.ipk
+NOTE: Not creating empty archive for lzo-locale-1.08-r14
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_package_write</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 223 of 226 (ID: 6, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, do_populate_staging)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_populate_staging</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_populate_staging</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 224 of 226 (ID: 9, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, do_qa_staging)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_qa_staging</emphasis>: started
+NOTE: QA checking staging
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_qa_staging</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 225 of 226 (ID: 7, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, do_distribute_sources)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_distribute_sources</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_distribute_sources</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Running task 226 of 226 (ID: 10, /home/lenehan/devel/oe/build/titan-glibc-25/packages/lzo/lzo_1.08.bb, do_build)
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_build</emphasis>: started
+NOTE: package lzo-1.08-r14: task <emphasis role="bold">do_build</emphasis>: completed
+NOTE: package lzo-1.08: completed
+NOTE: Tasks Summary: Attempted 226 tasks of which 213 didn't need to be rerun and 0 failed.
+NOTE: build 200705041709: completed</screen><note>
+ <para>The output may look different depending on the version of
+ bitbake being used, and some tasks are only run when specific options
+ are enabled in your distribution. The important point to note is that
+ the various tasks are being run and bitbake shows you each time it
+ starts and completes a task.</para>
+ </note></para>
+
+ <para>So there's a set of tasks here which are being run to generate the
+ final packages. And if you'll notice that every recipe runs through the
+ same set of tasks (ok I'll admit that it is possible that some additional
+ tasks could be run for some recipes, but we'll talk about that later). The
+ tasks that you'll need to be most familiar with are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>fetch</term>
+
+ <listitem>
+ <para>The <emphasis>fetch</emphasis> task is responsible for
+ fetching any source code that is required. This means things such as
+ downloading files and checking out from source control repositories
+ such as git or svn.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>unpack</term>
+
+ <listitem>
+ <para>The <emphasis>unpack</emphasis> task is responsible for
+ extracting files from archives, such as <emphasis
+ role="bold">.tar.gz</emphasis>, into the working area and copying
+ any additional files, such as init scripts, into the working
+ area.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>patch</term>
+
+ <listitem>
+ <para>The <emphasis>patch</emphasis> task is responsible for
+ applying any patches to the unpacked source code</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>configure</term>
+
+ <listitem>
+ <para>The <emphasis>configure</emphasis> task takes care of the
+ configuration of the package. Running a configure script
+ (<emphasis>"./configure &lt;options&gt;"</emphasis>) is probably the
+ form of configuration that is most recognised but it's not the only
+ configuration system that exists.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>compile</term>
+
+ <listitem>
+ <para>The <emphasis>compile</emphasis> task actually compiles the
+ software. This could be as simple as running <emphasis
+ role="bold">make</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>populate_staging (stage)</term>
+
+ <listitem>
+ <para>The <emphasis>populate_staging</emphasis> task (stage is an
+ alternate, easier to type name, that can be used to refer to this
+ task) is responsible for making available libraries and headers (if
+ any) that may be required by other packages to build. For example if
+ you compile zlib then it's headers and the library need to be made
+ available for other applications to include and link against.</para>
+
+ <note>
+ <para>This is different to the <emphasis>install</emphasis> task
+ in that this is responsible for making available libraries and
+ headers for use during build on the development host. Therefore
+ it's libraries which normal have to stage things while
+ applications normally don't need to. The
+ <emphasis>install</emphasis> task on the other hand is making
+ files available for packaging and ultimately installation on the
+ target.</para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>install</term>
+
+ <listitem>
+ <para>The <emphasis>install</emphasis> task is responsible for
+ actually installing everything. Now this needs to install the
+ software into the destination directory, <emphasis
+ role="bold">D</emphasis>. This directory won't actually be a part of
+ the final package though. In other words if you install something
+ into <emphasis role="bold">${D}/bin</emphasis> then it will end up
+ in the <emphasis role="bold">/bin</emphasis> directory in the
+ package and therefore on the target.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>package</term>
+
+ <listitem>
+ <para>The <emphasis>package</emphasis> task takes the installed
+ files and splits them into separate directories under the <emphasis
+ role="bold">${WORKDIR}/install</emphasis> directory, one per
+ package. It moves the files for the destination directory, <emphasis
+ role="bold">${D}</emphasis>, that they were installed in into the
+ appropriate packages subdirectory. Usually there will be a main
+ package a separate documentation (-doc), development (-dev) and
+ debugging packages (-dbg) for example.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>package_write</term>
+
+ <listitem>
+ <para>The <emphasis>package_write</emphasis> task is responsible for
+ taking each packages subdirectory and creating any actual
+ installation package, such as .ipk, .deb or .rpm. Currently .ipk is
+ the only fully supported packing format although .deb packages are
+ being actively worked on. It should be reasonably easy for an
+ experienced OpenEmbedded developer to add support for any other
+ packaging formats they might required.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <note>
+ <para>You'll notice that the bitbake output had tasks prefixed with
+ <emphasis>do_</emphasis>, as in <emphasis>do_install</emphasis> vs
+ <emphasis>install</emphasis>. This is slightly confusing but any task
+ <emphasis>x</emphasis> is implemented via a function called
+ <emphasis>do_x</emphasis> in the class or recipe where it is defined.
+ See places refer to the tasks via their name only and some with the
+ <emphasis>do</emphasis> prefix.</para>
+ </note>
+
+ <para>You will almost certainly notice tasks beyond these ones - there are
+ various methods available to insert additional tasks into the tasks
+ sequence. As an example the <emphasis
+ role="bold">insane.bbclass</emphasis>, which performs various QA checks,
+ does these checks by inserting a new task called
+ <emphasis>qa_configure</emphasis> between the
+ <emphasis>configure</emphasis> and <emphasis>compile</emphasis> tasks and
+ another new task called <emphasis>qa_staging</emphasis> between
+ <emphasis>populate_staging</emphasis> and <emphasis>build</emphasis>
+ tasks. The former validates the result of the
+ <emphasis>configure</emphasis> task and the late the results of the
+ <emphasis>populate_staging</emphasis> task.</para>
+
+ <para>To determine the full list of tasks available for a specific recipe
+ you can run bitbake on the recipe and asking it for the full list of
+ available tasks:<screen>~%&gt; bitbake -b packages/perl/perl_5.8.8.bb -c listtasks
+NOTE: package perl-5.8.8: started
+NOTE: package perl-5.8.8-r11: task do_listtasks: started
+do_fetchall
+do_listtasks
+do_rebuild
+do_compile
+do_build
+do_populate_staging
+do_mrproper
+do_fetch
+do_configure
+do_clean
+do_package
+do_unpack
+do_install
+do_package_write
+do_distribute_sources
+do_showdata
+do_qa_configure
+do_qa_staging
+do_patch
+NOTE: package perl-5.8.8-r11: task do_listtasks: completed
+NOTE: package perl-5.8.8: completed
+~%&gt; </screen></para>
+
+ <para>If your being observant you'll note that
+ <emphasis>listtasks</emphasis> is in fact a task itself, and that the
+ <emphasis role="bold">-c</emphasis> option to bitbake allows you to
+ explicitly run specific tasks. We'll make use of this in the next section
+ when we discuss working with a recipe.</para>
+ </section>
+
+ <section id="usage_workwithsinglerecipe"
+ xreflabel="working with a single recipe">
+ <title>Working with a single recipe</title>
+
+ <para>During development you're likely to often find yourself working on a
+ single bitbake recipe - maybe trying to fix something or add a new version
+ or perhaps working on a totally new recipe. Now that you know all about
+ tasks you can use that knowledge to help speed up the development and
+ debugging process.</para>
+
+ <para>Bitbake can be instructed to deal directly with a single recipe file
+ by passing it via the <emphasis role="bold">-b</emphasis> parameter. This
+ option takes the recipe as a parameter and instructs bitbake to process
+ the named recipe only. Note that this ignores any dependencies that are in
+ the recipe, so these must have already been built previously.</para>
+
+ <para>Here's a typically example that cleans up the package (using the
+ <emphasis>clean</emphasis> task) and the rebuilds it with debugging output
+ from bitbake enabled:<screen>~%&gt; bitbake -b &lt;bb-file&gt; -c clean
+~%&gt; bitbake -b &lt;bb-file&gt; -D</screen></para>
+
+ <para>The options to bitbake that are most useful here are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>-b &lt;bb-file&gt;</term>
+
+ <listitem>
+ <para>The recipe to process;</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-c &lt;action&gt;</term>
+
+ <listitem>
+ <para>The action to perform, typically the name of one of the tasks
+ supported by the recipe;</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-D</term>
+
+ <listitem>
+ <para>Display debugging information, use two <emphasis
+ role="bold">-D</emphasis>'s for additional debugging;</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-f</term>
+
+ <listitem>
+ <para>Force an operation. This is useful in getting bitbake to
+ perform some operation it normally wouldn't do. For example, if you
+ try and call the <emphasis>compile</emphasis> task twice in a row
+ then bitbake will not do anything on the second attempt since it has
+ already performed the task. By adding <emphasis
+ role="bold">-f</emphasis> it will force it to perform the action
+ regardless of if it thinks it's been done previously.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The most common actions (used with -c) are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>fetch</term>
+
+ <listitem>
+ <para>Try to download all of the required source files, but don't do
+ anything else with them.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>unpack</term>
+
+ <listitem>
+ <para>Unpack the source file but don't apply the patches yet.
+ Sometimes you may want to look at the extracted, but not patched
+ source code and that's what just unpacking will give you (some
+ time's handy to get diffs generated against the original
+ source).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>patch</term>
+
+ <listitem>
+ <para>Apply any patches.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>configure</term>
+
+ <listitem>
+ <para>Performs and configuration that is required for the
+ software.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>compile</term>
+
+ <listitem>
+ <para>Perform the actual compilation steps of the software.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>stage</term>
+
+ <listitem>
+ <para>If any files, such as header and libraries, will be required
+ by other packages then they need to be installed into the staging
+ area and that's what this task takes care of.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>install</term>
+
+ <listitem>
+ <para>Install the software in preparation for packaging.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>package</term>
+
+ <listitem>
+ <para>Package the software. Remember that this moves the files from
+ the installation directory, D, into the packing install area. So to
+ re-package you also need to re-install first.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>clean</term>
+
+ <listitem>
+ <para>Delete the entire directory for this version of the software.
+ Usually done to allow a test build with no chance of old files or
+ changes being left behind.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Note that each of the actions that corresponds to task's will run
+ any preceding tasks that have not yet been performed. So starting with
+ compile will also perform the fetch, unpack, patch and configure
+ actions.</para>
+
+ <para>A typically development session might involve editing files in the
+ working directory and then recompiling until it all works:<screen>[<emphasis>... test ...</emphasis>]
+~%&gt; bitbake -b packages/testapp/testapp_4.3.bb -c compile -D
+
+[<emphasis>... save a copy of main.c and make some changes ...</emphasis>]
+~%&gt; vi tmp/work/testapp-4.3-r0/main.c
+~%&gt; bitbake -b packages/testapp/testapp_4.3.bb -c compile -D -f
+
+[<emphasis>... create a patch and add it to the recipe ...</emphasis>]
+~%&gt; vi packages/testapp/testapp_4.3.bb
+
+[<emphasis>... test from clean ...</emphasis>]
+~%&gt; bitbake -b packages/testapp/testapp_4.3.bb -c clean
+~%&gt; bitbake -b packages/testapp/testapp_4.3.bb
+
+[<emphasis>... NOTE: How to create the patch is not covered at this point ...</emphasis>]</screen></para>
+
+ <para>Here's another example showing how you might go about fixing up the
+ packaging in your recipe:<screen>~%&gt; bitbake -b packages/testapp/testapp_4.3.bb -c install -f
+~%&gt; bitbake -b packages/testapp/testapp_4.3.bb -c stage -f
+~%&gt; find tmp/work/testapp_4.3/install
+...
+~%&gt; vi packages/testapp/testapp_4.3.bb</screen>At this stage you play with
+ the <emphasis role="bold">PACKAGE_</emphasis> and <emphasis
+ role="bold">FILES_</emphasis> variables and then repeat the above
+ sequence.</para>
+
+ <para>Note how we install and then stage. This is one of those things
+ where understanding the tasks helps a lot! Remember that stage moves the
+ files from where they were installed into the various subdirectories
+ (under <emphasis role="bold">${WORKDIR}/instal</emphasis>l) for each
+ package. So if you try and run a stage task without a prior install there
+ won't be any files there to stage! Note also that the stage tasks clears
+ all the subdirectories in <emphasis
+ role="bold">${WORKDIR}/install</emphasis> so you won't get any left over
+ files. But beware, the install task doesn't clear <emphasis
+ role="bold">${D}</emphasis> directory, so any left over files from a
+ previous packing attempt will be left behind (which is ok if all you care
+ about it staging).</para>
+ </section>
+
+ <section id="usage_interactive_bitbake" xreflabel="interactive bitbake">
+ <title>Interactive bitbake</title>
+
+ <para>To interactively test things use:<screen>~%&gt; bitbake -i</screen>this
+ will open the bitbake shell. From here there are a lot of commands
+ available (try help).</para>
+
+ <para>First thing you will want to do is parse all of the recipes (recent
+ bitbake version do this automatically when needed, so you don't need to
+ manually do this anymore):<screen>BB&gt;&gt; parse</screen>You can now
+ build a specific recipe:<screen>BB&gt;&gt; build net-snmp</screen>If it
+ fails you may want to clean the build before trying again:<screen>BB&gt;&gt; clean net-snmp</screen>If
+ you update the recipe by editing the .bb file (to fix some issues) then
+ you will want to clean the package, reparse the modified recipe, and the
+ build again:<screen>BB&gt;&gt; clean net-snmp
+BB&gt;&gt; reparse net-snmp
+BB&gt;&gt; build net-snmp</screen>Note that you can use wildcards in the
+ bitbake shell as well:<screen>BB&gt;&gt; build t*</screen></para>
+
+ <para></para>
+ </section>
+
+ <section id="usage_devshell" xreflabel="devshell">
+ <title>Devshell</title>
+
+ <para>One of the areas in which OpenEmbedded helps you out is by setting
+ various environment variables, such as <emphasis role="bold">CC</emphasis>
+ and <emphasis role="bold">PATH</emphasis> etc, to values suitable for
+ cross-compiling. If you wish to manually run configure scripts and compile
+ file during development it would be nice to have all those values set for
+ you. This is what devshell does - it provides you with an interactive
+ shell with all the appropriate variables set for cross-compiling.</para>
+
+ <section>
+ <title>devshell via inherit</title>
+
+ <para>This is the newer method of obtaining a devshell and is the
+ recommended way for most users now. The newer method requires that the
+ devshell class be added to you configuration by inheriting it. This is
+ usually done in your <emphasis role="bold">local.conf</emphasis> or your
+ distributions conf file:<screen><emphasis role="bold">INHERIT +=</emphasis> "src_distribute_local insane multimachine <emphasis
+ role="bold">devshell</emphasis>"</screen></para>
+
+ <para>With the inclusion of this class you'll find that devshell is
+ added as a new task that you can use on recipes:<screen>~%&gt; bitbake -b packages/lzo/lzo_1.08.bb -c listtasks
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task do_listtasks: started
+<emphasis role="bold">do_devshell</emphasis>
+do_fetchall
+do_listtasks
+do_rebuild
+do_compile
+do_build
+do_mrproper
+do_fetch
+do_configure
+do_clean
+do_populate_staging
+do_package
+do_unpack
+do_install
+do_package_write
+do_distribute_sources
+do_showdata
+do_qa_staging
+do_qa_configure
+do_patch
+NOTE: package lzo-1.08-r14: task do_listtasks: completed
+NOTE: package lzo-1.08: completed</screen></para>
+
+ <para>To bring up the devshell you call bitbake on a recipe and ask it
+ for the devshell task:<screen>~%&gt; ./bb -b packages/lzo/lzo_1.08.bb -c devshell
+NOTE: package lzo-1.08: started
+NOTE: package lzo-1.08-r14: task do_devshell: started
+[<emphasis>... devshell will appear here ...</emphasis>]
+NOTE: package lzo-1.08-r14: task do_devshell: completed
+NOTE: package lzo-1.08: completed</screen></para>
+
+ <para>How the devshell appears depends on the settings of the <emphasis
+ role="bold">TERMCMD</emphasis> variable - you can see the default
+ settings and other possible values in <emphasis
+ role="bold">conf/bitbake.conf</emphasis>. Feel free to try settings this
+ to something else in your local.conf. Usually you will see a new
+ terminal window open which is the devshell window.</para>
+
+ <para>The devshell task is inserted after the patch task, so if you have
+ not already run bitbake on the recipe it will download the source and
+ apply any patches prior to opening the shell.</para>
+
+ <note>
+ <para>This method of obtaining a devshell works if you using <emphasis
+ role="bold">bash</emphasis> as your shell, it does not work if you are
+ using <emphasis role="bold">zsh</emphasis> as your shell. Other shells
+ may or may not work.</para>
+ </note>
+ </section>
+
+ <section>
+ <title>devshell addon</title>
+
+ <para>The devshell addon was the original method that was used to create
+ a devshell.</para>
+
+ <para>It requires no changes to your configuration, instead you simply
+ build the devshell recipe:<screen>bitabike devshell</screen></para>
+
+ <para>and then manually startup the shell. Once in the shell you'll
+ usually want to change into the working directory for the recipe you are
+ working on:<screen>~%&gt; ./tmp/deploy/addons/sh4-linux-erouter-titan-devshell
+bash: alias: `./configure': invalid alias name
+[OE::sh4-linux-erouter-titan]:~$ cd tmp/work/lzo-1.08-r14/lzo-1.08
+[OE::sh4-linux-erouter-titan]:~tmp/work/lzo-1.08-r14/lzo-1.08$</screen><note>
+ <para>The name of the devshell addon depends on the target
+ architecture, operating system and machine name. So you name will be
+ different - just check for the appropriate name ending in
+ -devshell.</para>
+ </note></para>
+ </section>
+
+ <section>
+ <title>Working in the devshell</title>
+
+ <para>[To be done]</para>
+ </section>
+ </section>
+
+ <section id="usage_patches" xreflabel="patching">
+ <title>Patching and patch management</title>
+
+ <para>[To be done]</para>
+ </section>
+</chapter> \ No newline at end of file
diff --git a/docs/usermanual/chunk-code.xsl b/docs/usermanual/chunk-code.xsl
new file mode 100644
index 0000000000..8d59805e6b
--- /dev/null
+++ b/docs/usermanual/chunk-code.xsl
@@ -0,0 +1,670 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:cf="http://docbook.sourceforge.net/xmlns/chunkfast/1.0"
+ xmlns:ng="http://docbook.org/docbook-ng"
+ xmlns:db="http://docbook.org/ns/docbook"
+ exclude-result-prefixes="exsl cf ng db"
+ version="1.0">
+
+<!-- ********************************************************************
+ $Id: chunk-code.xsl 6942 2007-07-04 04:42:17Z xmldoc $
+ ********************************************************************
+
+ This file is part of the XSL DocBook Stylesheet distribution.
+ See ../README or http://docbook.sf.net/release/xsl/current/ for
+ copyright and other information.
+
+ ******************************************************************** -->
+
+<!-- ==================================================================== -->
+
+
+<xsl:template match="*" mode="chunk-filename">
+ <!-- returns the filename of a chunk -->
+ <xsl:variable name="ischunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+
+ <xsl:variable name="fn">
+ <xsl:apply-templates select="." mode="recursive-chunk-filename"/>
+ </xsl:variable>
+
+ <!--
+ <xsl:message>
+ <xsl:value-of select="$ischunk"/>
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="local-name(.)"/>
+ <xsl:text>) </xsl:text>
+ <xsl:value-of select="$fn"/>
+ <xsl:text>, </xsl:text>
+ <xsl:call-template name="dbhtml-dir"/>
+ </xsl:message>
+ -->
+
+ <!-- 2003-11-25 by ndw:
+ The following test used to read test="$ischunk != 0 and $fn != ''"
+ I've removed the ischunk part of the test so that href.to.uri and
+ href.from.uri will be fully qualified even if the source or target
+ isn't a chunk. I *think* that if $fn != '' then it's appropriate
+ to put the directory on the front, even if the element isn't a
+ chunk. I could be wrong. -->
+
+ <xsl:if test="$fn != ''">
+ <xsl:call-template name="dbhtml-dir"/>
+ </xsl:if>
+
+ <xsl:value-of select="$fn"/>
+ <!-- You can't add the html.ext here because dbhtml filename= may already -->
+ <!-- have added it. It really does have to be handled in the recursive template -->
+</xsl:template>
+
+<xsl:template match="*" mode="recursive-chunk-filename">
+ <xsl:param name="recursive" select="false()"/>
+
+ <!-- returns the filename of a chunk -->
+ <xsl:variable name="ischunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+
+ <xsl:variable name="dbhtml-filename">
+ <xsl:call-template name="pi.dbhtml_filename"/>
+ </xsl:variable>
+
+ <xsl:variable name="filename">
+ <xsl:choose>
+ <xsl:when test="$dbhtml-filename != ''">
+ <xsl:value-of select="$dbhtml-filename"/>
+ </xsl:when>
+ <!-- if this is the root element, use the root.filename -->
+ <xsl:when test="not(parent::*) and $root.filename != ''">
+ <xsl:value-of select="$root.filename"/>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:when>
+ <!-- Special case -->
+ <xsl:when test="self::legalnotice and not($generate.legalnotice.link = 0)">
+ <xsl:choose>
+ <xsl:when test="(@id or @xml:id) and not($use.id.as.filename = 0)">
+ <!-- * if this legalnotice has an ID, then go ahead and use -->
+ <!-- * just the value of that ID as the basename for the file -->
+ <!-- * (that is, without prepending an "ln-" too it) -->
+ <xsl:value-of select="(@id|@xml:id)[1]"/>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise, if this legalnotice does not have an ID, -->
+ <!-- * then we generate an ID... -->
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id"/>
+ </xsl:variable>
+ <!-- * ...and then we take that generated ID, prepend an -->
+ <!-- * "ln-" to it, and use that as the basename for the file -->
+ <xsl:value-of select="concat('ln-',$id,$html.ext)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <!-- if there's no dbhtml filename, and if we're to use IDs as -->
+ <!-- filenames, then use the ID to generate the filename. -->
+ <xsl:when test="(@id or @xml:id) and $use.id.as.filename != 0">
+ <xsl:value-of select="(@id|@xml:id)[1]"/>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:when>
+ <xsl:otherwise></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="$ischunk='0'">
+ <!-- if called on something that isn't a chunk, walk up... -->
+ <xsl:choose>
+ <xsl:when test="count(parent::*)>0">
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="$recursive"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <!-- unless there is no up, in which case return "" -->
+ <xsl:otherwise></xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+
+ <xsl:when test="not($recursive) and $filename != ''">
+ <!-- if this chunk has an explicit name, use it -->
+ <xsl:value-of select="$filename"/>
+ </xsl:when>
+
+ <xsl:when test="self::set">
+ <xsl:value-of select="$root.filename"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::book">
+ <xsl:text>bk</xsl:text>
+ <xsl:number level="any" format="01"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::article">
+ <xsl:if test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:if>
+
+ <xsl:text>ar</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::preface">
+ <xsl:if test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:if>
+
+ <xsl:text>pr</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::chapter">
+ <xsl:if test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:if>
+
+ <xsl:text>ch</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::appendix">
+ <xsl:if test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:if>
+
+ <xsl:text>ap</xsl:text>
+ <xsl:number level="any" format="a" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::part">
+ <xsl:choose>
+ <xsl:when test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>pt</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::reference">
+ <xsl:choose>
+ <xsl:when test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>rn</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::refentry">
+ <xsl:choose>
+ <xsl:when test="parent::reference">
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>re</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::colophon">
+ <xsl:choose>
+ <xsl:when test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>co</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::sect1
+ or self::sect2
+ or self::sect3
+ or self::sect4
+ or self::sect5
+ or self::section">
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ <xsl:text>s</xsl:text>
+ <xsl:number format="01"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::bibliography">
+ <xsl:choose>
+ <xsl:when test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>bi</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::glossary">
+ <xsl:choose>
+ <xsl:when test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>go</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::index">
+ <xsl:choose>
+ <xsl:when test="/set">
+ <!-- in a set, make sure we inherit the right book info... -->
+ <xsl:apply-templates mode="recursive-chunk-filename" select="parent::*">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:text>ix</xsl:text>
+ <xsl:number level="any" format="01" from="book"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:when test="self::setindex">
+ <xsl:text>si</xsl:text>
+ <xsl:number level="any" format="01" from="set"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:text>chunk-filename-error-</xsl:text>
+ <xsl:value-of select="name(.)"/>
+ <xsl:number level="any" format="01" from="set"/>
+ <xsl:if test="not($recursive)">
+ <xsl:value-of select="$html.ext"/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+
+
+<xsl:template match="processing-instruction('dbhtml')">
+ <!-- nop -->
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+
+<xsl:template match="*" mode="find.chunks">
+ <xsl:variable name="chunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="$chunk != 0">
+ <cf:div id="{generate-id()}">
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates select="*" mode="find.chunks"/>
+ </cf:div>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="*" mode="find.chunks"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="/">
+ <!-- * Get a title for current doc so that we let the user -->
+ <!-- * know what document we are processing at this point. -->
+ <xsl:variable name="doc.title">
+ <xsl:call-template name="get.doc.title"/>
+ </xsl:variable>
+ <xsl:choose>
+ <!-- Hack! If someone hands us a DocBook V5.x or DocBook NG document,
+ toss the namespace and continue. Use the docbook5 namespaced
+ stylesheets for DocBook5 if you don't want to use this feature.-->
+ <!-- include extra test for Xalan quirk -->
+ <xsl:when test="(function-available('exsl:node-set') or
+ contains(system-property('xsl:vendor'),
+ 'Apache Software Foundation'))
+ and (*/self::ng:* or */self::db:*)">
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Note</xsl:with-param>
+ <xsl:with-param name="source" select="$doc.title"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>namesp. cut</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>stripped namespace before processing</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:variable name="nons">
+ <xsl:apply-templates mode="stripNS"/>
+ </xsl:variable>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Note</xsl:with-param>
+ <xsl:with-param name="source" select="$doc.title"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>namesp. cut</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>processing stripped document</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:apply-templates select="exsl:node-set($nons)"/>
+ </xsl:when>
+ <!-- Can't process unless namespace removed -->
+ <xsl:when test="*/self::ng:* or */self::db:*">
+ <xsl:message terminate="yes">
+ <xsl:text>Unable to strip the namespace from DB5 document,</xsl:text>
+ <xsl:text> cannot proceed.</xsl:text>
+ </xsl:message>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$rootid != ''">
+ <xsl:choose>
+ <xsl:when test="count(key('id',$rootid)) = 0">
+ <xsl:message terminate="yes">
+ <xsl:text>ID '</xsl:text>
+ <xsl:value-of select="$rootid"/>
+ <xsl:text>' not found in document.</xsl:text>
+ </xsl:message>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$collect.xref.targets = 'yes' or
+ $collect.xref.targets = 'only'">
+ <xsl:apply-templates select="key('id', $rootid)"
+ mode="collect.targets"/>
+ </xsl:if>
+ <xsl:if test="$collect.xref.targets != 'only'">
+ <xsl:apply-templates select="key('id',$rootid)"
+ mode="process.root"/>
+ <xsl:if test="$tex.math.in.alt != ''">
+ <xsl:apply-templates select="key('id',$rootid)"
+ mode="collect.tex.math"/>
+ </xsl:if>
+ <xsl:if test="$generate.manifest != 0">
+ <xsl:call-template name="generate.manifest">
+ <xsl:with-param name="node" select="key('id',$rootid)"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$collect.xref.targets = 'yes' or
+ $collect.xref.targets = 'only'">
+ <xsl:apply-templates select="/" mode="collect.targets"/>
+ </xsl:if>
+ <xsl:if test="$collect.xref.targets != 'only'">
+ <xsl:apply-templates select="/" mode="process.root"/>
+ <xsl:if test="$tex.math.in.alt != ''">
+ <xsl:apply-templates select="/" mode="collect.tex.math"/>
+ </xsl:if>
+ <xsl:if test="$generate.manifest != 0">
+ <xsl:call-template name="generate.manifest">
+ <xsl:with-param name="node" select="/"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="process.root">
+ <xsl:apply-templates select="."/>
+</xsl:template>
+
+<!-- ====================================================================== -->
+
+<xsl:template match="set|book|part|preface|chapter|appendix
+ |article
+ |reference|refentry
+ |book/glossary|article/glossary|part/glossary
+ |book/bibliography|article/bibliography|part/bibliography
+ |colophon">
+ <xsl:choose>
+ <xsl:when test="$onechunk != 0 and parent::*">
+ <xsl:apply-imports/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="process-chunk-element"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="sect1|sect2|sect3|sect4|sect5|section">
+ <xsl:variable name="ischunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="not(parent::*)">
+ <xsl:call-template name="process-chunk-element"/>
+ </xsl:when>
+ <xsl:when test="$ischunk = 0">
+ <xsl:apply-imports/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="process-chunk-element"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="setindex
+ |book/index
+ |article/index
+ |part/index">
+ <!-- some implementations use completely empty index tags to indicate -->
+ <!-- where an automatically generated index should be inserted. so -->
+ <!-- if the index is completely empty, skip it. -->
+ <xsl:if test="count(*)>0 or $generate.index != '0'">
+ <xsl:call-template name="process-chunk-element"/>
+ </xsl:if>
+</xsl:template>
+
+<!-- Resolve xml:base attributes -->
+<xsl:template match="@fileref">
+ <!-- need a check for absolute urls -->
+ <xsl:choose>
+ <xsl:when test="contains(., ':')">
+ <!-- it has a uri scheme so it is an absolute uri -->
+ <xsl:value-of select="."/>
+ </xsl:when>
+ <xsl:when test="$keep.relative.image.uris != 0">
+ <!-- leave it alone -->
+ <xsl:value-of select="."/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- its a relative uri -->
+ <xsl:call-template name="relative-uri">
+ <xsl:with-param name="destdir">
+ <xsl:call-template name="dbhtml-dir">
+ <xsl:with-param name="context" select=".."/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ==================================================================== -->
+<xsl:template match="set|book|part|preface|chapter|appendix
+ |article
+ |reference|refentry
+ |sect1|sect2|sect3|sect4|sect5
+ |section
+ |book/glossary|article/glossary|part/glossary
+ |book/bibliography|article/bibliography|part/bibliography
+ |colophon"
+ mode="enumerate-files">
+ <xsl:variable name="ischunk"><xsl:call-template name="chunk"/></xsl:variable>
+ <xsl:if test="$ischunk='1'">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir">
+ <xsl:if test="$manifest.in.base.dir = 0">
+ <xsl:value-of select="$base.dir"/>
+ </xsl:if>
+ </xsl:with-param>
+ <xsl:with-param name="base.name">
+ <xsl:apply-templates mode="chunk-filename" select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="*" mode="enumerate-files"/>
+</xsl:template>
+
+<xsl:template match="book/index|article/index|part/index"
+ mode="enumerate-files">
+ <xsl:if test="$htmlhelp.output != 1">
+ <xsl:variable name="ischunk"><xsl:call-template name="chunk"/></xsl:variable>
+ <xsl:if test="$ischunk='1'">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir">
+ <xsl:if test="$manifest.in.base.dir = 0">
+ <xsl:value-of select="$base.dir"/>
+ </xsl:if>
+ </xsl:with-param>
+ <xsl:with-param name="base.name">
+ <xsl:apply-templates mode="chunk-filename" select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="*" mode="enumerate-files"/>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="legalnotice" mode="enumerate-files">
+ <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>
+ <xsl:if test="$generate.legalnotice.link != 0">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir">
+ <xsl:if test="$manifest.in.base.dir = 0">
+ <xsl:value-of select="$base.dir"/>
+ </xsl:if>
+ </xsl:with-param>
+ <xsl:with-param name="base.name">
+ <xsl:apply-templates mode="chunk-filename" select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="mediaobject[imageobject] | inlinemediaobject[imageobject]" mode="enumerate-files">
+ <xsl:variable name="longdesc.uri">
+ <xsl:call-template name="longdesc.uri">
+ <xsl:with-param name="mediaobject"
+ select="."/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="mediaobject" select="."/>
+
+ <xsl:if test="$html.longdesc != 0 and $mediaobject/textobject[not(phrase)]">
+ <xsl:call-template name="longdesc.uri">
+ <xsl:with-param name="mediaobject" select="$mediaobject"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="text()" mode="enumerate-files">
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/usermanual/chunk-common.xsl b/docs/usermanual/chunk-common.xsl
new file mode 100644
index 0000000000..a78973a7c1
--- /dev/null
+++ b/docs/usermanual/chunk-common.xsl
@@ -0,0 +1,1911 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:cf="http://docbook.sourceforge.net/xmlns/chunkfast/1.0"
+ xmlns:ng="http://docbook.org/docbook-ng"
+ xmlns:db="http://docbook.org/ns/docbook"
+ version="1.0"
+ exclude-result-prefixes="exsl cf ng db">
+
+<!-- ********************************************************************
+ $Id: chunk-common.xsl 7833 2008-03-04 19:09:35Z nwalsh $
+ ********************************************************************
+
+ This file is part of the XSL DocBook Stylesheet distribution.
+ See ../README or http://docbook.sf.net/release/xsl/current/ for
+ copyright and other information.
+
+ ******************************************************************** -->
+
+<!-- ==================================================================== -->
+
+<xsl:param name="onechunk" select="0"/>
+<xsl:param name="refentry.separator" select="0"/>
+<xsl:param name="chunk.fast" select="0"/>
+
+<xsl:key name="genid" match="*" use="generate-id()"/>
+
+<!-- ==================================================================== -->
+
+<xsl:variable name="chunk.hierarchy">
+ <xsl:if test="$chunk.fast != 0">
+ <xsl:choose>
+ <xsl:when test="function-available('exsl:node-set')">
+ <xsl:message>Computing chunks...</xsl:message>
+ <xsl:apply-templates select="/*" mode="find.chunks"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>Fast chunking requires exsl:node-set(). </xsl:text>
+ <xsl:text>Using "slow" chunking.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+</xsl:variable>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="process-chunk-element">
+ <xsl:param name="content">
+ <xsl:apply-imports/>
+ </xsl:param>
+
+ <xsl:choose>
+ <xsl:when test="$chunk.fast != 0 and function-available('exsl:node-set')">
+ <xsl:variable name="chunks" select="exsl:node-set($chunk.hierarchy)//cf:div"/>
+ <xsl:variable name="genid" select="generate-id()"/>
+
+ <xsl:variable name="div" select="$chunks[@id=$genid or @xml:id=$genid]"/>
+
+ <xsl:variable name="prevdiv"
+ select="($div/preceding-sibling::cf:div|$div/preceding::cf:div|$div/parent::cf:div)[last()]"/>
+ <xsl:variable name="prev" select="key('genid', ($prevdiv/@id|$prevdiv/@xml:id)[1])"/>
+
+ <xsl:variable name="nextdiv"
+ select="($div/following-sibling::cf:div|$div/following::cf:div|$div/cf:div)[1]"/>
+ <xsl:variable name="next" select="key('genid', ($nextdiv/@id|$nextdiv/@xml:id)[1])"/>
+
+ <xsl:choose>
+ <xsl:when test="$onechunk != 0 and parent::*">
+ <xsl:copy-of select="$content"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="process-chunk">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$onechunk != 0 and not(parent::*)">
+ <xsl:call-template name="chunk-all-sections">
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$onechunk != 0">
+ <xsl:copy-of select="$content"/>
+ </xsl:when>
+ <xsl:when test="$chunk.first.sections = 0">
+ <xsl:call-template name="chunk-first-section-with-parent">
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="chunk-all-sections">
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="process-chunk">
+ <xsl:param name="prev" select="."/>
+ <xsl:param name="next" select="."/>
+ <xsl:param name="content">
+ <xsl:apply-imports/>
+ </xsl:param>
+
+ <xsl:variable name="ischunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+
+ <xsl:variable name="chunkfn">
+ <xsl:if test="$ischunk='1'">
+ <xsl:apply-templates mode="chunk-filename" select="."/>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="$ischunk='0'">
+ <xsl:message>
+ <xsl:text>Error </xsl:text>
+ <xsl:value-of select="name(.)"/>
+ <xsl:text> is not a chunk!</xsl:text>
+ </xsl:message>
+ </xsl:if>
+
+ <xsl:variable name="filename">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir" select="$base.dir"/>
+ <xsl:with-param name="base.name" select="$chunkfn"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:call-template name="write.chunk">
+ <xsl:with-param name="filename" select="$filename"/>
+ <xsl:with-param name="content">
+ <xsl:call-template name="chunk-element-content">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="quiet" select="$chunk.quietly"/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="chunk-first-section-with-parent">
+ <xsl:param name="content">
+ <xsl:apply-imports/>
+ </xsl:param>
+
+ <!-- These xpath expressions are really hairy. The trick is to pick sections -->
+ <!-- that are not first children and are not the children of first children -->
+
+ <!-- Break these variables into pieces to work around
+ http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6063 -->
+
+ <xsl:variable name="prev-v1"
+ select="(ancestor::sect1[$chunk.section.depth &gt; 0
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect1][1]
+
+ |ancestor::sect2[$chunk.section.depth &gt; 1
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect2
+ and parent::sect1[preceding-sibling::sect1]][1]
+
+ |ancestor::sect3[$chunk.section.depth &gt; 2
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect3
+ and parent::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |ancestor::sect4[$chunk.section.depth &gt; 3
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect4
+ and parent::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |ancestor::sect5[$chunk.section.depth &gt; 4
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect5
+ and parent::sect4[preceding-sibling::sect4]
+ and ancestor::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |ancestor::section[$chunk.section.depth &gt; count(ancestor::section)
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and not(ancestor::section[not(preceding-sibling::section)])][1])[last()]"/>
+
+ <xsl:variable name="prev-v2"
+ select="(preceding::sect1[$chunk.section.depth &gt; 0
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect1][1]
+
+ |preceding::sect2[$chunk.section.depth &gt; 1
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect2
+ and parent::sect1[preceding-sibling::sect1]][1]
+
+ |preceding::sect3[$chunk.section.depth &gt; 2
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect3
+ and parent::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |preceding::sect4[$chunk.section.depth &gt; 3
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect4
+ and parent::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |preceding::sect5[$chunk.section.depth &gt; 4
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect5
+ and parent::sect4[preceding-sibling::sect4]
+ and ancestor::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |preceding::section[$chunk.section.depth &gt; count(ancestor::section)
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::section
+ and not(ancestor::section[not(preceding-sibling::section)])][1])[last()]"/>
+
+ <xsl:variable name="prev"
+ select="(preceding::book[1]
+ |preceding::preface[1]
+ |preceding::chapter[1]
+ |preceding::appendix[1]
+ |preceding::part[1]
+ |preceding::reference[1]
+ |preceding::refentry[1]
+ |preceding::colophon[1]
+ |preceding::article[1]
+ |preceding::bibliography[parent::article or parent::book or parent::part][1]
+ |preceding::glossary[parent::article or parent::book or parent::part][1]
+ |preceding::index[$generate.index != 0]
+ [parent::article or parent::book or parent::part][1]
+ |preceding::setindex[$generate.index != 0][1]
+ |ancestor::set
+ |ancestor::book[1]
+ |ancestor::preface[1]
+ |ancestor::chapter[1]
+ |ancestor::appendix[1]
+ |ancestor::part[1]
+ |ancestor::reference[1]
+ |ancestor::article[1]
+ |$prev-v1
+ |$prev-v2)[last()]"/>
+
+ <xsl:variable name="next-v1"
+ select="(following::sect1[$chunk.section.depth &gt; 0
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect1][1]
+
+ |following::sect2[$chunk.section.depth &gt; 1
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect2
+ and parent::sect1[preceding-sibling::sect1]][1]
+
+ |following::sect3[$chunk.section.depth &gt; 2
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect3
+ and parent::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |following::sect4[$chunk.section.depth &gt; 3
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect4
+ and parent::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |following::sect5[$chunk.section.depth &gt; 4
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect5
+ and parent::sect4[preceding-sibling::sect4]
+ and ancestor::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |following::section[$chunk.section.depth &gt; count(ancestor::section)
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::section
+ and not(ancestor::section[not(preceding-sibling::section)])][1])[1]"/>
+
+ <xsl:variable name="next-v2"
+ select="(descendant::sect1[$chunk.section.depth &gt; 0
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect1][1]
+
+ |descendant::sect2[$chunk.section.depth &gt; 1
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect2
+ and parent::sect1[preceding-sibling::sect1]][1]
+
+ |descendant::sect3[$chunk.section.depth &gt; 2
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect3
+ and parent::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |descendant::sect4[$chunk.section.depth &gt; 3
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect4
+ and parent::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |descendant::sect5[$chunk.section.depth &gt; 4
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::sect5
+ and parent::sect4[preceding-sibling::sect4]
+ and ancestor::sect3[preceding-sibling::sect3]
+ and ancestor::sect2[preceding-sibling::sect2]
+ and ancestor::sect1[preceding-sibling::sect1]][1]
+
+ |descendant::section[$chunk.section.depth &gt; count(ancestor::section)
+ and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])
+ and preceding-sibling::section
+ and not(ancestor::section[not(preceding-sibling::section)])])[1]"/>
+
+ <xsl:variable name="next"
+ select="(following::book[1]
+ |following::preface[1]
+ |following::chapter[1]
+ |following::appendix[1]
+ |following::part[1]
+ |following::reference[1]
+ |following::refentry[1]
+ |following::colophon[1]
+ |following::bibliography[parent::article or parent::book or parent::part][1]
+ |following::glossary[parent::article or parent::book or parent::part][1]
+ |following::index[$generate.index != 0]
+ [parent::article or parent::book or parent::part][1]
+ |following::article[1]
+ |following::setindex[$generate.index != 0][1]
+ |descendant::book[1]
+ |descendant::preface[1]
+ |descendant::chapter[1]
+ |descendant::appendix[1]
+ |descendant::article[1]
+ |descendant::bibliography[parent::article or parent::book or parent::part][1]
+ |descendant::glossary[parent::article or parent::book or parent::part][1]
+ |descendant::index[$generate.index != 0]
+ [parent::article or parent::book or parent::part][1]
+ |descendant::colophon[1]
+ |descendant::setindex[$generate.index != 0][1]
+ |descendant::part[1]
+ |descendant::reference[1]
+ |descendant::refentry[1]
+ |$next-v1
+ |$next-v2)[1]"/>
+
+ <xsl:call-template name="process-chunk">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="chunk-all-sections">
+ <xsl:param name="content">
+ <xsl:apply-imports/>
+ </xsl:param>
+
+ <xsl:variable name="prev-v1"
+ select="(preceding::sect1[$chunk.section.depth &gt; 0 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |preceding::sect2[$chunk.section.depth &gt; 1 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |preceding::sect3[$chunk.section.depth &gt; 2 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |preceding::sect4[$chunk.section.depth &gt; 3 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |preceding::sect5[$chunk.section.depth &gt; 4 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |preceding::section[$chunk.section.depth &gt; count(ancestor::section) and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1])[last()]"/>
+
+ <xsl:variable name="prev-v2"
+ select="(ancestor::sect1[$chunk.section.depth &gt; 0 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |ancestor::sect2[$chunk.section.depth &gt; 1 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |ancestor::sect3[$chunk.section.depth &gt; 2 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |ancestor::sect4[$chunk.section.depth &gt; 3 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |ancestor::sect5[$chunk.section.depth &gt; 4 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |ancestor::section[$chunk.section.depth &gt; count(ancestor::section) and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1])[last()]"/>
+
+ <xsl:variable name="prev"
+ select="(preceding::book[1]
+ |preceding::preface[1]
+ |preceding::chapter[1]
+ |preceding::appendix[1]
+ |preceding::part[1]
+ |preceding::reference[1]
+ |preceding::refentry[1]
+ |preceding::colophon[1]
+ |preceding::article[1]
+ |preceding::bibliography[parent::article or parent::book or parent::part][1]
+ |preceding::glossary[parent::article or parent::book or parent::part][1]
+ |preceding::index[$generate.index != 0]
+ [parent::article or parent::book or parent::part][1]
+ |preceding::setindex[$generate.index != 0][1]
+ |ancestor::set
+ |ancestor::book[1]
+ |ancestor::preface[1]
+ |ancestor::chapter[1]
+ |ancestor::appendix[1]
+ |ancestor::part[1]
+ |ancestor::reference[1]
+ |ancestor::article[1]
+ |$prev-v1
+ |$prev-v2)[last()]"/>
+
+ <xsl:variable name="next-v1"
+ select="(following::sect1[$chunk.section.depth &gt; 0 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |following::sect2[$chunk.section.depth &gt; 1 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |following::sect3[$chunk.section.depth &gt; 2 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |following::sect4[$chunk.section.depth &gt; 3 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |following::sect5[$chunk.section.depth &gt; 4 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |following::section[$chunk.section.depth &gt; count(ancestor::section) and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1])[1]"/>
+
+ <xsl:variable name="next-v2"
+ select="(descendant::sect1[$chunk.section.depth &gt; 0 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |descendant::sect2[$chunk.section.depth &gt; 1 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |descendant::sect3[$chunk.section.depth &gt; 2 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |descendant::sect4[$chunk.section.depth &gt; 3 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |descendant::sect5[$chunk.section.depth &gt; 4 and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1]
+ |descendant::section[$chunk.section.depth
+ &gt; count(ancestor::section) and not(ancestor::*/processing-instruction('dbhtml')[normalize-space(.) ='stop-chunking'])][1])[1]"/>
+
+ <xsl:variable name="next"
+ select="(following::book[1]
+ |following::preface[1]
+ |following::chapter[1]
+ |following::appendix[1]
+ |following::part[1]
+ |following::reference[1]
+ |following::refentry[1]
+ |following::colophon[1]
+ |following::bibliography[parent::article or parent::book or parent::part][1]
+ |following::glossary[parent::article or parent::book or parent::part][1]
+ |following::index[$generate.index != 0]
+ [parent::article or parent::book][1]
+ |following::article[1]
+ |following::setindex[$generate.index != 0][1]
+ |descendant::book[1]
+ |descendant::preface[1]
+ |descendant::chapter[1]
+ |descendant::appendix[1]
+ |descendant::article[1]
+ |descendant::bibliography[parent::article or parent::book][1]
+ |descendant::glossary[parent::article or parent::book or parent::part][1]
+ |descendant::index[$generate.index != 0]
+ [parent::article or parent::book][1]
+ |descendant::colophon[1]
+ |descendant::setindex[$generate.index != 0][1]
+ |descendant::part[1]
+ |descendant::reference[1]
+ |descendant::refentry[1]
+ |$next-v1
+ |$next-v2)[1]"/>
+
+ <xsl:call-template name="process-chunk">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<!-- ==================================================================== -->
+
+<xsl:template name="make.lots">
+ <xsl:param name="toc.params" select="''"/>
+ <xsl:param name="toc"/>
+
+ <xsl:variable name="lots">
+ <xsl:if test="contains($toc.params, 'toc')">
+ <xsl:copy-of select="$toc"/>
+ </xsl:if>
+
+ <xsl:if test="contains($toc.params, 'figure')">
+ <xsl:choose>
+ <xsl:when test="$chunk.separate.lots != '0'">
+ <xsl:call-template name="make.lot.chunk">
+ <xsl:with-param name="type" select="'figure'"/>
+ <xsl:with-param name="lot">
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'figure'"/>
+ <xsl:with-param name="nodes" select=".//figure"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'figure'"/>
+ <xsl:with-param name="nodes" select=".//figure"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:if test="contains($toc.params, 'table')">
+ <xsl:choose>
+ <xsl:when test="$chunk.separate.lots != '0'">
+ <xsl:call-template name="make.lot.chunk">
+ <xsl:with-param name="type" select="'table'"/>
+ <xsl:with-param name="lot">
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'table'"/>
+ <xsl:with-param name="nodes" select=".//table"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'table'"/>
+ <xsl:with-param name="nodes" select=".//table"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:if test="contains($toc.params, 'example')">
+ <xsl:choose>
+ <xsl:when test="$chunk.separate.lots != '0'">
+ <xsl:call-template name="make.lot.chunk">
+ <xsl:with-param name="type" select="'example'"/>
+ <xsl:with-param name="lot">
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'example'"/>
+ <xsl:with-param name="nodes" select=".//example"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'example'"/>
+ <xsl:with-param name="nodes" select=".//example"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:if test="contains($toc.params, 'equation')">
+ <xsl:choose>
+ <xsl:when test="$chunk.separate.lots != '0'">
+ <xsl:call-template name="make.lot.chunk">
+ <xsl:with-param name="type" select="'equation'"/>
+ <xsl:with-param name="lot">
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'equation'"/>
+ <xsl:with-param name="nodes" select=".//equation"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'equation'"/>
+ <xsl:with-param name="nodes" select=".//equation"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:if test="contains($toc.params, 'procedure')">
+ <xsl:choose>
+ <xsl:when test="$chunk.separate.lots != '0'">
+ <xsl:call-template name="make.lot.chunk">
+ <xsl:with-param name="type" select="'procedure'"/>
+ <xsl:with-param name="lot">
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'procedure'"/>
+ <xsl:with-param name="nodes" select=".//procedure[title]"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="list.of.titles">
+ <xsl:with-param name="titles" select="'procedure'"/>
+ <xsl:with-param name="nodes" select=".//procedure[title]"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="string($lots) != ''">
+ <xsl:choose>
+ <xsl:when test="$chunk.tocs.and.lots != 0 and not(parent::*)">
+ <xsl:call-template name="write.chunk">
+ <xsl:with-param name="filename">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir" select="$base.dir"/>
+ <xsl:with-param name="base.name">
+ <xsl:call-template name="dbhtml-dir"/>
+ <xsl:apply-templates select="." mode="recursive-chunk-filename">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ <xsl:text>-toc</xsl:text>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="content">
+ <xsl:call-template name="chunk-element-content">
+ <xsl:with-param name="prev" select="/foo"/>
+ <xsl:with-param name="next" select="/foo"/>
+ <xsl:with-param name="nav.context" select="'toc'"/>
+ <xsl:with-param name="content">
+ <xsl:if test="$chunk.tocs.and.lots.has.title != 0">
+ <h1>
+ <xsl:apply-templates select="." mode="object.title.markup"/>
+ </h1>
+ </xsl:if>
+ <xsl:copy-of select="$lots"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="quiet" select="$chunk.quietly"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$lots"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="make.lot.chunk">
+ <xsl:param name="type" select="''"/>
+ <xsl:param name="lot"/>
+
+ <xsl:if test="string($lot) != ''">
+ <xsl:variable name="filename">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir" select="$base.dir"/>
+ <xsl:with-param name="base.name">
+ <xsl:call-template name="dbhtml-dir"/>
+ <xsl:value-of select="$type"/>
+ <xsl:text>-toc</xsl:text>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="href">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.name">
+ <xsl:call-template name="dbhtml-dir"/>
+ <xsl:value-of select="$type"/>
+ <xsl:text>-toc</xsl:text>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:call-template name="write.chunk">
+ <xsl:with-param name="filename" select="$filename"/>
+ <xsl:with-param name="content">
+ <xsl:call-template name="chunk-element-content">
+ <xsl:with-param name="prev" select="/foo"/>
+ <xsl:with-param name="next" select="/foo"/>
+ <xsl:with-param name="nav.context" select="'toc'"/>
+ <xsl:with-param name="content">
+ <xsl:copy-of select="$lot"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="quiet" select="$chunk.quietly"/>
+ </xsl:call-template>
+ <!-- And output a link to this file -->
+ <div>
+ <xsl:attribute name="class">
+ <xsl:text>ListofTitles</xsl:text>
+ </xsl:attribute>
+ <a href="{$href}">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key">
+ <xsl:choose>
+ <xsl:when test="$type='table'">ListofTables</xsl:when>
+ <xsl:when test="$type='figure'">ListofFigures</xsl:when>
+ <xsl:when test="$type='equation'">ListofEquations</xsl:when>
+ <xsl:when test="$type='example'">ListofExamples</xsl:when>
+ <xsl:when test="$type='procedure'">ListofProcedures</xsl:when>
+ <xsl:otherwise>ListofUnknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ </a>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="in.other.chunk">
+ <xsl:param name="chunk" select="."/>
+ <xsl:param name="node" select="."/>
+
+ <xsl:variable name="is.chunk">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$node"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+<!--
+ <xsl:message>
+ <xsl:text>in.other.chunk: </xsl:text>
+ <xsl:value-of select="name($chunk)"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="name($node)"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$chunk = $node"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$is.chunk"/>
+ </xsl:message>
+-->
+
+ <xsl:choose>
+ <xsl:when test="$chunk = $node">0</xsl:when>
+ <xsl:when test="$is.chunk = 1">1</xsl:when>
+ <xsl:when test="count($node) = 0">0</xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="in.other.chunk">
+ <xsl:with-param name="chunk" select="$chunk"/>
+ <xsl:with-param name="node" select="$node/parent::*"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="count.footnotes.in.this.chunk">
+ <xsl:param name="node" select="."/>
+ <xsl:param name="footnotes" select="$node//footnote"/>
+ <xsl:param name="count" select="0"/>
+
+<!--
+ <xsl:message>
+ <xsl:text>count.footnotes.in.this.chunk: </xsl:text>
+ <xsl:value-of select="name($node)"/>
+ </xsl:message>
+-->
+
+ <xsl:variable name="in.other.chunk">
+ <xsl:call-template name="in.other.chunk">
+ <xsl:with-param name="chunk" select="$node"/>
+ <xsl:with-param name="node" select="$footnotes[1]"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="count($footnotes) = 0">
+ <xsl:value-of select="$count"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$in.other.chunk != 0">
+ <xsl:call-template name="count.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="$node"/>
+ <xsl:with-param name="footnotes"
+ select="$footnotes[position() &gt; 1]"/>
+ <xsl:with-param name="count" select="$count"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$footnotes[1]/ancestor::table
+ |$footnotes[1]/ancestor::informaltable">
+ <xsl:call-template name="count.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="$node"/>
+ <xsl:with-param name="footnotes"
+ select="$footnotes[position() &gt; 1]"/>
+ <xsl:with-param name="count" select="$count"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="count.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="$node"/>
+ <xsl:with-param name="footnotes"
+ select="$footnotes[position() &gt; 1]"/>
+ <xsl:with-param name="count" select="$count + 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="process.footnotes.in.this.chunk">
+ <xsl:param name="node" select="."/>
+ <xsl:param name="footnotes" select="$node//footnote"/>
+
+<!--
+ <xsl:message>process.footnotes.in.this.chunk</xsl:message>
+-->
+
+ <xsl:variable name="in.other.chunk">
+ <xsl:call-template name="in.other.chunk">
+ <xsl:with-param name="chunk" select="$node"/>
+ <xsl:with-param name="node" select="$footnotes[1]"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="count($footnotes) = 0">
+ <!-- nop -->
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$in.other.chunk != 0">
+ <xsl:call-template name="process.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="$node"/>
+ <xsl:with-param name="footnotes"
+ select="$footnotes[position() &gt; 1]"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$footnotes[1]/ancestor::table
+ |$footnotes[1]/ancestor::informaltable">
+ <xsl:call-template name="process.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="$node"/>
+ <xsl:with-param name="footnotes"
+ select="$footnotes[position() &gt; 1]"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="$footnotes[1]"
+ mode="process.footnote.mode"/>
+ <xsl:call-template name="process.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="$node"/>
+ <xsl:with-param name="footnotes"
+ select="$footnotes[position() &gt; 1]"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="process.footnotes">
+ <xsl:variable name="footnotes" select=".//footnote"/>
+ <xsl:variable name="fcount">
+ <xsl:call-template name="count.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="footnotes" select="$footnotes"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+<!--
+ <xsl:message>
+ <xsl:value-of select="name(.)"/>
+ <xsl:text> fcount: </xsl:text>
+ <xsl:value-of select="$fcount"/>
+ </xsl:message>
+-->
+
+ <!-- Only bother to do this if there's at least one non-table footnote -->
+ <xsl:if test="$fcount &gt; 0">
+ <div class="footnotes">
+ <br/>
+ <hr width="100" align="left"/>
+ <xsl:call-template name="process.footnotes.in.this.chunk">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="footnotes" select="$footnotes"/>
+ </xsl:call-template>
+ </div>
+ </xsl:if>
+
+ <!-- FIXME: When chunking, only the annotations actually used
+ in this chunk should be referenced. I don't think it
+ does any harm to reference them all, but it adds
+ unnecessary bloat to each chunk. -->
+ <xsl:if test="$annotation.support != 0 and //annotation">
+ <div class="annotation-list">
+ <div class="annotation-nocss">
+ <p>The following annotations are from this essay. You are seeing
+ them here because your browser doesn’t support the user-interface
+ techniques used to make them appear as ‘popups’ on modern browsers.</p>
+ </div>
+
+ <xsl:apply-templates select="//annotation"
+ mode="annotation-popup"/>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="process.chunk.footnotes">
+ <xsl:variable name="is.chunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+ <xsl:if test="$is.chunk = 1">
+ <xsl:call-template name="process.footnotes"/>
+ </xsl:if>
+</xsl:template>
+
+<!-- ====================================================================== -->
+
+<xsl:template name="chunk">
+ <xsl:param name="node" select="."/>
+ <!-- returns 1 if $node is a chunk -->
+
+ <!-- ==================================================================== -->
+ <!-- What's a chunk?
+
+ The root element
+ appendix
+ article
+ bibliography in article or part or book
+ book
+ chapter
+ colophon
+ glossary in article or part or book
+ index in article or part or book
+ part
+ preface
+ refentry
+ reference
+ sect{1,2,3,4,5} if position()>1 && depth < chunk.section.depth
+ section if position()>1 && depth < chunk.section.depth
+ set
+ setindex
+ -->
+ <!-- ==================================================================== -->
+
+<!--
+ <xsl:message>
+ <xsl:text>chunk: </xsl:text>
+ <xsl:value-of select="name($node)"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$node/@id"/>
+ <xsl:text>)</xsl:text>
+ <xsl:text> csd: </xsl:text>
+ <xsl:value-of select="$chunk.section.depth"/>
+ <xsl:text> cfs: </xsl:text>
+ <xsl:value-of select="$chunk.first.sections"/>
+ <xsl:text> ps: </xsl:text>
+ <xsl:value-of select="count($node/parent::section)"/>
+ <xsl:text> prs: </xsl:text>
+ <xsl:value-of select="count($node/preceding-sibling::section)"/>
+ </xsl:message>
+-->
+
+ <xsl:choose>
+ <xsl:when test="$node/parent::*/processing-instruction('dbhtml')[normalize-space(.) = 'stop-chunking']">0</xsl:when>
+ <xsl:when test="not($node/parent::*)">1</xsl:when>
+
+ <xsl:when test="local-name($node) = 'sect1'
+ and $chunk.section.depth &gt;= 1
+ and ($chunk.first.sections != 0
+ or count($node/preceding-sibling::sect1) &gt; 0)">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+ <xsl:when test="local-name($node) = 'sect2'
+ and $chunk.section.depth &gt;= 2
+ and ($chunk.first.sections != 0
+ or count($node/preceding-sibling::sect2) &gt; 0)">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$node/parent::*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="local-name($node) = 'sect3'
+ and $chunk.section.depth &gt;= 3
+ and ($chunk.first.sections != 0
+ or count($node/preceding-sibling::sect3) &gt; 0)">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$node/parent::*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="local-name($node) = 'sect4'
+ and $chunk.section.depth &gt;= 4
+ and ($chunk.first.sections != 0
+ or count($node/preceding-sibling::sect4) &gt; 0)">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$node/parent::*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="local-name($node) = 'sect5'
+ and $chunk.section.depth &gt;= 5
+ and ($chunk.first.sections != 0
+ or count($node/preceding-sibling::sect5) &gt; 0)">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$node/parent::*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="local-name($node) = 'section'
+ and $chunk.section.depth &gt;= count($node/ancestor::section)+1
+ and ($chunk.first.sections != 0
+ or count($node/preceding-sibling::section) &gt; 0)">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$node/parent::*"/>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test="local-name($node)='preface'">1</xsl:when>
+ <xsl:when test="local-name($node)='chapter'">1</xsl:when>
+ <xsl:when test="local-name($node)='appendix'">1</xsl:when>
+ <xsl:when test="local-name($node)='article'">1</xsl:when>
+ <xsl:when test="local-name($node)='part'">1</xsl:when>
+ <xsl:when test="local-name($node)='reference'">1</xsl:when>
+ <xsl:when test="local-name($node)='refentry'">1</xsl:when>
+ <xsl:when test="local-name($node)='index' and ($generate.index != 0 or count($node/*) > 0)
+ and (local-name($node/parent::*) = 'article'
+ or local-name($node/parent::*) = 'book'
+ or local-name($node/parent::*) = 'part'
+ )">1</xsl:when>
+ <xsl:when test="local-name($node)='bibliography'
+ and (local-name($node/parent::*) = 'article'
+ or local-name($node/parent::*) = 'book'
+ or local-name($node/parent::*) = 'part'
+ )">1</xsl:when>
+ <xsl:when test="local-name($node)='glossary'
+ and (local-name($node/parent::*) = 'article'
+ or local-name($node/parent::*) = 'book'
+ or local-name($node/parent::*) = 'part'
+ )">1</xsl:when>
+ <xsl:when test="local-name($node)='colophon'">1</xsl:when>
+ <xsl:when test="local-name($node)='book'">1</xsl:when>
+ <xsl:when test="local-name($node)='set'">1</xsl:when>
+ <xsl:when test="local-name($node)='setindex'">1</xsl:when>
+ <xsl:when test="local-name($node)='legalnotice'
+ and $generate.legalnotice.link != 0">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ==================================================================== -->
+<xsl:template name="href.target.uri">
+ <xsl:param name="object" select="."/>
+ <xsl:variable name="ischunk">
+ <xsl:call-template name="chunk">
+ <xsl:with-param name="node" select="$object"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:apply-templates mode="chunk-filename" select="$object"/>
+
+ <xsl:if test="$ischunk='0'">
+ <xsl:text>#</xsl:text>
+ <xsl:call-template name="object.id">
+ <xsl:with-param name="object" select="$object"/>
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="href.target">
+ <xsl:param name="context" select="."/>
+ <xsl:param name="object" select="."/>
+ <xsl:param name="toc-context" select="."/>
+ <!-- * If $toc-context contains some node other than the current node, -->
+ <!-- * it means we're processing a link in a TOC. In that case, to -->
+ <!-- * ensure the link will work correctly, we need to take a look at -->
+ <!-- * where the file containing the TOC will get written, and where -->
+ <!-- * the file that's being linked to will get written. -->
+ <xsl:variable name="toc-output-dir">
+ <xsl:if test="not($toc-context = .)">
+ <!-- * Get the $toc-context node and all its ancestors, look down -->
+ <!-- * through them to find the last/closest node to the -->
+ <!-- * toc-context node that has a "dbhtml dir" PI, and get the -->
+ <!-- * directory name from that. That's the name of the directory -->
+ <!-- * to which the current toc output file will get written. -->
+ <xsl:call-template name="dbhtml-dir">
+ <xsl:with-param name="context"
+ select="$toc-context/ancestor-or-self::*[processing-instruction('dbhtml')[contains(.,'dir')]][last()]"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:variable name="linked-file-output-dir">
+ <xsl:if test="not($toc-context = .)">
+ <!-- * Get the current node and all its ancestors, look down -->
+ <!-- * through them to find the last/closest node to the current -->
+ <!-- * node that has a "dbhtml dir" PI, and get the directory name -->
+ <!-- * from that. That's the name of the directory to which the -->
+ <!-- * file that's being linked to will get written. -->
+ <xsl:call-template name="dbhtml-dir">
+ <xsl:with-param name="context"
+ select="ancestor-or-self::*[processing-instruction('dbhtml')[contains(.,'dir')]][last()]"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:variable name="href.to.uri">
+ <xsl:call-template name="href.target.uri">
+ <xsl:with-param name="object" select="$object"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="href.from.uri">
+ <xsl:call-template name="href.target.uri">
+ <xsl:with-param name="object" select="$context"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <!-- * <xsl:message>toc-context: <xsl:value-of select="local-name($toc-context)"/></xsl:message> -->
+ <!-- * <xsl:message>node: <xsl:value-of select="local-name(.)"/></xsl:message> -->
+ <!-- * <xsl:message>context: <xsl:value-of select="local-name($context)"/></xsl:message> -->
+ <!-- * <xsl:message>object: <xsl:value-of select="local-name($object)"/></xsl:message> -->
+ <!-- * <xsl:message>toc-output-dir: <xsl:value-of select="$toc-output-dir"/></xsl:message> -->
+ <!-- * <xsl:message>linked-file-output-dir: <xsl:value-of select="$linked-file-output-dir"/></xsl:message> -->
+ <!-- * <xsl:message>href.to.uri: <xsl:value-of select="$href.to.uri"/></xsl:message> -->
+ <!-- * <xsl:message>href.from.uri: <xsl:value-of select="$href.from.uri"/></xsl:message> -->
+ <xsl:variable name="href.to">
+ <xsl:choose>
+ <!-- * 2007-07-19, MikeSmith: Added the following conditional to -->
+ <!-- * deal with a problem case for links in TOCs. It checks to see -->
+ <!-- * if the output dir that a TOC will get written to is -->
+ <!-- * different from the output dir of the file being linked to. -->
+ <!-- * If it is different, we do not call trim.common.uri.paths. -->
+ <!-- * -->
+ <!-- * Reason why I added that conditional is: I ran into a bug for -->
+ <!-- * this case: -->
+ <!-- * -->
+ <!-- * 1. we are chunking into separate dirs -->
+ <!-- * -->
+ <!-- * 2. output for the TOC is written to current dir, but the file -->
+ <!-- * being linked to is written to some subdir "foo". -->
+ <!-- * -->
+ <!-- * For that case, links to that file in that TOC did not show -->
+ <!-- * the correct path - they omitted the "foo". -->
+ <!-- * -->
+ <!-- * The cause of that problem was that the trim.common.uri.paths -->
+ <!-- * template[1] was being called under all conditions. But it's -->
+ <!-- * apparent that we don't want to call trim.common.uri.paths in -->
+ <!-- * the case where a linked file is being written to a different -->
+ <!-- * directory than the TOC that contains the link, because doing -->
+ <!-- * so will cause a necessary (not redundant) directory-name -->
+ <!-- * part of the link to get inadvertently trimmed, resulting in -->
+ <!-- * a broken link to that file. Thus, added the conditional. -->
+ <!-- * -->
+ <!-- * [1] The purpose of the trim.common.uri.paths template is to -->
+ <!-- * prevent cases where, if we didn't call it, we end up with -->
+ <!-- * unnecessary, redundant directory names getting output; for -->
+ <!-- * example, "foo/foo/refname.html". -->
+ <xsl:when test="not($toc-output-dir = $linked-file-output-dir)">
+ <xsl:value-of select="$href.to.uri"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="trim.common.uri.paths">
+ <xsl:with-param name="uriA" select="$href.to.uri"/>
+ <xsl:with-param name="uriB" select="$href.from.uri"/>
+ <xsl:with-param name="return" select="'A'"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="href.from">
+ <xsl:call-template name="trim.common.uri.paths">
+ <xsl:with-param name="uriA" select="$href.to.uri"/>
+ <xsl:with-param name="uriB" select="$href.from.uri"/>
+ <xsl:with-param name="return" select="'B'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="depth">
+ <xsl:call-template name="count.uri.path.depth">
+ <xsl:with-param name="filename" select="$href.from"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="href">
+ <xsl:call-template name="copy-string">
+ <xsl:with-param name="string" select="'../'"/>
+ <xsl:with-param name="count" select="$depth"/>
+ </xsl:call-template>
+ <xsl:value-of select="$href.to"/>
+ </xsl:variable>
+ <!--
+ <xsl:message>
+ <xsl:text>In </xsl:text>
+ <xsl:value-of select="name(.)"/>
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="$href.from"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$depth"/>
+ <xsl:text>) </xsl:text>
+ <xsl:value-of select="name($object)"/>
+ <xsl:text> href=</xsl:text>
+ <xsl:value-of select="$href"/>
+ </xsl:message>
+ -->
+ <xsl:value-of select="$href"/>
+</xsl:template>
+
+<!-- Returns the complete olink href value if found -->
+<!-- Must take into account any dbhtml dir of the chunk containing the olink -->
+<xsl:template name="make.olink.href">
+ <xsl:param name="olink.key" select="''"/>
+ <xsl:param name="target.database"/>
+
+ <xsl:if test="$olink.key != ''">
+ <xsl:variable name="target.href" >
+ <xsl:for-each select="$target.database" >
+ <xsl:value-of select="key('targetptr-key', $olink.key)/@href" />
+ </xsl:for-each>
+ </xsl:variable>
+
+ <!-- an olink starting point may be in a subdirectory, so need
+ the "from" reference point to compute a relative path -->
+
+ <xsl:variable name="from.href">
+ <xsl:call-template name="olink.from.uri">
+ <xsl:with-param name="target.database" select="$target.database"/>
+ <xsl:with-param name="object" select="."/>
+ <xsl:with-param name="object.targetdoc" select="$current.docid"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- If the from.href has directory path, then must "../" upward
+ to document level -->
+ <xsl:variable name="upward.from.path">
+ <xsl:call-template name="upward.path">
+ <xsl:with-param name="path" select="$from.href"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="targetdoc">
+ <xsl:value-of select="substring-before($olink.key, '/')"/>
+ </xsl:variable>
+
+ <!-- Does the target database use a sitemap? -->
+ <xsl:variable name="use.sitemap">
+ <xsl:choose>
+ <xsl:when test="$target.database//sitemap">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+
+ <!-- Get the baseuri for this targetptr -->
+ <xsl:variable name="baseuri" >
+ <xsl:choose>
+ <!-- Does the database use a sitemap? -->
+ <xsl:when test="$use.sitemap != 0" >
+ <xsl:choose>
+ <!-- Was current.docid parameter set? -->
+ <xsl:when test="$current.docid != ''">
+ <!-- Was it found in the database? -->
+ <xsl:variable name="currentdoc.key" >
+ <xsl:for-each select="$target.database" >
+ <xsl:value-of select="key('targetdoc-key',
+ $current.docid)/@targetdoc" />
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$currentdoc.key != ''">
+ <xsl:for-each select="$target.database" >
+ <xsl:call-template name="targetpath" >
+ <xsl:with-param name="dirnode"
+ select="key('targetdoc-key', $current.docid)/parent::dir"/>
+ <xsl:with-param name="targetdoc" select="$targetdoc"/>
+ </xsl:call-template>
+ </xsl:for-each >
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>Olink error: cannot compute relative </xsl:text>
+ <xsl:text>sitemap path because $current.docid '</xsl:text>
+ <xsl:value-of select="$current.docid"/>
+ <xsl:text>' not found in target database.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>Olink warning: cannot compute relative </xsl:text>
+ <xsl:text>sitemap path without $current.docid parameter</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- In either case, add baseuri from its document entry-->
+ <xsl:variable name="docbaseuri">
+ <xsl:for-each select="$target.database" >
+ <xsl:value-of select="key('targetdoc-key', $targetdoc)/@baseuri" />
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="$docbaseuri != ''" >
+ <xsl:value-of select="$docbaseuri"/>
+ </xsl:if>
+ </xsl:when>
+ <!-- No database sitemap in use -->
+ <xsl:otherwise>
+ <!-- Just use any baseuri from its document entry -->
+ <xsl:variable name="docbaseuri">
+ <xsl:for-each select="$target.database" >
+ <xsl:value-of select="key('targetdoc-key', $targetdoc)/@baseuri" />
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="$docbaseuri != ''" >
+ <xsl:value-of select="$docbaseuri"/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- Form the href information -->
+ <xsl:if test="not(contains($baseuri, ':'))">
+ <!-- if not an absolute uri, add upward path from olink chunk -->
+ <xsl:value-of select="$upward.from.path"/>
+ </xsl:if>
+
+ <xsl:if test="$baseuri != ''">
+ <xsl:value-of select="$baseuri"/>
+ <xsl:if test="substring($target.href,1,1) != '#'">
+ <!--xsl:text>/</xsl:text-->
+ </xsl:if>
+ </xsl:if>
+ <!-- optionally turn off frag for PDF references -->
+ <xsl:if test="not($insert.olink.pdf.frag = 0 and
+ translate(substring($baseuri, string-length($baseuri) - 3),
+ 'PDF', 'pdf') = '.pdf'
+ and starts-with($target.href, '#') )">
+ <xsl:value-of select="$target.href"/>
+ </xsl:if>
+ </xsl:if>
+</xsl:template>
+
+<!-- Computes "../" to reach top -->
+<xsl:template name="upward.path">
+ <xsl:param name="path" select="''"/>
+ <xsl:choose>
+ <!-- Don't bother with absolute uris -->
+ <xsl:when test="contains($path, ':')"/>
+ <xsl:when test="starts-with($path, '/')"/>
+ <xsl:when test="contains($path, '/')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="upward.path">
+ <xsl:with-param name="path" select="substring-after($path, '/')"/>
+ </xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="html.head">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:variable name="this" select="."/>
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+
+ <head>
+ <xsl:call-template name="system.head.content"/>
+ <xsl:call-template name="head.content"/>
+
+ <xsl:if test="$home">
+ <link rel="home">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$home"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="$home"
+ mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:if>
+
+ <xsl:if test="$up">
+ <link rel="up">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$up"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="$up" mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:if>
+
+ <xsl:if test="$prev">
+ <link rel="prev">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="$prev" mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:if>
+
+ <xsl:if test="$next">
+ <link rel="next">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="$next" mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:if>
+
+ <xsl:if test="$html.extra.head.links != 0">
+ <xsl:for-each select="//part
+ |//reference
+ |//preface
+ |//chapter
+ |//article
+ |//refentry
+ |//appendix[not(parent::article)]|appendix
+ |//glossary[not(parent::article)]|glossary
+ |//index[not(parent::article)]|index">
+ <link rel="{local-name(.)}">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="context" select="$this"/>
+ <xsl:with-param name="object" select="."/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="." mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:for-each>
+
+ <xsl:for-each select="section|sect1|refsection|refsect1">
+ <link>
+ <xsl:attribute name="rel">
+ <xsl:choose>
+ <xsl:when test="local-name($this) = 'section'
+ or local-name($this) = 'refsection'">
+ <xsl:value-of select="'subsection'"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="'section'"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="context" select="$this"/>
+ <xsl:with-param name="object" select="."/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="." mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:for-each>
+
+ <xsl:for-each select="sect2|sect3|sect4|sect5|refsect2|refsect3">
+ <link rel="subsection">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="context" select="$this"/>
+ <xsl:with-param name="object" select="."/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="." mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ </xsl:for-each>
+ </xsl:if>
+
+ <!-- * if we have a legalnotice and user wants it output as a -->
+ <!-- * separate page and $html.head.legalnotice.link.types is -->
+ <!-- * non-empty, we generate a link or links for each value in -->
+ <!-- * $html.head.legalnotice.link.types -->
+ <xsl:if test="//legalnotice
+ and not($generate.legalnotice.link = 0)
+ and not($html.head.legalnotice.link.types = '')">
+ <xsl:call-template name="make.legalnotice.head.links"/>
+ </xsl:if>
+
+ <xsl:call-template name="user.head.content"/>
+ </head>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="header.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:param name="nav.context"/>
+
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+
+ <xsl:variable name="row1" select="$navig.showtitles != 0"/>
+ <xsl:variable name="row2" select="count($prev) &gt; 0
+ or (count($up) &gt; 0
+ and generate-id($up) != generate-id($home)
+ and $navig.showtitles != 0)
+ or count($next) &gt; 0"/>
+
+ <xsl:if test="$suppress.navigation = '0' and $suppress.header.navigation = '0'">
+ <div class="navheader">
+ <xsl:if test="$row1 or $row2">
+ <table width="100%" summary="Navigation header">
+ <xsl:if test="$row1">
+ <tr>
+ <th colspan="3" align="center">
+ <xsl:apply-templates select="." mode="object.title.markup"/>
+ </th>
+ </tr>
+ </xsl:if>
+
+ <xsl:if test="$row2">
+ <tr>
+ <td width="20%" align="left">
+ <xsl:if test="count($prev)>0">
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'prev'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ <xsl:text>&#160;</xsl:text>
+ </td>
+ <th width="60%" align="center">
+ <xsl:choose>
+ <xsl:when test="count($up) > 0
+ and generate-id($up) != generate-id($home)
+ and $navig.showtitles != 0">
+ <xsl:apply-templates select="$up" mode="object.title.markup"/>
+ </xsl:when>
+ <xsl:otherwise>&#160;</xsl:otherwise>
+ </xsl:choose>
+ </th>
+ <td width="20%" align="right">
+ <xsl:text>&#160;</xsl:text>
+ <xsl:if test="count($next)>0">
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'next'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:if>
+ </table>
+ </xsl:if>
+ <xsl:if test="$header.rule != 0">
+ <hr/>
+ </xsl:if>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="footer.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:param name="nav.context"/>
+
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+
+ <xsl:variable name="row1" select="count($prev) &gt; 0
+ or count($up) &gt; 0
+ or count($next) &gt; 0"/>
+
+ <xsl:variable name="row2" select="($prev and $navig.showtitles != 0)
+ or (generate-id($home) != generate-id(.)
+ or $nav.context = 'toc')
+ or ($chunk.tocs.and.lots != 0
+ and $nav.context != 'toc')
+ or ($next and $navig.showtitles != 0)"/>
+
+ <xsl:if test="$suppress.navigation = '0' and $suppress.footer.navigation = '0'">
+ <div class="navfooter">
+ <xsl:if test="$footer.rule != 0">
+ <hr/>
+ </xsl:if>
+
+ <xsl:if test="$row1 or $row2">
+ <table width="100%" summary="Navigation footer">
+ <xsl:if test="$row1">
+ <tr>
+ <td width="40%" align="left">
+ <xsl:if test="count($prev)>0">
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'prev'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ <xsl:text>&#160;</xsl:text>
+ </td>
+ <td width="20%" align="center">
+ <xsl:choose>
+ <xsl:when test="count($up)&gt;0
+ and generate-id($up) != generate-id($home)">
+ <a accesskey="u">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$up"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'up'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:when>
+ <xsl:otherwise>&#160;</xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td width="40%" align="right">
+ <xsl:text>&#160;</xsl:text>
+ <xsl:if test="count($next)>0">
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'next'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:if>
+
+ <xsl:if test="$row2">
+ <tr>
+ <td width="40%" align="left" valign="top">
+ <xsl:if test="$navig.showtitles != 0">
+ <xsl:apply-templates select="$prev" mode="object.title.markup"/>
+ </xsl:if>
+ <xsl:text>&#160;</xsl:text>
+ </td>
+ <td width="20%" align="center">
+ <xsl:choose>
+ <xsl:when test="$home != . or $nav.context = 'toc'">
+ <a accesskey="h">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$home"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'home'"/>
+ </xsl:call-template>
+ </a>
+ <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">
+ <xsl:text>&#160;|&#160;</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>&#160;</xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">
+ <a accesskey="t">
+ <xsl:attribute name="href">
+ <xsl:apply-templates select="/*[1]"
+ mode="recursive-chunk-filename">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ <xsl:text>-toc</xsl:text>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:attribute>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'nav-toc'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ </td>
+ <td width="40%" align="right" valign="top">
+ <xsl:text>&#160;</xsl:text>
+ <xsl:if test="$navig.showtitles != 0">
+ <xsl:apply-templates select="$next" mode="object.title.markup"/>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:if>
+ </table>
+ </xsl:if>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="navig.content">
+ <xsl:param name="direction" select="next"/>
+ <xsl:variable name="navtext">
+ <xsl:choose>
+ <xsl:when test="$direction = 'prev'">
+ <xsl:call-template name="gentext.nav.prev"/>
+ </xsl:when>
+ <xsl:when test="$direction = 'next'">
+ <xsl:call-template name="gentext.nav.next"/>
+ </xsl:when>
+ <xsl:when test="$direction = 'up'">
+ <xsl:call-template name="gentext.nav.up"/>
+ </xsl:when>
+ <xsl:when test="$direction = 'home'">
+ <xsl:call-template name="gentext.nav.home"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>xxx</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="$navig.graphics != 0">
+ <img>
+ <xsl:attribute name="src">
+ <xsl:value-of select="$navig.graphics.path"/>
+ <xsl:value-of select="$direction"/>
+ <xsl:value-of select="$navig.graphics.extension"/>
+ </xsl:attribute>
+ <xsl:attribute name="alt">
+ <xsl:value-of select="$navtext"/>
+ </xsl:attribute>
+ </img>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$navtext"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<!-- * The following template assumes that the first legalnotice -->
+<!-- * instance found in a document applies to the contents of the -->
+<!-- * entire document. It generates an HTML link in each chunk, back -->
+<!-- * to the file containing the contents of the first legalnotice. -->
+<!-- * -->
+<!-- * Actually, it may generate multiple link instances in each chunk, -->
+<!-- * because it walks through the space-separated list of link -->
+<!-- * types specified in the $html.head.legalnotice.link.types param, -->
+<!-- * popping off link types and generating links for them until it -->
+<!-- * depletes the list. -->
+
+<xsl:template name="make.legalnotice.head.links">
+ <!-- * the following ID is used as part of the legalnotice filename; -->
+ <!-- * we need it in order to construct the filename for use in the -->
+ <!-- * value of the href attribute on the link -->
+
+ <xsl:param name="ln-node" select="(//legalnotice)[1]"/>
+
+ <xsl:param name="linktype">
+ <xsl:choose>
+ <xsl:when test="contains($html.head.legalnotice.link.types, ' ')">
+ <xsl:value-of
+ select="normalize-space(
+ substring-before($html.head.legalnotice.link.types, ' '))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$html.head.legalnotice.link.types"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+ <xsl:param
+ name="remaining.linktypes"
+ select="concat(
+ normalize-space(
+ substring-after($html.head.legalnotice.link.types, ' ')),' ')"/>
+ <xsl:if test="not($linktype = '')">
+
+ <!-- Compute name of legalnotice file (see titlepage.xsl) -->
+ <xsl:variable name="file">
+ <xsl:call-template name="ln.or.rh.filename">
+ <xsl:with-param name="node" select="$ln-node"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <link rel="{$linktype}">
+ <xsl:attribute name="href">
+ <xsl:value-of select="$file"/>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:apply-templates select="(//legalnotice)[1]"
+ mode="object.title.markup.textonly"/>
+ </xsl:attribute>
+ </link>
+ <xsl:call-template name="make.legalnotice.head.links">
+ <!-- * pop the next value off the list of link types -->
+ <xsl:with-param
+ name="linktype"
+ select="substring-before($remaining.linktypes, ' ')"/>
+ <!-- * remove the link type from the list of remaining link types -->
+ <xsl:with-param
+ name="remaining.linktypes"
+ select="substring-after($remaining.linktypes, ' ')"/>
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+<xsl:template name="chunk-element-content">
+ <xsl:param name="prev"/>
+ <xsl:param name="next"/>
+ <xsl:param name="nav.context"/>
+ <xsl:param name="content">
+ <xsl:apply-imports/>
+ </xsl:param>
+
+ <xsl:call-template name="user.preroot"/>
+
+ <html>
+ <xsl:call-template name="html.head">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ </xsl:call-template>
+
+ <body>
+ <xsl:call-template name="body.attributes"/>
+ <xsl:call-template name="user.header.navigation"/>
+
+ <xsl:call-template name="header.navigation">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="nav.context" select="$nav.context"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="user.header.content"/>
+
+ <xsl:copy-of select="$content"/>
+
+ <xsl:call-template name="user.footer.content"/>
+
+ <xsl:call-template name="footer.navigation">
+ <xsl:with-param name="prev" select="$prev"/>
+ <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="nav.context" select="$nav.context"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="user.footer.navigation"/>
+ </body>
+ </html>
+ <xsl:value-of select="$chunk.append"/>
+</xsl:template>
+
+<!-- ==================================================================== -->
+<xsl:template name="generate.manifest">
+ <xsl:param name="node" select="/"/>
+ <xsl:call-template name="write.text.chunk">
+ <xsl:with-param name="filename">
+ <xsl:if test="$manifest.in.base.dir != 0">
+ <xsl:value-of select="$base.dir"/>
+ </xsl:if>
+ <xsl:value-of select="$manifest"/>
+ </xsl:with-param>
+ <xsl:with-param name="method" select="'text'"/>
+ <xsl:with-param name="content">
+ <xsl:apply-templates select="$node" mode="enumerate-files"/>
+ </xsl:with-param>
+ <xsl:with-param name="encoding" select="$chunker.output.encoding"/>
+ </xsl:call-template>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="dbhtml-dir">
+ <xsl:param name="context" select="."/>
+ <!-- directories are now inherited from previous levels -->
+ <xsl:variable name="ppath">
+ <xsl:if test="$context/parent::*">
+ <xsl:call-template name="dbhtml-dir">
+ <xsl:with-param name="context" select="$context/parent::*"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:variable name="path">
+ <xsl:call-template name="pi.dbhtml_dir">
+ <xsl:with-param name="node" select="$context"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$path = ''">
+ <xsl:if test="$ppath != ''">
+ <xsl:value-of select="$ppath"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$ppath != ''">
+ <xsl:value-of select="$ppath"/>
+ <xsl:if test="substring($ppath, string-length($ppath), 1) != '/'">
+ <xsl:text>/</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:value-of select="$path"/>
+ <xsl:text>/</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/usermanual/chunk-utf8.xsl b/docs/usermanual/chunk-utf8.xsl
new file mode 100644
index 0000000000..5d979ac711
--- /dev/null
+++ b/docs/usermanual/chunk-utf8.xsl
@@ -0,0 +1,52 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ version="1.0"
+ exclude-result-prefixes="exsl">
+
+<!-- ********************************************************************
+ $Id: chunk.xsl 6910 2007-06-28 23:23:30Z xmldoc $
+ ********************************************************************
+
+ This file is part of the XSL DocBook Stylesheet distribution.
+ See ../README or http://docbook.sf.net/release/xsl/current/ for
+ copyright and other information.
+
+ ******************************************************************** -->
+
+<!-- ==================================================================== -->
+
+<!-- First import the non-chunking templates that format elements
+ within each chunk file. In a customization, you should
+ create a separate non-chunking customization layer such
+ as mydocbook.xsl that imports the original docbook.xsl and
+ customizes any presentation templates. Then your chunking
+ customization should import mydocbook.xsl instead of
+ docbook.xsl. -->
+<xsl:import href="docbook-utf8.xsl"/>
+
+<!-- chunk-common.xsl contains all the named templates for chunking.
+ In a customization file, you import chunk-common.xsl, then
+ add any customized chunking templates of the same name.
+ They will have import precedence over the original
+ chunking templates in chunk-common.xsl. -->
+<xsl:import href="chunk-common.xsl"/>
+
+<!-- The manifest.xsl module is no longer imported because its
+ templates were moved into chunk-common and chunk-code -->
+
+<!-- chunk-code.xsl contains all the chunking templates that use
+ a match attribute. In a customization it should be referenced
+ using <xsl:include> instead of <xsl:import>, and then add
+ any customized chunking templates with match attributes. But be sure
+ to add a priority="1" to such customized templates to resolve
+ its conflict with the original, since they have the
+ same import precedence.
+
+ Using xsl:include prevents adding another layer
+ of import precedence, which would cause any
+ customizations that use xsl:apply-imports to wrongly
+ apply the chunking version instead of the original
+ non-chunking version to format an element. -->
+<xsl:include href="chunk-code.xsl"/>
+
+</xsl:stylesheet>
diff --git a/docs/usermanual/docbook-utf8.xsl b/docs/usermanual/docbook-utf8.xsl
new file mode 100644
index 0000000000..20612834fc
--- /dev/null
+++ b/docs/usermanual/docbook-utf8.xsl
@@ -0,0 +1,10 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"/>
+<xsl:output method="html"
+ encoding="UTF-8"
+ indent="no"/>
+
+</xsl:stylesheet>
diff --git a/docs/usermanual/embworld-oe.dbk b/docs/usermanual/embworld-oe.dbk
new file mode 100644
index 0000000000..c75d32fa1c
--- /dev/null
+++ b/docs/usermanual/embworld-oe.dbk
@@ -0,0 +1,888 @@
+<BASE HREF="/home/vollmann/winuser/conferences/embworld/embworld-oe.dbk">
+
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<!-- $Id$ -->
+
+<article lang="en">
+ <articleinfo>
+ <date>First version January 3, 2006</date>
+ <title>OpenEmbedded for Deep Embedded Systems</title>
+
+ <author>
+ <firstname>Detlef</firstname>
+ <surname>Vollmann</surname>
+ <affiliation>
+ <orgname>vollmann engineering gmbh</orgname>
+ <address>
+<pob>P.O. Box 5423</pob>
+<city>6000 Luzern 5</city>
+<country>Switzerland</country>
+<email>dv@vollmann.ch</email>
+ </address>
+ </affiliation>
+ </author>
+
+ <copyright>
+ <year>2006</year>
+ <holder>Detlef Vollmann</holder>
+ </copyright>
+ </articleinfo>
+
+<abstract>
+<title>Abstract</title>
+ <para>
+OpenEmbedded has won the TuxMobil GNU/Linux
+Award 2005 that honors Free Software projects, which improve Linux
+for mobile computers. OpenEmbedded is a Linux distribution similar
+to Debian that has its roots in the PDA domain. It is today pretty
+popular among Linux fans who own Zaurus', iPAQs or similar PDAs.
+But OpenEmbedded is targeted at all kinds of embedded Linux systems.
+It features a unique cross build environment that generally allows
+pretty easy adaption of OpenSource software for cross compilation even
+if the original software authors didn't think about cross builds.
+That build environment also allows for easy definition and builds of
+complete distributions for embedded systems.
+ </para>
+
+ <para>
+OpenEmbedded also provides a lightweight and fine-grained package
+system that enables easy installation of new software packages into
+a running system as well as updates of existing software.
+These features makes OpenEmbedded a first choice for the creation
+of embedded Linux systems.
+ </para>
+</abstract>
+
+
+<sect1 label="1" id="introduction">
+<title>Introduction</title>
+ <para>
+When Sharp launched its Zaurus PDA, it came with a Linux based PDA system.
+But not all users were happy with the original Sharp configuration and
+so the OpenZaurus project was created to share the modifications.
+Later, OpenZaurus moved from modifications to the original Sharp image
+to a complete distribution based on Debian.
+ </para>
+
+ <para>
+But the build system for Debian was not really suited for small embedded
+systems and so OpenEmbedded was founded with a build system inspired
+from Gentoo's <command>portage</command>. As package system iPKG was used, which is
+closely related to Debian's <command>dpkg</command>, but more tuned for small embedded
+devices.
+Later, distributions for other PDAs like Compaq's iPAQs or the Siemens
+SimPad moved to the OpenEmbedded build and package system.
+A very interesting distribution based on OpenEmbedded is OpenSLUG
+for LinkSys' NSLU device. The NSLU is not a PDA but originally
+an NAS storage system.
+ </para>
+
+ <para>
+Today, OpenEmbedded describes itself as a "set of recipes and metadata
+to build Linux distributions for embedded devices with the BitBake
+build system".
+ </para>
+
+ <para>
+OpenEmbedded provides three major benefits for building a distribution
+for an embedded system:
+ <itemizedlist mark='bullet'>
+<listitem>
+ <para>
+ a build system that builds everything
+ </para>
+</listitem>
+<listitem>
+ <para>
+ recipes and metadata to build more that 1000 different programs
+ and libraries
+ </para>
+</listitem>
+<listitem>
+ <para>
+ a binary package system that provides simple configuration and update
+ mechanisms
+ </para>
+</listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+The remainder of this article focuses on the use of OpenEmbedded
+for deep embedded systems like the NSLU opposed to PDA like systems
+like the SimPad.
+ </para>
+
+</sect1>
+
+<sect1 id="overview">
+<title>Overview</title>
+ <sect2>
+ <title>Build System</title>
+ <para>
+Like any build tool (make, ant, jam), the OpenEmbedded build tool
+BitBake controls how to build things and the build dependencies.
+But unlike single project tools like <command>make</command> it is not based on one makefile
+or a closed set of inter-dependent makefiles, but collects and manages
+an open set of largely independent build descriptions (package recipes) and
+builds them in proper order.
+ </para>
+
+ <para>
+The OpenEmbedded set of package recipes include not only recipes for
+target packages, but also recipes for tools on the host required to build
+those target packages. So, OpenEmbedded builds a complete toolchain
+for cross-building before building the target packages and image.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Metadata</title>
+ <para>
+The metadata from which an OpenEmbedded distribution is built comes in
+three different forms:
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+ configuration files
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ class descriptions
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ package recipes
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+The configuration files provide general variable definitions to control
+the behaviour of BitBake and how things are generally built in
+OpenEmbedded. This includes the build system's directory structure,
+version preferences, source code mirror sites as well as specific build
+options (e.g. the default optimizing level).
+ </para>
+
+ <para>
+The class descriptions define common procedures to build things, like
+applying the auto-tools for configuration, collecting runtime library
+dependencies or building native build tools for the host.
+These class descriptions are sometimes quite specific, e.g. there exists a
+class to remove NLS parts of a package if NLS support is not wanted.
+ </para>
+
+ <para>
+The package recipes provide the information how to build a specific
+piece of software &dash; a build tool for the host, a library or a
+target application. Such recipes provide the information how to get
+and how to build a package and dependencies on other packages.
+ </para>
+
+ <para>
+Meta package recipes don't build a specific package, but mainly consist
+of dependency descriptions to build a complete set of packages, often
+a base image for a specific distribution.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Package System</title>
+ <para>
+The iPKG package system is (deliberately) very similar to Debian's <command>dpkg</command>,
+but is tuned for small systems. It contains the package data that is
+simply copied to the target system, metadata and optionally
+installation scripts. The metadata includes the (run-time) dependencies
+of the package.
+ </para>
+
+ <para>
+Package systems are mainly for the benefit of users of computer-like
+devices who want to install their own specific set of software.
+Such package systems provide two major benefits:
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+ easy definition of an initial image, often called 'base system'
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ controlled installation, upgrade and de-installation of packages
+ on the running system
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+These benefits also apply to (deep) embedded systems.
+Different configurations are just different sets of packages. They can
+even share the already built packages from existing configurations.
+ </para>
+
+ <para>
+In traditional embedded systems for an update first a new
+complete image is built that then requires on the target a shutdown,
+a complete re-flash of the image and finally a restart of the system.
+Contrasting to that image-based process, a package system allows easy
+updates on a live, running system that
+even allows to have some processes running the old version (though it
+is already de-installed) while other processes already run the new version.
+ </para>
+ </sect2>
+</sect1>
+
+<sect1>
+ <title>Working with OpenEmbedded</title>
+ <para>
+To build a system based on OpenEmbedded, normally a small set of
+configuration files is needed:
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+ <filename>local.conf</filename> to define what to build and where to get and put it
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ a machine configuration to describe the hardware
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ a distribution configuration to define global properties of the system
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+
+ <para>
+Apart from that, typically a meta package for the base image is required.
+And then of course the recipes for specific packages, e.g. a kernel
+package, packages for additional Open Source applications and
+packages for project specific software.
+ </para>
+
+ <sect2>
+ <title><filename>local.conf</filename></title>
+ <para>
+The local configuration file <filename>local.conf</filename> defines the local directory
+structure, the local build environment, some project specific preferences
+and other properties specific to the build system.
+ </para>
+ <para>
+A very simple and short <filename>local.conf</filename> could look like this:
+<programlisting>
+# DL_DIR specifies the download target directory
+DL_DIR = "${PROJECT}/oesrc"
+
+# BBFILES specifies the full set of package recipes to be parsed by BitBake
+BBFILES = "${PROJECT}/org.openembedded.dev/packages/*/*.bb"
+
+# BBMASK specifies which package recipes to ignore from the full set above
+BBMASK = ""
+
+# ASSUME_PROVIDED defines what local host build tools should
+# not be built by BitBake but should be used from the local
+# build host's installation
+ASSUME_PROVIDED = "flex-native"
+
+# For some tools exist different alternative implementations,
+# e.g. for the C runtime library there exist glibc and uClibc.
+# PREFERRED_PROVIDERS defines which specific package to build
+PREFERRED_PROVIDERS = "virtual/kernel:mymach24"
+PREFERRED_PROVIDERS += " virtual/libc:glibc"
+
+# For many packages exist several different recipes.
+# PREFERRED_VERSION defines which specific recipe to use
+PREFERRED_VERSION_gcc-cross = "3.3.2"
+
+# MACHINE defines for which hardware to build
+MACHINE = "mymach"
+
+# DISTRO defines which distribution to build
+DISTRO = "mymini"
+
+# IMAGE_FSTYPES defines which kind of images to create
+IMAGE_FSTYPES = "jffs2 tar"
+
+# For a number of package recipe versions the source code is fetched directly
+# from the original CVS repository head. To make sure that for separate
+# builds this fetches the same source, use CVSDATE.
+CVSDATE = "20051122"
+
+# For some packages specific CVS versions are provided as tarballs.
+# CVS_TARBALL_STASH defines where to find them.
+CVS_TARBALL_STASH = "http://www.oesources.org/source/current/"
+
+# For a number of software sets it is possible to specify local
+# mirror sites where to get the software.
+export GNU_MIRROR = "http://mirror.switch.ch/ftp/mirror/gnu"
+
+# URL for own stuff
+MY_URL = "http://myserver/projects/oe"
+
+</programlisting>
+
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Machine Configuration</title>
+ <para>
+The machine configuration file <filename>conf/machine/mymach.conf</filename> specifies
+the hardware for which a distribution is built. This includes mainly
+the CPU architecture, specific hardware kernel modules and some size
+specifications.
+ </para>
+ <para>
+A simple example could look like this:
+<programlisting>
+#@TYPE: Machine
+#@NAME: My own hardware
+#@DESCRIPTION: Machine configuration for my system XYZ
+
+# the target CPU architecture
+TARGET_ARCH = "arm"
+
+# all compatible binary architectures
+IPKG_ARCHS = "all arm armv4 armv4t armv5e armv5te ipaqpxa mymach"
+
+# some packages for which we know they work best for our hardware
+PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+PREFERRED_PROVIDER_virtual/kernel ?= "mykernel24"
+
+# some packages we always need for this hardware
+BOOTSTRAP_EXTRA_DEPENDS = "virtual/kernel sdmmc-support altboot"
+BOOTSTRAP_EXTRA_RDEPENDS = "kernel sdmmc-support altboot"
+BOOTSTRAP_EXTRA_RDEPENDS += " kernel-module-usbdcore kernel-module-usbdmonitor"
+
+# autoload on boot
+module_autoload_mydriver = "mydriver"
+
+# compile with XScale optimization
+include conf/machine/tune-xscale.conf
+
+# some specific settings
+SERIAL_CONSOLE = "115200 ttyS0"
+ROOT_FLASH_SIZE = "16"
+GUI_MACHINE_CLASS = "smallscreen"
+
+</programlisting>
+
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Distribution Configuration</title>
+ <para>
+The distribution configuration file <filename>conf/distro/mymini.conf</filename> specifies
+global configuration parameters for the whole software system on the
+target. The main definition here is the OS setting, but included here are
+also internationalization settings or a specific target filesystem layout.
+ </para>
+ <para>
+A simple example could look like this:
+<programlisting>
+#@TYPE: Distribution
+#@NAME: MyMini
+#@DESCRIPTION: A minimal base system for my system
+
+# some general descriptions
+DISTRO = "MyMini"
+DISTRO_NAME = "My Minimal Embedded Linux"
+DISTRO_VERSION = "1.0"
+DISTRO_TYPE = "release"
+
+# feed definitions for ipkg
+FEED_URIS += " \
+ base##${MY_URL}/${DISTRO_VERSION}/feed/base \
+ updates##${MY_URL}/${DISTRO_VERSION}/feed/updates"
+
+# base system
+TARGET_FPU = "soft"
+TARGET_OS = "linux-uclibc"
+
+# specific software versions
+PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+PREFERRED_VERSION_xserver-kdrive ?= "20050207"
+
+# i18n
+USE_NLS = "yes"
+
+# distro is based on udev
+UDEV_DEVFS_RULES = "1"
+
+# distro is ipkg based
+INHERIT += " package_ipk"
+
+</programlisting>
+<!-- note MY_URL here -->
+
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>An Image Package</title>
+ <para>
+The image package recipe <filename>packages/meta/my-image.bb</filename>
+builds the base system
+for the root filesystem image. It mainly defines the packages that
+are included in the base image.
+ </para>
+ <para>
+A simple example could look like this:
+<programlisting>
+# general description data
+DESCRIPTION = "Core packages for a minimal installation for My"
+MAINTAINER = "Me &lt;me@myname.org>"
+LICENSE = "GPL"
+PR = "r0"
+
+MY_PACKAGES = "base-files-my \
+ busybox-my initscripts-colibri netbase \
+ sysvinit usbutils modutils-initscripts \
+ my-modules24 e2fsprogs-mke2fs diffutils ipkg"
+
+# binary architecture for ipkg
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+# name
+export IMAGE_BASENAME = "my"
+
+# which languages to include
+export IMAGE_LINGUAS = ""
+
+# which packages to include
+export IPKG_INSTALL = ${MY_PACKAGES}
+
+# give the packages again so the build systems knows they must be built
+DEPENDS = ${MY_PACKAGES}
+
+# inherit the class that finally builds the image
+inherit image_ipk
+
+</programlisting>
+
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>A Kernel Package</title>
+ <para>
+The kernel is typically specific to a hardware, so usually an own kernel
+package is required.
+ </para>
+ <para>
+A simple example <filename>packages/linux/mymach24_2.4.29-mymach</filename>
+could look like this:
+<programlisting>
+DESCRIPTION = "Linux kernel 2.4 for My hardware"
+MAINTAINER = "Me &lt;me@myname.org>"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r0"
+
+# compute the kernel version strings
+KV = "${@bb.data.getVar('PV',d,True).split('-')[0]}"
+MYV = "${@bb.data.getVar('PV',d,True).split('-')[1]}"
+
+# object suffix dependent on kernel version
+KERNEL_OBJECT_SUFFIX = ".o"
+
+# where to get the base kernel
+SRC_URI = "${KERNEL_MIRROR}/v2./linux-${KV}.tar.bz2"
+
+# where to get my specific patches
+SRC_URI_append = " ${MY_URL}/patches/linux-${KV}-${MYV}.patch.gz;patch=1"
+
+# specify the source directory
+# (only necessary where it differs from the package name)
+S = "${WORKDIR}/linux-${KV}"
+
+# inherit the class that actually does the work building kernels
+inherit kernel
+
+# this not only builds the kernel itself but also the modules
+PROVIDES += " my-modules24"
+PACKAGES += " my-modules24"
+
+# tell the packager where the files for the modules package are found
+FILES_my-modules24 = "/lib/modules"
+
+# which machines are supported by this kernel
+COMPATIBLE_HOST = "arm.*-linux"
+
+# nothing special is required to build the kernel, as it comes with
+# full support for cross compilation
+EXTRA_OEMAKE = ""
+
+# the actual configure command
+# oe_runmake just runs make
+do_configure() {
+ oe_runmake mymach_defconfig
+}
+
+# clean up after module installation
+do_install_append() {
+ rm -f ${D}/lib/modules/*/build
+ rm -f ${D}/lib/modules/*/source
+}
+
+</programlisting>
+Some details for this package recipe are explained in the next section.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>A Package for an Open Source Project</title>
+ <para>
+Though OpenEmbedded comes with recipes for many Open Source projects,
+sometimes a package is required for which no recipe exists yet.
+But providing a recipe for that project is generally quite easy.
+
+Most Open Source projects are based on the configure mechanism to build.
+<command>configure</command> is a script to collect information about
+the build environment
+and creates makefiles based on that information.
+ </para>
+ <para>
+But the configure script itself is normally generated through the auto-tools.
+The normal OpenEmbedded build process for such a project is to rebuild the
+configure script based on the ultimate source <filename>Makefile.am</filename>
+and <filename>configure.ac</filename>.
+ </para>
+ <para>
+So, a simple package file for the <command>at</command> tool looks like this:
+<programlisting>
+DESCRIPTION = "Delayed job execution and batch processing."
+SECTION = "base"
+LICENSE="BSD"
+
+PR = "r1"
+
+DEPENDS = "flex-native"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/a/at/at_${PV}-11.tar.gz \
+ file://configure.patch;patch=1 \
+ file://nonrootinstall.patch;patch=1"
+
+inherit autotools
+
+</programlisting>
+ </para>
+ <para>
+That's all. Here a walkthrough for this recipe:
+The first three lines in this package file are just general information
+(that are included into the resulting binary package).
+ </para>
+ <para>
+<varname>PR</varname> defines the revision and should be incremented
+on each change to the package recipe.
+ </para>
+ <para>
+The <varname>DEPENDS</varname> definition states that the building of
+this package depends
+on an existing flex installation on the host (therefore the
+<filename>-native</filename>).
+ </para>
+ <para>
+The <varname>SRC_URI</varname> defines the place of the source files
+to be downloaded:
+the main distribution tarball with the URL where to find it, and two
+specific patches to build this package with OpenEmbedded.
+These patches are located together with the package file.
+The <varname>patch=1</varname> specifies that this file is to be
+applied as patch with <option>-p1</option>.
+The <varname>${PV}</varname> in the tarball URL is expanded from the
+recipe version
+number. And the recipe version number is taken from the file name
+of the recipe. So, if this recipe is provided as
+<filename>packages/at/at_3.1.8.bb</filename>,
+<varname>${PV}</varname> is expanded to <varname>3.1.8</varname>.
+ </para>
+ <para>
+The next line essentially does all the work: it inherits the
+<classname>autotools</classname>
+class that adds the necessary step (task) to rebuild the configure script.
+ </para>
+ <para>
+And that's all. The <classname>base</classname> class that is inherited
+by all packages
+defines all the other tasks to build the binary package:
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+ <function>do_fetch()</function>, which does the download
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_unpack()</function>, which builds the working directory
+ and unpacks all files
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_patch()</function>, which applies the patches
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_configure()</function>, which runs the configure script
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_compile()</function>, which basically calls make
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_stage()</function>, which installs library and header
+ files in the cross build environment for subsequent builds
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_install()</function>, which installs the built files
+ into a special packaging area
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <function>do_package()</function>, which collects the files from
+ the packaging area and creates (possibly several) packages
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+All these tasks can be overwritten: in the kernel package example above
+the <function>do_configure()</function> is redefined to run make with
+a special target, and in the inherited <classname>autotools</classname> class
+for this example the <function>do_configure()</function> is redefined to
+add a <command>autoreconfig</command>
+run to rebuild the configure script before the actual configure.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Own Software</title>
+ <para>
+For own software projects it is possible also to use the
+<command>auto</command>-tools and <command>configure</command> to create
+the makefiles. But this requires some familiarity
+with those tools and is not really necessary. A standard makefile will
+suffice, if some simple rules are observed:
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+ don't use fix pathnames for include, library and install directories,
+ use variables for those directories.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ use variables for all building commands (including <command>ar</command>
+and <command>nm</command>, if used).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ provide an <varname>install</varname> target.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+So, a makefile for the standard "Hello, World" example would look like this:
+<programlisting>
+CC = arm-linux-gcc
+LD = arm-linux-ld
+CXX = arm-linux-g++
+INSTALL = install
+
+prefix = ""
+bindir = $(prefix)/usr/bin
+
+TARGETS = hello
+
+all: $(TARGETS)
+
+hello: hello.cxx
+ $(CXX) $(CXXFLAGS) -o $@ $<
+
+clean:
+ rm -f *.o $(TARGETS) *~
+
+install:
+ $(INSTALL) hello $(bindir)
+
+</programlisting>
+ </para>
+ <para>
+The next decision to make is how to provide the source code:
+it might either be available through some download mechanism, possibly
+from a local CVS server, or it might be added as a local tarball to the
+package file.
+ </para>
+ <para>
+Based on that, the actual package recipe file is pretty simple:
+<programlisting>
+DESCRIPTION = "Hello world example"
+SECTION = "base"
+LICENSE="BSD"
+MAINTAINER = "Me &lt;me@myname.org>"
+
+PR = "r0"
+
+SRC_URI = "file://hello-${PV}.tar.gz"
+
+# just don't do any configuring
+do_configure() {
+}
+</programlisting>
+ </para>
+ <para>
+The recipes shown here are all pretty simple. But actually 90% of
+the recipes in OpenEmbedded are not much more complex. And for
+more complex packages normally some recipes already exist, if not
+for exactly the wanted package then for a similar one.
+ </para>
+ <para>
+And for the really complicated cases the OpenEmbedded developers
+on the mailing list are always helpful.
+ </para>
+ </sect2>
+</sect1>
+
+
+<sect1 id="conclusion">
+<title>Conclusion</title>
+ <para>
+Most embedded Linux systems currently follow the full image approach:
+if something changes, the complete image is rebuilt and deployed.
+ </para>
+
+ <para>
+An embedded Linux distribution that provides a package system
+follows a different approach: the original image provides only
+a base system that is augmented incrementally by separate packages.
+ </para>
+
+ <para>
+OpenEmbedded provides not only such a package system, but also the
+tools to build these packages, i.e. the BitBake build tools
+and all the metadata in form of predefined classes for most
+common tasks for building an embedded Linux distribution.
+ </para>
+
+ <para>
+And OpenEmbedded comes with lots of ready-to-use package recipes
+for Open Source tools, libraries and applications.
+ </para>
+
+ <para>
+But OpenEmbedded has also drawbacks:
+It is quite complex and though this complexity is often hidden
+in the provided classes, it is sometimes necessary to understand
+that complexity. And though most package recipes are quite simple,
+even these simple things must be learned, and documentation is a bit scarce.
+But the OpenEmbedded developers on the mailing list are generally
+friendly and willingly provide some pointers to solve simple
+and complex tasks.
+ </para>
+
+ <para>
+Another drawback is the amounts of resources required to build
+OpenEmbedded: to build a basic distribution including a GUI
+takes several hours; to build everything takes nearly two
+days on a Pentium M @ 2GHz. And it takes about 30GHz disk space.
+ </para>
+
+ <para>
+A last drawback is the SCM monotone used by OpenEmbedded:
+pulling and updating is quite slow.
+ </para>
+
+ <para>
+Some of these drawbacks are just due to the fact that OpenEmbedded
+now provides a huge repository of recipes: to build one package
+and its dependencies, OpenEmbedded must parse all recipes to know
+which recipe provides what, and with more than 3000 recipes this
+takes some time. But the OpenEmbedded developers are aware especially
+of the performance problems (they are bitten themselves most by them)
+and try to solve at least some of them.
+ </para>
+</sect1>
+
+ <bibliography>
+ <title>References</title>
+ <biblioentry id="OpenEmbeddedBib">
+ <title>OpenEmbedded Homepage</title>
+ <bibliomisc>
+ <ulink url="http://www.openembedded.org/">
+http://www.openembedded.org/
+ </ulink>
+ </bibliomisc>
+ </biblioentry>
+
+ <biblioentry>
+ <title>Developer Documentation</title>
+ <bibliomisc>
+ <ulink url="http://oe.handhelds.org/cgi-bin/moin.cgi">
+http://oe.handhelds.org/cgi-bin/moin.cgi
+ </ulink>
+ </bibliomisc>
+ </biblioentry>
+
+ <biblioentry>
+ <title>OpenEmbedded recipe hints</title>
+ <bibliomisc>
+ <ulink url="http://oe.handhelds.org/cgi-bin/moin.cgi/bb_20file">
+http://oe.handhelds.org/cgi-bin/moin.cgi/bb_20file
+ </ulink>
+ </bibliomisc>
+ </biblioentry>
+
+ <biblioentry>
+ <title>BitBake manual</title>
+ <bibliomisc>
+ <ulink url="http://bitbake.berlios.de/manual/">
+http://bitbake.berlios.de/manual/
+ </ulink>
+ </bibliomisc>
+ </biblioentry>
+
+ <biblioentry>
+ <title>iPKG</title>
+ <bibliomisc>
+ <ulink url="http://www.handhelds.org/moin/moin.cgi/Ipkg">
+http://www.handhelds.org/moin/moin.cgi/Ipkg
+ </ulink>
+ </bibliomisc>
+ </biblioentry>
+
+ <biblioentry>
+ <title>OpenEmbedded monotone hints</title>
+ <bibliomisc>
+ <ulink url="http://oe.handhelds.org/cgi-bin/moin.cgi/MonotonePhraseBook">
+http://oe.handhelds.org/cgi-bin/moin.cgi/MonotonePhraseBook
+ </ulink>
+ </bibliomisc>
+ </biblioentry>
+
+</bibliography>
+
+</article>
+
diff --git a/docs/usermanual/html.css b/docs/usermanual/html.css
new file mode 100644
index 0000000000..d2dbf80e01
--- /dev/null
+++ b/docs/usermanual/html.css
@@ -0,0 +1,282 @@
+/* Feuille de style DocBook du projet Traduc.org */
+/* DocBook CSS stylesheet of the Traduc.org project */
+
+/* (c) Jean-Philippe Gurard - 14 aot 2004 */
+/* (c) Jean-Philippe Gurard - 14 August 2004 */
+
+/* Cette feuille de style est libre, vous pouvez la */
+/* redistribuer et la modifier selon les termes de la Licence */
+/* Art Libre. Vous trouverez un exemplaire de cette Licence sur */
+/* http://tigreraye.org/Petit-guide-du-traducteur.html#licence-art-libre */
+
+/* This work of art is free, you can redistribute it and/or */
+/* modify it according to terms of the Free Art license. You */
+/* will find a specimen of this license on the Copyleft */
+/* Attitude web site: http://artlibre.org as well as on other */
+/* sites. */
+/* Please note that the French version of this licence as shown */
+/* on http://tigreraye.org/Petit-guide-du-traducteur.html#licence-art-libre */
+/* is only official licence of this document. The English */
+/* is only provided to help you understand this licence. */
+
+/* La dernire version de cette feuille de style est toujours */
+/* disponible sur: http://tigreraye.org/style.css */
+/* Elle est galement disponible sur: */
+/* http://www.traduc.org/docs/HOWTO/lecture/style.css */
+
+/* The latest version of this stylesheet is available from: */
+/* http://tigreraye.org/style.css */
+/* It is also available on: */
+/* http://www.traduc.org/docs/HOWTO/lecture/style.css */
+
+/* N'hsitez pas envoyer vos commentaires et corrections */
+/* Jean-Philippe Gurard <jean-philippe.guerard@tigreraye.org> */
+
+/* Please send feedback and bug reports to */
+/* Jean-Philippe Gurard <jean-philippe.guerard@tigreraye.org> */
+
+/* $Id: style.css,v 1.14 2004/09/10 20:12:09 fevrier Exp fevrier $ */
+
+/* Prsentation gnrale du document */
+/* Overall document presentation */
+
+body {
+ /*
+ font-family: Apolline, "URW Palladio L", Garamond, jGaramond,
+ "Bitstream Cyberbit", "Palatino Linotype", serif;
+ */
+ margin: 7%;
+ background-color: white;
+}
+
+/* Taille du texte */
+/* Text size */
+
+* { font-size: 100%; }
+
+/* Gestion des textes mis en relief imbriqus */
+/* Embedded emphasis */
+
+em { font-style: italic; }
+em em { font-style: normal; }
+em em em { font-style: italic; }
+
+/* Titres */
+/* Titles */
+
+h1 { font-size: 200%; font-weight: 900; }
+h2 { font-size: 160%; font-weight: 900; }
+h3 { font-size: 130%; font-weight: bold; }
+h4 { font-size: 115%; font-weight: bold; }
+h5 { font-size: 108%; font-weight: bold; }
+h6 { font-weight: bold; }
+
+/* Nom de famille en petites majuscules (uniquement en franais) */
+/* Last names in small caps (for French only) */
+
+*[class~="surname"]:lang(fr) { font-variant: small-caps; }
+
+/* Blocs de citation */
+/* Quotation blocs */
+
+div[class~="blockquote"] {
+ border: solid 2px #AAA;
+ padding: 5px;
+ margin: 5px;
+}
+
+div[class~="blockquote"] > table {
+ border: none;
+}
+
+/* Blocs litraux: fond gris clair */
+/* Literal blocs: light gray background */
+
+*[class~="literallayout"] {
+ background: #f0f0f0;
+ padding: 5px;
+ margin: 5px;
+}
+
+/* Programmes et captures texte: fond bleu clair */
+/* Listing and text screen snapshots: light blue background */
+
+*[class~="programlisting"], *[class~="screen"] {
+ background: #f0f0ff;
+ padding: 5px;
+ margin: 5px;
+ border: 1px solid #ddd;
+}
+
+/* Les textes remplacer sont surligns en vert ple */
+/* Replaceable text in highlighted in pale green */
+
+*[class~="replaceable"] {
+ background-color: #98fb98;
+ font-style: normal; }
+
+/* Tables: fonds gris clair & bords simples */
+/* Tables: light gray background and solid borders */
+
+*[class~="table"] *[class~="title"] { width:100%; border: 0px; }
+
+table {
+ border: 1px solid #aaa;
+ border-collapse: collapse;
+ padding: 2px;
+ margin: 5px;
+}
+
+/* Listes simples en style table */
+/* Simples lists in table presentation */
+
+table[class~="simplelist"] {
+ background-color: #F0F0F0;
+ margin: 5px;
+ border: solid 1px #AAA;
+}
+
+table[class~="simplelist"] td {
+ border: solid 1px #AAA;
+}
+
+/* Les tables */
+/* Tables */
+
+*[class~="table"] table {
+ background-color: #F0F0F0;
+ border: solid 1px #AAA;
+}
+*[class~="informaltable"] table { background-color: #F0F0F0; }
+
+th,td {
+ vertical-align: baseline;
+ text-align: left;
+ padding: 0.1em 0.3em;
+ empty-cells: show;
+}
+
+/* Alignement des colonnes */
+/* Colunms alignment */
+
+td[align=center] , th[align=center] { text-align: center; }
+td[align=right] , th[align=right] { text-align: right; }
+td[align=left] , th[align=left] { text-align: left; }
+td[align=justify] , th[align=justify] { text-align: justify; }
+
+/* Pas de marge autour des images */
+/* No inside margins for images */
+
+img { border: 0; }
+
+/* Les liens ne sont pas souligns */
+/* No underlines for links */
+
+:link , :visited , :active { text-decoration: none; }
+
+/* Prudence: cadre jaune et fond jaune clair */
+/* Caution: yellow border and light yellow background */
+
+*[class~="caution"] {
+ border: solid 2px yellow;
+ background-color: #ffffe0;
+ padding: 1em 6px 1em ;
+ margin: 5px;
+}
+
+*[class~="caution"] th {
+ vertical-align: middle
+}
+
+*[class~="caution"] table {
+ background-color: #ffffe0;
+ border: none;
+}
+
+/* Note importante: cadre jaune et fond jaune clair */
+/* Important: yellow border and light yellow background */
+
+*[class~="important"] {
+ border: solid 2px yellow;
+ background-color: #ffffe0;
+ padding: 1em 6px 1em;
+ margin: 5px;
+}
+
+*[class~="important"] th {
+ vertical-align: middle
+}
+
+*[class~="important"] table {
+ background-color: #ffffe0;
+ border: none;
+}
+
+/* Mise en vidence: texte lgrement plus grand */
+/* Highlights: slightly larger texts */
+
+*[class~="highlights"] {
+ font-size: 110%;
+}
+
+/* Note: cadre bleu et fond bleu clair */
+/* Notes: blue border and light blue background */
+
+*[class~="note"] {
+ border: solid 2px #7099C5;
+ background-color: #f0f0ff;
+ padding: 1em 6px 1em ;
+ margin: 5px;
+}
+
+*[class~="note"] th {
+ vertical-align: middle
+}
+
+*[class~="note"] table {
+ background-color: #f0f0ff;
+ border: none;
+}
+
+/* Astuce: cadre vert et fond vert clair */
+/* Tip: green border and light green background */
+
+*[class~="tip"] {
+ border: solid 2px #00ff00;
+ background-color: #f0ffff;
+ padding: 1em 6px 1em ;
+ margin: 5px;
+}
+
+*[class~="tip"] th {
+ vertical-align: middle;
+}
+
+*[class~="tip"] table {
+ background-color: #f0ffff;
+ border: none;
+}
+
+/* Avertissement: cadre rouge et fond rouge clair */
+/* Warning: red border and light red background */
+
+*[class~="warning"] {
+ border: solid 2px #ff0000;
+ background-color: #fff0f0;
+ padding: 1em 6px 1em ;
+ margin: 5px;
+}
+
+*[class~="warning"] th {
+ vertical-align: middle;
+}
+
+
+*[class~="warning"] table {
+ background-color: #fff0f0;
+ border: none;
+}
+
+/* Fin */
+/* The End */
+
diff --git a/docs/usermanual/reference/.mtn2git_empty b/docs/usermanual/reference/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/docs/usermanual/reference/.mtn2git_empty
diff --git a/docs/usermanual/reference/class_autotools.xml b/docs/usermanual/reference/class_autotools.xml
new file mode 100644
index 0000000000..a9e1a5721a
--- /dev/null
+++ b/docs/usermanual/reference/class_autotools.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="autotools_class" xreflabel="autotools class">
+ <title>autotools class</title>
+
+ <para>Autotools is one of the most commonly seen configuration methods for
+ applications. Anything that uses the standard <command>./configure; make;
+ make install</command> sequence is using autotools. Usually the configure
+ script will support a large number of options to specify various
+ installation directories, to disable and/or enable various features and
+ options to specify search paths for headers and libraries.</para>
+
+ <para>The autotools class takes care of all of the details for you. It
+ defines appropriate tasks for <emphasis>configure</emphasis>,
+ <emphasis>compile</emphasis>, <emphasis>stage</emphasis> and
+ <emphasis>install</emphasis>. At it's simplest adding an inherit for the
+ autotools class is all that is required. The netcat recipe for example
+ is:<screen>DESCRIPTION = "GNU Netcat"
+HOMEPAGE = "http://netcat.sourceforge.net"
+LICENSE = "GPLv2"
+MAINTAINER = "Your name &lt;yname@example.com&gt;"
+SECTION = "console/networking"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/netcat/netcat-${PV}.tar.bz2"
+
+inherit autotools</screen>The header is defined, the location of the source
+ code and then the inherit. For the simplest cases this is all that is
+ required. If you need to pass additional parameters to the configure script,
+ such as for enabling and/or disabling options, then they can be specified
+ via the <command>EXTRA_OECONF</command> variable. This example from the lftp
+ recipe shows several extra options being passed to the configure
+ script:<screen>EXTRA_OECONF = "--disable-largefile --disable-rpath --with-included-readline=no"</screen>If
+ you define your own tasks for <emphasis>configure</emphasis>,
+ <emphasis>compile</emphasis>, <emphasis>stage</emphasis> or
+ <emphasis>install</emphasis> (via <command>do_&lt;taskname&gt;</command>)
+ then they will override the methods generated by the autotools class. If you
+ need to perform additional operations (rather than replacing the generated
+ operations) you can use the <command>do_&lt;task&gt;_append</command> or
+ <command>do_&lt;task&gt;_prepend</command> methods. The following example
+ from the conserver recipe shows some additional items being
+ installed:<screen># Include the init script and default settings in the package
+do_install_append () {
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/conserver.default ${D}${sysconfdir}/default/conserver
+ install -m 0755 ${WORKDIR}/conserver.init ${D}${sysconfdir}/init.d/conserver
+}</screen></para>
+
+ <section>
+ <title>oe_runconf / autotools_do_configure</title>
+
+ <para>Autotools generates a configuration method called
+ <command>oe_runconf</command> which runs the actual configure script, and
+ a method called <command>autotools_do_configure</command> which generates
+ the configure file (runs automake and autoconf) and then calls
+ <command>oe_runconf</command>. The generated method for the
+ <emphasis>configure</emphasis> task, <command>do_configure</command>, just
+ calls the <command>autotools_do_configure</command> method.</para>
+
+ <para>It is sometimes desirable to implement your own
+ <command>do_configure</command> method, where additional configuration is
+ required or where you wish to inhibit the running of automake and
+ autoconf, and then manually call <command>oe_runconf</command>.</para>
+
+ <para>The following example from the ipacct recipe shows an example of
+ avoiding the use of automake/autoconf:<screen>do_configure() {
+ oe_runconf
+}</screen>Sometimes manual manipulations of the autotools files is required
+ prior to calling autoconf/automake. In this case you can defined your own
+ <command>do_configure</command> method which performs the required actions
+ and then calls <command>autotools_do_configure</command>.</para>
+ </section>
+
+ <section>
+ <title>Presetting autoconf variables (the site file)</title>
+
+ <para>The autotools configuration method has support for caching the
+ results of tests. In the cross-compilation case it is sometimes necessary
+ to prime the cache with per-calculated results (since tests designed to
+ run on the target cannot be run when cross-compiling). These are defined
+ via the site file(s) for the architecture you are using and may be
+ specific to the package you are building.</para>
+
+ <para>Autoconf uses site files as definied in the
+ <command>CONFIG_SITE</command> variable, which is a space seperate list of
+ files to load in the specified order. Details on how this variable is set
+ is provided in the <xref linkend="siteinfo_class" /> (the class
+ responsbile for setting the variable) section.</para>
+
+ <para>There are some things that you should keep in mind about the caching
+ of configure tests:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Check the other site files to see if there any entries for the
+ application you are attempting to build.</para>
+
+ <para>Sometimes entries are only updated for the target that the
+ developer has access to. If they exist for another target then it may
+ provide a good idea of what needs to be defined.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sometimes the same cache value is used by multiple
+ applications.</para>
+
+ <para>This can have the side effect where a value added for one
+ application breaks the build of another. It is a very good idea to
+ empty the site file of all other values if you are having build
+ problems to ensure that none of the existing values are causing
+ problems.</para>
+ </listitem>
+
+ <listitem>
+ <para>Not all values can be stored in the cache</para>
+
+ <para>Caching of variables is defined by the author of the configure
+ script, so sometimes not all variables can be set via the cache. In
+ this case it often means resorting to patching the original configure
+ scripts to achieve the desired result.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>All site files are shell scripts which are run by autoconf and
+ therefore the syntax is the same as you would use in sh. There are two
+ current methods of settings variables that is used in the existing site
+ files. This include explicitly settings the value of the variable:<screen>ac_cv_sys_restartable_syscalls=yes</screen>and
+ conditionally setting the value of the variable:<screen>ac_cv_uchar=${ac_cv_uchar=no}</screen>The
+ conditional version is using shell syntax to say "<emphasis>only set this
+ to the specified value if it is not currently set</emphasis>". The
+ conditional version allows the variable to be set in the shell prior to
+ calling configure and it will then not be replaced by the value from the
+ site file.</para>
+
+ <note>
+ <para>Site files are applied in order, so the application specific site
+ files will be applied prior to the top level site file entries. The use
+ of conditional assignment means that the first definition found will
+ apply, while when not using conditionals the last definition found will
+ apply.</para>
+ </note>
+
+ <para>It is possible to disable the use of the cached values from the site
+ file by clearing the definition of <command>CONFIG_SITE</command> prior to
+ running the configure script. Doing this will disable the use of the site
+ file entirely. This however should be used as a last resort. The following
+ example from the db recipe shows an example of this:<screen># Cancel the site stuff - it's set for db3 and destroys the
+# configure.
+CONFIG_SITE = ""
+do_configure() {
+ oe_runconf
+}</screen></para>
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_binconfig.xml b/docs/usermanual/reference/class_binconfig.xml
new file mode 100644
index 0000000000..049f85e1f0
--- /dev/null
+++ b/docs/usermanual/reference/class_binconfig.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="binconfig_class" xreflabel="binconfig class">
+ <title>binconfig class</title>
+
+ <para>The binconfig class is for packages that install
+ <command>&lt;pkg&gt;-config</command> scripts that provide information about
+ the build settings for the package. It is usually provided by libraries and
+ then used by other packages to determine various compiler options.</para>
+
+ <para>Since the script is used at build time it is required to be copied
+ into the staging area. All the actions performed by the class are appended
+ to the <emphasis>stage</emphasis> task.</para>
+
+ <para>The actions performed by the binconfig class are:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Copies the <command>&lt;x&gt;-config</command> script from the
+ package into <command>${STAGING_BINDIR} </command>directory;</para>
+ </listitem>
+
+ <listitem>
+ <para>If the package is not native then it modifies the contents of the
+ <command>&lt;x&gt;-config</command> script in the staging area to ensure
+ that all the paths in the script refer to the staging area;</para>
+ </listitem>
+
+ <listitem>
+ <para>If the package is native then
+ the<command>&lt;x&gt;-config</command> script is renamed to
+ <command>&lt;x&gt;-config-native</command> to ensure that the native and
+ non-native versions do not interfere with each other.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>A package is considered to be native if it also inherits the native
+ class.</para>
+
+ <para>The class will search in source directory, <command>${S}</command>,
+ and all it's subdirectories, for files that end in
+ <command>-config</command> and process them as described above. All that is
+ required to use the class is the addition of binconfig in an inherit
+ statement:</para>
+
+ <para><screen>inherit autotools binconfig</screen></para>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_distutils.xml b/docs/usermanual/reference/class_distutils.xml
new file mode 100644
index 0000000000..ddc9c721ab
--- /dev/null
+++ b/docs/usermanual/reference/class_distutils.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="distutils_class" xreflabel="distutils class">
+ <title>distutils class</title>
+
+ <para>Distutils is a standard python system for building and installing
+ modules. The <emphasis>distutils</emphasis> class is used to automate the
+ building of python modules that use the distutils system.</para>
+
+ <para>Any python package that requires the standard python commands to build
+ and install is using the distutils system and should be able to use this
+ class:<screen>python setup.py build
+python setup.py install</screen></para>
+
+ <para>The <emphasis>distutils</emphasis> class will perform the build and
+ install actions on the <command>setup.py</command> provided by the package,
+ as required for building distutils packages, including setting all the
+ required parameters for cross compiling. It willl also perform the following
+ actions:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Adds python-native to <command>DEPENDS</command> to ensure that
+ python is built and installed on the build host. This also ensure that
+ the version of python that is used during package creation matches the
+ version of python that will be installed on the target.</para>
+ </listitem>
+
+ <listitem>
+ <para>Adds python-core to <command>RDEPENDS</command> to ensure that the
+ python-core is installed when this module is installed. Note that you
+ need to manually add any other python module dependencies to
+ <command>RDEPENDS</command>.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>The following example from the <emphasis>moin</emphasis> recipe shows
+ how simple this can make a python package:<screen>DESCRIPTION = "A full fledged WikiWiki system written in Python"
+LICENSE = "GPL"
+SECTION = "base"
+PRIORITY = "optional"
+MAINTAINER = "Your name &lt;yname@example.com&gt;"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/moin/moin-${PV}.tar.gz"
+
+inherit distutils</screen>The header, source location and the inherit are all
+ that is required.</para>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_image.xml b/docs/usermanual/reference/class_image.xml
new file mode 100644
index 0000000000..b591e9aae2
--- /dev/null
+++ b/docs/usermanual/reference/class_image.xml
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="image_class" xreflabel="image class">
+ <title>image class</title>
+
+ <para>The image class is used to generate filesystem images containing a
+ root filesystem, as generated by the rootfs class for the package type, such
+ as <xref linkend="rootfs_ipkg_class" />, for use on the target device. This
+ could be a <emphasis>jffs2</emphasis> image which is to be written directly
+ into the flash on the target device for example. In addition this class also
+ configures the ipkg feeds (where to get updates from) and is able to
+ generate multiple different image types.</para>
+
+ <para>Summary of the actions performed by the
+ <emphasis>image_ipkg</emphasis> class:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Inherits the rootfs class for the appropriate package type,
+ typically <xref linkend="rootfs_ipkg_class" />, in order to bring in the
+ functionality required to generate a root filesystem image. The root
+ filesystem image is generate from a set of of packages (typically .ipkg
+ packages), and then the required images are generated using the contents
+ of the root filesystem;</para>
+ </listitem>
+
+ <listitem>
+ <para>Sets <command>BUILD_ALL_DEPS = "1"</command> to force the
+ dependency system to build all packages that are listed in the
+ <command>RDEPENDS</command> and/or <command>RRECOMENDS</command> of the
+ packages to be installed;</para>
+ </listitem>
+
+ <listitem>
+ <para>Determines the name of the image device tables or table
+ (<command>IMAGE_DEVICE_TABLES/IMAGE_DEVICE_TABLE</command>) which will
+ be used to describe the device nodes to create in
+ <command>/dev</command> directory in the root filesystem;</para>
+ </listitem>
+
+ <listitem>
+ <para>Erases the contents of any existing root filesystem image,
+ <command>${IMAGE_ROOTFS}</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>If devfs is not being used then the <command>/dev</command>
+ directory, <command>${IMAGE_ROOTFS}/dev</command>, will be created and
+ then populated with the device nodes described by the image device table
+ or tables (using "<command>makedevs -r ${IMAGE_ROOTFS} -D
+ &lt;table&gt;</command>" for each device table);</para>
+ </listitem>
+
+ <listitem>
+ <para>Calls into <xref linkend="rootfs_ipkg_class" /> to install all of
+ the required packages into the root filesystem;</para>
+ </listitem>
+
+ <listitem>
+ <para>Configures the ipkg feed information in the root filesystem
+ (using <command>FEED_URIS</command> and <command>FEED_DEPLOYDIR_BASE_URI</command>);</para>
+ </listitem>
+
+ <listitem>
+ <para>Runs any image pre-processing commands as specified via
+ <command>${IMAGE_PREPROCESS_COMMAND}</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Calls <command>bbimage</command> on the root filesystem for each
+ required image type, as specified via
+ <command>${IMAGE_FSTYPES}</command>, to generate the actual filesystem
+ images;</para>
+ </listitem>
+
+ <listitem>
+ <para>Runs any image post-processing commands, as specified via
+ <command>${IMAGE_POSTPROCESS_COMMAND}</command>.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>The following variables may be used to control some of the behaviour
+ of this class (remember we use <xref linkend="rootfs_ipkg_class" /> to build
+ the filesystem image, so look at the variables defined by that class as
+ well):</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>USE_DEVFS</term>
+
+ <listitem>
+ <para>Indicates if the image will be using devfs, the device
+ filesystem, or not. If devfs is being used then no
+ <command>/dev</command> directory will be required in the image. Set
+ to <command>"1"</command> to indicate that devfs is being used. Note
+ that devfs has been removed from the Linux kernel in the 2.6 series
+ and most platforms are moving towards the use of udev as a replacement
+ for devfs.</para>
+
+ <para>Default: <command>"0"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_DEVICE_TABLES</term>
+
+ <listitem>
+ <para>Specifies one, or more, files containing a list of the device
+ nodes that should be created in the <command>/dev</command> directory
+ of the image. Each file is searched for via the
+ <command>${BBPATH}</command> and therefore can be specified as a file
+ relative to the top of the build. Device files are processed in the
+ specified order. NOTE: If <command>IMAGE_DEVICE_TABLE</command> is set
+ then this variable is ignored.</para>
+
+ <para>Example: <command>IMAGE_DEVICE_TABLES =
+ "files/device_table-minimal.txt files/device_table_add-sci.txt
+ device_table_add-sm.txt"</command></para>
+
+ <para>Default:
+ <command>"files/device_table-minimal.txt"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_DEVICE_TABLE</term>
+
+ <listitem>
+ <para>Specifies the file that lists the device nodes that should be
+ created in the <command>/dev </command>directory of the image. This
+ needs to be an absolute filename and so should be specified relative
+ to <command>${BBPATH}</command>. Only a single device table is
+ supported. Use <command>IMAGE_DEVICE_TABLES</command> instead if you
+ want to use multiple device tables.</para>
+
+ <para>Default: <command>""</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_PREPROCESS_COMMAND</term>
+
+ <listitem>
+ <para>Additional commands to run prior to processing the image. Note
+ that these command run within the same <xref linkend="fakeroot" />
+ instance as the rest of this class.</para>
+
+ <para>Default: <command>""</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_POSTPROCESS_COMMAND</term>
+
+ <listitem>
+ <para>Additional commands to run after processing the image. Note that
+ these command run within the same <xref linkend="fakeroot" /> instance
+ as the rest of this class.</para>
+
+ <para>Default: <command>""</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_FSTYPES</term>
+
+ <listitem>
+ <para>Specifies the type of image files to create. The supported image
+ types, and details on modifying existing types and on creating new
+ types, are described in the <xref linkend="image_types" /> section.
+ This variable is set to a space seperated list of image types to
+ generate.</para>
+
+ <para>Example: <command>"jffs2 tar.gz"</command></para>
+
+ <para>Default: <command>"jffs2"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FEED_URIS</term>
+
+ <listitem>
+ <para>The name of the feeds to be configured in the image by default.
+ Each entry consists of the feed name, followed by two pound signs and
+ then followed by the actual feed URI.</para>
+
+ <para>Example: <command>FEED_URIS =
+ "example##http://dist.example.com/ipkg-titan-glibc/"</command></para>
+
+ <para>Default: <command>""</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FEED_DEPLOYDIR_BASE_URI</term>
+
+ <listitem>
+ <para>If set, configures local testing feeds using OE package deploy dir
+ contents. The value is URL, corresponding to the ipk deploy dir.</para>
+
+ <para>Example: <command>FEED_DEPLOYDIR_BASE_URI =
+ "http://192.168.2.200/bogofeed/"</command></para>
+
+ <para>Default: <command>""</command></para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <section>
+ <title>Special node handling (fakeroot)</title>
+
+ <para>Special nodes, such as <command>/dev</command> nodes, and files with
+ special permissions, such as suid files, are handled via the <xref
+ linkend="fakeroot" /> system. This means that when you view the contents
+ of the root filesystem these device appear to be created
+ incorrectly:</para>
+
+ <para>The <command>IMAGE_PREPROCESS_COMMAND</command> and
+ <command>IMAGE_POSTPROCESS_COMMAND</command> variables will be processed
+ within the same <xref linkend="fakeroot" /> instance as the rest of the
+ rest of this class.</para>
+ </section>
+
+ <section>
+ <title>Device (/dev) nodes</title>
+
+ <para>There are two variables that can be defined for creating device
+ nodes. The new method supports multiple device node tables and supports
+ searching for these tables via the <command>${BBPATH}</command> so that
+ relative file names may be used.</para>
+
+ <para>The following example from <command>machine/titan.conf</command>
+ shows the use of multiple device tables:</para>
+
+ <para><screen># Add the SCI devices to minimal /dev
+IMAGE_DEVICE_TABLES = "files/device_table-minimal.txt files/device_table_add-sci.txt device_table_add-sm.txt"
+</screen></para>
+
+ <para>It uses the standard minimal device tables but adds some additional
+ items which are not normally needed:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>files/device_table-minimal.txt</term>
+
+ <listitem>
+ <para>This is the standard minimal set of device nodes.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>files/device_table_add-sci.txt</term>
+
+ <listitem>
+ <para>This contains details for creating the
+ <command>/dev/SC{0,1,2}</command> nodes which are required for the
+ SH processors on board SCI and SCIF serial ports. On the titan
+ hardware the serial console is provided via one of these ports and
+ so we require the device node to be present.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>device_table_add-sm.txt</term>
+
+ <listitem>
+ <para>This contains details for creating the
+ <command>/dev/sm0</command> and <command>/dev/sm0p{0,1,2}</command>
+ devices nodes for the block driver, and the associated partitions,
+ that are used to manage the on board flash on the titan
+ hardware.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Prior to support for multiple device tables this would have required
+ the creation of a titan specific device table.</para>
+ </section>
+
+ <section>
+ <title>Image types</title>
+
+ <para>The type of filesystem images to create are specified via the
+ <command>IMAGE_FSTYPES</command> variable. A full description of the
+ available image types, options of the images and details on creating new
+ image types is provided in the <xref linkend="image_types" />
+ section.</para>
+ </section>
+
+ <section>
+ <title>Package feeds</title>
+
+ <para>"Package feed", or feed for short, is a term used by <command>ipkg</command>
+ package manager, commonly used in embedded systems, to name a package repository
+ holding packages. Structurally, a feed is a directory - local, or on HTTP of FTP server, -
+ holding packages and package descriptor file, named <command>Packages</command> or
+ <command>Packages.gz</command> if compressed. Multiple feeds are supported.</para>
+
+ <para>OpenEmbedded has support to pre-configure feeds within generated images,
+ so once image is installed on a device, user can immediately install new software,
+ without the need to manually edit config files. There are several ways to pre-configure
+ feed support, described below.</para>
+
+ <section>
+ <title>Method 1: Using existing feed</title>
+ <para>If you already have the feed(s) set up and available via specific URL, they
+ can be added to the image using FEED_URIS variable:
+<screen>FEED_URIS = " \
+ base##http://oe.example.com/releases/${DISTRO_VERSION}/feed/base \
+ updates##http://oe.example.com/releases/${DISTRO_VERSION}/feed/updates"</screen>
+
+ FEED_URIS contains list of feed descriptors, separated by spaces, per
+ OE conventions. Each descriptor consists of feed name and feed URL,
+ joined with "##". Feed name is an identifier used by ipkg to distinguish
+ among the feeds. It can be arbitrary, just useful to the users to understood
+ which feed is used for one or another action.</para>
+ </section>
+
+ <section>
+ <title>Method 2: Using OE deploy directory as a feed (development only)</title>
+ <para>OE internally maintains a feed-like collection of directories to create
+ images from packages. This package deployment directory however has structure internal to OE
+ and subject to change without notice. Thus, using it as feed directly is not recommended
+ (distributions which ignored this recommendation are known to have their feeds broken when
+ OE upgraded its internal mechanisms).</para>
+ <para>However, using deploy directory as feed directly may be beneficial during
+ development and testing, as it allows developers to easily install newly built packages
+ without many manual actions. To facilitate this, OE offers a way to prepare feed configs
+ for using deploy dir as such. To start with this, you first need to configure local
+ HTTP server to export a package deployment directory via HTTP.
+ Suppose you will export it via URL "http://192.168.2.200/bogofeed" (where 192.168.2.200 is the address
+ which will be reachable from the device). Add the following to your local.conf:
+<screen>
+FEED_DEPLOYDIR_BASE_URI = "http://192.168.2.200/bogofeed"
+</screen>
+ Now you need to setup local HTTP server to actually export that directory. For Apache it can be:
+<screen>
+<![CDATA[
+Alias /bogofeed ${DEPLOY_DIR}
+
+<Directory ${DEPLOY_DIR}>
+ Options Indexes FollowSymLinks
+ Order deny,allow
+ Allow from 192.168.2.0/24
+</Directory>
+]]>
+</screen>
+ Replace ${DEPLOY_DIR} with the full path of deploy directory (last components of its path will be
+ <command>deploy/ipk</command>).</para>
+ <para>Now, every image built will automatically contain feed configs
+ for the deploy directory (as of time of writing, deploy directory is internally structured with
+ per-arch subdirectories; so, there several feed configs are being generated, one for each subdirectory).
+ </para>
+
+ </section>
+
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_pkgconfig.xml b/docs/usermanual/reference/class_pkgconfig.xml
new file mode 100644
index 0000000000..3cb5002df5
--- /dev/null
+++ b/docs/usermanual/reference/class_pkgconfig.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="pkgconfig_class" xreflabel="pkgconfig class">
+ <title>pkgconfig class</title>
+
+ <para>The pkgconfig class is for packages that install
+ <command>&lt;pkg&gt;.pc</command> files. These files provide information
+ about the build settings for the package vwhich are then made available by
+ the <command>pkg-config</command> command.</para>
+
+ <para>Since the contents of the <command>.pc</command> files are used at
+ build time they need to be installed into the staging area. All the actions
+ performed by this class are appended to the <emphasis>stage</emphasis>
+ task.</para>
+
+ <para>The actions performed by the pkgconfig class are:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Copies the <command>&lt;x&gt;.pc</command> files into the
+ <command>${PKG_CONFIG_PATH}</command> directory;</para>
+ </listitem>
+
+ <listitem>
+ <para>If the package is not native then it modifies the contents of the
+ <command>&lt;x&gt;.pc</command> file in the
+ <command>${PKG_CONFIG_PATH}</command> area to ensure that all the paths
+ in the script refer to the staging area;</para>
+ </listitem>
+ </orderedlist>
+
+ <para>A package is considered to be native if it also inherits the native
+ class.</para>
+
+ <para>The class will search the source directory, <command>${S}</command>,
+ and all it's subdirectories, for files that end in <command>.pc</command>
+ (it will ignore those that end in <command>-uninstalled.pc)</command> and
+ process them as described above. All that is required to use the class is
+ the addition of pkgconfig in an inherit statement:<screen>inherit autotools pkgconfig</screen></para>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_rootfs_ipkg.xml b/docs/usermanual/reference/class_rootfs_ipkg.xml
new file mode 100644
index 0000000000..b60adf8e70
--- /dev/null
+++ b/docs/usermanual/reference/class_rootfs_ipkg.xml
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="rootfs_ipkg_class" xreflabel="rootfs_ipkg class">
+ <title>rootfs_ipkg class</title>
+
+ <para>The <emphasis>rootf_ipk</emphasis> class us used to create a root
+ filesystem for the target device from a set of .ipkg packages. The end
+ result is a directory containing all the files that need to be included in
+ the root filesystem of the target device.</para>
+
+ <para>This class is normally not used directly, but instead used from the
+ <xref linkend="image_class" /> which creates images from a set of package
+ (typically <command>.ipkg</command>) files.</para>
+
+ <para>Summary of actions performed by the <emphasis>rootfs_ipkg</emphasis>
+ class:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Erase any existing root filesystem image by deleting the entire
+ contents of <command>${IMAGE_ROOTFS}</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Creates the device node directory,
+ <command>${IMAGE_ROOTFS}/dev</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Determines which packages to install in order to provide the
+ locales that have been requested;</para>
+ </listitem>
+
+ <listitem>
+ <para>Configures ipkg to allow it to be used locally to install into the
+ root filesystem <command>${IMAGE_ROOTFS}</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Installs locale related .ipkg packages;</para>
+ </listitem>
+
+ <listitem>
+ <para>Installs the list of requested <command>.ipkg</command> packages,
+ <command>${IPKG_INSTALL}</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Creates ipkg's arch.conf as
+ <command>${IMAGE_ROOTFS}/etc/ipkg/arch.conf</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Runs any preinst and postinst scripts that were specified by the
+ installed .ipkg packages;</para>
+ </listitem>
+
+ <listitem>
+ <para>Creates the system configuration directory
+ <command>${IMAGE_ROOTFS}/${sysconfdir}</command> (that is the
+ <command>/etc</command> directory on the target);</para>
+ </listitem>
+
+ <listitem>
+ <para>Runs and custom post-processing commands, as described by
+ <command>${ROOTFS_POSTPROCESS_COMMAND}</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Verifies that all the ipkg's were installed correctly and reports
+ an error if they were not;</para>
+ </listitem>
+
+ <listitem>
+ <para>Makes available a set of functions which may be used by callers of
+ the class: <command>zap_root_password</command>,
+ <command>create_etc_timestamp</command> and
+ <command>remove_init_link</command>;</para>
+ </listitem>
+
+ <listitem>
+ <para>Adds the rootfs task to run after the <emphasis>install</emphasis>
+ task <command>"addtask rootfs before do_build and
+ do_install"</command>.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>The following variables may be used to control some of the behaviour
+ of this class:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>IPKG_INSTALL</term>
+
+ <listitem>
+ <para>The list of packages which will be installed into the root
+ filesystem. This needs to be set in order for this class to perform
+ any useful work.</para>
+
+ <para>Default: empty</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ROOTFS_POSTPROCESS_COMMAND</term>
+
+ <listitem>
+ <para>Defines additional commands to run after processing of the root
+ filesystem. Could be used to change roots password, remove parts of
+ the install kernel such as the <command>zImage</command> kernel image
+ or to edit the ipkg configuration for example.</para>
+
+ <para>Default: empty</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>PACKAGE_ARCH</term>
+
+ <listitem>
+ <para>Defines the list of architectures that are support by the target
+ platform. This is used to configure the arch settings for ipkg on the
+ target system.</para>
+
+ <para>Default: <command>"all any noarch ${TARGET_ARCH}
+ ${PACKAGE_EXTRA_ARCHS} ${MACHINE}"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_LINGUAS</term>
+
+ <listitem>
+ <para>Specifies which locales should be installed. This is often set
+ to <command>""</command> to indicate that no locales will be
+ installed.</para>
+
+ <para>Default: <command>"de-de fr-fr en-gb"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>EXTRA_IMAGEDEPENDS</term>
+
+ <listitem>
+ <para>A list of dependencies, this is appended to
+ <command>DEPENDS</command>. This is typically used to ensure that any
+ commands that are called by
+ <command>ROOTFS_POSTPROCESS_COMMAND</command> are actually built by
+ the system prior to being called.</para>
+
+ <para>Default: empty</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>BUILDNAME</term>
+
+ <listitem>
+ <para>The name of the build. This is either set by the distro
+ configuration (for released versions) or set to a date stamp which is
+ autogenerated by bitbake.</para>
+
+ <para>Default: <command>'date +%Y%m%d%H%M'</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_ROOTFS</term>
+
+ <listitem>
+ <para>The path to the root of the filesystem image. You can use this
+ when you need to explicitly refer to the root filesystem
+ directory.</para>
+
+ <para>Default: <command>IMAGE_ROOTFS =
+ "${TMPDIR}/rootfs"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DEPLOY_DIR</term>
+
+ <listitem>
+ <para>The base deploy dir. Used to find the directory containing the
+ ipkg files.</para>
+
+ <para>Default: <command>DEPLOY_DIR =
+ "${TMPDIR}/deploy"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DEPLOY_DIR_IPK</term>
+
+ <listitem>
+ <para>The directory in which to search for the ipkg files that are to
+ be installed in the root filesystem.</para>
+
+ <para>Default: <command>DEPLOY_DIR_IPK =
+ "${DEPLOY_DIR}/ipk"</command></para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Note that the entire process is run under the control of <xref
+ linkend="fakeroot" /> in order to handle device files, uids and gids. The
+ <command>ROOTFS_POSTPROCESS_COMMAND</command> is useful due to the fact that
+ it runs within the same <xref linkend="fakeroot" /> instance as the rest of
+ this class.</para>
+
+ <para>The class also provides a function <command>real_do_rootfs</command>
+ which is executed without <xref linkend="fakeroot" /> and therefore can be
+ used from other classes, such as <xref linkend="image_class" />, that
+ are already running under the control of <xref linkend="fakeroot" />.</para>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_siteinfo.xml b/docs/usermanual/reference/class_siteinfo.xml
new file mode 100644
index 0000000000..4d66e85e7c
--- /dev/null
+++ b/docs/usermanual/reference/class_siteinfo.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="siteinfo_class" xreflabel="siteinfo class">
+ <title>siteinfo class</title>
+
+ <para>The siteinfo class provides information for a target with a particular
+ emphasis on determining the names of the site files to be passed to
+ autoconf, as described in the <xref linkend="autotools_class" />. Full site
+ information for your target can be determined by looking at the table in the
+ class implementation found in the
+ <command>classes/siteinfo.bbclass</command> file. A typical entry contains
+ the name of the target and a list of site information for the
+ target:<screen> "sh4-linux": "endian-little bit-32 common-glibc sh-common",</screen>In
+ the above example for sh4-linux target (that's a build for an sh4 processor
+ using glibc) we see that the endianess and bit-size of target are defined
+ and an additional set of site files that should be used are listed. These
+ include a common site file for glibc and a common site file for sh
+ processors (so sh3 and sh4 can share defines). A <command>"common"</command>
+ entry is automatically added to the end of each of the definitions during
+ processing.</para>
+
+ <para>The class makes available three variables based on the information
+ provided for a target:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>SITEINFO_ENDIANESS</term>
+
+ <listitem>
+ <para>Defines the endianess of the target as either
+ <command>"le"</command> (little endian) or <command>"be"</command>
+ (big endian). The target must list either
+ <command>endian-little</command> or <command>endian-big</command> in
+ it's site information.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SITEINFO_BITS</term>
+
+ <listitem>
+ <para>Defines the bitsize of the target as either
+ <command>"32"</command> or <command>"64"</command>. The target must
+ list either <command>bit-32</command> or <command>bit-64</command> in
+ it's site information.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>CONFIG_SITE</term>
+
+ <listitem>
+ <para>Defines the site files to be used by autoconf. This is a space
+ separated list of one or more site files for the target.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>A typical use for the <command>SITEINFO_ENDIANESS</command> and
+ <command>SITEINFO_BITS</command> variables is to provide configuration
+ within a recipe based on their values. The following example from the
+ <emphasis>openssl</emphasis> recipe showw the correct define for the
+ endiness of the target being passed to openssl via the compiler flags. The
+ define to add to the flags is set based on the value of the
+ <command>SITEINFO_ENDIANESS</command> variable. Note that use of the
+ <emphasis>base_conditional</emphasis> method (see the <xref
+ linkend="recipes_advanced_python" /> section) to select a value conditional
+ on the endianess setting:</para>
+
+ <para><screen> # Additional flag based on target endiness (see siteinfo.bbclass)
+ CFLAG="${CFLAG} ${@base_conditional('SITEINFO_ENDIANESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)}"</screen></para>
+
+ <section>
+ <title>CONFIG_SITE: The autoconf site files</title>
+
+ <para>The autotools configuration method has support for caching the
+ results of tests. In the cross-compilation case it is sometimes necessary
+ to prime the cache with per-calculated results (since tests designed to
+ run on the target cannot be run when cross-compiling). These are defined
+ via the site file(s) for the architecture you are using and may be
+ specific to the package you are building.</para>
+
+ <para>Which site files are used is determined via the
+ <command>CONFIG_SITE</command> definition which is calculated via the
+ siteinfo class. Typically the following site files will be checked for,
+ and used in the order found:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>endian-(big|little)</term>
+
+ <listitem>
+ <para>Either <command>endian-big</command> or
+ <command>endian-little</command> depending on the endianess of the
+ target. This site file would contain defines that only change based
+ on if the target is little endian or big endian.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>bit-(32|64)</term>
+
+ <listitem>
+ <para>Either <command>bit-32</command> or <command>bit-64</command>
+ depending on the bitsize of the target. This site file would contain
+ defines that only change based on if the target is a 32-bit or
+ 64-bit cpu.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>common-(libc|uclibc)</term>
+
+ <listitem>
+ <para>Either <command>common-libc</command> or
+ <command>common-uclibc</command> based on the C library being used
+ for the target. This site file would contain defines the are
+ specific to the C library being used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>&lt;arch&gt;-common</term>
+
+ <listitem>
+ <para>A common site file for the target architecture. For i386,
+ i485, i586 and i686 this would be <command>x86-common</command>, for
+ sh3 and sh4 this would be <command>sh-common</command> and for
+ various arm targets this would be
+ <command>arm-common</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>common</term>
+
+ <listitem>
+ <para>This is a site file which is common for all targets and
+ contains definitions which remain the same no matter what target is
+ being built.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Each of the supported site files for a target is will be checked for
+ in several different directories. Each time a file is found it as added to
+ the list of files in the <command>CONFIG_SITE</command> variable. The
+ following directories are checked:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>org.openembedded.dev/packages/&lt;packagename&gt;/site-&lt;version&gt;/</term>
+
+ <listitem>
+ <para>This directory is for site files which are specific to a
+ particular version (where version is the PV of the package) of a
+ package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>org.openembedded.dev/packages/&lt;packagename&gt;/site/</term>
+
+ <listitem>
+ <para>This directory is for site files which are specific to a
+ particular package, but apply to all versions of the package.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>org.openembedded.dev/site/</term>
+
+ <listitem>
+ <para>This directory is for site files that are common to all
+ packages. Originally this was the only site file directory that was
+ supported.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_update-alternatives.xml b/docs/usermanual/reference/class_update-alternatives.xml
new file mode 100644
index 0000000000..cd86e3e6ab
--- /dev/null
+++ b/docs/usermanual/reference/class_update-alternatives.xml
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="update-alternatives_class" xreflabel="update-alternatives class">
+ <title>update-alternatives class</title>
+
+ <para>Some commands are available from multiple sources. As an example we
+ have <command>/bin/sh</command> available from <emphasis>busybox</emphasis>
+ and from <emphasis>bash</emphasis>. The busybox version is better from a
+ size perspective, but limited in functionality, while the bash version is
+ much larger but also provides far more features. The alternatives system is
+ designed to handle the situation where two commands are provided by two, or
+ more, packages. It ensures that one of the alternatives is always the
+ currently selected one and ensures that there are no problems with
+ installing and/or removing the various alternatives.</para>
+
+ <para>The update-alternatives class is used to register a command provided
+ by a package that may have an alternative implementation in a some other
+ package.</para>
+
+ <para>In the following sections we'll use the <command>/bin/ping</command>
+ command as an example. This command is available as a basic version from
+ busybox and as a more advanced version from iputils.</para>
+
+ <section>
+ <title>Naming of the alternative commands</title>
+
+ <para>When supplying alternative commands the target command itself is not
+ installed directly by any of the available alternatives. This is to ensure
+ that no package will replace files that were installed by one of the other
+ available alternative packages. The alternatives system will create a
+ symlink for the target command that points to the required
+ alternative.</para>
+
+ <para>For the <command>/bin/ping</command> case this means that neither
+ busybox nor iputils should actually install a command called
+ <command>/bin/ping</command>. Instead we see that the iputils recipe
+ installs it's version of ping as
+ <command>/bin/ping.iputils</command>:<screen>do_install () {
+ install -m 0755 -d ${D}${base_bindir} ${D}${bindir} ${D}${mandir}/man8
+ # SUID root programs
+ install -m 4755 ping ${D}${base_bindir}/ping.${PN}
+ ...
+}</screen></para>
+
+ <para>If you were to look at the busybox recipe you would see that it also
+ doesn't install a command called <command>/bin/ping</command>, instead it
+ installs it's command as <command>/bin/busybox</command>.</para>
+
+ <para>The important point to note is that neither package is installing an
+ actual <command>/bin/ping</command> target command.</para>
+ </section>
+
+ <section>
+ <title>How alternatives work</title>
+
+ <para>Before proceeding lets take a look at how alternatives are handled.
+ If we have a base image that includes only busybox then look at
+ <command>/bin/ping</command> we see that it is a symlink to
+ busybox:</para>
+
+ <para><screen>root@titan:/etc# ls -l /bin/ping
+lrwxrwxrwx 1 root root 7 May 3 2006 /bin/ping -&gt; busybox</screen></para>
+
+ <para>This is what is expected since the busybox version of ping is the
+ only one installed on the system. Note again that it is only a symlink and
+ not an actual command.</para>
+
+ <para>If the iputils version of ping is now installed and we look at the
+ <command>/bin/ping</command> command again we see that it has been changed
+ to a symlink pointing at the iputils version of ping -
+ <command>/bin/ping.iptils</command>:</para>
+
+ <para><screen>root@titan:/etc# ipkg install iputils-ping
+Installing iputils-ping (20020927-r2) to root...
+Downloading http://nynaeve/ipkg-titan-glibc//iputils-ping_20020927-r2_sh4.ipk
+Configuring iputils-ping
+update-alternatives: Linking //bin/ping to ping.iputils
+root@titan:/etc# ls -l /bin/ping
+lrwxrwxrwx 1 root root 12 May 13 2006 /bin/ping -&gt; ping.iputils</screen></para>
+
+ <para>The iputils version is considered to be the more fully featured
+ version of ping and is therefore the default when both versions are
+ installed.</para>
+
+ <para>What happens if the iputils-ping package is removed now? The symlink
+ should be changed to point back at the busybox version:</para>
+
+ <para><screen>root@titan:/etc# ipkg remove iputils-ping
+Removing package iputils-ping from root...
+update-alternatives: Linking //bin/ping to busybox
+root@titan:/etc# ls -l /bin/ping
+lrwxrwxrwx 1 root root 7 May 13 2006 /bin/ping -&gt; busybox</screen></para>
+
+ <para>This simple example shows that the alternatives system is taking
+ care of ensuring the symlink is pointing to the correct version of the
+ command without any special interaction from the end users.</para>
+ </section>
+
+ <section>
+ <title>The update-alternatives command</title>
+
+ <para>Available alternatives need to be registered with the alternatives
+ system. This is handled by the <command>update-alternatives</command>
+ command. The help from the command shows it's usage options:<screen>root@titan:/etc# update-alternatives --help
+update-alternatives: help:
+
+Usage: update-alternatives --install &lt;link&gt; &lt;name&gt; &lt;path&gt; &lt;priority&gt;
+ update-alternatives --remove &lt;name&gt; &lt;path&gt;
+ update-alternatives --help
+&lt;link&gt; is the link pointing to the provided path (ie. /usr/bin/foo).
+&lt;name&gt; is the name in /usr/lib/ipkg/alternatives/alternatives (ie. foo)
+&lt;path&gt; is the name referred to (ie. /usr/bin/foo-extra-spiffy)
+&lt;priority&gt; is an integer; options with higher numbers are chosen.
+</screen></para>
+
+ <para>During postinst the update-alternatives command needs to be called
+ with the install option and during postrm it needs to be called with the
+ remove option.</para>
+
+ <para>The iputils recipe actual codes this directly (rather than using the
+ class) so we can see an example of the command being called:<screen>pkg_postinst_${PN}-ping () {
+ update-alternatives --install ${base_bindir}/ping ping ping.${PN} 100
+}
+pkg_prerm_${PN}-ping () {
+ update-alternatives --remove ping ping.${PN}
+}</screen></para>
+
+ <para>In both cases the name that the alternatives are registered against,
+ <command>"ping"</command>, is passed in and the path to the iputils
+ version of the command, <command>"ping.${PN}"</command>. For the install
+ case the actual command name (where the symlink will be made from) and a
+ priority value are also supplied.</para>
+ </section>
+
+ <section>
+ <title>Priority of the alternatives</title>
+
+ <para>So why did the alternatives system prefer the iputils version of
+ ping over the busybox version? It's because of the relative priorities of
+ the available alternatives. When iputils calls update-alternatives the
+ last parameter passed is a priority:<screen> update-alternatives --install ${base_bindir}/ping ping ping.${PN} 100</screen></para>
+
+ <para>So iputils is specifying a priority of 100 and if you look at
+ busybox you'll see it specifies a priority of 50 for ping. The alternative
+ with the highest priority value is the one that update-alternatives will
+ select as the version to actual use. In this particular situation the
+ authors have selected a higher priority for iputils since it is the more
+ capable version of ping and would not normally be installed unless
+ explicitly requested.</para>
+ </section>
+
+ <section>
+ <title>Tracking of the installed alternatives</title>
+
+ <para>You can actually see which alternatives are available and what their
+ priority is on a target system. Here we have an example in which both
+ busybox and iptuils-ping packages are installed: <screen>root@titan:/etc# cat /usr/lib/ipkg/alternatives/ping
+/bin/ping
+busybox 50
+ping.iputils 100</screen>If we remove iputils-ping, then we see that
+ alternatives file is updated to reflect this: <screen>root@titan:/etc# cat /usr/lib/ipkg/alternatives/ping
+/bin/ping
+busybox 50
+root@titan:/etc#</screen></para>
+
+ <para>The file lists the command first, and then each of the available
+ alternatives and their relative priorities.</para>
+ </section>
+
+ <section>
+ <title>Using the update-alternatives class</title>
+
+ <para>Neither busybox nor iputils actually use the update-alternatives
+ class - they call the update-alternatives functions directly. They need to
+ call the command directly since they need to register multiple
+ alternatives and the class does not support this. The class can only be
+ used when you have only a single alternative to register.</para>
+
+ <para>To use the class you need to inherent update-alternatives and then
+ define the name, path, link and priority as show in the following example
+ from the jamvm recipe:</para>
+
+ <para><screen>inherit autotools update-alternatives
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_PATH = "${bindir}/jamvm"
+ALTERNATIVE_LINK = "${bindir}/java"
+ALTERNATIVE_PRIORITY = "10"
+</screen></para>
+
+ <para>where the variables to be specified are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>ALTERNATIVE_NAME [Required]</term>
+
+ <listitem>
+ <para>The name that the alternative is registered against and needs
+ to be the same for all alternatives registering this command.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ALTERNATIVE_PATH [Required]</term>
+
+ <listitem>
+ <para>The path of the installed alternative. (This was iputils.ping
+ in the example used previously).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ALTERNATIVE_LINK [Optional]</term>
+
+ <listitem>
+ <para>The name of the actual command. This is what the symlink will
+ be called and is the actual command that the use runs. The default
+ value is: <command>"${bindir}/${ALTERNATIVE_NAME}"</command></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ALTERNATIVE_PRIORITY [Optional]</term>
+
+ <listitem>
+ <para>The priority of this alternative. The alternative with the
+ highest valued priority will be selected as the default. The default
+ value is: <command>"10"</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The actual postinst and postrm commands that are registered by the
+ class are:<screen>update_alternatives_postinst() {
+ update-alternatives --install ${ALTERNATIVE_LINK} ${ALTERNATIVE_NAME} ${ALTERNATIVE_PATH} ${ALTERNATIVE_PRIORITY}
+}
+
+update_alternatives_postrm() {
+ update-alternatives --remove ${ALTERNATIVE_NAME} ${ALTERNATIVE_PATH}
+}</screen></para>
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/class_update-rc.d.xml b/docs/usermanual/reference/class_update-rc.d.xml
new file mode 100644
index 0000000000..2da9b0bf86
--- /dev/null
+++ b/docs/usermanual/reference/class_update-rc.d.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="update-rc-d_class" xreflabel="update-rc.d class">
+ <title>update-rc.d class</title>
+
+ <para>Services which need to be started during boot need to be registered
+ using the update-rc.d command. These services are required to have an init
+ script which is installed into <command>/etc/init.d</command> that can be
+ used to start and stop the service.</para>
+
+ <para>The following examples show a service being manually stopped and
+ started using it's init script:<screen>root@titan:/etc# /etc/init.d/syslog stop
+Stopping syslogd/klogd: stopped syslogd (pid 1551).
+stopped klogd (pid 1553).
+done
+root@titan:/etc# /etc/init.d/syslog start
+Starting syslogd/klogd: done
+root@titan:/etc#</screen>The update-rc.d class takes care of the following
+ automatically:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Registers the service with the system during postinst so it will
+ be automatically started on boot;</para>
+ </listitem>
+
+ <listitem>
+ <para>Stops the service during prerm so it will no longer be running
+ after being removed;</para>
+ </listitem>
+
+ <listitem>
+ <para>Unregisters the service during prerm so there will be no attempts
+ to start the removed service during boot;</para>
+ </listitem>
+
+ <listitem>
+ <para>Adds a build and run time dependency on the update-rc.d package
+ which it uses to register and unregister the services.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Usage is very simple, as shown by this example from dropbear:<screen>INITSCRIPT_NAME = "dropbear"
+INITSCRIPT_PARAMS = "defaults 10"
+
+inherit autotools update-rc.d</screen></para>
+
+ <para>where the variables are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>INITSCRIPT_NAME</term>
+
+ <listitem>
+ <para>The name of the init script, which the package will have
+ installed into /etc/init.d</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>INITSCRIPT_PARAMS</term>
+
+ <listitem>
+ <para>The parameters to pass to the update-rc.d call during
+ installation. Typically this will be the work default followed by
+ either single number or a pair of numbers representing the start/stop
+ sequence number (both are set to the same if only one number is
+ supplied.)</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The help from update-rc.d shows show the required parameters:<screen>root@titan:/etc# update-rc.d -h
+usage: update-rc.d [-n] [-f] [-r &lt;root&gt;] &lt;basename&gt; remove
+ update-rc.d [-n] [-r &lt;root&gt;] [-s] &lt;basename&gt; defaults [NN | sNN kNN]
+ update-rc.d [-n] [-r &lt;root&gt;] [-s] &lt;basename&gt; start|stop NN runlvl [runlvl] [...] .
+ -n: not really
+ -f: force
+ -r: alternate root path (default is /)
+ -s: invoke start methods if appropriate to current runlevel
+root@titan:/etc#</screen>The start and stop sequence numbers need to ensure
+ that the the service is started at the appropriate time relative to other
+ services, such as waiting for any service that it depends on before starting
+ (networking for example). Unless the service is a system or security related
+ service it's better to be started as late as possible.</para>
+
+ <section>
+ <title>Multiple update-rc.d packages</title>
+
+ <para>Defining multiple init scripts within the one recipe is also
+ supported. Note that each init script must be in it's own package. The
+ following example is from the quagga recipe:<screen># Main init script starts all deamons
+# Seperate init script for watchquagga
+INITSCRIPT_PACKAGES = "${PN} ${PN}-watchquagga"
+INITSCRIPT_NAME_${PN} = "quagga"
+INITSCRIPT_PARAMS_${PN} = "defaults 15 85"
+INITSCRIPT_NAME_${PN}-watchquagga = "watchquagga"
+INITSCRIPT_PARAMS_${PN}-watchquagga = "defaults 90 10"
+
+inherit autotools update-rc.d</screen> The variables that need to be declared
+ are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>INITSCRIPT_PACKAGES</term>
+
+ <listitem>
+ <para>The names of each package which includes an init
+ script.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>INITSCRIPT_NAME_x</term>
+
+ <listitem>
+ <para>The same meaning as INITSCRIPT_NAME, but for the package x.
+ This would be repeated for each package that includes an init
+ script.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>INITSCRIPT_PARAMS_x</term>
+
+ <listitem>
+ <para>The same meaning as INITSCRIPT_PARAMS, but for the package x.
+ This would be repeated for each package that includes an init
+ script.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/dirs_install.xml b/docs/usermanual/reference/dirs_install.xml
new file mode 100644
index 0000000000..75f85ac930
--- /dev/null
+++ b/docs/usermanual/reference/dirs_install.xml
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="directories_installation" xreflabel="Installation directories">
+ <title>Directories: Installation variables</title>
+
+ <para>The following table provides a list of the variables that are used to
+ control the directories into which files are installed.</para>
+
+ <para>These variables can be used directly by the recipe to refer to paths
+ that will be used after the package is installed. For example, when specify
+ the location of configuration files you need to specify the location on the
+ target as show in the following example from quagga:<screen># Indicate that the default files are configuration files
+CONFFILES_${PN} = "${sysconfdir}/default/quagga"
+CONFFILES_${PN}-watchquagga = "${sysconfdir}/default/watchquagga"</screen></para>
+
+ <para>When using these variables to actually install the components of a
+ package from within a bitbake recipe they should used relative to the
+ destination directory, <emphasis role="bold">D</emphasis>. The following
+ example from the quagga recipe shows some addition files being manually
+ installed from within the recipe itself:<screen>do_install () {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d ${D}${sysconfdir}/quagga
+ install -m 0644 ${WORKDIR}/quagga.default ${D}${sysconfdir}/default/quagga</screen></para>
+
+ <informaltable>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Variable name</entry>
+
+ <entry>Definition</entry>
+
+ <entry>Typical value</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>prefix</entry>
+
+ <entry>/usr</entry>
+
+ <entry>/usr</entry>
+ </row>
+
+ <row>
+ <entry>base_prefix</entry>
+
+ <entry align="right"><emphasis>(empty)</emphasis></entry>
+
+ <entry align="right"><emphasis>(empty)</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>exec_prefix</entry>
+
+ <entry>${base_prefix}</entry>
+
+ <entry align="right"><emphasis>(empty)</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>base_bindir</entry>
+
+ <entry>${base_prefix}/bin</entry>
+
+ <entry>/bin</entry>
+ </row>
+
+ <row>
+ <entry>base_sbindir</entry>
+
+ <entry>${base_prefix}/sbin</entry>
+
+ <entry>/sbin</entry>
+ </row>
+
+ <row>
+ <entry>base_libdir</entry>
+
+ <entry>${base_prefix}/lib</entry>
+
+ <entry>/lib</entry>
+ </row>
+
+ <row>
+ <entry>datadir</entry>
+
+ <entry>${prefix}/share</entry>
+
+ <entry>/usr/share</entry>
+ </row>
+
+ <row>
+ <entry>sysconfdir</entry>
+
+ <entry>/etc</entry>
+
+ <entry>/etc</entry>
+ </row>
+
+ <row>
+ <entry>localstatedir</entry>
+
+ <entry>/var</entry>
+
+ <entry>/var</entry>
+ </row>
+
+ <row>
+ <entry>infodir</entry>
+
+ <entry>${datadir}/info</entry>
+
+ <entry>/usr/share/info</entry>
+ </row>
+
+ <row>
+ <entry>mandir</entry>
+
+ <entry>${datadir}/man</entry>
+
+ <entry>/usr/share/man</entry>
+ </row>
+
+ <row>
+ <entry>docdir</entry>
+
+ <entry>${datadir}/doc</entry>
+
+ <entry>/usr/share/doc</entry>
+ </row>
+
+ <row>
+ <entry>servicedir</entry>
+
+ <entry>/srv</entry>
+
+ <entry>/srv</entry>
+ </row>
+
+ <row>
+ <entry>bindir</entry>
+
+ <entry>${exec_prefix}/bin</entry>
+
+ <entry>/usr/bin</entry>
+ </row>
+
+ <row>
+ <entry>sbindir</entry>
+
+ <entry>${exec_prefix}/sbin</entry>
+
+ <entry>/usr/sbin</entry>
+ </row>
+
+ <row>
+ <entry>libexecdir</entry>
+
+ <entry>${exec_prefix}/libexec</entry>
+
+ <entry>/usr/libexec</entry>
+ </row>
+
+ <row>
+ <entry>libdir</entry>
+
+ <entry>${exec_prefix}/lib</entry>
+
+ <entry>/usr/lib</entry>
+ </row>
+
+ <row>
+ <entry>includedir</entry>
+
+ <entry>${exec_prefix}/include</entry>
+
+ <entry>/usr/include</entry>
+ </row>
+
+ <row>
+ <entry>palmtopdir</entry>
+ <entry>${libdir}/opie</entry>
+ <entry>/usr/lib/opie</entry>
+ </row>
+
+ <row>
+ <entry>palmqtdir</entry>
+ <entry>${palmtopdir}</entry>
+ <entry>/usr/lib/opie</entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para></para>
+</section>
diff --git a/docs/usermanual/reference/dirs_staging.xml b/docs/usermanual/reference/dirs_staging.xml
new file mode 100644
index 0000000000..25f3685aad
--- /dev/null
+++ b/docs/usermanual/reference/dirs_staging.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="directories_staging" xreflabel="Staging directories">
+ <title>Directories: Staging variables</title>
+
+ <para>The following table provides a list of the variables that are used to
+ control the directories into which files are staged.</para>
+
+ <para>Staging is used for headers, libraries and binaries that are generated
+ by packages and are to be used in the generation of other packages. For
+ example the libpcre recipe needs to make the include files and libraries for
+ the target available on the host for other applications that depend on
+ libpcre. So in addition to packaging these files up for use in the binary
+ package they are need to be installed in the staging are for use by other
+ packages.</para>
+
+ <para>There are two common situations in which you will need to directly
+ refer to the staging directories:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>To specify where headers and libraries are to be found for
+ libraries that your package depends on. In some cases these will be
+ found automatically due to the default compiler settings used by OE, but
+ in other cases you will need to explicitly tell your package to look in
+ the staging area. This is more commonly needed with autoconf based
+ packages that check for the presence of a specific package during the
+ <emphasis>configure</emphasis> task.</para>
+ </listitem>
+
+ <listitem>
+ <para>In the <emphasis>stage</emphasis> task for libraries to specify
+ where to install the headers and libraries.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>The following example from libpcre shows the installation of the
+ libraries and headers from the package into the staging area. Note the use
+ of the <emphasis>oe_libinstall</emphasis> helper function for installation
+ of the libraries:<screen>do_stage () {
+ oe_libinstall -a -so libpcre ${STAGING_LIBDIR}
+ oe_libinstall -a -so libpcreposix ${STAGING_LIBDIR}
+ install -m 0644 pcre.h ${STAGING_INCDIR}/
+ install -m 0644 pcreposix.h ${STAGING_INCDIR}/
+}</screen></para>
+
+ <para>The following example from the flac recipe shows the location of the
+ ogg libraries and included before explicitly passed to the configured script
+ via EXTRA_OECONF so that it will correctly find ogg and enable support for
+ it:<screen>EXTRA_OECONF = "--disable-oggtest --disable-id3libtest \
+ --with-ogg-libraries=${STAGING_LIBDIR} \
+ --with-ogg-includes=${STAGING_INCDIR} \
+ --without-xmms-prefix \
+ --without-xmms-exec-prefix \
+ --without-libiconv-prefix \
+ --without-id3lib"</screen>The following table lists the available
+ variables for referring to the staging area:</para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <colspec colnum="0" colwidth="1*" />
+
+ <colspec colnum="1" colwidth="1*" />
+
+ <thead>
+ <row>
+ <entry>Directory</entry>
+
+ <entry>Definition</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>STAGING_DIR</entry>
+
+ <entry>${TMPDIR}/staging</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_BINDIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/bin</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_BINDIR_CROSS</entry>
+
+ <entry>${STAGING_DIR}/${BUILD_SYS}/bin/${HOST_SYS}</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_BINDIR_NATIVE</entry>
+
+ <entry>${STAGING_DIR}/${BUILD_SYS}/bin</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_LIBDIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/lib</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_INCDIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/include</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_DATADIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/share</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_LOADER_DIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/loader</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_FIRMWARE_DIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/firmware</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_PYDIR</entry>
+
+ <entry>${STAGING_DIR}/lib/python2.4</entry>
+ </row>
+
+ <row>
+ <entry>STAGING_KERNEL_DIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/kernel</entry>
+ </row>
+
+ <row>
+ <entry>PKG_CONFIG_PATH</entry>
+
+ <entry>${STAGING_LIBDIR}/pkgconfig</entry>
+ </row>
+
+ <row>
+ <entry>QTDIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}/qt2</entry>
+ </row>
+
+ <row>
+ <entry>QPEDIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}</entry>
+ </row>
+
+ <row>
+ <entry>OPIEDIR</entry>
+
+ <entry>${STAGING_DIR}/${HOST_SYS}</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para></para>
+
+ <para></para>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/fakeroot.xml b/docs/usermanual/reference/fakeroot.xml
new file mode 100644
index 0000000000..5eb6a48eb0
--- /dev/null
+++ b/docs/usermanual/reference/fakeroot.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="fakeroot" xreflabel="fakeroot">
+ <title>fakeroot (device node handling)</title>
+
+ <para>The fakeroot program is designed to allow non-root users to perform
+ actions that would normally require root privileges as part of the package
+ generation process. It is used by the <xref linkend="rootfs_ipkg_class" />
+ for root filesystem creation and by the <xref linkend="image_class" />
+ for the creation of filesystem images. Some recipes also use fakeroot to
+ assist with parts of the package installation (usually) or building where
+ root privligeses are expected by the package.</para>
+
+ <para>In particular fakeroot deals with:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Device nodes; and</para>
+ </listitem>
+
+ <listitem>
+ <para>Ownership and group (uid &amp; gid) management.</para>
+ </listitem>
+ </itemizedlist>
+
+ <section>
+ <title>How fakeroot works</title>
+
+ <para>First of all we'll look at an example of how the fakeroot process
+ works when used manually.</para>
+
+ <para>If we attempt to create a device node as a normal non-root user then
+ the command will fail, telling is that we do not have permission to create
+ device nodes:<screen>~%&gt; mknod hdc b 22 0
+mknod: `hdc': Operation not permitted</screen>Yet the <xref
+ linkend="image_class" /> is able to create device nodes and include
+ them in the final images, all without the need to have root
+ privileges.</para>
+
+ <para>Let's try and create that node again, this time we'll run the
+ commands from within a fakeroot process:<screen>~%&gt; ./tmp/staging/x86_64-linux/bin/fakeroot
+~#&gt; mknod hdc b 22 0
+~#&gt; ls -l hdc
+brw------- 1 root root 22, 0 Aug 18 13:20 hdc
+~#&gt;</screen>So it looks like we have successfully managed to create a
+ device node, even though we did not have to give a password for the root
+ user. In reality this device node still doesn't exist, it just looks like
+ it exits. Fakeroot is lying to the shell process and telling it that
+ <emphasis>"yes, this file exists and these are it's
+ properties"</emphasis>. We'll talk more about how fakeroot actually works
+ in a minute.</para>
+
+ <para>In this case <command>hdc</command> is the cd-rom drive, so let's
+ try and actually mount the cd-rom:<screen>~#&gt; mkdir disk
+~#&gt; mount hdc disk
+ERROR: ld.so: object 'libfakeroot.so.0' from LD_PRELOAD cannot be preloaded: ignored.
+mount: only root can do that
+~#&gt;</screen>So even though it appears we have root permissions, and that we
+ created a device node, you see that the system gives an error about
+ libfakeroot and about not being able to run mount because we are not
+ root.</para>
+
+ <para>If we exit the fakeroot process and then look at the device node
+ this is what we see:<screen>~#&gt; exit
+~%&gt; ls -l hdc
+brw------- 1 user user 22, 0 Aug 18 13:20 hdc
+~#&gt;</screen></para>
+
+ <para>Note that it isn't a device node at all, just an empty file owned by
+ the current user!</para>
+
+ <para>So what exactly is fakeroot doing? It's using
+ <command>LD_PRELOAD</command> to load a shared library into program which
+ replaces calls into libc, such as open and stat, and then returns
+ information to make it look like certain commands succeeded without
+ actually performing those commands. So when creating a device node
+ fakeroot will:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Intercept the mknod system call and instead of creating a device
+ node it'll just create an empty file, owned by the user who run
+ fakeroot;</para>
+ </listitem>
+
+ <listitem>
+ <para>It remembers the fact that mknod was called by root and it
+ remembers the properties of the device node;</para>
+ </listitem>
+
+ <listitem>
+ <para>When a program, such as ls, calls stat on the file fakeroot
+ remembers that it was device node, owned by root, and modifies that
+ stat information to return this to ls. So ls sees a device node even
+ though one doesn't exist.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>When we tried to run mount we received the error <command>"ERROR:
+ ld.so: object 'libfakeroot.so.0' from LD_PRELOAD cannot be preloaded:
+ ignored."</command>. This is due to the fact that mount is an suid root
+ binary, and for security reasons <command>LD_PRELOAD</command> is disabled
+ on suid binaries.</para>
+
+ <para>There are some very important points to remember when dealing with
+ fakeroot:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>All information regarding devices nodes, uid and gids will be
+ lost when fakeroot exists;</para>
+ </listitem>
+
+ <listitem>
+ <para>None of the device nodes, uids or gids will appear on disk.
+ However if you tar up a directory from within fakeroot (for example),
+ all of these device, uids and gids will appear correctly in the tar
+ archive;</para>
+ </listitem>
+
+ <listitem>
+ <para>Any suid binaries will not interact with fakeroot;</para>
+ </listitem>
+
+ <listitem>
+ <para>Any static binaries will not interact with fakeroot;</para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section>
+ <title>Root filesystem, images and fakeroot</title>
+
+ <para>Many people have been confused by the generated root filesystem not
+ containing any valid device nodes. This is in fact the expected
+ behaviour.</para>
+
+ <para>When you look at a generated root filesystem you'll notice that the
+ device nodes all appear to be incorrectly created:<screen>~%&gt; ls -l tmp/rootfs/dev | grep ttySC
+-rw-r--r-- 1 root root 0 Aug 16 13:07 ttySC0
+-rw-r--r-- 1 root root 0 Aug 16 13:07 ttySC1
+-rw-r--r-- 1 root root 0 Aug 16 13:07 ttySC2
+~%&gt;</screen>These are empty files and not device nodes at all.</para>
+
+ <para>If we look in the image files generated from that root filesystem
+ then everything is actually ok:<screen>~%&gt; tar -ztvf tmp/deploy/images/titan-titan-20060816030639.rootfs.tar.gz | grep " ./dev/ttySC"
+crw-r----- root/root 204,8 2006-08-16 13:07:12 ./dev/ttySC0
+crw-r----- root/root 204,9 2006-08-16 13:07:12 ./dev/ttySC1
+crw-r----- root/root 204,10 2006-08-16 13:07:12 ./dev/ttySC2
+~%&gt;</screen>The images are created from within the same fakeroot process as
+ the creation of the root filesystem and therefore it correctly picks up
+ all of the special files and permissions from fakeroot.</para>
+
+ <para><emphasis role="bold">NOTE: This means that you cannot use the root
+ filesystem in tmp/rootfs directly on your target device. You need to use
+ the .tar.gz image and uncompress it, as root, in order to generate a root
+ filesystem which is suitable for use directly on the target (or as an NFS
+ root).</emphasis></para>
+ </section>
+
+ <section>
+ <title>Recipes and fakeroot</title>
+
+ <para>Some applications require that you have root permissions to run
+ their installation routine, and this is another area where fakeroot can
+ help. In a recipe the method for a standard task, such as the
+ <command>do_install</command> method for the <emphasis>install</emphasis>
+ task:<screen>do_install() {
+ install -d ${D}${bindir} ${D}${sbindir} ${D}${mandir}/man8 \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/init.d \
+ ${D}${datadir}/arpwatch
+
+ oe_runmake install DESTDIR=${D}
+ oe_runmake install-man DESTDIR=${D}
+ ...</screen>can be modified to run within a fakeroot environment by
+ prefixing the method name with fakeroot:<screen><emphasis role="bold">fakeroot</emphasis> do_install() {
+ install -d ${D}${bindir} ${D}${sbindir} ${D}${mandir}/man8 \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/init.d \
+ ${D}${datadir}/arpwatch
+
+ oe_runmake install DESTDIR=${D}
+ oe_runmake install-man DESTDIR=${D}
+ ...</screen></para>
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/reference/image_types.xml b/docs/usermanual/reference/image_types.xml
new file mode 100644
index 0000000000..4ea174fd46
--- /dev/null
+++ b/docs/usermanual/reference/image_types.xml
@@ -0,0 +1,385 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="image_types" xreflabel="image types">
+ <title>Image types</title>
+
+ <para>One of the most commonly used outputs from a build is a filesystem
+ image containing the root filesystem for the target device. There are
+ several variables which can be used to control the type of output images and
+ the settings for those images, such as endianess or compression ratios. This
+ section details the available images and the variables that effect them. See
+ the <xref linkend="image_class" /> section for details on how image
+ generation is configured.</para>
+
+ <para>The final root file system will consist of all of the files located in
+ image root filesystem directory, <command>${IMAGE_ROOTFS}</command>, which
+ is usually <command>tmp/rootfs</command> in the build area. One important
+ difference between the images and the root file system directory is that any
+ files which can only be created by privileged users, such as device nodes,
+ will not appear in the <command>${IMAGE_ROOTFS}</command> directory but they
+ will be present in any images that are generated. This is due to
+ <emphasis><xref linkend="fakeroot" /> </emphasis>system keeping track of
+ these special files and making them available when generating the image -
+ even though they do not appear in the root filesystem directory. For this
+ reason it is important to always create an actual image to use for testing,
+ even if it's just a <command>.tar</command> archive, to ensure you have the
+ correct device nodes and any other special files.</para>
+
+ <section>
+ <title>Defining images</title>
+
+ <para>Each supported image type is defined via a set of variables. Each
+ variables has the name of the image type appended to indicate the settings
+ for that particular image type. The behaviour of the built in image types
+ can be changed by modifying these variables, and new types can be created
+ by defining these variables for the new type.</para>
+
+ <para>The variables that define an image type are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>IMAGE_CMD_&lt;type&gt;</term>
+
+ <listitem>
+ <para>Specifies the actual command that is run to generate an image
+ of the specified type.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>EXTRA_IMAGECMD_&lt;type&gt;</term>
+
+ <listitem>
+ <para>Used to pass additional command line arguments to the
+ <command>IMAGE_CMD</command> without the need to redefine the entire
+ image command. This is often used to pass options such as endianess
+ and compression rations. You need to look at the
+ <command>IMAGE_CMD</command> definition to determine how these
+ options are being used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_ROOTFS_SIZE_&lt;type&gt;</term>
+
+ <listitem>
+ <para>For those image types that generate a fixed size image this
+ variable is used to specify the required image size.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>IMAGE_DEPENDS_&lt;type&gt;</term>
+
+ <listitem>
+ <para>Lists the packages that the <command>IMAGE_CMD</command>
+ depends on. As an example the jffs2 filesystem creation depends on
+ <command>mkfs.jffs2</command> command which is part of the mtd
+ utilities and therefore depends on mtd-utils-native.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section>
+ <title>Available image types</title>
+
+ <para>The following image types are built in to OpenEmbedded:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>jffs2</term>
+
+ <listitem>
+ <para>Creates jffs2 <emphasis>"Journaling flash file system
+ 2"</emphasis> images. This is a read/write, compressed filesystem
+ for mtd (flash) devices. It is not supported for block
+ devices.<screen>IMAGE_CMD_jffs2 = "mkfs.jffs2 \
+ -x lzo \
+ --root=${IMAGE_ROOTFS} \
+ --faketime \
+ --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
+ ${EXTRA_IMAGECMD}"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for jffs2
+ passed to <command>mkfs.jffs2</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_jffs2 = ""</screen></para>
+
+ <para>This was not always empty, prior to 2007/05/02 the
+ <command>EXTRA_IMAGECMD</command> variable for jffs2 was set to
+ enable padding, to define the endianess and to specify the block
+ size:<screen><emphasis>EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000"</emphasis></screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cramfs</term>
+
+ <listitem>
+ <para>Creates cramfs <emphasis>"Compression ROM file
+ system"</emphasis> images. This is a read only compressed filesystem
+ which is used directly by decompressing files into RAM as they are
+ accessed. Files sizes are limited to 16MB, file system size is
+ limited to 256MB, only 8-bit uids and gids are supported, no hard
+ links are supported and no time stamps are supported.<screen>IMAGE_CMD_cramfs = "mkcramfs ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cramfs \
+ ${EXTRA_IMAGECMD}"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for cramfs is
+ passed to <command>mkcramfs</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_cramfs = ""</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ext2</term>
+
+ <listitem>
+ <para>Creates an <emphasis>"Extended Filesystem 2"</emphasis> image
+ file. This is the standard Linux non-journaling file system.<screen>IMAGE_CMD_ext2 = "genext2fs -b ${IMAGE_ROOTFS_SIZE} \
+ -d ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext2 \
+ ${EXTRA_IMAGECMD}"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for ext2 is
+ passed to <command>genext2fs</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_ext2 = ""</screen></para>
+
+ <para>The <command>IMAGE_ROOTS_SIZE</command> variable is used to
+ specify the size of the ext2 image and is set to 64k by
+ default:<screen>IMAGE_ROOTFS_SIZE_ext2 = "65536"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ext3</term>
+
+ <listitem>
+ <para>Creates an <emphasis>"Extended Filesystem 3"</emphasis> image
+ file. This is the standard Linux journaling file system.<screen>IMAGE_CMD_ext3 = "genext2fs -b ${IMAGE_ROOTFS_SIZE} \
+ -d ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3 \
+ ${EXTRA_IMAGECMD}; \
+tune2fs -j ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext3"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for ext3 is
+ passed to <command>genext2fs</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_ext3 = ""</screen></para>
+
+ <para>The <command>IMAGE_ROOTS_SIZE</command> variable is used to
+ specify the size of the ext3 image and is set to 64k by
+ default:<screen>IMAGE_ROOTFS_SIZE_ext3 = "65536"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ext2.gz</term>
+
+ <listitem>
+ <para>Creates a version of the ext2 filesystem image compressed with
+ <command>gzip</command>.</para>
+
+ <para><screen>IMAGE_CMD_ext2.gz = "rm -rf ${DEPLOY_DIR_IMAGE}/tmp.gz &amp;&amp; \
+mkdir ${DEPLOY_DIR_IMAGE}/tmp.gz; \
+genext2fs -b ${IMAGE_ROOTFS_SIZE} -d ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext2 \
+ ${EXTRA_IMAGECMD}; \
+gzip -f -9 ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext2; \
+mv ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext2.gz \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext2.gz; \
+rmdir ${DEPLOY_DIR_IMAGE}/tmp.gz"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for ext2.gz is
+ passed to <command>genext2fs</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_ext2.gz = ""</screen></para>
+
+ <para>The <command>IMAGE_ROOTS_SIZE</command> variable is used to
+ specify the size of the ext2 image and is set to 64k by
+ default:</para>
+
+ <para><screen>IMAGE_ROOTFS_SIZE_ext2.gz = "65536"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ext3.gz</term>
+
+ <listitem>
+ <para>Creates a version of the ext3 filesystem image compressed with
+ <command>gzip</command>.</para>
+
+ <para><screen>IMAGE_CMD_ext3.gz = "rm -rf ${DEPLOY_DIR_IMAGE}/tmp.gz &amp;&amp; \
+mkdir ${DEPLOY_DIR_IMAGE}/tmp.gz; \
+genext2fs -b ${IMAGE_ROOTFS_SIZE} -d ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext3 \
+ ${EXTRA_IMAGECMD}; \
+tune2fs -j ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext3; \
+gzip -f -9 ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext3; \
+mv ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext3.gz \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3.gz; \
+rmdir ${DEPLOY_DIR_IMAGE}/tmp.gz"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for ext3.gz is
+ passed to <command>genext2fs</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_ext3.gz = ""</screen></para>
+
+ <para>The <command>IMAGE_ROOTS_SIZE</command> variable is used to
+ specify the size of the ext2 image and is set to 64k by
+ default:</para>
+
+ <para><screen>IMAGE_ROOTFS_SIZE_ext3.gz = "65536"</screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>squashfs</term>
+
+ <listitem>
+ <para>Creates a squashfs image. This is a read only compressed
+ filesystem which is used directly with files uncompressed into RAM
+ as they are accessed. Files and filesystems may be up to 2^64 bytes
+ in size, full 32-bit uids and gids are stored, it detects duplicate
+ files and stores only a single copy, all meta-data is compressed and
+ big and little endian filesystems can be mounted on any
+ platform.</para>
+
+ <para>Squashfs uses gzip as its compression method.</para>
+
+ <para><screen>IMAGE_CMD_squashfs = "mksquashfs ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.squashfs \
+ ${EXTRA_IMAGECMD} -noappend"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for squashfs is
+ passed to <command>mksquashfs</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_squashfs = ""</screen></para>
+
+ <para>This was not always empty, prior to 2007/05/02 the
+ <command>EXTRA_IMAGECMD</command> variable for squashfs specified
+ the endianess and block size of the filesystem:<screen><emphasis>EXTRA_IMAGECMD_squashfs = "-le -b 16384"</emphasis></screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>squashfs-lzma</term>
+
+ <listitem>
+ <para>Creates a squashfs image using lzma compression instead of
+ gzip which is the standard squashfs compression type. This is a read
+ only compressed filesystem which is used directly with files
+ uncompressed into RAM as they are accessed. Files and filesystems
+ may be up to 2^64 bytes in size, full 32-bit uids and gids are
+ stored, it detects duplicate files and stores only a single copy,
+ all meta-data is compressed and big and little endian filesystems
+ can be mounted on any platform.</para>
+
+ <para>Squashfs-lzma uses lzma as its compression method.</para>
+
+ <para><screen>IMAGE_CMD_squashfs-lzma = "mksquashfs-lzma ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.squashfs \
+ ${EXTRA_IMAGECMD} -noappend"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable for squashfs is
+ passed to <command>mksquashfs-lzma</command> and is left empty by
+ default:<screen>EXTRA_IMAGECMD_squashfs-lzma = ""</screen></para>
+
+ <para>This was not always empty, prior to 2007/05/02 the
+ <command>EXTRA_IMAGECMD</command> variable for squashfs specified
+ the endianess and block size of the filesystem:<screen><emphasis>EXTRA_IMAGECMD_squashfs-lzma = "-le -b 16384"</emphasis></screen></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>tar</term>
+
+ <listitem>
+ <para>Creates a .tar archive.</para>
+
+ <para><screen>IMAGE_CMD_tar = "cd ${IMAGE_ROOTFS} &amp;&amp; \
+ tar -cvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar ."</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable in not
+ supported for tar images.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>tar.gz</term>
+
+ <listitem>
+ <para>Creates a <command>gzip</command> compressed .tar
+ archive.</para>
+
+ <para><screen>IMAGE_CMD_tar.gz = "cd ${IMAGE_ROOTFS} &amp;&amp; \
+ tar -zcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.gz ."</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable in not
+ supported for .tar.gz images.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>tar.bz2</term>
+
+ <listitem>
+ <para>Creates a <command>bzip2</command> compressed .tar
+ archive.</para>
+
+ <para><screen>IMAGE_CMD_tar.bz2 = "cd ${IMAGE_ROOTFS} &amp;&amp; \
+ tar -jcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.bz2 ."</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable in not
+ supported for tar.bz2 images.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cpio</term>
+
+ <listitem>
+ <para>Creates a .cpio archive:<screen>IMAGE_CMD_cpio = "cd ${IMAGE_ROOTFS} &amp;&amp; \
+ (find . | cpio -o -H newc &gt;${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio)"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable in not
+ supported for cpio images.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cpio.gz</term>
+
+ <listitem>
+ <para>Creates a <command>gzip</command> compressed .cpio
+ archive.<screen>IMAGE_CMD_cpio.gz = cd ${IMAGE_ROOTFS} &amp;&amp; \
+ (find . | cpio -o -H newc | gzip -c -9 &gt;${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz)"</screen></para>
+
+ <para>The <command>EXTRA_IMAGECMD</command> variable in not
+ supported for cpio.gz images.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The above built in list of image types is defined in the bitbake
+ configuration file:
+ <command>org.openembedded.dev/conf/bitbake.conf</command>.</para>
+ </section>
+
+ <section>
+ <title>Custom image types</title>
+
+ <para>Custom image types can be created by defining the
+ <command>IMAGE_CMD</command> variable, and optionally the
+ <command>EXTRA_IMAGECMD</command>, <command>IMAGE_ROOTFS_SIZE</command>
+ and <command>IMAGE_DEPENDS</command> variables, for your new image
+ type.</para>
+
+ <para>An example can be found in
+ <command>conf/machine/wrt54.conf</command> where it defines a new image
+ type, <emphasis>squashfs-lzma</emphasis>, for a squashfs filesystem using
+ lzma compression instead of the standard gzip compression (squashfs-lzma
+ is now a standard type, but the example still serves to show the
+ concept):<screen>IMAGE_DEPENDS_squashfs-lzma = "squashfs-tools-native"
+IMAGE_CMD_squashfs-lzma = "mksquashfs-lzma ${IMAGE_ROOTFS} \
+ ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.squashfs-lzma \
+ ${EXTRA_IMAGECMD} -noappend"
+EXTRA_IMAGECMD_squashfs-lzma = "-root-owned -le"</screen></para>
+ </section>
+</section>
diff --git a/docs/usermanual/reference/var_section.xml b/docs/usermanual/reference/var_section.xml
new file mode 100644
index 0000000000..96b746e56c
--- /dev/null
+++ b/docs/usermanual/reference/var_section.xml
@@ -0,0 +1,704 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="section_variable" xreflabel="SECTION variable">
+ <title>SECTION variable: Package category</title>
+
+ <para>Sections are a means for categorising packages into related groups to
+ enable users to find packages easier. The <command>SECTION</command>
+ variable is used to declare which section a package belongs to. The most
+ common use of the section information is in GUI based package management
+ applications.</para>
+
+ <para>The default values for the section variables are:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><command>SECTION = "base"</command></para>
+ </listitem>
+
+ <listitem>
+ <para><command>SECTION_${PN}-doc = "doc"</command></para>
+ </listitem>
+
+ <listitem>
+ <para><command>SECTION_${PN}-dev = "devel"</command></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Note that each package generated by a recipe can have it's own section
+ and that by default documentation and development files are seperated out to
+ their own sections.</para>
+
+ <para>The table of sections show the current usage of section information.
+ This is a recomendation only, althought it is recomended that any additions
+ or modifications be discusssed via the open embedded developer mailing list
+ first.</para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <colspec colwidth="1*" />
+
+ <colspec colwidth="3*" />
+
+ <tbody>
+ <row>
+ <entry>Section</entry>
+
+ <entry>Description</entry>
+ </row>
+
+ <row>
+ <entry>admin</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>base</entry>
+
+ <entry>Base system files. These are applications which are expected
+ to be included as part of a base system and include things such as
+ init scripts, core utilities, standard system daemons etc.</entry>
+ </row>
+
+ <row>
+ <entry>base/shell</entry>
+
+ <entry>Shells such as bash, tcsh, ksh etc.</entry>
+ </row>
+
+ <row>
+ <entry>bootloaders</entry>
+
+ <entry>Bootloaders, which are the applications responsible for
+ loading the kernel from the appropriate location (disk, flash,
+ network, etc.) and starting it running.</entry>
+ </row>
+
+ <row>
+ <entry>console</entry>
+
+ <entry>Applications which run on the console. These require no GUI
+ related libraries or interfaces to run.</entry>
+ </row>
+
+ <row>
+ <entry>console/editors</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/games</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/multimedia</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/network</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/scientific</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/telephony</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/tools</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>console/utils</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel</entry>
+
+ <entry>Development related files. These include compilers,
+ libraries, headers, debuggers etc.</entry>
+ </row>
+
+ <row>
+ <entry>devel/libs</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel/perl</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel/python</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel/rexx</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel/ruby</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel/scheme</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>devel/tcltk</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>doc</entry>
+
+ <entry>Documentation, including man pages and sample configuration
+ files.</entry>
+ </row>
+
+ <row>
+ <entry>e/apps</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>e/libs</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>e/utils</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>fonts</entry>
+
+ <entry>Fonts that are not X11 or OPIE specific such as truetype
+ fonts.</entry>
+ </row>
+
+ <row>
+ <entry>games</entry>
+
+ <entry>Games.</entry>
+ </row>
+
+ <row>
+ <entry>games/arcade</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>gpe</entry>
+
+ <entry>GPE GUI enviroment. For the anything that provides or uses
+ the GPE UI. Note that development and documentation related files
+ should be in the appropriate devel and doc section, not under
+ GPE.</entry>
+ </row>
+
+ <row>
+ <entry>gpe/applications</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>gpe/base</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>gpe/games</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>gpe/libs</entry>
+
+ <entry>GPE runtime libraries. This does not include libraries used
+ for development - they should be included in the appropriate devel
+ section.</entry>
+ </row>
+
+ <row>
+ <entry>gpe/multimedia</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>inputmethods</entry>
+
+ <entry>inputmethods that are neither libs, nor solely for GPE/Opie or the console</entry>
+ </row>
+
+ <row>
+ <entry>interpreters</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>kde</entry>
+
+ <entry>KDE related applications.</entry>
+ </row>
+
+ <row>
+ <entry>kde/devel</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>kernel</entry>
+
+ <entry>Linux kernels.</entry>
+ </row>
+
+ <row>
+ <entry>kernel/modules</entry>
+
+ <entry>Linux kernel modules. This include out-of-tree kernel
+ modules.</entry>
+ </row>
+
+ <row>
+ <entry>kernel/userland</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>libs</entry>
+
+ <entry>Runtime libraries. This does not include libraries used for
+ development - they should be included in the appropriate devel
+ section.</entry>
+ </row>
+
+ <row>
+ <entry>libs/inputmethods</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>libs/multimedia</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>libs/network</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>network</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>network/cms</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>network/misc</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>openmoko</entry>
+
+ <entry>Anything related to openmoko.org</entry>
+ </row>
+
+ <row>
+ <entry>openmoko/applications</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>openmoko/base</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>openmoko/examples</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>openmoko/libs</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>openmoko/pim</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>openmoko/tools</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie</entry>
+
+ <entry>OPIE GUI enviroment. For the anything that provides or uses
+ the OPIE UI. Note that development and documentation related files
+ should be in the appropriate devel and doc section, not under
+ OPIE.</entry>
+ </row>
+
+ <row>
+ <entry>opie/applets</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/applications</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/base</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/codecs</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/datebook</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/decorations</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/fontfactories</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/fonts</entry>
+
+ <entry>OPIE specific fonts. General fonts, such as truetype fonts,
+ should be in the fonts section.</entry>
+ </row>
+
+ <row>
+ <entry>opie/games</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/help</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/inputmethods</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/libs</entry>
+
+ <entry>OPIE runtime libraries. This does not include libraries used
+ for development - they should be included in the appropriate devel
+ section.</entry>
+ </row>
+
+ <row>
+ <entry>opie/multimedia</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/network</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/pim</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/security</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/settings</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/shell</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/styles</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>opie/today</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>utils</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>x11</entry>
+
+ <entry>X11 GUI platform. For anything that provides or uses the X11
+ UI and is not GPE. Note that development and documentation related
+ files should be in the appropriate devel and doc section, not under
+ X11.</entry>
+ </row>
+
+ <row>
+ <entry>x11/applications</entry>
+
+ <entry>General applications.</entry>
+ </row>
+
+ <row>
+ <entry>x11/base</entry>
+
+ <entry>Core X11 applications.</entry>
+ </row>
+
+ <row>
+ <entry>x11/data</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>x11/fonts</entry>
+
+ <entry>X11 specific fonts. General fonts, such as truetype fonts,
+ should be in the fonts section.</entry>
+ </row>
+
+ <row>
+ <entry>x11/games</entry>
+
+ <entry>Games.</entry>
+ </row>
+
+ <row>
+ <entry>x11/gnome</entry>
+
+ <entry>Core gnome applications.</entry>
+ </row>
+
+ <row>
+ <entry>x11/gnome/libs</entry>
+
+ <entry>Gnome runtime libraries. This does not include libraries used
+ for development - they should be included in the appropriate devel
+ section.</entry>
+ </row>
+
+ <row>
+ <entry>x11/graphics</entry>
+
+ <entry>Applications which manipulate, display, edit, print etc.
+ images, photos, diagrams etc.</entry>
+ </row>
+
+ <row>
+ <entry>x11/libs</entry>
+
+ <entry>X11 runtime libraries. This does not include libraries used
+ for development - they should be included in the appropriate devel
+ section.</entry>
+ </row>
+
+ <row>
+ <entry>x11/multimedia</entry>
+
+ <entry>Multimedia applications.</entry>
+ </row>
+
+ <row>
+ <entry>x11/network</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>x11/office</entry>
+
+ <entry>Office and productivity applications.</entry>
+ </row>
+
+ <row>
+ <entry>x11/scientific</entry>
+
+ <entry>Scientific applications.</entry>
+ </row>
+
+ <row>
+ <entry>x11/utils</entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>x11/wm</entry>
+
+ <entry>Window managers.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>The following tables lists some sections which may be in existing
+ recipes. These should not be used in new recipes and should be renamed when
+ updated existing recipes that use the specified sections.</para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <colspec colwidth="1*" />
+
+ <colspec colwidth="3*" />
+
+ <tbody>
+ <row>
+ <entry>Section</entry>
+
+ <entry>Action</entry>
+ </row>
+
+ <row>
+ <entry>apps</entry>
+
+ <entry>Replace with appropriate section</entry>
+ </row>
+
+ <row>
+ <entry>gui</entry>
+
+ <entry>Replace with appropriate section</entry>
+ </row>
+
+ <row>
+ <entry>media-gfx</entry>
+
+ <entry>Replace with appropriate section</entry>
+ </row>
+
+ <row>
+ <entry>multimedia</entry>
+
+ <entry>Replace with appropriate section</entry>
+ </row>
+
+ <row>
+ <entry>net</entry>
+
+ <entry>Replace with network</entry>
+ </row>
+
+ <row>
+ <entry>unknown</entry>
+
+ <entry>Replace with appropriate section</entry>
+ </row>
+
+ <row>
+ <entry>x11-misc</entry>
+
+ <entry>Replace with appropriate section</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para></para>
+</section>
diff --git a/docs/usermanual/reference/var_src_uri.xml b/docs/usermanual/reference/var_src_uri.xml
new file mode 100644
index 0000000000..a9a2985a70
--- /dev/null
+++ b/docs/usermanual/reference/var_src_uri.xml
@@ -0,0 +1,692 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="src_uri_variable" xreflabel="SRC_URI variable">
+ <title>SRC_URI variable: Source code and patches</title>
+
+ <para>All recipies need to contain a definition of
+ <command>SRC_URI</command>. It determines what files and source code is
+ needed and where that source code should be obtained from. This includes
+ patches to be applied and basic files that are shipped as part of the
+ meta-data for the package.</para>
+
+ <para>A typical <command>SRC_URI</command> contains a list of URL's, patches
+ and files as shown in this example from quagga:<screen>SRC_URI = "http://www.quagga.net/download/quagga-${PV}.tar.gz \
+ file://ospfd-no-opaque-lsa-fix.patch;patch=1 \
+ file://fix-for-lib-inpath.patch;patch=1 \
+ file://quagga.init \
+ file://quagga.default \
+ file://watchquagga.init \
+ file://watchquagga.default"</screen>All source code and files will
+ be placed into the work directory, <command>${WORKDIR}</command>, for the
+ package. All patches will be placed into a <command>patches</command>
+ subdirectory of the package source directory, <command>${S}</command>, and
+ then automatically applied to the source.</para>
+
+ <para>Before downloading from a remote URI a check will be made to see if
+ what is to be retrieved is already present in the download source directory,
+ <command>${DL_DIR}</command>, along with an associated md5 sum. If the
+ source is present in the downloaded sources directory and the md5 sum
+ matches that listed in the associated md5 sum file, then that version will
+ be used in preference to retrieving a new version . Any source that is
+ retrieved from a remote URI will be stored in the download source directory
+ and an appropriate md5 sum generated and stored alongside it.</para>
+
+ <para>Each URI supports a set of additional options. These options are
+ tag/value pairs of the form <command>"a=b"</command> and are semi-colon
+ separated from each other and from the URI. The follow examples shows two
+ options being included, the patch and pnum options:<screen>file://ospfd-no-opaque-lsa-fix.patch;patch=1;pnum=2</screen>The
+ supported methods for fetching source and files are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>http, https, ftps</term>
+
+ <listitem>
+ <para>Used to download files and source code via the specified URL.
+ These are fetched from the specified location using wget.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>file</term>
+
+ <listitem>
+ <para>Used for files that are included locally in the meta-data. These
+ may be plain files, such as init scripts to be added to the final
+ package, or they may be patch files to be applied to other
+ source.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>cvs</term>
+
+ <listitem>
+ <para>Used to download from a CVS repository.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>svn</term>
+
+ <listitem>
+ <para>Used to download from a subversion repository.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>git</term>
+
+ <listitem>
+ <para>Used to download from a git repository.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>When source code is specified as a part of <command>SRC_URI</command>
+ it is unpacked into the work directory, <command>${WORKDIR}</command>. The
+ unpacker recognises several archive and compression types and for these it
+ will decompress any compressed files and extract all of the files from
+ archives into the work directory. The supported types are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>.tar</term>
+
+ <listitem>
+ <para>Tar archives which will be extracted with <command>"tar x
+ --no-same-owner -f &lt;srcfile&gt;"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>.tgz, .tar.gz, tar.Z</term>
+
+ <listitem>
+ <para>Gzip compressed tar archives which will be extracted with
+ <command>"tar xz --no-same-owner -f &lt;srcfile&gt;"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>.tbz, .tar.bz2</term>
+
+ <listitem>
+ <para>Bzip2 compressed tar archives which will be extracted with
+ <command>"bzip2 -dc &lt;srcfile&gt; | tar x --no-same-owner -f
+ -"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>.gz, .Z, .z</term>
+
+ <listitem>
+ <para>Gzip compressed files which will be decompressed with
+ <command>"gzip -dc &lt;srcfile&gt; &gt;
+ &lt;dstfile&gt;"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>.bz2</term>
+
+ <listitem>
+ <para>Bzip2 compressed files which will be decompressed with
+ <command>"bzip2 -dc &lt;srcfile&gt; &gt;
+ &lt;dstfile&gt;"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>.zip</term>
+
+ <listitem>
+ <para>Zip archives which will be extracted with <command>"unzip -q
+ &lt;srcfile&gt;"</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The downloading of the source files occurs in the
+ <emphasis>fetch</emphasis> task, the unpacking and copying to the work
+ directory occurs in the <emphasis>unpack</emphasis> task and the applying of
+ patches occurs in the <emphasis>patch</emphasis> task.</para>
+
+ <section>
+ <title>http/https/ftp (wget)</title>
+
+ <para>The wget fetcher handles http, https and ftp URLs.<screen>http://www.quagga.net/download/quagga-${PV}.tar.gz</screen></para>
+
+ <para>Supported options:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>md5sum</term>
+
+ <listitem>
+ <para>If an md5sum is provided then the downloaded files will only
+ be considered valid if the md5sum of the downloaded file matches the
+ md5sum option provided.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Related variables:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>MIRRORS</term>
+
+ <listitem>
+ <para>Mirrors define alternative locations to download source files
+ from. See the mirror section below for more information.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DL_DIR</term>
+
+ <listitem>
+ <para>The downloaded files will be placed in this directory with the
+ name exactly as supplied via the URI.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section>
+ <title>file: for patches and additional files</title>
+
+ <para>The file URI's are used to copy files, included as part of the
+ package meta data, into the work directory to be used when building the
+ package. Typical use of the file URI's is to specify patches that be
+ applied to the source and to provide additional files, such as init
+ scripts, to be included in the final package.</para>
+
+ <para>The following example shows the specification of a patch
+ file:<screen>file://ospfd-no-opaque-lsa-fix.patch;patch=1</screen></para>
+
+ <para>Patch files are be copied to the patches subdirectory of the source
+ directory, <command>${S}/patches</command>, and then applied from the
+ source directory. The patches are searched for along the path specified
+ via the file path variable, <command>${FILESPATH},</command> and if not
+ found the directory specified by the file directory variable,
+ <command>${FILEDIR}</command>, is also checked.</para>
+
+ <para>The following example shows the specification of a non-patch file.
+ In this case it's an init script:<screen>file://quagga.init</screen>Non-patch
+ files are copied to the work directory, <command>${WORKDIR}</command>. You
+ can access these files from within a recipe by referring to them relative
+ to the work directory. The following example, from the quagga recipe,
+ shows the above init script being included in the package by copying it
+ during the <emphasis>install</emphasis> task:<screen>do_install () {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d ${D}${sysconfdir}/quagga
+ install -m 0644 <emphasis role="bold">${WORKDIR}/quagga.init</emphasis> ${D}${sysconfdir}/init.d/quagga
+...</screen></para>
+
+ <para>Supported options:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>patch</term>
+
+ <listitem>
+ <para>Used as <command>"patch=1"</command> to define this file as a
+ patch file. Patch files will be copied to
+ <command>${S}/patches</command> and then applied to source from
+ within the source directory, <command>${S}</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>pnum</term>
+
+ <listitem>
+ <para>By default patches are applied with the <command>"-p
+ 1"</command> parameter, which strips off the first directory of the
+ pathname in the patches. This option is used to explicitly control
+ the value passed to <command>"-p"</command>. The most typical use is
+ when the patches are relative to the source directory already and
+ need to be applied using <command>"-p 0"</command>, in which case
+ the <command>"pnum=0"</command> option is supplied.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+
+ <section>
+ <title>cvs</title>
+
+ <para>The cvs fetcher is used to retrieve files from a CVS repository.
+ <screen> cvs://anonymous@cvs.sourceforge.net/cvsroot/linuxsh;module=linux;date=20051111</screen>A
+ cvs URI will retrieve the source from a cvs repository. Note that use of
+ the <emphasis>date=</emphasis> to specify a checkout for specified date.
+ It is preferable to use either a <emphasis>date=</emphasis> or a
+ <emphasis>tag=</emphasis> option to select a specific date and/or tag from
+ cvs rather than leave the checkout floating at the head revision.</para>
+
+ <para>Supported options:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>module</term>
+
+ <listitem>
+ <para>The name of a module to retrieve. This is a required parameter
+ and there is no default value.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>tag</term>
+
+ <listitem>
+ <para>The name of a cvs tag to retrieve. Releases are often tagged
+ with a specific name to allow easy access. Either a tag or a date
+ can be specified, but not both.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>date</term>
+
+ <listitem>
+ <para>The date to retrieve. This requests that files as of the
+ specified date, rather then the current code or a tagged release. If
+ no date or tag options are specified, then the date is set to the
+ current date. The date is of any form accepted by cvs with the most
+ common format being <command>"YYYYMMDD"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>method</term>
+
+ <listitem>
+ <para>The method used to access the repository. Common options are
+ <command>"pserver"</command> and <command>"ext"</command> (for cvs
+ over rsh or ssh). The default is
+ <command>"pserver"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>rsh</term>
+
+ <listitem>
+ <para>The rsh command to use with the <command>"ext"</command>
+ method. Common options are <command>"rsh"</command> or
+ <command>"ssh"</command>. The default is
+ <command>"rsh"</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Related variables:<variablelist>
+ <varlistentry>
+ <term>CVS_TARBALL_STASH</term>
+
+ <listitem>
+ <para>Used to specifies a location to search for pre-generated tar
+ archives to use instead of accessing cvs directly.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>CVSDIR</term>
+
+ <listitem>
+ <para>The directory in which the cvs checkouts will be performed.
+ The default is <command>${DL_DIR}/cvs</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DL_DIR</term>
+
+ <listitem>
+ <para>A compressed tar archive of the retrieved files will be
+ placed in this directory. The archive name will be of the form:
+ <command>"&lt;module&gt;_&lt;host&gt;_&lt;tag&gt;_&lt;date&gt;.tar.gz"</command>.
+ Path separators in <command>module</command> will be replaced with
+ full stops.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist></para>
+ </section>
+
+ <section>
+ <title>svn</title>
+
+ <para>The svn fetcher is used to retrieve files from a subversion
+ repository.</para>
+
+ <para><screen> svn://svn.xiph.org/trunk;module=Tremor;rev=4573;proto=http</screen></para>
+
+ <para>Supported options:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>module</term>
+
+ <listitem>
+ <para>The name of a module to retrieve. This is a required parameter
+ and there is no default value.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>rev</term>
+
+ <listitem>
+ <para>The revision to retrieve. Revisions in subversion are integer
+ values.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>proto</term>
+
+ <listitem>
+ <para>The method to use to access the repository. Common options are
+ <command>"svn"</command>, <command>"svn+ssh"</command>,
+ <command>"http"</command> and <command>"https"</command>. The
+ default is <command>"svn"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>rsh</term>
+
+ <listitem>
+ <para>The rsh command to use with using the
+ <command>"svn+ssh"</command> method. Common options are
+ <command>"rsh"</command> or <command>"ssh"</command>. The default is
+ <command>"ssh"</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Related variables:<variablelist>
+ <varlistentry>
+ <term>SVNDIR</term>
+
+ <listitem>
+ <para>The directory in which the svn checkouts will be performed..
+ The default is <command>${DL_DIR}/svn</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DL_DIR</term>
+
+ <listitem>
+ <para>A compressed tar archive of the retrieved files will be
+ placed in this directory. The archive name will be of the form:
+ <command>"&lt;module&gt;_&lt;host&gt;_&lt;path&gt;_&lt;revn&gt;_&lt;date&gt;.tar.gz"</command>.
+ Path separators in <command>path</command> and
+ <command>module</command> will be replaced with full stops.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist></para>
+ </section>
+
+ <section>
+ <title>git</title>
+
+ <para>The git fetcher is used to retrieve files from a git repository.
+ <screen> SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git;tag=${TAG}"</screen></para>
+
+ <para>Supported options:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>tag</term>
+
+ <listitem>
+ <para>The tag to retrieve. The default is
+ <command>"master"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>protocol</term>
+
+ <listitem>
+ <para>The method to use to access the repository. Common options are
+ <command>"git"</command> and <command>"rsync"</command>. The default
+ is <command>"rsync"</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Related variables</para>
+
+ <para><variablelist>
+ <varlistentry>
+ <term>GITDIR</term>
+
+ <listitem>
+ <para>The directory in which the git checkouts will be performed.
+ The default is <command>${DL_DIR}/git</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DL_DIR</term>
+
+ <listitem>
+ <para>A compressed tar archive of the retrieved files will be
+ placed in this directory. The archive name will be of the form:
+ <command>"git_&lt;host&gt;&lt;mpath&gt;_&lt;tag&gt;.tar.gz"</command>.
+ Path separators in <command>host</command> will be replaced with
+ full stops.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist></para>
+ </section>
+
+ <section>
+ <title>Mirrors</title>
+
+ <para>The support for mirror sites enables spreading the load over sites
+ and allows for downloads to occur even when one of the mirror sites are
+ unavailable.</para>
+
+ <para>Default mirrors, along with their primary URL, include:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>GNU_MIRROR</term>
+
+ <listitem>
+ <para>ftp://ftp.gnu.org/gnu</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>DEBIAN_MIRROR</term>
+
+ <listitem>
+ <para>ftp://ftp.debian.org/debian/pool</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SOURCEFORGE_MIRROR</term>
+
+ <listitem>
+ <para>http://heanet.dl.sourceforge.net/sourceforge</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>GPE_MIRROR</term>
+
+ <listitem>
+ <para>http://handhelds.org/pub/projects/gpe/source</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>XLIBS_MIRROR</term>
+
+ <listitem>
+ <para>http://xlibs.freedesktop.org/release</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>XORG_MIRROR</term>
+
+ <listitem>
+ <para>http://xorg.freedesktop.org/releases</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>GNOME_MIRROR</term>
+
+ <listitem>
+ <para>http://ftp.gnome.org/pub/GNOME/sources</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>FREEBSD_MIRROR</term>
+
+ <listitem>
+ <para>ftp://ftp.freebsd.org/pub/FreeBSD</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>GENTOO_MIRROR</term>
+
+ <listitem>
+ <para>http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>APACHE_MIRROR</term>
+
+ <listitem>
+ <para>http://www.apache.org/dist</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>When creating new recipes this mirrors should be used when you wish
+ to use one of the above sites by referring to the name of the mirror in
+ the URI, as show in this example from flex:<screen>SRC_URI = "${SOURCEFORGE_MIRROR}/lex/flex-2.5.31.tar.bz2</screen></para>
+
+ <para>You can manually define your mirrors if you wish to force the use of
+ a specific mirror by exporting the appropriate mirrors in
+ <command>local.conf</command> with them set to the local mirror:<screen>export GNU_MIRROR = "http://www.planetmirror.com/pub/gnu"
+export DEBIAN_MIRROR = "http://mirror.optusnet.com.au/debian/pool"
+export SOURCEFORGE_MIRROR = "http://optusnet.dl.sourceforge.net/sourceforge"</screen></para>
+
+ <para>Mirrors can be extended in individual recipes via the use of
+ <command>MIRRORS_prepend</command> or <command>MIRRORS_append</command>.
+ Each entry in the list contains the mirror name on the left-hand side and
+ the URI of the mirror on the right-hand side. The following example from
+ libffi shows the addition of two URI for the
+ <command>"${GNU_MIRROR}/gcc/"</command> URI:<screen>MIRRORS_prepend () {
+ ${GNU_MIRROR}/gcc/ http://gcc.get-software.com/releases/
+ ${GNU_MIRROR}/gcc/ http://mirrors.rcn.net/pub/sourceware/gcc/releases/
+}</screen></para>
+ </section>
+
+ <section>
+ <title>Manipulating SRC_URI</title>
+
+ <para>Sometimes it is desirable to only include patches for a specific
+ architecture and/or to include different files based on the architecture.
+ This can be done via the <command>SRC_URI_append</command> and/or
+ <command>SRC_URI_prepend</command> methods for adding additional URI's
+ based on the architecture or machine name.</para>
+
+ <para>In this example from glibc, the patch creates a configuration file
+ for glibc, which should only be used or the sh4 architecture. Therefore
+ this patch is appended to the <command>SRC_URI</command>, but only for the
+ sh4 architecture. For other architectures it is ignored:<screen># Build fails on sh4 unless no-z-defs is defined
+SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1"</screen></para>
+ </section>
+
+ <section>
+ <title>Source distribution (src_distribute_local)</title>
+
+ <para>In order to obtain a set of source files for a build you can use the
+ <emphasis>src_distribute_local</emphasis> class. This will result in all
+ the files that were actually used during a build being made available in a
+ seperate directory and therefore they can be distributed with the
+ binaries.</para>
+
+ <para>Enabling this option is as simple as activating the functionality by
+ including the required class in one of your configuration files:<screen>SRC_DIST_LOCAL = "copy"
+INHERIT += "src_distribute_local"</screen></para>
+
+ <para>Now during a build each recipe which has a LICENSE that mandates
+ source availability, like the GPL, will be placed into the source
+ distribution directory, <command>${SRC_DISTRIBUTEDIR}</command>, after
+ building.</para>
+
+ <para>There are some options available to effect the option</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>SRC_DIST_LOCAL</term>
+
+ <listitem>
+ <para>Specifies if the source files should be copied, symlinked or
+ moved and symlinked back. The default is
+ <command>"move+symlink"</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SRC_DISTRIBUTEDIR</term>
+
+ <listitem>
+ <para>Specifies the source distribution directory - this is why the
+ source files that was used for the build are placed. The default is
+ <command>"${DEPLOY_DIR}/sources"</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The valid values for <command>SRC_DIST_LOCAL</command> are:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>copy</term>
+
+ <listitem>
+ <para>Copies the files to the downloaded sources directory into the
+ distribution directory.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>symlink</term>
+
+ <listitem>
+ <para>Symlinks the files from the downloaded sources directory into
+ the distribution directory.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>move+symlink</term>
+
+ <listitem>
+ <para>Moves the files from the downloaded sources directory into the
+ distribution directory. Then creates a symlink in the download
+ sources directory to the moved files.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section>
+</section> \ No newline at end of file
diff --git a/docs/usermanual/usermanual.xml b/docs/usermanual/usermanual.xml
new file mode 100644
index 0000000000..ca2e7a93ac
--- /dev/null
+++ b/docs/usermanual/usermanual.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ex:ts=4:sw=4:sts=4:et
+ -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+-->
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+<!ENTITY chapter-introduction SYSTEM "chapters/introduction.xml">
+<!ENTITY chapter-metadata SYSTEM "chapters/metadata.xml">
+<!ENTITY chapter-gettingoe SYSTEM "chapters/getting_oe.xml">
+<!ENTITY chapter-features SYSTEM "chapters/features.xml">
+<!ENTITY chapter-commonusecases SYSTEM "chapters/common_use_cases.xml">
+<!ENTITY chapter-comparing SYSTEM "chapters/comparing.xml">
+<!ENTITY chapter-usage SYSTEM "chapters/usage.xml">
+<!ENTITY chapter-recipes SYSTEM "chapters/recipes.xml">
+<!ENTITY class-autotools SYSTEM "reference/class_autotools.xml">
+<!ENTITY class-binconfig SYSTEM "reference/class_binconfig.xml">
+<!ENTITY dirs-install SYSTEM "reference/dirs_install.xml">
+<!ENTITY dirs-staging SYSTEM "reference/dirs_staging.xml">
+<!ENTITY class-distutils SYSTEM "reference/class_distutils.xml">
+<!ENTITY fakeroot SYSTEM "reference/fakeroot.xml">
+<!ENTITY class-image SYSTEM "reference/class_image.xml">
+<!ENTITY image-types SYSTEM "reference/image_types.xml">
+<!ENTITY class-pkgconfig SYSTEM "reference/class_pkgconfig.xml">
+<!ENTITY class-rootfs_ipkg SYSTEM "reference/class_rootfs_ipkg.xml">
+<!ENTITY var-section SYSTEM "reference/var_section.xml">
+<!ENTITY class-siteinfo SYSTEM "reference/class_siteinfo.xml">
+<!ENTITY var-src-uri SYSTEM "reference/var_src_uri.xml">
+<!ENTITY class-update-alternatives SYSTEM "reference/class_update-alternatives.xml">
+<!ENTITY class-update-rcd SYSTEM "reference/class_update-rc.d.xml">
+]>
+<book>
+ <bookinfo>
+ <title>OpenEmbedded User Manual</title>
+
+ <authorgroup>
+ <corpauthor>OpenEmbedded Team</corpauthor>
+ </authorgroup>
+
+ <copyright>
+ <year>2006</year>
+
+ <year>2007</year>
+
+ <year>2008</year>
+
+ <holder>Holger Hans Peter Freyther</holder>
+
+ <holder>Koen Kooi</holder>
+
+ <holder>Detlef Vollmann</holder>
+
+ <holder>Jamie Lenehan</holder>
+
+ <holder>Marcin Juszkiewicz</holder>
+
+ <holder>Rolf Leggewie</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>This work is licensed under the Creative Commons Attribution
+ License. To view a copy of this license, visit <ulink
+ url="http://creativecommons.org/licenses/by/2.0/">http://creativecommons.org/licenses/by/2.0/</ulink>
+ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
+ California 94305, USA.</para>
+ </legalnotice>
+ </bookinfo>
+
+ <!-- Main chapters-->
+
+ &chapter-introduction;
+
+ &chapter-gettingoe;
+
+ &chapter-metadata;
+
+ &chapter-features;
+
+ &chapter-commonusecases;
+
+ &chapter-comparing;
+
+ &chapter-usage;
+
+ &chapter-recipes;
+
+ <!-- Reference manual. Sorted alphabetically. -->
+
+ <chapter id="chapter_reference">
+ <title>Reference</title>
+
+ &class-autotools;
+
+ &class-binconfig;
+
+ &dirs-install;
+
+ &dirs-staging;
+
+ &class-distutils;
+
+ &fakeroot;
+
+ &class-image;
+
+ &image-types;
+
+ &class-pkgconfig;
+
+ &class-rootfs_ipkg;
+
+ &var-section;
+
+ &class-siteinfo;
+
+ &var-src-uri;
+
+ &class-update-alternatives;
+
+ &class-update-rcd;
+ </chapter>
+</book>
diff --git a/files/device_table-minimal.txt b/files/device_table-minimal.txt
index f134b11710..2f47b1f311 100644
--- a/files/device_table-minimal.txt
+++ b/files/device_table-minimal.txt
@@ -32,11 +32,5 @@
# mmc numbers are assigned dynamicly so if you have other dynamic assigned block devices it may be wrong
/dev/mmcblk0 b 660 0 6 179 0 - - -
-/dev/mmcblk0p1 b 660 0 6 179 1 - - -
-/dev/mmcblk0p2 b 660 0 6 179 2 - - -
-/dev/mmcblk0p3 b 660 0 6 179 3 - - -
-/dev/mmcblk0p4 b 660 0 6 179 4 - - -
-/dev/mmcblk0p5 b 660 0 6 179 5 - - -
-/dev/mmcblk0p6 b 660 0 6 179 6 - - -
-/dev/mmcblk0p7 b 660 0 6 179 7 - - -
+/dev/mmcblk0p b 660 0 6 179 1 1 1 8
/dev/event0 c 660 0 0 13 64 - - -
diff --git a/packages/adobe-flash/flash-plugin_10.0.22.87.bb b/packages/adobe-flash/flash-plugin_10.0.22.87.bb
new file mode 100644
index 0000000000..d6cde60031
--- /dev/null
+++ b/packages/adobe-flash/flash-plugin_10.0.22.87.bb
@@ -0,0 +1,35 @@
+# Adobe provides two versions of flash player packages
+#
+# One "unversioned" download at :
+#
+# ${ADOBE_MIRROR}/install_flash_player_9_linux.tar.gz
+#
+# And the other, versioned, which is encapsulated in RPM.
+#
+# We use the versioned one to make sure we can keep track of the
+# version and thus do repeatable builds at the cost of future download
+# failures when adobe updates.
+DESCRIPTION = "Adobe Flash 9 plugin for Mozilla/Firefox web browsers"
+LICENSE = "AdobeFlash"
+DEPENDS = "rpm2cpio-native"
+PR = "r1"
+
+SRC_URI = "${ADOBE_MIRROR}/flash-plugin-${PV}-release.i386.rpm"
+
+do_configure() {
+ rpm=${WORKDIR}/flash-plugin-${PV}-release.i386.rpm
+ if [ -f "$rpm" ]; then
+ rpm2cpio.pl $rpm | cpio -id
+ find . -type f -exec mv -i {} "`pwd`" \;
+ fi
+}
+do_install() {
+ mkdir -p ${D}${libdir}/mozilla/plugins/
+ install -m 0755 libflashplayer.so ${D}${libdir}/mozilla/plugins/
+ # AFAIK this is not needed
+ # install -m 0644 flashplayer.xpt ${D}${libdir}/mozilla/plugins/
+}
+
+FILES_${PN} = "${libdir}/* ${libdir}/X11/*"
+
+COMPATIBLE_HOST = "i.86.*-linux"
diff --git a/packages/alsa/alsa-state.bb b/packages/alsa/alsa-state.bb
index 9e7f157059..3ebc0d5476 100644
--- a/packages/alsa/alsa-state.bb
+++ b/packages/alsa/alsa-state.bb
@@ -7,7 +7,7 @@
DESCRIPTION = "Alsa Scenario Files"
LICENSE = "MIT"
PV = "0.2.0"
-PR = "r1"
+PR = "r3"
SRC_URI = "\
file://asound.conf \
diff --git a/packages/alsa/alsa-state/at91sam9263ek/asound.conf b/packages/alsa/alsa-state/at91sam9263ek/asound.conf
new file mode 100644
index 0000000000..87bb5ec050
--- /dev/null
+++ b/packages/alsa/alsa-state/at91sam9263ek/asound.conf
@@ -0,0 +1,2 @@
+pcm.!default { type hw card 0 }
+ctl.!default { type hw card 0 }
diff --git a/packages/alsa/alsa-state/at91sam9263ek/asound.state b/packages/alsa/alsa-state/at91sam9263ek/asound.state
new file mode 100644
index 0000000000..ee646a1341
--- /dev/null
+++ b/packages/alsa/alsa-state/at91sam9263ek/asound.state
@@ -0,0 +1,283 @@
+state.AC97 {
+ control.1 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Master Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Master Mono Playback Switch'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -4650
+ comment.dbmax 0
+ iface MIXER
+ name 'Master Mono Playback Volume'
+ value 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Playback Switch'
+ value false
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Phone Playback Volume'
+ value 0
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Playback Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Mic Playback Volume'
+ value 0
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Line Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Line Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'CD Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'CD Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Aux Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'Aux Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'PCM Playback Switch'
+ value.0 true
+ value.1 true
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ comment.dbmin -3450
+ comment.dbmax 1200
+ iface MIXER
+ name 'PCM Playback Volume'
+ value.0 22
+ value.1 22
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 Mic
+ comment.item.1 CD
+ comment.item.2 Video
+ comment.item.3 Aux
+ comment.item.4 Line
+ comment.item.5 Mix
+ comment.item.6 'Mix Mono'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Capture Source'
+ value.0 Mic
+ value.1 Mic
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 15'
+ comment.dbmin 0
+ comment.dbmax 2250
+ iface MIXER
+ name 'Capture Volume'
+ value.0 11
+ value.1 11
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mix
+ comment.item.1 Mic
+ iface MIXER
+ name 'Mono Output Select'
+ value Mix
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic1
+ comment.item.1 Mic2
+ iface MIXER
+ name 'Mic Select'
+ value Mic1
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Stereo Mic'
+ value false
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Jack Sense'
+ value false
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Line Jack Sense'
+ value false
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'External Amplifier'
+ value true
+ }
+}
diff --git a/packages/alsa/alsa-utils_1.0.18.bb b/packages/alsa/alsa-utils_1.0.18.bb
index 5bcad4f525..2931545252 100644
--- a/packages/alsa/alsa-utils_1.0.18.bb
+++ b/packages/alsa/alsa-utils_1.0.18.bb
@@ -8,6 +8,7 @@ PR = "r1"
SRC_URI = "ftp://ftp.alsa-project.org/pub/utils/alsa-utils-${PV}.tar.bz2 \
file://alsa-utils-automake.patch;patch=1 \
file://alsa-utils-remove-xmlto.patch;patch=1 \
+ file://alsa-utils-autoconf-strl-funcs.patch;patch=1 \
"
inherit autotools
diff --git a/packages/alsa/files/alsa-utils-autoconf-strl-funcs.patch b/packages/alsa/files/alsa-utils-autoconf-strl-funcs.patch
new file mode 100644
index 0000000000..d736abbdab
--- /dev/null
+++ b/packages/alsa/files/alsa-utils-autoconf-strl-funcs.patch
@@ -0,0 +1,43 @@
+Index: alsa-utils-1.0.18/alsactl/init_sysdeps.c
+===================================================================
+--- alsa-utils-1.0.18.orig/alsactl/init_sysdeps.c 2008-10-29 05:42:11.000000000 -0700
++++ alsa-utils-1.0.18/alsactl/init_sysdeps.c 2009-02-10 23:17:47.000000000 -0800
+@@ -17,7 +17,7 @@
+ *
+ */
+
+-#ifdef __GLIBC__
++#if !HAVE_STRLCPY
+ static size_t strlcpy(char *dst, const char *src, size_t size)
+ {
+ size_t bytes = 0;
+@@ -36,7 +36,10 @@
+ *q = '\0';
+ return bytes;
+ }
++#endif /* !HAVE_STRLCPY */
+
++
++#if !HAVE_STRLCAT
+ static size_t strlcat(char *dst, const char *src, size_t size)
+ {
+ size_t bytes = 0;
+@@ -60,4 +63,4 @@
+ *q = '\0';
+ return bytes;
+ }
+-#endif /* __GLIBC__ */
++#endif /* !HAVE_STRLCAT */
+Index: alsa-utils-1.0.18/configure.in
+===================================================================
+--- alsa-utils-1.0.18.orig/configure.in 2008-10-29 05:48:01.000000000 -0700
++++ alsa-utils-1.0.18/configure.in 2009-02-10 23:02:07.000000000 -0800
+@@ -6,7 +6,7 @@
+
+ AM_GNU_GETTEXT([external])
+ AM_GNU_GETTEXT_VERSION([0.15])
+-
++AC_CHECK_FUNCS([strlcat strlcpy])
+ dnl Checks for programs.
+
+ dnl try to gues cross-compiler if not set
diff --git a/packages/amule/amule_2.1.3.bb b/packages/amule/amule_2.1.3.bb
index b160203ffd..1fa4d3cfc9 100644
--- a/packages/amule/amule_2.1.3.bb
+++ b/packages/amule/amule_2.1.3.bb
@@ -23,3 +23,5 @@ EXTRA_OECONF = "--enable-amulecmd \
FILES_${PN} += " \
${libdir}/xchat"
+
+LDFLAGS += "-ldl"
diff --git a/packages/angstrom/angstrom-gpe-task-settings.bb b/packages/angstrom/angstrom-gpe-task-settings.bb
index adc4bb0756..0280859fdc 100644
--- a/packages/angstrom/angstrom-gpe-task-settings.bb
+++ b/packages/angstrom/angstrom-gpe-task-settings.bb
@@ -1,12 +1,13 @@
DESCRIPTION = "Task packages for the Angstrom distribution"
-PR = "r33"
+PR = "r34"
inherit task
RDEPENDS_${PN} = "\
matchbox-panel-manager \
mboxkbd-layouts-gui \
- gpe-su \
+ connman-gnome \
+ gpe-su \
gpe-conf \
gpe-package \
gpe-shield \
diff --git a/packages/angstrom/bigbuckbunny-480p.bb b/packages/angstrom/bigbuckbunny-480p.bb
new file mode 100644
index 0000000000..be9ad776a8
--- /dev/null
+++ b/packages/angstrom/bigbuckbunny-480p.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Big Buck Bunny movie"
+LICENSE = "CC-BY"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi"
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_480p_surround-fix.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
+PACKAGE_ARCH = "all"
+
diff --git a/packages/angstrom/bigbuckbunny-720p.bb b/packages/angstrom/bigbuckbunny-720p.bb
new file mode 100644
index 0000000000..375794c893
--- /dev/null
+++ b/packages/angstrom/bigbuckbunny-720p.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Big Buck Bunny movie"
+LICENSE = "CC-BY"
+
+SRC_URI = "http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi"
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_720p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
+PACKAGE_ARCH = "all"
+
+
diff --git a/packages/angstrom/e-wm-config-angstrom.bb b/packages/angstrom/e-wm-config-angstrom.bb
index 74110c2c99..a2c6f93657 100644
--- a/packages/angstrom/e-wm-config-angstrom.bb
+++ b/packages/angstrom/e-wm-config-angstrom.bb
@@ -1,9 +1,10 @@
DESCRIPTION = "Enlightenment DR17 theme for Angstrom"
LICENSE = "MIT/BSD"
DEPENDS = "edje-native eet-native"
+RDEPENDS = "e-wm"
RRECOMMENDS_${PN} = "places"
-PR = "r3"
+PR = "r4"
SRC_URI = " \
file://e.src \
diff --git a/packages/antlr/antlr-native_2.7.7.bb b/packages/antlr/antlr-native_2.7.7.bb
index bd95ce7a7c..871e620b93 100644
--- a/packages/antlr/antlr-native_2.7.7.bb
+++ b/packages/antlr/antlr-native_2.7.7.bb
@@ -2,7 +2,7 @@ require antlr_${PV}.bb
SRC_URI += "file://runantlr"
-inherit native
+inherit java-native
do_configure() {
sed -i -e"s|@JAR_FILE@|${STAGING_DATADIR_NATIVE}/java/antlr.jar|" ${WORKDIR}/runantlr
diff --git a/packages/aoetools/aoetools_29.bb b/packages/aoetools/aoetools_29.bb
new file mode 100644
index 0000000000..f98881cd6c
--- /dev/null
+++ b/packages/aoetools/aoetools_29.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "ATA over Ethernet Tools"
+SECTION = "console/network"
+RRECOMMENDS = "kernel-module-aoe"
+PR = "r0"
+LICENSE = "GPL"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz"
+
+inherit autotools
diff --git a/packages/apache2/apache2-native_2.2.3.bb b/packages/apache2/apache2-native_2.2.3.bb
index f58af2a640..3ea987c718 100644
--- a/packages/apache2/apache2-native_2.2.3.bb
+++ b/packages/apache2/apache2-native_2.2.3.bb
@@ -1,9 +1,9 @@
SECTION = "net"
DEPENDS = "expat pcre"
-inherit cross
+inherit native
-PR ="r8"
+PR ="r10"
SRC_URI = "http://www.apache.org/dist/httpd/httpd-${PV}.tar.bz2"
S = "${WORKDIR}/httpd-${PV}"
@@ -20,25 +20,20 @@ do_stage () {
cp srclib/apr-util/apu-1-config ${STAGING_BINDIR_NATIVE}
cp support/apxs ${STAGING_BINDIR_NATIVE}
chmod 755 ${STAGING_BINDIR_NATIVE}/apxs
- mkdir -p ${STAGING_DIR}/build
- cp build/*.mk ${STAGING_DIR}/build
- cat build/config_vars.mk | \
- sed -e '/^prefix/s,staging,staging/${HOST_SYS},' | \
- sed -e '/^includedir/s,/include,/include/apache2,' | \
- sed -e 's,staging/bin,staging/${HOST_SYS}/bin,' > \
- ${STAGING_DIR}/build/config_vars.mk
- cp build/instdso.sh ${STAGING_DIR}/build
+ mkdir -p ${STAGING_DIR_NATIVE}//usr/build
+ cp build/*.mk ${STAGING_DIR_NATIVE}/usr/build
+ cp build/instdso.sh ${STAGING_DIR_NATIVE}/usr/build
cp .libs/httpd ${STAGING_BINDIR_NATIVE}
(cd srclib/apr/.libs; tar -cf - libapr-*.so* ) |
- (cd ${STAGING_LIBDIR}; tar -xf - )
+ (cd ${STAGING_LIBDIR_NATIVE}; tar -xf - )
(cd srclib/apr-util/.libs; tar -cf - libaprutil-*.so* ) |
- (cd ${STAGING_LIBDIR}; tar -xf - )
+ (cd ${STAGING_LIBDIR_NATIVE}; tar -xf - )
- mkdir -p ${STAGING_INCDIR}/apache2
- cp include/* ${STAGING_INCDIR}/apache2
- cp os/unix/os.h ${STAGING_INCDIR}/apache2
- cp os/unix/unixd.h ${STAGING_INCDIR}/apache2
+ mkdir -p ${STAGING_INCDIR_NATIVE}/apache2
+ cp include/* ${STAGING_INCDIR_NATIVE}/apache2
+ cp os/unix/os.h ${STAGING_INCDIR_NATIVE}/apache2
+ cp os/unix/unixd.h ${STAGING_INCDIR_NATIVE}/apache2
cp support/envvars-std ${STAGING_BINDIR_NATIVE}/envvars
chmod 755 ${STAGING_BINDIR_NATIVE}/envvars
diff --git a/packages/apr/apr-util/configfix.patch b/packages/apr/apr-util/configfix.patch
new file mode 100644
index 0000000000..a8953e5244
--- /dev/null
+++ b/packages/apr/apr-util/configfix.patch
@@ -0,0 +1,49 @@
+Index: apr-util-1.3.4/apu-config.in
+===================================================================
+--- apr-util-1.3.4.orig/apu-config.in 2009-01-12 17:08:06.000000000 +0000
++++ apr-util-1.3.4/apu-config.in 2009-01-12 17:09:00.000000000 +0000
+@@ -134,14 +134,7 @@
+ exit 0
+ ;;
+ --includes)
+- if test "$location" = "installed"; then
+ flags="$flags -I$includedir $INCLUDES"
+- elif test "$location" = "source"; then
+- flags="$flags -I$APU_SOURCE_DIR/include $INCLUDES"
+- else
+- # this is for VPATH builds
+- flags="$flags -I$APU_BUILD_DIR/include -I$APU_SOURCE_DIR/include $INCLUDES"
+- fi
+ ;;
+ --ldflags)
+ flags="$flags $LDFLAGS"
+@@ -155,28 +148,10 @@
+ exit 0
+ ;;
+ --link-ld)
+- if test "$location" = "installed"; then
+- ### avoid using -L if libdir is a "standard" location like /usr/lib
+ flags="$flags -L$libdir -l$APRUTIL_LIBNAME"
+- else
+- flags="$flags -L$APU_BUILD_DIR -l$APRUTIL_LIBNAME"
+- fi
+ ;;
+ --link-libtool)
+- # If the LA_FILE exists where we think it should be, use it. If we're
+- # installed and the LA_FILE does not exist, assume to use -L/-l
+- # (the LA_FILE may not have been installed). If we're building ourselves,
+- # we'll assume that at some point the .la file be created.
+- if test -f "$LA_FILE"; then
+- flags="$flags $LA_FILE"
+- elif test "$location" = "installed"; then
+- ### avoid using -L if libdir is a "standard" location like /usr/lib
+- # Since the user is specifying they are linking with libtool, we
+- # *know* that -R will be recognized by libtool.
+- flags="$flags -L$libdir -R$libdir -l$APRUTIL_LIBNAME"
+- else
+- flags="$flags $LA_FILE"
+- fi
++ flags="$flags -l$APRUTIL_LIBNAME"
+ ;;
+ --apu-la-file)
+ if test -f "$LA_FILE"; then
diff --git a/packages/apr/apr-util/configure_fixes.patch b/packages/apr/apr-util/configure_fixes.patch
index 16f88b3bba..0b2a0903e1 100644
--- a/packages/apr/apr-util/configure_fixes.patch
+++ b/packages/apr/apr-util/configure_fixes.patch
@@ -1,8 +1,8 @@
-Index: apr-util-1.2.12/configure.in
+Index: apr-util-1.3.4/configure.in
===================================================================
---- apr-util-1.2.12.orig/configure.in 2008-03-08 19:15:00.000000000 +0000
-+++ apr-util-1.2.12/configure.in 2008-03-08 19:15:13.000000000 +0000
-@@ -8,13 +8,13 @@
+--- apr-util-1.3.4.orig/configure.in
++++ apr-util-1.3.4/configure.in
+@@ -8,14 +8,14 @@ AC_INIT(export_vars.sh.in)
AC_CONFIG_HEADER(include/private/apu_config.h)
AC_CONFIG_AUX_DIR(build)
@@ -13,6 +13,7 @@ Index: apr-util-1.2.12/configure.in
-sinclude(build/find_apr.m4)
-sinclude(build/dbm.m4)
-sinclude(build/dbd.m4)
+-sinclude(build/dso.m4)
+#sinclude(build/apu-conf.m4)
+#sinclude(build/apu-iconv.m4)
+#sinclude(build/apu-hints.m4)
@@ -20,6 +21,7 @@ Index: apr-util-1.2.12/configure.in
+#sinclude(build/find_apr.m4)
+#sinclude(build/dbm.m4)
+#sinclude(build/dbd.m4)
++#sinclude(build/dso.m4)
dnl Generate ./config.nice for reproducing runs of configure
dnl
diff --git a/packages/apr/apr-util/configure_fixes.patch.old b/packages/apr/apr-util/configure_fixes.patch.old
new file mode 100644
index 0000000000..16f88b3bba
--- /dev/null
+++ b/packages/apr/apr-util/configure_fixes.patch.old
@@ -0,0 +1,25 @@
+Index: apr-util-1.2.12/configure.in
+===================================================================
+--- apr-util-1.2.12.orig/configure.in 2008-03-08 19:15:00.000000000 +0000
++++ apr-util-1.2.12/configure.in 2008-03-08 19:15:13.000000000 +0000
+@@ -8,13 +8,13 @@
+ AC_CONFIG_HEADER(include/private/apu_config.h)
+ AC_CONFIG_AUX_DIR(build)
+
+-sinclude(build/apu-conf.m4)
+-sinclude(build/apu-iconv.m4)
+-sinclude(build/apu-hints.m4)
+-sinclude(build/apr_common.m4)
+-sinclude(build/find_apr.m4)
+-sinclude(build/dbm.m4)
+-sinclude(build/dbd.m4)
++#sinclude(build/apu-conf.m4)
++#sinclude(build/apu-iconv.m4)
++#sinclude(build/apu-hints.m4)
++#sinclude(build/apr_common.m4)
++#sinclude(build/find_apr.m4)
++#sinclude(build/dbm.m4)
++#sinclude(build/dbd.m4)
+
+ dnl Generate ./config.nice for reproducing runs of configure
+ dnl
diff --git a/packages/apr/apr-util_1.2.12.bb b/packages/apr/apr-util_1.2.12.bb
index 64f6bcbcf8..6613ab99a8 100644
--- a/packages/apr/apr-util_1.2.12.bb
+++ b/packages/apr/apr-util_1.2.12.bb
@@ -3,7 +3,9 @@ SECTION = "libs"
DEPENDS = "apr expat gdbm"
LICENSE = "Apache License, Version 2.0"
-PR = "r2"
+PR = "r3"
+
+inherit autotools lib_package binconfig
# apache mirrors?
SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.gz \
@@ -16,12 +18,16 @@ EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS} --with-dbm=gdbm \
--with-expat=${STAGING_DIR_HOST}${layout_prefix}"
-inherit autotools lib_package binconfig
-
OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+EXTRA_OEMAKE = " LIBTOOL=\"${S}/${TARGET_PREFIX}libtool\" "
+
+export LIBTOOL="${S}/${TARGET_PREFIX}libtool"
do_configure_prepend() {
+ cp ${STAGING_BINDIR_NATIVE}/${TARGET_PREFIX}libtool ${S}/
cp ${STAGING_DATADIR}/apr/apr_rules.mk ${S}/build/rules.mk
+ echo "AC_PROG_LIBTOOL" >> ${S}/configure.in
+ libtoolize --force
}
do_stage() {
diff --git a/packages/apr/apr-util_1.3.4.bb b/packages/apr/apr-util_1.3.4.bb
new file mode 100644
index 0000000000..6b2e9cc903
--- /dev/null
+++ b/packages/apr/apr-util_1.3.4.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "Apache Portable Runtime (APR) companion library"
+SECTION = "libs"
+DEPENDS = "apr expat gdbm"
+LICENSE = "Apache License, Version 2.0"
+
+PR = "r5"
+
+SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.gz \
+ file://configfix.patch;patch=1 \
+ file://configure_fixes.patch;patch=1"
+
+EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \
+ --with-dbm=gdbm \
+ --with-gdbm=${STAGING_DIR_HOST}${layout_prefix} \
+ --without-sqlite2 \
+ --without-sqlite3 \
+ --with-expat=${STAGING_DIR_HOST}${layout_prefix}"
+
+
+inherit autotools_stage lib_package binconfig
+
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
+do_configure_prepend() {
+ cp ${STAGING_DATADIR}/apr/apr_rules.mk ${S}/build/rules.mk
+ echo "AC_PROG_LIBTOOL" >> ${S}/configure.in
+}
+
+do_configure_append() {
+ sed -i -e s:apr_builders=/usr/share/build-1:apr_builders=${STAGING_DATADIR}/build-1:g ${S}/build/rules.mk
+ sed -i /^LIBTOOL/d ${S}/build/rules.mk
+ echo LIBTOOL="${STAGING_BINDIR_NATIVE}/${TARGET_PREFIX}libtool --tag=CC" >> ${S}/build/rules.mk
+}
+
diff --git a/packages/apr/apr/cleanup.patch b/packages/apr/apr/cleanup.patch
new file mode 100644
index 0000000000..fd74826480
--- /dev/null
+++ b/packages/apr/apr/cleanup.patch
@@ -0,0 +1,42 @@
+Index: apr-1.3.3/build/buildcheck.sh
+===================================================================
+--- apr-1.3.3.orig/build/buildcheck.sh 2009-01-15 13:32:33.000000000 +0000
++++ apr-1.3.3/build/buildcheck.sh 2009-01-15 13:33:06.000000000 +0000
+@@ -32,35 +32,4 @@
+ echo "buildconf: autoconf version $ac_version (ok)"
+ fi
+
+-# Sample libtool --version outputs:
+-# ltmain.sh (GNU libtool) 1.3.3 (1.385.2.181 1999/07/02 15:49:11)
+-# ltmain.sh (GNU libtool 1.1361 2004/01/02 23:10:52) 1.5a
+-# output is multiline from 1.5 onwards
+-
+-# Require libtool 1.4 or newer
+-libtool=`build/PrintPath glibtool libtool libtool15 libtool14`
+-lt_pversion=`$libtool --version 2>/dev/null|sed -e 's/([^)]*)//g;s/^[^0-9]*//;s/[- ].*//g;q'`
+-if test -z "$lt_pversion"; then
+-echo "buildconf: libtool not found."
+-echo " You need libtool version 1.4 or newer installed"
+-echo " to build APR from SVN."
+-exit 1
+-fi
+-lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$/.\1/'`
+-IFS=.; set $lt_version; IFS=' '
+-lt_status="good"
+-if test "$1" = "1"; then
+- if test "$2" -lt "4"; then
+- lt_status="bad"
+- fi
+-fi
+-if test $lt_status = "good"; then
+- echo "buildconf: libtool version $lt_pversion (ok)"
+- exit 0
+-fi
+-
+-echo "buildconf: libtool version $lt_pversion found."
+-echo " You need libtool version 1.4 or newer installed"
+-echo " to build APR from SVN."
+-
+-exit 1
++exit 0
+\ No newline at end of file
diff --git a/packages/apr/apr/configfix.patch b/packages/apr/apr/configfix.patch
new file mode 100644
index 0000000000..995555e8ba
--- /dev/null
+++ b/packages/apr/apr/configfix.patch
@@ -0,0 +1,51 @@
+Index: apr-1.3.3/apr-config.in
+===================================================================
+--- apr-1.3.3.orig/apr-config.in 2009-01-12 15:16:31.000000000 +0000
++++ apr-1.3.3/apr-config.in 2009-01-12 15:19:25.000000000 +0000
+@@ -152,14 +152,7 @@
+ flags="$flags $LDFLAGS"
+ ;;
+ --includes)
+- if test "$location" = "installed"; then
+ flags="$flags -I$includedir $EXTRA_INCLUDES"
+- elif test "$location" = "source"; then
+- flags="$flags -I$APR_SOURCE_DIR/include $EXTRA_INCLUDES"
+- else
+- # this is for VPATH builds
+- flags="$flags -I$APR_BUILD_DIR/include -I$APR_SOURCE_DIR/include $EXTRA_INCLUDES"
+- fi
+ ;;
+ --srcdir)
+ echo $APR_SOURCE_DIR
+@@ -181,29 +167,14 @@
+ exit 0
+ ;;
+ --link-ld)
+- if test "$location" = "installed"; then
+- ### avoid using -L if libdir is a "standard" location like /usr/lib
+- flags="$flags -L$libdir -l${APR_LIBNAME}"
+- else
+- ### this surely can't work since the library is in .libs?
+- flags="$flags -L$APR_BUILD_DIR -l${APR_LIBNAME}"
+- fi
++ flags="$flags -l${APR_LIBNAME}"
+ ;;
+ --link-libtool)
+ # If the LA_FILE exists where we think it should be, use it. If we're
+ # installed and the LA_FILE does not exist, assume to use -L/-l
+ # (the LA_FILE may not have been installed). If we're building ourselves,
+ # we'll assume that at some point the .la file be created.
+- if test -f "$LA_FILE"; then
+- flags="$flags $LA_FILE"
+- elif test "$location" = "installed"; then
+- ### avoid using -L if libdir is a "standard" location like /usr/lib
+- # Since the user is specifying they are linking with libtool, we
+- # *know* that -R will be recognized by libtool.
+- flags="$flags -L$libdir -R$libdir -l${APR_LIBNAME}"
+- else
+- flags="$flags $LA_FILE"
+- fi
++ flags="$flags -l${APR_LIBNAME}"
+ ;;
+ --shlib-path-var)
+ echo "$SHLIBPATH_VAR"
diff --git a/packages/apr/apr/configure_fixes.patch b/packages/apr/apr/configure_fixes.patch
index 2b2e0eccb2..86ceb8cf08 100644
--- a/packages/apr/apr/configure_fixes.patch
+++ b/packages/apr/apr/configure_fixes.patch
@@ -1,22 +1,66 @@
-Index: apr-1.2.12/configure.in
+Index: apr-1.3.3/configure.in
===================================================================
---- apr-1.2.12.orig/configure.in 2008-03-08 21:41:43.000000000 +0000
-+++ apr-1.2.12/configure.in 2008-03-08 21:43:08.000000000 +0000
-@@ -13,12 +13,11 @@
- dnl
- dnl Include our own M4 macros along with those for libtool
- dnl
--sinclude(build/apr_common.m4)
--sinclude(build/apr_network.m4)
--sinclude(build/apr_threads.m4)
--sinclude(build/apr_hints.m4)
--sinclude(build/libtool.m4)
--sinclude(build/ltsugar.m4)
-+#sinclude(build/apr_common.m4)
-+#sinclude(build/apr_network.m4)
-+#sinclude(build/apr_threads.m4)
-+#sinclude(build/apr_hints.m4)
-+#sinclude(build/libtool.m4)
+--- apr-1.3.3.orig/configure.in
++++ apr-1.3.3/configure.in
+@@ -794,39 +794,6 @@ AC_CHECK_FUNCS([mmap munmap shm_open shm
+ create_area])
- dnl Hard-coded inclusion at the tail end of apr_private.h:
- AH_BOTTOM([
+ APR_CHECK_DEFINE(MAP_ANON, sys/mman.h)
+-AC_CHECK_FILE(/dev/zero)
+-
+-# Not all systems can mmap /dev/zero (such as HP-UX). Check for that.
+-if test "$ac_cv_func_mmap" = "yes" &&
+- test "$ac_cv_file__dev_zero" = "yes"; then
+- AC_MSG_CHECKING(for mmap that can map /dev/zero)
+- AC_TRY_RUN([
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#ifdef HAVE_SYS_MMAN_H
+-#include <sys/mman.h>
+-#endif
+- int main()
+- {
+- int fd;
+- void *m;
+- fd = open("/dev/zero", O_RDWR);
+- if (fd < 0) {
+- return 1;
+- }
+- m = mmap(0, sizeof(void*), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+- if (m == (void *)-1) { /* aka MAP_FAILED */
+- return 2;
+- }
+- if (munmap(m, sizeof(void*)) < 0) {
+- return 3;
+- }
+- return 0;
+- }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no])
+-
+- AC_MSG_RESULT($ac_cv_file__dev_zero)
+-fi
+
+ # Now we determine which one is our anonymous shmem preference.
+ haveshmgetanon="0"
+@@ -1518,13 +1485,14 @@ else
+ bigendian=0
+ fi
+
+-APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>
+-#include <sys/uio.h>],struct iovec,0)
+-if test "$ac_cv_sizeof_struct_iovec" = "0"; then
+- have_iovec=0
+-else
+- have_iovec=1
+-fi
++#APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>
++##include <sys/uio.h>],struct iovec,0)
++#if test "$ac_cv_sizeof_struct_iovec" = "0"; then
++# have_iovec=0
++#else
++# have_iovec=1
++#fi
++have_iovec=1
+
+ AC_SUBST(voidp_size)
+ AC_SUBST(short_value)
diff --git a/packages/apr/apr_1.2.12.bb b/packages/apr/apr_1.2.12.bb
index 923e9b380c..eb1b4b8332 100644
--- a/packages/apr/apr_1.2.12.bb
+++ b/packages/apr/apr_1.2.12.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Apache Portable Runtime (APR) library"
SECTION = "libs"
LICENSE = "Apache License, Version 2.0"
-PR = "r0"
+PR = "r1"
# apache mirrors?
SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.bz2 \
@@ -11,6 +11,11 @@ SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.bz2 \
inherit autotools lib_package binconfig
OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+EXTRA_OEMAKE = " LIBTOOL=\"${S}/${TARGET_PREFIX}libtool\" "
+
+do_configure_prepend() {
+ rm -f ${S}/build/libtool.m4
+}
do_stage() {
autotools_stage_all
diff --git a/packages/apr/apr_1.3.3.bb b/packages/apr/apr_1.3.3.bb
new file mode 100644
index 0000000000..0d0fd667c0
--- /dev/null
+++ b/packages/apr/apr_1.3.3.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "Apache Portable Runtime (APR) library"
+SECTION = "libs"
+LICENSE = "Apache License, Version 2.0"
+
+PR = "r4"
+
+SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.bz2 \
+ file://configure_fixes.patch;patch=1 \
+ file://cleanup.patch;patch=1 \
+ file://configfix.patch;patch=1"
+
+inherit autotools lib_package binconfig
+
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
+do_configure_prepend() {
+ cd ${S}
+ ./buildconf
+}
+
+do_stage() {
+ autotools_stage_all
+ install -d ${STAGING_DATADIR}/apr
+ cp ${S}/build/apr_rules.mk ${STAGING_DATADIR}/apr/
+ sed -i s,apr_builddir=.*,apr_builddir=,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ sed -i s,apr_builders=.*,apr_builders=,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ sed -i s,LIBTOOL=.*,LIBTOOL=\$\(SHELL\)\ ${TARGET_PREFIX}libtool,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ sed -i s,\$\(apr_builders\),${STAGING_DATADIR}/apr/,g ${STAGING_DATADIR}/apr/apr_rules.mk
+ cp ${S}/build/mkdir.sh ${STAGING_DATADIR}/apr/
+ cp ${S}/build/make_exports.awk ${STAGING_DATADIR}/apr/
+ cp ${S}/build/make_var_export.awk ${STAGING_DATADIR}/apr/
+}
diff --git a/packages/apt/apt-0.7.20.2/no-curl.patch b/packages/apt/apt-0.7.20.2/no-curl.patch
new file mode 100644
index 0000000000..3e5aff139c
--- /dev/null
+++ b/packages/apt/apt-0.7.20.2/no-curl.patch
@@ -0,0 +1,40 @@
+---
+ configure.in | 6 ------
+ methods/makefile | 7 -------
+ 2 files changed, 13 deletions(-)
+
+Index: apt-0.7.19/configure.in
+===================================================================
+--- apt-0.7.19.orig/configure.in 2008-12-15 13:44:44.000000000 +0000
++++ apt-0.7.19/configure.in 2008-12-15 13:57:16.000000000 +0000
+@@ -86,12 +86,6 @@
+
+ LIBS="$saveLIBS"
+
+-AC_CHECK_LIB(curl, curl_easy_init,
+- [AC_CHECK_HEADER(curl/curl.h,
+- curl_ok=yes,
+- curl_ok=no)],
+- AC_MSG_ERROR([failed: I need CURL due https support]),
+-)
+
+ AC_SUBST(BDBLIB)
+
+Index: apt-0.7.19/methods/makefile
+===================================================================
+--- apt-0.7.19.orig/methods/makefile 2008-11-24 09:32:23.000000000 +0000
++++ apt-0.7.19/methods/makefile 2008-12-15 13:57:44.000000000 +0000
+@@ -52,13 +52,6 @@
+ SOURCE = http.cc rfc2553emu.cc connect.cc
+ include $(PROGRAM_H)
+
+-# The https method
+-PROGRAM=https
+-SLIBS = -lapt-pkg -lcurl $(INTLLIBS)
+-LIB_MAKES = apt-pkg/makefile
+-SOURCE = https.cc
+-include $(PROGRAM_H)
+-
+ # The ftp method
+ PROGRAM=ftp
+ SLIBS = -lapt-pkg $(SOCKETLIBS) $(INTLLIBS)
diff --git a/packages/apt/apt-0.7.20.2/noconfigure.patch b/packages/apt/apt-0.7.20.2/noconfigure.patch
new file mode 100644
index 0000000000..682a96da24
--- /dev/null
+++ b/packages/apt/apt-0.7.20.2/noconfigure.patch
@@ -0,0 +1,35 @@
+---
+ apt-pkg/packagemanager.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- apt-0.6.45exp2.orig/apt-pkg/packagemanager.cc
++++ apt-0.6.45exp2/apt-pkg/packagemanager.cc
+@@ -534,10 +534,12 @@ bool pkgPackageManager::SmartUnPack(PkgI
+
+ List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
+
++#if 0
+ // Perform immedate configuration of the package.
+ if (List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
+ if (SmartConfigure(Pkg) == false)
+ return _error->Error("Internal Error, Could not perform immediate configuration (2) on %s",Pkg.Name());
++#endif
+
+ return true;
+ }
+@@ -609,6 +611,7 @@ pkgPackageManager::OrderResult pkgPackag
+ DoneSomething = true;
+ }
+
++#if 0
+ // Final run through the configure phase
+ if (ConfigureAll() == false)
+ return Failed;
+@@ -623,6 +626,7 @@ pkgPackageManager::OrderResult pkgPackag
+ return Failed;
+ }
+ }
++#endif
+
+ return Completed;
+ }
diff --git a/packages/apt/apt-0.7.20.2/nodoc.patch b/packages/apt/apt-0.7.20.2/nodoc.patch
new file mode 100644
index 0000000000..db8cf93717
--- /dev/null
+++ b/packages/apt/apt-0.7.20.2/nodoc.patch
@@ -0,0 +1,19 @@
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- apt-0.7.14.orig/Makefile
++++ apt-0.7.14/Makefile
+@@ -15,11 +15,11 @@ all headers library clean veryclean bina
+ $(MAKE) -C apt-inst $@
+ $(MAKE) -C methods $@
+ $(MAKE) -C cmdline $@
+ $(MAKE) -C ftparchive $@
+ $(MAKE) -C dselect $@
+- $(MAKE) -C doc $@
++# $(MAKE) -C doc $@
+ $(MAKE) -C po $@
+
+ # Some very common aliases
+ .PHONY: maintainer-clean dist-clean distclean pristine sanity
+ maintainer-clean dist-clean distclean pristine sanity: veryclean
diff --git a/packages/apt/apt-native.inc b/packages/apt/apt-native.inc
index 6ee26e491a..4e4771a9cd 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 gettext-native"
+DEPENDS = "perl-native dpkg-native gettext-native"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/apt-${PV}"
PACKAGES = ""
USE_NLS = "yes"
diff --git a/packages/apt/apt-native_0.6.46.2.bb b/packages/apt/apt-native_0.6.46.2.bb
index 6db567f987..7bf69c01af 100644
--- a/packages/apt/apt-native_0.6.46.2.bb
+++ b/packages/apt/apt-native_0.6.46.2.bb
@@ -1,5 +1,5 @@
require apt-native.inc
-PR = "r2"
+PR = "r3"
SRC_URI += "file://nodoc.patch;patch=1 \
file://noconfigure.patch;patch=1"
diff --git a/packages/apt/apt-native_0.7.14.bb b/packages/apt/apt-native_0.7.14.bb
index 268e9df720..7628bc9741 100644
--- a/packages/apt/apt-native_0.7.14.bb
+++ b/packages/apt/apt-native_0.7.14.bb
@@ -1,6 +1,5 @@
require apt-native.inc
-
-PR = "r2"
+PR = "r3"
SRC_URI += "file://nodoc.patch;patch=1 \
file://noconfigure.patch;patch=1 \
diff --git a/packages/apt/apt-native_0.7.19.bb b/packages/apt/apt-native_0.7.19.bb
index 268e9df720..7628bc9741 100644
--- a/packages/apt/apt-native_0.7.19.bb
+++ b/packages/apt/apt-native_0.7.19.bb
@@ -1,6 +1,5 @@
require apt-native.inc
-
-PR = "r2"
+PR = "r3"
SRC_URI += "file://nodoc.patch;patch=1 \
file://noconfigure.patch;patch=1 \
diff --git a/packages/apt/apt-native_0.7.2.bb b/packages/apt/apt-native_0.7.2.bb
index 7bf69c01af..4b6897fa44 100644
--- a/packages/apt/apt-native_0.7.2.bb
+++ b/packages/apt/apt-native_0.7.2.bb
@@ -1,5 +1,5 @@
require apt-native.inc
-PR = "r3"
+PR = "r4"
SRC_URI += "file://nodoc.patch;patch=1 \
file://noconfigure.patch;patch=1"
diff --git a/packages/apt/apt-native_0.7.20.2.bb b/packages/apt/apt-native_0.7.20.2.bb
new file mode 100644
index 0000000000..2641cd243b
--- /dev/null
+++ b/packages/apt/apt-native_0.7.20.2.bb
@@ -0,0 +1,6 @@
+require apt-native.inc
+PR = "r1"
+
+SRC_URI += "file://nodoc.patch;patch=1 \
+ file://noconfigure.patch;patch=1 \
+ file://no-curl.patch;patch=1"
diff --git a/packages/apt/apt-native_0.7.3.bb b/packages/apt/apt-native_0.7.3.bb
index 4b6897fa44..f252bd382a 100644
--- a/packages/apt/apt-native_0.7.3.bb
+++ b/packages/apt/apt-native_0.7.3.bb
@@ -1,5 +1,5 @@
require apt-native.inc
-PR = "r4"
+PR = "r5"
SRC_URI += "file://nodoc.patch;patch=1 \
file://noconfigure.patch;patch=1"
diff --git a/packages/apt/apt_0.7.20.2.bb b/packages/apt/apt_0.7.20.2.bb
new file mode 100644
index 0000000000..318b94c642
--- /dev/null
+++ b/packages/apt/apt_0.7.20.2.bb
@@ -0,0 +1,26 @@
+DEPENDS = "curl db"
+RDEPENDS = "dpkg"
+
+require apt.inc
+
+SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/apt_${PV}.tar.gz \
+ file://no-ko-translation.patch;patch=1 \
+ file://use-host.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"
+
+do_stage() {
+ install -d ${STAGING_LIBDIR} ${STAGING_INCDIR}/apt-pkg
+ eval `cat environment.mak | grep ^GLIBC_VER | sed -e's, = ,=,'`
+ oe_libinstall -so -C bin libapt-pkg$GLIBC_VER-6 ${STAGING_LIBDIR}/
+ ln -sf libapt-pkg$GLIBC_VER-6.so ${STAGING_LIBDIR}/libapt-pkg.so
+ oe_libinstall -so -C bin libapt-inst$GLIBC_VER-6 ${STAGING_LIBDIR}/
+ ln -sf libapt-inst$GLIBC_VER-6.so ${STAGING_LIBDIR}/libapt-inst.so
+
+ install -m 0644 include/apt-pkg/*.h ${STAGING_INCDIR}/apt-pkg/
+}
diff --git a/packages/at76c503a/at76c503a-modules/at76_usb-0.17-.patch b/packages/at76c503a/at76c503a-modules/at76_usb-0.17-.patch
new file mode 100644
index 0000000000..06200f5ac7
--- /dev/null
+++ b/packages/at76c503a/at76c503a-modules/at76_usb-0.17-.patch
@@ -0,0 +1,66 @@
+--- at76_usb-0.17/at76_usb.c 2007-09-30 09:21:38.000000000 +0200
++++ at76_usb-0.17.1/at76_usb.c 2008-12-02 17:29:15.000000000 +0100
+@@ -2327,7 +2327,7 @@
+ iwe->cmd = SIOCGIWAP;
+ iwe->u.ap_addr.sa_family = ARPHRD_ETHER;
+ memcpy(iwe->u.ap_addr.sa_data, curr_bss->bssid, 6);
+- curr_pos = iwe_stream_add_event(curr_pos,
++ curr_pos = iwe_stream_add_event(info, curr_pos,
+ extra + IW_SCAN_MAX_DATA, iwe,
+ IW_EV_ADDR_LEN);
+
+@@ -2335,7 +2335,7 @@
+ iwe->cmd = SIOCGIWESSID;
+ iwe->u.data.flags = 1;
+
+- curr_pos = iwe_stream_add_point(curr_pos,
++ curr_pos = iwe_stream_add_point(info, curr_pos,
+ extra + IW_SCAN_MAX_DATA, iwe,
+ curr_bss->ssid);
+
+@@ -2346,14 +2346,14 @@
+ IW_MODE_MASTER : IW_MODE_AUTO;
+ /* IW_MODE_AUTO = 0 which I thought is
+ * the most logical value to return in this case */
+- curr_pos = iwe_stream_add_event(curr_pos,
++ curr_pos = iwe_stream_add_event(info, curr_pos,
+ extra + IW_SCAN_MAX_DATA, iwe,
+ IW_EV_UINT_LEN);
+
+ iwe->cmd = SIOCGIWFREQ;
+ iwe->u.freq.m = curr_bss->channel;
+ iwe->u.freq.e = 0;
+- curr_pos = iwe_stream_add_event(curr_pos,
++ curr_pos = iwe_stream_add_event(info, curr_pos,
+ extra + IW_SCAN_MAX_DATA, iwe,
+ IW_EV_FREQ_LEN);
+
+@@ -2364,7 +2364,7 @@
+ iwe->u.data.flags = IW_ENCODE_DISABLED;
+
+ iwe->u.data.length = 0;
+- curr_pos = iwe_stream_add_point(curr_pos,
++ curr_pos = iwe_stream_add_point(info, curr_pos,
+ extra + IW_SCAN_MAX_DATA, iwe,
+ NULL);
+
+@@ -2383,7 +2383,7 @@
+ iwe->u.qual.updated |= IW_QUAL_QUAL_INVALID;
+ }
+ /* Add new value to event */
+- curr_pos = iwe_stream_add_event(curr_pos,
++ curr_pos = iwe_stream_add_event(info, curr_pos,
+ extra + IW_SCAN_MAX_DATA, iwe,
+ IW_EV_QUAL_LEN);
+
+@@ -2401,8 +2401,8 @@
+ iwe->u.bitrate.value =
+ ((curr_bss->rates[i] & 0x7f) * 500000);
+ /* Add new value to event */
+- curr_val = iwe_stream_add_value(curr_pos, curr_val,
+- extra +
++ curr_val = iwe_stream_add_value(info, curr_pos,
++ curr_val, extra +
+ IW_SCAN_MAX_DATA, iwe,
+ IW_EV_PARAM_LEN);
+ }
diff --git a/packages/at76c503a/at76c503a-modules_0.17.bb b/packages/at76c503a/at76c503a-modules_0.17.bb
index 58b782b483..e0230ded84 100644
--- a/packages/at76c503a/at76c503a-modules_0.17.bb
+++ b/packages/at76c503a/at76c503a-modules_0.17.bb
@@ -2,11 +2,13 @@ DESCRIPTION = "Driver for at76 based usb-wifi devices"
SECTION = "base"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
RDEPENDS = "at76c503-firmware"
SRC_URI = "http://download.berlios.de/at76c503a/at76_usb-0.17.tar.gz"
+SRC_URI_ixp4xx = "http://download.berlios.de/at76c503a/at76_usb-0.17.tar.gz \
+ file://at76_usb-0.17-.patch;patch=1"
S = "${WORKDIR}/at76_usb-${PV}/"
inherit module
diff --git a/packages/aufs/aufs/aufs_create_no_manpage.patch b/packages/aufs/aufs/aufs_create_no_manpage.patch
deleted file mode 100644
index ec7c0c1138..0000000000
--- a/packages/aufs/aufs/aufs_create_no_manpage.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-OE-only:
-comment: Not building the manpage is just a hack.
-
-diff -Nur aufs.vanilla/util/Makefile aufs/util/Makefile
---- aufs.vanilla/util/Makefile 2008-08-23 13:00:37.000000000 +0200
-+++ aufs/util/Makefile 2008-08-23 15:40:26.000000000 +0200
-@@ -1,25 +1,10 @@
-
- # $Id: Makefile,v 1.10 2008/05/26 04:02:40 sfjro Exp $
-
--all: aufs.5 aulchown
-+all: aulchown
- test -x ./mount.aufs || chmod a+x ./mount.aufs
-
--aufs.5: aufs.in.5 ./c2tmac
-- ${RM} $@
-- ./c2tmac > $@
-- awk '{ \
-- gsub(/\140[^\047]*\047/, "\\[oq]&\\[cq]"); \
-- gsub(/\\\[oq\]\140/, "\\[oq]"); \
-- gsub(/\047\\\[cq\]/, "\\[cq]"); \
-- gsub(/\047/, "\\[aq]"); \
-- print; \
-- }' aufs.in.5 >> $@
-- chmod a-w $@
--
- CFLAGS += -O2 -Wall ${EXTRA_CFLAGS} ${ccflags-y}
-
--.INTERMEDIATE: c2tmac.o c2tmac
--c2tmac.o: c2tmac.c ../include/linux/aufs_type.h
--
- clean:
-- ${RM} c2tmac aulchown aufs.5 *~ .*~
-+ ${RM} aulchown *~ .*~
diff --git a/packages/aufs/aufs_cvs.bb b/packages/aufs/aufs_cvs.bb
index cf98e08fc9..815a24fda4 100644
--- a/packages/aufs/aufs_cvs.bb
+++ b/packages/aufs/aufs_cvs.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Aufs is a stackable unification filesystem such as Unionfs, which
HOMEPAGE = "http://aufs.sourceforge.net/"
LICENSE = "GPL"
PV = "cvs${SRCDATE}"
-PR = "r2"
+PR = "r3"
RSUGGESTS_${PN} = "${PN}-tools"
@@ -10,12 +10,6 @@ inherit module
S = "${WORKDIR}/aufs"
-# We do not create the manpage for aufs because we do not install it anyway.
-# If you want to have the manpage created you will need to add host cc to
-# the makefile else it will fail to crosscompile.
-# See http://svn.exactcode.de/t2/trunk/package/filesystem/aufs/compile.patch.cross
-# as an example how this could be done.
-
SRC_URI = "cvs://anonymous@aufs.cvs.sourceforge.net/cvsroot/aufs;module=aufs;date=${SRCDATE}"
EXTRA_OEMAKE = "KDIR=${STAGING_KERNEL_DIR} -f local.mk"
@@ -39,6 +33,16 @@ do_configure() {
fi
}
+do_compile_prepend() {
+#compile binaries for host
+ cd ${S}/util
+ BRANCH_MAX=$(fgrep CONFIG_AUFS_BRANCH_MAX ../local.mk | grep y | cut -d " " -f 2)
+ ${BUILD_CC} -D ${BRANCH_MAX} c2tmac.c ../include/linux/aufs_type.h -o c2tmac
+ ${BUILD_CC} -D ${BRANCH_MAX} c2sh.c ../include/linux/aufs_type.h -o c2sh
+ cd ${S}
+}
+
+
do_install() {
install -d ${D}/${sbindir}
install -m 0500 mount.aufs umount.aufs auplink aulchown ${D}/${sbindir}
diff --git a/packages/automake/automake-1.10/path_prog_fixes.patch b/packages/automake/automake-1.10/path_prog_fixes.patch
new file mode 100644
index 0000000000..60d32833ea
--- /dev/null
+++ b/packages/automake/automake-1.10/path_prog_fixes.patch
@@ -0,0 +1,43 @@
+Index: automake-1.9.3/Makefile.am
+===================================================================
+--- automake-1.9.3.orig/Makefile.am 2004-10-25 14:57:30.000000000 -0400
++++ automake-1.9.3/Makefile.am 2005-03-09 16:47:38.241364016 -0500
+@@ -66,7 +66,8 @@
+ -e 's,[@]SHELL[@],$(SHELL),g' \
+ -e 's,[@]VERSION[@],$(VERSION),g' \
+ -e 's,[@]configure_input[@],Generated from $@.in; do not edit by hand.,g' \
+- -e 's,[@]datadir[@],$(datadir),g'
++ -e 's,[@]datadir[@],$(datadir),g' \
++ -e 's,[@]bindir[@],$(bindir),g'
+
+ ## These files depend on Makefile so they are rebuilt if $(VERSION),
+ ## $(datadir) or other do_subst'ituted variables change.
+Index: automake-1.9.3/Makefile.in
+===================================================================
+--- automake-1.9.3.orig/Makefile.in 2004-11-01 05:23:54.000000000 -0500
++++ automake-1.9.3/Makefile.in 2005-03-09 16:47:54.712859968 -0500
+@@ -161,7 +161,8 @@
+ -e 's,[@]SHELL[@],$(SHELL),g' \
+ -e 's,[@]VERSION[@],$(VERSION),g' \
+ -e 's,[@]configure_input[@],Generated from $@.in; do not edit by hand.,g' \
+- -e 's,[@]datadir[@],$(datadir),g'
++ -e 's,[@]datadir[@],$(datadir),g' \
++ -e 's,[@]bindir[@],$(bindir),g'
+
+ WGET = wget
+ WGETSGO = $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
+--- /tmp/aclocal.in 2009-02-25 15:43:38.000000000 +0100
++++ automake-1.10/aclocal.in 2009-02-25 15:44:54.000000000 +0100
+@@ -1,8 +1,10 @@
+-#!@PERL@ -w
++#!@bindir@/env perl
+ # -*- perl -*-
+ # @configure_input@
+
+-eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
++use warnings;
++
++eval 'case $# in 0) exec @bindir@/env perl -S "$0";; *) exec @bindir@/env perl -S "$0" "$@";; esac'
+ if 0;
+
+ # aclocal - create aclocal.m4 by scanning configure.ac
diff --git a/packages/automake/automake-1.8.2/automake182-update-configscripts.patch b/packages/automake/automake-1.8.2/automake182-update-configscripts.patch
deleted file mode 100644
index 52992b3b26..0000000000
--- a/packages/automake/automake-1.8.2/automake182-update-configscripts.patch
+++ /dev/null
@@ -1,201 +0,0 @@
---- automake-1.8.2/lib/config.guess.old 2004-01-11 15:33:12.000000000 -0500
-+++ automake-1.8.2/lib/config.guess 2004-04-24 22:42:44.000000000 -0400
-@@ -3,7 +3,7 @@
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
--timestamp='2004-01-05'
-+timestamp='2004-03-12'
-
- # 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
-@@ -197,12 +197,18 @@
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
-+ amd64:OpenBSD:*:*)
-+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
-+ exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-+ cats:OpenBSD:*:*)
-+ echo arm-unknown-openbsd${UNAME_RELEASE}
-+ exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-@@ -239,10 +245,24 @@
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-+ *:ekkoBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-+ exit 0 ;;
-+ macppc:MirBSD:*:*)
-+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-+ exit 0 ;;
-+ *:MirBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-+ exit 0 ;;
- alpha:OSF1:*:*)
-- if test $UNAME_RELEASE = "V4.0"; then
-+ case $UNAME_RELEASE in
-+ *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-- fi
-+ ;;
-+ *5.*)
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-+ ;;
-+ esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
-@@ -280,11 +300,12 @@
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
-+ # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
-- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha*:OpenVMS:*:*)
- echo alpha-hp-vms
-@@ -405,6 +426,9 @@
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
-+ m68k:machten:*:*)
-+ echo m68k-apple-machten${UNAME_RELEASE}
-+ exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
-@@ -829,6 +853,9 @@
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
-+ m32r*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
-@@ -1230,8 +1257,8 @@
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
-- *:DRAGONFLY:*:*)
-- echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE}
-+ *:DragonFly:*:*)
-+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- esac
-
---- automake-1.8.2/lib/config.sub.old 2004-01-11 15:33:12.000000000 -0500
-+++ automake-1.8.2/lib/config.sub 2004-04-24 22:42:44.000000000 -0400
-@@ -3,7 +3,7 @@
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
--timestamp='2004-01-05'
-+timestamp='2004-03-12'
-
- # This file is (in principle) common to ALL GNU software.
- # The presence of a machine in this file suggests that SOME GNU software
-@@ -237,7 +237,7 @@
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
-- | m32r | m68000 | m68k | m88k | mcore \
-+ | m32r | m32rle | m68000 | m68k | m88k | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
-@@ -262,7 +262,7 @@
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
-- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
-+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
-@@ -308,7 +308,7 @@
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
-- | m32r-* \
-+ | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-@@ -336,7 +336,7 @@
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
-@@ -363,6 +363,9 @@
- basic_machine=a29k-amd
- os=-udi
- ;;
-+ abacus)
-+ basic_machine=abacus-unknown
-+ ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
-@@ -442,12 +445,20 @@
- basic_machine=j90-cray
- os=-unicos
- ;;
-+ cr16c)
-+ basic_machine=cr16c-unknown
-+ os=-elf
-+ ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
-+ crx)
-+ basic_machine=crx-unknown
-+ os=-elf
-+ ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
-@@ -1070,7 +1081,7 @@
- sh64)
- basic_machine=sh64-unknown
- ;;
-- sparc | sparcv9 | sparcv9b)
-+ sparc | sparcv8 | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
-@@ -1143,8 +1154,9 @@
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-- | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
-- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
-+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
diff --git a/packages/automake/automake-1.9.2/automake182-update-configscripts.patch b/packages/automake/automake-1.9.2/automake182-update-configscripts.patch
deleted file mode 100644
index 52992b3b26..0000000000
--- a/packages/automake/automake-1.9.2/automake182-update-configscripts.patch
+++ /dev/null
@@ -1,201 +0,0 @@
---- automake-1.8.2/lib/config.guess.old 2004-01-11 15:33:12.000000000 -0500
-+++ automake-1.8.2/lib/config.guess 2004-04-24 22:42:44.000000000 -0400
-@@ -3,7 +3,7 @@
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
--timestamp='2004-01-05'
-+timestamp='2004-03-12'
-
- # 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
-@@ -197,12 +197,18 @@
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
-+ amd64:OpenBSD:*:*)
-+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
-+ exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-+ cats:OpenBSD:*:*)
-+ echo arm-unknown-openbsd${UNAME_RELEASE}
-+ exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-@@ -239,10 +245,24 @@
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-+ *:ekkoBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-+ exit 0 ;;
-+ macppc:MirBSD:*:*)
-+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-+ exit 0 ;;
-+ *:MirBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-+ exit 0 ;;
- alpha:OSF1:*:*)
-- if test $UNAME_RELEASE = "V4.0"; then
-+ case $UNAME_RELEASE in
-+ *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-- fi
-+ ;;
-+ *5.*)
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-+ ;;
-+ esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
-@@ -280,11 +300,12 @@
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
-+ # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
-- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha*:OpenVMS:*:*)
- echo alpha-hp-vms
-@@ -405,6 +426,9 @@
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
-+ m68k:machten:*:*)
-+ echo m68k-apple-machten${UNAME_RELEASE}
-+ exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
-@@ -829,6 +853,9 @@
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
-+ m32r*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
-@@ -1230,8 +1257,8 @@
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
-- *:DRAGONFLY:*:*)
-- echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE}
-+ *:DragonFly:*:*)
-+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- esac
-
---- automake-1.8.2/lib/config.sub.old 2004-01-11 15:33:12.000000000 -0500
-+++ automake-1.8.2/lib/config.sub 2004-04-24 22:42:44.000000000 -0400
-@@ -3,7 +3,7 @@
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
--timestamp='2004-01-05'
-+timestamp='2004-03-12'
-
- # This file is (in principle) common to ALL GNU software.
- # The presence of a machine in this file suggests that SOME GNU software
-@@ -237,7 +237,7 @@
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
-- | m32r | m68000 | m68k | m88k | mcore \
-+ | m32r | m32rle | m68000 | m68k | m88k | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
-@@ -262,7 +262,7 @@
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
-- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
-+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
-@@ -308,7 +308,7 @@
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
-- | m32r-* \
-+ | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-@@ -336,7 +336,7 @@
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
-@@ -363,6 +363,9 @@
- basic_machine=a29k-amd
- os=-udi
- ;;
-+ abacus)
-+ basic_machine=abacus-unknown
-+ ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
-@@ -442,12 +445,20 @@
- basic_machine=j90-cray
- os=-unicos
- ;;
-+ cr16c)
-+ basic_machine=cr16c-unknown
-+ os=-elf
-+ ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
-+ crx)
-+ basic_machine=crx-unknown
-+ os=-elf
-+ ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
-@@ -1070,7 +1081,7 @@
- sh64)
- basic_machine=sh64-unknown
- ;;
-- sparc | sparcv9 | sparcv9b)
-+ sparc | sparcv8 | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
-@@ -1143,8 +1154,9 @@
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-- | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
-- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
-+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
diff --git a/packages/automake/automake-1.9.3/automake182-update-configscripts.patch b/packages/automake/automake-1.9.3/automake182-update-configscripts.patch
deleted file mode 100644
index 52992b3b26..0000000000
--- a/packages/automake/automake-1.9.3/automake182-update-configscripts.patch
+++ /dev/null
@@ -1,201 +0,0 @@
---- automake-1.8.2/lib/config.guess.old 2004-01-11 15:33:12.000000000 -0500
-+++ automake-1.8.2/lib/config.guess 2004-04-24 22:42:44.000000000 -0400
-@@ -3,7 +3,7 @@
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
--timestamp='2004-01-05'
-+timestamp='2004-03-12'
-
- # 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
-@@ -197,12 +197,18 @@
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
-+ amd64:OpenBSD:*:*)
-+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
-+ exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-+ cats:OpenBSD:*:*)
-+ echo arm-unknown-openbsd${UNAME_RELEASE}
-+ exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-@@ -239,10 +245,24 @@
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
-+ *:ekkoBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-+ exit 0 ;;
-+ macppc:MirBSD:*:*)
-+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-+ exit 0 ;;
-+ *:MirBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-+ exit 0 ;;
- alpha:OSF1:*:*)
-- if test $UNAME_RELEASE = "V4.0"; then
-+ case $UNAME_RELEASE in
-+ *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-- fi
-+ ;;
-+ *5.*)
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-+ ;;
-+ esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
-@@ -280,11 +300,12 @@
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
-+ # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
-- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha*:OpenVMS:*:*)
- echo alpha-hp-vms
-@@ -405,6 +426,9 @@
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
-+ m68k:machten:*:*)
-+ echo m68k-apple-machten${UNAME_RELEASE}
-+ exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
-@@ -829,6 +853,9 @@
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
-+ m32r*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
-@@ -1230,8 +1257,8 @@
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
-- *:DRAGONFLY:*:*)
-- echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE}
-+ *:DragonFly:*:*)
-+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- esac
-
---- automake-1.8.2/lib/config.sub.old 2004-01-11 15:33:12.000000000 -0500
-+++ automake-1.8.2/lib/config.sub 2004-04-24 22:42:44.000000000 -0400
-@@ -3,7 +3,7 @@
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
--timestamp='2004-01-05'
-+timestamp='2004-03-12'
-
- # This file is (in principle) common to ALL GNU software.
- # The presence of a machine in this file suggests that SOME GNU software
-@@ -237,7 +237,7 @@
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
-- | m32r | m68000 | m68k | m88k | mcore \
-+ | m32r | m32rle | m68000 | m68k | m88k | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
-@@ -262,7 +262,7 @@
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
-- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
-+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
-@@ -308,7 +308,7 @@
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
-- | m32r-* \
-+ | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-@@ -336,7 +336,7 @@
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
-@@ -363,6 +363,9 @@
- basic_machine=a29k-amd
- os=-udi
- ;;
-+ abacus)
-+ basic_machine=abacus-unknown
-+ ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
-@@ -442,12 +445,20 @@
- basic_machine=j90-cray
- os=-unicos
- ;;
-+ cr16c)
-+ basic_machine=cr16c-unknown
-+ os=-elf
-+ ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
-+ crx)
-+ basic_machine=crx-unknown
-+ os=-elf
-+ ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
-@@ -1070,7 +1081,7 @@
- sh64)
- basic_machine=sh64-unknown
- ;;
-- sparc | sparcv9 | sparcv9b)
-+ sparc | sparcv8 | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
-@@ -1143,8 +1154,9 @@
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-- | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
-- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
-+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
diff --git a/packages/automake/automake-native_1.9.3.bb b/packages/automake/automake-native_1.10.2.bb
index 92c861f49c..92c861f49c 100644
--- a/packages/automake/automake-native_1.9.3.bb
+++ b/packages/automake/automake-native_1.10.2.bb
diff --git a/packages/automake/automake-native_1.10.bb b/packages/automake/automake-native_1.10.bb
deleted file mode 100644
index a7857c562d..0000000000
--- a/packages/automake/automake-native_1.10.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-PV := "${PV}"
-
-require automake-native.inc
-
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/automake/automake-native_1.8.2.bb b/packages/automake/automake-native_1.8.2.bb
deleted file mode 100644
index 9a8b1726a8..0000000000
--- a/packages/automake/automake-native_1.8.2.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SECTION = "devel"
-require automake_${PV}.bb
-S = "${WORKDIR}/automake-${PV}"
-DEPENDS = "autoconf-native"
-RDEPENDS_${PN} = "autoconf-native perl-native-runtime"
-
-inherit native
-
-do_stage () {
- oe_runmake install
- install -d ${datadir}
- if [ ! -e ${datadir}/aclocal ]; then
- ln -sf aclocal-1.8 ${datadir}/aclocal
- fi
- if [ ! -e ${datadir}/automake ]; then
- ln -sf automake-1.8 ${datadir}/automake
- fi
-}
diff --git a/packages/automake/automake-native_1.8.4.bb b/packages/automake/automake-native_1.8.4.bb
deleted file mode 100644
index 9a8b1726a8..0000000000
--- a/packages/automake/automake-native_1.8.4.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SECTION = "devel"
-require automake_${PV}.bb
-S = "${WORKDIR}/automake-${PV}"
-DEPENDS = "autoconf-native"
-RDEPENDS_${PN} = "autoconf-native perl-native-runtime"
-
-inherit native
-
-do_stage () {
- oe_runmake install
- install -d ${datadir}
- if [ ! -e ${datadir}/aclocal ]; then
- ln -sf aclocal-1.8 ${datadir}/aclocal
- fi
- if [ ! -e ${datadir}/automake ]; then
- ln -sf automake-1.8 ${datadir}/automake
- fi
-}
diff --git a/packages/automake/automake-native_1.9.2.bb b/packages/automake/automake-native_1.9.2.bb
deleted file mode 100644
index 2ecb0eaa1e..0000000000
--- a/packages/automake/automake-native_1.9.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-PV := "${PV}"
-require automake-native.inc
diff --git a/packages/automake/automake-native_1.9.6.bb b/packages/automake/automake-native_1.9.6.bb
deleted file mode 100644
index 92c861f49c..0000000000
--- a/packages/automake/automake-native_1.9.6.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-PV := "${PV}"
-
-require automake-native.inc
diff --git a/packages/automake/automake_1.10.2.bb b/packages/automake/automake_1.10.2.bb
new file mode 100644
index 0000000000..a17fe7aabb
--- /dev/null
+++ b/packages/automake/automake_1.10.2.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "A tool for automatically generating Makefiles."
+LICENSE = "GPL"
+HOMEPAGE = "http://www.gnu.org/software/automake/"
+SECTION = "devel"
+PR = "r0"
+
+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.10 ${D}${datadir}/aclocal
+ fi
+ if [ ! -e ${D}${datadir}/automake ]; then
+ ln -sf automake-1.10 ${D}${datadir}/automake
+ fi
+}
diff --git a/packages/automake/automake_1.10.bb b/packages/automake/automake_1.10.bb
deleted file mode 100644
index e4e8f3385b..0000000000
--- a/packages/automake/automake_1.10.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-DESCRIPTION = "A tool for automatically generating Makefiles."
-LICENSE = "GPL"
-HOMEPAGE = "http://www.gnu.org/software/automake/"
-SECTION = "devel"
-DEFAULT_PREFERENCE = "-1"
-PR = "r1"
-
-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.10 ${D}${datadir}/aclocal
- fi
- if [ ! -e ${D}${datadir}/automake ]; then
- ln -sf automake-1.10 ${D}${datadir}/automake
- fi
-}
diff --git a/packages/automake/automake_1.7.7.bb b/packages/automake/automake_1.7.7.bb
deleted file mode 100644
index 4c00ea0891..0000000000
--- a/packages/automake/automake_1.7.7.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2 \
- ${@['file://path_prog_fixes.patch;patch=1', ''][bb.data.inherits_class('native', d)]}"
-DESCRIPTION = "A tool for automatically generating Makefiles."
-SECTION = "devel"
-LICENSE = "GPL"
-PR = "r7"
-inherit autotools
-
-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.7 ${D}${datadir}/aclocal
- fi
- if [ ! -e ${D}${datadir}/automake ]; then
- ln -sf automake-1.7 ${D}${datadir}/automake
- fi
-}
diff --git a/packages/automake/automake_1.8.2.bb b/packages/automake/automake_1.8.2.bb
deleted file mode 100644
index 30002191f5..0000000000
--- a/packages/automake/automake_1.8.2.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2 \
- file://automake182-update-configscripts.patch;patch=1;pnum=1 \
- ${@['file://path_prog_fixes.patch;patch=1', ''][bb.data.inherits_class('native', d)]}"
-DESCRIPTION = "A tool for automatically generating Makefiles."
-SECTION = "devel"
-LICENSE = "GPL"
-PR = "r7"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/automake-${PV}"
-
-inherit autotools
-
-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.8 ${D}${datadir}/aclocal
- fi
- if [ ! -e ${D}${datadir}/automake ]; then
- ln -sf automake-1.8 ${D}${datadir}/automake
- fi
-}
diff --git a/packages/automake/automake_1.8.4.bb b/packages/automake/automake_1.8.4.bb
deleted file mode 100644
index d10ff553df..0000000000
--- a/packages/automake/automake_1.8.4.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "A tool for automatically generating Makefiles."
-LICENSE = "GPL"
-HOMEPAGE = "http://www.gnu.org/software/automake/"
-SECTION = "devel"
-PR = "r7"
-
-SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2 \
- ${@['file://path_prog_fixes.patch;patch=1', ''][bb.data.inherits_class('native', d)]}"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/automake-${PV}"
-
-inherit autotools
-
-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.8 ${D}${datadir}/aclocal
- fi
- if [ ! -e ${D}${datadir}/automake ]; then
- ln -sf automake-1.8 ${D}${datadir}/automake
- fi
-}
diff --git a/packages/automake/automake_1.9.2.bb b/packages/automake/automake_1.9.2.bb
deleted file mode 100644
index 19d5d56979..0000000000
--- a/packages/automake/automake_1.9.2.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "A tool for automatically generating Makefiles."
-LICENSE = "GPL"
-HOMEPAGE = "http://www.gnu.org/software/automake/"
-SECTION = "devel"
-PR = "r7"
-
-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
-
-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
-}
diff --git a/packages/automake/automake_1.9.3.bb b/packages/automake/automake_1.9.3.bb
deleted file mode 100644
index 52f9b981aa..0000000000
--- a/packages/automake/automake_1.9.3.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "A tool for automatically generating Makefiles."
-LICENSE = "GPL"
-HOMEPAGE = "http://www.gnu.org/software/automake/"
-SECTION = "devel"
-PR = "r5"
-
-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
-}
diff --git a/packages/automake/automake_1.9.6.bb b/packages/automake/automake_1.9.6.bb
deleted file mode 100644
index eef69f4e4a..0000000000
--- a/packages/automake/automake_1.9.6.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-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/automake/files/path_prog_fixes.patch b/packages/automake/files/path_prog_fixes.patch
index a85b244205..69cea77035 100644
--- a/packages/automake/files/path_prog_fixes.patch
+++ b/packages/automake/files/path_prog_fixes.patch
@@ -1,8 +1,8 @@
-Index: automake-1.9.3/Makefile.am
+Index: automake-1.10.2/Makefile.am
===================================================================
---- automake-1.9.3.orig/Makefile.am 2004-10-25 14:57:30.000000000 -0400
-+++ automake-1.9.3/Makefile.am 2005-03-09 16:47:38.241364016 -0500
-@@ -66,7 +66,8 @@
+--- automake-1.10.2.orig/Makefile.am
++++ automake-1.10.2/Makefile.am
+@@ -75,7 +75,8 @@
-e 's,[@]SHELL[@],$(SHELL),g' \
-e 's,[@]VERSION[@],$(VERSION),g' \
-e 's,[@]configure_input[@],Generated from $@.in; do not edit by hand.,g' \
@@ -12,11 +12,11 @@ Index: automake-1.9.3/Makefile.am
## These files depend on Makefile so they are rebuilt if $(VERSION),
## $(datadir) or other do_subst'ituted variables change.
-Index: automake-1.9.3/Makefile.in
+Index: automake-1.10.2/Makefile.in
===================================================================
---- automake-1.9.3.orig/Makefile.in 2004-11-01 05:23:54.000000000 -0500
-+++ automake-1.9.3/Makefile.in 2005-03-09 16:47:54.712859968 -0500
-@@ -161,7 +161,8 @@
+--- automake-1.10.2.orig/Makefile.in
++++ automake-1.10.2/Makefile.in
+@@ -186,7 +186,8 @@
-e 's,[@]SHELL[@],$(SHELL),g' \
-e 's,[@]VERSION[@],$(VERSION),g' \
-e 's,[@]configure_input[@],Generated from $@.in; do not edit by hand.,g' \
@@ -25,26 +25,11 @@ Index: automake-1.9.3/Makefile.in
+ -e 's,[@]bindir[@],$(bindir),g'
WGET = wget
- WGETSGO = $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
-Index: automake-1.9.3/aclocal.in
+ WGET_SV_CVS = $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/
+Index: automake-1.10.2/automake.in
===================================================================
---- automake-1.9.3.orig/aclocal.in 2004-10-10 12:10:24.000000000 -0400
-+++ automake-1.9.3/aclocal.in 2005-03-09 16:47:38.241364016 -0500
-@@ -1,8 +1,8 @@
--#!@PERL@
-+#!@bindir@/env perl
- # -*- perl -*-
- # @configure_input@
-
--eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
-+eval 'case $# in 0) exec @bindir@/env perl -S "$0";; *) exec @bindir@/env perl -S "$0" "$@";; esac'
- if 0;
-
- # aclocal - create aclocal.m4 by scanning configure.ac
-Index: automake-1.9.3/automake.in
-===================================================================
---- automake-1.9.3.orig/automake.in 2004-10-21 16:23:26.000000000 -0400
-+++ automake-1.9.3/automake.in 2005-03-09 16:47:38.245363408 -0500
+--- automake-1.10.2.orig/automake.in
++++ automake-1.10.2/automake.in
@@ -1,8 +1,10 @@
-#!@PERL@ -w
+#!@bindir@/env perl
@@ -58,3 +43,13 @@ Index: automake-1.9.3/automake.in
if 0;
# automake - create Makefile.in from Makefile.am
+Index: automake-1.10.2/aclocal.in
+===================================================================
+--- automake-1.10.2.orig/aclocal.in
++++ automake-1.10.2/aclocal.in
+@@ -1,4 +1,4 @@
+-#!@PERL@ -w
++#!@bindir@/env perl -w
+ # -*- perl -*-
+ # @configure_input@
+
diff --git a/packages/avahi/avahi_0.6.24.bb b/packages/avahi/avahi_0.6.24.bb
new file mode 100644
index 0000000000..15f56ffa95
--- /dev/null
+++ b/packages/avahi/avahi_0.6.24.bb
@@ -0,0 +1,5 @@
+require avahi.inc
+
+DEPENDS += "intltool-native"
+
+PACKAGES =+ "libavahi-gobject"
diff --git a/packages/base-files/base-files/akita/fstab b/packages/base-files/base-files/akita/fstab
index 41f14a89a0..3b488cf880 100644
--- a/packages/base-files/base-files/akita/fstab
+++ b/packages/base-files/base-files/akita/fstab
@@ -1,5 +1,5 @@
rootfs / auto defaults 1 1
-/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+#/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
diff --git a/packages/base-files/base-files/c7x0/fstab b/packages/base-files/base-files/c7x0/fstab
index ca93b03ecb..ea38eab1c6 100644
--- a/packages/base-files/base-files/c7x0/fstab
+++ b/packages/base-files/base-files/c7x0/fstab
@@ -1,5 +1,5 @@
rootfs / auto defaults 1 1
-/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+#/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
diff --git a/packages/base-files/base-files/kaeilos/issue b/packages/base-files/base-files/kaeilos/issue
new file mode 100644
index 0000000000..ea00fdb3db
--- /dev/null
+++ b/packages/base-files/base-files/kaeilos/issue
@@ -0,0 +1,12 @@
+
+## ## ### ######## #### ## ####### ######
+## ## ## ## ## ## ## ## ## ## ##
+## ## ## ## ## ## ## ## ## ##
+##### ## ## ###### ## ## ## ## ######
+## ## ######### ## ## ## ## ## ##
+## ## ## ## ## ## ## ## ## ## ##
+## ## ## ## ######## #### ######## ####### ######(R)
+KaeilOS Linux \n \l
+
+KaeilOS 2008.1-test-20081222 \n \l
+
diff --git a/packages/base-files/base-files/kaeilos/issue.net b/packages/base-files/base-files/kaeilos/issue.net
new file mode 100644
index 0000000000..781939c966
--- /dev/null
+++ b/packages/base-files/base-files/kaeilos/issue.net
@@ -0,0 +1,12 @@
+
+## ## ### ######## #### ## ####### ######
+## ## ## ## ## ## ## ## ## ## ##
+## ## ## ## ## ## ## ## ## ##
+##### ## ## ###### ## ## ## ## ######
+## ## ######### ## ## ## ## ## ##
+## ## ## ## ## ## ## ## ## ## ##
+## ## ## ## ######## #### ######## ####### ######(R)
+KaeilOS Linux %h
+
+KaeilOS 2008.1-test-20081222 %h
+
diff --git a/packages/base-files/base-files/om-3d7k/fstab b/packages/base-files/base-files/om-3d7k/fstab
new file mode 100644
index 0000000000..48aefde814
--- /dev/null
+++ b/packages/base-files/base-files/om-3d7k/fstab
@@ -0,0 +1,10 @@
+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/volatile tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
diff --git a/packages/base-files/base-files/poodle/fstab b/packages/base-files/base-files/poodle/fstab
index 64076fa181..733b13fddb 100644
--- a/packages/base-files/base-files/poodle/fstab
+++ b/packages/base-files/base-files/poodle/fstab
@@ -1,5 +1,5 @@
-/dev/mtdblock2 / jffs2 rw,noatime 1 1
-/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+rootfs / auto defaults 1 1
+#/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
diff --git a/packages/base-files/base-files/spitz/fstab b/packages/base-files/base-files/spitz/fstab
index dc419e62be..324fb78482 100644
--- a/packages/base-files/base-files/spitz/fstab
+++ b/packages/base-files/base-files/spitz/fstab
@@ -26,5 +26,5 @@ usbfs /proc/bus/usb usbfs defaults 0 0
#
# Harddisk
#
-/dev/hda2 /home ext3 defaults 0 0
-/dev/hda3 /media/hdd vfat defaults 0 0
+##/dev/hda2 /home ext3 defaults 0 0
+##/dev/hda3 /media/hdd vfat defaults 0 0
diff --git a/packages/base-files/base-files/tosa/fstab b/packages/base-files/base-files/tosa/fstab
index badbebe1f7..f256c7409d 100644
--- a/packages/base-files/base-files/tosa/fstab
+++ b/packages/base-files/base-files/tosa/fstab
@@ -1,5 +1,5 @@
-/dev/mtdblock2 / jffs2 rw,noatime 1 1
-/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+rootfs / auto defaults 1 1
+#/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,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 3072e238a0..460fd6357f 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 = "r83"
+PR = "r85"
LICENSE = "GPL"
SRC_URI = " \
diff --git a/packages/base-passwd/base-passwd-3.5.9/configure.patch b/packages/base-passwd/base-passwd-3.5.9/configure.patch
deleted file mode 100644
index a9adb1e9e2..0000000000
--- a/packages/base-passwd/base-passwd-3.5.9/configure.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- base-passwd/configure.in~configure
-+++ base-passwd/configure.in
-@@ -1,5 +1,6 @@
- dnl Initialize the autoconf process
--AC_INIT(update-passwd.c)
-+AC_INIT
-+AC_CONFIG_SRCDIR([update-passwd.c])
- AC_CONFIG_HEADER(config.h)
- AC_PREFIX_DEFAULT(/usr)
-
-@@ -12,5 +13,6 @@
- AC_CHECK_FUNCS(putgrent)
-
- dnl Finally output everything
--AC_OUTPUT(Makefile)
-+AC_CONFIG_FILES([Makefile])
-+AC_OUTPUT
-
diff --git a/packages/base-passwd/base-passwd-3.5.9/mysql.patch b/packages/base-passwd/base-passwd-3.5.9/mysql.patch
deleted file mode 100644
index b641f41238..0000000000
--- a/packages/base-passwd/base-passwd-3.5.9/mysql.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- base-passwd/group.master.orig 2005-07-08 06:36:07.717990112 +0200
-+++ base-passwd/group.master 2005-07-08 06:36:32.000000000 +0200
-@@ -36,4 +36,5 @@
- staff:*:50:
- games:*:60:
- users:*:100:
-+mysql:*:64001:
- nogroup:*:65534:
diff --git a/packages/base-passwd/base-passwd-3.5.9/nobash.patch b/packages/base-passwd/base-passwd-3.5.9/nobash.patch
deleted file mode 100644
index 2bde9bf33b..0000000000
--- a/packages/base-passwd/base-passwd-3.5.9/nobash.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- base-passwd/passwd.master~nobash
-+++ base-passwd/passwd.master
-@@ -1,4 +1,4 @@
--root::0:0:root:/root:/bin/bash
-+root::0:0:root:/root:/bin/sh
- daemon:*:1:1:daemon:/usr/sbin:/bin/sh
- bin:*:2:2:bin:/bin:/bin/sh
- sys:*:3:3:sys:/dev:/bin/sh
diff --git a/packages/base-passwd/base-passwd-3.5.9/root-home.patch b/packages/base-passwd/base-passwd-3.5.9/root-home.patch
deleted file mode 100644
index 85d96b6185..0000000000
--- a/packages/base-passwd/base-passwd-3.5.9/root-home.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- base-passwd/passwd.master.orig 2005-07-08 06:26:22.000000000 +0200
-+++ base-passwd/passwd.master 2005-07-08 06:31:58.000000000 +0200
-@@ -1,4 +1,4 @@
--root::0:0:root:/root:/bin/sh
-+root::0:0:root:/home/root:/bin/sh
- daemon:*:1:1:daemon:/usr/sbin:/bin/sh
- bin:*:2:2:bin:/bin:/bin/sh
- sys:*:3:3:sys:/dev:/bin/sh
diff --git a/packages/base-passwd/base-passwd-3.5.9/slugos/README b/packages/base-passwd/base-passwd-3.5.9/slugos/README
deleted file mode 100644
index 1abe54b5a2..0000000000
--- a/packages/base-passwd/base-passwd-3.5.9/slugos/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This patch overrides the root-home.patch for all DISTROs
-derived from slugos (DISTROs which set slugos in OVERRIDES)
-
-The patch sets a root password on /etc/passwd, this password is
-
-opeNSLUg
-
-This allows ssh (dropbear) login to an OpenSlug NSLU2 using that
-password.
-
-The password is NO MORE SECURE than the previous empty string,
-however, because ssh logins can now succeed the NSLU2 is LESS
-secure! This password must be changed as soon as possible after
-initial configuration of the NSLU2.
diff --git a/packages/base-passwd/base-passwd-3.5.9/slugos/root-home.patch b/packages/base-passwd/base-passwd-3.5.9/slugos/root-home.patch
deleted file mode 100644
index 97dab68f33..0000000000
--- a/packages/base-passwd/base-passwd-3.5.9/slugos/root-home.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- base-passwd/passwd.master.orig 2005-07-08 06:26:22.000000000 +0200
-+++ base-passwd/passwd.master 2005-07-08 06:31:58.000000000 +0200
-@@ -1,4 +1,4 @@
--root::0:0:root:/root:/bin/sh
-+root:Xm./49bYkrkuo:0:0:root:/root:/bin/sh
- daemon:*:1:1:daemon:/usr/sbin:/bin/sh
- bin:*:2:2:bin:/bin:/bin/sh
- sys:*:3:3:sys:/dev:/bin/sh
diff --git a/packages/base-passwd/base-passwd_3.5.19.bb b/packages/base-passwd/base-passwd_3.5.19.bb
deleted file mode 100644
index 65ee129e0b..0000000000
--- a/packages/base-passwd/base-passwd_3.5.19.bb
+++ /dev/null
@@ -1,57 +0,0 @@
-DESCRIPTION = "Base system password/group files."
-SECTION = "base"
-LICENSE = "GPL"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/b/base-passwd/base-passwd_${PV}.tar.gz \
- file://nobash.patch;patch=1 \
- file://root-home.patch;patch=1 \
- file://mysql.patch;patch=1"
-
-S = "${WORKDIR}/base-passwd"
-
-inherit autotools
-
-FILES_${PN}-doc += "${docdir}"
-
-do_install () {
- install -d -m 755 ${D}${sbindir}
- install -p -m 755 update-passwd ${D}${sbindir}/
- install -d -m 755 \
- ${D}${mandir}/man8 ${D}${mandir}/pl/man8
- install -p -m 644 man/update-passwd.8 \
- ${D}${mandir}/man8/
- install -p -m 644 man/update-passwd.pl.8 \
- ${D}${mandir}/pl/man8/update-passwd.8
- gzip -9 ${D}${mandir}/man8/* \
- ${D}${mandir}/pl/man8/*
- install -d -m 755 ${D}${datadir}/base-passwd
- install -p -m 644 passwd.master \
- ${D}${datadir}/base-passwd/
- install -p -m 644 group.master \
- ${D}${datadir}/base-passwd/
-
- install -d -m 755 ${D}${docdir}/${PN}
- install -p -m 644 debian/changelog ${D}${docdir}/${PN}/
- gzip -9 ${D}${docdir}/${PN}/*
- install -p -m 644 README ${D}${docdir}/${PN}/
- install -p -m 644 debian/copyright ${D}${docdir}/${PN}/
-}
-
-
-do_install_append_openmn() {
- echo "0:Jn6tcg/qjqvUE:0:0:root:/root:/bin/sh" >>${D}${datadir}/base-passwd/passwd.master
-}
-
-
-pkg_postinst () {
- set -e
-
- if [ ! -e $D${sysconfdir}/passwd ] ; then
- cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
- fi
-
- if [ ! -e $D${sysconfdir}/group ] ; then
- cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
- fi
- exit 0
-}
diff --git a/packages/base-passwd/base-passwd_3.5.20.bb b/packages/base-passwd/base-passwd_3.5.20.bb
new file mode 100644
index 0000000000..78079a0aa6
--- /dev/null
+++ b/packages/base-passwd/base-passwd_3.5.20.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "Base system password/group files."
+SECTION = "base"
+LICENSE = "GPL"
+
+SRC_URI = "\
+ ${DEBIAN_MIRROR}/main/b/base-passwd/base-passwd_${PV}.tar.gz \
+ file://nobash.patch;patch=1 \
+ file://root-home.patch;patch=1 \
+ file://mysql.patch;patch=1 \
+"
+S = "${WORKDIR}/base-passwd"
+
+inherit autotools
+
+do_install () {
+ install -d -m 755 ${D}${sbindir}
+ install -p -m 755 update-passwd ${D}${sbindir}/
+ install -d -m 755 \
+ ${D}${mandir}/man8 ${D}${mandir}/pl/man8
+ install -p -m 644 man/update-passwd.8 \
+ ${D}${mandir}/man8/
+ install -p -m 644 man/update-passwd.pl.8 \
+ ${D}${mandir}/pl/man8/update-passwd.8
+ gzip -9 ${D}${mandir}/man8/* \
+ ${D}${mandir}/pl/man8/*
+ install -d -m 755 ${D}${datadir}/base-passwd
+ install -p -m 644 passwd.master \
+ ${D}${datadir}/base-passwd/
+ install -p -m 644 group.master \
+ ${D}${datadir}/base-passwd/
+
+ install -d -m 755 ${D}${docdir}/${PN}
+ install -p -m 644 debian/changelog ${D}${docdir}/${PN}/
+ gzip -9 ${D}${docdir}/${PN}/*
+ install -p -m 644 README ${D}${docdir}/${PN}/
+ install -p -m 644 debian/copyright ${D}${docdir}/${PN}/
+}
+
+
+do_install_append_openmn() {
+ echo "0:Jn6tcg/qjqvUE:0:0:root:/root:/bin/sh" >>${D}${datadir}/base-passwd/passwd.master
+}
+
+FILES_${PN}-doc += "${docdir}"
+
+pkg_postinst () {
+ set -e
+
+ if [ ! -e $D${sysconfdir}/passwd ] ; then
+ cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
+ fi
+
+ if [ ! -e $D${sysconfdir}/group ] ; then
+ cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
+ fi
+ exit 0
+}
diff --git a/packages/base-passwd/base-passwd_3.5.9.bb b/packages/base-passwd/base-passwd_3.5.9.bb
deleted file mode 100644
index 4ea4e7f839..0000000000
--- a/packages/base-passwd/base-passwd_3.5.9.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-DESCRIPTION = "Base system password/group files."
-SECTION = "base"
-PR = "r3"
-LICENSE = "GPL"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/b/base-passwd/base-passwd_${PV}.tar.gz \
- file://configure.patch;patch=1 \
- file://nobash.patch;patch=1 \
- file://root-home.patch;patch=1 \
- file://mysql.patch;patch=1"
-
-S = "${WORKDIR}/base-passwd"
-
-inherit autotools
-
-FILES_${PN}-doc += "${docdir}"
-
-do_install () {
- install -d -m 755 ${D}${sbindir}
- install -p -m 755 update-passwd ${D}${sbindir}/
- install -d -m 755 \
- ${D}${mandir}/man8 ${D}${mandir}/pl/man8
- install -p -m 644 man/update-passwd.8 \
- ${D}${mandir}/man8/
- install -p -m 644 man/update-passwd.pl.8 \
- ${D}${mandir}/pl/man8/update-passwd.8
- gzip -9 ${D}${mandir}/man8/* \
- ${D}${mandir}/pl/man8/*
- install -d -m 755 ${D}${datadir}/base-passwd
- install -p -m 644 passwd.master \
- ${D}${datadir}/base-passwd/
- install -p -m 644 group.master \
- ${D}${datadir}/base-passwd/
-
- install -d -m 755 ${D}${docdir}/${PN}
- install -p -m 644 debian/changelog ${D}${docdir}/${PN}/
- gzip -9 ${D}${docdir}/${PN}/*
- install -p -m 644 README ${D}${docdir}/${PN}/
- install -p -m 644 debian/copyright ${D}${docdir}/${PN}/
-}
-
-
-do_install_append_openmn() {
- echo "0:Jn6tcg/qjqvUE:0:0:root:/root:/bin/sh" >>${D}${datadir}/base-passwd/passwd.master
-}
-
-
-pkg_postinst () {
- set -e
-
- if [ ! -e $D${sysconfdir}/passwd ] ; then
- cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
- fi
-
- if [ ! -e $D${sysconfdir}/group ] ; then
- cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
- fi
- exit 0
-}
diff --git a/packages/base-passwd/base-passwd-3.5.19/mysql.patch b/packages/base-passwd/files/mysql.patch
index b641f41238..b641f41238 100644
--- a/packages/base-passwd/base-passwd-3.5.19/mysql.patch
+++ b/packages/base-passwd/files/mysql.patch
diff --git a/packages/base-passwd/base-passwd-3.5.19/nobash.patch b/packages/base-passwd/files/nobash.patch
index 2bde9bf33b..2bde9bf33b 100644
--- a/packages/base-passwd/base-passwd-3.5.19/nobash.patch
+++ b/packages/base-passwd/files/nobash.patch
diff --git a/packages/base-passwd/base-passwd-3.5.19/root-home.patch b/packages/base-passwd/files/root-home.patch
index 85d96b6185..85d96b6185 100644
--- a/packages/base-passwd/base-passwd-3.5.19/root-home.patch
+++ b/packages/base-passwd/files/root-home.patch
diff --git a/packages/base-passwd/base-passwd-3.5.19/slugos/README b/packages/base-passwd/files/slugos/README
index 1abe54b5a2..1abe54b5a2 100644
--- a/packages/base-passwd/base-passwd-3.5.19/slugos/README
+++ b/packages/base-passwd/files/slugos/README
diff --git a/packages/base-passwd/base-passwd-3.5.19/slugos/root-home.patch b/packages/base-passwd/files/slugos/root-home.patch
index 97dab68f33..97dab68f33 100644
--- a/packages/base-passwd/base-passwd-3.5.19/slugos/root-home.patch
+++ b/packages/base-passwd/files/slugos/root-home.patch
diff --git a/packages/binutils/binutils-2.19.1/110-arm-eabi-conf.patch b/packages/binutils/binutils-2.19.1/110-arm-eabi-conf.patch
new file mode 100644
index 0000000000..2623301da0
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/110-arm-eabi-conf.patch
@@ -0,0 +1,22 @@
+--- /tmp/configure.ac 2008-06-22 14:14:59.000000000 +0200
++++ binutils-2.18.50.0.7/configure.ac 2008-06-22 14:15:30.000000000 +0200
+@@ -561,7 +561,7 @@
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ noconfigdirs="$noconfigdirs target-libobjc"
+ case ${with_newlib} in
+--- /tmp/configure 2008-06-22 14:17:11.000000000 +0200
++++ binutils-2.18.50.0.7/configure 2008-06-22 14:17:56.000000000 +0200
+@@ -2307,7 +2307,7 @@
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ noconfigdirs="$noconfigdirs target-libobjc"
+ case ${with_newlib} in
diff --git a/packages/binutils/binutils-2.19.1/binutils-2.16.1-e300c2c3.patch b/packages/binutils/binutils-2.19.1/binutils-2.16.1-e300c2c3.patch
new file mode 100644
index 0000000000..c5e4234f22
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/binutils-2.16.1-e300c2c3.patch
@@ -0,0 +1,19 @@
+Adds support for Freescale Power architecture e300c2 and e300c3 cores.
+http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
+
+Leon Woestenberg <leonw@mailcan.com>
+
+diff -uNr binutils-2.16.1.orig/gas/config/tc-ppc.c binutils-2.16.1/gas/config/tc-ppc.c
+--- binutils-2.16.1.orig/gas/config/tc-ppc.c 2005-03-02 13:24:01.000000000 +0000
++++ binutils-2.16.1/gas/config/tc-ppc.c 2006-07-04 11:45:24.000000000 +0100
+@@ -879,6 +879,10 @@
+ else
+ ppc_cpu |= PPC_OPCODE_SPE;
+ }
++ else if (strcmp (arg, "pmr") == 0)
++ {
++ ppc_cpu |= PPC_OPCODE_PMR;
++ }
+ /* -mppc64 and -m620 mean to assemble for the 64-bit PowerPC
+ 620. */
+ else if (strcmp (arg, "ppc64") == 0 || strcmp (arg, "620") == 0)
diff --git a/packages/binutils/binutils-2.19.1/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch b/packages/binutils/binutils-2.19.1/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
new file mode 100644
index 0000000000..8df5b1fea0
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
@@ -0,0 +1,39 @@
+# 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/objcopy.c | 8 +++++---
+# 1 file changed, 5 insertions(+), 3 deletions(-)
+#
+Index: src/binutils/objcopy.c
+===================================================================
+--- src.orig/binutils/objcopy.c 2007-08-09 13:26:03.000000000 +0100
++++ src/binutils/objcopy.c 2007-08-09 16:36:12.000000000 +0100
+@@ -2787,8 +2787,9 @@ strip_main (int argc, char *argv[])
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+ if (output_file != tmpname)
+- smart_rename (tmpname, output_file ? output_file : argv[i],
+- preserve_dates);
++ if (smart_rename (tmpname, output_file ? output_file : argv[i],
++ preserve_dates))
++ hold_status = 1;
+ status = hold_status;
+ }
+ else
+@@ -3411,7 +3412,8 @@ copy_main (int argc, char *argv[])
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+ if (tmpname != output_filename)
+- smart_rename (tmpname, input_filename, preserve_dates);
++ if (smart_rename (tmpname, input_filename, preserve_dates))
++ status = 1;
+ }
+ else
+ unlink_if_ordinary (tmpname);
diff --git a/packages/binutils/binutils-2.19.1/binutils-arm-pr7093.patch b/packages/binutils/binutils-2.19.1/binutils-arm-pr7093.patch
new file mode 100644
index 0000000000..ad4a556e0f
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/binutils-arm-pr7093.patch
@@ -0,0 +1,19 @@
+Index: binutils/bfd/elf32-arm.c
+===================================================================
+RCS file: /cvs/src/src/bfd/elf32-arm.c,v
+retrieving revision 1.162
+retrieving revision 1.163
+diff -u -r1.162 -r1.163
+--- binutils/bfd/elf32-arm.c 23 Dec 2008 09:01:45 -0000 1.162
++++ binutils/bfd/elf32-arm.c 23 Dec 2008 11:46:17 -0000 1.163
+@@ -4608,6 +4608,10 @@
+ Elf_Internal_Shdr *hdr;
+ unsigned int i, localsyms;
+
++ /* PR 7093: Make sure that we are dealing with an arm elf binary. */
++ if (! is_arm_elf (abfd))
++ return;
++
+ if ((abfd->flags & DYNAMIC) != 0)
+ return;
+
diff --git a/packages/binutils/binutils-2.19.1/binutils-uclibc-100-uclibc-conf.patch b/packages/binutils/binutils-2.19.1/binutils-uclibc-100-uclibc-conf.patch
new file mode 100644
index 0000000000..8de04e0fe0
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/binutils-uclibc-100-uclibc-conf.patch
@@ -0,0 +1,34 @@
+--- binutils-2.18.orig/configure
++++ binutils-2.18/configure
+@@ -2206,7 +2206,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)
+@@ -2504,7 +2504,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.18.orig/gprof/configure
++++ binutils-2.18/gprof/configure
+@@ -4124,6 +4124,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/binutils/binutils-2.19.1/binutils-uclibc-300-001_ld_makefile_patch.patch b/packages/binutils/binutils-2.19.1/binutils-uclibc-300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..04a7e61e25
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/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.19.1/binutils-uclibc-300-006_better_file_error.patch b/packages/binutils/binutils-2.19.1/binutils-uclibc-300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/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.19.1/binutils-uclibc-300-012_check_ldrunpath_length.patch b/packages/binutils/binutils-2.19.1/binutils-uclibc-300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/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.19.1/binutils-uclibc-gas-needs-libm.patch b/packages/binutils/binutils-2.19.1/binutils-uclibc-gas-needs-libm.patch
new file mode 100644
index 0000000000..db838cf20c
--- /dev/null
+++ b/packages/binutils/binutils-2.19.1/binutils-uclibc-gas-needs-libm.patch
@@ -0,0 +1,38 @@
+Source: Khem Raj <raj.khem@gmail.com>
+Disposition: submit upstream.
+
+Description:
+
+We do not need to have the libtool patch anymore for binutils after
+libtool has been updated upstream it include support for it. However
+for building gas natively on uclibc systems we have to link it with
+-lm so that it picks up missing symbols.
+
+/local/build_area/BUILD/arm_v5t_le_uclibc/binutils-2.17.50/objdir/libiberty/pic/libiberty.a(floatformat.o): In function `floatformat_from_double':
+floatformat.c:(.text+0x1ec): undefined reference to `frexp'
+floatformat.c:(.text+0x2f8): undefined reference to `ldexp'
+/local/build_area/BUILD/arm_v5t_le_uclibc/binutils-2.17.50/objdir/libiberty/pic/libiberty.a(floatformat.o): In function `floatformat_to_double':
+floatformat.c:(.text+0x38a): undefined reference to `ldexp'
+floatformat.c:(.text+0x3d2): undefined reference to `ldexp'
+floatformat.c:(.text+0x43e): undefined reference to `ldexp' floatformat.c:(.text+0x4e2): undefined reference to `ldexp'
+collect2: ld returned 1 exit status
+make[4]: *** [as-new] Error 1
+
+Index: binutils-2.17.50/gas/configure.tgt
+===================================================================
+--- binutils-2.17.50.orig/gas/configure.tgt
++++ binutils-2.17.50/gas/configure.tgt
+@@ -408,6 +408,12 @@ case ${generic_target} in
+ *-*-netware) fmt=elf em=netware ;;
+ esac
+
++case ${generic_target} in
++ arm-*-*uclibc*)
++ need_libm=yes
++ ;;
++esac
++
+ case ${cpu_type} in
+ alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc | z80 | z8k)
+ bfd_gas=yes
+
diff --git a/packages/binutils/binutils-cross-sdk_2.19.1.bb b/packages/binutils/binutils-cross-sdk_2.19.1.bb
new file mode 100644
index 0000000000..76dff5449f
--- /dev/null
+++ b/packages/binutils/binutils-cross-sdk_2.19.1.bb
@@ -0,0 +1,3 @@
+require binutils_${PV}.bb
+require binutils-cross-sdk.inc
+PR = "r0"
diff --git a/packages/binutils/binutils-cross_2.19.1.bb b/packages/binutils/binutils-cross_2.19.1.bb
new file mode 100644
index 0000000000..b78a30ac47
--- /dev/null
+++ b/packages/binutils/binutils-cross_2.19.1.bb
@@ -0,0 +1,4 @@
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
+require binutils_${PV}.bb
+require binutils-cross.inc
+
diff --git a/packages/binutils/binutils_2.19.1.bb b/packages/binutils/binutils_2.19.1.bb
new file mode 100644
index 0000000000..c399ab8c62
--- /dev/null
+++ b/packages/binutils/binutils_2.19.1.bb
@@ -0,0 +1,19 @@
+PR = "r0"
+
+require binutils.inc
+
+SRC_URI = "\
+ ${GNU_MIRROR}/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 \
+ file://binutils-uclibc-gas-needs-libm.patch;patch=1 \
+ file://binutils-arm-pr7093.patch;patch=1 \
+ "
+
+# powerpc patches
+SRC_URI += "file://binutils-2.16.1-e300c2c3.patch;patch=1"
+
diff --git a/packages/bison/bison-native_2.3.bb b/packages/bison/bison-native_2.3.bb
index ec2f269eec..af6249ac9d 100644
--- a/packages/bison/bison-native_2.3.bb
+++ b/packages/bison/bison-native_2.3.bb
@@ -2,6 +2,7 @@ require bison_${PV}.bb
SECTION = "devel"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/bison-${PV}"
S = "${WORKDIR}/bison-${PV}"
+PR="r1"
inherit native autotools
@@ -15,6 +16,7 @@ exec ${STAGING_BINDIR}/bison -y "\$@"
EOF
chmod a+rx ${STAGING_BINDIR}/yacc
install -d ${STAGING_DATADIR}/bison/m4sugar
- install -m 0755 data/c.m4 data/glr.c data/lalr1.cc data/yacc.c ${STAGING_DATADIR}/bison/
+ install -m 0755 data/c.m4 data/c++.m4 data/glr.c data/glr.cc data/lalr1.cc data/location.cc data/yacc.c ${STAGING_DATADIR}/bison/
+
install -m 0755 data/m4sugar/m4sugar.m4 ${STAGING_DATADIR}/bison/m4sugar/
}
diff --git a/packages/blackbox/blackbox_0.70.1.bb b/packages/blackbox/blackbox_0.70.1.bb
index 50dc5a69c6..05010f97bb 100644
--- a/packages/blackbox/blackbox_0.70.1.bb
+++ b/packages/blackbox/blackbox_0.70.1.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Blackbox Window Manager"
SECTION = "x11/wm"
LICENSE = "GPL"
DEPENDS = "libx11 libxext libxcomposite libxfixes libxdamage libxrender libxinerama libxpm xrandr xft"
-PR = "r0"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/blackboxwm/blackbox-0.70.1.tar.gz \
file://remove-host-includes.patch;patch=1"
@@ -12,3 +12,10 @@ inherit autotools pkgconfig
EXTRA_OECONF = "--disable-i18n --without-imlib --with-xpm --with-gnome-menus"
+#fix path of pc file
+do_install_append() {
+ sed -i s#${STAGING_LIBDIR}#${libdir}#g ${D}/${libdir}/pkgconfig/libbt.pc
+}
+do_stage_append () {
+ sed -i s#${STAGING_LIBDIR}#${libdir}#g ${STAGING_LIBDIR}/pkgconfig/libbt.pc
+}
diff --git a/packages/blueprobe/blueprobe-0.15/h6300.patch b/packages/blueprobe/blueprobe-0.15/h6300.patch
deleted file mode 100644
index 39de7758b0..0000000000
--- a/packages/blueprobe/blueprobe-0.15/h6300.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -Naur blueprobe-0.15_orig/blueprobe.init blueprobe-0.15_h6300_fix/blueprobe.init
---- blueprobe-0.15_orig/blueprobe.init 2005-10-05 22:37:35.706302041 +0300
-+++ blueprobe-0.15_h6300_fix/blueprobe.init 2005-10-05 22:54:51.840676832 +0300
-@@ -57,6 +57,13 @@
- SCRIPT=/etc/bluetooth/TIInit_3.2.26.bts
- PROBE=no
- ;;
-+ "HP iPAQ H6300")
-+ BLUETOOTH=yes
-+ PORT=/dev/ttyS0
-+ SPEED=115200
-+ PROTO=texas
-+ PROBE=no
-+ ;;
- *)
- BLUETOOTH=no
- ;;
diff --git a/packages/blueprobe/blueprobe-0.15/hx4700.patch b/packages/blueprobe/blueprobe-0.15/hx4700.patch
deleted file mode 100644
index 692f33f662..0000000000
--- a/packages/blueprobe/blueprobe-0.15/hx4700.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- blueprobe-0.14/blueprobe.init.orig 2005-09-05 22:03:57 +0200
-+++ blueprobe-0.14/blueprobe.init 2005-09-05 22:09:34 +0200
-@@ -47,6 +47,14 @@
- PROTO=bcsp
- PROBE=yes
- ;;
-+ "HP iPAQ HX4700")
-+ BLUETOOTH=yes
-+ PORT=/dev/ttyS1
-+ SPEED=921600
-+ PROTO=texas
-+ SCRIPT=/etc/bluetooth/TIInit_3.2.26.bts
-+ PROBE=no
-+ ;;
- *)
- BLUETOOTH=no
- ;;
-@@ -67,5 +75,8 @@
- echo "BLUETOOTH_PORT=$PORT" >>/etc/sysconfig/bluetooth
- echo "BLUETOOTH_SPEED=$SPEED" >>/etc/sysconfig/bluetooth
- echo "BLUETOOTH_PROTOCOL=$PROTO" >>/etc/sysconfig/bluetooth
-+ if [ "$SCRIPT" != "" ] && [ -f "$SCRIPT" ]; then
-+ echo "BLUETOOTH_SCRIPT=$SCRIPT" >>/etc/sysconfig/bluetooth
-+ fi
- fi
- fi
diff --git a/packages/blueprobe/blueprobe-0.16/h6300.patch b/packages/blueprobe/blueprobe-0.16/h6300.patch
deleted file mode 100644
index 39de7758b0..0000000000
--- a/packages/blueprobe/blueprobe-0.16/h6300.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -Naur blueprobe-0.15_orig/blueprobe.init blueprobe-0.15_h6300_fix/blueprobe.init
---- blueprobe-0.15_orig/blueprobe.init 2005-10-05 22:37:35.706302041 +0300
-+++ blueprobe-0.15_h6300_fix/blueprobe.init 2005-10-05 22:54:51.840676832 +0300
-@@ -57,6 +57,13 @@
- SCRIPT=/etc/bluetooth/TIInit_3.2.26.bts
- PROBE=no
- ;;
-+ "HP iPAQ H6300")
-+ BLUETOOTH=yes
-+ PORT=/dev/ttyS0
-+ SPEED=115200
-+ PROTO=texas
-+ PROBE=no
-+ ;;
- *)
- BLUETOOTH=no
- ;;
diff --git a/packages/blueprobe/blueprobe-0.16/hx4700.patch b/packages/blueprobe/blueprobe-0.16/hx4700.patch
deleted file mode 100644
index 69610e8c7b..0000000000
--- a/packages/blueprobe/blueprobe-0.16/hx4700.patch
+++ /dev/null
@@ -1,30 +0,0 @@
---- blueprobe-0.14/blueprobe.init.orig 2005-09-05 22:03:57 +0200
-+++ blueprobe-0.14/blueprobe.init 2005-09-05 22:09:34 +0200
-@@ -47,6 +47,18 @@
- PROTO=bcsp
- PROBE=yes
- ;;
-+ "HP iPAQ HX4700")
-+ BLUETOOTH=yes
-+ PORT=/dev/ttyS1
-+ PROTO=texas
-+ SCRIPT=/etc/bluetooth/TIInit_3.2.26.bts
-+ if [ -f "$SCRIPT" ]; then
-+ SPEED=921600
-+ else
-+ SPEED=115200
-+ fi
-+ PROBE=no
-+ ;;
- *)
- BLUETOOTH=no
- ;;
-@@ -67,5 +75,8 @@
- echo "BLUETOOTH_PORT=$PORT" >>/etc/sysconfig/bluetooth
- echo "BLUETOOTH_SPEED=$SPEED" >>/etc/sysconfig/bluetooth
- echo "BLUETOOTH_PROTOCOL=$PROTO" >>/etc/sysconfig/bluetooth
-+ if [ "$SCRIPT" != "" ] && [ -f "$SCRIPT" ]; then
-+ echo "BLUETOOTH_SCRIPT=$SCRIPT" >>/etc/sysconfig/bluetooth
-+ fi
- fi
- fi
diff --git a/packages/blueprobe/blueprobe-0.17/h2200-fixup.patch b/packages/blueprobe/blueprobe-0.17/h2200-fixup.patch
deleted file mode 100644
index 965bbf405e..0000000000
--- a/packages/blueprobe/blueprobe-0.17/h2200-fixup.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/blueprobe.init 2006-05-10 18:38:42.581557352 +0200
-+++ blueprobe-0.17/blueprobe.init 2006-05-10 18:38:54.001821208 +0200
-@@ -28,7 +28,7 @@
- case `module_id` in
- "HP iPAQ H2200")
- BLUETOOTH=yes
-- PORT=/dev/tts/3
-+ PORT=/dev/ttyS3
- SPEED=921600
- PROBE=no
- RADIO_VER=`h2200_radio_version`
diff --git a/packages/blueprobe/blueprobe-0.17/htcuniversal.patch b/packages/blueprobe/blueprobe-0.17/htcuniversal.patch
deleted file mode 100644
index f84a36bbec..0000000000
--- a/packages/blueprobe/blueprobe-0.17/htcuniversal.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- blueprobe-0.17/blueprobe.init.orig 2006-01-21 19:47:56.000000000 +0100
-+++ blueprobe-0.17/blueprobe.init 2006-06-15 00:40:57.000000000 +0200
-@@ -74,6 +74,15 @@
- PROTO=texas
- PROBE=no
- ;;
-+ "HTC Universal")
-+ BLUETOOTH=yes
-+ PORT=/dev/ttyS1
-+ SCRIPT=/etc/bluetooth/TIInit_3.2.26.bts
-+ SPEED='`[ -f "$BLUETOOTH_SCRIPT" ] && echo 921600 || echo 115200`'
-+ PROTO=texas
-+ PROBE=no
-+ ;;
-+
- *)
- BLUETOOTH=no
- ;;
diff --git a/packages/blueprobe/blueprobe-0.17/hwuart.patch b/packages/blueprobe/blueprobe-0.17/hwuart.patch
deleted file mode 100644
index 274c1455d8..0000000000
--- a/packages/blueprobe/blueprobe-0.17/hwuart.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: base/blueprobe/blueprobe.init
-===================================================================
---- base/blueprobe/blueprobe.init (revision 8939)
-+++ base/blueprobe/blueprobe.init (working copy)
-@@ -46,14 +46,14 @@
- ;;
- "HP iPAQ H5400")
- BLUETOOTH=yes
-- PORT=/dev/tts/1
-+ PORT=/dev/ttyS3
- SPEED=921600
- PROTO=any
- PROBE=yes
- ;;
- "HP iPAQ H3900")
- BLUETOOTH=yes
-- PORT=/dev/tts/1
-+ PORT=/dev/ttyS1
- SPEED=921600
- PROTO=bcsp
- PROBE=yes
diff --git a/packages/blueprobe/blueprobe-0.17/hx4700.patch b/packages/blueprobe/blueprobe-0.17/hx4700.patch
deleted file mode 100644
index f1ee19e9d5..0000000000
--- a/packages/blueprobe/blueprobe-0.17/hx4700.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- blueprobe-0.17/blueprobe.init.orig 2006-01-22 13:19:14.000000000 +0100
-+++ blueprobe-0.17/blueprobe.init 2006-01-22 13:23:21.000000000 +0100
-@@ -70,7 +70,8 @@
- "HP iPAQ HX4700")
- BLUETOOTH=yes
- PORT=/dev/ttyS1
-- SPEED=115200
-+ SCRIPT=/etc/bluetooth/TIInit_3.2.26.bts
-+ SPEED='`[ -f "$BLUETOOTH_SCRIPT" ] && echo 921600 || echo 115200`'
- PROTO=texas
- PROBE=no
- ;;
-@@ -99,6 +100,9 @@
- echo "BLUETOOTH=$BLUETOOTH" >/etc/sysconfig/bluetooth
- if [ $BLUETOOTH = "yes" ]; then
- echo "BLUETOOTH_PORT=$PORT" >>/etc/sysconfig/bluetooth
-+ if [ "$SCRIPT" != "" ]; then
-+ echo "BLUETOOTH_SCRIPT=$SCRIPT" >>/etc/sysconfig/bluetooth
-+ fi
- echo "BLUETOOTH_SPEED=$SPEED" >>/etc/sysconfig/bluetooth
- echo "BLUETOOTH_PROTOCOL=$PROTO" >>/etc/sysconfig/bluetooth
- fi
diff --git a/packages/blueprobe/blueprobe-0.18/fix-makefile.patch b/packages/blueprobe/blueprobe-0.18/fix-makefile.patch
new file mode 100644
index 0000000000..f1bad8b707
--- /dev/null
+++ b/packages/blueprobe/blueprobe-0.18/fix-makefile.patch
@@ -0,0 +1,13 @@
+Index: blueprobe-0.18/Makefile
+===================================================================
+--- blueprobe-0.18.orig/Makefile
++++ blueprobe-0.18/Makefile
+@@ -28,7 +28,7 @@
+ install-program: $(PACKAGE)
+ install -d $(DESTDIR)/etc/sysconfig
+ install -d $(DESTDIR)$(PREFIX)/bin
+- install -s $(PACKAGE) $(DESTDIR)$(PREFIX)/bin/$(PACKAGE)
++ install $(PACKAGE) $(DESTDIR)$(PREFIX)/bin/$(PACKAGE)
+ install -d $(DESTDIR)/etc/init.d
+ install $(PACKAGE).init $(DESTDIR)/etc/init.d/$(PACKAGE)
+ install -d $(DESTDIR)/etc/rcS.d
diff --git a/packages/blueprobe/blueprobe.inc b/packages/blueprobe/blueprobe.inc
index 894a3ebe7e..4b31a2836e 100644
--- a/packages/blueprobe/blueprobe.inc
+++ b/packages/blueprobe/blueprobe.inc
@@ -1,4 +1,5 @@
+DESCRIPTION = "Discovers machine-specific Bluetooth parameters"
SECTION = "base"
LICENSE = "GPL"
-DESCRIPTION = "Discovers machine-specific Bluetooth parameters"
+
inherit gpe
diff --git a/packages/blueprobe/blueprobe_0.13.bb b/packages/blueprobe/blueprobe_0.13.bb
deleted file mode 100644
index 50ea03e854..0000000000
--- a/packages/blueprobe/blueprobe_0.13.bb
+++ /dev/null
@@ -1 +0,0 @@
-require blueprobe.inc
diff --git a/packages/blueprobe/blueprobe_0.14.bb b/packages/blueprobe/blueprobe_0.14.bb
deleted file mode 100644
index 50ea03e854..0000000000
--- a/packages/blueprobe/blueprobe_0.14.bb
+++ /dev/null
@@ -1 +0,0 @@
-require blueprobe.inc
diff --git a/packages/blueprobe/blueprobe_0.15.bb b/packages/blueprobe/blueprobe_0.15.bb
deleted file mode 100644
index e39407cc16..0000000000
--- a/packages/blueprobe/blueprobe_0.15.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require blueprobe.inc
-
-PR = "r2"
-
-SRC_URI += "file://hx4700.patch;patch=1 \
- file://h6300.patch;patch=1"
diff --git a/packages/blueprobe/blueprobe_0.16.bb b/packages/blueprobe/blueprobe_0.16.bb
deleted file mode 100644
index db190332e7..0000000000
--- a/packages/blueprobe/blueprobe_0.16.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require blueprobe.inc
-
-PR = "r1"
-
-SRC_URI += "file://hx4700.patch;patch=1 \
- file://h6300.patch;patch=1"
diff --git a/packages/blueprobe/blueprobe_0.17.bb b/packages/blueprobe/blueprobe_0.17.bb
deleted file mode 100644
index b82bedf632..0000000000
--- a/packages/blueprobe/blueprobe_0.17.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require blueprobe.inc
-
-PR = "r3"
-
-SRC_URI += "file://hx4700.patch;patch=1 \
- file://h2200-fixup.patch;patch=1 \
- file://htcuniversal.patch;patch=1 \
- file://hwuart.patch;patch=1;pnum=2"
diff --git a/packages/blueprobe/blueprobe_0.18.bb b/packages/blueprobe/blueprobe_0.18.bb
index d0405745ba..7ad62d8db8 100644
--- a/packages/blueprobe/blueprobe_0.18.bb
+++ b/packages/blueprobe/blueprobe_0.18.bb
@@ -1,7 +1,9 @@
require blueprobe.inc
+PR = "r6"
-PR = "r5"
-
-SRC_URI += "file://h4000.patch;patch=1 \
- file://uclibc-fix.patch;patch=1 \
- file://rx3000.patch;patch=1"
+SRC_URI += "\
+ file://fix-makefile.patch;patch=1 \
+ file://h4000.patch;patch=1 \
+ file://uclibc-fix.patch;patch=1 \
+ file://rx3000.patch;patch=1 \
+"
diff --git a/packages/bluez/bluez-utils_3.33.bb b/packages/bluez/bluez-utils_3.33.bb
index 2b7b3a0f9d..dc098e3137 100644
--- a/packages/bluez/bluez-utils_3.33.bb
+++ b/packages/bluez/bluez-utils_3.33.bb
@@ -20,7 +20,14 @@ EXTRA_OECONF = " \
--enable-echo \
--enable-configfile \
--enable-initscripts \
- --enable-test \
+ --enable-test \
+ --enable-hidd \
+ --enable-obex \
+ --enable-pand \
+ --enable-dund \
+ --enable-avctrl \
+ --enable-hid2hci \
+ --enable-dfutool \
"
CONFFILES_${PN} = " \
diff --git a/packages/bluez/bluez-utils_3.36.bb b/packages/bluez/bluez-utils_3.36.bb
index b66e601e92..bd319e85f2 100644
--- a/packages/bluez/bluez-utils_3.36.bb
+++ b/packages/bluez/bluez-utils_3.36.bb
@@ -1,6 +1,6 @@
require bluez-utils3.inc
-PR = "r2"
+PR = "r4"
# removed hciattach-ti-bts.patch (landed upstream)
SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
@@ -25,8 +25,15 @@ EXTRA_OECONF = " \
--enable-echo \
--enable-configfile \
--enable-initscripts \
- --enable-test \
- "
+ --enable-test \
+ --enable-hidd \
+ --enable-obex \
+ --enable-pand \
+ --enable-dund \
+ --enable-avctrl \
+ --enable-hid2hci \
+ --enable-dfutool \
+"
CONFFILES_${PN} = " \
${sysconfdir}/bluetooth/hcid.conf \
diff --git a/packages/bluez/bluez4/fix-dfutool-usb-declaration-mismatch.patch b/packages/bluez/bluez4/fix-dfutool-usb-declaration-mismatch.patch
new file mode 100644
index 0000000000..b1ee510e8b
--- /dev/null
+++ b/packages/bluez/bluez4/fix-dfutool-usb-declaration-mismatch.patch
@@ -0,0 +1,13 @@
+Index: bluez-4.27/tools/dfutool.c
+===================================================================
+--- bluez-4.27.orig/tools/dfutool.c
++++ bluez-4.27/tools/dfutool.c
+@@ -59,7 +59,7 @@
+ #endif
+
+ #ifdef NEED_USB_GET_BUSSES
+-static inline struct usb_bus *usb_get_busses(void)
++inline struct usb_bus *usb_get_busses(void)
+ {
+ return usb_busses;
+ }
diff --git a/packages/bluez/bluez4_4.27.bb b/packages/bluez/bluez4_4.27.bb
deleted file mode 100644
index c0d5c19c2e..0000000000
--- a/packages/bluez/bluez4_4.27.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-DESCRIPTION = "Linux Bluetooth Stack Userland V4"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "gst-plugins-base alsa-lib libusb1 dbus-glib"
-HOMEPAGE = "http://www.bluez.org"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "\
- http://www.kernel.org/pub/linux/bluetooth/bluez-${PV}.tar.gz \
- file://sbc-thumb.patch;patch=1 \
- file://hid2hci_usb_init.patch;patch=1 \
-"
-S = "${WORKDIR}/bluez-${PV}"
-
-inherit autotools pkgconfig
-
-OE_LT_RPATH_ALLOW = "any"
-OE_LT_RPATH_ALLOW[export] = "1"
-
-EXTRA_OECONF = "\
- --enable-gstreamer \
- --enable-alsa \
- --disable-usb \
- --enable-netlink \
- --enable-tools \
- --enable-bccmd \
- --enable-hid2hci \
- --enable-dfutool \
- --enable-hidd \
- --enable-pandd \
- --enable-dund \
- --disable-cups \
- --enable-test \
- --enable-manpages \
- --enable-configfiles \
- --enable-initscripts \
- --disable-pcmciarules \
-"
-
-PACKAGES =+ "gst-plugin-bluez libasound-module-bluez"
-
-FILES_gst-plugin-bluez = "${libdir}/gstreamer-0.10/lib*.so"
-FILES_libasound-module-bluez = "${libdir}/alsa-lib/lib*.so"
-FILES_${PN} += "${libdir}/bluetooth/plugins/*.so"
-FILES_${PN}-dev += "\
- ${libdir}/bluetooth/plugins/*.la \
- ${libdir}/*/*.la \
-"
-FILES_${PN}-dbg += "\
- ${libdir}/bluetooth/plugins/.debug \
- ${libdir}/*/.debug \
-"
diff --git a/packages/bluez/bluez4_4.31.bb b/packages/bluez/bluez4_4.31.bb
new file mode 100644
index 0000000000..5063950c94
--- /dev/null
+++ b/packages/bluez/bluez4_4.31.bb
@@ -0,0 +1,60 @@
+DESCRIPTION = "Linux Bluetooth Stack Userland V4"
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "gst-plugins-base alsa-lib libusb-compat dbus-glib"
+HOMEPAGE = "http://www.bluez.org"
+LICENSE = "GPL"
+PR = "r3"
+
+SRC_URI = "\
+ http://www.kernel.org/pub/linux/bluetooth/bluez-${PV}.tar.gz \
+ file://fix-dfutool-usb-declaration-mismatch.patch;patch=1 \
+ file://sbc-thumb.patch;patch=1 \
+# file://hid2hci_usb_init.patch;patch=1 \
+"
+S = "${WORKDIR}/bluez-${PV}"
+
+inherit autotools pkgconfig
+
+OE_LT_RPATH_ALLOW = "any"
+OE_LT_RPATH_ALLOW[export] = "1"
+
+EXTRA_OECONF = "\
+ --enable-gstreamer \
+ --enable-alsa \
+ --enable-usb \
+ --enable-netlink \
+ --enable-tools \
+ --enable-bccmd \
+ --enable-hid2hci \
+ --enable-dfutool \
+ --enable-hidd \
+ --enable-pandd \
+ --enable-dund \
+ --disable-cups \
+ --enable-test \
+ --enable-manpages \
+ --enable-configfiles \
+ --enable-initscripts \
+ --disable-pcmciarules \
+"
+
+do_install_append() {
+ install -m 0644 ${S}/audio/audio.conf ${D}/${sysconfdir}/bluetooth/
+ install -m 0644 ${S}/network/network.conf ${D}/${sysconfdir}/bluetooth/
+ install -m 0644 ${S}/input/input.conf ${D}/${sysconfdir}/bluetooth/
+}
+
+PACKAGES =+ "gst-plugin-bluez libasound-module-bluez"
+
+FILES_gst-plugin-bluez = "${libdir}/gstreamer-0.10/lib*.so"
+FILES_libasound-module-bluez = "${libdir}/alsa-lib/lib*.so"
+FILES_${PN} += "${libdir}/bluetooth/plugins/*.so"
+FILES_${PN}-dev += "\
+ ${libdir}/bluetooth/plugins/*.la \
+ ${libdir}/*/*.la \
+"
+FILES_${PN}-dbg += "\
+ ${libdir}/bluetooth/plugins/.debug \
+ ${libdir}/*/.debug \
+"
diff --git a/packages/bonjour/bonjour_107.6.bb b/packages/bonjour/bonjour_107.6.bb
new file mode 100644
index 0000000000..3c176c017a
--- /dev/null
+++ b/packages/bonjour/bonjour_107.6.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "Bonjour is a networking technology that lets you create an instant network of computers and devices without any configuration."
+SECTION = "network"
+LICENSE = "Apache-2.0"
+
+RDEPENDS_bonjour = "update-rc.d"
+
+PR = "r3"
+
+SRC_URI = "http://www.opensource.apple.com/darwinsource/tarballs/other/mDNSResponder-${PV}.tar.gz \
+ file://bonjour.conf \
+ file://bonjour.init \
+ "
+
+S = "${WORKDIR}/mDNSResponder-${PV}"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "bonjour"
+INITSCRIPT_PARAMS = "defaults 50"
+
+EXTRA_OEMAKE = 'CC="${CC} ${LDFLAGS}" os=linux -C ${S}/mDNSPosix SAResponder'
+PARALLEL_MAKE = ""
+
+do_install() {
+
+ install -d ${D}${sbindir}
+ install -m 0755 mDNSPosix/build/prod/mDNSResponderPosix ${D}${sbindir}/mdnsd
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/bonjour.init ${D}${sysconfdir}/init.d/bonjour
+ install -m 0640 ${WORKDIR}/bonjour.conf ${D}${sysconfdir}/
+
+}
diff --git a/packages/bonjour/files/bonjour.conf b/packages/bonjour/files/bonjour.conf
new file mode 100644
index 0000000000..3a1eab7eff
--- /dev/null
+++ b/packages/bonjour/files/bonjour.conf
@@ -0,0 +1,14 @@
+Web Server
+_http._tcp.
+80
+path=/
+
+TCP/IP Information
+_http._tcp.
+80
+path=/cgi-bin/ifconfig
+
+SSH
+_ssh._tcp.
+22
+none
diff --git a/packages/bonjour/files/bonjour.init b/packages/bonjour/files/bonjour.init
new file mode 100755
index 0000000000..1413ca6c12
--- /dev/null
+++ b/packages/bonjour/files/bonjour.init
@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# A startup script for the Rendezvous mDNS Responder
+#
+
+set -e
+
+RDV_CONF=/etc/bonjour.conf
+prog=bonjour
+exe=/usr/sbin/mdnsd
+
+start() {
+ echo -n "Starting $prog: "
+ start-stop-daemon --start -x $exe -- -f $RDV_CONF -b
+ echo
+}
+
+stop() {
+ echo -n "Stopping $prog: "
+ start-stop-daemon --stop -x $exe
+ echo
+}
+
+reload()
+{
+ echo -n "Reloading $prog:"
+ killall -HUP `basename $exe`
+ echo
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+reload)
+ reload
+ ;;
+restart)
+ stop
+ start
+ ;;
+*)
+ echo "Usage: bonjour {start|stop|reload|restart}"
+ exit 1
+esac
diff --git a/packages/bonnie/bonnie++.inc b/packages/bonnie/bonnie++.inc
index dabe6dc1f7..7e9d81579c 100644
--- a/packages/bonnie/bonnie++.inc
+++ b/packages/bonnie/bonnie++.inc
@@ -6,7 +6,8 @@ DESCRIPTION="Tests large file IO and creation/deletion of small files."
LICENSE="GPL"
-SRC_URI="http://www.coker.com.au/bonnie++/${PN}-${PV}.tgz"
+SRC_URI="http://www.coker.com.au/bonnie++/${PN}-${PV}.tgz \
+ file://gcc-4.3-fixes.patch;patch=1"
inherit autotools
diff --git a/packages/bonnie/files/gcc-4.3-fixes.patch b/packages/bonnie/files/gcc-4.3-fixes.patch
new file mode 100644
index 0000000000..cecf87e05a
--- /dev/null
+++ b/packages/bonnie/files/gcc-4.3-fixes.patch
@@ -0,0 +1,16 @@
+---
+ zcav.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: bonnie++-1.03a/zcav.cpp
+===================================================================
+--- bonnie++-1.03a.orig/zcav.cpp
++++ bonnie++-1.03a/zcav.cpp
+@@ -15,6 +15,7 @@ using namespace std;
+ #else
+ #include <vector.h>
+ #endif
++#include <string.h>
+
+ // Read the specified number of megabytes of data from the fd and return the
+ // amount of time elapsed in seconds.
diff --git a/packages/boost/boost-36.inc b/packages/boost/boost-36.inc
index 0ad71ca9d6..5a4faaf1d6 100644
--- a/packages/boost/boost-36.inc
+++ b/packages/boost/boost-36.inc
@@ -9,8 +9,9 @@ SECTION = "libs"
DEPENDS = "boost-jam-native zlib"
PRIORITY = "optional"
LICENSE = "Boost Software License"
-PR = "r1"
+PR = "r3"
+ARM_INSTRUCTION_SET = "arm"
BOOST_VER = "${@"_".join(bb.data.getVar("PV",d,1).split("."))}"
BOOST_MAJ = "${@"_".join(bb.data.getVar("PV",d,1).split(".")[0:2])}"
BOOST_P = "boost_${BOOST_VER}"
@@ -70,6 +71,9 @@ FILES_${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/libboost_*.a"
PACKAGES += "${PN}"
RRECOMMENDS_${PN} += "${BOOST_PACKAGES}"
+# to avoid GNU_HASH QA errors added LDFLAGS to ARCH; a little bit dirty but at least it works
+TARGET_CC_ARCH += " ${LDFLAGS}"
+
# Oh yippee, a new build system, it's sooo cooool I could eat my own
# foot. inlining=on lets the compiler choose, I think. At least this
# stuff is documented...
diff --git a/packages/boost/boost_1.36.0.bb b/packages/boost/boost_1.36.0.bb
index 77d99e4fda..140ab290ba 100644
--- a/packages/boost/boost_1.36.0.bb
+++ b/packages/boost/boost_1.36.0.bb
@@ -1,8 +1,6 @@
include boost-36.inc
-DEFAULT_PREFERENCE = "-1"
-
-PR = "r4"
+PR = "r6"
SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2 \
file://arm-intrinsics.patch;patch=1 \
diff --git a/packages/bridge-utils/bridge-utils_1.2.bb b/packages/bridge-utils/bridge-utils_1.2.bb
index 3f1f25dc3f..51414f56a1 100644
--- a/packages/bridge-utils/bridge-utils_1.2.bb
+++ b/packages/bridge-utils/bridge-utils_1.2.bb
@@ -4,10 +4,23 @@ SECTION = "console/network"
LICENSE = "GPL"
DEPENDS = "sysfsutils"
RRECOMMENDS = "kernel-module-bridge"
-PR = "r0"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/bridge/bridge-utils-${PV}.tar.gz"
inherit autotools
EXTRA_OECONF = "--with-linux-headers=${STAGING_INCDIR}"
+
+do_install () {
+ autotools_do_install
+ mv ${D}${sbindir}/brctl ${D}${sbindir}/brctl.${PN}
+}
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${sbindir}/brctl brctl brctl.${PN} 100
+}
+
+pkg_prerm_${PN} () {
+ update-alternatives --remove brctl brctl.${PN}
+}
diff --git a/packages/busybox/busybox-1.11.3/kaeilos/defconfig b/packages/busybox/busybox-1.11.3/kaeilos/defconfig
new file mode 100644
index 0000000000..f3130caca8
--- /dev/null
+++ b/packages/busybox/busybox-1.11.3/kaeilos/defconfig
@@ -0,0 +1,855 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.11.1
+# Thu Oct 9 14:15:08 2008
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_DESKTOP is not set
+CONFIG_FEATURE_ASSUME_UNICODE=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 is not set
+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_PIDFILE=y
+CONFIG_FEATURE_SUID=y
+CONFIG_FEATURE_SUID_CONFIG=y
+CONFIG_FEATURE_SUID_CONFIG_QUIET=y
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_FEATURE_HAVE_RPC=y
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+CONFIG_CROSS_COMPILER_PREFIX=""
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+# CONFIG_INCLUDE_SUSv2 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_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_FEATURE_FAST_TOP=y
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+# CONFIG_FEATURE_EDITING_VI is not set
+CONFIG_FEATURE_EDITING_HISTORY=15
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+CONFIG_FEATURE_TAB_COMPLETION=y
+CONFIG_FEATURE_USERNAME_COMPLETION=y
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_COPYBUF_KB=4
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
+CONFIG_FEATURE_HWIB=y
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+# CONFIG_BZIP2 is not set
+CONFIG_CPIO=y
+# CONFIG_FEATURE_CPIO_O 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_FEATURE_RPM_BZ2 is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_GZIP=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+CONFIG_FEATURE_TAR_UNAME_GNAME=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_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_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 is not set
+CONFIG_DF=y
+# CONFIG_FEATURE_DF_INODE 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_EXPAND is not set
+# CONFIG_FEATURE_EXPAND_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=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_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+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_SPLIT is not set
+# CONFIG_FEATURE_SPLIT_FANCY is not set
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+# CONFIG_TAC is not set
+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_UNEXPAND is not set
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+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=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+# CONFIG_KBD_MODE is not set
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+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_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+CONFIG_FEATURE_RUN_PARTS_FANCY=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_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_FEATURE_DIFF_MINIMAL=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=1024
+CONFIG_FEATURE_VI_8BIT=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 is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+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_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT 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=y
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+CONFIG_INIT=y
+# CONFIG_DEBUG_INIT is not set
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_KILL_REMOVED=y
+CONFIG_FEATURE_KILL_DELAY=0
+# 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=y
+CONFIG_HALT=y
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+CONFIG_USE_BB_CRYPT=y
+CONFIG_ADDGROUP=y
+CONFIG_FEATURE_ADDUSER_TO_GROUP=y
+CONFIG_DELGROUP=y
+CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
+CONFIG_FEATURE_CHECK_NAMES=y
+CONFIG_ADDUSER=y
+CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
+CONFIG_FEATURE_UTMP=y
+CONFIG_FEATURE_WTMP=y
+CONFIG_LOGIN=y
+# CONFIG_PAM is not set
+CONFIG_LOGIN_SCRIPTS=y
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
+CONFIG_CRYPTPW=y
+CONFIG_CHPASSWD=y
+CONFIG_SU=y
+CONFIG_FEATURE_SU_SYSLOG=y
+CONFIG_FEATURE_SU_CHECKS_SHELLS=y
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+
+#
+# Linux Module Utilities
+#
+# CONFIG_DEPMOD is not set
+# CONFIG_FEATURE_DEPMOD_PRUNE_FANCY is not set
+# CONFIG_FEATURE_DEPMOD_ALIAS is not set
+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
+CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=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_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=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
+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=y
+# CONFIG_FINDFS 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=y
+CONFIG_HEXDUMP=y
+# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
+# CONFIG_HD is not set
+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=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_VOLUMEID=y
+# CONFIG_FEATURE_VOLUMEID_EXT is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
+# CONFIG_FEATURE_VOLUMEID_FAT is not set
+# CONFIG_FEATURE_VOLUMEID_HFS is not set
+# CONFIG_FEATURE_VOLUMEID_JFS is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
+# CONFIG_FEATURE_VOLUMEID_NTFS is not set
+# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
+# CONFIG_FEATURE_VOLUMEID_SYSV is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+CONFIG_MOUNT=y
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+CONFIG_FEATURE_MOUNT_HELPERS=y
+CONFIG_FEATURE_MOUNT_LABEL=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+CONFIG_READPROFILE=y
+# CONFIG_RTCWAKE is not set
+# CONFIG_SCRIPT is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_FEATURE_SWAPON_PRI is not set
+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_CHAT is not set
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
+# CONFIG_FEATURE_CHAT_CLR_ABORT 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=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_FEATURE_EJECT_SCSI is not set
+# CONFIG_FBSPLASH is not set
+# CONFIG_INOTIFYD is not set
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY 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=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+# CONFIG_MAN is not set
+# CONFIG_MICROCOM is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RAIDAUTORUN is not set
+CONFIG_READAHEAD=y
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+# CONFIG_SETSID is not set
+CONFIG_STRINGS=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TIME=y
+# CONFIG_TTYSIZE is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+# CONFIG_ARP is not set
+# CONFIG_ARPING is not set
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW 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_RANGES is not set
+# CONFIG_FEATURE_HTTPD_USE_SENDFILE 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_FEATURE_HTTPD_ERROR_PAGES is not set
+# CONFIG_FEATURE_HTTPD_PROXY 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_IFENSLAVE is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+# 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_MAPPING=y
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP 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=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_RULE is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS 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_FEATURE_NAMEIF_EXTENDED is not set
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+CONFIG_NETSTAT=y
+# CONFIG_FEATURE_NETSTAT_WIDE is not set
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
+# CONFIG_PSCAN is not set
+CONFIG_ROUTE=y
+# CONFIG_SENDMAIL is not set
+# CONFIG_FETCHMAIL is not set
+# CONFIG_SLATTACH is not set
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_TELNETD=y
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+CONFIG_TFTP=y
+# CONFIG_TFTPD is not set
+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=y
+# CONFIG_APP_DHCPRELAY is not set
+CONFIG_APP_DUMPLEASES=y
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
+CONFIG_APP_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+# CONFIG_FEATURE_UDHCP_PORT is not set
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_FEATURE_RFC3397 is not set
+CONFIG_DHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+# 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
+# CONFIG_TCPSVD is not set
+# CONFIG_UDPSVD is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+# CONFIG_KILLALL5 is not set
+# CONFIG_NMETER is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PKILL is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+# CONFIG_FEATURE_PS_TIME is not set
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+# CONFIG_FEATURE_TOP_DECIMALS is not set
+# CONFIG_FEATURE_TOPMEM is not set
+CONFIG_UPTIME=y
+CONFIG_WATCH=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH 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_BASH_COMPAT=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_READ_NCHARS=y
+CONFIG_ASH_READ_TIMEOUT=y
+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_PRINTF=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=y
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS 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 is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+# CONFIG_CTTYHACK is not set
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_SYSLOGD_DUP=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_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON 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
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+# CONFIG_LPR is not set
+# CONFIG_LPQ is not set
diff --git a/packages/busybox/busybox-1.13.2/angstrom/defconfig b/packages/busybox/busybox-1.13.2/angstrom/defconfig
index 203acfd20b..0db650fcf1 100644
--- a/packages/busybox/busybox-1.13.2/angstrom/defconfig
+++ b/packages/busybox/busybox-1.13.2/angstrom/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Busybox version: 1.13.2
-# Fri Jan 23 17:02:44 2009
+# Sun Feb 8 17:22:39 2009
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -19,7 +19,7 @@ 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 is not set
+CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_FEATURE_COMPRESS_USAGE=y
# CONFIG_FEATURE_INSTALLER is not set
CONFIG_LOCALE_SUPPORT=y
@@ -82,7 +82,7 @@ CONFIG_FEATURE_FAST_TOP=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
# CONFIG_FEATURE_EDITING_VI is not set
-CONFIG_FEATURE_EDITING_HISTORY=15
+CONFIG_FEATURE_EDITING_HISTORY=64
CONFIG_FEATURE_EDITING_SAVEHISTORY=y
CONFIG_FEATURE_TAB_COMPLETION=y
CONFIG_FEATURE_USERNAME_COMPLETION=y
@@ -124,7 +124,7 @@ CONFIG_FEATURE_TAR_FROM=y
CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
CONFIG_FEATURE_TAR_UNAME_GNAME=y
# CONFIG_UNCOMPRESS is not set
# CONFIG_UNLZMA is not set
@@ -152,7 +152,7 @@ CONFIG_DD=y
CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
# CONFIG_FEATURE_DD_IBS_OBS is not set
CONFIG_DF=y
-# CONFIG_FEATURE_DF_FANCY is not set
+CONFIG_FEATURE_DF_FANCY=y
CONFIG_DIRNAME=y
# CONFIG_DOS2UNIX is not set
# CONFIG_UNIX2DOS is not set
@@ -169,7 +169,7 @@ CONFIG_EXPR=y
CONFIG_FALSE=y
# CONFIG_FOLD is not set
CONFIG_HEAD=y
-# CONFIG_FEATURE_FANCY_HEAD is not set
+CONFIG_FEATURE_FANCY_HEAD=y
# CONFIG_HOSTID is not set
CONFIG_ID=y
# CONFIG_INSTALL is not set
@@ -192,8 +192,8 @@ 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_FEATURE_MV_LONG_OPTIONS=y
+CONFIG_NICE=y
CONFIG_NOHUP=y
CONFIG_OD=y
# CONFIG_PRINTENV is not set
@@ -204,7 +204,7 @@ CONFIG_FEATURE_READLINK_FOLLOW=y
CONFIG_REALPATH=y
CONFIG_RM=y
CONFIG_RMDIR=y
-# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
CONFIG_SEQ=y
# CONFIG_SHA1SUM is not set
CONFIG_SLEEP=y
@@ -223,7 +223,7 @@ CONFIG_SYNC=y
CONFIG_TAIL=y
CONFIG_FEATURE_FANCY_TAIL=y
CONFIG_TEE=y
-# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
@@ -341,7 +341,7 @@ CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_INUM=y
CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_USER=y
CONFIG_FEATURE_FIND_GROUP=y
@@ -350,7 +350,7 @@ CONFIG_FEATURE_FIND_DEPTH=y
CONFIG_FEATURE_FIND_PAREN=y
CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_DELETE=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
@@ -361,8 +361,8 @@ CONFIG_FEATURE_GREP_CONTEXT=y
CONFIG_XARGS=y
# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
-# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
-# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
#
# Init Utilities
@@ -430,7 +430,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
CONFIG_INSMOD=y
CONFIG_RMMOD=y
CONFIG_LSMOD=y
-# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
CONFIG_MODPROBE=y
CONFIG_FEATURE_MODPROBE_BLACKLIST=y
# CONFIG_DEPMOD is not set
@@ -468,7 +468,7 @@ CONFIG_FEATURE_FDISK_WRITABLE=y
CONFIG_FEATURE_OSF_LABEL=y
CONFIG_FEATURE_FDISK_ADVANCED=y
# CONFIG_FINDFS is not set
-# CONFIG_FREERAMDISK is not set
+CONFIG_FREERAMDISK=y
CONFIG_FSCK_MINIX=y
CONFIG_MKFS_MINIX=y
@@ -515,7 +515,7 @@ CONFIG_VOLUMEID=y
# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
CONFIG_MOUNT=y
# CONFIG_FEATURE_MOUNT_FAKE is not set
-# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+CONFIG_FEATURE_MOUNT_VERBOSE=y
CONFIG_FEATURE_MOUNT_HELPERS=y
CONFIG_FEATURE_MOUNT_LABEL=y
CONFIG_FEATURE_MOUNT_NFS=y
@@ -526,7 +526,7 @@ CONFIG_PIVOT_ROOT=y
CONFIG_RDATE=y
CONFIG_RDEV=y
CONFIG_READPROFILE=y
-# CONFIG_RTCWAKE is not set
+CONFIG_RTCWAKE=y
# CONFIG_SCRIPT is not set
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
@@ -569,10 +569,10 @@ CONFIG_FEATURE_DC_LIBM=y
# CONFIG_DEVMEM is not set
# CONFIG_EJECT is not set
# CONFIG_FEATURE_EJECT_SCSI is not set
-# CONFIG_FBSPLASH is not set
+CONFIG_FBSPLASH=y
# CONFIG_INOTIFYD is not set
-# CONFIG_LAST is not set
-# CONFIG_FEATURE_LAST_SMALL is not set
+CONFIG_LAST=y
+CONFIG_FEATURE_LAST_SMALL=y
# CONFIG_FEATURE_LAST_FANCY is not set
CONFIG_LESS=y
CONFIG_FEATURE_LESS_MAXLINES=9999999
@@ -594,7 +594,7 @@ CONFIG_MAKEDEVS=y
# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
CONFIG_FEATURE_MAKEDEVS_TABLE=y
# CONFIG_MAN is not set
-# CONFIG_MICROCOM is not set
+CONFIG_MICROCOM=y
# CONFIG_MOUNTPOINT is not set
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
@@ -627,26 +627,26 @@ CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
# CONFIG_FTPPUT is not set
# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
CONFIG_HOSTNAME=y
-# CONFIG_HTTPD is not set
-# CONFIG_FEATURE_HTTPD_RANGES is not set
-# CONFIG_FEATURE_HTTPD_USE_SENDFILE 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_FEATURE_HTTPD_ERROR_PAGES is not set
-# CONFIG_FEATURE_HTTPD_PROXY is not set
+CONFIG_HTTPD=y
+CONFIG_FEATURE_HTTPD_RANGES=y
+CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
+CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y
+CONFIG_FEATURE_HTTPD_SETUID=y
+CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
+CONFIG_FEATURE_HTTPD_AUTH_MD5=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y
+CONFIG_FEATURE_HTTPD_CGI=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
+CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
+CONFIG_FEATURE_HTTPD_PROXY=y
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_FEATURE_IFCONFIG_BROADCAST_PLUS=y
# CONFIG_IFENSLAVE is not set
CONFIG_IFUPDOWN=y
CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
@@ -686,8 +686,8 @@ CONFIG_NC=y
CONFIG_NC_SERVER=y
CONFIG_NC_EXTRA=y
CONFIG_NETSTAT=y
-# CONFIG_FEATURE_NETSTAT_WIDE is not set
-# CONFIG_FEATURE_NETSTAT_PRG is not set
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
CONFIG_NSLOOKUP=y
CONFIG_PING=y
CONFIG_PING6=y
@@ -708,10 +708,10 @@ CONFIG_FEATURE_TFTP_PUT=y
# CONFIG_TFTP_DEBUG 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_FEATURE_TRACEROUTE_SOURCE_ROUTE=y
+CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
CONFIG_APP_UDHCPD=y
-# CONFIG_APP_DHCPRELAY is not set
+CONFIG_APP_DHCPRELAY=y
CONFIG_APP_DUMPLEASES=y
# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
@@ -831,12 +831,12 @@ 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_ECHO=y
CONFIG_ASH_BUILTIN_PRINTF=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_OPTIMIZE_FOR_SIZE is not set
# CONFIG_ASH_RANDOM_SUPPORT is not set
CONFIG_ASH_EXPAND_PRMT=y
# CONFIG_HUSH is not set
diff --git a/packages/busybox/busybox-1.13.2/defconfig b/packages/busybox/busybox-1.13.2/defconfig
index 33fc2da6f4..0db650fcf1 100644
--- a/packages/busybox/busybox-1.13.2/defconfig
+++ b/packages/busybox/busybox-1.13.2/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Busybox version: 1.13.2
-# Fri Jan 23 16:57:40 2009
+# Sun Feb 8 17:22:39 2009
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -19,7 +19,7 @@ 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 is not set
+CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_FEATURE_COMPRESS_USAGE=y
# CONFIG_FEATURE_INSTALLER is not set
CONFIG_LOCALE_SUPPORT=y
@@ -82,7 +82,7 @@ CONFIG_FEATURE_FAST_TOP=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
# CONFIG_FEATURE_EDITING_VI is not set
-CONFIG_FEATURE_EDITING_HISTORY=15
+CONFIG_FEATURE_EDITING_HISTORY=64
CONFIG_FEATURE_EDITING_SAVEHISTORY=y
CONFIG_FEATURE_TAB_COMPLETION=y
CONFIG_FEATURE_USERNAME_COMPLETION=y
@@ -121,10 +121,10 @@ CONFIG_TAR=y
CONFIG_FEATURE_TAR_CREATE=y
CONFIG_FEATURE_TAR_AUTODETECT=y
CONFIG_FEATURE_TAR_FROM=y
-# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
CONFIG_FEATURE_TAR_UNAME_GNAME=y
# CONFIG_UNCOMPRESS is not set
# CONFIG_UNLZMA is not set
@@ -147,12 +147,12 @@ CONFIG_CHROOT=y
CONFIG_CP=y
CONFIG_CUT=y
CONFIG_DATE=y
-# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_FEATURE_DATE_ISOFMT=y
CONFIG_DD=y
CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
# CONFIG_FEATURE_DD_IBS_OBS is not set
CONFIG_DF=y
-# CONFIG_FEATURE_DF_FANCY is not set
+CONFIG_FEATURE_DF_FANCY=y
CONFIG_DIRNAME=y
# CONFIG_DOS2UNIX is not set
# CONFIG_UNIX2DOS is not set
@@ -169,7 +169,7 @@ CONFIG_EXPR=y
CONFIG_FALSE=y
# CONFIG_FOLD is not set
CONFIG_HEAD=y
-# CONFIG_FEATURE_FANCY_HEAD is not set
+CONFIG_FEATURE_FANCY_HEAD=y
# CONFIG_HOSTID is not set
CONFIG_ID=y
# CONFIG_INSTALL is not set
@@ -192,8 +192,8 @@ 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_FEATURE_MV_LONG_OPTIONS=y
+CONFIG_NICE=y
CONFIG_NOHUP=y
CONFIG_OD=y
# CONFIG_PRINTENV is not set
@@ -204,7 +204,7 @@ CONFIG_FEATURE_READLINK_FOLLOW=y
CONFIG_REALPATH=y
CONFIG_RM=y
CONFIG_RMDIR=y
-# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
CONFIG_SEQ=y
# CONFIG_SHA1SUM is not set
CONFIG_SLEEP=y
@@ -223,7 +223,7 @@ CONFIG_SYNC=y
CONFIG_TAIL=y
CONFIG_FEATURE_FANCY_TAIL=y
CONFIG_TEE=y
-# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
@@ -295,7 +295,7 @@ CONFIG_MKTEMP=y
# CONFIG_PIPE_PROGRESS is not set
CONFIG_RUN_PARTS=y
CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
-# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
+CONFIG_FEATURE_RUN_PARTS_FANCY=y
CONFIG_START_STOP_DAEMON=y
CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
@@ -310,7 +310,7 @@ CONFIG_CMP=y
CONFIG_DIFF=y
CONFIG_FEATURE_DIFF_BINARY=y
CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_FEATURE_DIFF_MINIMAL=y
# CONFIG_ED is not set
CONFIG_PATCH=y
CONFIG_SED=y
@@ -321,10 +321,10 @@ 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_DOT_CMD=y
# CONFIG_FEATURE_VI_READONLY is not set
# CONFIG_FEATURE_VI_SETOPTS is not set
-# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_SET=y
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
CONFIG_FEATURE_ALLOW_EXEC=y
@@ -341,7 +341,7 @@ CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_INUM=y
CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_USER=y
CONFIG_FEATURE_FIND_GROUP=y
@@ -350,7 +350,7 @@ CONFIG_FEATURE_FIND_DEPTH=y
CONFIG_FEATURE_FIND_PAREN=y
CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_DELETE=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
@@ -360,57 +360,57 @@ 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
+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_FEATURE_USE_INITTAB is not set
-# CONFIG_FEATURE_KILL_REMOVED is not set
+CONFIG_INIT=y
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_KILL_REMOVED=y
CONFIG_FEATURE_KILL_DELAY=0
# 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_FEATURE_INITRD=y
+CONFIG_HALT=y
# CONFIG_MESG is not set
#
# Login/Password Management Utilities
#
-# CONFIG_FEATURE_SHADOWPASSWDS is not set
+CONFIG_FEATURE_SHADOWPASSWDS=y
# CONFIG_USE_BB_PWD_GRP is not set
# CONFIG_USE_BB_SHADOW is not set
CONFIG_USE_BB_CRYPT=y
-# CONFIG_ADDGROUP is not set
-# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
-# CONFIG_DELGROUP is not set
-# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
-# CONFIG_FEATURE_CHECK_NAMES is not set
-# CONFIG_ADDUSER is not set
-# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
-# CONFIG_DELUSER is not set
-# CONFIG_GETTY is not set
+CONFIG_ADDGROUP=y
+CONFIG_FEATURE_ADDUSER_TO_GROUP=y
+CONFIG_DELGROUP=y
+CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
+CONFIG_FEATURE_CHECK_NAMES=y
+CONFIG_ADDUSER=y
+CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
CONFIG_FEATURE_UTMP=y
-# CONFIG_FEATURE_WTMP is not set
-# CONFIG_LOGIN is not set
+CONFIG_FEATURE_WTMP=y
+CONFIG_LOGIN=y
# CONFIG_PAM is not set
-# CONFIG_LOGIN_SCRIPTS is not set
-# CONFIG_FEATURE_NOLOGIN is not set
-# CONFIG_FEATURE_SECURETTY is not set
-# CONFIG_PASSWD is not set
-# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
-# CONFIG_CRYPTPW is not set
-# CONFIG_CHPASSWD 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
+CONFIG_LOGIN_SCRIPTS=y
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
+CONFIG_CRYPTPW=y
+CONFIG_CHPASSWD=y
+CONFIG_SU=y
+CONFIG_FEATURE_SU_SYSLOG=y
+CONFIG_FEATURE_SU_CHECKS_SHELLS=y
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
#
# Linux Ext2 FS Progs
@@ -430,7 +430,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
CONFIG_INSMOD=y
CONFIG_RMMOD=y
CONFIG_LSMOD=y
-# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
CONFIG_MODPROBE=y
CONFIG_FEATURE_MODPROBE_BLACKLIST=y
# CONFIG_DEPMOD is not set
@@ -465,10 +465,10 @@ 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_FEATURE_OSF_LABEL=y
+CONFIG_FEATURE_FDISK_ADVANCED=y
# CONFIG_FINDFS is not set
-# CONFIG_FREERAMDISK is not set
+CONFIG_FREERAMDISK=y
CONFIG_FSCK_MINIX=y
CONFIG_MKFS_MINIX=y
@@ -476,7 +476,7 @@ CONFIG_MKFS_MINIX=y
# Minix filesystem support
#
CONFIG_FEATURE_MINIX2=y
-# CONFIG_GETOPT is not set
+CONFIG_GETOPT=y
CONFIG_HEXDUMP=y
# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
# CONFIG_HD is not set
@@ -486,12 +486,12 @@ 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_RENAME is not set
-# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
-# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
CONFIG_MKSWAP=y
# CONFIG_FEATURE_MKSWAP_V0 is not set
CONFIG_MORE=y
@@ -515,7 +515,7 @@ CONFIG_VOLUMEID=y
# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
CONFIG_MOUNT=y
# CONFIG_FEATURE_MOUNT_FAKE is not set
-# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+CONFIG_FEATURE_MOUNT_VERBOSE=y
CONFIG_FEATURE_MOUNT_HELPERS=y
CONFIG_FEATURE_MOUNT_LABEL=y
CONFIG_FEATURE_MOUNT_NFS=y
@@ -525,15 +525,15 @@ CONFIG_FEATURE_MOUNT_FSTAB=y
CONFIG_PIVOT_ROOT=y
CONFIG_RDATE=y
CONFIG_RDEV=y
-# CONFIG_READPROFILE is not set
-# CONFIG_RTCWAKE is not set
+CONFIG_READPROFILE=y
+CONFIG_RTCWAKE=y
# CONFIG_SCRIPT is not set
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
# CONFIG_FEATURE_SWAPON_PRI is not set
CONFIG_SWITCH_ROOT=y
CONFIG_UMOUNT=y
-# CONFIG_FEATURE_UMOUNT_ALL is not set
+CONFIG_FEATURE_UMOUNT_ALL=y
#
# Common options for mount/umount
@@ -569,10 +569,10 @@ CONFIG_FEATURE_DC_LIBM=y
# CONFIG_DEVMEM is not set
# CONFIG_EJECT is not set
# CONFIG_FEATURE_EJECT_SCSI is not set
-# CONFIG_FBSPLASH is not set
+CONFIG_FBSPLASH=y
# CONFIG_INOTIFYD is not set
-# CONFIG_LAST is not set
-# CONFIG_FEATURE_LAST_SMALL is not set
+CONFIG_LAST=y
+CONFIG_FEATURE_LAST_SMALL=y
# CONFIG_FEATURE_LAST_FANCY is not set
CONFIG_LESS=y
CONFIG_FEATURE_LESS_MAXLINES=9999999
@@ -590,15 +590,15 @@ CONFIG_FEATURE_LESS_FLAGS=y
# 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_MAKEDEVS=y
# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
-# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
# CONFIG_MAN is not set
-# CONFIG_MICROCOM is not set
+CONFIG_MICROCOM=y
# CONFIG_MOUNTPOINT is not set
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
-# CONFIG_READAHEAD is not set
+CONFIG_READAHEAD=y
# CONFIG_RUNLEVEL is not set
# CONFIG_RX is not set
# CONFIG_SETSID is not set
@@ -627,26 +627,26 @@ CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
# CONFIG_FTPPUT is not set
# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
CONFIG_HOSTNAME=y
-# CONFIG_HTTPD is not set
-# CONFIG_FEATURE_HTTPD_RANGES is not set
-# CONFIG_FEATURE_HTTPD_USE_SENDFILE 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_FEATURE_HTTPD_ERROR_PAGES is not set
-# CONFIG_FEATURE_HTTPD_PROXY is not set
+CONFIG_HTTPD=y
+CONFIG_FEATURE_HTTPD_RANGES=y
+CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
+CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y
+CONFIG_FEATURE_HTTPD_SETUID=y
+CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
+CONFIG_FEATURE_HTTPD_AUTH_MD5=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y
+CONFIG_FEATURE_HTTPD_CGI=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
+CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
+CONFIG_FEATURE_HTTPD_PROXY=y
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_FEATURE_IFCONFIG_BROADCAST_PLUS=y
# CONFIG_IFENSLAVE is not set
CONFIG_IFUPDOWN=y
CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
@@ -686,8 +686,8 @@ CONFIG_NC=y
CONFIG_NC_SERVER=y
CONFIG_NC_EXTRA=y
CONFIG_NETSTAT=y
-# CONFIG_FEATURE_NETSTAT_WIDE is not set
-# CONFIG_FEATURE_NETSTAT_PRG is not set
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
CONFIG_NSLOOKUP=y
CONFIG_PING=y
CONFIG_PING6=y
@@ -707,11 +707,11 @@ CONFIG_FEATURE_TFTP_PUT=y
# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
# CONFIG_TFTP_DEBUG 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
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y
+CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
CONFIG_APP_UDHCPD=y
-# CONFIG_APP_DHCPRELAY is not set
+CONFIG_APP_DHCPRELAY=y
CONFIG_APP_DUMPLEASES=y
# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
@@ -762,8 +762,8 @@ CONFIG_KILLALL=y
# CONFIG_NMETER is not set
# CONFIG_PGREP is not set
CONFIG_PIDOF=y
-# CONFIG_FEATURE_PIDOF_SINGLE is not set
-# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
# CONFIG_PKILL is not set
CONFIG_PS=y
CONFIG_FEATURE_PS_WIDE=y
@@ -831,12 +831,12 @@ 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_ECHO=y
CONFIG_ASH_BUILTIN_PRINTF=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_OPTIMIZE_FOR_SIZE is not set
# CONFIG_ASH_RANDOM_SUPPORT is not set
CONFIG_ASH_EXPAND_PRMT=y
# CONFIG_HUSH is not set
diff --git a/packages/busybox/busybox-1.13.2/get_header_tar.patch b/packages/busybox/busybox-1.13.2/get_header_tar.patch
new file mode 100644
index 0000000000..0121cd1b61
--- /dev/null
+++ b/packages/busybox/busybox-1.13.2/get_header_tar.patch
@@ -0,0 +1,11 @@
+--- busybox-1.13.2/archival/libunarchive/get_header_tar.c.orig 2008-11-09 18:28:02.000000000 +0100
++++ busybox-1.13.2/archival/libunarchive/get_header_tar.c 2009-02-11 22:34:52.000000000 +0100
+@@ -252,6 +252,8 @@
+ file_header->name = concat_path_file(tar.prefix, tar.name);
+ } else
+ file_header->name = xstrdup(tar.name);
++ if (strlen(file_header->name) > 100)
++ file_header->name[100] = 0;
+ }
+
+ /* Set bits 12-15 of the files mode */
diff --git a/packages/busybox/busybox-1.13.2/kaeilos/defconfig b/packages/busybox/busybox-1.13.2/kaeilos/defconfig
new file mode 100644
index 0000000000..f3130caca8
--- /dev/null
+++ b/packages/busybox/busybox-1.13.2/kaeilos/defconfig
@@ -0,0 +1,855 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.11.1
+# Thu Oct 9 14:15:08 2008
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_DESKTOP is not set
+CONFIG_FEATURE_ASSUME_UNICODE=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 is not set
+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_PIDFILE=y
+CONFIG_FEATURE_SUID=y
+CONFIG_FEATURE_SUID_CONFIG=y
+CONFIG_FEATURE_SUID_CONFIG_QUIET=y
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_FEATURE_HAVE_RPC=y
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+CONFIG_CROSS_COMPILER_PREFIX=""
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+# CONFIG_INCLUDE_SUSv2 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_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_FEATURE_FAST_TOP=y
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+# CONFIG_FEATURE_EDITING_VI is not set
+CONFIG_FEATURE_EDITING_HISTORY=15
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+CONFIG_FEATURE_TAB_COMPLETION=y
+CONFIG_FEATURE_USERNAME_COMPLETION=y
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_COPYBUF_KB=4
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
+CONFIG_FEATURE_HWIB=y
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+# CONFIG_BZIP2 is not set
+CONFIG_CPIO=y
+# CONFIG_FEATURE_CPIO_O 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_FEATURE_RPM_BZ2 is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_GZIP=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+CONFIG_FEATURE_TAR_UNAME_GNAME=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_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_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 is not set
+CONFIG_DF=y
+# CONFIG_FEATURE_DF_INODE 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_EXPAND is not set
+# CONFIG_FEATURE_EXPAND_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=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_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+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_SPLIT is not set
+# CONFIG_FEATURE_SPLIT_FANCY is not set
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+# CONFIG_TAC is not set
+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_UNEXPAND is not set
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+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=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+# CONFIG_KBD_MODE is not set
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+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_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+CONFIG_FEATURE_RUN_PARTS_FANCY=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_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_FEATURE_DIFF_MINIMAL=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=1024
+CONFIG_FEATURE_VI_8BIT=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 is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+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_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT 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=y
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+CONFIG_INIT=y
+# CONFIG_DEBUG_INIT is not set
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_KILL_REMOVED=y
+CONFIG_FEATURE_KILL_DELAY=0
+# 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=y
+CONFIG_HALT=y
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+CONFIG_USE_BB_CRYPT=y
+CONFIG_ADDGROUP=y
+CONFIG_FEATURE_ADDUSER_TO_GROUP=y
+CONFIG_DELGROUP=y
+CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
+CONFIG_FEATURE_CHECK_NAMES=y
+CONFIG_ADDUSER=y
+CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
+CONFIG_FEATURE_UTMP=y
+CONFIG_FEATURE_WTMP=y
+CONFIG_LOGIN=y
+# CONFIG_PAM is not set
+CONFIG_LOGIN_SCRIPTS=y
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
+CONFIG_CRYPTPW=y
+CONFIG_CHPASSWD=y
+CONFIG_SU=y
+CONFIG_FEATURE_SU_SYSLOG=y
+CONFIG_FEATURE_SU_CHECKS_SHELLS=y
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+
+#
+# Linux Module Utilities
+#
+# CONFIG_DEPMOD is not set
+# CONFIG_FEATURE_DEPMOD_PRUNE_FANCY is not set
+# CONFIG_FEATURE_DEPMOD_ALIAS is not set
+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
+CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=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_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=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
+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=y
+# CONFIG_FINDFS 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=y
+CONFIG_HEXDUMP=y
+# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
+# CONFIG_HD is not set
+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=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_VOLUMEID=y
+# CONFIG_FEATURE_VOLUMEID_EXT is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
+# CONFIG_FEATURE_VOLUMEID_FAT is not set
+# CONFIG_FEATURE_VOLUMEID_HFS is not set
+# CONFIG_FEATURE_VOLUMEID_JFS is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
+# CONFIG_FEATURE_VOLUMEID_NTFS is not set
+# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
+# CONFIG_FEATURE_VOLUMEID_SYSV is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+CONFIG_MOUNT=y
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+CONFIG_FEATURE_MOUNT_HELPERS=y
+CONFIG_FEATURE_MOUNT_LABEL=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+CONFIG_READPROFILE=y
+# CONFIG_RTCWAKE is not set
+# CONFIG_SCRIPT is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_FEATURE_SWAPON_PRI is not set
+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_CHAT is not set
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
+# CONFIG_FEATURE_CHAT_CLR_ABORT 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=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_FEATURE_EJECT_SCSI is not set
+# CONFIG_FBSPLASH is not set
+# CONFIG_INOTIFYD is not set
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY 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=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+# CONFIG_MAN is not set
+# CONFIG_MICROCOM is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RAIDAUTORUN is not set
+CONFIG_READAHEAD=y
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+# CONFIG_SETSID is not set
+CONFIG_STRINGS=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TIME=y
+# CONFIG_TTYSIZE is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+# CONFIG_ARP is not set
+# CONFIG_ARPING is not set
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW 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_RANGES is not set
+# CONFIG_FEATURE_HTTPD_USE_SENDFILE 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_FEATURE_HTTPD_ERROR_PAGES is not set
+# CONFIG_FEATURE_HTTPD_PROXY 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_IFENSLAVE is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+# 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_MAPPING=y
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP 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=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_RULE is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS 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_FEATURE_NAMEIF_EXTENDED is not set
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+CONFIG_NETSTAT=y
+# CONFIG_FEATURE_NETSTAT_WIDE is not set
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
+# CONFIG_PSCAN is not set
+CONFIG_ROUTE=y
+# CONFIG_SENDMAIL is not set
+# CONFIG_FETCHMAIL is not set
+# CONFIG_SLATTACH is not set
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_TELNETD=y
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+CONFIG_TFTP=y
+# CONFIG_TFTPD is not set
+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=y
+# CONFIG_APP_DHCPRELAY is not set
+CONFIG_APP_DUMPLEASES=y
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
+CONFIG_APP_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+# CONFIG_FEATURE_UDHCP_PORT is not set
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_FEATURE_RFC3397 is not set
+CONFIG_DHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+# 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
+# CONFIG_TCPSVD is not set
+# CONFIG_UDPSVD is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+# CONFIG_KILLALL5 is not set
+# CONFIG_NMETER is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PKILL is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+# CONFIG_FEATURE_PS_TIME is not set
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+# CONFIG_FEATURE_TOP_DECIMALS is not set
+# CONFIG_FEATURE_TOPMEM is not set
+CONFIG_UPTIME=y
+CONFIG_WATCH=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH 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_BASH_COMPAT=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_READ_NCHARS=y
+CONFIG_ASH_READ_TIMEOUT=y
+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_PRINTF=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=y
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS 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 is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+# CONFIG_CTTYHACK is not set
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_SYSLOGD_DUP=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_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON 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
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+# CONFIG_LPR is not set
+# CONFIG_LPQ is not set
diff --git a/packages/busybox/busybox-1.13.2/slugos/defconfig b/packages/busybox/busybox-1.13.2/slugos/defconfig
index 67c7a98aae..8926d1126a 100644
--- a/packages/busybox/busybox-1.13.2/slugos/defconfig
+++ b/packages/busybox/busybox-1.13.2/slugos/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Busybox version: 1.13.2
-# Sun Jan 18 16:45:58 2009
+# Fri Feb 13 21:35:37 2009
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -101,9 +101,9 @@ CONFIG_IOCTL_HEX2STR_ERROR=y
# Archival Utilities
#
# CONFIG_FEATURE_SEAMLESS_LZMA is not set
-# CONFIG_FEATURE_SEAMLESS_BZ2 is not set
-# CONFIG_FEATURE_SEAMLESS_GZ is not set
-# CONFIG_FEATURE_SEAMLESS_Z is not set
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
CONFIG_BUNZIP2=y
@@ -119,7 +119,7 @@ CONFIG_GZIP=y
# CONFIG_RPM is not set
CONFIG_TAR=y
CONFIG_FEATURE_TAR_CREATE=y
-# CONFIG_FEATURE_TAR_AUTODETECT is not set
+CONFIG_FEATURE_TAR_AUTODETECT=y
CONFIG_FEATURE_TAR_FROM=y
CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
@@ -196,7 +196,7 @@ CONFIG_FEATURE_MV_LONG_OPTIONS=y
CONFIG_NICE=y
CONFIG_NOHUP=y
CONFIG_OD=y
-CONFIG_PRINTENV=y
+# CONFIG_PRINTENV is not set
CONFIG_PRINTF=y
CONFIG_PWD=y
CONFIG_READLINK=y
diff --git a/packages/busybox/busybox-1.13.2/udhcpc-fix-nfsroot.patch b/packages/busybox/busybox-1.13.2/udhcpc-fix-nfsroot.patch
new file mode 100644
index 0000000000..39716ec14b
--- /dev/null
+++ b/packages/busybox/busybox-1.13.2/udhcpc-fix-nfsroot.patch
@@ -0,0 +1,40 @@
+diff -uNr busybox-1.13.2-orig/examples/udhcp/simple.script busybox-1.13.2/examples/udhcp/simple.script
+--- busybox-1.13.2-orig/examples/udhcp/simple.script 2009-02-04 11:08:13.000000000 -0500
++++ busybox-1.13.2/examples/udhcp/simple.script 2009-02-04 11:24:51.000000000 -0500
+@@ -8,22 +8,31 @@
+ [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
+ [ -n "$subnet" ] && NETMASK="netmask $subnet"
+
++# return 0 if root is mounted on a network filesystem
++root_is_nfs() {
++ grep -qe '^/dev/root.*\(nfs\|smbfs\|ncp\|coda\) .*' /proc/mounts
++}
++
+ case "$1" in
+ deconfig)
+- /sbin/ifconfig $interface 0.0.0.0
++ if ! root_is_nfs ; then
++ /sbin/ifconfig $interface 0.0.0.0
++ fi
+ ;;
+
+ renew|bound)
+ /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+
+ if [ -n "$router" ] ; then
+- while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
+- :
+- done
++ if ! root_is_nfs ; then
++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
++ :
++ done
++ fi
+
+ metric=0
+ for i in $router ; do
+- route add default gw $i dev $interface metric $((metric++))
++ route add default gw $i dev $interface metric $((metric++)) 2>/dev/null
+ done
+ fi
+
diff --git a/packages/busybox/busybox-static-1.11.3/angstrom/defconfig b/packages/busybox/busybox-static-1.11.3/angstrom/defconfig
deleted file mode 100644
index 18324092f0..0000000000
--- a/packages/busybox/busybox-static-1.11.3/angstrom/defconfig
+++ /dev/null
@@ -1,855 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Busybox version: 1.11.1
-# Thu Oct 9 14:15:08 2008
-#
-CONFIG_HAVE_DOT_CONFIG=y
-
-#
-# Busybox Settings
-#
-
-#
-# General Configuration
-#
-# CONFIG_DESKTOP is not set
-CONFIG_FEATURE_ASSUME_UNICODE=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 is not set
-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_PIDFILE=y
-CONFIG_FEATURE_SUID=y
-CONFIG_FEATURE_SUID_CONFIG=y
-CONFIG_FEATURE_SUID_CONFIG_QUIET=y
-# CONFIG_SELINUX is not set
-# CONFIG_FEATURE_PREFER_APPLETS is not set
-CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
-CONFIG_FEATURE_SYSLOG=y
-CONFIG_FEATURE_HAVE_RPC=y
-
-#
-# Build Options
-#
-CONFIG_STATIC=y
-# CONFIG_PIE is not set
-# CONFIG_NOMMU is not set
-# CONFIG_BUILD_LIBBUSYBOX is not set
-# CONFIG_FEATURE_INDIVIDUAL is not set
-# CONFIG_FEATURE_SHARED_BUSYBOX is not set
-CONFIG_LFS=y
-CONFIG_CROSS_COMPILER_PREFIX=""
-
-#
-# Debugging Options
-#
-# CONFIG_DEBUG is not set
-# CONFIG_DEBUG_PESSIMIZE is not set
-# CONFIG_WERROR is not set
-CONFIG_NO_DEBUG_LIB=y
-# CONFIG_DMALLOC is not set
-# CONFIG_EFENCE is not set
-# CONFIG_INCLUDE_SUSv2 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_SCRIPT_WRAPPERS is not set
-# CONFIG_INSTALL_APPLET_DONT is not set
-# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
-# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
-# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
-CONFIG_PREFIX="./_install"
-
-#
-# Busybox Library Tuning
-#
-CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
-CONFIG_FEATURE_FAST_TOP=y
-# CONFIG_FEATURE_ETC_NETWORKS is not set
-CONFIG_FEATURE_EDITING=y
-CONFIG_FEATURE_EDITING_MAX_LEN=1024
-# CONFIG_FEATURE_EDITING_VI is not set
-CONFIG_FEATURE_EDITING_HISTORY=15
-CONFIG_FEATURE_EDITING_SAVEHISTORY=y
-CONFIG_FEATURE_TAB_COMPLETION=y
-CONFIG_FEATURE_USERNAME_COMPLETION=y
-CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
-CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
-CONFIG_FEATURE_COPYBUF_KB=4
-CONFIG_MONOTONIC_SYSCALL=y
-CONFIG_IOCTL_HEX2STR_ERROR=y
-CONFIG_FEATURE_HWIB=y
-
-#
-# Applets
-#
-
-#
-# Archival Utilities
-#
-CONFIG_AR=y
-# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
-CONFIG_BUNZIP2=y
-# CONFIG_BZIP2 is not set
-CONFIG_CPIO=y
-# CONFIG_FEATURE_CPIO_O 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_FEATURE_RPM_BZ2 is not set
-CONFIG_TAR=y
-CONFIG_FEATURE_TAR_CREATE=y
-CONFIG_FEATURE_TAR_GZIP=y
-CONFIG_FEATURE_TAR_BZIP2=y
-# CONFIG_FEATURE_TAR_LZMA is not set
-# CONFIG_FEATURE_TAR_COMPRESS is not set
-CONFIG_FEATURE_TAR_AUTODETECT=y
-CONFIG_FEATURE_TAR_FROM=y
-CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
-# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
-CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
-CONFIG_FEATURE_TAR_UNAME_GNAME=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_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_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 is not set
-CONFIG_DF=y
-# CONFIG_FEATURE_DF_INODE 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_EXPAND is not set
-# CONFIG_FEATURE_EXPAND_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=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_READLINK=y
-CONFIG_FEATURE_READLINK_FOLLOW=y
-CONFIG_REALPATH=y
-CONFIG_RM=y
-CONFIG_RMDIR=y
-# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
-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_SPLIT is not set
-# CONFIG_FEATURE_SPLIT_FANCY is not set
-# CONFIG_STAT is not set
-# CONFIG_FEATURE_STAT_FORMAT is not set
-CONFIG_STTY=y
-# CONFIG_SUM is not set
-CONFIG_SYNC=y
-# CONFIG_TAC is not set
-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_UNEXPAND is not set
-# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
-CONFIG_UNIQ=y
-CONFIG_USLEEP=y
-# CONFIG_UUDECODE is not set
-# CONFIG_UUENCODE is not set
-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=y
-CONFIG_CLEAR=y
-CONFIG_DEALLOCVT=y
-CONFIG_DUMPKMAP=y
-# CONFIG_KBD_MODE is not set
-CONFIG_LOADFONT=y
-CONFIG_LOADKMAP=y
-CONFIG_OPENVT=y
-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_RUN_PARTS=y
-CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
-CONFIG_FEATURE_RUN_PARTS_FANCY=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_CMP=y
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_BINARY=y
-CONFIG_FEATURE_DIFF_DIR=y
-CONFIG_FEATURE_DIFF_MINIMAL=y
-# CONFIG_ED is not set
-CONFIG_PATCH=y
-CONFIG_SED=y
-CONFIG_VI=y
-CONFIG_FEATURE_VI_MAX_LEN=1024
-CONFIG_FEATURE_VI_8BIT=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 is not set
-# CONFIG_FEATURE_VI_SETOPTS is not set
-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_MAXDEPTH=y
-CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_FEATURE_FIND_INUM is not set
-CONFIG_FEATURE_FIND_EXEC=y
-CONFIG_FEATURE_FIND_USER=y
-CONFIG_FEATURE_FIND_GROUP=y
-CONFIG_FEATURE_FIND_NOT=y
-CONFIG_FEATURE_FIND_DEPTH=y
-CONFIG_FEATURE_FIND_PAREN=y
-CONFIG_FEATURE_FIND_SIZE=y
-CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_FEATURE_FIND_DELETE is not set
-CONFIG_FEATURE_FIND_PATH=y
-CONFIG_FEATURE_FIND_REGEX=y
-# CONFIG_FEATURE_FIND_CONTEXT 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=y
-# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
-# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
-
-#
-# Init Utilities
-#
-CONFIG_INIT=y
-# CONFIG_DEBUG_INIT is not set
-CONFIG_FEATURE_USE_INITTAB=y
-CONFIG_FEATURE_KILL_REMOVED=y
-CONFIG_FEATURE_KILL_DELAY=0
-# 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=y
-CONFIG_HALT=y
-# CONFIG_MESG is not set
-
-#
-# Login/Password Management Utilities
-#
-CONFIG_FEATURE_SHADOWPASSWDS=y
-# CONFIG_USE_BB_PWD_GRP is not set
-# CONFIG_USE_BB_SHADOW is not set
-CONFIG_USE_BB_CRYPT=y
-CONFIG_ADDGROUP=y
-CONFIG_FEATURE_ADDUSER_TO_GROUP=y
-CONFIG_DELGROUP=y
-CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
-CONFIG_FEATURE_CHECK_NAMES=y
-CONFIG_ADDUSER=y
-CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
-CONFIG_DELUSER=y
-CONFIG_GETTY=y
-CONFIG_FEATURE_UTMP=y
-CONFIG_FEATURE_WTMP=y
-CONFIG_LOGIN=y
-# CONFIG_PAM is not set
-CONFIG_LOGIN_SCRIPTS=y
-CONFIG_FEATURE_NOLOGIN=y
-CONFIG_FEATURE_SECURETTY=y
-CONFIG_PASSWD=y
-CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
-CONFIG_CRYPTPW=y
-CONFIG_CHPASSWD=y
-CONFIG_SU=y
-CONFIG_FEATURE_SU_SYSLOG=y
-CONFIG_FEATURE_SU_CHECKS_SHELLS=y
-CONFIG_SULOGIN=y
-CONFIG_VLOCK=y
-
-#
-# Linux Ext2 FS Progs
-#
-CONFIG_CHATTR=y
-CONFIG_FSCK=y
-# CONFIG_LSATTR is not set
-
-#
-# Linux Module Utilities
-#
-# CONFIG_DEPMOD is not set
-# CONFIG_FEATURE_DEPMOD_PRUNE_FANCY is not set
-# CONFIG_FEATURE_DEPMOD_ALIAS is not set
-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
-CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y
-CONFIG_FEATURE_MODPROBE_BLACKLIST=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_DEFAULT_MODULES_DIR="/lib/modules"
-CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
-# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
-
-#
-# Linux System Utilities
-#
-CONFIG_DMESG=y
-CONFIG_FEATURE_DMESG_PRETTY=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
-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=y
-# CONFIG_FINDFS 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=y
-CONFIG_HEXDUMP=y
-# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
-# CONFIG_HD is not set
-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=y
-CONFIG_FEATURE_MDEV_CONF=y
-CONFIG_FEATURE_MDEV_RENAME=y
-CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
-CONFIG_FEATURE_MDEV_EXEC=y
-CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
-CONFIG_MKSWAP=y
-# CONFIG_FEATURE_MKSWAP_V0 is not set
-CONFIG_MORE=y
-CONFIG_FEATURE_USE_TERMIOS=y
-CONFIG_VOLUMEID=y
-# CONFIG_FEATURE_VOLUMEID_EXT is not set
-# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
-# CONFIG_FEATURE_VOLUMEID_FAT is not set
-# CONFIG_FEATURE_VOLUMEID_HFS is not set
-# CONFIG_FEATURE_VOLUMEID_JFS is not set
-# CONFIG_FEATURE_VOLUMEID_XFS is not set
-# CONFIG_FEATURE_VOLUMEID_NTFS is not set
-# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
-# CONFIG_FEATURE_VOLUMEID_UDF is not set
-# CONFIG_FEATURE_VOLUMEID_LUKS is not set
-# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
-# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
-# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
-# CONFIG_FEATURE_VOLUMEID_SYSV is not set
-# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
-# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
-CONFIG_MOUNT=y
-# CONFIG_FEATURE_MOUNT_FAKE is not set
-# CONFIG_FEATURE_MOUNT_VERBOSE is not set
-CONFIG_FEATURE_MOUNT_HELPERS=y
-CONFIG_FEATURE_MOUNT_LABEL=y
-CONFIG_FEATURE_MOUNT_NFS=y
-CONFIG_FEATURE_MOUNT_CIFS=y
-CONFIG_FEATURE_MOUNT_FLAGS=y
-CONFIG_FEATURE_MOUNT_FSTAB=y
-CONFIG_PIVOT_ROOT=y
-CONFIG_RDATE=y
-CONFIG_READPROFILE=y
-# CONFIG_RTCWAKE is not set
-# CONFIG_SCRIPT is not set
-# CONFIG_SETARCH is not set
-CONFIG_SWAPONOFF=y
-# CONFIG_FEATURE_SWAPON_PRI is not set
-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_CHAT is not set
-# CONFIG_FEATURE_CHAT_NOFAIL is not set
-# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
-# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
-# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
-# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
-# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
-# CONFIG_FEATURE_CHAT_CLR_ABORT 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=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_FEATURE_EJECT_SCSI is not set
-# CONFIG_FBSPLASH is not set
-# CONFIG_INOTIFYD is not set
-# CONFIG_LAST is not set
-# CONFIG_FEATURE_LAST_SMALL is not set
-# CONFIG_FEATURE_LAST_FANCY 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=y
-# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
-CONFIG_FEATURE_MAKEDEVS_TABLE=y
-# CONFIG_MAN is not set
-# CONFIG_MICROCOM is not set
-# CONFIG_MOUNTPOINT is not set
-# CONFIG_MT is not set
-# CONFIG_RAIDAUTORUN is not set
-CONFIG_READAHEAD=y
-# CONFIG_RUNLEVEL is not set
-# CONFIG_RX is not set
-# CONFIG_SETSID is not set
-CONFIG_STRINGS=y
-# CONFIG_TASKSET is not set
-# CONFIG_FEATURE_TASKSET_FANCY is not set
-CONFIG_TIME=y
-# CONFIG_TTYSIZE is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Networking Utilities
-#
-CONFIG_FEATURE_IPV6=y
-CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
-# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
-# CONFIG_ARP is not set
-# CONFIG_ARPING is not set
-# CONFIG_BRCTL is not set
-# CONFIG_FEATURE_BRCTL_FANCY is not set
-# CONFIG_FEATURE_BRCTL_SHOW 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_RANGES is not set
-# CONFIG_FEATURE_HTTPD_USE_SENDFILE 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_FEATURE_HTTPD_ERROR_PAGES is not set
-# CONFIG_FEATURE_HTTPD_PROXY 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_IFENSLAVE is not set
-CONFIG_IFUPDOWN=y
-CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
-# 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_MAPPING=y
-# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP 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=y
-CONFIG_FEATURE_IP_ADDRESS=y
-CONFIG_FEATURE_IP_LINK=y
-CONFIG_FEATURE_IP_ROUTE=y
-CONFIG_FEATURE_IP_TUNNEL=y
-# CONFIG_FEATURE_IP_RULE is not set
-# CONFIG_FEATURE_IP_SHORT_FORMS is not set
-# CONFIG_FEATURE_IP_RARE_PROTOCOLS 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_FEATURE_NAMEIF_EXTENDED is not set
-CONFIG_NC=y
-CONFIG_NC_SERVER=y
-CONFIG_NC_EXTRA=y
-CONFIG_NETSTAT=y
-# CONFIG_FEATURE_NETSTAT_WIDE is not set
-CONFIG_NSLOOKUP=y
-CONFIG_PING=y
-CONFIG_PING6=y
-CONFIG_FEATURE_FANCY_PING=y
-# CONFIG_PSCAN is not set
-CONFIG_ROUTE=y
-# CONFIG_SENDMAIL is not set
-# CONFIG_FETCHMAIL is not set
-# CONFIG_SLATTACH is not set
-CONFIG_TELNET=y
-# CONFIG_FEATURE_TELNET_TTYPE is not set
-CONFIG_FEATURE_TELNET_AUTOLOGIN=y
-CONFIG_TELNETD=y
-# CONFIG_FEATURE_TELNETD_STANDALONE is not set
-CONFIG_TFTP=y
-# CONFIG_TFTPD is not set
-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=y
-# CONFIG_APP_DHCPRELAY is not set
-CONFIG_APP_DUMPLEASES=y
-# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
-CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
-CONFIG_APP_UDHCPC=y
-CONFIG_FEATURE_UDHCPC_ARPING=y
-# CONFIG_FEATURE_UDHCP_PORT is not set
-# CONFIG_FEATURE_UDHCP_DEBUG is not set
-# CONFIG_FEATURE_RFC3397 is not set
-CONFIG_DHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
-CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
-# 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
-# CONFIG_TCPSVD is not set
-# CONFIG_UDPSVD is not set
-
-#
-# Process Utilities
-#
-CONFIG_FREE=y
-CONFIG_FUSER=y
-CONFIG_KILL=y
-CONFIG_KILLALL=y
-# CONFIG_KILLALL5 is not set
-# CONFIG_NMETER is not set
-# CONFIG_PGREP is not set
-CONFIG_PIDOF=y
-CONFIG_FEATURE_PIDOF_SINGLE=y
-CONFIG_FEATURE_PIDOF_OMIT=y
-# CONFIG_PKILL is not set
-CONFIG_PS=y
-CONFIG_FEATURE_PS_WIDE=y
-# CONFIG_FEATURE_PS_TIME is not set
-# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
-CONFIG_RENICE=y
-CONFIG_BB_SYSCTL=y
-CONFIG_TOP=y
-CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
-CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
-# CONFIG_FEATURE_TOP_DECIMALS is not set
-# CONFIG_FEATURE_TOPMEM is not set
-CONFIG_UPTIME=y
-CONFIG_WATCH=y
-
-#
-# Shells
-#
-CONFIG_FEATURE_SH_IS_ASH=y
-# CONFIG_FEATURE_SH_IS_HUSH 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_BASH_COMPAT=y
-CONFIG_ASH_JOB_CONTROL=y
-CONFIG_ASH_READ_NCHARS=y
-CONFIG_ASH_READ_TIMEOUT=y
-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_PRINTF=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=y
-# CONFIG_HUSH is not set
-# CONFIG_HUSH_HELP is not set
-# CONFIG_HUSH_INTERACTIVE is not set
-# CONFIG_HUSH_JOB is not set
-# CONFIG_HUSH_TICK is not set
-# CONFIG_HUSH_IF is not set
-# CONFIG_HUSH_LOOPS 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 is not set
-# CONFIG_FEATURE_SH_NOFORK is not set
-# CONFIG_CTTYHACK is not set
-
-#
-# System Logging Utilities
-#
-CONFIG_SYSLOGD=y
-CONFIG_FEATURE_ROTATE_LOGFILE=y
-CONFIG_FEATURE_REMOTE_LOG=y
-CONFIG_FEATURE_SYSLOGD_DUP=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_LOAD_POLICY is not set
-# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON 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
-# CONFIG_SETFILES is not set
-# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
-# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
-
-#
-# Print Utilities
-#
-# CONFIG_LPD is not set
-# CONFIG_LPR is not set
-# CONFIG_LPQ is not set
diff --git a/packages/busybox/busybox-static-1.11.3/defconfig b/packages/busybox/busybox-static-1.11.3/defconfig
deleted file mode 100644
index 3be63d8174..0000000000
--- a/packages/busybox/busybox-static-1.11.3/defconfig
+++ /dev/null
@@ -1,777 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Busybox version: 1.9.1
-# Thu Feb 14 11:54:00 2008
-#
-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 is not set
-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_PIDFILE=y
-CONFIG_FEATURE_SUID=y
-CONFIG_FEATURE_SUID_CONFIG=y
-CONFIG_FEATURE_SUID_CONFIG_QUIET=y
-# CONFIG_SELINUX is not set
-# CONFIG_FEATURE_PREFER_APPLETS is not set
-CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
-CONFIG_FEATURE_SYSLOG=y
-CONFIG_FEATURE_HAVE_RPC=y
-
-#
-# Build Options
-#
-CONFIG_STATIC=y
-# CONFIG_BUILD_LIBBUSYBOX is not set
-# CONFIG_FEATURE_INDIVIDUAL is not set
-# CONFIG_FEATURE_SHARED_BUSYBOX is not set
-CONFIG_LFS=y
-
-#
-# Debugging Options
-#
-# CONFIG_DEBUG is not set
-# CONFIG_WERROR is not set
-CONFIG_NO_DEBUG_LIB=y
-# CONFIG_DMALLOC is not set
-# CONFIG_EFENCE is not set
-# CONFIG_INCLUDE_SUSv2 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_SCRIPT_WRAPPERS is not set
-# CONFIG_INSTALL_APPLET_DONT is not set
-# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
-# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
-# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
-CONFIG_PREFIX="./_install"
-
-#
-# Busybox Library Tuning
-#
-CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
-CONFIG_FEATURE_FAST_TOP=y
-# CONFIG_FEATURE_ETC_NETWORKS is not set
-CONFIG_FEATURE_EDITING=y
-CONFIG_FEATURE_EDITING_MAX_LEN=1024
-CONFIG_FEATURE_EDITING_FANCY_KEYS=y
-# CONFIG_FEATURE_EDITING_VI is not set
-CONFIG_FEATURE_EDITING_HISTORY=15
-CONFIG_FEATURE_EDITING_SAVEHISTORY=y
-CONFIG_FEATURE_TAB_COMPLETION=y
-CONFIG_FEATURE_USERNAME_COMPLETION=y
-CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
-CONFIG_FEATURE_COPYBUF_KB=4
-CONFIG_MONOTONIC_SYSCALL=y
-CONFIG_IOCTL_HEX2STR_ERROR=y
-
-#
-# Applets
-#
-
-#
-# Archival Utilities
-#
-CONFIG_AR=y
-# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
-CONFIG_BUNZIP2=y
-# CONFIG_BZIP2 is not set
-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_FEATURE_RPM_BZ2 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_OLDSUN_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_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_FEATURE_DF_INODE 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_EXPAND is not set
-# CONFIG_FEATURE_EXPAND_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=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_READLINK=y
-CONFIG_FEATURE_READLINK_FOLLOW=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_SPLIT is not set
-# CONFIG_FEATURE_SPLIT_FANCY is not set
-# 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_UNEXPAND is not set
-# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
-CONFIG_UNIQ=y
-CONFIG_USLEEP=y
-# CONFIG_UUDECODE is not set
-# CONFIG_UUENCODE is not set
-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=y
-CONFIG_CLEAR=y
-CONFIG_DEALLOCVT=y
-CONFIG_DUMPKMAP=y
-# CONFIG_KBD_MODE is not set
-CONFIG_LOADFONT=y
-CONFIG_LOADKMAP=y
-CONFIG_OPENVT=y
-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_RUN_PARTS=y
-CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
-# CONFIG_FEATURE_RUN_PARTS_FANCY 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_CMP=y
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_BINARY=y
-CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_FEATURE_DIFF_MINIMAL is not set
-# CONFIG_ED is not set
-CONFIG_PATCH=y
-CONFIG_SED=y
-CONFIG_VI=y
-CONFIG_FEATURE_VI_MAX_LEN=1024
-CONFIG_FEATURE_VI_8BIT=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
-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_MAXDEPTH=y
-CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_FEATURE_FIND_INUM is not set
-CONFIG_FEATURE_FIND_EXEC=y
-CONFIG_FEATURE_FIND_USER=y
-CONFIG_FEATURE_FIND_GROUP=y
-CONFIG_FEATURE_FIND_NOT=y
-CONFIG_FEATURE_FIND_DEPTH=y
-CONFIG_FEATURE_FIND_PAREN=y
-CONFIG_FEATURE_FIND_SIZE=y
-CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_FEATURE_FIND_DELETE is not set
-CONFIG_FEATURE_FIND_PATH=y
-CONFIG_FEATURE_FIND_REGEX=y
-# CONFIG_FEATURE_FIND_CONTEXT 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_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_FEATURE_ADDUSER_TO_GROUP is not set
-# CONFIG_DELGROUP is not set
-# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
-# CONFIG_ADDUSER is not set
-# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
-# CONFIG_DELUSER is not set
-# CONFIG_GETTY is not set
-# CONFIG_FEATURE_UTMP is not set
-# CONFIG_FEATURE_WTMP is not set
-# CONFIG_LOGIN is not set
-# CONFIG_PAM is not set
-# CONFIG_LOGIN_SCRIPTS is not set
-# CONFIG_FEATURE_NOLOGIN is not set
-# CONFIG_FEATURE_SECURETTY is not set
-# CONFIG_PASSWD is not set
-# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
-# CONFIG_CRYPTPW is not set
-# CONFIG_CHPASSWD 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=y
-# CONFIG_LSATTR 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
-CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=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_FEATURE_DMESG_PRETTY=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
-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 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_HD is not set
-# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
-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_FEATURE_MDEV_LOAD_FIRMWARE 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_HELPERS is not set
-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=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_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=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_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_MICROCOM is not set
-# CONFIG_MOUNTPOINT is not set
-# CONFIG_MT 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_TTYSIZE is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Networking Utilities
-#
-CONFIG_FEATURE_IPV6=y
-CONFIG_FEATURE_PREFER_IPV4_ADDRESS=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_RANGES is not set
-# CONFIG_FEATURE_HTTPD_USE_SENDFILE 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_FEATURE_HTTPD_ERROR_PAGES is not set
-# CONFIG_FEATURE_HTTPD_PROXY 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_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
-# 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_MAPPING=y
-# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP 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=y
-CONFIG_FEATURE_IP_ADDRESS=y
-CONFIG_FEATURE_IP_LINK=y
-CONFIG_FEATURE_IP_ROUTE=y
-CONFIG_FEATURE_IP_TUNNEL=y
-# CONFIG_FEATURE_IP_RULE is not set
-# CONFIG_FEATURE_IP_SHORT_FORMS is not set
-# CONFIG_FEATURE_IP_RARE_PROTOCOLS 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_FEATURE_NAMEIF_EXTENDED is not set
-CONFIG_NC=y
-CONFIG_NC_SERVER=y
-CONFIG_NC_EXTRA=y
-CONFIG_NETSTAT=y
-# CONFIG_FEATURE_NETSTAT_WIDE is not set
-CONFIG_NSLOOKUP=y
-CONFIG_PING=y
-CONFIG_PING6=y
-# CONFIG_PSCAN is not set
-CONFIG_FEATURE_FANCY_PING=y
-CONFIG_ROUTE=y
-# CONFIG_SLATTACH is not set
-CONFIG_TELNET=y
-# CONFIG_FEATURE_TELNET_TTYPE is not set
-CONFIG_FEATURE_TELNET_AUTOLOGIN=y
-CONFIG_TELNETD=y
-# 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 is not set
-# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
-# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
-CONFIG_APP_UDHCPD=y
-# CONFIG_APP_DHCPRELAY is not set
-CONFIG_APP_DUMPLEASES=y
-# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
-CONFIG_APP_UDHCPC=y
-CONFIG_FEATURE_UDHCPC_ARPING=y
-# CONFIG_FEATURE_UDHCP_DEBUG is not set
-# CONFIG_FEATURE_RFC3397 is not set
-CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
-# 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_NMETER is not set
-# CONFIG_PGREP is not set
-CONFIG_PIDOF=y
-# CONFIG_FEATURE_PIDOF_SINGLE is not set
-# CONFIG_FEATURE_PIDOF_OMIT is not set
-# CONFIG_PKILL 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_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
-# CONFIG_FEATURE_TOP_DECIMALS is not set
-# CONFIG_FEATURE_TOPMEM is not set
-CONFIG_UPTIME=y
-CONFIG_WATCH=y
-
-#
-# Shells
-#
-CONFIG_FEATURE_SH_IS_ASH=y
-# CONFIG_FEATURE_SH_IS_HUSH 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=y
-CONFIG_ASH_READ_TIMEOUT=y
-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_HUSH_HELP is not set
-# CONFIG_HUSH_INTERACTIVE is not set
-# CONFIG_HUSH_JOB is not set
-# CONFIG_HUSH_TICK is not set
-# CONFIG_HUSH_IF is not set
-# CONFIG_HUSH_LOOPS 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 is not set
-# CONFIG_CTTYHACK 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_LOAD_POLICY is not set
-# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON 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
-# CONFIG_SETFILES is not set
-# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
-# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
-
-#
-# ipsvd utilities
-#
-# CONFIG_TCPSVD is not set
-# CONFIG_UDPSVD is not set
diff --git a/packages/busybox/busybox-static-1.11.3/fdisk_lineedit_segfault.patch b/packages/busybox/busybox-static-1.11.3/fdisk_lineedit_segfault.patch
deleted file mode 100644
index 633153f1ce..0000000000
--- a/packages/busybox/busybox-static-1.11.3/fdisk_lineedit_segfault.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- old/libbb/lineedit.c 2008/09/27 01:28:56 23530
-+++ new/libbb/lineedit.c 2008/11/02 00:41:05 23898
-@@ -1412,7 +1412,8 @@
- if ((state->flags & SAVE_HISTORY) && state->hist_file)
- load_history(state->hist_file);
- #endif
-- state->cur_history = state->cnt_history;
-+ if (state->flags & DO_HISTORY)
-+ state->cur_history = state->cnt_history;
-
- /* prepare before init handlers */
- cmdedit_y = 0; /* quasireal y, not true if line > xt*yt */
diff --git a/packages/busybox/busybox-static-1.11.3/slugos/defconfig b/packages/busybox/busybox-static-1.11.3/slugos/defconfig
deleted file mode 100644
index 04f4c230e4..0000000000
--- a/packages/busybox/busybox-static-1.11.3/slugos/defconfig
+++ /dev/null
@@ -1,851 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Busybox version: 1.11.1
-# Thu Aug 21 23:08:10 2008
-#
-CONFIG_HAVE_DOT_CONFIG=y
-
-#
-# Busybox Settings
-#
-
-#
-# General Configuration
-#
-# CONFIG_DESKTOP is not set
-# CONFIG_FEATURE_ASSUME_UNICODE 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_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_PIDFILE=y
-CONFIG_FEATURE_SUID=y
-CONFIG_FEATURE_SUID_CONFIG=y
-# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
-# CONFIG_SELINUX is not set
-# CONFIG_FEATURE_PREFER_APPLETS is not set
-CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
-CONFIG_FEATURE_SYSLOG=y
-CONFIG_FEATURE_HAVE_RPC=y
-
-#
-# Build Options
-#
-CONFIG_STATIC=y
-# CONFIG_PIE is not set
-# CONFIG_NOMMU is not set
-# CONFIG_BUILD_LIBBUSYBOX is not set
-# CONFIG_FEATURE_INDIVIDUAL is not set
-# CONFIG_FEATURE_SHARED_BUSYBOX is not set
-CONFIG_LFS=y
-CONFIG_CROSS_COMPILER_PREFIX=""
-
-#
-# Debugging Options
-#
-# CONFIG_DEBUG is not set
-# CONFIG_DEBUG_PESSIMIZE is not set
-# CONFIG_WERROR is not set
-CONFIG_NO_DEBUG_LIB=y
-# CONFIG_DMALLOC is not set
-# CONFIG_EFENCE is not set
-# CONFIG_INCLUDE_SUSv2 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_SCRIPT_WRAPPERS is not set
-# CONFIG_INSTALL_APPLET_DONT is not set
-# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
-# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
-# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
-CONFIG_PREFIX="./_install"
-
-#
-# Busybox Library Tuning
-#
-CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=1
-CONFIG_FEATURE_FAST_TOP=y
-# CONFIG_FEATURE_ETC_NETWORKS is not set
-CONFIG_FEATURE_EDITING=y
-CONFIG_FEATURE_EDITING_MAX_LEN=1024
-# CONFIG_FEATURE_EDITING_VI is not set
-CONFIG_FEATURE_EDITING_HISTORY=15
-CONFIG_FEATURE_EDITING_SAVEHISTORY=y
-CONFIG_FEATURE_TAB_COMPLETION=y
-CONFIG_FEATURE_USERNAME_COMPLETION=y
-CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
-CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
-CONFIG_FEATURE_COPYBUF_KB=4
-CONFIG_MONOTONIC_SYSCALL=y
-CONFIG_IOCTL_HEX2STR_ERROR=y
-# CONFIG_FEATURE_HWIB is not set
-
-#
-# Applets
-#
-
-#
-# Archival Utilities
-#
-CONFIG_AR=y
-CONFIG_FEATURE_AR_LONG_FILENAMES=y
-CONFIG_BUNZIP2=y
-CONFIG_BZIP2=y
-# CONFIG_CPIO is not set
-# CONFIG_FEATURE_CPIO_O 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=y
-CONFIG_GZIP=y
-# CONFIG_RPM2CPIO is not set
-# CONFIG_RPM is not set
-# CONFIG_FEATURE_RPM_BZ2 is not set
-CONFIG_TAR=y
-CONFIG_FEATURE_TAR_CREATE=y
-CONFIG_FEATURE_TAR_GZIP=y
-CONFIG_FEATURE_TAR_BZIP2=y
-CONFIG_FEATURE_TAR_LZMA=y
-CONFIG_FEATURE_TAR_COMPRESS=y
-CONFIG_FEATURE_TAR_AUTODETECT=y
-CONFIG_FEATURE_TAR_FROM=y
-# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
-# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
-CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-CONFIG_FEATURE_TAR_LONG_OPTIONS=y
-CONFIG_FEATURE_TAR_UNAME_GNAME=y
-CONFIG_UNCOMPRESS=y
-CONFIG_UNLZMA=y
-# CONFIG_FEATURE_LZMA_FAST is not set
-CONFIG_UNZIP=y
-
-#
-# Common options for cpio and tar
-#
-# 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_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_FEATURE_DF_INODE=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=y
-# CONFIG_EXPAND is not set
-# CONFIG_FEATURE_EXPAND_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=y
-# CONFIG_HOSTID is not set
-CONFIG_ID=y
-# CONFIG_INSTALL is not set
-# 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 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=y
-CONFIG_PRINTF=y
-CONFIG_PWD=y
-CONFIG_READLINK=y
-CONFIG_FEATURE_READLINK_FOLLOW=y
-CONFIG_REALPATH=y
-CONFIG_RM=y
-CONFIG_RMDIR=y
-CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
-CONFIG_SEQ=y
-CONFIG_SHA1SUM=y
-CONFIG_SLEEP=y
-CONFIG_FEATURE_FANCY_SLEEP=y
-CONFIG_SORT=y
-CONFIG_FEATURE_SORT_BIG=y
-CONFIG_SPLIT=y
-CONFIG_FEATURE_SPLIT_FANCY=y
-# CONFIG_STAT is not set
-# CONFIG_FEATURE_STAT_FORMAT is not set
-CONFIG_STTY=y
-CONFIG_SUM=y
-CONFIG_SYNC=y
-# CONFIG_TAC is not set
-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=y
-CONFIG_TRUE=y
-CONFIG_TTY=y
-CONFIG_UNAME=y
-# CONFIG_UNEXPAND is not set
-# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
-CONFIG_UNIQ=y
-CONFIG_USLEEP=y
-# CONFIG_UUDECODE is not set
-# CONFIG_UUENCODE is not set
-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=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=y
-CONFIG_KBD_MODE=y
-CONFIG_LOADFONT=y
-CONFIG_LOADKMAP=y
-CONFIG_OPENVT=y
-CONFIG_RESET=y
-CONFIG_RESIZE=y
-CONFIG_FEATURE_RESIZE_PRINT=y
-CONFIG_SETCONSOLE=y
-CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y
-CONFIG_SETKEYCODES=y
-CONFIG_SETLOGCONS=y
-
-#
-# Debian Utilities
-#
-CONFIG_MKTEMP=y
-# CONFIG_PIPE_PROGRESS is not set
-CONFIG_RUN_PARTS=y
-CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
-CONFIG_FEATURE_RUN_PARTS_FANCY=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_CMP=y
-CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_BINARY=y
-CONFIG_FEATURE_DIFF_DIR=y
-CONFIG_FEATURE_DIFF_MINIMAL=y
-# CONFIG_ED is not set
-CONFIG_PATCH=y
-CONFIG_SED=y
-CONFIG_VI=y
-CONFIG_FEATURE_VI_MAX_LEN=1024
-CONFIG_FEATURE_VI_8BIT=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
-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_MAXDEPTH=y
-CONFIG_FEATURE_FIND_NEWER=y
-CONFIG_FEATURE_FIND_INUM=y
-CONFIG_FEATURE_FIND_EXEC=y
-CONFIG_FEATURE_FIND_USER=y
-CONFIG_FEATURE_FIND_GROUP=y
-CONFIG_FEATURE_FIND_NOT=y
-CONFIG_FEATURE_FIND_DEPTH=y
-CONFIG_FEATURE_FIND_PAREN=y
-CONFIG_FEATURE_FIND_SIZE=y
-CONFIG_FEATURE_FIND_PRUNE=y
-CONFIG_FEATURE_FIND_DELETE=y
-CONFIG_FEATURE_FIND_PATH=y
-CONFIG_FEATURE_FIND_REGEX=y
-# CONFIG_FEATURE_FIND_CONTEXT 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=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_KILL_REMOVED is not set
-CONFIG_FEATURE_KILL_DELAY=0
-# 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_PWD_GRP=y
-# CONFIG_USE_BB_SHADOW is not set
-CONFIG_USE_BB_CRYPT=y
-CONFIG_ADDGROUP=y
-CONFIG_FEATURE_ADDUSER_TO_GROUP=y
-CONFIG_DELGROUP=y
-CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
-CONFIG_FEATURE_CHECK_NAMES=y
-CONFIG_ADDUSER=y
-CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
-CONFIG_DELUSER=y
-CONFIG_GETTY=y
-CONFIG_FEATURE_UTMP=y
-CONFIG_FEATURE_WTMP=y
-CONFIG_LOGIN=y
-# CONFIG_PAM is not set
-CONFIG_LOGIN_SCRIPTS=y
-CONFIG_FEATURE_NOLOGIN=y
-CONFIG_FEATURE_SECURETTY=y
-CONFIG_PASSWD=y
-CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
-CONFIG_CRYPTPW=y
-CONFIG_CHPASSWD=y
-CONFIG_SU=y
-CONFIG_FEATURE_SU_SYSLOG=y
-CONFIG_FEATURE_SU_CHECKS_SHELLS=y
-CONFIG_SULOGIN=y
-# CONFIG_VLOCK is not set
-
-#
-# Linux Ext2 FS Progs
-#
-# CONFIG_CHATTR is not set
-# CONFIG_FSCK is not set
-# CONFIG_LSATTR is not set
-
-#
-# Linux Module Utilities
-#
-CONFIG_DEPMOD=y
-# CONFIG_FEATURE_DEPMOD_PRUNE_FANCY is not set
-CONFIG_FEATURE_DEPMOD_ALIAS=y
-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
-CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y
-CONFIG_FEATURE_MODPROBE_BLACKLIST=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_DEFAULT_MODULES_DIR="/lib/modules"
-CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
-# 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 is not set
-CONFIG_FEATURE_FDISK_ADVANCED=y
-CONFIG_FINDFS=y
-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_FEATURE_HEXDUMP_REVERSE=y
-CONFIG_HD=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=y
-CONFIG_FEATURE_MDEV_CONF=y
-CONFIG_FEATURE_MDEV_RENAME=y
-CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
-CONFIG_FEATURE_MDEV_EXEC=y
-CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
-CONFIG_MKSWAP=y
-# CONFIG_FEATURE_MKSWAP_V0 is not set
-CONFIG_MORE=y
-CONFIG_FEATURE_USE_TERMIOS=y
-CONFIG_VOLUMEID=y
-CONFIG_FEATURE_VOLUMEID_EXT=y
-# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
-CONFIG_FEATURE_VOLUMEID_FAT=y
-CONFIG_FEATURE_VOLUMEID_HFS=y
-CONFIG_FEATURE_VOLUMEID_JFS=y
-# CONFIG_FEATURE_VOLUMEID_XFS is not set
-CONFIG_FEATURE_VOLUMEID_NTFS=y
-CONFIG_FEATURE_VOLUMEID_ISO9660=y
-CONFIG_FEATURE_VOLUMEID_UDF=y
-CONFIG_FEATURE_VOLUMEID_LUKS=y
-CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
-# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
-# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
-# CONFIG_FEATURE_VOLUMEID_SYSV is not set
-# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
-CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
-CONFIG_MOUNT=y
-CONFIG_FEATURE_MOUNT_FAKE=y
-CONFIG_FEATURE_MOUNT_VERBOSE=y
-CONFIG_FEATURE_MOUNT_HELPERS=y
-CONFIG_FEATURE_MOUNT_LABEL=y
-CONFIG_FEATURE_MOUNT_NFS=y
-CONFIG_FEATURE_MOUNT_CIFS=y
-CONFIG_FEATURE_MOUNT_FLAGS=y
-CONFIG_FEATURE_MOUNT_FSTAB=y
-CONFIG_PIVOT_ROOT=y
-CONFIG_RDATE=y
-# CONFIG_READPROFILE is not set
-# CONFIG_RTCWAKE is not set
-CONFIG_SCRIPT=y
-# CONFIG_SETARCH is not set
-CONFIG_SWAPONOFF=y
-CONFIG_FEATURE_SWAPON_PRI=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=y
-CONFIG_BBCONFIG=y
-# CONFIG_CHAT is not set
-# CONFIG_FEATURE_CHAT_NOFAIL is not set
-# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
-# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
-# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
-# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
-# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
-# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
-# CONFIG_CHRT is not set
-CONFIG_CROND=y
-CONFIG_DEBUG_CROND_OPTION=y
-# 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_FEATURE_EJECT_SCSI is not set
-# CONFIG_FBSPLASH is not set
-# CONFIG_INOTIFYD is not set
-# CONFIG_LAST is not set
-# CONFIG_FEATURE_LAST_SMALL is not set
-# CONFIG_FEATURE_LAST_FANCY 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=y
-CONFIG_FEATURE_LESS_MARKS=y
-CONFIG_FEATURE_LESS_REGEXP=y
-CONFIG_HDPARM=y
-CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
-CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
-CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y
-CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
-CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y
-CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
-CONFIG_MAKEDEVS=y
-# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
-CONFIG_FEATURE_MAKEDEVS_TABLE=y
-# CONFIG_MAN is not set
-CONFIG_MICROCOM=y
-CONFIG_MOUNTPOINT=y
-# CONFIG_MT is not set
-CONFIG_RAIDAUTORUN=y
-CONFIG_READAHEAD=y
-CONFIG_RUNLEVEL=y
-CONFIG_RX=y
-# CONFIG_SETSID is not set
-CONFIG_STRINGS=y
-# CONFIG_TASKSET is not set
-# CONFIG_FEATURE_TASKSET_FANCY is not set
-CONFIG_TIME=y
-# CONFIG_TTYSIZE is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Networking Utilities
-#
-CONFIG_FEATURE_IPV6=y
-CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
-CONFIG_VERBOSE_RESOLUTION_ERRORS=y
-CONFIG_ARP=y
-CONFIG_ARPING=y
-CONFIG_BRCTL=y
-CONFIG_FEATURE_BRCTL_FANCY=y
-CONFIG_FEATURE_BRCTL_SHOW=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=y
-CONFIG_FEATURE_HTTPD_RANGES=y
-CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
-CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y
-CONFIG_FEATURE_HTTPD_SETUID=y
-CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
-CONFIG_FEATURE_HTTPD_AUTH_MD5=y
-CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y
-CONFIG_FEATURE_HTTPD_CGI=y
-CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
-CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
-CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
-CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
-CONFIG_FEATURE_HTTPD_PROXY=y
-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=y
-# CONFIG_IFENSLAVE is not set
-CONFIG_IFUPDOWN=y
-CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
-# 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_MAPPING is not set
-# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP 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=y
-CONFIG_FEATURE_IP_ADDRESS=y
-CONFIG_FEATURE_IP_LINK=y
-CONFIG_FEATURE_IP_ROUTE=y
-CONFIG_FEATURE_IP_TUNNEL=y
-CONFIG_FEATURE_IP_RULE=y
-CONFIG_FEATURE_IP_SHORT_FORMS=y
-# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
-CONFIG_IPADDR=y
-CONFIG_IPLINK=y
-CONFIG_IPROUTE=y
-CONFIG_IPTUNNEL=y
-CONFIG_IPRULE=y
-CONFIG_IPCALC=y
-CONFIG_FEATURE_IPCALC_FANCY=y
-CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
-# CONFIG_NAMEIF is not set
-# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
-CONFIG_NC=y
-CONFIG_NC_SERVER=y
-CONFIG_NC_EXTRA=y
-CONFIG_NETSTAT=y
-CONFIG_FEATURE_NETSTAT_WIDE=y
-CONFIG_NSLOOKUP=y
-CONFIG_PING=y
-CONFIG_PING6=y
-CONFIG_FEATURE_FANCY_PING=y
-# CONFIG_PSCAN is not set
-CONFIG_ROUTE=y
-# CONFIG_SENDMAIL is not set
-# CONFIG_FETCHMAIL is not set
-# CONFIG_SLATTACH is not set
-CONFIG_TELNET=y
-CONFIG_FEATURE_TELNET_TTYPE=y
-CONFIG_FEATURE_TELNET_AUTOLOGIN=y
-CONFIG_TELNETD=y
-# CONFIG_FEATURE_TELNETD_STANDALONE is not set
-CONFIG_TFTP=y
-CONFIG_TFTPD=y
-CONFIG_FEATURE_TFTP_GET=y
-CONFIG_FEATURE_TFTP_PUT=y
-CONFIG_FEATURE_TFTP_BLOCKSIZE=y
-CONFIG_DEBUG_TFTP=y
-CONFIG_TRACEROUTE=y
-CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
-CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y
-# 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_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
-CONFIG_DHCPD_LEASES_FILE=""
-CONFIG_APP_UDHCPC=y
-CONFIG_FEATURE_UDHCPC_ARPING=y
-# CONFIG_FEATURE_UDHCP_PORT is not set
-# CONFIG_FEATURE_UDHCP_DEBUG is not set
-# CONFIG_FEATURE_RFC3397 is not set
-CONFIG_DHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
-CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=120
-CONFIG_VCONFIG=y
-CONFIG_WGET=y
-CONFIG_FEATURE_WGET_STATUSBAR=y
-CONFIG_FEATURE_WGET_AUTHENTICATION=y
-CONFIG_FEATURE_WGET_LONG_OPTIONS=y
-# CONFIG_ZCIP is not set
-# CONFIG_TCPSVD is not set
-# CONFIG_UDPSVD is not set
-
-#
-# Process Utilities
-#
-CONFIG_FREE=y
-CONFIG_FUSER=y
-CONFIG_KILL=y
-CONFIG_KILLALL=y
-# CONFIG_KILLALL5 is not set
-# CONFIG_NMETER is not set
-# CONFIG_PGREP is not set
-CONFIG_PIDOF=y
-CONFIG_FEATURE_PIDOF_SINGLE=y
-CONFIG_FEATURE_PIDOF_OMIT=y
-CONFIG_PKILL=y
-CONFIG_PS=y
-CONFIG_FEATURE_PS_WIDE=y
-# CONFIG_FEATURE_PS_TIME is not set
-# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
-CONFIG_RENICE=y
-CONFIG_BB_SYSCTL=y
-CONFIG_TOP=y
-CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
-CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
-CONFIG_FEATURE_TOP_DECIMALS=y
-CONFIG_FEATURE_TOPMEM=y
-CONFIG_UPTIME=y
-CONFIG_WATCH=y
-
-#
-# Shells
-#
-CONFIG_FEATURE_SH_IS_ASH=y
-# CONFIG_FEATURE_SH_IS_HUSH 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_BASH_COMPAT=y
-CONFIG_ASH_JOB_CONTROL=y
-CONFIG_ASH_READ_NCHARS=y
-CONFIG_ASH_READ_TIMEOUT=y
-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_PRINTF=y
-CONFIG_ASH_BUILTIN_TEST=y
-CONFIG_ASH_CMDCMD=y
-# CONFIG_ASH_MAIL is not set
-CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
-CONFIG_ASH_RANDOM_SUPPORT=y
-CONFIG_ASH_EXPAND_PRMT=y
-# CONFIG_HUSH is not set
-# CONFIG_HUSH_HELP is not set
-# CONFIG_HUSH_INTERACTIVE is not set
-# CONFIG_HUSH_JOB is not set
-# CONFIG_HUSH_TICK is not set
-# CONFIG_HUSH_IF is not set
-# CONFIG_HUSH_LOOPS 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 is not set
-# CONFIG_FEATURE_SH_NOFORK is not set
-CONFIG_CTTYHACK=y
-
-#
-# System Logging Utilities
-#
-CONFIG_SYSLOGD=y
-CONFIG_FEATURE_ROTATE_LOGFILE=y
-CONFIG_FEATURE_REMOTE_LOG=y
-CONFIG_FEATURE_SYSLOGD_DUP=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_LOAD_POLICY is not set
-# CONFIG_MATCHPATHCON is not set
-# CONFIG_RESTORECON 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
-# CONFIG_SETFILES is not set
-# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
-# CONFIG_SETSEBOOL is not set
-# CONFIG_SESTATUS is not set
-
-#
-# Print Utilities
-#
-# CONFIG_LPD is not set
-# CONFIG_LPR is not set
-# CONFIG_LPQ is not set
diff --git a/packages/busybox/busybox-static-1.11.3/udhcpscript.patch b/packages/busybox/busybox-static-1.11.3/udhcpscript.patch
deleted file mode 100644
index fc21d440cd..0000000000
--- a/packages/busybox/busybox-static-1.11.3/udhcpscript.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#
-# 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.11.3.bb b/packages/busybox/busybox-static_1.11.3.bb
index 9313c892f6..9529ab7b4b 100644
--- a/packages/busybox/busybox-static_1.11.3.bb
+++ b/packages/busybox/busybox-static_1.11.3.bb
@@ -1,4 +1,11 @@
require busybox_${PV}.bb
-PR = "r2"
+PR = "r4"
+
+FILESPATH = "${FILE_DIRNAME}/busybox-${PV}:${FILE_DIRNAME}/files:${FILE_DIRNAME}"
+S = "${WORKDIR}/busybox-${PV}"
+
+do_configure_append() {
+ sed -i -e '/CONFIG_STATIC/d' .config
+ echo "CONFIG_STATIC=y" >>.config
+}
-S = "${WORKDIR}/busybox-1.11.3"
diff --git a/packages/busybox/busybox.inc b/packages/busybox/busybox.inc
index 4b195d5584..cb8eb53216 100644
--- a/packages/busybox/busybox.inc
+++ b/packages/busybox/busybox.inc
@@ -129,6 +129,10 @@ do_install () {
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
+ if grep "CONFIG_FEATURE_MOUNT_FSTAB=y" ${WORKDIR}/defconfig; then
+ install -d ${D}${sysconfdir}/default
+ install -m 644 ${WORKDIR}/mountall ${D}${sysconfdir}/default/
+ fi
install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
}
diff --git a/packages/busybox/busybox_1.11.3.bb b/packages/busybox/busybox_1.11.3.bb
index b42f8ea998..bd03aa8cf6 100644
--- a/packages/busybox/busybox_1.11.3.bb
+++ b/packages/busybox/busybox_1.11.3.bb
@@ -1,5 +1,5 @@
require busybox.inc
-PR = "r13"
+PR = "r15"
SRC_URI = "\
http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
@@ -7,12 +7,14 @@ SRC_URI = "\
file://udhcpscript.patch;patch=1 \
file://B921600.patch;patch=1 \
file://fdisk_lineedit_segfault.patch;patch=1 \
+ file://busybox-appletlib-dependency.patch;patch=1 \
file://busybox-cron \
file://busybox-httpd \
file://busybox-udhcpd \
file://default.script \
file://hwclock.sh \
file://mount.busybox \
+ file://mountall \
file://syslog \
file://syslog.conf \
file://umount.busybox \
diff --git a/packages/busybox/busybox_1.13.2.bb b/packages/busybox/busybox_1.13.2.bb
index c8aac79d6d..cc2cb2b39e 100644
--- a/packages/busybox/busybox_1.13.2.bb
+++ b/packages/busybox/busybox_1.13.2.bb
@@ -1,13 +1,19 @@
require busybox.inc
-
-PR = "r9"
+PR = "r16"
SRC_URI = "\
http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+ http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-depmod.patch;patch=1 \
+ http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-init.patch;patch=1 \
+ http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-mdev.patch;patch=1 \
+ http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-modprobe.patch;patch=1 \
+ http://busybox.net/downloads/fixes-1.13.2/busybox-1.13.2-tar.patch;patch=1 \
\
file://udhcpscript.patch;patch=1 \
+ file://udhcpc-fix-nfsroot.patch;patch=1 \
file://B921600.patch;patch=1 \
- file://r24785.patch;patch=1;status=merged \
+ file://get_header_tar.patch;patch=1 \
+ file://busybox-appletlib-dependency.patch;patch=1 \
file://find-touchscreen.sh \
file://busybox-cron \
file://busybox-httpd \
@@ -15,6 +21,7 @@ SRC_URI = "\
file://default.script \
file://hwclock.sh \
file://mount.busybox \
+ file://mountall \
file://syslog \
file://syslog.conf \
file://umount.busybox \
@@ -27,6 +34,9 @@ EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
do_configure () {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ if [ "${TARGET_ARCH}" = "avr32" ] ; then
+ sed -i s:CONFIG_FEATURE_OSF_LABEL=y:CONFIG_FEATURE_OSF_LABEL=n: ${S}/.config
+ fi
cml1_do_configure
}
@@ -37,4 +47,3 @@ do_install_append() {
install -m 0755 ${WORKDIR}/find-touchscreen.sh ${D}${sysconfdir}/mdev/
install -m 0755 ${WORKDIR}/mdev ${D}${sysconfdir}/init.d/
}
-
diff --git a/packages/busybox/busybox_1.7.2.bb b/packages/busybox/busybox_1.7.2.bb
index e98e25eb37..87d336b7ac 100644
--- a/packages/busybox/busybox_1.7.2.bb
+++ b/packages/busybox/busybox_1.7.2.bb
@@ -1,5 +1,5 @@
require busybox.inc
-PR = "r11"
+PR = "r13"
SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://busybox-cron \
@@ -8,9 +8,11 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://default.script \
file://hwclock.sh \
file://mount.busybox \
+ file://mountall \
file://syslog \
file://syslog.conf \
file://udhcpscript.patch;patch=1 \
+ file://busybox-appletlib-dependency.patch;patch=1 \
file://umount.busybox \
file://run_parts.c"
diff --git a/packages/busybox/busybox_1.9.2.bb b/packages/busybox/busybox_1.9.2.bb
index 77dd2a905c..e9aa820498 100644
--- a/packages/busybox/busybox_1.9.2.bb
+++ b/packages/busybox/busybox_1.9.2.bb
@@ -1,17 +1,19 @@
require busybox.inc
-PR = "r4"
+PR = "r6"
SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://udhcpscript.patch;patch=1 \
file://adduser-longops.patch;patch=1 \
file://sort-z-nul.patch;patch=1;status=upstream \
file://topmem.patch;patch=1 \
+ file://busybox-appletlib-dependency.patch;patch=1 \
file://busybox-cron \
file://busybox-httpd \
file://busybox-udhcpd \
file://default.script \
file://hwclock.sh \
file://mount.busybox \
+ file://mountall \
file://syslog \
file://syslog.conf \
file://umount.busybox \
diff --git a/packages/busybox/files/busybox-appletlib-dependency.patch b/packages/busybox/files/busybox-appletlib-dependency.patch
new file mode 100644
index 0000000000..85a61e8cf5
--- /dev/null
+++ b/packages/busybox/files/busybox-appletlib-dependency.patch
@@ -0,0 +1,11 @@
+--- a/libbb/Kbuild 2008-11-09 20:28:09.000000000 +0300
++++ b/libbb/Kbuild 2009-02-17 17:41:48.718747865 +0300
+@@ -147,3 +147,8 @@ lib-$(CONFIG_PGREP) += xregcomp.o
+ lib-$(CONFIG_PKILL) += xregcomp.o
+ lib-$(CONFIG_DEVFSD) += xregcomp.o
+ lib-$(CONFIG_FEATURE_FIND_REGEX) += xregcomp.o
++
++libbb/appletlib.o: include/usage_compressed.h include/applet_tables.h
++
++include/usage_compressed.h include/applet_tables.h:
++ $(Q)$(MAKE) $(build)=applets $@
diff --git a/packages/busybox/files/mountall b/packages/busybox/files/mountall
new file mode 100644
index 0000000000..d5408b8f8d
--- /dev/null
+++ b/packages/busybox/files/mountall
@@ -0,0 +1 @@
+MOUNTALL="-t nonfs,nosmbfs,noncpfs"
diff --git a/packages/busybox/slingbox_1.3.1.bb b/packages/busybox/slingbox_1.3.1.bb
index cbcce6c675..0a9051d447 100644
--- a/packages/busybox/slingbox_1.3.1.bb
+++ b/packages/busybox/slingbox_1.3.1.bb
@@ -4,11 +4,12 @@ HOMEPAGE = "http://www.busybox.net"
LICENSE = "GPL"
SECTION = "base"
PRIORITY = "required"
-PR = "r3"
+PR = "r4"
COMPATIBLE_MACHINE = "nslu2"
SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://defconfig \
+ file://mountall \
file://shadow_h_is_required.patch;patch=1 \
file://df_rootfs.patch;patch=1 \
file://lazy_umount.patch;patch=1 \
diff --git a/packages/byacc/byacc-native_20081225.bb b/packages/byacc/byacc-native_20081225.bb
new file mode 100644
index 0000000000..2973c3231b
--- /dev/null
+++ b/packages/byacc/byacc-native_20081225.bb
@@ -0,0 +1,5 @@
+PR = "r0"
+
+require byacc.inc
+
+inherit native
diff --git a/packages/byacc/byacc.inc b/packages/byacc/byacc.inc
new file mode 100644
index 0000000000..7d35974203
--- /dev/null
+++ b/packages/byacc/byacc.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "Berkeley Yacc"
+SECTION = "devel"
+LICENSE = "public domain"
+
+SRC_URI = "ftp://invisible-island.net/byacc/byacc-${PV}.tgz"
+EXTRA_OECONF += "--program-transform-name='s,^,b,'"
+S = "${WORKDIR}/byacc-${PV}"
+
+inherit autotools
+
+do_configure() {
+ oe_runconf
+}
diff --git a/packages/byacc/byacc_20081225.bb b/packages/byacc/byacc_20081225.bb
new file mode 100644
index 0000000000..dd3b71db3b
--- /dev/null
+++ b/packages/byacc/byacc_20081225.bb
@@ -0,0 +1,3 @@
+PR = "r0"
+
+require byacc.inc
diff --git a/packages/cdrkit/cdrkit_1.1.9.bb b/packages/cdrkit/cdrkit_1.1.9.bb
new file mode 100644
index 0000000000..d6700e9df8
--- /dev/null
+++ b/packages/cdrkit/cdrkit_1.1.9.bb
@@ -0,0 +1,19 @@
+# cdrkit build file
+
+LICENSE="GPLv2"
+DESCRIPTION="A set of tools for CD recording"
+HOMEPAGE="http://www.cdrkit.org"
+
+PARALLEL_MAKE = ""
+DEPENDS = "libcap"
+SRC_URI="http://cdrkit.org/releases/cdrkit-${PV}.tar.gz \
+ file://xconfig.patch;patch=1"
+
+S="${WORKDIR}/cdrkit-${PV}"
+PR = "r2"
+
+inherit cmake
+
+do_install() {
+ oe_runmake install DESTDIR="${D}"
+}
diff --git a/packages/cdrkit/files/xconfig.patch b/packages/cdrkit/files/xconfig.patch
new file mode 100644
index 0000000000..5af1a373b9
--- /dev/null
+++ b/packages/cdrkit/files/xconfig.patch
@@ -0,0 +1,15 @@
+--- cdrkit-1.1.9/include/xconfig.h.in.orig 2006-12-02 12:10:05.000000000 +0100
++++ cdrkit-1.1.9/include/xconfig.h.in 2009-03-08 13:29:05.000000000 +0100
+@@ -233,7 +233,11 @@
+ /* If using network byte order */
+ #cmakedefine WORDS_BIGENDIAN
+ /* If high bits come first in structures */
+-#cmakedefine BITFIELDS_HTOL
++#ifdef WORDS_BIGENDIAN
++#define BITFIELDS_HTOL
++#else
++#define BITFIELDS_LTOH
++#endif
+ #define HAVE_C_BIGENDIAN /* Flag that WORDS_BIGENDIAN test was done */
+ #define HAVE_C_BITFIELDS /* Flag that BITFIELDS_HTOL test was done */
+
diff --git a/packages/cdrtools/cdrtools-native_2.01.bb b/packages/cdrtools/cdrtools-native_2.01.bb
index 9b148517d2..35404c9c04 100644
--- a/packages/cdrtools/cdrtools-native_2.01.bb
+++ b/packages/cdrtools/cdrtools-native_2.01.bb
@@ -2,13 +2,14 @@
# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
# Released under the MIT license (see packages/COPYING)
-LICENSE="GPL"
+LICENSE="OSS"
DESCRIPTION="A set of tools for CD recording, including cdrecord"
-HOMEPAGE="http://cdrecord.berlios.de/old/private/cdrecord.html"
+HOMEPAGE="http://cdrecord.berlios.de/private/cdrecord.html"
-SRC_URI="ftp://ftp.berlios.de/pub/cdrecord/cdrtools-${PV}.tar.bz2"
+SRC_URI="http://ftp.berlios.de/pub/cdrecord/cdrtools-${PV}.tar.bz2"
S="${WORKDIR}/cdrtools-${PV}"
+PR = "r2"
inherit native
diff --git a/packages/clutter/aaina_svn.bb b/packages/clutter/aaina_svn.bb
index 52a2b3ae0e..862dfd8933 100644
--- a/packages/clutter/aaina_svn.bb
+++ b/packages/clutter/aaina_svn.bb
@@ -1,5 +1,6 @@
require aaina.inc
+SRCREV = "3597"
PV = "0.3.0+svnr${SRCREV}"
SRC_URI = "svn://svn.o-hand.com/repos/clutter/trunk/toys;module=aaina;proto=http"
diff --git a/packages/clutter/clutter-gtk-0.6_git.bb b/packages/clutter/clutter-gtk-0.6_git.bb
new file mode 100644
index 0000000000..89f2592bfc
--- /dev/null
+++ b/packages/clutter/clutter-gtk-0.6_git.bb
@@ -0,0 +1,9 @@
+require clutter-gtk.inc
+
+PV = "0.6.0+git${SRCREV}"
+
+DEPENDS += "clutter-0.6"
+
+SRC_URI = "git://git.clutter-project.org/clutter-gtk.git;protocol=git;branch=clutter-gtk-0-6"
+
+S = "${WORKDIR}/git"
diff --git a/packages/clutter/clutter-gtk-0.8_git.bb b/packages/clutter/clutter-gtk-0.8_git.bb
new file mode 100644
index 0000000000..3fb0cff8aa
--- /dev/null
+++ b/packages/clutter/clutter-gtk-0.8_git.bb
@@ -0,0 +1,9 @@
+require clutter-gtk.inc
+
+PV = "0.8.0+git${SRCREV}"
+
+DEPENDS += "clutter"
+
+SRC_URI = "git://git.clutter-project.org/clutter-gtk.git;protocol=git;branch=clutter-gtk-0-8"
+
+S = "${WORKDIR}/git"
diff --git a/packages/clutter/clutter-gtk.inc b/packages/clutter/clutter-gtk.inc
new file mode 100644
index 0000000000..bbecee548c
--- /dev/null
+++ b/packages/clutter/clutter-gtk.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "Clutter GTK+"
+HOMEPAGE = "http://www.clutter-project.org/"
+LICENSE = "LGPL"
+
+DEPENDS = "gtk+"
+
+FILESPATH = "${FILE_DIRNAME}/clutter-gtk"
+
+PACKAGES =+ "${PN}-examples"
+FILES_${PN}-examples = "${bindir}/gtk-clutter-test ${bindir}/gtk-clutter-events ${bindir}/gtk-clutter-multistage"
+
+inherit autotools_stage pkgconfig gtk-doc
+
diff --git a/packages/clutter/clutter-gtk_git.bb b/packages/clutter/clutter-gtk_git.bb
new file mode 100644
index 0000000000..a3e3767f90
--- /dev/null
+++ b/packages/clutter/clutter-gtk_git.bb
@@ -0,0 +1,10 @@
+require clutter-gst.inc
+
+PV = "0.9.0+git${SRCREV}"
+PR = "r0"
+
+SRC_URI = "git://git.clutter-project.org/clutter-gtk.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "clutter"
diff --git a/packages/clutter/clutter.inc b/packages/clutter/clutter.inc
index 60c7a480de..e900c43209 100644
--- a/packages/clutter/clutter.inc
+++ b/packages/clutter/clutter.inc
@@ -36,6 +36,10 @@ DEPENDS_omap3evm = "${STDDEPENDS} libgles-omap3 tslib"
EXTRA_OECONF_omap3evm = "${BASE_CONF} --with-flavour=eglx --with-gles=2.0"
PACKAGE_ARCH_omap3evm = "${MACHINE_ARCH}"
+DEPENDS_overo = "${STDDEPENDS} libgles-omap3 tslib"
+EXTRA_OECONF_overo = "${BASE_CONF} --with-flavour=eglx --with-gles=2.0"
+PACKAGE_ARCH_overo = "${MACHINE_ARCH}"
+
DEPENDS_mx31ads = "${STDDEPENDS} libgles-mx31 tslib"
EXTRA_OECONF_mx31ads = "${BASE_CONF} --with-flavour=eglnative"
PACKAGE_ARCH_mx31ads = "${MACHINE_ARCH}"
diff --git a/packages/clutter/clutter_0.8+git.bb b/packages/clutter/clutter_0.8+git.bb
new file mode 100644
index 0000000000..b578cbe43d
--- /dev/null
+++ b/packages/clutter/clutter_0.8+git.bb
@@ -0,0 +1,13 @@
+require clutter.inc
+
+CLUTTER_REV = "7129ee4f1b86bfcb65b5fc39021b05b74168785d"
+
+PV = "0.8.7+gitr${CLUTTER_REV}"
+PR = "r0"
+SRC_URI = "git://git.clutter-project.org/clutter.git;protocol=git;branch=clutter-0-8;rev=${CLUTTER_REV} \
+ file://enable-tests-r2990.patch;patch=1"
+
+S = "${WORKDIR}/git"
+
+
+
diff --git a/packages/clutter/clutter_0.8+svn.bb b/packages/clutter/clutter_0.8+svn.bb
deleted file mode 100644
index a203165ca8..0000000000
--- a/packages/clutter/clutter_0.8+svn.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-require clutter.inc
-
-CLUTTER_REV = "3597"
-
-PV = "0.8.4+svnr${CLUTTER_REV}"
-PR = "r0"
-SRC_URI = "svn://svn.o-hand.com/repos/clutter/branches;module=clutter-0-8;proto=http;rev=${CLUTTER_REV} \
- file://enable_tests.patch;patch=1;maxrev=2989 \
- file://enable-tests-r2990.patch;patch=1;minrev=2990"
-
-S = "${WORKDIR}/clutter-0-8"
-
-
-
diff --git a/packages/cmake/cmake-native_2.6.3.bb b/packages/cmake/cmake-native_2.6.3.bb
new file mode 100644
index 0000000000..faf397614b
--- /dev/null
+++ b/packages/cmake/cmake-native_2.6.3.bb
@@ -0,0 +1,11 @@
+inherit native
+require cmake.inc
+
+do_stage() {
+ oe_runmake install
+ autotools_stage_all
+}
+
+do_install() {
+ :
+}
diff --git a/packages/connman/connman-gnome_0.4.bb b/packages/connman/connman-gnome_0.4.bb
new file mode 100644
index 0000000000..fdcf61823d
--- /dev/null
+++ b/packages/connman/connman-gnome_0.4.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "gtk frontend for connman"
+HOMEPAGE = "http://www.moblin.org/projects/projects_connman.php"
+SECTION = "libs/network"
+LICENSE = "GPL"
+DEPENDS = "gtk+ dbus"
+PR = "r7"
+
+RRECOMMENDS_${PN} = "connman connman-plugin-ethernet connman-plugin-loopback connman-plugin-udhcp connman-plugin-wifi"
+
+SRC_URI = "http://repo.moblin.org/connman/releases/connman-gnome-${PV}.tar.gz \
+ file://phrase-lenght.diff;patch=1 \
+ file://connman-applet.desktop"
+
+inherit autotools gtk-icon-cache
+
+do_install_append() {
+ install -d ${D}${datadir}/applications/
+ install ${WORKDIR}/connman-applet.desktop ${D}${datadir}/applications/
+}
+
diff --git a/packages/connman/connman.inc b/packages/connman/connman.inc
index 5ca77231bf..c79c22cabb 100644
--- a/packages/connman/connman.inc
+++ b/packages/connman/connman.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.moblin.org/projects/projects_connman.php"
SECTION = "libs/network"
LICENSE = "GPL"
# we need to define the depends here, the dynamic stuff is too late
-DEPENDS = "dbus glib-2.0 ppp busybox dhclient resolvconf bluez4"
+DEPENDS = "wpa-supplicant dbus glib-2.0 ppp busybox dhclient resolvconf bluez4"
EXTRA_OECONF += "\
ac_cv_path_WPASUPPLICANT=/usr/sbin/wpa_supplicant \
@@ -24,6 +24,10 @@ do_configure_append() {
ln -sf . include/connman
}
+do_compile_append() {
+ sed -i -e s:deny:allow:g src/connman-dbus.conf
+}
+
do_install_append() {
install -m 0755 ${WORKDIR}/connman ${D}${sysconfdir}/init.d/connman
}
@@ -33,7 +37,7 @@ do_stage() {
}
python populate_packages_prepend() {
- depmap = dict( pppd="ppp", udhcp="busybox", dhclient="dhclient", wifi="wpa-supplicant", resolvconf="resolvconf", bluetooth="bluez4" )
+ depmap = dict( pppd="ppp", udhcp="busybox connman-scripts", dhclient="dhclient", wifi="wpa-supplicant", resolvconf="resolvconf", bluetooth="bluez4" )
packages = []
hook = lambda file,pkg,b,c,d:packages.append((file,pkg))
plugin_dir = bb.data.expand('${libdir}/connman/plugins/', d)
diff --git a/packages/connman/connman_0.10.bb b/packages/connman/connman_0.10.bb
new file mode 100644
index 0000000000..dfd631b9bf
--- /dev/null
+++ b/packages/connman/connman_0.10.bb
@@ -0,0 +1,36 @@
+require connman.inc
+PR = "r6"
+
+EXTRA_OECONF += "\
+ --disable-gtk-doc \
+ --enable-debug \
+ --enable-threads \
+ --enable-loopback \
+ --enable-ethernet \
+ --enable-wifi \
+ --disable-wimax \
+ --enable-bluetooth \
+ --enable-udhcp \
+ --enable-dhclient \
+ --enable-resolvconf \
+ --enable-dnsproxy \
+ --disable-novatel \
+ --disable-huawei \
+ --disable-hso \
+ --enable-ppp \
+# needs udev >= 129
+ --disable-udev \
+ --disable-polkit \
+ --enable-client \
+ --enable-fake \
+# --with-udhcpc=PROGRAM \
+# --with-dhclient=PROGRAM \
+# --with-resolvconf=PROGRAM \
+# --with-pppd=PROGRAM \
+"
+
+SRC_URI = "\
+ http://repo.moblin.org/connman/releases/connman-${PV}.tar.gz \
+ file://connman \
+"
+
diff --git a/packages/connman/connman_0.9.bb b/packages/connman/connman_0.9.bb
new file mode 100644
index 0000000000..c8f0d2ba55
--- /dev/null
+++ b/packages/connman/connman_0.9.bb
@@ -0,0 +1,36 @@
+require connman.inc
+PR = "r4"
+
+EXTRA_OECONF += "\
+ --disable-gtk-doc \
+ --enable-debug \
+ --enable-threads \
+ --enable-loopback \
+ --enable-ethernet \
+ --enable-wifi \
+ --disable-wimax \
+ --enable-bluetooth \
+ --enable-udhcp \
+ --enable-dhclient \
+ --enable-resolvconf \
+ --enable-dnsproxy \
+ --disable-novatel \
+ --disable-huawei \
+ --disable-hso \
+ --enable-ppp \
+# needs udev >= 129
+ --disable-udev \
+ --disable-polkit \
+ --enable-client \
+ --enable-fake \
+# --with-udhcpc=PROGRAM \
+# --with-dhclient=PROGRAM \
+# --with-resolvconf=PROGRAM \
+# --with-pppd=PROGRAM \
+"
+
+SRC_URI = "\
+ ftp://ftp.moblin.org/connman/releases/connman-${PV}.tar.gz \
+ file://connman \
+"
+
diff --git a/packages/connman/files/connman-applet.desktop b/packages/connman/files/connman-applet.desktop
new file mode 100644
index 0000000000..ad17682507
--- /dev/null
+++ b/packages/connman/files/connman-applet.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Connection Manager
+Comment=Connection Manager applet
+Icon=stock_internet
+Exec=connman-applet
+Terminal=false
+Type=Application
+Categories=Network;GTK
+
diff --git a/packages/connman/files/phrase-lenght.diff b/packages/connman/files/phrase-lenght.diff
new file mode 100644
index 0000000000..383c86cd3a
--- /dev/null
+++ b/packages/connman/files/phrase-lenght.diff
@@ -0,0 +1,23 @@
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Fri, 30 Jan 2009 14:34:05 +0000 (+0100)
+Subject: Don't limit input field length for passphrases
+X-Git-Url: http://git.moblin.org/cgi-bin/gitweb/gitweb.cgi?p=projects%2Fconnman-gnome.git;a=commitdiff_plain;h=faa1dee0cea9bdf47d91f5665880dab335dd94b4
+
+Don't limit input field length for passphrases
+---
+
+diff --git a/applet/main.c b/applet/main.c
+index cf12a34..434e7c8 100644
+--- a/applet/main.c
++++ b/applet/main.c
+@@ -151,8 +151,8 @@ static void passphrase_dialog(const char *path, const char *name)
+ GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
+
+ entry = gtk_entry_new();
+- gtk_entry_set_max_length(GTK_ENTRY(entry), 16);
+- gtk_entry_set_width_chars(GTK_ENTRY(entry), 16);
++ gtk_entry_set_max_length(GTK_ENTRY(entry), 120);
++ gtk_entry_set_width_chars(GTK_ENTRY(entry), 20);
+ gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
+ gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+ gtk_container_add(GTK_CONTAINER(vbox), entry);
diff --git a/packages/console-tools/console-tools_0.3.2.bb b/packages/console-tools/console-tools_0.3.2.bb
index 1a02827021..9e48c2c572 100644
--- a/packages/console-tools/console-tools_0.3.2.bb
+++ b/packages/console-tools/console-tools_0.3.2.bb
@@ -1,7 +1,7 @@
SECTION = "base"
LICENSE = "GPL"
DESCRIPTION = "Allows you to set-up and manipulate the Linux console."
-PR = "r3"
+PR = "r4"
SRC_URI = "${SOURCEFORGE_MIRROR}/lct/console-tools-${PV}.tar.gz \
file://codepage.patch;patch=1 \
@@ -32,17 +32,20 @@ do_install () {
mv ${D}${bindir}/chvt ${D}${bindir}/chvt.${PN}
mv ${D}${bindir}/deallocvt ${D}${bindir}/deallocvt.${PN}
mv ${D}${bindir}/openvt ${D}${bindir}/openvt.${PN}
+ mv ${D}${bindir}/showkey ${D}${bindir}/showkey.${PN}
}
pkg_postinst_${PN} () {
update-alternatives --install ${bindir}/chvt chvt chvt.${PN} 100
update-alternatives --install ${bindir}/deallocvt deallocvt deallocvt.${PN} 100
update-alternatives --install ${bindir}/openvt openvt openvt.${PN} 100
+ update-alternatives --install ${bindir}/showkey showkey showkey.${PN} 100
}
pkg_prerm_${PN} () {
update-alternatives --remove chvt chvt.${PN}
update-alternatives --remove deallocvt deallocvt.${PN}
update-alternatives --remove openvt openvt.${PN}
+ update-alternatives --remove showkey showkey.${PN}
}
diff --git a/packages/coreutils/coreutils-5.0/configure.patch b/packages/coreutils/coreutils-5.0/configure.patch
deleted file mode 100644
index 5678c97997..0000000000
--- a/packages/coreutils/coreutils-5.0/configure.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- coreutils-5.0/configure.ac~configure
-+++ coreutils-5.0/configure.ac
-@@ -15,6 +15,7 @@
- AC_PROG_GCC_TRADITIONAL
- AC_PROG_RANLIB
- AC_PROG_LN_S
-+AC_PROG_YACC
- AC_AIX
- AC_MINIX
-
-@@ -28,6 +29,8 @@
- OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS hostid\$(EXEEXT)"
- MAN="$MAN hostid.1")
-
-+AC_FUNC_ALLOCA
-+
- jm_MACROS
-
- AC_HEADER_TIOCGWINSZ()
---- coreutils-5.0/configure.ac 2004-01-23 14:49:55.000000000 -0500
-+++ coreutils-5.0/configure.ac 2004-01-23 14:41:46.000000000 -0500
-@@ -147,7 +147,7 @@
- fi
- fi
-
--AC_DEFUN(jm_DUMMY_1,
-+AC_DEFUN([jm_DUMMY_1],
- [
- AC_REQUIRE([jm_PREREQ_READUTMP])
- if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then
---- coreutils-5.0/m4/nanosleep.m4 2001-09-17 17:44:03.000000000 -0400
-+++ coreutils-5.0/m4/nanosleep.m4 2004-01-23 14:47:18.000000000 -0500
-@@ -12,6 +12,9 @@
- # Solaris 2.5.1 needs -lposix4 to get the nanosleep function.
- # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
- AC_SEARCH_LIBS(nanosleep, [rt posix4], [LIB_NANOSLEEP=$ac_cv_search_nanosleep])
-+ if test "$ac_cv_search_nanosleep" = "none required"; then
-+ LIB_NANOSLEEP=
-+ fi
- AC_SUBST(LIB_NANOSLEEP)
-
- AC_CACHE_CHECK([whether nanosleep works],
diff --git a/packages/coreutils/coreutils-5.0/malloc.patch b/packages/coreutils/coreutils-5.0/malloc.patch
deleted file mode 100644
index 079b57b94e..0000000000
--- a/packages/coreutils/coreutils-5.0/malloc.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#
-# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- coreutils-5.0/lib/putenv.c~malloc
-+++ coreutils-5.0/lib/putenv.c
-@@ -34,9 +34,11 @@
- char *malloc ();
- void free ();
-
-+#if 0
- #if defined (__GNU_LIBRARY__) || defined (HAVE_STRING_H)
- # include <string.h>
- #endif
-+#endif
- #if defined (__GNU_LIBRARY__) || defined (HAVE_UNISTD_H)
- # include <unistd.h>
- #endif
diff --git a/packages/coreutils/coreutils-5.1.3/install-cross.patch b/packages/coreutils/coreutils-5.1.3/install-cross.patch
deleted file mode 100644
index 98ba3d916c..0000000000
--- a/packages/coreutils/coreutils-5.1.3/install-cross.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- src/install.c~ 2003-08-09 18:46:45.000000000 +0100
-+++ src/install.c 2004-03-27 18:38:45.000000000 +0000
-@@ -516,7 +516,14 @@
- strip (const char *path)
- {
- int status;
-- pid_t pid = fork ();
-+ pid_t pid;
-+ char *strip_name;
-+
-+ strip_name = getenv ("STRIP");
-+ if (strip_name == NULL)
-+ strip_name = "strip";
-+
-+ pid = fork ();
-
- switch (pid)
- {
-@@ -524,7 +531,7 @@
- error (EXIT_FAILURE, errno, _("fork system call failed"));
- break;
- case 0: /* Child. */
-- execlp ("strip", "strip", path, NULL);
-+ execlp (strip_name, "strip", path, NULL);
- error (EXIT_FAILURE, errno, _("cannot run strip"));
- break;
- default: /* Parent. */
diff --git a/packages/coreutils/coreutils-5.1.3/man.patch b/packages/coreutils/coreutils-5.1.3/man.patch
deleted file mode 100644
index b067c380e2..0000000000
--- a/packages/coreutils/coreutils-5.1.3/man.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- coreutils-5.1.3/configure.ac~man 2004-01-25 16:57:15.000000000 -0600
-+++ coreutils-5.1.3/configure.ac 2004-06-29 14:22:10.000000000 -0500
-@@ -232,6 +232,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.1.3/Makefile.am~man 2003-11-09 14:23:02.000000000 -0600
-+++ coreutils-5.1.3/Makefile.am 2004-06-29 14:18:14.000000000 -0500
-@@ -1,6 +1,11 @@
- ## Process this file with automake to produce Makefile.in -*-Makefile-*-
-
-+if ENABLE_MANPAGES
- SUBDIRS = lib src doc man m4 po tests
-+else
-+SUBDIRS = lib src doc m4 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-5.1.3/rename-eaccess.patch b/packages/coreutils/coreutils-5.1.3/rename-eaccess.patch
deleted file mode 100644
index cde2731477..0000000000
--- a/packages/coreutils/coreutils-5.1.3/rename-eaccess.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-# On Ubuntu edgy (and perhaps other distributions), eaccess is provided by
-# unistd.h - This renames the function so as not to conflict.
-
---- coreutils-5.1.3/src/test.c.old 2006-08-17 15:29:41.000000000 +0100
-+++ coreutils-5.1.3/src/test.c 2006-08-17 15:30:44.000000000 +0100
-@@ -125,7 +125,7 @@
- /* Do the same thing access(2) does, but use the effective uid and gid. */
-
- static int
--eaccess (char const *file, int mode)
-+_eaccess (char const *file, int mode)
- {
- static int have_ids;
- static uid_t uid, euid;
-@@ -158,7 +158,7 @@
- return result;
- }
- #else
--# define eaccess(F, M) euidaccess (F, M)
-+# define _eaccess(F, M) euidaccess (F, M)
- #endif
-
- /* Increment our position in the argument list. Check that we're not
-@@ -623,17 +623,17 @@
-
- case 'r': /* file is readable? */
- unary_advance ();
-- value = -1 != eaccess (argv[pos - 1], R_OK);
-+ value = -1 != _eaccess (argv[pos - 1], R_OK);
- return (TRUE == value);
-
- case 'w': /* File is writable? */
- unary_advance ();
-- value = -1 != eaccess (argv[pos - 1], W_OK);
-+ value = -1 != _eaccess (argv[pos - 1], W_OK);
- return (TRUE == value);
-
- case 'x': /* File is executable? */
- unary_advance ();
-- value = -1 != eaccess (argv[pos - 1], X_OK);
-+ value = -1 != _eaccess (argv[pos - 1], X_OK);
- return (TRUE == value);
-
- case 'O': /* File is owned by you? */
diff --git a/packages/coreutils/coreutils-5.3.0/futimens.patch b/packages/coreutils/coreutils-5.3.0/futimens.patch
deleted file mode 100644
index 3cb2b6ab32..0000000000
--- a/packages/coreutils/coreutils-5.3.0/futimens.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-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/coreutils/coreutils-5.3.0/install-cross.patch b/packages/coreutils/coreutils-5.3.0/install-cross.patch
deleted file mode 100644
index 98ba3d916c..0000000000
--- a/packages/coreutils/coreutils-5.3.0/install-cross.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- src/install.c~ 2003-08-09 18:46:45.000000000 +0100
-+++ src/install.c 2004-03-27 18:38:45.000000000 +0000
-@@ -516,7 +516,14 @@
- strip (const char *path)
- {
- int status;
-- pid_t pid = fork ();
-+ pid_t pid;
-+ char *strip_name;
-+
-+ strip_name = getenv ("STRIP");
-+ if (strip_name == NULL)
-+ strip_name = "strip";
-+
-+ pid = fork ();
-
- switch (pid)
- {
-@@ -524,7 +531,7 @@
- error (EXIT_FAILURE, errno, _("fork system call failed"));
- break;
- case 0: /* Child. */
-- execlp ("strip", "strip", path, NULL);
-+ execlp (strip_name, "strip", path, NULL);
- error (EXIT_FAILURE, errno, _("cannot run strip"));
- break;
- default: /* Parent. */
diff --git a/packages/coreutils/coreutils-5.3.0/man.patch b/packages/coreutils/coreutils-5.3.0/man.patch
deleted file mode 100644
index 5060e4fdff..0000000000
--- a/packages/coreutils/coreutils-5.3.0/man.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#
-# 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-5.3.0/rename-tee-for-glibc2.5.patch b/packages/coreutils/coreutils-5.3.0/rename-tee-for-glibc2.5.patch
deleted file mode 100644
index 148a5f4f8f..0000000000
--- a/packages/coreutils/coreutils-5.3.0/rename-tee-for-glibc2.5.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Glibc 2.5 has a function called tee which conflicts with the same function
-in coreutils. This patch renames the function to tee_files (as is done in
-the newer coreutils versions.)
-
---- coreutils-5.3.0/src/tee.c 2006/10/23 07:35:00 1.1
-+++ coreutils-5.3.0/src/tee.c 2006/10/23 07:35:16
-@@ -31,7 +31,7 @@
-
- #define AUTHORS "Mike Parker", "Richard M. Stallman", "David MacKenzie"
-
--static bool tee (int nfiles, const char **files);
-+static bool tee_files (int nfiles, const char **files);
-
- /* If true, append to output files rather than truncating them. */
- static bool append;
-@@ -121,7 +121,7 @@
- /* Do *not* warn if tee is given no file arguments.
- POSIX requires that it work when given no arguments. */
-
-- ok = tee (argc - optind, (const char **) &argv[optind]);
-+ ok = tee_files (argc - optind, (const char **) &argv[optind]);
- if (close (STDIN_FILENO) != 0)
- error (EXIT_FAILURE, errno, _("standard input"));
-
-@@ -133,7 +133,7 @@
- Return true if successful. */
-
- static bool
--tee (int nfiles, const char **files)
-+tee_files (int nfiles, const char **files)
- {
- FILE **descriptors;
- char buffer[BUFSIZ];
diff --git a/packages/coreutils/coreutils-6.0/coreutils-install-use-STRIP.patch b/packages/coreutils/coreutils-6.0/coreutils-install-use-STRIP.patch
new file mode 100644
index 0000000000..1af9fb97b6
--- /dev/null
+++ b/packages/coreutils/coreutils-6.0/coreutils-install-use-STRIP.patch
@@ -0,0 +1,29 @@
+Index: coreutils-6.0/src/install.c
+===================================================================
+--- coreutils-6.0.orig/src/install.c 2009-03-04 15:37:45.000000000 -0800
++++ coreutils-6.0/src/install.c 2009-03-04 15:38:57.000000000 -0800
+@@ -526,7 +526,14 @@
+ strip (char const *name)
+ {
+ int status;
+- pid_t pid = fork ();
++ pid_t pid;
++ char *strip_name;
++
++ strip_name = getenv ("STRIP");
++ if (strip_name == NULL)
++ strip_name = "strip";
++
++ pid = fork ();
+
+ switch (pid)
+ {
+@@ -534,7 +541,7 @@
+ error (EXIT_FAILURE, errno, _("fork system call failed"));
+ break;
+ case 0: /* Child. */
+- execlp ("strip", "strip", name, NULL);
++ execlp (strip_name, "strip", name, NULL);
+ error (EXIT_FAILURE, errno, _("cannot run strip"));
+ break;
+ default: /* Parent. */
diff --git a/packages/coreutils/coreutils-7.1/automake-version.patch b/packages/coreutils/coreutils-7.1/automake-version.patch
new file mode 100644
index 0000000000..497ef15385
--- /dev/null
+++ b/packages/coreutils/coreutils-7.1/automake-version.patch
@@ -0,0 +1,13 @@
+Index: coreutils-7.1/configure.ac
+===================================================================
+--- coreutils-7.1.orig/configure.ac
++++ coreutils-7.1/configure.ac
+@@ -32,7 +32,7 @@
+ AC_CONFIG_AUX_DIR([build-aux])
+ AC_CONFIG_HEADERS([lib/config.h:lib/config.hin])
+
+-AM_INIT_AUTOMAKE([1.10a dist-xz])
++AM_INIT_AUTOMAKE([1.10.2])
+
+ AC_PROG_CC_STDC
+ AM_PROG_CC_C_O
diff --git a/packages/coreutils/coreutils-7.1/man.patch b/packages/coreutils/coreutils-7.1/man.patch
new file mode 100644
index 0000000000..3de7c01b0b
--- /dev/null
+++ b/packages/coreutils/coreutils-7.1/man.patch
@@ -0,0 +1,47 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: coreutils-7.1/configure.ac
+===================================================================
+--- coreutils-7.1.orig/configure.ac
++++ coreutils-7.1/configure.ac
+@@ -373,6 +373,20 @@
+ # For a test of uniq: it uses the $LOCALE_FR envvar.
+ gt_LOCALE_FR
+
++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
+Index: coreutils-7.1/Makefile.am
+===================================================================
+--- coreutils-7.1.orig/Makefile.am
++++ coreutils-7.1/Makefile.am
+@@ -15,7 +15,12 @@
+ # You should have received a copy of the GNU General Public License
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
+
++if ENABLE_MANPAGES
+ SUBDIRS = lib src doc man po tests gnulib-tests
++else
++SUBDIRS = lib src doc po tests gnulib-tests
++endif
++
+ EXTRA_DIST = cfg.mk maint.mk \
+ .prev-version THANKS-to-translators THANKStt.in \
+ .version \
diff --git a/packages/coreutils/coreutils-7.1/oe-old-tools.patch b/packages/coreutils/coreutils-7.1/oe-old-tools.patch
new file mode 100644
index 0000000000..495da36cf7
--- /dev/null
+++ b/packages/coreutils/coreutils-7.1/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-7.1/onceonly.m4 b/packages/coreutils/coreutils-7.1/onceonly.m4
new file mode 100644
index 0000000000..f6fec37cbf
--- /dev/null
+++ b/packages/coreutils/coreutils-7.1/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-5.3.0/uptime-pow-lib.patch b/packages/coreutils/coreutils-7.1/uptime-pow-lib.patch
index 5eb3fca676..5eb3fca676 100644
--- a/packages/coreutils/coreutils-5.3.0/uptime-pow-lib.patch
+++ b/packages/coreutils/coreutils-7.1/uptime-pow-lib.patch
diff --git a/packages/coreutils/coreutils-native_5.1.3.bb b/packages/coreutils/coreutils-native_5.1.3.bb
deleted file mode 100644
index ee90981895..0000000000
--- a/packages/coreutils/coreutils-native_5.1.3.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-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-native_5.3.0.bb b/packages/coreutils/coreutils-native_5.3.0.bb
deleted file mode 100644
index ee90981895..0000000000
--- a/packages/coreutils/coreutils-native_5.3.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-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-native_6.0.bb b/packages/coreutils/coreutils-native_6.0.bb
index ee90981895..057dfa6d80 100644
--- a/packages/coreutils/coreutils-native_6.0.bb
+++ b/packages/coreutils/coreutils-native_6.0.bb
@@ -1,5 +1,3 @@
-SECTION = "base"
-
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/coreutils-${PV}"
S = "${WORKDIR}/coreutils-${PV}"
diff --git a/packages/coreutils/coreutils-native_7.1.bb b/packages/coreutils/coreutils-native_7.1.bb
new file mode 100644
index 0000000000..057dfa6d80
--- /dev/null
+++ b/packages/coreutils/coreutils-native_7.1.bb
@@ -0,0 +1,5 @@
+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.inc b/packages/coreutils/coreutils.inc
index 481c32bb3d..38dbd1d4f2 100644
--- a/packages/coreutils/coreutils.inc
+++ b/packages/coreutils/coreutils.inc
@@ -1,4 +1,5 @@
DESCRIPTION = "A collection of core GNU utilities."
+HOMEPAGE = "http://www.gnu.org/software/coreutils"
LICENSE = "GPL"
SECTION = "base"
RREPLACES = "textutils shellutils fileutils"
diff --git a/packages/coreutils/coreutils_5.0.bb b/packages/coreutils/coreutils_5.0.bb
deleted file mode 100644
index 74e27a8d70..0000000000
--- a/packages/coreutils/coreutils_5.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require coreutils.inc
-
-PR = "r1"
-
-SRC_URI = "${GNU_MIRROR}/coreutils/coreutils-${PV}.tar.gz \
- file://malloc.patch;patch=1 \
- file://configure.patch;patch=1"
-
-export EXTRA_OEMAKE="'SUBDIRS=lib src doc m4 po tests' MAKEFLAGS="
diff --git a/packages/coreutils/coreutils_5.1.1.bb b/packages/coreutils/coreutils_5.1.1.bb
deleted file mode 100644
index e8ae798691..0000000000
--- a/packages/coreutils/coreutils_5.1.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require coreutils.inc
-
-PR = "r1"
-
-SRC_URI = "ftp://alpha.gnu.org/gnu/coreutils/coreutils-${PV}.tar.bz2"
diff --git a/packages/coreutils/coreutils_5.1.3.bb b/packages/coreutils/coreutils_5.1.3.bb
deleted file mode 100644
index da9b214af5..0000000000
--- a/packages/coreutils/coreutils_5.1.3.bb
+++ /dev/null
@@ -1,81 +0,0 @@
-require coreutils.inc
-
-PR = "r8"
-
-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-eaccess.patch;patch=1"
-
-# [ 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_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/coreutils/coreutils_5.3.0.bb b/packages/coreutils/coreutils_5.3.0.bb
deleted file mode 100644
index 2a9b09196f..0000000000
--- a/packages/coreutils/coreutils_5.3.0.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-require coreutils.inc
-
-PR = "r3"
-
-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://futimens.patch;patch=1"
-
-# [ gets a special treatment and is not included in this
-bindir_progs = "basename cksum comm csplit cut df 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_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/coreutils/coreutils_6.0.bb b/packages/coreutils/coreutils_6.0.bb
index 02fc70efb5..d0d082bc63 100644
--- a/packages/coreutils/coreutils_6.0.bb
+++ b/packages/coreutils/coreutils_6.0.bb
@@ -1,14 +1,15 @@
require coreutils.inc
-PR = "r2"
-
-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://futimens.patch;patch=1 \
- file://onceonly.m4"
+PR = "r3"
+
+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://futimens.patch;patch=1 \
+ file://coreutils-install-use-STRIP.patch;patch=1 \
+ file://onceonly.m4 \
+"
# [ gets a special treatment and is not included in this
bindir_progs = "basename cksum comm csplit cut df dir dircolors dirname du \
diff --git a/packages/coreutils/coreutils_7.1.bb b/packages/coreutils/coreutils_7.1.bb
new file mode 100644
index 0000000000..6488e11a79
--- /dev/null
+++ b/packages/coreutils/coreutils_7.1.bb
@@ -0,0 +1,92 @@
+require coreutils.inc
+PR = "r0"
+
+# not thoroughly testes yet
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "\
+ ftp://ftp.gnu.org/gnu/coreutils/coreutils-${PV}.tar.gz \
+ file://automake-version.patch;patch=1 \
+ file://man.patch;patch=1 \
+ file://onceonly.m4 \
+"
+
+# [ gets a special treatment and is not included in this
+bindir_progs = "basename cksum comm csplit cut df 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
+ if [ -e ${D}${bindir}/hostname ]; then
+ mv ${D}${bindir}/hostname ${D}${base_bindir}/hostname.${PN}
+ fi
+ if [ -e ${D}${bindir}/uptime ]; then
+ mv ${D}${bindir}/uptime ${D}${bindir}/uptime.${PN}
+ fi
+}
+
+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/cups/cups-1.3.8/use_echo_only_in_init.patch b/packages/cups/cups-1.3.8/use_echo_only_in_init.patch
new file mode 100644
index 0000000000..21ff0e535b
--- /dev/null
+++ b/packages/cups/cups-1.3.8/use_echo_only_in_init.patch
@@ -0,0 +1,11 @@
+--- a/init/cups.sh.in.orig 2008-10-04 16:50:46.000000000 -0300
++++ b/init/cups.sh.in 2008-10-04 16:51:39.000000000 -0300
+@@ -68,7 +68,7 @@
+ ECHO_ERROR=:
+ ;;
+
+- Linux*)
++ DISABLELinux*)
+ IS_ON=/bin/true
+ if test -f /etc/init.d/functions; then
+ . /etc/init.d/functions
diff --git a/packages/cups/cups_1.2.10.bb b/packages/cups/cups_1.2.10.bb
deleted file mode 100644
index 2361565a91..0000000000
--- a/packages/cups/cups_1.2.10.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require cups.inc
-
-PR = "r3"
-
diff --git a/packages/cups/cups_1.2.12.bb b/packages/cups/cups_1.2.12.bb
index 662f0ec8ff..bbe3c5d84f 100644
--- a/packages/cups/cups_1.2.12.bb
+++ b/packages/cups/cups_1.2.12.bb
@@ -1,5 +1,2 @@
require cups.inc
-
PR = "r1"
-
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/cups/cups_1.3.8.bb b/packages/cups/cups_1.3.8.bb
new file mode 100644
index 0000000000..e9fd9850e9
--- /dev/null
+++ b/packages/cups/cups_1.3.8.bb
@@ -0,0 +1,8 @@
+require cups.inc
+
+SRC_URI += "file://use_echo_only_in_init.patch;patch=1"
+PR = "r1"
+
+DEFAULT_PREFERENCE = "-1"
+
+EXTRA_OECONF += " --disable-gssapi "
diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc
index 64ef21cbd4..047b33a71c 100644
--- a/packages/dbus/dbus.inc
+++ b/packages/dbus/dbus.inc
@@ -79,8 +79,10 @@ fi
MESSAGEUSER=messagebus
MESSAGEHOME=/var/run/dbus
mkdir -p $MESSAGEHOME || true
-chgrp "$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || addgroup "$MESSAGEUSER"
-chown "$MESSAGEUSER"."$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || adduser --system --home "$MESSAGEHOME" --no-create-home --disabled-password --ingroup "$MESSAGEUSER" "$MESSAGEUSER"
+grep -q ^$MESSAGEUSER: /etc/group || addgroup "$MESSAGEUSER"
+chgrp "$MESSAGEUSER" "$MESSAGEHOME"
+grep -q ^$MESSAGEUSER: /etc/passwd || adduser --system --home "$MESSAGEHOME" --no-create-home --disabled-password --ingroup "$MESSAGEUSER" "$MESSAGEUSER"
+chown "$MESSAGEUSER"."$MESSAGEUSER" "$MESSAGEHOME"
grep -q netdev: /etc/group || addgroup netdev
chmod u+s /usr/libexec/dbus-daemon-launch-helper
}
diff --git a/packages/dbus/dbus_1.0.3.bb b/packages/dbus/dbus_1.0.3.bb
index 6f71d062ce..2589cfef53 100644
--- a/packages/dbus/dbus_1.0.3.bb
+++ b/packages/dbus/dbus_1.0.3.bb
@@ -1,4 +1,4 @@
require dbus.inc
-PR = "r15"
+PR = "r16"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/dbus/dbus_1.2.1.bb b/packages/dbus/dbus_1.2.1.bb
index e14523daaf..2a663f4bfa 100644
--- a/packages/dbus/dbus_1.2.1.bb
+++ b/packages/dbus/dbus_1.2.1.bb
@@ -1,3 +1,3 @@
include dbus.inc
-PR = "r9"
+PR = "r10"
diff --git a/packages/ddccontrol/ddccontrol-db_20061014.bb b/packages/ddccontrol/ddccontrol-db_20061014.bb
new file mode 100644
index 0000000000..acea818b87
--- /dev/null
+++ b/packages/ddccontrol/ddccontrol-db_20061014.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "ddccontrol - softwarewise change monitor settings"
+LICENSE = "GPLv2"
+HOMEPAGE = "http://sourceforge.net/projects/ddccontrol/"
+
+PR = "r0"
+
+inherit autotools
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ddccontrol/ddccontrol-db-${PV}.tar.bz2"
+
diff --git a/packages/ddccontrol/ddccontrol_0.4.2.bb b/packages/ddccontrol/ddccontrol_0.4.2.bb
new file mode 100644
index 0000000000..2099ebeb4e
--- /dev/null
+++ b/packages/ddccontrol/ddccontrol_0.4.2.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "ddccontrol - softwarewise change monitor settings"
+LICENSE = "GPLv2"
+HOMEPAGE = "http://sourceforge.net/projects/ddccontrol/"
+
+PR = "r0"
+
+inherit autotools
+
+DEPENDS = "pciutils libxml2 gtk+ ddccontrol-db"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ddccontrol/ddccontrol-${PV}.tar.bz2"
+
+FILES_${PN}+= "${datadir}/icons/Bluecurve/48x48/apps/gddccontrol.png"
diff --git a/packages/dhcdbd/dhcdbd_1.14.bb b/packages/dhcdbd/dhcdbd_1.14.bb
index 2da37f4466..55d3c72899 100644
--- a/packages/dhcdbd/dhcdbd_1.14.bb
+++ b/packages/dhcdbd/dhcdbd_1.14.bb
@@ -6,7 +6,7 @@ DEPENDS = "dbus"
PR = "r1"
-SRC_URI = "http://people.redhat.com/jvdias/dhcdbd/dhcdbd-${PV}.tar.gz \
+SRC_URI = "https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-${PV}.tar.bz2 \
file://dhcdbd-1.14-pkgconfig_dbus.patch;patch=1 \
file://dbus-api-fix.patch;patch=1 \
file://dhcdbd"
diff --git a/packages/dhcdbd/dhcdbd_1.16.bb b/packages/dhcdbd/dhcdbd_1.16.bb
index d2ef7288c8..24572fb259 100644
--- a/packages/dhcdbd/dhcdbd_1.16.bb
+++ b/packages/dhcdbd/dhcdbd_1.16.bb
@@ -4,7 +4,7 @@ SECTION = "net"
LICENSE = "GPL"
DEPENDS = "dbus"
-SRC_URI = "http://people.redhat.com/dcantrel/dhcdbd/dhcdbd-${PV}.tar.gz \
+SRC_URI = "https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-${PV}.tar.bz2 \
file://dhcdbd-1.14-pkgconfig_dbus.patch;patch=1 \
file://dhcdbd"
diff --git a/packages/dhcdbd/dhcdbd_2.0.bb b/packages/dhcdbd/dhcdbd_2.0.bb
index 8b5bf3bb83..eedfe51d9a 100644
--- a/packages/dhcdbd/dhcdbd_2.0.bb
+++ b/packages/dhcdbd/dhcdbd_2.0.bb
@@ -5,7 +5,7 @@ DEPENDS = "dbus"
RDEPENDS = "dhcp-client"
PR = "r1"
-SRC_URI = "http://dcantrel.fedorapeople.org/dhcdbd/dhcdbd-${PV}.tar.bz2 \
+SRC_URI = "https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-${PV}.tar.bz2 \
file://dbus_connection_unref.patch;patch=1 \
file://paths.patch;patch=1 \
file://no-ext-options.patch;patch=1 \
diff --git a/packages/dhcdbd/dhcdbd_3.0.bb b/packages/dhcdbd/dhcdbd_3.0.bb
index a2467ee921..f30e5920ea 100644
--- a/packages/dhcdbd/dhcdbd_3.0.bb
+++ b/packages/dhcdbd/dhcdbd_3.0.bb
@@ -5,7 +5,7 @@ DEPENDS = "dbus"
RDEPENDS = "dhcp-client"
PR = "r1"
-SRC_URI = "http://dcantrel.fedorapeople.org/dhcdbd/dhcdbd-${PV}.tar.bz2 \
+SRC_URI = "https://fedorahosted.org/releases/d/h/dhcdbd/dhcdbd-${PV}.tar.bz2 \
file://dbus_connection_unref.patch;patch=1 \
file://paths.patch;patch=1 \
file://dhcdbd"
diff --git a/packages/dhcp/dhcp_3.0.2.bb b/packages/dhcp/dhcp_3.0.2.bb
index f8d85089fe..faf22b29cf 100644
--- a/packages/dhcp/dhcp_3.0.2.bb
+++ b/packages/dhcp/dhcp_3.0.2.bb
@@ -2,7 +2,7 @@ SECTION = "console/network"
DESCRIPTION = "Internet Software Consortium DHCP package"
HOMEPAGE = "http://www.isc.org/"
LICENSE = "BSD"
-PR = "r7"
+PR = "r8"
SRC_URI = "ftp://ftp.isc.org/isc/dhcp/dhcp-3.0-history/dhcp-${PV}.tar.gz \
file://noattrmode.patch;patch=1 \
file://fixincludes.patch;patch=1 \
@@ -12,6 +12,13 @@ SRC_URI = "ftp://ftp.isc.org/isc/dhcp/dhcp-3.0-history/dhcp-${PV}.tar.gz \
file://init-server file://default-server \
file://dhclient.conf file://dhcpd.conf"
+
+inherit update-rc.d
+
+INITSCRIPT_PACKAGES = "dhcp-server"
+INITSCRIPT_NAME_dhcp-server = dhcp-server
+INITSCRIPT_PARAMS_dhcp-server = "start 30 2 3 4 5 . stop 30 0 1 6 ."
+
do_configure() {
./configure
}
diff --git a/packages/dietlibc/dietlibc_0.31.bb b/packages/dietlibc/dietlibc_0.31.bb
new file mode 100644
index 0000000000..7720588b60
--- /dev/null
+++ b/packages/dietlibc/dietlibc_0.31.bb
@@ -0,0 +1,47 @@
+SECTION = "libs"
+DESCRIPTION = "The diet libc is a libc that is optimized for small size. \
+It can be used to create small statically linked binaries"
+LICENSE = "GPLv2"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/dietlibc/dietlibc-${PV}.tar.bz2 \
+ file://ccache.patch;patch=1 \
+ file://ceil.patch;patch=1 \
+ file://ai_addrconfig.patch;patch=1 \
+ "
+
+#otherwise the whole run scripts got broken
+do_configure () {
+ echo "moo" > /dev/null 2>&1
+}
+
+do_compile () {
+ oe_runmake all CC="${BUILD_CC}" CFLAGS="${BUILD_CFLAGS}" prefix=${STAGING_DIR_TARGET}/lib/dietlibc
+ oe_runmake all ARCH="${TARGET_ARCH}" CROSS=" " prefix=${STAGING_DIR_TARGET}/lib/dietlibc
+}
+
+#no packages needed, all binaries will be compiled with -static
+PACKAGES = " "
+
+#otherwise the whole run scripts got broken
+do_install () {
+ echo "moo" > /dev/null 2>&1
+}
+
+do_stage () {
+ DIETLIBC_BUILD_ARCH=`echo ${BUILD_ARCH} | sed -e s'/.86/386/'`
+ DIETLIBC_TARGET_ARCH=`echo ${TARGET_ARCH} | sed -e s'/.86/386/'`
+ rm -rf ${STAGING_DIR_TARGET}/lib/dietlibc || true
+ rm ${CROSS_DIR}/bin/diet || true
+ install -d ${STAGING_DIR_TARGET}/lib/dietlibc/lib-${DIETLIBC_TARGET_ARCH}
+ install -d ${STAGING_DIR_TARGET}/lib/dietlibc/include
+ for i in `find include -name \*.h`; do install -m 644 -D $i ${STAGING_DIR_TARGET}/lib/dietlibc/$i; done
+
+ install -m755 bin-${DIETLIBC_BUILD_ARCH}/diet-i ${CROSS_DIR}/bin/diet
+
+ cd bin-${DIETLIBC_TARGET_ARCH}
+ install -m 644 start.o libm.a libpthread.a librpc.a \
+ liblatin1.a libcompat.a libcrypt.a \
+ ${STAGING_DIR_TARGET}/lib/dietlibc/lib-${DIETLIBC_TARGET_ARCH}
+ install -m 644 dietlibc.a ${STAGING_DIR_TARGET}/lib/dietlibc/lib-${DIETLIBC_TARGET_ARCH}/libc.a
+}
+
diff --git a/packages/dietlibc/files/ai_addrconfig.patch b/packages/dietlibc/files/ai_addrconfig.patch
new file mode 100644
index 0000000000..5687e9f0f4
--- /dev/null
+++ b/packages/dietlibc/files/ai_addrconfig.patch
@@ -0,0 +1,13 @@
+Index: dietlibc-0.31/include/sys/socket.h
+===================================================================
+--- dietlibc-0.31.orig/include/sys/socket.h 2009-02-03 13:39:38.475445568 +0100
++++ dietlibc-0.31/include/sys/socket.h 2009-02-03 13:39:55.742105983 +0100
+@@ -439,6 +439,8 @@
+ #define EAI_AGAIN -10
+ #define EAI_SYSTEM -11
+
++#define AI_ADDRCONFIG 0
++
+ #define AI_NUMERICHOST 1
+ #define AI_CANONNAME 2
+ #define AI_PASSIVE 4
diff --git a/packages/dietlibc/files/ccache.patch b/packages/dietlibc/files/ccache.patch
new file mode 100644
index 0000000000..839b5b99a0
--- /dev/null
+++ b/packages/dietlibc/files/ccache.patch
@@ -0,0 +1,74 @@
+Index: dietlibc-0.31/diet.c
+===================================================================
+--- dietlibc-0.31.orig/diet.c 2006-08-27 15:49:00.000000000 +0200
++++ dietlibc-0.31/diet.c 2009-01-31 22:56:06.828080683 +0100
+@@ -127,7 +127,12 @@
+ }
+ }
+ {
+- char *cc=argv[1];
++ char *cc;
++ if (!strcmp(argv[1],"ccache")) {
++ cc=argv[2];
++ } else {
++ cc=argv[1];
++ }
+ char *tmp=strchr(cc,0)-2;
+ char *tmp2,*tmp3;
+ if (tmp<cc) goto donttouch;
+@@ -139,7 +144,7 @@
+ if (tmp3<tmp2) tmp2=tmp3;
+ if (tmp2-cc>90) error("platform name too long!\n");
+ shortplatform=platform+len;
+- memmove(shortplatform,argv[1],(size_t)(tmp2-cc));
++ memmove(shortplatform,cc,(size_t)(tmp2-cc));
+ platform[tmp2-cc+len]=0;
+ if (shortplatform[0]=='i' && shortplatform[2]=='8' && shortplatform[3]=='6') shortplatform[1]='3';
+ } else {
+@@ -285,6 +290,9 @@
+
+ dest=newargv;
+ *dest++=argv[1];
++ if (strcmp(argv[1],"ccache") == 0) {
++ *dest++=argv[2];
++ }
+ if (argv[2]) {
+ if (!strcmp(argv[2],"-V")) {
+ *dest++=argv[2];
+@@ -294,9 +302,9 @@
+ } else if (!memcmp(argv[2],"-V",2)) {
+ *dest++=argv[2];
+ ++argv;
+- --argc;
+ }
+ }
++
+ #ifndef __DYN_LIB
+ if (_link) { *dest++=(char*)nostdlib; *dest++=dashstatic; *dest++=dashL; }
+ #else
+@@ -314,7 +322,15 @@
+ #ifdef WANT_DYNAMIC
+ if (_link) { *dest++=d; }
+ #endif
+- for (i=2; i<argc; ++i) {
++ if (strcmp(argv[1],"ccache") == 0) {
++ i=3;
++ } else {
++ i=2;
++ }
++ for (i; i<argc; ++i) {
++ if (strstr(argv[i],"isystem") != NULL) {
++ continue;
++ }
+ if (mangleopts)
+ if (argv[i][0]=='-' && (argv[i][1]=='O' || argv[i][1]=='f' ||
+ (argv[i][1]=='m' && argv[i][2]!='3' && argv[i][2]!='6'))) {
+@@ -322,6 +338,8 @@
+ continue;
+ }
+ *dest++=argv[i];
++ *dest--;
++ *dest++;
+ }
+ #ifndef __DYN_LIB
+ if (compile || _link) {
diff --git a/packages/dietlibc/files/ceil.patch b/packages/dietlibc/files/ceil.patch
new file mode 100644
index 0000000000..e2295d27fa
--- /dev/null
+++ b/packages/dietlibc/files/ceil.patch
@@ -0,0 +1,97 @@
+Index: dietlibc-0.31/libm/ceil.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ dietlibc-0.31/libm/ceil.c 2009-02-01 02:54:28.533109301 +0100
+@@ -0,0 +1,92 @@
++/* @(#)s_ceil.c 5.1 93/09/24 */
++/*
++ * ====================================================
++ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
++ *
++ * Developed at SunPro, a Sun Microsystems, Inc. business.
++ * Permission to use, copy, modify, and distribute this
++ * software is freely granted, provided that this notice
++ * is preserved.
++ * ====================================================
++ */
++
++/*
++ * ceil(x)
++ * Return x rounded toward -inf to integral value
++ * Method:
++ * Bit twiddling.
++ * Exception:
++ * Inexact flag raised if x not equal to ceil(x).
++ */
++
++#include <math.h>
++
++typedef union {
++ double value;
++ struct {
++ unsigned int lsw;
++ unsigned int msw;
++ } parts;
++} ieee_double_shape_type;
++
++/* Get two 32 bit ints from a double. */
++
++#define EXTRACT_WORDS(ix0,ix1,d) \
++do { \
++ ieee_double_shape_type ew_u; \
++ ew_u.value = (d); \
++ (ix0) = ew_u.parts.msw; \
++ (ix1) = ew_u.parts.lsw; \
++} while (0)
++
++#define INSERT_WORDS(d,ix0,ix1) \
++do { \
++ ieee_double_shape_type iw_u; \
++ iw_u.parts.msw = (ix0); \
++ iw_u.parts.lsw = (ix1); \
++ (d) = iw_u.value; \
++} while (0)
++
++static const double huge = 1.0e300;
++
++double ceil(double x)
++{
++ int i0,i1,j0;
++ unsigned int i,j;
++ EXTRACT_WORDS(i0,i1,x);
++ j0 = ((i0>>20)&0x7ff)-0x3ff;
++ if(j0<20) {
++ if(j0<0) { /* raise inexact if x != 0 */
++ if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
++ if(i0<0) {i0=0x80000000;i1=0;}
++ else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;}
++ }
++ } else {
++ i = (0x000fffff)>>j0;
++ if(((i0&i)|i1)==0) return x; /* x is integral */
++ if(huge+x>0.0) { /* raise inexact flag */
++ if(i0>0) i0 += (0x00100000)>>j0;
++ i0 &= (~i); i1=0;
++ }
++ }
++ } else if (j0>51) {
++ if(j0==0x400) return x+x; /* inf or NaN */
++ else return x; /* x is integral */
++ } else {
++ i = ((unsigned int)(0xffffffff))>>(j0-20);
++ if((i1&i)==0) return x; /* x is integral */
++ if(huge+x>0.0) { /* raise inexact flag */
++ if(i0>0) {
++ if(j0==20) i0+=1;
++ else {
++ j = i1 + (1<<(52-j0));
++ if(j<i1) i0+=1; /* got a carry */
++ i1 = j;
++ }
++ }
++ i1 &= (~i);
++ }
++ }
++ INSERT_WORDS(x,i0,i1);
++ return x;
++}
diff --git a/packages/directfb/directfb-1.2.7/ts_lib_autotools.patch b/packages/directfb/directfb-1.2.7/ts_lib_autotools.patch
new file mode 100644
index 0000000000..f19c724a00
--- /dev/null
+++ b/packages/directfb/directfb-1.2.7/ts_lib_autotools.patch
@@ -0,0 +1,22 @@
+---
+ configure.in | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+Index: DirectFB-1.2.7/configure.in
+===================================================================
+--- DirectFB-1.2.7.orig/configure.in
++++ DirectFB-1.2.7/configure.in
+@@ -1288,8 +1288,11 @@ fi
+
+ enable_tslib=no
+ if test "$checkfor_tslib" = "yes"; then
+- PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [enable_tslib=yes], [enable_tslib=no,
+- AC_MSG_WARN([*** no tslib -- tslib driver will not be built.])])
++ PKG_CHECK_MODULES([TSLIB], [tslib-1.0 >= 1.0.0], [enable_tslib=yes], [enable_tslib=no])
++ if test "$enable_tslib" = "no"; then
++ PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [enable_tslib=yes], [enable_tslib=no,
++ AC_MSG_WARN([*** no tslib -- tslib driver will not be built.])])
++ fi
+ fi
+
+ enable_ucb1x00_ts=no
diff --git a/packages/directfb/directfb-examples_1.2.0.bb b/packages/directfb/directfb-examples_1.2.0.bb
new file mode 100644
index 0000000000..7fd3f38848
--- /dev/null
+++ b/packages/directfb/directfb-examples_1.2.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "DirectFB extra providers"
+DEPENDS = "directfb"
+SECTION = "libs"
+LICENSE = "GPL"
+
+SRC_URI = " \
+ http://www.directfb.org/downloads/Extras/DirectFB-examples-${PV}.tar.gz \
+ "
+S = "${WORKDIR}/DirectFB-examples-${PV}"
+
+inherit autotools
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/directfb/directfb_1.2.3.bb b/packages/directfb/directfb_1.2.3.bb
index 85e42a1fa3..e4d50a3458 100644
--- a/packages/directfb/directfb_1.2.3.bb
+++ b/packages/directfb/directfb_1.2.3.bb
@@ -1,13 +1,13 @@
require directfb.inc
RV = "1.2-0"
-PR = "r0"
+PR = "r1"
DEPENDS += "sysfsutils"
SRC_URI = " \
http://www.directfb.org/downloads/Old/DirectFB-${PV}.tar.gz \
- file://fix-pkgconfig-cflags.patch;patch=1 \
+ file://directfb-1.2.x-fix-pkgconfig-cflags.patch;patch=1 \
file://mkdfiff.patch;patch=1 \
file://dont-use-linux-config.patch;patch=1 \
file://ts_lib_autotools.patch;patch=1 \
diff --git a/packages/directfb/directfb_1.2.7.bb b/packages/directfb/directfb_1.2.7.bb
new file mode 100644
index 0000000000..be6a6daa52
--- /dev/null
+++ b/packages/directfb/directfb_1.2.7.bb
@@ -0,0 +1,28 @@
+require directfb.inc
+
+RV = "1.2-0"
+PR = "r0"
+
+DEPENDS += "sysfsutils"
+
+SRC_URI = " \
+ http://directfb.org/downloads/Core/DirectFB-${PV}.tar.gz \
+ file://directfb-1.2.x-fix-pkgconfig-cflags.patch;patch=1 \
+ file://mkdfiff.patch;patch=1 \
+ file://dont-use-linux-config.patch;patch=1 \
+ file://ts_lib_autotools.patch;patch=1 \
+"
+
+EXTRA_OECONF = "\
+ --enable-freetype=yes \
+ --enable-zlib \
+ --with-gfxdrivers=none \
+ --disable-libmpeg3 \
+ --disable-sdl \
+ --disable-vnc \
+ --disable-x11 \
+"
+
+LDFLAGS_append = ""
+
+LEAD_SONAME = "libdirectfb-1.2.so.0"
diff --git a/packages/directfb/directfb-1.2.3/fix-pkgconfig-cflags.patch b/packages/directfb/files/directfb-1.2.x-fix-pkgconfig-cflags.patch
index 745c561cc0..745c561cc0 100644
--- a/packages/directfb/directfb-1.2.3/fix-pkgconfig-cflags.patch
+++ b/packages/directfb/files/directfb-1.2.x-fix-pkgconfig-cflags.patch
diff --git a/packages/distcc/distcc_3.1.bb b/packages/distcc/distcc_3.1.bb
new file mode 100644
index 0000000000..879f676519
--- /dev/null
+++ b/packages/distcc/distcc_3.1.bb
@@ -0,0 +1,46 @@
+DESCRIPTION = "distcc is a parallel build system that distributes \
+compilation of C/C++/ObjC code across machines on a network."
+SECTION = "devel"
+LICENSE = "GPLv2"
+
+DEPENDS = "avahi gtk+"
+RRECOMMENDS = "avahi-daemon"
+
+SRC_URI = "http://distcc.googlecode.com/files/distcc-${PV}.tar.bz2 \
+ file://default \
+ file://distccmon-gnome.desktop \
+ file://distcc"
+
+inherit distutils-base autotools update-rc.d
+
+INITSCRIPT_NAME = "distcc"
+
+EXTRA_OECONF = " --with-gtk --with-avahi ac_cv_path_PYTHON=${STAGINGDIR_NATIVE}/python PYTHON_CFLAGS=-I${STAGING_INCDIR}/${PYTHON_DIR}"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d/
+ install -d ${D}${sysconfdir}/default
+ install -d ${D}${sysconfdir}/distcc
+ install -m 0755 ${WORKDIR}/distcc ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/distcc
+ install -m 0644 ${WORKDIR}/distccmon-gnome.desktop ${D}${datadir}/distcc/
+ echo "+zeroconf" > ${D}${sysconfdir}/distcc/hosts
+}
+
+PACKAGES += "distcc-distmon-gnome"
+
+FILES_${PN} = " ${sysconfdir} \
+ ${bindir}/distcc \
+ ${bindir}/lsdistcc \
+ ${bindir}/distccd \
+ ${bindir}/distccmon-text"
+
+FILES_${PN}-dbg += "${bindir}/.debug"
+
+CONFFILES_${PN} += "${sysconfdir}/default/distcc \
+ ${sysconfdir}/distcc/hosts \
+ ${sysconfdir}/init.d/distcc \
+ "
+
+FILES_distcc-distmon-gnome = " ${bindir}/distccmon-gnome \
+ ${datadir}/distcc"
diff --git a/packages/dnsmasq/dnsmasq-dbus_2.46.bb b/packages/dnsmasq/dnsmasq-dbus_2.46.bb
deleted file mode 100644
index f6070a1987..0000000000
--- a/packages/dnsmasq/dnsmasq-dbus_2.46.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-# dnsmasq with support for DBus interface
-
-require dnsmasq.inc
-
-PR = "r1"
-DEPENDS = "dbus"
-EXTRA_OEMAKE = "COPTS=-DHAVE_DBUS"
-
-SRC_URI += "file://dbus_introspection.patch;patch=1"
-
-do_install_append () {
- install -d ${D}${sysconfdir}/dbus-1/system.d
- install -m 644 dbus/dnsmasq.conf ${D}${sysconfdir}/dbus-1/system.d/
-}
diff --git a/packages/dnsmasq/dnsmasq-dbus_2.47.bb b/packages/dnsmasq/dnsmasq-dbus_2.47.bb
new file mode 100644
index 0000000000..d03dbdb06e
--- /dev/null
+++ b/packages/dnsmasq/dnsmasq-dbus_2.47.bb
@@ -0,0 +1,11 @@
+# dnsmasq with support for DBus interface
+
+require dnsmasq.inc
+
+DEPENDS = "dbus"
+EXTRA_OEMAKE = "COPTS=-DHAVE_DBUS"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/dbus-1/system.d
+ install -m 644 dbus/dnsmasq.conf ${D}${sysconfdir}/dbus-1/system.d/
+}
diff --git a/packages/dnsmasq/dnsmasq_2.46.bb b/packages/dnsmasq/dnsmasq_2.46.bb
deleted file mode 100644
index 9a79c6e76f..0000000000
--- a/packages/dnsmasq/dnsmasq_2.46.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-PR = "r1"
-
-require dnsmasq.inc
diff --git a/packages/dnsmasq/dnsmasq_2.47.bb b/packages/dnsmasq/dnsmasq_2.47.bb
new file mode 100644
index 0000000000..83aea1d299
--- /dev/null
+++ b/packages/dnsmasq/dnsmasq_2.47.bb
@@ -0,0 +1 @@
+require dnsmasq.inc
diff --git a/packages/dnsmasq/files/dbus_introspection.patch b/packages/dnsmasq/files/dbus_introspection.patch
deleted file mode 100644
index 52cbb6e25b..0000000000
--- a/packages/dnsmasq/files/dbus_introspection.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-diff -urN dnsmasq-2.46.orig/src/dbus.c dnsmasq-2.46/src/dbus.c
---- dnsmasq-2.46.orig/src/dbus.c 2008-11-14 21:02:08.000000000 +0100
-+++ dnsmasq-2.46/src/dbus.c 2008-12-15 10:45:48.000000000 +0100
-@@ -21,6 +21,42 @@
- #define DBUS_API_SUBJECT_TO_CHANGE
- #include <dbus/dbus.h>
-
-+const char* introspection_xml =
-+"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-+"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-+"<node name=\"" DNSMASQ_PATH "\">\n"
-+" <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
-+" <method name=\"Introspect\">\n"
-+" <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
-+" </method>\n"
-+" </interface>\n"
-+" <interface name=\"" DNSMASQ_SERVICE "\">\n"
-+" <method name=\"ClearCache\">\n"
-+" </method>\n"
-+" <method name=\"GetVersion\">\n"
-+" <arg name=\"version\" direction=\"out\" type=\"s\"/>\n"
-+" </method>\n"
-+" <method name=\"SetServers\">\n"
-+" <arg name=\"servers\" direction=\"in\" type=\"av\"/>\n"
-+" </method>\n"
-+" <signal name=\"DhcpLeaseAdded\">\n"
-+" <arg name=\"ipaddr\" type=\"s\"/>\n"
-+" <arg name=\"hwaddr\" type=\"s\"/>\n"
-+" <arg name=\"hostname\" type=\"s\"/>\n"
-+" </signal>\n"
-+" <signal name=\"DhcpLeaseDeleted\">\n"
-+" <arg name=\"ipaddr\" type=\"s\"/>\n"
-+" <arg name=\"hwaddr\" type=\"s\"/>\n"
-+" <arg name=\"hostname\" type=\"s\"/>\n"
-+" </signal>\n"
-+" <signal name=\"DhcpLeaseUpdated\">\n"
-+" <arg name=\"ipaddr\" type=\"s\"/>\n"
-+" <arg name=\"hwaddr\" type=\"s\"/>\n"
-+" <arg name=\"hostname\" type=\"s\"/>\n"
-+" </signal>\n"
-+" </interface>\n"
-+"</node>\n";
-+
- struct watch {
- DBusWatch *watch;
- struct watch *next;
-@@ -229,7 +265,15 @@
- {
- char *method = (char *)dbus_message_get_member(message);
-
-- if (strcmp(method, "GetVersion") == 0)
-+ if (dbus_message_is_method_call(message, DBUS_INTERFACE_INTROSPECTABLE, "Introspect"))
-+ {
-+ DBusMessage *reply = dbus_message_new_method_return(message);
-+
-+ dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection_xml, DBUS_TYPE_INVALID);
-+ dbus_connection_send (connection, reply, NULL);
-+ dbus_message_unref (reply);
-+ }
-+ else if (strcmp(method, "GetVersion") == 0)
- {
- char *v = VERSION;
- DBusMessage *reply = dbus_message_new_method_return(message);
diff --git a/packages/dpkg/dpkg-1.14.25/ignore_extra_fields.patch b/packages/dpkg/dpkg-1.14.25/ignore_extra_fields.patch
new file mode 100644
index 0000000000..e47af42bc6
--- /dev/null
+++ b/packages/dpkg/dpkg-1.14.25/ignore_extra_fields.patch
@@ -0,0 +1,24 @@
+ dpkg-deb/build.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: dpkg-1.14.23/dpkg-deb/build.c
+===================================================================
+--- dpkg-1.14.23.orig/dpkg-deb/build.c 2008-11-18 10:57:33.000000000 +0000
++++ dpkg-1.14.23/dpkg-deb/build.c 2008-12-15 11:27:08.000000000 +0000
+@@ -243,14 +243,14 @@
+ controlfile, checkedinfo->otherpriority);
+ warns++;
+ }
+- for (field= checkedinfo->available.arbs; field; field= field->next) {
++ /*for (field= checkedinfo->available.arbs; field; field= field->next) {
+ if (known_arbitrary_field(field))
+ continue;
+
+ fprintf(stderr, _("warning, `%s' contains user-defined field `%s'\n"),
+ controlfile, field->name);
+ warns++;
+- }
++ }*/
+ checkversion(checkedinfo->available.version.version,"(upstream) version",&errs);
+ checkversion(checkedinfo->available.version.revision,"Debian revision",&errs);
+ if (errs) ohshit(_("%d errors in control file"),errs);
diff --git a/packages/dpkg/dpkg-native.inc b/packages/dpkg/dpkg-native.inc
new file mode 100644
index 0000000000..771476ff2f
--- /dev/null
+++ b/packages/dpkg/dpkg-native.inc
@@ -0,0 +1,28 @@
+require dpkg.inc
+
+inherit native
+
+DEPENDS = "perl-native bzip2-native zlib-native virtual/update-alternatives-native"
+RDEPENDS = ""
+
+SRC_URI += "file://noman.patch;patch=1"
+FILESPATH += "dpkg-${PV}"
+
+# We need to do this so our perl is picked up.
+do_configure_prepend() {
+ export PERL=${STAGING_BINDIR}/perl
+}
+
+EXTRA_OECONF = "--without-static-progs \
+ --without-dselect \
+ --with-start-stop-daemon \
+ --with-zlib \
+ --with-bz2lib \
+ --without-selinux \
+ --without-sgml-doc"
+
+do_stage_append() {
+ for BIN in dpkg-architecture; do
+ sed -i -e '1s,^#.*usr/bin,#!${STAGING_BINDIR},' ${STAGING_BINDIR}/$BIN
+ done
+}
diff --git a/packages/dpkg/dpkg-native_1.13.22.bb b/packages/dpkg/dpkg-native_1.13.22.bb
index 5dcf53c164..5a1f6abc50 100644
--- a/packages/dpkg/dpkg-native_1.13.22.bb
+++ b/packages/dpkg/dpkg-native_1.13.22.bb
@@ -1,14 +1,3 @@
-require dpkg.inc
-PR = "r4"
-DEPENDS += "zlib-native virtual/update-alternatives-native"
-SRC_URI += "file://noman.patch;patch=1"
+require dpkg-native.inc
-inherit native
-
-EXTRA_OECONF = "--without-static-progs \
- --without-dselect \
- --with-start-stop-daemon \
- --with-zlib \
- --with-bz2lib \
- --without-selinux \
- --without-sgml-doc"
+PR = "r5"
diff --git a/packages/dpkg/dpkg-native_1.13.25.bb b/packages/dpkg/dpkg-native_1.13.25.bb
index 0d60e0bddb..47c03424be 100644
--- a/packages/dpkg/dpkg-native_1.13.25.bb
+++ b/packages/dpkg/dpkg-native_1.13.25.bb
@@ -1,14 +1,3 @@
-require dpkg.inc
-PR = "r0"
-DEPENDS += "zlib-native"
-SRC_URI += "file://noman.patch;patch=1"
+require dpkg-native.inc
-inherit native
-
-EXTRA_OECONF = "--without-static-progs \
- --without-dselect \
- --with-start-stop-daemon \
- --with-zlib \
- --with-bz2lib \
- --without-selinux \
- --without-sgml-doc"
+PR = "r1"
diff --git a/packages/dpkg/dpkg-native_1.14.19.bb b/packages/dpkg/dpkg-native_1.14.19.bb
index f8d6705bb7..47c03424be 100644
--- a/packages/dpkg/dpkg-native_1.14.19.bb
+++ b/packages/dpkg/dpkg-native_1.14.19.bb
@@ -1,15 +1,3 @@
-require dpkg.inc
-DEPENDS += "bzip2-native zlib-native virtual/update-alternatives-native"
-SRC_URI += "file://noman.patch;patch=1"
+require dpkg-native.inc
-FILESPATH += "dpkg-${PV}"
-
-inherit native
-
-EXTRA_OECONF = "--without-static-progs \
- --without-dselect \
- --with-start-stop-daemon \
- --with-zlib \
- --with-bz2lib \
- --without-selinux \
- --without-sgml-doc"
+PR = "r1"
diff --git a/packages/dpkg/dpkg-native_1.14.23.bb b/packages/dpkg/dpkg-native_1.14.23.bb
index f8d6705bb7..47c03424be 100644
--- a/packages/dpkg/dpkg-native_1.14.23.bb
+++ b/packages/dpkg/dpkg-native_1.14.23.bb
@@ -1,15 +1,3 @@
-require dpkg.inc
-DEPENDS += "bzip2-native zlib-native virtual/update-alternatives-native"
-SRC_URI += "file://noman.patch;patch=1"
+require dpkg-native.inc
-FILESPATH += "dpkg-${PV}"
-
-inherit native
-
-EXTRA_OECONF = "--without-static-progs \
- --without-dselect \
- --with-start-stop-daemon \
- --with-zlib \
- --with-bz2lib \
- --without-selinux \
- --without-sgml-doc"
+PR = "r1"
diff --git a/packages/dpkg/dpkg-native_1.14.25.bb b/packages/dpkg/dpkg-native_1.14.25.bb
new file mode 100644
index 0000000000..47c03424be
--- /dev/null
+++ b/packages/dpkg/dpkg-native_1.14.25.bb
@@ -0,0 +1,3 @@
+require dpkg-native.inc
+
+PR = "r1"
diff --git a/packages/dpkg/dpkg_1.14.25.bb b/packages/dpkg/dpkg_1.14.25.bb
new file mode 100644
index 0000000000..dac14f96b6
--- /dev/null
+++ b/packages/dpkg/dpkg_1.14.25.bb
@@ -0,0 +1,11 @@
+require dpkg.inc
+DEPENDS += "zlib bzip2"
+#RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives}"
+SRC_URI += "file://noman.patch;patch=1"
+
+EXTRA_OECONF = "--without-static-progs \
+ --without-dselect \
+ --with-start-stop-daemon \
+ --with-zlib \
+ --with-bz2lib \
+ --without-sgml-doc"
diff --git a/packages/dropbear/dropbear-0.52/allow-nopw.patch b/packages/dropbear/dropbear-0.52/allow-nopw.patch
new file mode 100644
index 0000000000..3f3e8b167f
--- /dev/null
+++ b/packages/dropbear/dropbear-0.52/allow-nopw.patch
@@ -0,0 +1,40 @@
+Index: dropbear-0.51/svr-auth.c
+===================================================================
+--- dropbear-0.51.orig/svr-auth.c
++++ dropbear-0.51/svr-auth.c
+@@ -270,7 +270,7 @@ static int checkusername(unsigned char *
+ send_msg_userauth_failure(0, 1);
+ return DROPBEAR_FAILURE;
+ }
+-
++#ifdef DISALLOW_EMPTY_PW
+ /* check for an empty password */
+ if (ses.authstate.pw_passwd[0] == '\0') {
+ TRACE(("leave checkusername: empty pword"))
+@@ -279,7 +279,7 @@ static int checkusername(unsigned char *
+ send_msg_userauth_failure(0, 1);
+ return DROPBEAR_FAILURE;
+ }
+-
++#endif
+ TRACE(("shell is %s", ses.authstate.pw_shell))
+
+ /* check that the shell is set */
+Index: dropbear-0.51/svr-authpasswd.c
+===================================================================
+--- dropbear-0.51.orig/svr-authpasswd.c
++++ dropbear-0.51/svr-authpasswd.c
+@@ -64,9 +64,13 @@ void svr_auth_password() {
+ * since the shadow password may differ to that tested
+ * in auth.c */
+ if (passwdcrypt[0] == '\0') {
++#ifdef DISALLOW_EMPTY_PW
+ dropbear_log(LOG_WARNING, "user '%s' has blank password, rejected",
+ ses.authstate.pw_name);
+ send_msg_userauth_failure(0, 1);
++#else
++ send_msg_userauth_success();
++#endif
+ return;
+ }
+
diff --git a/packages/dropbear/dropbear-0.52/configure.patch b/packages/dropbear/dropbear-0.52/configure.patch
new file mode 100644
index 0000000000..fa24efc066
--- /dev/null
+++ b/packages/dropbear/dropbear-0.52/configure.patch
@@ -0,0 +1,27 @@
+Index: dropbear-0.50/configure.in
+===================================================================
+--- dropbear-0.50.orig/configure.in
++++ dropbear-0.50/configure.in
+@@ -164,14 +164,20 @@ AC_ARG_ENABLE(openpty,
+ AC_MSG_NOTICE(Not using openpty)
+ else
+ AC_MSG_NOTICE(Using openpty if available)
+- AC_SEARCH_LIBS(openpty, util, [AC_DEFINE(HAVE_OPENPTY,,Have openpty() function)])
++ AC_SEARCH_LIBS(openpty, util, [dropbear_cv_func_have_openpty=yes])
+ fi
+ ],
+ [
+ AC_MSG_NOTICE(Using openpty if available)
+- AC_SEARCH_LIBS(openpty, util, [AC_DEFINE(HAVE_OPENPTY)])
++ AC_SEARCH_LIBS(openpty, util, [dropbear_cv_func_have_openpty=yes])
+ ]
+ )
++
++if test "x$dropbear_cv_func_have_openpty" = "xyes"; then
++ AC_DEFINE(HAVE_OPENPTY,,Have openpty() function)
++ no_ptc_check=yes
++ no_ptmx_check=yes
++fi
+
+
+ AC_ARG_ENABLE(syslog,
diff --git a/packages/dropbear/dropbear-0.52/fix-2kb-keys.patch b/packages/dropbear/dropbear-0.52/fix-2kb-keys.patch
new file mode 100644
index 0000000000..bb7a4d32ac
--- /dev/null
+++ b/packages/dropbear/dropbear-0.52/fix-2kb-keys.patch
@@ -0,0 +1,12 @@
+Index: dropbear-0.50/kex.h
+===================================================================
+--- dropbear-0.50.orig/kex.h
++++ dropbear-0.50/kex.h
+@@ -59,6 +59,6 @@ struct KEXState {
+
+ };
+
+-#define MAX_KEXHASHBUF 2000
++#define MAX_KEXHASHBUF 3000
+
+ #endif /* _KEX_H_ */
diff --git a/packages/dropbear/dropbear-0.52/no-host-lookup.patch b/packages/dropbear/dropbear-0.52/no-host-lookup.patch
new file mode 100644
index 0000000000..d7c2ccdc62
--- /dev/null
+++ b/packages/dropbear/dropbear-0.52/no-host-lookup.patch
@@ -0,0 +1,12 @@
+diff -urN dropbear-0.51/options.h dropbear-0.51.new/options.h
+--- dropbear-0.51/options.h 2008-03-27 14:34:39.000000000 +0100
++++ dropbear-0.51.new/options.h 2008-06-22 00:22:09.000000000 +0200
+@@ -112,7 +112,7 @@
+ /* #define DSS_PROTOK */
+
+ /* Whether to do reverse DNS lookups. */
+-#define DO_HOST_LOOKUP
++/* #define DO_HOST_LOOKUP */
+
+ /* Whether to print the message of the day (MOTD). This doesn't add much code
+ * size */
diff --git a/packages/dropbear/dropbear-0.52/urandom-xauth-changes-to-options.h.patch b/packages/dropbear/dropbear-0.52/urandom-xauth-changes-to-options.h.patch
new file mode 100644
index 0000000000..787b801643
--- /dev/null
+++ b/packages/dropbear/dropbear-0.52/urandom-xauth-changes-to-options.h.patch
@@ -0,0 +1,13 @@
+Index: dropbear-0.50/options.h
+===================================================================
+--- dropbear-0.50.orig/options.h
++++ dropbear-0.50/options.h
+@@ -197,7 +197,7 @@ etc) slower (perhaps by 50%). Recommende
+ /* The command to invoke for xauth when using X11 forwarding.
+ * "-q" for quiet */
+ #ifndef XAUTH_COMMAND
+-#define XAUTH_COMMAND "/usr/X11R6/bin/xauth -q"
++#define XAUTH_COMMAND "xauth -q"
+ #endif
+
+ /* if you want to enable running an sftp server (such as the one included with
diff --git a/packages/dropbear/dropbear_0.52.bb b/packages/dropbear/dropbear_0.52.bb
new file mode 100644
index 0000000000..6b2517b69a
--- /dev/null
+++ b/packages/dropbear/dropbear_0.52.bb
@@ -0,0 +1,7 @@
+require dropbear.inc
+PR = "r0"
+
+SRC_URI += "file://no-host-lookup.patch;patch=1"
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/dsplink/codec-engine_2.21.bb b/packages/dsplink/codec-engine_2.21.bb
deleted file mode 100644
index 421e46894a..0000000000
--- a/packages/dsplink/codec-engine_2.21.bb
+++ /dev/null
@@ -1,73 +0,0 @@
-require dsplink.inc
-
-DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
-
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-inherit module
-
-# tconf from xdctools dislikes '.' in pwd :/
-PR = "r5"
-PV = "221"
-
-# Get CE tarball from TI website, place in sources and calculate
-# md5sum
-# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html
-
-SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_21.tar.gz \
- file://cmemk-class-device-27.diff \
- file://Makefile.dsplink \
- file://Makefile-dsplink-kbuild \
- file://Makefile-dsplink-gpp \
- file://Makefile-dsplink-dsp \
-"
-
-S = "${WORKDIR}/codec_engine_2_21"
-
-require ti-paths.inc
-
-export DSPLINK="${S}/cetools/packages/dsplink"
-
-PARALLEL_MAKE = ""
-
-# the include files on top define do_compile for the submodules
-do_compile_append() {
- cd ${S}/examples
-
- # Fix paths to arm crosstools, c6x codegen and x86 gcc
- # Also disable uclibc and x86 builds
- sed -i -e s:/db/toolsrc/library/tools/vendors/cs/arm/arm-2007q3:${CROSS_DIR}:g \
- -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- -e s:/db/toolsrc/library/tools/vendors/opensource/gcc/4.1.0/Linux/gcc-4.1.0-glibc-2.3.6/i686-unknown-linux-gnu:/usr:g \
- -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
- -e 's:true, // build for uC Linux:false,:g' \
- -e 's:true, // build for PC Linux:false,:g' \
- ${S}/examples/user.bld
-
- # Fix path to c6x codegen
- sed -i -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- xdcpaths.mak
-
- # Start building the CE examples: codecs, extensions, servers (codec bundles) and ARM side apps
- # the DSP side uses CC to point to the c6x codegen, but would get the gcc tool
- unset CC
- # Make clean doesn't do what you'd expect, it only cleans stuff you've enabled, so some cruft remains
- for i in codecs extensions servers apps ; do
- make -e -C ${S}/examples/ti/sdo/ce/examples/$i clean
- make -e -C ${S}/examples/ti/sdo/ce/examples/$i
- done
-
-}
-
-
-do_stage_append() {
- install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/codecengine
- cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/codecengine/
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "${base_sbindir}"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/dsplink/dmai_1.16.bb b/packages/dsplink/dmai_1.16.bb
deleted file mode 100644
index be1a34e154..0000000000
--- a/packages/dsplink/dmai_1.16.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "Davinci (and OMAP) Multimedia Application Interface"
-DEPENDS = "virtual/kernel codec-engine"
-LICENCE = "unknown"
-
-require ti-paths.inc
-
-# https://www-a.ti.com/downloads/sds_support/applications_packages/dmai/dmai_1_16_00_03/dmai_setuplinux_1_16_00_03.bin
-# Install the above link and put the dmai_1_16_00_03.tar.gz file in the same directory as this recipe
-SRC_URI = "file://dmai_1_16_00_03.tar.gz \
- "
-
-S = "${WORKDIR}/dmai_1_16_00_03"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-do_compile() {
- cd packages/ti/sdo/dmai
- oe_runmake clean
- oe_runmake dm6467_al dm355_al dm6446_al dm357_al dm6437_db dm6446_db dm6467_db
- cd packages/ti/sdo/dmai/apps
- oe_runmake clean
- oe_runmake dm6467_al dm355_al dm6446_al dm357_al dm6437_db dm6446_db dm6467_db
-}
-
-do_install () {
- oe_runmake install
-}
-
-do_stage () {
- :
-}
-
diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc
index b263be331a..1ca01c399c 100644
--- a/packages/dsplink/dsplink.inc
+++ b/packages/dsplink/dsplink.inc
@@ -4,13 +4,6 @@ DEPENDS = "virtual/kernel perl-native"
inherit module
-S = "${WORKDIR}/dsplink_1_60/dsplink"
-
-# Needed for buildscripts
-export DSPLINK="${S}"
-
-require ti-paths.inc
-
do_configure () {
# Clean up stale binaries
find ${S} -name "*.ko" -exec rm {} \; || true
@@ -21,15 +14,8 @@ do_configure () {
cd ${DSPLINK}
perl config/bin/dsplinkcfg.pl --platform=${DSPLINKPLATFORM} --nodsp=1 --dspcfg_0=${DSPCFG} --dspos_0=DSPBIOS5XX --gppos=${GPPOS} --comps=ponslrm
)
-
- if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 26 ] ; then
- sed -i -e s:asm/semaphore:linux/semaphore: ${DSPLINK}/gpp/src/osal/Linux/user.c
- sed -i -e s:asm/semaphore:linux/semaphore: ${DSPLINK}/gpp/src/osal/Linux/2.6.18/sync.c
- fi
}
-PARALLEL_MAKE = ""
-
do_compile () {
unset DISPLAY
sed -i -e s:armv7a:armv7-a:g ${DSPLINK}/make/Linux/omap3530_2.6.mk
@@ -53,111 +39,53 @@ do_compile () {
export ARCHIVER_AR=${TARGET_PREFIX}ar
export BASE_SABIOS=${DSP_BASE_BIOS}
+ #dsplinkk.ko bits
if [ ! -d ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE ] ; then
install -d ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE
fi
-#dsplinkk.ko bits
cp ${WORKDIR}/Makefile-dsplink-gpp ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/Makefile
cd ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
export KDIR=${STAGING_KERNEL_DIR}
- make -e all
- make -e -f ${WORKDIR}/Makefile-dsplink-dsp
+ make -e driver
+ make -e library
+ make -e samples
-#lpm bits
- if [ -e ${S}/cetools/packages/ti/bios/power/ ] ; then
- echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
- echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
- echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
- #export DSPLINK=${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/dsplink
-
- # Build the DSP power manager kernel module
- cd ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm
-
- if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 26 ] ; then
- sed -i -e s:asm/semaphore:linux/semaphore: lpm_driver.c
- fi
-
- rm -f *o
- make KERNEL_PATH=${STAGING_KERNEL_DIR} \
- KERNEL_SRC=${STAGING_KERNEL_DIR} \
- KERNEL_DIR=${STAGING_KERNEL_DIR} \
- KERNEL_VERSION=${KERNEL_VERSION} \
- TOOL_PREFIX=${TARGET_PREFIX} \
- DSPLINK_REPO=${DSPLINK}/../ \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}"
- fi
-
-#cmemk bits
- if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/cmem ] ; then
- # Build the cmem kernel module
- # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
-
- # This sadly breaks doing -c compile more than once, but I don't have a better solution
- if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 26 ] ; then
- patch -p0 < ${WORKDIR}/cmemk-class-device-27.diff
- fi
-
- oe_runmake clean
- oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
- KERNEL_SRC=${STAGING_KERNEL_DIR} \
- KERNEL_VERSION=${KERNEL_VERSION} \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}"
- fi
+ make -e -f ${WORKDIR}/Makefile-dsplink-dsp
+ cp -a * ${DSPLINK}/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/RELEASE
}
do_install () {
- install -d ${D}/${bindir}
- install ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/*gpp ${D}/${bindir} || true
-
- install -d ${D}/${datadir}/dsplink
- for i in $(find ${DSPLINK}/dsp/BUILD/ -name "*.out") ; do
- install ${i} ${D}/${datadir}/dsplink
- done
+ #driver - kernel module
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ cp ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/
+ #library
install -d ${D}/${libdir}
install -m 0755 ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${D}/${libdir}
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- cp ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/
- cp ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
- cp ${S}/cetools/packages/ti/bios/power/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
- cp ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
+ #sample apps
+ install -d ${D}/${datadir}/ti-dsplink
+ install ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/*gpp ${D}/${datadir}/ti-dsplink || true
+ for i in $(find ${DSPLINK}/dsp/BUILD/ -name "*.out") ; do
+ install ${i} ${D}/${datadir}/ti-dsplink
+ done
}
-
# Codec Engine and friends need a complete tree, so stage it all
do_stage() {
- install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/dsplink
- cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/dsplink/
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
}
-pkg_postinst_dsplink-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_dsplink-module () {
- update-modules || true
-}
+PACKAGES =+ "ti-dsplink-module ti-dsplink-apps"
+FILES_ti-dsplink-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/dsplinkk.ko"
+FILES_ti-dsplink-apps = "${datadir}/ti-dsplink/* ${libdir}/dsplink.lib"
-PACKAGES =+ "dsplink-apps dsplink-module ti-lpm-module ti-cmemk-module"
-FILES_dsplink-module = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/dsplinkk.ko"
-FILES_dsplink-apps = "${bindir}/* ${datadir}/dsplink/* ${libdir}/dsplink.lib"
-
-FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-
-pkg_postinst_ti-lpm-module () {
+pkg_postinst_ti-dsplink-module () {
if [ -n "$D" ]; then
exit 1
fi
@@ -165,27 +93,20 @@ pkg_postinst_ti-lpm-module () {
update-modules || true
}
-pkg_postrm_ti-lpm-module () {
+pkg_postrm_ti-dsplink-module () {
update-modules || true
}
-FILES_ti-cmemk-module = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-
-pkg_postinst_ti-cmemk-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-cmemk-module () {
- update-modules || true
-}
-
+INHIBIT_PACKAGE_STRIP = "1"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
-INHIBIT_PACKAGE_STRIP = "1"
+#legacy upgrade helpers
+RPROVIDES_ti-dsplink-module += "dsplink-module"
+RREPLACES_ti-dsplink-module += "dsplink-module"
+RPROVIDES_ti-dsplink-apps += "dsplink-apps"
+RREPLACES_ti_dsplink-apps += "dsplink-apps"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+#add run-time dependencies - note for kernel module we can only use RRECOMMENDS, since modules might be built into the kernel
+RRECOMMENDS_ti-dsplink-apps += "ti-dsplink-module"
diff --git a/packages/dsplink/dsplink_1.60.bb b/packages/dsplink/dsplink_1.60.bb
deleted file mode 100644
index e8377a811c..0000000000
--- a/packages/dsplink/dsplink_1.60.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require dsplink.inc
-
-# The tconf tool breaks if there is a '.' in your pwd
-PR = "r6"
-PE = "1"
-PV = "160"
-
-# Get dsplink tarball from TI website, place in sources and calculate
-# md5sum
-# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/link/link_1_60/index.html
-
-SRC_URI = "http://install.tarball.in.source.dir/dsplink_1_60.tar.gz \
- file://Makefile-dsplink-gpp \
- file://Makefile-dsplink-dsp \
-"
-
-S = "${WORKDIR}/dsplink_1_60/dsplink"
-
diff --git a/packages/dsplink/files/Makefile-dsplink-gpp b/packages/dsplink/files/Makefile-dsplink-gpp
index e69ce75f19..d9f2f6209a 100755
--- a/packages/dsplink/files/Makefile-dsplink-gpp
+++ b/packages/dsplink/files/Makefile-dsplink-gpp
@@ -29,7 +29,7 @@ SOURCES :=
include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)$(TI_DSPLINK_GPPOSVERSION)$(DIRSEP)SOURCES
PMGR_SOURCES += $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)$(TI_DSPLINK_GPPOSVERSION)$(DIRSEP),$(SOURCES))
SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(DIRSEP)SOURCES
+include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)SOURCES
OSAL_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(DIRSEP),$(SOURCES))
SOURCES :=
include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)SOURCES
diff --git a/packages/dsplink/files/Makefile-dsplink-kbuild b/packages/dsplink/files/Makefile-dsplink-kbuild
deleted file mode 100644
index 0fdf896c86..0000000000
--- a/packages/dsplink/files/Makefile-dsplink-kbuild
+++ /dev/null
@@ -1,74 +0,0 @@
-# Composite Makefile
-DIRSEP=/
-
-TI_DSPLINK_RELATIVE_PATH := ../
-
-# include the CURRENTCFG.mk
-include $(DSPLINK)$(DIRSEP)config$(DIRSEP)BUILD$(DIRSEP)CURRENTCFG.MK
-
-# Generate the list of sources
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)arch$(DIRSEP)SOURCES
-ARCH_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)arch$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)ldrv$(DIRSEP)SOURCES
-LDRV_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)ldrv$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)ldrv$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)SOURCES
-LDRV_SOURCES += $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)ldrv$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)gen$(DIRSEP)SOURCES
-GEN_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)gen$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)SOURCES
-PMGR_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)SOURCES
-PMGR_SOURCES += $(addpreifx $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)$(TI_DSPLINK_GPPOSVERSION)$(DIRSEP)SOURCES
-PMGR_SOURCES += $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)pmgr$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)$(TI_DSPLINK_GPPOSVERSION)$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(DIRSEP)SOURCES
-OSAL_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)SOURCES
-OSAL_SOURCES += $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)$(TI_DSPLINK_GPPOSVERSION)$(DIRSEP)SOURCES
-OSAL_SOURCES += $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)osal$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)$(TI_DSPLINK_GPPOSVERSION)$(DIRSEP),$(SOURCES))
-
-DSPLINK_SOURCES := $(ARCH_SOURCES) $(LDRV_SOURCES) $(GEN_SOURCES) $(OSAL_SOURCES) $(PMGR_SOURCES)
-DSPLINK_OBJS := $(foreach srcFile, $(DSPLINK_SOURCES),$(basename $(srcFile)).o)
-
-################################################################################################
-# USER SIDE
-# Generate the list of sources
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)api$(DIRSEP)SOURCES
-API_SOURCES := $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)api$(DIRSEP),$(SOURCES))
-SOURCES :=
-include $(TI_DSPLINK_GPPROOT)$(DIRSEP)src$(DIRSEP)api$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP)SOURCES
-API_SOURCES += $(addprefix $(TI_DSPLINK_RELATIVE_PATH)gpp$(DIRSEP)src$(DIRSEP)api$(DIRSEP)$(TI_DSPLINK_GPPOS)$(DIRSEP),$(SOURCES))
-
-# CFLAGS
-EXTRA_CFLAGS = $(addprefix -D, $(TI_DSPLINK_GPP_DEFINES))
-EXTRA_CFLAGS += $(addprefix -I, $(TI_DSPLINK_GPP_INC_PATH))
-EXTRA_CFLAGS += -DEXPORT_SYMTAB
-EXTRA_CFLAGS += -DTRACE_KERNEL
-
-ifneq ($(KERNELRELEASE),)
-obj-m := dsplinkk.o
-libs-m := $(shell pwd)
-lib-m := $(foreach srcFile, $(API_SOURCES),$(basename $(srcFile)).o)
-dsplinkk-objs := $(DSPLINK_OBJS)
-else
-KDIR := /opt/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.18_pro500
-PWD := $(shell pwd)
-all:
- $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
-endif
-
-clean:
- find $(DSPLINK) -name "*.o" -exec rm {} \;
- rm -fr dsplinkk.ko dsplinkk.mod.c Module.symvers
diff --git a/packages/dsplink/files/Makefile.dsplink b/packages/dsplink/files/Makefile.dsplink
deleted file mode 100755
index f3228dd9e7..0000000000
--- a/packages/dsplink/files/Makefile.dsplink
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# ======== makeunix ========
-#
-
-# Import Tools Path from Rules.make
-#include Rules.make
-
-PROJECT_BASE_DIR = $(shell pwd)
-LINUXKERNEL_INSTALL_DIR:=some-path/kernel
-LINK_INSTALL_DIR := some-path/dsplink_1_51/dsplink
-
-# The prefix to be added before the GNU compiler tools (optionally including
-# path), i.e. "arm_v5t_le-" or "/opt/bin/arm_v5t_le-".
-GPPTOOL_DIR:=some-path/cross
-
-# ---- DSP tools ----
-DSP_BASE_CGTOOLS := some-path/cg6x_6_0_19
-DSP_BASE_BIOS := some-path/bios_5_32_03
-DSP_BASE_RTDX := some-path/bios_5_32_03/packages/ti/rtdx
-OSINC_PLATFORM1 := something
-ARCHIVER_AR := something
-
-
-# ---- construct Link build make vars ----
-GPP_MAKE_OPTS := COMPILER=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-gcc \
- LINKER=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-gcc \
- LD=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-ld \
- ARCHIVER1=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-ld \
- ARCHIVER2=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-ld \
- CROSS_COMPILE=arm-angstrom-linux-gnueabi- \
- DSPLINK=$(LINK_INSTALL_DIR) \
- BASE_TOOLCHAIN=$(GPPTOOL_DIR) \
- BASE_BUILDOS=$(LINUXKERNEL_INSTALL_DIR) \
- ARCHIVER=$(ARCHIVER_AR) OSINC_PLATFORM=$(OSINC_PLATFORM1) \
-
-DSP_MAKE_OPTS := DSPLINK=$(DSPLINK) \
- DPPROOT=$(DSPLINK)/dsp \
- BASE_SABIOS=$(DSP_BASE_BIOS) \
- BASE_CGTOOLS=$(DSP_BASE_CGTOOLS) \
- BASE_RTDX=$(DSP_BASE_RTDX)
-
-
-# ======== all ========
-all: $(LINK_INSTALL_DIR)/packages/dsplink/gpp/export/BIN/Linux/Davinci/RELEASE/dsplinkk.ko
-
-$(LINK_INSTALL_DIR)/packages/dsplink/gpp/export/BIN/Linux/Davinci/RELEASE/dsplinkk.ko:
- @echo Building DSPLINK GPP driver, libs
- #make -s -C $(LINK_INSTALL_DIR)/gpp/src $(GPP_MAKE_OPTS)
- make -s -C $(DSPLINK)/gpp/src/samples $(GPP_MAKE_OPTS)
- @echo Building DSPLINK DSP libs and message sample for DaVinci...
- make -C $(DSPLINK)/dsp/src $(DSP_MAKE_OPTS)
- make -C $(DSPLINK)/dsp/src/samples $(DSP_MAKE_OPTS)
-
-# clean rules
-clean:
- @echo Cleaning DSPLINK GPP driver, libs
- make -s -C $(LINK_INSTALL_DIR)/gpp/src $(GPP_MAKE_OPTS) clean
- @rm -rf $(LINK_INSTALL_DIR)/gpp/export/BIN/*
- @rm -rf $(LINK_INSTALL_DIR)/gpp/export/INCLUDE/*
diff --git a/packages/dsplink/files/cmem-class-device-27-and-sched-include-fix.patch b/packages/dsplink/files/cmem-class-device-27-and-sched-include-fix.patch
new file mode 100644
index 0000000000..8eb3210bb1
--- /dev/null
+++ b/packages/dsplink/files/cmem-class-device-27-and-sched-include-fix.patch
@@ -0,0 +1,23 @@
+diff -uNr codec_engine_2_21/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c codec_engine_2_21_fix/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c
+--- codec_engine_2_21/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c 2009-02-12 22:02:15.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c 2009-02-12 22:08:49.000000000 +0000
+@@ -29,6 +29,7 @@
+ #include <linux/mm.h>
+ #include <linux/seq_file.h>
+ #include <linux/vmalloc.h>
++#include <linux/sched.h>
+ #include <asm/cacheflush.h>
+ #include <asm/uaccess.h>
+ #include <asm/pgtable.h>
+@@ -1710,7 +1711,11 @@
+ #ifdef USE_CLASS_DEVICE
+ class_device_create(cmem_class, NULL, MKDEV(cmem_major, 0), NULL, "cmem");
+ #else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ device_create(cmem_class, NULL, MKDEV(cmem_major, 0), NULL, "cmem");
++#else
+ device_create(cmem_class, NULL, MKDEV(cmem_major, 0), "cmem");
++#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+ #endif // USE_CLASS_DEVICE
+ #endif // USE_CLASS_SIMPLE
+ #endif // USE_UDEV
diff --git a/packages/dsplink/files/cmemk-class-device-27.diff b/packages/dsplink/files/cmemk-class-device-27.diff
deleted file mode 100644
index 1c51323457..0000000000
--- a/packages/dsplink/files/cmemk-class-device-27.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/cmemk.c 2008-12-11 12:21:22.000000000 +0100
-+++ src/module/cmemk.c 2008-12-11 12:22:39.000000000 +0100
-@@ -1710,7 +1710,7 @@
- #ifdef USE_CLASS_DEVICE
- class_device_create(cmem_class, NULL, MKDEV(cmem_major, 0), NULL, "cmem");
- #else
-- device_create(cmem_class, NULL, MKDEV(cmem_major, 0), "cmem");
-+ device_create(cmem_class, NULL, MKDEV(cmem_major, 0), NULL, "cmem");
- #endif // USE_CLASS_DEVICE
- #endif // USE_CLASS_SIMPLE
- #endif // USE_UDEV
diff --git a/packages/dsplink/files/dmai-built-with-angstrom.patch b/packages/dsplink/files/dmai-built-with-angstrom.patch
new file mode 100644
index 0000000000..fc49789718
--- /dev/null
+++ b/packages/dsplink/files/dmai-built-with-angstrom.patch
@@ -0,0 +1,48 @@
+Index: dmai_1_20_00_06/packages/config.bld
+===================================================================
+--- dmai_1_20_00_06.orig/packages/config.bld 2009-02-11 19:38:51.000000000 -0600
++++ dmai_1_20_00_06/packages/config.bld 2009-02-11 19:39:23.000000000 -0600
+@@ -42,7 +42,7 @@
+
+ /* location of the Codec Sourcery Arm9 tools */
+ var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T');
+-GCArmv5T.LONGNAME = 'bin/arm-none-linux-gnueabi-gcc';
++GCArmv5T.LONGNAME = 'bin/arm-angstrom-linux-gnueabi-gcc';
+ GCArmv5T.platform = "ti.platforms.evm3530";
+ GCArmv5T.rootDir = java.lang.System.getenv("CSTOOL_DIR");
+
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/Makefile
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/Makefile 2009-02-11 19:39:57.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/Makefile 2009-02-11 19:58:05.000000000 -0600
+@@ -33,7 +33,7 @@
+ DMAI_INSTALL_DIR = ../../../..
+ TARGET = dmai
+
+-include $(DMAI_INSTALL_DIR)/Rules.make
++#include $(DMAI_INSTALL_DIR)/Rules.make
+
+ # Should the full command be echoed to the console during build?
+ VERBOSE=false
+@@ -64,7 +64,7 @@
+ MVL_CPP_FLAGS = $(GNU_CPP_FLAGS) -Dxdc_target_name__=MVArm9
+ CS_CPP_FLAGS = $(GNU_CPP_FLAGS) -Dxdc_target_name__=codesourcery/GCArmv5T
+
+-GNU_C_FLAGS = $(C_FLAGS) -Wall -Werror
++GNU_C_FLAGS = $(C_FLAGS) -Wall
+ C64P_C_FLAGS = $(C_FLAGS)
+
+ GNU_AR_FLAGS = $(AR_FLAGS)
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/apps/Makefile.app
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/apps/Makefile.app 2009-02-11 19:58:44.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/apps/Makefile.app 2009-02-11 19:59:01.000000000 -0600
+@@ -34,7 +34,7 @@
+ ifndef DMAI_INSTALL_DIR
+ DMAI_INSTALL_DIR = ../../../../../..
+ endif
+-include $(DMAI_INSTALL_DIR)/Rules.make
++#include $(DMAI_INSTALL_DIR)/Rules.make
+
+ # Should the full command be echoed to the console during build?
+ VERBOSE=false
diff --git a/packages/dsplink/files/dmai-do-not-panic-on-mixer-failure.patch b/packages/dsplink/files/dmai-do-not-panic-on-mixer-failure.patch
new file mode 100644
index 0000000000..20e1aece72
--- /dev/null
+++ b/packages/dsplink/files/dmai-do-not-panic-on-mixer-failure.patch
@@ -0,0 +1,31 @@
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Sound_alsa.c
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/linux/Sound_alsa.c 2009-02-11 19:19:23.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Sound_alsa.c 2009-02-11 19:19:25.000000000 -0600
+@@ -139,7 +139,7 @@
+
+ snd_mixer_selem_id_free (sid);
+ snd_mixer_close (rcMixer);
+-
++
+ return Dmai_EOK;
+ }
+
+@@ -431,14 +431,13 @@
+ Sound_alsa_delete(hSound);
+ return NULL;
+ }
+-
++
+ if (setMixerVolume (attrs) <0) {
+- Sound_alsa_delete (hSound);
+- return NULL;
++ Dmai_dbg2("Failed to set the mixer volume on %s (%s)\n",
++ AUDIO_DEVICE, snd_strerror(status));
+ }
+ }
+
+-
+ return hSound;
+ }
+
diff --git a/packages/dsplink/files/dmai-support-32bit-align.patch b/packages/dsplink/files/dmai-support-32bit-align.patch
new file mode 100644
index 0000000000..0ee817d9d9
--- /dev/null
+++ b/packages/dsplink/files/dmai-support-32bit-align.patch
@@ -0,0 +1,17 @@
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/linux/omap3530/Resize.c
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/linux/omap3530/Resize.c 2009-02-11 19:20:45.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/linux/omap3530/Resize.c 2009-02-11 19:21:09.000000000 -0600
+@@ -557,9 +557,9 @@
+ srcOffset = srcDim.y * srcDim.lineLength + srcDim.x * 2;
+ dstOffset = dstDim.y * dstDim.lineLength + dstDim.x * 2;
+
+- /* Input and output buffers must be 4096 bytes aligned */
+- assert(((Buffer_getPhysicalPtr(hDstBuf) + srcOffset) & 0xFFF) == 0);
+- assert(((Buffer_getPhysicalPtr(hSrcBuf) + dstOffset) & 0xFFF) == 0);
++ /* Pointers must be a multiple of 32 bytes */
++ assert((Buffer_getPhysicalPtr(hDstBuf) & 0x1F) == 0);
++ assert((Buffer_getPhysicalPtr(hSrcBuf) & 0x1F) == 0);
+
+ /* Queue the resizer buffers */
+ for (i=0; i < 2; i++) {
diff --git a/packages/dsplink/files/dmai-update-cpu-name.patch b/packages/dsplink/files/dmai-update-cpu-name.patch
new file mode 100644
index 0000000000..052a8e3236
--- /dev/null
+++ b/packages/dsplink/files/dmai-update-cpu-name.patch
@@ -0,0 +1,16 @@
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Cpu.c
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/linux/Cpu.c 2009-02-12 09:34:22.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Cpu.c 2009-02-12 09:34:51.000000000 -0600
+@@ -103,7 +103,10 @@
+ else if (strcmp(valBuf, "DM357 EVM") == 0) {
+ *device = Cpu_Device_DM6446;
+ }
+- else if (strcmp(valBuf, "OMAP3EVM Board") == 0) {
++ else if ((strcmp(valBuf, "OMAP3EVM Board") == 0) ||
++ (strcmp(valBuf, "OMAP3 EVM") == 0) ||
++ (strcmp(valBuf, "OMAP3 Beagle Board") == 0)
++ ){
+ *device = Cpu_Device_OMAP3530;
+ }
+ else {
diff --git a/packages/dsplink/files/dmai-update-fb-display.patch b/packages/dsplink/files/dmai-update-fb-display.patch
new file mode 100644
index 0000000000..91c1dd15aa
--- /dev/null
+++ b/packages/dsplink/files/dmai-update-fb-display.patch
@@ -0,0 +1,77 @@
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Display_fbdev.c
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/linux/Display_fbdev.c 2009-02-11 19:59:57.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Display_fbdev.c 2009-02-11 20:02:46.000000000 -0600
+@@ -41,10 +41,7 @@
+ #include <sys/ioctl.h>
+ #include <linux/fb.h>
+
+-#ifdef Dmai_Device_omap3530
+-/* OMAP specific kernel headers */
+-#include <video/omapfbdev.h>
+-#else
++#ifndef Dmai_Device_omap3530
+ /* Davinci specific kernel headers */
+ #include <video/davincifb_ioctl.h>
+ #endif
+@@ -184,11 +181,13 @@
+ }
+ #endif
+
++#if 0
+ /* Set up the sysfs variables before opening the display device */
+ if (_Display_sysfsSetup(attrs, channel) < 0) {
+ cleanup(hDisplay);
+ return NULL;
+ }
++#endif
+
+ /* Open video display device */
+ hDisplay->fd = open(attrs->displayDevice, O_RDWR);
+@@ -423,6 +422,7 @@
+ ******************************************************************************/
+ Int Display_fbdev_get(Display_Handle hDisplay, Buffer_Handle *hBufPtr)
+ {
++#if defined (FBIO_WAITFORVSYNC)
+ BufTab_Handle hBufTab = hDisplay->hBufTab;
+ int dummy;
+
+@@ -436,7 +436,8 @@
+ }
+
+ *hBufPtr = BufTab_getBuf(hBufTab, hDisplay->workingIdx);
+-
++
++#endif
+ return Dmai_EOK;
+ }
+
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Display.c
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/linux/Display.c 2009-02-11 20:00:10.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Display.c 2009-02-11 20:02:07.000000000 -0600
+@@ -80,18 +80,18 @@
+
+ const Display_Attrs Display_Attrs_O3530_VID_DEFAULT = {
+ 3,
+- Display_Std_V4L2,
+- VideoStd_VGA,
+- Display_Output_LCD,
+- "/dev/video1",
++ Display_Std_FBDEV,
++ VideoStd_D1_NTSC,
++ Display_Output_DVI,
++ "/dev/fb2",
+ 0
+ };
+
+ const Display_Attrs Display_Attrs_O3530_OSD_DEFAULT = {
+ 1,
+ Display_Std_FBDEV,
+- VideoStd_VGA,
+- Display_Output_LCD,
++ VideoStd_D1_NTSC,
++ Display_Output_DVI,
+ "/dev/fb0",
+ 0
+ };
diff --git a/packages/dsplink/files/dmai-update-v4l2-display.patch b/packages/dsplink/files/dmai-update-v4l2-display.patch
new file mode 100644
index 0000000000..8bb77d8473
--- /dev/null
+++ b/packages/dsplink/files/dmai-update-v4l2-display.patch
@@ -0,0 +1,127 @@
+Index: dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Display_v4l2.c
+===================================================================
+--- dmai_1_20_00_06.orig/packages/ti/sdo/dmai/linux/Display_v4l2.c 2009-02-11 19:22:51.000000000 -0600
++++ dmai_1_20_00_06/packages/ti/sdo/dmai/linux/Display_v4l2.c 2009-02-11 19:27:02.000000000 -0600
+@@ -120,7 +120,9 @@
+ struct v4l2_format fmt;
+ enum v4l2_buf_type type;
+ Display_Handle hDisplay;
+- Int channel;
++#if defined(Dmai_Device_omap3530) && defined(V4L2_CID_ROTATION)
++ struct v4l2_control control;
++#endif
+
+ assert(attrs);
+
+@@ -134,44 +136,6 @@
+
+ hDisplay->userAlloc = TRUE;
+
+-#ifdef Dmai_Device_omap3530
+- /* channel = 0 - digital video path
+- * channel = 1 - analog video path
+- */
+- switch (attrs->videoOutput) {
+- case Display_Output_SVIDEO:
+- case Display_Output_COMPOSITE:
+- channel = 1;
+- break;
+- case Display_Output_DVI:
+- case Display_Output_LCD:
+- case Display_Output_SYSTEM:
+- channel = 0;
+- break;
+- default:
+- /* do nothing */
+- break;
+- }
+-#else
+- if (strcmp(attrs->displayDevice, "/dev/video2") == 0) {
+- channel = 0;
+- }
+- else if (strcmp(attrs->displayDevice, "/dev/video3") == 0) {
+- channel = 1;
+- }
+- else {
+- Dmai_err1("%s not a display device\n", attrs->displayDevice);
+- cleanup(hDisplay);
+- return NULL;
+- }
+-#endif
+-
+- /* Set up the sysfs variables before opening the display device */
+- if (_Display_sysfsSetup(attrs, channel) < 0) {
+- cleanup(hDisplay);
+- return NULL;
+- }
+-
+ /* Open video capture device */
+ hDisplay->fd = open(attrs->displayDevice, O_RDWR, 0);
+
+@@ -182,9 +146,8 @@
+ return NULL;
+ }
+
+-#ifdef Dmai_Device_omap3530
+-#define VIDIOC_S_OMAP2_ROTATION _IOW ('V', 3, int)
+-
++
++#if defined(Dmai_Device_omap3530) && defined(V4L2_CID_ROTATION)
+ if (attrs->rotation != 0 && attrs->rotation != 90 &&
+ attrs->rotation != 180 && attrs->rotation != 270) {
+
+@@ -193,49 +156,16 @@
+ return NULL;
+ }
+
+- if (ioctl(hDisplay->fd, VIDIOC_S_OMAP2_ROTATION, &attrs->rotation) < 0) {
+- Dmai_err2("Failed VIDIOC_S_OMAP2_ROTATION on %s (%s)\n",
++ control.id = V4L2_CID_ROTATION;
++ control.value = attrs->rotation;
++
++ if (ioctl(hDisplay->fd, VIDIOC_S_CTRL, &control) < 0) {
++ Dmai_err2("Failed VIDIOC_S_CTRL on %s (%s)\n",
+ attrs->displayDevice, strerror(errno));
+ cleanup(hDisplay);
+ return NULL;
+ }
+
+- switch (attrs->videoStd) {
+- case VideoStd_D1_NTSC:
+- fmt.fmt.pix.width = VideoStd_D1_WIDTH;
+- fmt.fmt.pix.height = VideoStd_D1_NTSC_HEIGHT;
+- break;
+- case VideoStd_D1_PAL:
+- fmt.fmt.pix.width = VideoStd_D1_WIDTH;
+- fmt.fmt.pix.height = VideoStd_D1_PAL_HEIGHT;
+- break;
+- case VideoStd_VGA:
+- fmt.fmt.pix.width = VideoStd_VGA_WIDTH;
+- fmt.fmt.pix.height = VideoStd_VGA_HEIGHT;
+- break;
+- case VideoStd_480P:
+- fmt.fmt.pix.width = VideoStd_480P_WIDTH;
+- fmt.fmt.pix.height = VideoStd_480P_HEIGHT;
+- break;
+- case VideoStd_720P_60:
+- fmt.fmt.pix.width = VideoStd_480P_WIDTH;
+- fmt.fmt.pix.height = VideoStd_480P_HEIGHT;
+- break;
+- default:
+- Dmai_err1("Unknown video standard %d\n", attrs->videoStd);
+- cleanup(hDisplay);
+- return NULL;
+- }
+-
+- fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
+- fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+-
+- if (ioctl(hDisplay->fd, VIDIOC_S_FMT, &fmt) == -1) {
+- Dmai_err2("Failed VIDIOC_S_FMT on %s (%s)\n", attrs->displayDevice,
+- strerror(errno));
+- cleanup(hDisplay);
+- return NULL;
+- }
+ #endif /* Dmai_Device_omap3530 */
+
+ /* Determine the video image dimensions */
diff --git a/packages/dsplink/files/dsplink-add-class-device-create-support.patch b/packages/dsplink/files/dsplink-add-class-device-create-support.patch
new file mode 100644
index 0000000000..b43c3481e1
--- /dev/null
+++ b/packages/dsplink/files/dsplink-add-class-device-create-support.patch
@@ -0,0 +1,55 @@
+diff -uNr codec_engine_2_21/cetools/packages/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c codec_engine_2_21_fix/cetools/packages/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c
+--- codec_engine_2_21/cetools/packages/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c 2008-10-24 20:58:01.000000000 +0100
++++ codec_engine_2_21_fix/cetools/packages/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c 2009-02-20 23:46:42.000000000 +0000
+@@ -37,6 +37,10 @@
+ #endif
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/device.h>
++#endif
+ #include <linux/autoconf.h>
+ #include <linux/spinlock.h>
+ #include <linux/module.h>
+@@ -190,6 +194,16 @@
+ */
+ STATIC Int32 major = 230 ;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++/** ----------------------------------------------------------------------------
++ * @name dsplink_class
++ *
++ * @desc class struct for device create.
++ * ----------------------------------------------------------------------------
++ */
++STATIC struct class *dsplink_class;
++#endif
++
+ /** ----------------------------------------------------------------------------
+ * @name DRV_IsInitialized
+ *
+@@ -673,6 +687,11 @@
+ }
+ #endif /* if defined (CHNL_COMPONENT) */
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++ dsplink_class = class_create(THIS_MODULE, "dsplink");
++ device_create(dsplink_class, NULL, MKDEV(major, 0), NULL, "dsplink");
++#endif
++
+ if (DSP_SUCCEEDED (status)) {
+ DRV_IsInitialized = TRUE ;
+ }
+@@ -717,6 +736,11 @@
+ }
+ #endif /* if defined (CHNL_COMPONENT) */
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++ device_destroy(dsplink_class, MKDEV(major, 0));
++ class_destroy(dsplink_class);
++#endif
++
+ unregister_chrdev (major, "dsplink") ;
+
+ DRV_IsInitialized = FALSE ;
diff --git a/packages/dsplink/files/dsplink-semaphore-27.patch b/packages/dsplink/files/dsplink-semaphore-27.patch
new file mode 100644
index 0000000000..b2f71169fd
--- /dev/null
+++ b/packages/dsplink/files/dsplink-semaphore-27.patch
@@ -0,0 +1,36 @@
+diff -uNr codec_engine_2_21/cetools/packages/dsplink/gpp/src/osal/Linux/2.6.18/sync.c codec_engine_2_21_fix/cetools/packages/dsplink/gpp/src/osal/Linux/2.6.18/sync.c
+--- codec_engine_2_21/cetools/packages/dsplink/gpp/src/osal/Linux/2.6.18/sync.c 2008-12-19 16:27:19.000000000 +0530
++++ codec_engine_2_21_mod/cetools/packages/dsplink/gpp/src/osal/Linux/2.6.18/sync.c 2009-02-12 10:08:48.000000000 +0530
+@@ -30,9 +30,14 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
+ #include <linux/autoconf.h>
+ #include <linux/spinlock.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+ #include <asm/semaphore.h>
++#else
++#include <linux/semaphore.h>
++#endif
+ #include <linux/timer.h>
+ #include <linux/sched.h>
+ #include <linux/delay.h>
+diff -uNr codec_engine_2_21/cetools/packages/dsplink/gpp/src/osal/Linux/user.c codec_engine_2_21_fix/cetools/packages/dsplink_mod/gpp/src/osal/Linux/user.c
+--- codec_engine_2_21/cetools/packages/dsplink/gpp/src/osal/Linux/user.c 2008-12-19 16:27:19.000000000 +0530
++++ codec_engine_2_21_fix/cetools/packages/dsplink_mod/gpp/src/osal/Linux/user.c 2009-02-12 10:08:05.000000000 +0530
+@@ -30,9 +30,14 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
+ #include <linux/autoconf.h>
+ #include <linux/spinlock.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+ #include <asm/semaphore.h>
++#else
++#include <linux/semaphore.h>
++#endif
+ #include <linux/timer.h>
+ #include <linux/sched.h>
+ #include <linux/delay.h>
diff --git a/packages/dsplink/files/loadmodules-ti-codec-engine-apps.sh b/packages/dsplink/files/loadmodules-ti-codec-engine-apps.sh
new file mode 100755
index 0000000000..9f9233d12b
--- /dev/null
+++ b/packages/dsplink/files/loadmodules-ti-codec-engine-apps.sh
@@ -0,0 +1,37 @@
+#
+# Default Memory Map - for OMAP3530 CE 2.21 examples
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 80 MB Linux
+# 0x85000000 08 MB CMEM
+# 0x86000000 24 MB DDRALGHEAP
+# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications)
+# 0x87E00000 1 MB DSPLINK (MEM)
+# 0x87F00000 4 KB DSPLINK (RESET)
+# 0x87F01000 1020 KB unused
+
+# sanity check to verify that we're using the right mem=xxM (80M in this case)
+awk '/MemTotal:/ {
+ mem=$2
+
+ if (mem > 80 * 1024)
+ print "Warning! You need to use mem=80M or less on the kernel cmdline"
+
+ printf "You have %dkB total memory for Linux\n", mem
+}' /proc/meminfo
+
+# Select cmemk parameters for best fit, i.e. starting at 0x85000000
+modprobe cmemk phys_start=0x85000000 phys_end=0x86000000 pools=20x4096,8x131072,5x1048576,1x1429440,1x256000,1x3600000,5x829440
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+#rm -f /dev/dsplink
+#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
+# insert Local Power Manager driver
+#
+modprobe lpm_omap3530
diff --git a/packages/dsplink/files/loadmodules-ti-dmai-apps.sh b/packages/dsplink/files/loadmodules-ti-dmai-apps.sh
new file mode 100755
index 0000000000..7120b74483
--- /dev/null
+++ b/packages/dsplink/files/loadmodules-ti-dmai-apps.sh
@@ -0,0 +1,37 @@
+#
+# Default Memory Map - for OMAP3530 dvsdk examples from 3.00.00.29 - this memory map is used for DMAI apps
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 88 MB Linux
+# 0x85800000 08 MB CMEM
+# 0x86800000 16 MB DDRALGHEAP
+# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications)
+# 0x87E00000 1 MB DSPLINK (MEM)
+# 0x87F00000 4 KB DSPLINK (RESET)
+# 0x87F01000 1020 KB unused
+
+# sanity check to verify that we're using the right mem=xxM (88M in this case)
+awk '/MemTotal:/ {
+ mem=$2
+
+ if (mem > 88 * 1024)
+ print "Warning! You need to use mem=88M or less on the kernel cmdline"
+
+ printf "You have %dkB total memory for Linux\n", mem
+}' /proc/meminfo
+
+# Select cmemk parameters for best fit, i.e. starting at 0x85000000
+modprobe cmemk phys_start=0x85800000 phys_end=0x86800000 pools=20x4096,8x131072,5x1048576,1x1429440,1x256000,1x3600000,5x829440
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+#rm -f /dev/dsplink
+#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
+# insert Local Power Manager driver
+#
+modprobe lpm_omap3530
diff --git a/packages/dsplink/files/loadmodules-ti-dsplink-apps.sh b/packages/dsplink/files/loadmodules-ti-dsplink-apps.sh
new file mode 100755
index 0000000000..9cfb19d5c1
--- /dev/null
+++ b/packages/dsplink/files/loadmodules-ti-dsplink-apps.sh
@@ -0,0 +1,25 @@
+#
+# Default Memory Map - for OMAP3530 dsplink examples
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 126 MB Linux
+# 0x87E00000 2 MB DSPLINK (MEM) + DDR + DSPLINK (RESET)
+
+# sanity check to verify that we're using the right mem=xxM (126M in this case)
+awk '/MemTotal:/ {
+ mem=$2
+
+ if (mem > 126 * 1024)
+ print "Warning! You need to use mem=126M or less on the kernel cmdline"
+
+ printf "You have %dkB total memory for Linux\n", mem
+}' /proc/meminfo
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+#rm -f /dev/dsplink
+#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
diff --git a/packages/dsplink/files/lpm-device-create-and-semaphore-include-fix.patch b/packages/dsplink/files/lpm-device-create-and-semaphore-include-fix.patch
new file mode 100644
index 0000000000..a3bc2b14a6
--- /dev/null
+++ b/packages/dsplink/files/lpm-device-create-and-semaphore-include-fix.patch
@@ -0,0 +1,121 @@
+diff -uNr codec_engine_2_21/cetools/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c
+--- codec_engine_2_21/cetools/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c 2008-11-05 00:18:39.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c 2009-02-13 00:16:50.000000000 +0000
+@@ -225,6 +225,9 @@
+ .os_wait = lpm_os_wait,
+ .os_trace = lpm_os_trace,
+ };
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ char lpm_tempDeviceCreateName[50];
++#endif
+
+ TRACE(KERN_ALERT "lpm.ko: + lpm_init\n");
+
+@@ -286,9 +289,16 @@
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ NULL, "lpm%d", lpm->inst[i].minor);
+ #else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ sprintf(lpm_tempDeviceCreateName, "lpm%d", lpm->inst[i].minor);
++ device_create(lpm->lpm_class, NULL,
++ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
++ NULL, lpm_tempDeviceCreateName);
++#else
+ device_create(lpm->lpm_class, NULL,
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ "lpm%d", lpm->inst[i].minor);
++#endif /* LINUX_VERSION */
+ #endif
+ }
+
+diff -uNr codec_engine_2_21/cetools/packages/ti/bios/power/modules/omap2530/lpm/lpm_driver.c codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/omap2530/lpm/lpm_driver.c
+--- codec_engine_2_21/cetools/packages/ti/bios/power/modules/omap2530/lpm/lpm_driver.c 2008-11-05 00:18:39.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/omap2530/lpm/lpm_driver.c 2009-02-13 00:16:50.000000000 +0000
+@@ -225,6 +225,9 @@
+ .os_wait = lpm_os_wait,
+ .os_trace = lpm_os_trace,
+ };
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ char lpm_tempDeviceCreateName[50];
++#endif
+
+ TRACE(KERN_ALERT "lpm.ko: + lpm_init\n");
+
+@@ -286,9 +289,16 @@
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ NULL, "lpm%d", lpm->inst[i].minor);
+ #else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ sprintf(lpm_tempDeviceCreateName, "lpm%d", lpm->inst[i].minor);
++ device_create(lpm->lpm_class, NULL,
++ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
++ NULL, lpm_tempDeviceCreateName);
++#else
+ device_create(lpm->lpm_class, NULL,
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ "lpm%d", lpm->inst[i].minor);
++#endif /* LINUX_VERSION */
+ #endif
+ }
+
+diff -uNr codec_engine_2_21/cetools/packages/ti/bios/power/modules/dm357/lpm/lpm_driver.c codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/dm357/lpm/lpm_driver.c
+--- codec_engine_2_21/cetools/packages/ti/bios/power/modules/dm357/lpm/lpm_driver.c 2008-11-05 00:18:39.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/dm357/lpm/lpm_driver.c 2009-02-13 00:16:50.000000000 +0000
+@@ -225,6 +225,9 @@
+ .os_wait = lpm_os_wait,
+ .os_trace = lpm_os_trace,
+ };
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ char lpm_tempDeviceCreateName[50];
++#endif
+
+ TRACE(KERN_ALERT "lpm.ko: + lpm_init\n");
+
+@@ -286,9 +289,16 @@
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ NULL, "lpm%d", lpm->inst[i].minor);
+ #else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ sprintf(lpm_tempDeviceCreateName, "lpm%d", lpm->inst[i].minor);
++ device_create(lpm->lpm_class, NULL,
++ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
++ NULL, lpm_tempDeviceCreateName);
++#else
+ device_create(lpm->lpm_class, NULL,
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ "lpm%d", lpm->inst[i].minor);
++#endif /* LINUX_VERSION */
+ #endif
+ }
+
+diff -uNr codec_engine_2_21/cetools/packages/ti/bios/power/modules/dm6446/lpm/lpm_driver.c codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/dm6446/lpm/lpm_driver.c
+--- codec_engine_2_21/cetools/packages/ti/bios/power/modules/dm6446/lpm/lpm_driver.c 2008-11-05 00:18:39.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/dm6446/lpm/lpm_driver.c 2009-02-13 00:16:50.000000000 +0000
+@@ -225,6 +225,9 @@
+ .os_wait = lpm_os_wait,
+ .os_trace = lpm_os_trace,
+ };
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ char lpm_tempDeviceCreateName[50];
++#endif
+
+ TRACE(KERN_ALERT "lpm.ko: + lpm_init\n");
+
+@@ -286,9 +289,16 @@
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ NULL, "lpm%d", lpm->inst[i].minor);
+ #else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ sprintf(lpm_tempDeviceCreateName, "lpm%d", lpm->inst[i].minor);
++ device_create(lpm->lpm_class, NULL,
++ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
++ NULL, lpm_tempDeviceCreateName);
++#else
+ device_create(lpm->lpm_class, NULL,
+ MKDEV(lpm->inst[i].major, lpm->inst[i].minor),
+ "lpm%d", lpm->inst[i].minor);
++#endif /* LINUX_VERSION */
+ #endif
+ }
+
+
diff --git a/packages/dsplink/files/lpm-make-symbol-warnings-fix.patch b/packages/dsplink/files/lpm-make-symbol-warnings-fix.patch
new file mode 100644
index 0000000000..031a16022f
--- /dev/null
+++ b/packages/dsplink/files/lpm-make-symbol-warnings-fix.patch
@@ -0,0 +1,117 @@
+diff -uNr codec_engine_2_21/cetools/packages/ti/bios/power/modules/omap3530/lpm/Makefile codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/omap3530/lpm/Makefile
+--- codec_engine_2_21/cetools/packages/ti/bios/power/modules/omap3530/lpm/Makefile 2008-11-05 00:38:57.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/bios/power/modules/omap3530/lpm/Makefile 2009-02-17 23:53:08.000000000 +0000
+@@ -1,5 +1,5 @@
+-#
+-# Copyright 2008 by Texas Instruments Incorporated.
++# --COPYRIGHT--,GPL
++# Copyright $(CPYYEAR) by Texas Instruments Incorporated.
+ #
+ # This program is free software: you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -12,31 +12,34 @@
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program. If not, see <http://www.gnu.org/licenses/>
+-#
++# --/COPYRIGHT--
+ #
+
+ #
+ # This makefile will build the lpm_omap3530.ko driver.
+ #
+
++# If KERNELRELEASE is undefined, then this makefile has been invoked
++# directly from the command line. Invoke the kernel build system.
++ifeq ($(KERNELRELEASE),)
++
++
+ # Update these macros to reflect you environment.
+ #
+-# KERNEL_DIR = the Linux kernel source directory
+-# TOOL_PREFIX = the toolchain directory and decorated name prefix
++# LINUXKERNEL_INSTALL_DIR = the Linux kernel source directory
++# MVTOOL_PREFIX = the toolchain directory and decorated name prefix
+ # DSPLINK_REPO = the repository which contains DSP/BIOS LINK
+-# DSPLINK_BLD = the DSP/BIOS LINK build variant
+ #
+-KERNEL_DIR = /db/toolsrc/library/toolsC38/vendors/mvl/arm/omap3/OMAP35x_SDK_0.9.7/src/linux/kernel_org/2.6_kernel
+-TOOL_PREFIX = /db/toolsrc/library/toolsC38/vendors/cs/arm/arm-2007q3/bin/arm-none-linux-gnueabi-
+-DSPLINK_REPO = /db/atree/library/trees/power/power-d04x/imports
+-DSPLINK_BLD = Linux/OMAP3530/RELEASE
++LINUXKERNEL_INSTALL_DIR := _your_kernel_installation_
++MVTOOL_PREFIX := _your_codegen_installation_and_name_prefix_
++DSPLINK_REPO := _your_dsplink_repository_
+
+ # Set PROFILE to DEBUG or RELEASE
+ PROFILE = RELEASE
+
+ # Process DSPLINK flags
+ LINK_DIR = $(DSPLINK_REPO)/dsplink
+-LINK_PATH = $(LINK_DIR)/gpp/export/BIN/$(DSPLINK_BLD)
++LINK_PATH = $(LINK_DIR)/gpp/export/BIN/Linux/OMAP3530/RELEASE
+ LINK_ORIG := $(shell cat $(LINK_PATH)/DSPLINK.txt)
+ LINK_DEFS := $(shell cat $(LINK_PATH)/PMGR_defines.txt)
+ LINK_INCS := $(shell cat $(LINK_PATH)/PMGR_includes.txt)
+@@ -53,20 +56,11 @@
+ # add internal header files
+ LINK_INCS_INTERNAL = -I$(LINK_DIR)/gpp/export/INCLUDE/Linux/OMAP3530/internal
+
++ifneq ($(wildcard $(LINK_PATH)/Module.symvers),)
++EXTRA_SYMBOLS = $(LINK_PATH)/Module.symvers
++endif
+
+-# If KERNELRELEASE is defined, then this makefile has been invoked
+-# from the kernel build system. Use native build language.
+-ifneq ($(KERNELRELEASE),)
+-
+-obj-m := lpm_omap3530.o
+-lpm_omap3530-objs := lpm_driver.o lpm_omap.o tal_dsplink_gpp.o
+-
+-
+-# Otherwise, this makefile has been invoked directly from the
+-# command line. Invoke the kernel build system.
+-else
+-
+-MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PREFIX)
++MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(MVTOOL_PREFIX)
+ CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL -D$(PROFILE) \
+ $(LINK_DEFS) $(LINK_INCS) $(LINK_INCS_INTERNAL)
+
+@@ -74,19 +68,28 @@
+ CFLAGS := -g $(CFLAGS)
+ endif
+
+-
++# Invoke the kernel build system
+ default:
+- $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) $(MAKE_OPTS) \
++ifneq ($(EXTRA_SYMBOLS),)
++ rm -f Module.symvers
++ cat $(foreach file, $(EXTRA_SYMBOLS), $(file)) >> Module.symvers
++endif
++ $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) M=$(CURDIR) $(MAKE_OPTS) \
+ EXTRA_CFLAGS="$(CFLAGS)" modules
+
+ .clean:
+- $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) $(MAKE_OPTS) clean
++ $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) M=$(CURDIR) $(MAKE_OPTS) clean
++ rm -f modules.order
+
+ .help:
+- $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) help
++ $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) M=$(CURDIR) help
+
+-endif
+-#
+-# @(#) ti.bios.power; 1, 1, 0,1; 11-5-2008 16:38:57; /db/atree/library/trees/power/power-d04x/src/
+-#
+
++# If KERNELRELEASE is defined, then this makefile has been invoked
++# from the kernel build system. Use native build language.
++else
++
++obj-m := lpm_omap3530.o
++lpm_omap3530-objs := lpm_driver.o lpm_omap.o tal_dsplink_gpp.o
++
++endif
diff --git a/packages/dsplink/files/sdma-class-device-and-includes-fix.patch b/packages/dsplink/files/sdma-class-device-and-includes-fix.patch
new file mode 100644
index 0000000000..2dcc7a3b7e
--- /dev/null
+++ b/packages/dsplink/files/sdma-class-device-and-includes-fix.patch
@@ -0,0 +1,59 @@
+diff -uNr codec_engine_2_21/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c codec_engine_2_21_fix/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c
+--- codec_engine_2_21/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c 2009-02-20 14:49:41.000000000 +0000
++++ codec_engine_2_21_fix/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c 2009-02-20 15:07:59.000000000 +0000
+@@ -17,6 +17,7 @@
+ /*
+ * sdmak.c
+ */
++#include <linux/version.h>
+ #include <linux/kernel.h>
+ #include <linux/sched.h>
+ #include <linux/module.h>
+@@ -32,14 +33,20 @@
+ #include <linux/irq.h>
+ #include <linux/highmem.h>
+ #include <linux/pagemap.h>
+-
+-#include <asm/arch/dma.h>
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
++#include <asm/arch/dma.h>
+ #include <asm/hardware.h>
+ #include <asm/dma.h>
+-#include <asm/io.h>
+ #include <asm/arch/tc.h>
++#else
++#include <asm/dma.h>
++#include <mach/hardware.h>
++#include <mach/dma.h>
++#include <mach/tc.h>
++#endif
++#include <asm/io.h>
+
+ #include "../interface/sdma.h"
+
+@@ -229,7 +236,11 @@
+ __D("sdma registered major = %d\n", major);
+
+ dma_class = class_create(THIS_MODULE, "sdma");
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+ class_device_create(dma_class, NULL, MKDEV(major, 0), NULL, "sdma");
++#else
++ device_create(dma_class, NULL, MKDEV(major, 0), NULL, "sdma");
++#endif
+
+ for (channel = 0; channel < SDMA_NUMCHANNELS; channel++) {
+ channels[channel].owner = NULL;
+@@ -248,7 +259,11 @@
+ omap_free_dma(channel);
+ }
+ }
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+ class_device_destroy(dma_class, MKDEV(major, 0));
++#else
++ device_destroy(dma_class, MKDEV(major, 0));
++#endif
+ class_destroy(dma_class);
+ unregister_chrdev(major, "sdma");
+
diff --git a/packages/dsplink/files/unloadmodules-ti-codec-engine-apps.sh b/packages/dsplink/files/unloadmodules-ti-codec-engine-apps.sh
new file mode 100755
index 0000000000..f990d99771
--- /dev/null
+++ b/packages/dsplink/files/unloadmodules-ti-codec-engine-apps.sh
@@ -0,0 +1,12 @@
+# Unload modules - CODEC ENGINE - OMAP3530
+
+# remove lpm module
+rmmod lpm_omap3530
+
+# remove DSP/BIOS Link driver
+rmmod dsplinkk
+#rm -f /dev/dsplink
+
+# remove cmem module
+rmmod cmemk
+
diff --git a/packages/dsplink/files/unloadmodules-ti-dmai-apps.sh b/packages/dsplink/files/unloadmodules-ti-dmai-apps.sh
new file mode 100755
index 0000000000..793d727f39
--- /dev/null
+++ b/packages/dsplink/files/unloadmodules-ti-dmai-apps.sh
@@ -0,0 +1,12 @@
+# Unload modules - DMAI - OMAP3530
+
+# remove lpm module
+rmmod lpm_omap3530
+
+# remove DSP/BIOS Link driver
+rmmod dsplinkk
+#rm -f /dev/dsplink
+
+# remove cmem module
+rmmod cmemk
+
diff --git a/packages/dsplink/files/unloadmodules-ti-dsplink-apps.sh b/packages/dsplink/files/unloadmodules-ti-dsplink-apps.sh
new file mode 100755
index 0000000000..48fa84b03d
--- /dev/null
+++ b/packages/dsplink/files/unloadmodules-ti-dsplink-apps.sh
@@ -0,0 +1,5 @@
+# Unload modules - DSPLINK - OMAP3530
+
+# remove DSP/BIOS Link driver
+rmmod dsplinkk
+#rm -f /dev/dsplink
diff --git a/packages/dsplink/files/xdcpaths.mak b/packages/dsplink/files/xdcpaths.mak
deleted file mode 100644
index 3df3bf6305..0000000000
--- a/packages/dsplink/files/xdcpaths.mak
+++ /dev/null
@@ -1,232 +0,0 @@
-#
-# ======== xdcpaths.mak ========
-# definition of XDC paths and commands
-#
-# This makefile constructs the "search path" for the XDC tools where it finds
-# numerous components and packages needed to build Codec Engine examples and
-# programs.
-#
-# USER NOTE:
-# 1) you must specify various <component>_INSTALL_DIRs directores below to
-# reflect your installation, where <component> is CE for Codec Engine,
-# BIOS for DSP/BIOS, etc.
-# 2) you must specify compiler path and name in CGTOOLS_* variables below
-# 3) you can remove some of the devices from the "DEVICES" list and/or remove
-# some of the types of binaries from the "PROGRAMS" list to reduce
-# the build time (and possibly avoid checking for presence of a component
-# you don't need)
-
-
-
-# (Optional) Remove from this list the devices you're not interested in building
-DEVICES := DM6446 DM355 DM6437 DM648 DM6467
-
-# (Optional) Remove from the list the types of programs you're not intersted in
-# building:
-# APP_CLIENT -- Arm client for codecs running on the DSP, on dual-CPU systems
-# DSP_SERVER -- DSP server with the codecs, running on the DSP, on dual-CPUs
-# APP_LOCAL -- Client+codecs in a single program, whether Arm only or DSP only
-PROGRAMS := APP_CLIENT DSP_SERVER APP_LOCAL
-
-
-# (Mandatory) Specify where various components are installed.
-# What you need depends on what device(s) you're building for, what type(s) of
-# programs you are building for, and whether your Codec Engine distribution
-# is a "big" one that contains all the minor components in its "cetools"
-# directory. The legend:
-# CE - Codec Engine (needed for Arm and for DSP)
-# XDC - XDC tools (Arm and DSP)
-# BIOS - DSP/BIOS (DSP only)
-# XDAIS - XDAIS header files (Arm and DSP)
-# FC - Framework components, various resource managers (ARM and DSP)
-# CMEM - Continuous memory manager (Arm only)
-# DSPLINK - Arm<->DSP communication software (Arm + DSP)
-#
-# you can omit directory specifications for the components you think you don't
-# need (will be warned if you do, based on your DEVICES + PROGRAMS selection
-# above).
-
-CE_INSTALL_DIR := SEDME_S
-XDC_INSTALL_DIR := SEDME_XDCTOOLSUNPACKDIR
-BIOS_INSTALL_DIR := SEDME_BIOSUNPACKDIR
-
-# no need to specify the installation directories below if your CE installation
-# has cetools/ directory on top
-USE_CETOOLS_IF_EXISTS := 1
-XDAIS_INSTALL_DIR := _your_xDAIS_installation_directory/xdais_6_10_01
-DSPLINK_INSTALL_DIR := _your_DSPLink_installation_directory/dsplink-davinci-v1.50-prebuilt
-CMEM_INSTALL_DIR := _your_CMEM_installation_directory/cmem_2_10
-FC_INSTALL_DIR := _your_FC_installation_directory/framework_components_2_10_01
-BIOSUTILS_INSTALL_DIR := _your_BIOSUTILS_installation_directory/biosutils
-
-
-# (Mandatory) specify correct compiler paths and names for the architectures
-# you'll be building for:
-
-# compiler path and name for Montavista Arm 9 toolchain. NOTE: make sure the
-# directory you specify has a "bin" subdirectory
-CGTOOLS_MVARM9 = /db/toolsrc/library/tools/vendors/mvl/arm/mvl4.0-new/montavista/pro/devkit/arm/v5t_le
-CC_MVARM9 = bin/arm_v5t_le-gcc
-
-# compiler path and name for TI C64x toolchain. NOTE: make sure the
-# directory you specify has a "bin" subdirectory
-CGTOOLS_C64P = /db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux
-CC_C64P = bin/cl6x
-
-# -----------------------------------------------------------------------------
-
-# figure out what categories of devices we are to build for
-ifneq (,$(findstring DM6446,$(DEVICES)))
- DEVICES_DAVINCI := 1
-endif
-ifneq (,$(findstring DM6467,$(DEVICES)))
- DEVICES_DAVINCI := 1
-endif
-ifneq (,$(findstring DM355,$(DEVICES)))
- DEVICES_ARMONLY := 1
-endif
-ifneq (,$(findstring DM6437,$(DEVICES)))
- DEVICES_DSPONLY := 1
-endif
-ifneq (,$(findstring DM648,$(DEVICES)))
- DEVICES_DSPONLY := 1
-endif
-
-# determine which components are necessary based on DEVICES and PROGRAMS
-REQUIRE_CE := 1
-REQUIRE_XDC := 1
-REQUIRE_XDAIS := 1
-REQUIRE_FC := 1
-
-ifneq (,$(findstring DM6446,$(DEVICES)))
- ifneq (, $(findstring APP_CLIENT, $(PROGRAMS) ))
- REQUIRE_LINK := 1
- REQUIRE_CMEM := 1
- endif
- ifneq (, $(findstring DSP_SERVER, $(PROGRAMS) ))
- REQUIRE_LINK := 1
- REQUIRE_BIOS := 1
- endif
-endif
-
-ifneq (,$(findstring DM6467,$(DEVICES)))
- ifneq (, $(findstring APP_CLIENT, $(PROGRAMS) ))
- REQUIRE_LINK := 1
- REQUIRE_CMEM := 1
- endif
- ifneq (, $(findstring DSP_SERVER, $(PROGRAMS) ))
- REQUIRE_LINK := 1
- REQUIRE_BIOS := 1
- endif
-endif
-
-ifneq (,$(findstring DM355,$(DEVICES)))
- ifneq (, $(findstring APP_LOCAL, $(PROGRAMS) ))
- REQUIRE_CMEM := 1
- endif
-endif
-
-ifneq (,$(findstring DM6437,$(DEVICES)))
- ifneq (, $(findstring APP_LOCAL, $(PROGRAMS) ))
- REQUIRE_BIOS := 1
- endif
-endif
-
-ifneq (,$(findstring DM648,$(DEVICES)))
- ifneq (, $(findstring APP_LOCAL, $(PROGRAMS) ))
- REQUIRE_BIOS := 1
- endif
-endif
-
-
-# Build the XDC path from the necessary components, verifying along the way
-# that the required compoments are present
-XDC_PATH :=
-
-ERRMSG = which is invalid (could not find file "$(TEST_FILE)"). Set this in <codec engine examples>/xdcpaths.mak! See the build documentation to correct this error.
-
-# CE_INSTALL_DIR is the location of your Codec Engine.
-ifeq ($(REQUIRE_CE), 1)
- TEST_FILE := $(CE_INSTALL_DIR)/packages/ti/sdo/ce/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error CE_INSTALL_DIR is set to "$(CE_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(CE_INSTALL_DIR)/packages
-endif
-
-# Add cetools to XDCPATH if 1) $(USE_CETOOLS_IF_EXISTS) is set, and
-# 2) the CE distribution has "cetools/"
-USING_CETOOLS := 0
-ifeq ($(USE_CETOOLS_IF_EXISTS), 1)
- ifneq ($(wildcard $(CE_INSTALL_DIR)/cetools),)
- USING_CETOOLS := 1
- XDC_PATH := $(CE_INSTALL_DIR)/cetools/packages;$(XDC_PATH)
- endif
-endif
-ifeq ($(USING_CETOOLS),0)
- # XDAIS_INSTALL_DIR is the location of your XDAIS distribution
- ifeq ($(REQUIRE_XDAIS), 1)
- TEST_FILE := $(XDAIS_INSTALL_DIR)/packages/ti/xdais/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error XDAIS_INSTALL_DIR is set to "$(XDAIS_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(XDC_PATH);$(XDAIS_INSTALL_DIR)/packages
- endif
-
- # DSPLINK_INSTALL_DIR is the location of your DSPLINK distribution
- ifeq ($(REQUIRE_LINK), 1)
- TEST_FILE := $(DSPLINK_INSTALL_DIR)/packages/dsplink/gpp/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error DSPLINK_INSTALL_DIR is set to "$(DSPLINK_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(XDC_PATH);$(DSPLINK_INSTALL_DIR)/packages
- endif
-
- # CMEM_INSTALL_DIR is the location of your CMEM distribution
- ifeq ($(REQUIRE_CMEM), 1)
- TEST_FILE := $(CMEM_INSTALL_DIR)/packages/ti/sdo/linuxutils/cmem/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error CMEM_INSTALL_DIR is set to "$(CMEM_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(XDC_PATH);$(CMEM_INSTALL_DIR)/packages
- endif
-
- # FC_INSTALL_DIR is the location of your Frameworks Components distribution
- ifeq ($(REQUIRE_FC), 1)
- TEST_FILE := $(FC_INSTALL_DIR)/packages/ti/sdo/fc/dskt2/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error FC_INSTALL_DIR is set to "$(FC_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(XDC_PATH);$(FC_INSTALL_DIR)/packages
- endif
-
- # BIOSUTILS_INSTALL_DIR is the location of your BIOSUTILS distribution
- ifeq ($(REQUIRE_BIOS), 1)
- TEST_FILE := $(BIOSUTILS_INSTALL_DIR)/packages/ti/bios/utils/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error BIOSUTILS_INSTALL_DIR is set to "$(BIOSUTILS_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(XDC_PATH);$(BIOSUTILS_INSTALL_DIR)/packages
- endif
-
-endif
-
-# BIOS_INSTALL_DIR is the location of your BIOS distribution
-ifeq ($(REQUIRE_BIOS), 1)
- TEST_FILE := $(BIOS_INSTALL_DIR)/packages/ti/bios/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error BIOS_INSTALL_DIR is set to "$(BIOS_INSTALL_DIR)", $(ERRMSG))
- endif
- XDC_PATH := $(XDC_PATH);$(BIOS_INSTALL_DIR)/packages
-endif
-
-# XDC_INSTALL_DIR is the location of your XDCTOOLS installation.
-ifeq ($(REQUIRE_XDC), 1)
- TEST_FILE := $(XDC_INSTALL_DIR)/packages/xdc/package.xdc
- ifeq ($(wildcard $(TEST_FILE)),)
- $(error XDC_INSTALL_DIR is set to "$(XDC_INSTALL_DIR)", $(ERRMSG))
- endif
-endif
-
-# XDC_PATH is complete. Any other components you could add as
-# XDC_PATH := <your component>/packages;$(XDC_PATH)
diff --git a/packages/dsplink/gstreamer-ti/gst-buffsize.diff b/packages/dsplink/gstreamer-ti/gst-buffsize.diff
new file mode 100644
index 0000000000..2d71286498
--- /dev/null
+++ b/packages/dsplink/gstreamer-ti/gst-buffsize.diff
@@ -0,0 +1,113 @@
+ ChangeLog | 10 ++++++++++
+ src/gsttividdec2.c | 25 +++++++++++++++++++++----
+ src/gsttividdec2.h | 2 ++
+ 3 files changed, 33 insertions(+), 4 deletions(-)
+
+diff -Nurd --exclude .svn trunk/gstreamer_ti/ti_build/ticodecplugin/ChangeLog branches/BRANCH_DDOMPE_BUFFERSIZES/gstreamer_ti/ti_build/ticodecplugin/ChangeLog
+--- ticodecplugin/ChangeLog 2009-03-03 08:57:50.000000000 +0100
++++ ticodecplugin/ChangeLog 2009-03-03 08:59:20.000000000 +0100
+@@ -1,3 +1,13 @@
++2009-03-01 Diego Dompe, RidgeRun
++ * src/gsttividdec2.{c.h}:
++ Create the output buffer tab using the recently added height and width
++ attributes passed by the capabilities. This solves integration problems
++ with other elements like ffmpegcolorspace and xvimagesink, where they
++ will fail because the second buffer pushed over the src pad of the
++ decoder has a size different from the first one. Using the input caps
++ for the creation of the buffer tab we have a more educated guess on the
++ output buffer size, and the resizing won't be required.
++
+ 2009-02-25 Brijesh Singh, Texas Instruments, Inc.
+ * src/{gsttividenc1.{c,h},gsttividenc.{c,h},gsttividdec1.{c,h},gsttividdec.
+ {c,h},gsttiauddec1.{c,h},gsttiauddec.{c,h},gsttiimgdec1.{c,h},gsttiimgenc1.
+diff -Nurd --exclude .svn trunk/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c branches/BRANCH_DDOMPE_BUFFERSIZES/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c
+--- ticodecplugin/src/gsttividdec2.c 2009-03-03 08:57:50.000000000 +0100
++++ ticodecplugin/src/gsttividdec2.c 2009-03-03 08:59:20.000000000 +0100
+@@ -21,7 +21,11 @@
+ * Original Author:
+ * Don Darling, Texas Instruments, Inc.
+ *
++ * Contributors:
++ * Diego Dompe, RidgeRun
++ *
+ * Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
++ * Copyright (C) $year RidgeRun
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+@@ -350,6 +354,8 @@
+
+ viddec2->framerateNum = 0;
+ viddec2->framerateDen = 0;
++ viddec2->height = 0;
++ viddec2->width = 0;
+
+ viddec2->numOutputBufs = 0UL;
+ viddec2->hOutBufTab = NULL;
+@@ -484,6 +490,14 @@
+ viddec2->framerateNum = framerateNum;
+ viddec2->framerateDen = framerateDen;
+ }
++
++ if (!gst_structure_get_int(capStruct, "height", &viddec2->height)) {
++ viddec2->height = 0;
++ }
++
++ if (!gst_structure_get_int(capStruct, "width", &viddec2->width)) {
++ viddec2->width = 0;
++ }
+ }
+
+ /* MPEG Decode */
+@@ -1048,6 +1062,7 @@
+ Cpu_Device device;
+ ColorSpace_Type colorSpace;
+ Int defaultNumBufs;
++ Int outBufSize;
+
+ /* Open the codec engine */
+ GST_LOG("opening codec engine \"%s\"\n", viddec2->engineName);
+@@ -1116,8 +1131,8 @@
+ /* Create codec output buffers */
+ GST_LOG("creating output buffer table\n");
+ gfxAttrs.colorSpace = colorSpace;
+- gfxAttrs.dim.width = params.maxWidth;
+- gfxAttrs.dim.height = params.maxHeight;
++ gfxAttrs.dim.width = viddec2->width;
++ gfxAttrs.dim.height = viddec2->height;
+ gfxAttrs.dim.lineLength = BufferGfx_calcLineLength(
+ gfxAttrs.dim.width, gfxAttrs.colorSpace);
+
+@@ -1125,8 +1140,10 @@
+ gfxAttrs.bAttrs.useMask = gst_tidmaibuffertransport_GST_FREE |
+ gst_tividdec2_CODEC_FREE;
+
++ outBufSize = gfxAttrs.dim.lineLength * viddec2->height;
++
+ viddec2->hOutBufTab =
+- BufTab_create(viddec2->numOutputBufs, Vdec2_getOutBufSize(viddec2->hVd),
++ BufTab_create(viddec2->numOutputBufs, outBufSize,
+ BufferGfx_getBufferAttrs(&gfxAttrs));
+
+ if (viddec2->hOutBufTab == NULL) {
+@@ -1295,7 +1312,7 @@
+ */
+ outBuf = gst_tidmaibuffertransport_new(hDstBuf);
+ gst_buffer_set_data(outBuf, GST_BUFFER_DATA(outBuf),
+- Buffer_getNumBytesUsed(hDstBuf));
++ Vdec2_getOutBufSize(viddec2->hVd));
+ gst_buffer_set_caps(outBuf, GST_PAD_CAPS(viddec2->srcpad));
+
+ /* If we have a valid time stamp, set it on the buffer */
+diff -Nurd --exclude .svn trunk/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h branches/BRANCH_DDOMPE_BUFFERSIZES/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h
+--- ticodecplugin/src/gsttividdec2.h 2009-03-03 08:57:50.000000000 +0100
++++ ticodecplugin/src/gsttividdec2.h 2009-03-03 08:59:20.000000000 +0100
+@@ -96,6 +96,8 @@
+ /* Framerate (Num/Den) */
+ gint framerateNum;
+ gint framerateDen;
++ gint height;
++ gint width;
+
+ /* Buffer management */
+ UInt32 numOutputBufs;
diff --git a/packages/dsplink/gstreamer-ti_svn.bb b/packages/dsplink/gstreamer-ti_svn.bb
index 9c22734dd5..bcfaa3458b 100644
--- a/packages/dsplink/gstreamer-ti_svn.bb
+++ b/packages/dsplink/gstreamer-ti_svn.bb
@@ -1,7 +1,10 @@
-DEPENDS = "codec-engine dmai gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly libid3tag liboil libmad"
+DEPENDS = "ti-codec-engine ti-dmai gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly libid3tag liboil libmad"
-SRC_URI = "svn://omapzoom.org/svn/gstreamer_ti/trunk;module=gstreamer_ti;proto=https"
-SRCREV = "43"
+SRC_URI = "svn://gforge.ti.com/svn/gstreamer_ti/trunk;module=gstreamer_ti;proto=https;user=anonymous;pswd='' \
+ file://gst-buffsize.diff;patch=1"
+SRCREV = "127"
+
+PR = "r5"
# Again, no '.' in PWD allowed :(
PV = "0+svnr${SRCREV}"
@@ -12,8 +15,35 @@ inherit autotools
require ti-paths.inc
+export DMAI_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai"
+export CE_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine"
+export FC_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+export CODEC_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos"
+
+export XDC_TARGET = "gnu.targets.arm.GCArmv5T"
+
+XDC_PLATFORM = "foo"
+# Assume every TI armv7a cpu is a 3530
+XDC_PLATFORM_armv7a = "ti.platforms.evm3530"
+export XDC_PLATFORM
+
+# We need to add this to config.bld:
+#GCArmv5T.cc.$unseal("opts");
+#GCArmv5T.cc.opts = "SEDME_CCARCH";
+#GCArmv5T.cc.$seal("opts");
+
+do_compile_prepend() {
+ for i in $(find ${S} -name "config.bld") ; do
+ sed -i -e s:SEDME_CCARCH:'${TARGET_CCARCH}': $i
+ done
+}
+
CPPFLAGS_append = " -DPlatform_${PLATFORM}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
+RDEPENDS_${PN} = "ti-dmai"
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.a ${libdir}/gstreamer-0.10/*.la"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
diff --git a/packages/dsplink/readme.txt b/packages/dsplink/readme.txt
new file mode 100644
index 0000000000..8dd71e6fee
--- /dev/null
+++ b/packages/dsplink/readme.txt
@@ -0,0 +1,10 @@
+placeholder for readme
+
+todo with this package
+- rename top level dsplink directory
+- repartion code into different recipes - create codecengine-examples package
+/DONE - fix lpm build to pick up Module.symversion
+- cleanup device selection script - not good to just /d the targets - need cleaner solution
+- staging needs work
+
+- add ce 2.22
diff --git a/packages/dsplink/ti-codec-combos_3.16.bb b/packages/dsplink/ti-codec-combos_3.16.bb
new file mode 100644
index 0000000000..923e9eeff2
--- /dev/null
+++ b/packages/dsplink/ti-codec-combos_3.16.bb
@@ -0,0 +1,82 @@
+DESCRIPTION = "Codec combos for omap3530"
+DEPENDS = "ti-codec-engine"
+LICENCE = "unknown"
+
+require ti-paths.inc
+
+SRC_URI = "http://software-dl.ti.com/sdo/sdo_apps_public_sw/omap3530_dvsdk_combos_tspa/omap3530_dvsdk_combos_tspa-3_16-Linux-x86.bin \
+ "
+
+S = "${WORKDIR}/omap3530_dvsdk_combos_3_16"
+
+# Yes, the xdc stuff still breaks with a '.' in PWD
+PV = "316"
+PR = "r12"
+
+TARGET = "all"
+
+export CE_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/packages;${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+
+# Needed for now since makefile in latest package assumes this is set
+export CODEC_INSTALL_DIR="${S}"
+
+# Helper function to run the binary installer and unpack the tar.gz in the same place as it was before - this could be optimised later
+do_accept_license() {
+ export HOME="${WORKDIR}"
+ chmod +x ${WORKDIR}/omap3530_dvsdk_combos_tspa-3_16-Linux-x86.bin
+ ${WORKDIR}/omap3530_dvsdk_combos_tspa-3_16-Linux-x86.bin --mode silent --prefix ${S}_install
+ cd "${S}_install"
+ tar -xzvf omap3530_dvsdk_combos_tspa_3_16.tar.gz
+ if [ -d ${S} ] ; then
+ rm -rf ${S}
+ fi
+ mv omap3530_dvsdk_combos_tspa_3_16 ${S}
+}
+
+addtask accept_license after do_unpack before do_configure
+
+do_compile() {
+
+ # For now, remove the reference to Rules.make and swap prod for eval, since this only has eval libs included
+ sed -i \
+ -e '/Rules.make/d' \
+ -e s:prod:eval:g \
+ ${S}/Makefile
+
+ # Fix-up config.bld to swap out hardcoded references to tools paths
+ sed -i -e s:/opt/dmsw/cg6x_6_0_16:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
+ ${S}/config.bld
+
+ oe_runmake clean
+ oe_runmake
+}
+
+do_install () {
+ echo oe_runmake install
+
+ install -d ${D}/${datadir}/ti-codec-combos
+
+ cd ${S}
+
+ # grab the server executables
+ for i in $(find . -name "*.x64P") ; do
+ install ${i} ${D}/${datadir}/ti-codec-combos
+ done
+
+ # copy the generated data sheets as well for reference
+ for i in $(find . -name "*.DataSheet.*") ; do
+ install ${i} ${D}/${datadir}/ti-codec-combos
+ done
+}
+
+do_stage () {
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos
+}
+
+FILES_ti-codec-combos = "${datadir}/ti-codec-combos/*"
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
diff --git a/packages/dsplink/ti-codec-engine_2.21.bb b/packages/dsplink/ti-codec-engine_2.21.bb
new file mode 100644
index 0000000000..8fcae851bb
--- /dev/null
+++ b/packages/dsplink/ti-codec-engine_2.21.bb
@@ -0,0 +1,275 @@
+require dsplink.inc
+
+DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
+
+DEPENDS = "virtual/kernel perl-native"
+RDEPENDS = "update-modules"
+
+inherit module
+
+# tconf from xdctools dislikes '.' in pwd :/
+PR = "r17"
+PV = "221"
+
+# Get CE tarball from TI website, place in sources and calculate
+# md5sum
+# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html
+
+SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_21.tar.gz \
+ file://cmem-class-device-27-and-sched-include-fix.patch;patch=1 \
+ file://sdma-class-device-and-includes-fix.patch;patch=1 \
+ file://dsplink-semaphore-27.patch;patch=1 \
+ file://dsplink-add-class-device-create-support.patch;patch=1 \
+ file://lpm-device-create-and-semaphore-include-fix.patch;patch=1 \
+ file://lpm-make-symbol-warnings-fix.patch;patch=1 \
+ file://Makefile-dsplink-gpp \
+ file://Makefile-dsplink-dsp \
+ file://loadmodules-ti-dsplink-apps.sh \
+ file://unloadmodules-ti-dsplink-apps.sh \
+ file://loadmodules-ti-codec-engine-apps.sh \
+ file://unloadmodules-ti-codec-engine-apps.sh \
+"
+
+S = "${WORKDIR}/codec_engine_2_21"
+
+require ti-paths.inc
+
+export DSPLINK="${S}/cetools/packages/dsplink"
+
+PARALLEL_MAKE = ""
+
+# the include files on top define do_compile for the submodules
+do_compile_append() {
+
+#dsplink already done from inclusion of require dsplink.inc
+
+#lpm bits
+ if [ -e ${S}/cetools/packages/ti/bios/power/ ] ; then
+
+ # Build the DSP power manager kernel module
+ cd ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm
+
+ # Still need to move this into the patch file
+ if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 26 ] ; then
+ sed -i -e s:asm/semaphore:linux/semaphore: lpm_driver.c
+ fi
+
+ #what is this for?
+ rm -f *o
+
+ # lpm also needs KERNEL_INSTALL_DIR and MVTOOL_PREFIX which come from ti-paths.inc
+ export DSPLINK_REPO=${DSPLINK}/..
+ # should move the clean step into the clean stage..
+ #oe_runmake clean
+ oe_runmake
+ fi
+
+#cmemk bits
+ if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/cmem ] ; then
+ echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
+ echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
+ echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
+ #export DSPLINK=${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/dsplink
+
+ # Build the cmem kernel module and associated test apps
+ # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
+ oe_runmake clean
+ oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
+ KERNEL_SRC=${STAGING_KERNEL_DIR} \
+ KERNEL_VERSION=${KERNEL_VERSION} \
+ CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+ AR="${KERNEL_AR}"
+ fi
+
+#sdma bits
+ if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/sdma ] ; then
+ echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
+ echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
+ echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
+
+ # Build the sdma kernel module and associated test apps
+ # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
+ oe_runmake clean
+ oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
+ KERNEL_SRC=${STAGING_KERNEL_DIR} \
+ KERNEL_VERSION=${KERNEL_VERSION} \
+ CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+ AR="${KERNEL_AR}"
+ fi
+
+
+#need to add other modules here, like IRQ, etc
+
+
+#now build the CE examples
+ cd ${S}/examples
+
+ # Fix paths to arm crosstools, c6x codegen and x86 gcc
+ # Also disable uclibc and x86 builds
+ sed -i -e s:/db/toolsrc/library/tools/vendors/cs/arm/arm-2007q3:${CROSS_DIR}:g \
+ -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
+ -e s:/db/toolsrc/library/tools/vendors/opensource/gcc/4.1.0/Linux/gcc-4.1.0-glibc-2.3.6/i686-unknown-linux-gnu:/usr:g \
+ -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
+ -e 's:true, // build for uC Linux:false,:g' \
+ -e 's:true, // build for PC Linux:false,:g' \
+ ${S}/examples/user.bld
+
+ # For now, remove all targets, except dm6446 and omap3530
+ sed -i \
+ -e '/evmDM357/d' \
+ -e '/evmDM6446/d' \
+ -e '/evmDM6467/d' \
+ -e '/evmDM355/d' \
+ -e '/evmDM6437/d' \
+ -e '/evmDM648/d' \
+ -e '/sdp3430/d' \
+ -e '/evm2530/d' \
+ ${S}/examples/user.bld
+
+ # Fix path to c6x codegen
+ sed -i -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
+ xdcpaths.mak
+
+ # Start building the CE examples: codecs, extensions, servers (codec bundles) and ARM side apps
+ # the DSP side uses CC to point to the c6x codegen, but would get the gcc tool
+ unset CC
+
+ # Make clean doesn't do what you'd expect, it only cleans stuff you've enabled, so some cruft remains
+
+ # First clean
+ for i in codecs extensions servers apps ; do
+ make -e -C ${S}/examples/ti/sdo/ce/examples/$i clean
+ done
+
+ # Then build the examples
+ for i in codecs extensions servers apps ; do
+ make -e -C ${S}/examples/ti/sdo/ce/examples/$i
+ done
+}
+
+do_install_append () {
+ #driver - kernel module
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ cp ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
+ cp ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
+ cp ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
+
+ #library
+ #install -d ${D}/${libdir}
+ #install -m 0755 ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${D}/${libdir}
+
+ #sample apps - this is very 64x / v5T specific at the moment - we really need CE to give us this list...
+ install -d ${D}/${datadir}/ti-codec-engine
+ # we change pwd so that find gives us relative path to the files, which we use to create the same structure on the target
+ cd ${S}/examples/ti/sdo/ce
+
+ #test app module un/load scripts
+ install ${WORKDIR}/loadmodules-ti-dsplink-apps.sh ${D}/${datadir}/ti-dsplink
+ install ${WORKDIR}/unloadmodules-ti-dsplink-apps.sh ${D}/${datadir}/ti-dsplink
+
+ #ce samples
+ # first find all the app files named '.out'
+ for i in $(find . -name "*.out") ; do
+ # first create the directory
+ install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ # now copy the file
+ install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ done
+
+ # next find all the app files named '.xv5T'
+ for i in $(find . -name "*.xv5T") ; do
+ # first create the directory
+ install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ # now copy the file
+ install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ done
+
+ # then find all the app/server files named '.x64P'
+ for i in $(find . -name "*.x64P") ; do
+ # first create the directory
+ install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ # now copy the file
+ install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ done
+
+ # finally find all the app files named '.dat'
+ for i in $(find . -name "*.dat") ; do
+ # first create the directory
+ install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ # now copy the file
+ install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
+ done
+
+ #test app module un/load scripts
+ install ${WORKDIR}/loadmodules-ti-codec-engine-apps.sh ${D}/${datadir}/ti-codec-engine
+ install ${WORKDIR}/unloadmodules-ti-codec-engine-apps.sh ${D}/${datadir}/ti-codec-engine
+
+ # we should install the CMEM apps as well here
+
+ # finally, strip targets that we're not supporting here
+ # - TODO...
+}
+
+PACKAGES =+ "ti-lpm-module ti-cmem-module ti-sdma-module ti-codec-engine-apps"
+
+FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
+FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
+FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
+FILES_ti-codec-engine-apps = "${datadir}/ti-codec-engine/*"
+
+pkg_postinst_ti-lpm-module () {
+ if [ -n "$D" ]; then
+ exit 1
+ fi
+ depmod -a
+ update-modules || true
+}
+
+pkg_postrm_ti-lpm-module () {
+ update-modules || true
+}
+
+pkg_postinst_ti-cmem-module () {
+ if [ -n "$D" ]; then
+ exit 1
+ fi
+ depmod -a
+ update-modules || true
+}
+
+pkg_postrm_ti-cmem-module () {
+ update-modules || true
+}
+
+pkg_postinst_ti-sdma-module () {
+ if [ -n "$D" ]; then
+ exit 1
+ fi
+ depmod -a
+ update-modules || true
+}
+
+pkg_postrm_ti-sdma-module () {
+ update-modules || true
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#legacy upgrade helpers
+RPROVIDES_ti-cmem-module += "ti-cmemk-module"
+RREPLACES_ti-cmem-module += "ti-cmemk-module"
+
+# ti-dsplink-module can be built by either codec-engine or standalone dsplink - tell it to use this one, else unwanted dependence
+PREFERRED_PROVIDER_ti-dsplink-module = "ti-codec-engine"
+
+#add run-time dependencies - note for kernel module we can only use RRECOMMENDS, since modules might be built into the kernel
+RRECOMMENDS_ti-codec-engine-apps += "ti-dsplink-module ti-lpm-module ti-cmem-module ti-sdma-module"
+
diff --git a/packages/dsplink/ti-dmai_1.20.bb b/packages/dsplink/ti-dmai_1.20.bb
new file mode 100644
index 0000000000..b95f241dd3
--- /dev/null
+++ b/packages/dsplink/ti-dmai_1.20.bb
@@ -0,0 +1,93 @@
+DESCRIPTION = "Davinci (and OMAP) Multimedia Application Interface"
+DEPENDS = "virtual/kernel ti-codec-engine ti-codec-combos"
+LICENCE = "unknown"
+
+require ti-paths.inc
+
+# https://www-a.ti.com/downloads/sds_support/applications_packages/dmai/dmai_1_20_00_06/dmai_setuplinux_1_20_00_06.bin
+# Install the above link and put the dmai_1_20_00_06.tar.gz file in the same directory as this recipe
+SRC_URI = "file://dmai_1_20_00_06.tar.gz \
+ file://dmai-update-cpu-name.patch;patch=1 \
+ file://dmai-update-fb-display.patch;patch=1 \
+ file://dmai-update-v4l2-display.patch;patch=1 \
+ file://dmai-do-not-panic-on-mixer-failure.patch;patch=1 \
+ file://dmai-support-32bit-align.patch;patch=1 \
+ file://dmai-built-with-angstrom.patch;patch=1 \
+ file://loadmodules-ti-dmai-apps.sh \
+ file://unloadmodules-ti-dmai-apps.sh \
+ "
+
+S = "${WORKDIR}/dmai_1_20_00_06"
+# Yes, the xdc stuff still breaks with a '.' in PWD
+PV = "120"
+PR = "r14"
+
+TARGET = "all"
+TARGET_neuros-osd2 = " dm6446_al dm6446_db"
+TARGET_beagleboard = " o3530_al"
+TARGET_omap3evm = " o3530_al"
+
+export CE_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine"
+export FC_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+export CODEC_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos"
+
+do_compile_prepend_omap3evm() {
+
+#temp removal of sources that fail to build on evm3530
+ if [ -e packages/ti/sdo/dmai/linux/omap3530/Resize.c ]; then
+ rm packages/ti/sdo/dmai/linux/omap3530/Resize.c
+ fi
+
+ if [ -e packages/ti/sdo/dmai/linux/omap3530/Framecopy_accel.c ]; then
+ rm packages/ti/sdo/dmai/linux/omap3530/Framecopy_accel.c
+ fi
+}
+
+do_compile() {
+ cd packages/ti/sdo/dmai
+ oe_runmake clean
+ oe_runmake ${TARGET} C_FLAGS="-O2 -I${STAGING_INCDIR}"
+ cd apps
+ oe_runmake clean
+ oe_runmake ${TARGET}
+}
+
+do_install () {
+ install -d ${D}/${datadir}/ti-dmai/apps
+
+ export EXEC_DIR="${D}/${datadir}/ti-dmai/apps"
+ oe_runmake install
+
+ #test app module un/load scripts
+ install ${WORKDIR}/loadmodules-ti-dmai-apps.sh ${D}/${datadir}/ti-dmai
+ install ${WORKDIR}/unloadmodules-ti-dmai-apps.sh ${D}/${datadir}/ti-dmai
+}
+
+do_stage () {
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai
+}
+
+PACKAGES =+ "ti-dmai-apps"
+
+ALLOW_EMPTY_${PN} = "1"
+RRECOMMENDS_${PN} = "ti-dmai-apps"
+
+FILES_ti-dmai-apps = "${datadir}/ti-dmai/*"
+
+pkg_postinst_ti-dmai-apps () {
+ if [ -n "$D" ]; then
+ exit 1
+ fi
+ ln -sf /usr/share/ti-codec-combos/* /usr/share/ti-dmai/apps
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#add run-time dependencies - note for kernel module we can only use RRECOMMENDS, since modules might be built into the kernel
+# and for now we make codecs RRECOMMENDS as well, since not everyone will have them
+#RDEPENDS_ti-dmai-apps += "ti-codec-combos"
+RRECOMMENDS_ti-dmai-apps += "ti-cmem-module ti-lpm-module ti-dsplink-module ti-codec-combos"
+
diff --git a/packages/dsplink/ti-paths.inc b/packages/dsplink/ti-paths.inc
index 188dd54072..e5b3373fe5 100644
--- a/packages/dsplink/ti-paths.inc
+++ b/packages/dsplink/ti-paths.inc
@@ -13,6 +13,10 @@ TIXDCTOOLSDIR ?= "${TITOOLSDIR}/xdctools_3_10_03"
# Path under TITOOLSDIR where the dsp toolchain is unpacked
TICGTOOLSDIR ?= "cg6x_6_0_16"
+# Path to codecs/servers package - this is taken from DVSDK 3.00.00.29
+# - This needs fixing to be x-platform (not just omap3)
+#TICODECSDIR ?= "omap3530_dvsdk_combos_3_16"
+
# export some more variable to point to external TI tools
# information is duplicated between the js and make based tools
export CE_INSTALL_DIR=${S}
@@ -22,6 +26,21 @@ export BIOS_INSTALL_DIR=${TITOOLSDIR}/${TIBIOSDIR}
export CGTOOLS_V5T="${CROSS_DIR}"
export CC_V5T="bin/${TARGET_PREFIX}gcc"
export MVTOOL_PREFIX="${TARGET_PREFIX}"
+export MVTOOL_DIR="${CROSS_DIR}"
+export CSTOOL_PREFIX="${TARGET_PREFIX}"
+export CSTOOL_DIR="${CROSS_DIR}"
+export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+
+# used by dmai (and gstreamer_ti?)
+#export CODEC_INSTALL_DIR=${TITOOLSDIR}/${TICODECSDIR}
+
+# This tells codec engine which targets to build
+DEVICES ?= "DM6446"
+DEVICES_omap5912osk = "fixme-ti-paths.inc"
+DEVICES_omap3evm = "OMAP3530"
+DEVICES_beagleboard = "OMAP3530"
+DEVICES_davinci-sffsdr = "DM6446"
+DEVICES_davinci-dvevm = "DM6446"
DSPLINKPLATFORM ?= "DAVINCI"
DSPLINKPLATFORM_omap5912osk = "OMAP"
@@ -51,6 +70,7 @@ GPPOS ?= "MVL5G"
GPPOS_beagleboard = "OMAPLSP"
GPPOS_omap3evm = "OMAPLSP"
+export DEVICES
export DSPLINKPLATFORM
export DSPLINKDSP
export DSPLINKSOC
diff --git a/packages/dtnrg/dtn_2.5.0.bb b/packages/dtnrg/dtn_2.5.0.bb
index eff2e2e5b9..7dc6fc5af8 100644
--- a/packages/dtnrg/dtn_2.5.0.bb
+++ b/packages/dtnrg/dtn_2.5.0.bb
@@ -3,7 +3,10 @@ HOMEPAGE = "http://www.dtnrg.org/wiki"
SECTION = "libs"
DEPENDS = "db openssl python-native xerces-c"
LICENSE = "Apache"
-PR = "r4"
+PR = "r5"
+
+# thread code atomic ops do not play with thumb
+ARM_INSTRUCTION_SET = "arm"
SRC_URI = "\
http://www.dtnrg.org/docs/code/dtn_${PV}.tgz \
@@ -51,7 +54,14 @@ PACKAGES =+ "${PN}-lib"
FILES_${PN}-lib = "${libdir}/*.so*"
PACKAGES += "python-dtn"
DESCRIPTION_python-dtn = "Python bindings to the DTN API"
-PR_python-dtn = "ml3"
+PR_python-dtn = "ml4"
FILES_python-dtn = "${libdir}/${PYTHON_DIR}"
RDEPENDS_python-dtn = "python-core dtn-lib"
-FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/.debug"
+
+FILES_${PN}-dbg += "\
+ ${libdir}/${PYTHON_DIR}/site-packages/.debug \
+ ${libdir}/.debug \
+ ${bindir}/.debug \
+"
+
+FILES_${PN} += "${sysconfdir}"
diff --git a/packages/e17/e-wm/illume-disable-screensaver.patch b/packages/e17/e-wm/illume-disable-screensaver.patch
new file mode 100644
index 0000000000..984895cf59
--- /dev/null
+++ b/packages/e17/e-wm/illume-disable-screensaver.patch
@@ -0,0 +1,13 @@
+Index: e/config/illume/e.src
+===================================================================
+--- e.orig/config/illume/e.src 2009-01-30 23:34:37.000000000 +0100
++++ e/config/illume/e.src 2009-01-30 23:34:54.000000000 +0100
+@@ -665,7 +665,7 @@
+ value "display_res_height" int: 1;
+ value "display_res_hz" int: 0;
+ value "display_res_rotation" int: 0;
+- value "screensaver_enable" int: 1;
++ value "screensaver_enable" int: 0;
+ value "screensaver_timeout" int: 30;
+ value "screensaver_interval" int: 5;
+ value "screensaver_blanking" int: 2;
diff --git a/packages/e17/e-wm_svn.bb b/packages/e17/e-wm_svn.bb
index d2c416c94f..e82cf6904e 100644
--- a/packages/e17/e-wm_svn.bb
+++ b/packages/e17/e-wm_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "The Enlightenment Window Manager Version 17"
DEPENDS = "eet evas ecore edje efreet edbus"
LICENSE = "MIT BSD"
PV = "0.16.999.050+svnr${SRCREV}"
-PR = "r2"
+PR = "r3"
inherit e update-alternatives
@@ -70,6 +70,9 @@ SRC_URI = "\
file://applications.menu \
file://gsm-segfault-fix.patch;patch=1;maxrev=37617 \
"
+
+SRC_URI_append_openmoko = " file://illume-disable-screensaver.patch;patch=1 "
+
S = "${WORKDIR}/e"
EXTRA_OECONF = "\
diff --git a/packages/e17/entrance/allow-missing-xsession.patch b/packages/e17/entrance/allow-missing-xsession.patch
index 74289ad3c8..e0ebe6e0e9 100644
--- a/packages/e17/entrance/allow-missing-xsession.patch
+++ b/packages/e17/entrance/allow-missing-xsession.patch
@@ -1,8 +1,8 @@
-Index: entrance-0.9.0.009/configure.in
+Index: entrance/configure.ac
===================================================================
---- entrance-0.9.0.009.orig/configure.in
-+++ entrance-0.9.0.009/configure.in
-@@ -184,10 +184,10 @@ AC_ARG_WITH(xsession,
+--- entrance.orig/configure.ac 2009-02-17 10:59:20.000000000 +0000
++++ entrance/configure.ac 2009-02-17 13:09:51.000000000 +0000
+@@ -198,10 +198,10 @@
fi
]
)
diff --git a/packages/e17/entrance/config-db.patch b/packages/e17/entrance/config-db.patch
index aecbfb6867..89e18ccff4 100644
--- a/packages/e17/entrance/config-db.patch
+++ b/packages/e17/entrance/config-db.patch
@@ -1,7 +1,7 @@
-Index: entrance-0.9.0.009/data/config/build_config.sh.in
+Index: entrance/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
+--- entrance.orig/data/config/build_config.sh.in 2009-02-17 10:59:01.000000000 +0000
++++ entrance/data/config/build_config.sh.in 2009-02-17 13:45:06.000000000 +0000
@@ -1,45 +1,45 @@
#!/bin/sh -e
@@ -24,7 +24,26 @@ Index: entrance-0.9.0.009/data/config/build_config.sh.in
-}
-
-SESSION_DIR=""
--DB="./entrance_config.cfg"
++#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
@@ -45,26 +64,6 @@ Index: entrance-0.9.0.009/data/config/build_config.sh.in
- 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
@@ -84,11 +83,11 @@ Index: entrance-0.9.0.009/data/config/build_config.sh.in
+#if [ -z "$FROM" ] ; then
+# FROM="defaults"
+#fi
-+#echo "Generating config file '$DB' from '$FROM' ..."
++echo "Generating config file '$DB' ..."
rm -f $DB || exit 1
-@@ -59,10 +59,10 @@ ecore_config -c $DB -k /entrance/time_fo
+@@ -59,10 +59,10 @@
#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"
@@ -101,7 +100,7 @@ Index: entrance-0.9.0.009/data/config/build_config.sh.in
ecore_config -c $DB -k /entrance/session/0/title -s "Default"
ecore_config -c $DB -k /entrance/session/0/icon -s "default.png"
#if [ -z "$SESSION_DIR" ] ; then
-@@ -92,7 +92,7 @@ ecore_config -c $DB -k /entrance/session
+@@ -92,7 +92,7 @@
# done
#fi
count=`(expr $count + 1)`
@@ -110,10 +109,10 @@ Index: entrance-0.9.0.009/data/config/build_config.sh.in
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
+@@ -107,5 +107,5 @@
ecore_config -c $DB -k /entrance/presel/mode -i 1
# for Entranced
--ecore_config -c $DB -k /entranced/xserver -s "@xbin@/X -quiet -nolisten tcp@ENTRANCE_VT_ARG@"
+-ecore_config -c $DB -k /entranced/xserver -s "@xbin@/X -quiet -br -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_0.9.0.010.bb b/packages/e17/entrance_0.9.0.010.bb
index a1ffe80023..f9dd5e49ce 100644
--- a/packages/e17/entrance_0.9.0.010.bb
+++ b/packages/e17/entrance_0.9.0.010.bb
@@ -3,7 +3,7 @@ LICENSE = "MIT BSD"
# 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 = "r1"
+PR = "r2"
inherit e
@@ -15,7 +15,7 @@ SRC_URI += "\
file://use-bash.patch;patch=1 \
file://Sessions"
-S = "${WORKDIR}/entrance-${PV}"
+S = "${WORKDIR}/entrance"
EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
--with-xsession=/etc/X11/Xsession \
diff --git a/packages/e2fsprogs/e2fsprogs/e2fsprogs_1.34.bb b/packages/e2fsprogs/e2fsprogs/e2fsprogs_1.34.bb
deleted file mode 100644
index 6558236ae4..0000000000
--- a/packages/e2fsprogs/e2fsprogs/e2fsprogs_1.34.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "EXT2 Filesystem Utilities"
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "virtual/libc"
-RDEPENDS = "libc6"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/e2fsprogs/e2fsprogs-${PV}.tar.gz \
- file://${FILESDIR}/ln.patch;patch=1 \
- file://${FILESDIR}/configure.patch;patch=1 \
- file://${FILESDIR}/compile-subst.patch;patch=1 \
- file://${FILESDIR}/m4.patch;patch=1
-
-inherit autotools
-
-do_compile_prepend () {
- find ./ -print|xargs chmod u=rwX
-}
diff --git a/packages/e2fsprogs/e2fsprogs_1.38.bb b/packages/e2fsprogs/e2fsprogs_1.38.bb
index c92b48856f..5687556c78 100644
--- a/packages/e2fsprogs/e2fsprogs_1.38.bb
+++ b/packages/e2fsprogs/e2fsprogs_1.38.bb
@@ -1,11 +1,13 @@
require e2fsprogs.inc
-PR = "r17"
+PR = "r19"
SRC_URI += "file://no-hardlinks.patch;patch=1 \
file://mkinstalldirs.patch;patch=1 \
"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
do_compile_prepend () {
find ./ -print|xargs chmod u=rwX
( cd util; ${BUILD_CC} subst.c -o subst )
@@ -36,7 +38,7 @@ do_stage () {
RDEPENDS_e2fsprogs = "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-badblocks"
PACKAGES =+ "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-tune2fs e2fsprogs-badblocks"
-FILES_e2fsprogs-blkid = "${base_sbindir}/blkid"
+FILES_e2fsprogs-blkid = "${base_sbindir}/blkid.${PN}"
FILES_e2fsprogs-uuidgen = "${bindir}/uuidgen"
FILES_e2fsprogs-fsck = "${base_sbindir}/fsck.${PN}"
FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
@@ -46,6 +48,7 @@ FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
do_install_append () {
mv ${D}${base_sbindir}/fsck ${D}${base_sbindir}/fsck.${PN}
+ mv ${D}${base_sbindir}/blkid ${D}${base_sbindir}/blkid.${PN}
mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
mv ${D}${base_sbindir}/fsck.ext2 ${D}${base_sbindir}/fsck.ext2.${PN}
mv ${D}${base_sbindir}/fsck.ext3 ${D}${base_sbindir}/fsck.ext3.${PN}
@@ -62,6 +65,14 @@ pkg_prerm_e2fsprogs-fsck () {
update-alternatives --remove fsck fsck.${PN}
}
+pkg_postinst_e2fsprogs-blkid () {
+ update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-blkid () {
+ update-alternatives --remove blkid blkid.${PN}
+}
+
pkg_postinst_e2fsprogs-e2fsck () {
update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
diff --git a/packages/e2fsprogs/e2fsprogs_1.41.4.bb b/packages/e2fsprogs/e2fsprogs_1.41.4.bb
new file mode 100644
index 0000000000..dda4b81582
--- /dev/null
+++ b/packages/e2fsprogs/e2fsprogs_1.41.4.bb
@@ -0,0 +1,101 @@
+require e2fsprogs.inc
+
+PR = "r1"
+
+#SRC_URI += "file://no-hardlinks.patch;patch=1 \
+# file://mkinstalldirs.patch;patch=1 \
+# "
+
+do_configure() {
+ # avoid autoreconf
+ oe_runconf $@
+}
+
+do_compile_prepend () {
+ find ./ -print|xargs chmod u=rwX
+ ( cd util; ${BUILD_CC} subst.c -o subst )
+}
+
+ext2fsheaders = "ext2_ext_attr.h bitops.h ext2_err.h \
+ ext2_types.h ext2_fs.h ext2_io.h \
+ ext2fs.h"
+e2pheaders = "e2p.h"
+
+do_stage () {
+ oe_libinstall -a -C lib libe2p ${STAGING_LIBDIR}/
+ oe_libinstall -a -C lib libext2fs ${STAGING_LIBDIR}/
+ install -d ${STAGING_INCDIR}/e2p
+ for h in ${e2pheaders}; do
+ install -m 0644 lib/e2p/$h ${STAGING_INCDIR}/e2p/ || die "failed to install $h"
+ done
+ install -d ${STAGING_INCDIR}/ext2fs
+ for h in ${ext2fsheaders}; do
+ install -m 0644 lib/ext2fs/$h ${STAGING_INCDIR}/ext2fs/ || die "failed to install $h"
+ done
+ autotools_stage_all
+}
+
+# blkid used to be part of e2fsprogs but is useful outside, add it
+# as an RDEPENDS so that anything relying on it being in e2fsprogs
+# still works
+RDEPENDS_e2fsprogs = "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-badblocks"
+
+PACKAGES =+ "e2fsprogs-blkid e2fsprogs-uuidgen e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-tune2fs e2fsprogs-badblocks"
+FILES_e2fsprogs-blkid = "${base_sbindir}/blkid.${PN}"
+FILES_e2fsprogs-uuidgen = "${bindir}/uuidgen"
+FILES_e2fsprogs-fsck = "${base_sbindir}/fsck.${PN}"
+FILES_e2fsprogs-e2fsck = "${base_sbindir}/e2fsck.${PN} ${base_sbindir}/fsck.ext*.${PN}"
+FILES_e2fsprogs-mke2fs = "${base_sbindir}/mke2fs.${PN} ${base_sbindir}/mkfs.ext*.${PN}"
+FILES_e2fsprogs-tune2fs = "${base_sbindir}/tune2fs ${base_sbindir}/e2label ${base_sbindir}/findfs"
+FILES_e2fsprogs-badblocks = "${base_sbindir}/badblocks"
+
+do_install_append () {
+ mv ${D}${base_sbindir}/fsck ${D}${base_sbindir}/fsck.${PN}
+ mv ${D}${base_sbindir}/blkid ${D}${base_sbindir}/blkid.${PN}
+ mv ${D}${base_sbindir}/e2fsck ${D}${base_sbindir}/e2fsck.${PN}
+ mv ${D}${base_sbindir}/fsck.ext2 ${D}${base_sbindir}/fsck.ext2.${PN}
+ mv ${D}${base_sbindir}/fsck.ext3 ${D}${base_sbindir}/fsck.ext3.${PN}
+ mv ${D}${base_sbindir}/mke2fs ${D}${base_sbindir}/mke2fs.${PN}
+ mv ${D}${base_sbindir}/mkfs.ext2 ${D}${base_sbindir}/mkfs.ext2.${PN}
+ mv ${D}${base_sbindir}/mkfs.ext3 ${D}${base_sbindir}/mkfs.ext3.${PN}
+}
+
+pkg_postinst_e2fsprogs-fsck () {
+ update-alternatives --install ${base_sbindir}/fsck fsck fsck.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-fsck () {
+ update-alternatives --remove fsck fsck.${PN}
+}
+
+pkg_postinst_e2fsprogs-blkid () {
+ update-alternatives --install ${base_sbindir}/blkid blkid blkid.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-blkid () {
+ update-alternatives --remove blkid blkid.${PN}
+}
+
+pkg_postinst_e2fsprogs-e2fsck () {
+ update-alternatives --install ${base_sbindir}/e2fsck e2fsck e2fsck.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.ext2 fsck.ext2 fsck.ext2.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.ext3 fsck.ext3 fsck.ext3.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-e2fsck () {
+ update-alternatives --remove e2fsck e2fsck.${PN}
+ update-alternatives --remove fsck.ext2 fsck.ext2.${PN}
+ update-alternatives --remove fsck.ext3 fsck.ext3.${PN}
+}
+
+pkg_postinst_e2fsprogs-mke2fs () {
+ update-alternatives --install ${base_sbindir}/mke2fs mke2fs mke2fs.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.ext2 mkfs.ext2 mkfs.ext2.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.ext3 mkfs.ext3 mkfs.ext3.${PN} 100
+}
+
+pkg_prerm_e2fsprogs-mke2fs () {
+ update-alternatives --remove mke2fs mke2fs.${PN}
+ update-alternatives --remove mkfs.ext2 mkfs.ext2.${PN}
+ update-alternatives --remove mkfs.ext3 mkfs.ext3.${PN}
+}
diff --git a/packages/ecj/libecj-bootstrap_3.4.1.bb b/packages/ecj/libecj-bootstrap_3.4.1.bb
new file mode 100644
index 0000000000..85662abb4c
--- /dev/null
+++ b/packages/ecj/libecj-bootstrap_3.4.1.bb
@@ -0,0 +1,8 @@
+require libecj-bootstrap.inc
+
+PR = "r0"
+
+SRC_URI = "\
+ http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4.1-200809111700/ecjsrc-3.4.1.zip \
+ "
+
diff --git a/packages/ecj/libecj-bootstrap_3.4.bb b/packages/ecj/libecj-bootstrap_3.4.bb
index c321a8f2c1..381f424735 100644
--- a/packages/ecj/libecj-bootstrap_3.4.bb
+++ b/packages/ecj/libecj-bootstrap_3.4.bb
@@ -1,6 +1,8 @@
require libecj-bootstrap.inc
+PR = "r1"
+
SRC_URI = "\
- http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4-200806172000/ecjsrc.zip \
+ http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.4-200806172000/ecjsrc-3.4.zip \
"
diff --git a/packages/efl1/ecore-native_svn.bb b/packages/efl1/ecore-native_svn.bb
index 2fc383b367..22208b926e 100644
--- a/packages/efl1/ecore-native_svn.bb
+++ b/packages/efl1/ecore-native_svn.bb
@@ -1,11 +1,11 @@
require ecore.inc
inherit native
DEPENDS = "eet-native evas-native"
-PR = "r2"
+PR = "r3"
EXTRA_OECONF = "\
--enable-ecore-txt \
- --disable-ecore-config \
+ --enable-ecore-config \
--disable-ecore-x-xcb \
--disable-ecore-x \
--enable-ecore-job \
diff --git a/packages/efl1/ecore.inc b/packages/efl1/ecore.inc
index 653fb18ccd..a25cacc3e9 100644
--- a/packages/efl1/ecore.inc
+++ b/packages/efl1/ecore.inc
@@ -8,8 +8,6 @@ PR = "r1"
inherit efl
-SRC_URI += "file://fix-directfb-include.patch;patch=1"
-
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ecore"
PACKAGES += "\
diff --git a/packages/efl1/elementary_svn.bb b/packages/efl1/elementary_svn.bb
index eb880aedca..82a099f00d 100644
--- a/packages/efl1/elementary_svn.bb
+++ b/packages/efl1/elementary_svn.bb
@@ -2,16 +2,17 @@ DESCRIPTION = "EFL based widget set for mobile devices"
LICENSE = "LGPL"
DEPENDS = "evas ecore edje eet edbus"
PV = "0.0.0+svnr${SRCREV}"
-PR = "r3"
+PR = "r4"
inherit efl
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/TMP/st;module=elementary;proto=http"
S = "${WORKDIR}/elementary"
-PACKAGES =+ "${PN}-tests"
-RDEPENDS = "elementary-themes"
-RRECOMMENDS = "elementary-tests"
+RDEPENDS_${PN} = "elementary-themes"
+RRECOMMENDS_${PN} = "elementary-tests"
do_compile_append() {
sed -i -e s:${STAGING_DIR_TARGET}::g \
diff --git a/packages/eglibc/eglibc-package.bbclass b/packages/eglibc/eglibc-package.bbclass
index 2de24db859..7fcb558399 100644
--- a/packages/eglibc/eglibc-package.bbclass
+++ b/packages/eglibc/eglibc-package.bbclass
@@ -193,9 +193,41 @@ python package_do_split_gconvs () {
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')
+ def calc_gconv_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-gconv-%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)
+ bb.data.setVar('RPROVIDES_%s' % pkg, pkg.replace('eglibc', 'glibc'), d)
+
+ do_split_packages(d, gconv_libdir, file_regex='^(.*)\.so$', output_pattern='eglibc-gconv-%s', description='gconv module for character set %s', hook=calc_gconv_deps, extra_depends='eglibc-gconv')
+
+ def calc_charmap_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-charmap-%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)
+ bb.data.setVar('RPROVIDES_%s' % pkg, pkg.replace('eglibc', 'glibc'), d)
- do_split_packages(d, charmap_dir, file_regex='^(.*)\.gz$', output_pattern='eglibc-charmap-%s', description='character map for %s encoding', extra_depends='')
+ do_split_packages(d, charmap_dir, file_regex='^(.*)\.gz$', output_pattern='eglibc-charmap-%s', description='character map for %s encoding', hook=calc_charmap_deps, extra_depends='')
def calc_locale_deps(fn, pkg, file_regex, output_pattern, group):
deps = []
@@ -211,7 +243,7 @@ python package_do_split_gconvs () {
f.close()
if deps != []:
bb.data.setVar('RDEPENDS_%s' % pkg, " ".join(deps), d)
- bb.data.setVar('RPROVIDES_%s' % pkg, 'glibc-localedata-%s' % group, d)
+ bb.data.setVar('RPROVIDES_%s' % pkg, pkg.replace('eglibc', 'glibc'), 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)
diff --git a/packages/eglibc/eglibc.inc b/packages/eglibc/eglibc.inc
index e91ddaa40e..97a45ac8dc 100644
--- a/packages/eglibc/eglibc.inc
+++ b/packages/eglibc/eglibc.inc
@@ -18,4 +18,6 @@ LEAD_SONAME = "libc.so"
GLIBC_EXTRA_OECONF ?= ""
INHIBIT_DEFAULT_DEPS = "1"
+ARM_INSTRUCTION_SET = "arm"
+
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/eglibc/eglibc_2.9.bb b/packages/eglibc/eglibc_2.9.bb
index 207c73a9aa..ecd21de6fe 100644
--- a/packages/eglibc/eglibc_2.9.bb
+++ b/packages/eglibc/eglibc_2.9.bb
@@ -1,9 +1,10 @@
require eglibc.inc
+DEPENDS += "gperf-native"
DEFAULT_PREFERENCE = "1"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/eglibc-svn"
PV = "2.9"
-PR = "r0"
+PR = "r4"
SVN_REV="7430"
EGLIBC_BRANCH="eglibc-2_9"
SRC_URI = "svn://svn.eglibc.org/branches;module=eglibc-2_9;rev=${SVN_REV};proto=svn \
diff --git a/packages/eglibc/eglibc_svn.bb b/packages/eglibc/eglibc_svn.bb
index a0d322a954..a2d3e872f9 100644
--- a/packages/eglibc/eglibc_svn.bb
+++ b/packages/eglibc/eglibc_svn.bb
@@ -1,10 +1,11 @@
require eglibc.inc
+DEPENDS += "gperf-native"
SRCREV = "7542"
# DEFAULT_PREFERENCE = "-1"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/eglibc-svn"
PV = "2.9+svnr${SRCREV}"
-PR = "r0"
+PR = "r3"
EGLIBC_BRANCH="trunk"
SRC_URI = "svn://svn.eglibc.org;module=trunk \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/packages/ekiga/ekiga_3.0.2.bb b/packages/ekiga/ekiga_3.0.2.bb
index e181004af5..30f33c0ab8 100644
--- a/packages/ekiga/ekiga_3.0.2.bb
+++ b/packages/ekiga/ekiga_3.0.2.bb
@@ -3,6 +3,8 @@ LICENSE = "GPLv2"
PR = "r1"
+ARM_INSTRUCTION_SET = "arm"
+
inherit gnome
DEPENDS += " avahi libnotify eds-dbus libgnome gtkmm libsigc++-2.0 gstreamer opal ptlib"
RDEPENDS += "opal ptlib"
diff --git a/packages/ekiga/ekiga_3.1.0.bb b/packages/ekiga/ekiga_3.1.0.bb
index 7baf40402d..38695903c1 100644
--- a/packages/ekiga/ekiga_3.1.0.bb
+++ b/packages/ekiga/ekiga_3.1.0.bb
@@ -1,7 +1,9 @@
DESCRIPTION = "Gnome videoconferencing application"
LICENSE = "GPLv2"
-PR = "r2"
+PR = "r3"
+
+ARM_INSTRUCTION_SET = "arm"
inherit gnome
DEPENDS += " avahi libnotify eds-dbus libgnome gtkmm libsigc++-2.0 gstreamer gst-plugins-good gst-plugins-base gst-plugins-bad opal ptlib gnome-doc-utils"
diff --git a/packages/ekiga/opal_3.5.2.bb b/packages/ekiga/opal_3.5.2.bb
index 2ad8547c26..ea4685d4c5 100644
--- a/packages/ekiga/opal_3.5.2.bb
+++ b/packages/ekiga/opal_3.5.2.bb
@@ -1,6 +1,8 @@
DESCRIPTION = "Open Phone Abstraction Library, implementation of the ITU H.323 teleconferencing protocol, and successor of the openh323 library."
LICENSE = "MPL"
+PR = "r1"
+
inherit gnome
DEPENDS += " ffmpeg ptlib virtual/libsdl openldap"
@@ -10,6 +12,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/opalvoip/opal-${PV}.tar.bz2 \
"
EXTRA_OECONF = "--enable-localgsm --disable-spandsp "
+ARM_INSTRUCTION_SET = "arm"
do_configure() {
libtoolize --force
diff --git a/packages/euphony/euphony_0.1.2.bb b/packages/euphony/euphony_0.1.3.bb
index 134a39dc5e..134a39dc5e 100644
--- a/packages/euphony/euphony_0.1.2.bb
+++ b/packages/euphony/euphony_0.1.3.bb
diff --git a/packages/evtest/evtest_1.23.bb b/packages/evtest/evtest_1.23.bb
new file mode 100644
index 0000000000..4c5d195277
--- /dev/null
+++ b/packages/evtest/evtest_1.23.bb
@@ -0,0 +1,21 @@
+# Copyright (C) 2009 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Event device test program"
+AUTHOR = "Vojtech Pavlik <vojtech@suse.cz>"
+SECTION = "console/utils"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+PR = "r0"
+
+SRC_URI = "http://beagleboard.googlecode.com/files/evtest.c"
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} evtest.c -o evtest -I${STAGING_INCDIR} -L${STAGING_LIBDIR}
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 evtest ${D}${bindir}
+}
diff --git a/packages/ezx/ezx-gen-blob/gen-blob b/packages/ezx/ezx-gen-blob/gen-blob
deleted file mode 100644
index 1131a211ca..0000000000
--- a/packages/ezx/ezx-gen-blob/gen-blob
+++ /dev/null
Binary files differ
diff --git a/packages/ezx/ezx-gen-blob_20080707.bb b/packages/ezx/ezx-gen-blob_20080707.bb
deleted file mode 100644
index 50fcd8b105..0000000000
--- a/packages/ezx/ezx-gen-blob_20080707.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "Generic Blob [Bootloader] for the Motorola EZX platform"
-SECTION = "bootloaders"
-AUTHOR = "Daniel Riberio"
-HOMEPAGE = "http://people.openezx.org/wyrm/gen-blob"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PROVIDES = "virtual/bootloader"
-
-SRC_URI = "file://gen-blob"
-S = "${WORKDIR}"
-
-do_deploy() {
- dd if=${WORKDIR}/gen-blob bs=1k seek=2 conv=sync of=${WORKDIR}/gen-blob-a1200
-
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 gen-blob ${DEPLOY_DIR_IMAGE}/gen-blob-for-1stgen.${SRCDATE}
- install -m 0644 gen-blob-a1200 ${DEPLOY_DIR_IMAGE}/gen-blob-for-2ndgen.${SRCDATE}
-}
-
-do_install() {
- dd if=${WORKDIR}/gen-blob bs=1k seek=2 conv=sync of=${WORKDIR}/gen-blob-a1200
-
- install -d ${D}/${datadir}/openezx
- install -m 0644 gen-blob ${D}${datadir}/openezx/gen-blob-for-1stgen.${SRCDATE}
- install -m 0644 gen-blob-a1200 ${D}${datadir}/openezx/gen-blob-for-2ndgen.${SRCDATE}
-}
-
-addtask deploy before do_build after do_compile
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-FILES_${PN} = "${datadir}"
-
diff --git a/packages/ezx/ezx-gen-blob_svn.bb b/packages/ezx/ezx-gen-blob_svn.bb
new file mode 100644
index 0000000000..5841407ce3
--- /dev/null
+++ b/packages/ezx/ezx-gen-blob_svn.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Generic Blob [Bootloader] for the Motorola EZX platform"
+SECTION = "bootloaders"
+AUTHOR = "OpenEZX Team"
+HOMEPAGE = "http://people.openezx.org/wyrm/gen-blob"
+LICENSE = "GPL"
+PROVIDES = "virtual/bootloader"
+DEPENDS = "virtual/kernel"
+PV = "1.0.0+${SRCREV}"
+PR = "r1"
+
+SRC_URI = "\
+ svn://svn.openezx.org/trunk/src/blob/;module=gen-blob;proto=http \
+ file://remove-bogus-sed.patch;patch=1 \
+"
+S = "${WORKDIR}/gen-blob"
+
+inherit autotools
+
+EXTRA_OECONF = "\
+ --with-board=lubbock \
+ --with-cpu=pxa262 \
+ --with-linux-prefix=${STAGING_KERNEL_DIR} \
+ --enable-usb \
+"
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 src/blob/blob-a780 ${DEPLOY_DIR_IMAGE}/gen-blob-for-1stgen.${SRCDATE}
+ install -m 0644 src/blob/blob-a1200 ${DEPLOY_DIR_IMAGE}/gen-blob-for-2ndgen.${SRCDATE}
+}
+
+addtask deploy before do_build after do_compile
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/ezx/files/remove-bogus-sed.patch b/packages/ezx/files/remove-bogus-sed.patch
new file mode 100644
index 0000000000..8597ed945d
--- /dev/null
+++ b/packages/ezx/files/remove-bogus-sed.patch
@@ -0,0 +1,15 @@
+Index: gen-blob/configure
+===================================================================
+--- gen-blob.orig/configure
++++ gen-blob/configure
+@@ -1970,8 +1970,8 @@
+ fi
+
+
+-CFLAGS=`echo $CFLAGS | sed 's/\ *-g\ */\ /'`
+-LDFLAGS=`echo $LDFLAGS | sed 's/\ *-g\ */\ /'`
++CFLAGS=`echo $CFLAGS`
++LDFLAGS=`echo $LDFLAGS`
+ CCAS=`echo $CC`
+ CCASFLAGS=`echo $CFLAGS -D__ASSEMBLY__ `
+
diff --git a/packages/fakeroot/fakeroot-1.9.6/configure-libtool.patch b/packages/fakeroot/fakeroot-1.9.6/configure-libtool.patch
new file mode 100644
index 0000000000..8830328eb5
--- /dev/null
+++ b/packages/fakeroot/fakeroot-1.9.6/configure-libtool.patch
@@ -0,0 +1,18 @@
+--- fakeroot-1.8.3/configure.ac.orig 2007-10-31 00:17:27.000000000 -0500
++++ fakeroot-1.8.3/configure.ac 2007-10-31 00:18:12.000000000 -0500
+@@ -1,14 +1,12 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT([fakeroot],[FAKEROOT_VERSION],[schizo@debian.org],[fakeroot])
+ AC_PREREQ(2.61)
+-LT_PREREQ(2.1a)
+ AC_CANONICAL_TARGET
+ AM_INIT_AUTOMAKE
+ AM_MAINTAINER_MODE
+ AC_CONFIG_HEADERS([config.h])
+ AC_PROG_MAKE_SET
+-LT_INIT
+-LT_LANG(C)
++AC_PROG_LIBTOOL
+
+ AC_ARG_WITH([ipc],
+ AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@],
diff --git a/packages/fakeroot/fakeroot-1.9.6/fix-prefix.patch b/packages/fakeroot/fakeroot-1.9.6/fix-prefix.patch
new file mode 100644
index 0000000000..3884aca01c
--- /dev/null
+++ b/packages/fakeroot/fakeroot-1.9.6/fix-prefix.patch
@@ -0,0 +1,18 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- fakeroot-1.2.13/scripts/fakeroot.in~fix-prefix
++++ fakeroot-1.2.13/scripts/fakeroot.in
+@@ -15,8 +15,8 @@
+ }
+
+ # strip /bin/fakeroot to find install prefix
+-PREFIX=@prefix@
+-BINDIR=@bindir@
++BINDIR=`dirname $0`
++PREFIX=`dirname ${BINDIR}`
+
+ LIB=lib@fakeroot_transformed@.so.0
+ PATHS=@libdir@:${PREFIX}/lib64/libfakeroot:${PREFIX}/lib32/libfakeroot
diff --git a/packages/fakeroot/fakeroot-native_1.12.1.bb b/packages/fakeroot/fakeroot-native_1.12.1.bb
new file mode 100644
index 0000000000..5215dc86ed
--- /dev/null
+++ b/packages/fakeroot/fakeroot-native_1.12.1.bb
@@ -0,0 +1,20 @@
+require fakeroot_${PV}.bb
+
+SRC_URI += "file://fix-prefix.patch;patch=1"
+S = "${WORKDIR}/fakeroot-${PV}"
+
+inherit native
+
+EXTRA_OECONF = "--program-prefix="
+
+# Compatability for the rare systems not using or having SYSV
+python () {
+ if bb.data.getVar('HOST_NONSYSV', d, True) and bb.data.getVar('HOST_NONSYSV', d, True) != '0':
+ bb.data.setVar('EXTRA_OECONF', ' --with-ipc=tcp --program-prefix= ', d)
+}
+
+do_stage_append () {
+ oe_libinstall -so libfakeroot ${STAGING_LIBDIR}/libfakeroot/
+}
+
+RDEPENDS = "util-linux-native"
diff --git a/packages/fakeroot/fakeroot-native_1.7.1.bb b/packages/fakeroot/fakeroot-native_1.7.1.bb
deleted file mode 100644
index 8a54d6497c..0000000000
--- a/packages/fakeroot/fakeroot-native_1.7.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require fakeroot_${PV}.bb
-inherit native
-RDEPENDS = "util-linux-native"
-
-SRC_URI += "file://fix-prefix.patch;patch=1 "
-S = "${WORKDIR}/fakeroot-${PV}"
-
-EXTRA_OECONF = " --program-prefix="
-
-# Compatability for the rare systems not using or having SYSV
-python () {
- if bb.data.getVar('HOST_NONSYSV', d, True) and bb.data.getVar('HOST_NONSYSV', d, True) != '0':
- bb.data.setVar('EXTRA_OECONF', ' --with-ipc=tcp --program-prefix= ', d)
-}
-
-do_stage_append () {
- oe_libinstall -so libfakeroot ${STAGING_LIBDIR}/libfakeroot/
-}
diff --git a/packages/fakeroot/fakeroot_1.12.1.bb b/packages/fakeroot/fakeroot_1.12.1.bb
new file mode 100644
index 0000000000..4b61f252fb
--- /dev/null
+++ b/packages/fakeroot/fakeroot_1.12.1.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Gives a fake root environment"
+HOMEPAGE = "http://fakeroot.alioth.debian.org"
+SECTION = "base"
+LICENSE = "GPL"
+
+SRC_URI = "\
+ ${DEBIAN_MIRROR}/main/f/fakeroot/fakeroot_${PV}.tar.gz \
+ file://configure-libtool.patch;patch=1 \
+"
+
+inherit autotools
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/fakeroot
+ install -m 644 *.h ${STAGING_INCDIR}/fakeroot
+ autotools_stage_all
+}
+
+# fakeroot needs getopt which is provided by the util-linux package
+RDEPENDS = "util-linux"
+
diff --git a/packages/fakeroot/fakeroot_1.7.1.bb b/packages/fakeroot/fakeroot_1.7.1.bb
deleted file mode 100644
index ea3806d2f5..0000000000
--- a/packages/fakeroot/fakeroot_1.7.1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Gives a fake root environment"
-SECTION = "base"
-LICENSE = "GPL"
-# fakeroot needs getopt which is provided by the util-linux package
-RDEPENDS = "util-linux"
-PR = "r2"
-
-SRC_URI = "\
- ftp://ftp.gentoo.mesh-solutions.com/mirrors/gentoo/distfiles/fakeroot_1.7.1.tar.gz \
- file://work-with-older-libtool.patch;patch=1 \
-"
-
-inherit autotools
-
-do_stage() {
- install -d ${STAGING_INCDIR}/fakeroot
- install -m 644 *.h ${STAGING_INCDIR}/fakeroot
- autotools_stage_all
-}
diff --git a/packages/fakeroot/files/configure-libtool.patch b/packages/fakeroot/files/configure-libtool.patch
index 8830328eb5..46f7df7025 100644
--- a/packages/fakeroot/files/configure-libtool.patch
+++ b/packages/fakeroot/files/configure-libtool.patch
@@ -1,9 +1,11 @@
---- fakeroot-1.8.3/configure.ac.orig 2007-10-31 00:17:27.000000000 -0500
-+++ fakeroot-1.8.3/configure.ac 2007-10-31 00:18:12.000000000 -0500
-@@ -1,14 +1,12 @@
- dnl Process this file with autoconf to produce a configure script.
+Index: fakeroot-1.12.1/configure.ac
+===================================================================
+--- fakeroot-1.12.1.orig/configure.ac
++++ fakeroot-1.12.1/configure.ac
+@@ -2,14 +2,12 @@
AC_INIT([fakeroot],[FAKEROOT_VERSION],[schizo@debian.org],[fakeroot])
AC_PREREQ(2.61)
+ AC_CONFIG_MACRO_DIR([build-aux])
-LT_PREREQ(2.1a)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
@@ -14,5 +16,5 @@
-LT_LANG(C)
+AC_PROG_LIBTOOL
- AC_ARG_WITH([ipc],
- AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@],
+ AH_BOTTOM([#if ! HAVE_BUILTIN_EXPECT
+ #define __builtin_expect(x, expected_value) (x)
diff --git a/packages/fakeroot/files/fix-prefix.patch b/packages/fakeroot/files/fix-prefix.patch
index 3884aca01c..3c47bd7650 100644
--- a/packages/fakeroot/files/fix-prefix.patch
+++ b/packages/fakeroot/files/fix-prefix.patch
@@ -1,11 +1,8 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- fakeroot-1.2.13/scripts/fakeroot.in~fix-prefix
-+++ fakeroot-1.2.13/scripts/fakeroot.in
-@@ -15,8 +15,8 @@
+Index: fakeroot-1.12.1/scripts/fakeroot.in
+===================================================================
+--- fakeroot-1.12.1.orig/scripts/fakeroot.in
++++ fakeroot-1.12.1/scripts/fakeroot.in
+@@ -30,8 +30,8 @@
}
# strip /bin/fakeroot to find install prefix
@@ -13,6 +10,6 @@
-BINDIR=@bindir@
+BINDIR=`dirname $0`
+PREFIX=`dirname ${BINDIR}`
-
- LIB=lib@fakeroot_transformed@.so.0
- PATHS=@libdir@:${PREFIX}/lib64/libfakeroot:${PREFIX}/lib32/libfakeroot
+
+ USEABSLIBPATH=@LDPRELOADABS@
+ LIB=lib@fakeroot_transformed@@DLSUFFIX@
diff --git a/packages/fakeroot/files/work-with-older-libtool.patch b/packages/fakeroot/files/work-with-older-libtool.patch
deleted file mode 100644
index 05f9be87b6..0000000000
--- a/packages/fakeroot/files/work-with-older-libtool.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- fakeroot-1.7.1/configure.ac.orig 2007-08-09 16:03:34.000000000 -0500
-+++ fakeroot-1.7.1/configure.ac 2007-08-09 18:26:11.000000000 -0500
-@@ -7,8 +7,6 @@
- AC_CONFIG_HEADERS([config.h])
- AC_PROG_MAKE_SET
- AM_PROG_LIBTOOL
--LT_INIT
--LT_LANG(C)
-
- AC_ARG_WITH([ipc],
- AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@],
diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb
index 42e34d5d5b..b2b854aed8 100644
--- a/packages/ffmpeg/ffmpeg_git.bb
+++ b/packages/ffmpeg/ffmpeg_git.bb
@@ -7,9 +7,7 @@ PV = "0.4.9+${PR}+gitr${SRCREV}"
PR = "r38"
DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_armv5te = "1"
-DEFAULT_PREFERENCE_armv6 = "1"
-DEFAULT_PREFERENCE_armv7a = "1"
+DEFAULT_PREFERENCE_arm = "1"
DEFAULT_PREFERENCE_avr32 = "1"
FFBRANCH_arm = "arm"
diff --git a/packages/forte/forte-0.3.5/forte-0.3.5_socket_reuse.patch b/packages/forte/forte-0.3.5/forte-0.3.5_socket_reuse.patch
new file mode 100644
index 0000000000..a3dcd10917
--- /dev/null
+++ b/packages/forte/forte-0.3.5/forte-0.3.5_socket_reuse.patch
@@ -0,0 +1,20 @@
+diff -Naur FORTE-0.3.5.orig/src/arch/pc/pcsochan.cpp FORTE-0.3.5/src/arch/pc/pcsochan.cpp
+--- FORTE-0.3.5.orig/src/arch/pc/pcsochan.cpp 2009-01-13 16:17:18.000000000 +0000
++++ FORTE-0.3.5/src/arch/pc/pcsochan.cpp 2009-02-16 10:08:53.000000000 +0000
+@@ -128,6 +128,16 @@
+ }
+ // switch between client/server:
+ if (pa_stConnectionInformation.m_enServiceType == e_Server) {
++ unsigned int opt = 1;
++
++ if (setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) != 0)
++ {
++ char acError[80] = { "TCP-Socket setsockopt() failed: " };
++ strcat(acError, strerror(errno));
++ DEVLOG_ERROR(cg_nID_CSocketHandler, 0x10, acError);
++ return -1;
++ }
++
+ sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ if (bind(sock_id, (struct sockaddr *)&sock_addr, sizeof(struct sockaddr)) != 0) {
+ DEVLOG_ERROR_2(cg_nID_CSocketHandler, 0x02, "TCP-Socket bind() failed: %s", strerror(errno) );
diff --git a/packages/forte/forte-0.3.5/forte-0.3.5_stdlib_inc_fix.patch b/packages/forte/forte-0.3.5/forte-0.3.5_stdlib_inc_fix.patch
new file mode 100644
index 0000000000..3ebd47325a
--- /dev/null
+++ b/packages/forte/forte-0.3.5/forte-0.3.5_stdlib_inc_fix.patch
@@ -0,0 +1,22 @@
+diff -Naur FORTE-0.3.5.orig/src/core/datatypes/forte_lreal.cpp FORTE-0.3.5/src/core/datatypes/forte_lreal.cpp
+--- FORTE-0.3.5.orig/src/core/datatypes/forte_lreal.cpp 2008-12-11 16:05:26.000000000 +0000
++++ FORTE-0.3.5/src/core/datatypes/forte_lreal.cpp 2009-02-16 11:01:44.000000000 +0000
+@@ -8,6 +8,7 @@
+ * Contributors:
+ * <date>: <author>, <author email> - changes
+ *******************************************************************************/
++#include <stdlib.h>
+ #include <math.h>
+ #include "forte_lreal.h"
+
+diff -Naur FORTE-0.3.5.orig/src/core/datatypes/forte_real.cpp FORTE-0.3.5/src/core/datatypes/forte_real.cpp
+--- FORTE-0.3.5.orig/src/core/datatypes/forte_real.cpp 2008-12-11 16:05:40.000000000 +0000
++++ FORTE-0.3.5/src/core/datatypes/forte_real.cpp 2009-02-16 11:12:16.000000000 +0000
+@@ -8,6 +8,7 @@
+ * Contributors:
+ * <date>: <author>, <author email> - changes
+ *******************************************************************************/
++#include <stdlib.h>
+ #include <math.h>
+ #include "forte_real.h"
+
diff --git a/packages/forte/forte-0.3.5/forte-0.3.5_timer.patch b/packages/forte/forte-0.3.5/forte-0.3.5_timer.patch
new file mode 100644
index 0000000000..2064cda581
--- /dev/null
+++ b/packages/forte/forte-0.3.5/forte-0.3.5_timer.patch
@@ -0,0 +1,48 @@
+diff -Naur FORTE-0.3.5.orig/src/arch/pc/pctimeha.cpp FORTE-0.3.5/src/arch/pc/pctimeha.cpp
+--- FORTE-0.3.5.orig/src/arch/pc/pctimeha.cpp 2009-01-13 16:17:18.000000000 +0000
++++ FORTE-0.3.5/src/arch/pc/pctimeha.cpp 2009-02-16 10:16:37.000000000 +0000
+@@ -11,6 +11,7 @@
+ #include "pctimeha.h"
+ #include "../../core/devexec.h"
+ #include <time.h>
++#include <sys/time.h>
+
+ const TINT32 CPCTimerHandler::csm_nTicksPerSecond = 1000;
+
+@@ -28,14 +29,34 @@
+ disableHandler();
+ }
+
++static inline unsigned long long GetTicks(struct timeval* stTmVal, TINT32 ticksPerSecond)
++{
++ unsigned long long ret = stTmVal->tv_sec * 1000LL;// sec -> ms
++ ret += stTmVal->tv_usec/1000;// + us -> ms
++ ret /= 1000/ticksPerSecond; // ms -> ticks
++ return ret;
++}
++
+ bool CPCTimerHandler::run(){
+ struct timespec stReq;
++ struct timeval stTmNow;
++ unsigned long long tickStart;
++ unsigned long long tickNow;
++ unsigned long long tickCalled = 0;
+ stReq.tv_sec = 0;
+- stReq.tv_nsec = 1000000 / (csm_nTicksPerSecond / 1000);
++ stReq.tv_nsec = 1000000000 / (csm_nTicksPerSecond);
++
++ gettimeofday(&stTmNow, NULL);
++ tickNow = tickStart = GetTicks(&stTmNow, csm_nTicksPerSecond);
+
+ while(m_bAlive){
+- nanosleep(&stReq, NULL);
++ if( (tickNow-tickStart) <= (tickCalled+1) ) {
++ nanosleep(&stReq, NULL);
++ }
+ nextTick();
++ ++tickCalled;
++ gettimeofday(&stTmNow, NULL);
++ tickNow = GetTicks(&stTmNow, csm_nTicksPerSecond);
+ }
+ return true;
+ }
diff --git a/packages/forte/forte-0.3/forte-0.3-patch_20081008.diff b/packages/forte/forte-0.3/forte-0.3-patch_20081008.diff
new file mode 100644
index 0000000000..8478e5f531
--- /dev/null
+++ b/packages/forte/forte-0.3/forte-0.3-patch_20081008.diff
@@ -0,0 +1,109 @@
+diff -Naur forte-0.3.orig/src/arch/netos/txsocha.cpp forte-0.3/src/arch/netos/txsocha.cpp
+--- forte-0.3.orig/src/arch/netos/txsocha.cpp 2008-07-10 07:33:44.000000000 +0000
++++ forte-0.3/src/arch/netos/txsocha.cpp 2008-09-24 13:29:32.000000000 +0000
+@@ -167,7 +167,7 @@
+ strcpy(ip, pa_stConnectionInformation.m_pcConnectionID);
+ sock_addr.sin_family = AF_INET;
+ sock_addr.sin_port = htons(atoi(splitString(ip)));
+- memset(&(sock_addr.sin_zero), '\0', 8);
++ memset(&(sock_addr.sin_zero), '\0', sizeof(sock_addr.sin_zero));
+ fprintf(stderr,"CTXSocketHandler:: Opening TCP-Connection at IP: %s\n",pa_stConnectionInformation.m_pcConnectionID);
+
+ if ((sock_id = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
+diff -Naur forte-0.3.orig/src/arch/pc/pcsochan.cpp forte-0.3/src/arch/pc/pcsochan.cpp
+--- forte-0.3.orig/src/arch/pc/pcsochan.cpp 2008-07-10 07:33:44.000000000 +0000
++++ forte-0.3/src/arch/pc/pcsochan.cpp 2008-09-30 10:23:36.000000000 +0000
+@@ -116,9 +116,9 @@
+ strcpy(ip, pa_stConnectionInformation.m_pcConnectionID);
+ sock_addr.sin_family = AF_INET;
+ sock_addr.sin_port = htons(atoi(splitString(ip)));
+- memset(&(sock_addr.sin_zero), '\0', 8);
++ memset(&(sock_addr.sin_zero), '\0', sizeof(sock_addr.sin_zero));
+
+- char acInfo[64] = { "CPCSocketHandler:: Opening TCP-Connection at IP: " };
++ char acInfo[128] = { "CPCSocketHandler:: Opening TCP-Connection at IP: " };
+ strcat(acInfo, pa_stConnectionInformation.m_pcConnectionID);
+ DEVLOG_INFO(cg_nID_CSocketHandler, 0x10, acInfo);
+
+@@ -130,6 +130,16 @@
+ }
+ // switch between client/server:
+ if (pa_stConnectionInformation.m_enServiceType == e_Server) {
++ unsigned int opt = 1;
++
++ if (setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) != 0)
++ {
++ char acError[80] = { "TCP-Socket setsockopt() failed: " };
++ strcat(acError, strerror(errno));
++ DEVLOG_ERROR(cg_nID_CSocketHandler, 0x10, acError);
++ return -1;
++ }
++
+ sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ if (bind(sock_id, (struct sockaddr *)&sock_addr, sizeof(struct sockaddr))
+ != 0) {
+@@ -191,8 +201,15 @@
+ int CPCSocketHandler::receiveDataOnTCP(SSocketHandlerListEntry &pa_stData) {
+ DEVLOG_INFO(cg_nID_CSocketHandler, 0x10, "CPCSocketHandler:: Entering ReceiveDataOnTCP\n");
+
++ int sock_id;
++
++ if (pa_stData.m_bAcceptedConnection)
++ sock_id = pa_stData.m_nAcceptID;
++ else
++ sock_id = pa_stData.m_nSocketID;
++
+ receveagain: pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nFilledSize
+- =recv(pa_stData.m_nAcceptID, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_pcData, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nMaxSize, 0);
++ =recv(sock_id, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_pcData, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nMaxSize, 0);
+
+ if (pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nFilledSize == -1) {
+ if (errno == EINTR) {
+diff -Naur forte-0.3.orig/src/arch/pc/pctimeha.cpp forte-0.3/src/arch/pc/pctimeha.cpp
+--- forte-0.3.orig/src/arch/pc/pctimeha.cpp 2008-04-22 13:31:52.000000000 +0000
++++ forte-0.3/src/arch/pc/pctimeha.cpp 2008-10-08 12:27:09.000000000 +0000
+@@ -11,6 +11,7 @@
+ #include "pctimeha.h"
+ #include "../../core/devexec.h"
+ #include <time.h>
++#include <sys/time.h>
+
+ const TINT32 CPCTimerHandler::csm_nTicksPerSecond = 1000;
+
+@@ -28,14 +29,34 @@
+ disableHandler();
+ }
+
++static inline unsigned long long GetTicks(struct timeval* stTmVal, TINT32 ticksPerSecond)
++{
++ unsigned long long ret = stTmVal->tv_sec * 1000LL;// sec -> ms
++ ret += stTmVal->tv_usec/1000;// + us -> ms
++ ret /= 1000/ticksPerSecond; // ms -> ticks
++ return ret;
++}
++
+ bool CPCTimerHandler::run(){
+ struct timespec stReq;
++ struct timeval stTmNow;
++ unsigned long long tickStart;
++ unsigned long long tickNow;
++ unsigned long long tickCalled = 0;
+ stReq.tv_sec = 0;
+- stReq.tv_nsec = 1000000 / (csm_nTicksPerSecond / 1000);
++ stReq.tv_nsec = 1000000000 / (csm_nTicksPerSecond);
++
++ gettimeofday(&stTmNow, NULL);
++ tickNow = tickStart = GetTicks(&stTmNow, csm_nTicksPerSecond);
+
+ while(m_bAlive){
+- nanosleep(&stReq, NULL);
++ if( (tickNow-tickStart) <= (tickCalled+1) ) {
++ nanosleep(&stReq, NULL);
++ }
+ nextTick();
++ ++tickCalled;
++ gettimeofday(&stTmNow, NULL);
++ tickNow = GetTicks(&stTmNow, csm_nTicksPerSecond);
+ }
+ return true;
+ }
diff --git a/packages/forte/forte.inc b/packages/forte/forte.inc
new file mode 100644
index 0000000000..fa97055729
--- /dev/null
+++ b/packages/forte/forte.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "4DIAC-RTE (FORTE) is a small portable implementation of an IEC 61499 runtime environment"
+HOMEPAGE = "http://www.fordiac.org/8.0.html"
+SECTION = "console/network"
+DEPENDS = ""
+RDEPENDS = ""
+LICENSE = "EPL"
+
+inherit autotools
+
+EXTRA_OEMAKE = 'LIBS+="-lpthread" CXXFLAGS+="-O0 -g" CPPFLAGS+="-DLOGDEBUG -I${S}/src/core -I${S}/src/core/datatypes -I${S}/src/fblib/events -I${S}/src/fblib/ita -I${S}/src/fblib/math -I${S}/src/fblib/net"'
+
+do_configure_prepend() {
+ chmod +x ${S}/configure
+ ln -s -f ${S}/src/arch/pc ${S}/src/arch/active_arch
+}
diff --git a/packages/forte/forte_0.3.5.bb b/packages/forte/forte_0.3.5.bb
new file mode 100644
index 0000000000..7aeeb8e42e
--- /dev/null
+++ b/packages/forte/forte_0.3.5.bb
@@ -0,0 +1,10 @@
+require forte.inc
+
+PR = "r0"
+
+SRC_URI = "http://downloads.sourceforge.net/fordiac/FORTE-0.3.5.zip \
+ file://forte-0.3.5_socket_reuse.patch;patch=1 \
+ file://forte-0.3.5_timer.patch;patch=1 \
+ file://forte-0.3.5_stdlib_inc_fix.patch;patch=1"
+
+S="${WORKDIR}/FORTE-${PV}"
diff --git a/packages/forte/forte_0.3.bb b/packages/forte/forte_0.3.bb
new file mode 100644
index 0000000000..c434fb39b8
--- /dev/null
+++ b/packages/forte/forte_0.3.bb
@@ -0,0 +1,10 @@
+require forte.inc
+
+PR = "r0"
+
+DEFAULT_PREFERENCE_oxnas = "1"
+
+SRC_URI = "http://kent.dl.sourceforge.net/sourceforge/fordiac/forte-0.3.zip \
+ file://forte-0.3-patch_20081008.diff;patch=1"
+
+S="${WORKDIR}/forte-${PV}"
diff --git a/packages/freesmartphone/frameworkd-devel_git.bb b/packages/freesmartphone/frameworkd-devel_git.bb
index cb52fbc4f5..f5f6c0bc2d 100644
--- a/packages/freesmartphone/frameworkd-devel_git.bb
+++ b/packages/freesmartphone/frameworkd-devel_git.bb
@@ -3,18 +3,12 @@ FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/frameworkd', '${FILE_DIRNA
PROVIDES = "frameworkd"
RPROVIDES = "frameworkd"
PV = "0.8.5.x+gitr${SRCREV}"
-PR = "r1"
+PR = "r0"
DEFAULT_PREFERENCE = "-1"
-# skip this package
-COMPATIBLE_MACHINE = ""
SRC_URI = "\
- ${FREESMARTPHONE_GIT}/framework.git;protocol=git;branch=master \
+ ${FREESMARTPHONE_GIT}/framework.git;protocol=git;branch=mickey/ogsmd-new-timeout \
file://frameworkd \
file://frameworkd.conf \
"
-
-CONFFILES_${PN}-config += "\
- ${sysconfdir}/freesmartphone/ogsmd/networks.tab \
-"
diff --git a/packages/freesmartphone/frameworkd/om-3d7k/frameworkd.conf b/packages/freesmartphone/frameworkd/om-3d7k/frameworkd.conf
new file mode 100644
index 0000000000..d48bc0815c
--- /dev/null
+++ b/packages/freesmartphone/frameworkd/om-3d7k/frameworkd.conf
@@ -0,0 +1,30 @@
+[frameworkd]
+version = 1
+log_level = INFO
+log_to = syslog
+
+[odeviced.audio]
+# set default alsa scenario
+default_scenario = stereoout
+# set path to alsa scenario files
+scenario_dir = /usr/share/openmoko/scenarios
+
+[odeviced.input]
+# Keys
+report1 = AUX,key,169,1
+report2 = POWER,key,116,1
+report3 = USB,key,356,0
+report4 = HEADSET,switch,2,0
+
+[ogsmd]
+# GTA03 has a Cinterion MC75i
+modemtype = cinterion_mc75
+
+[ogpsd]
+disable = 1
+
+[opreferencesd]
+rootdir = ../etc/freesmartphone/opreferences:/etc/freesmartphone/opreferences:/usr/etc/freesmartphone/opreferences
+
+[oeventsd]
+rules_file = ../etc/freesmartphone/oevents/rules.yaml:/etc/freesmartphone/oevents/rules.yaml:/usr/etc/freesmartphone/oevents/rules.yaml
diff --git a/packages/freesmartphone/frameworkd_git.bb b/packages/freesmartphone/frameworkd_git.bb
index ee155e64a6..14aa183d94 100644
--- a/packages/freesmartphone/frameworkd_git.bb
+++ b/packages/freesmartphone/frameworkd_git.bb
@@ -4,8 +4,8 @@ AUTHOR = "FreeSmartphone.Org Development Team"
SECTION = "console/network"
DEPENDS = "python-cython-native python-pyrex-native"
LICENSE = "GPL"
-PV = "0.8.4.9+gitr${SRCREV}"
-PR = "r4"
+PV = "0.8.5.1+gitr${SRCREV}"
+PR = "r0"
inherit distutils update-rc.d
@@ -56,6 +56,7 @@ RRECOMMENDS_${PN} += "\
# - recommend MUXer on platforms that require one
RDEPENDS_${PN}_append_om-gta01 = " fso-gsm0710muxd"
RDEPENDS_${PN}_append_om-gta02 = " fso-gsm0710muxd"
+RDEPENDS_${PN}-append-om-3d7k = " fso-abyss"
# - add wmiconfig for wireless configuration
RDEPENDS_${PN}_append_om-gta02 = " wmiconfig"
diff --git a/packages/freesmartphone/fso-abyss_git.bb b/packages/freesmartphone/fso-abyss_git.bb
new file mode 100644
index 0000000000..bec64bb639
--- /dev/null
+++ b/packages/freesmartphone/fso-abyss_git.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Abyss is a GSM 07.10 muxer userspace daemon"
+HOMEPAGE = "http://www.freesmartphone.org/mediawiki/index.php/Implementations/Abyss"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+SECTION = "console/network"
+DEPENDS = "vala-native dbus dbus-glib libgsm0710mux"
+LICENSE = "GPL"
+PV = "0.3.1+gitr${SRCREV}"
+PR = "r1"
+
+SRC_URI = "\
+ ${FREESMARTPHONE_GIT}/fso-abyss.git;protocol=git;branch=master \
+"
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+FILES_${PN} += "${datadir}"
diff --git a/packages/freesmartphone/fso-monitord_git.bb b/packages/freesmartphone/fso-monitord_git.bb
index a13456dcfd..c7bbbe06c1 100644
--- a/packages/freesmartphone/fso-monitord_git.bb
+++ b/packages/freesmartphone/fso-monitord_git.bb
@@ -1,9 +1,8 @@
DESCRIPTION = "FSO monitor daemon"
-AUTHOR = "M. Lauer et. al."
SECTION = "console/network"
DEPENDS = "vala-native dbus dbus-glib"
LICENSE = "GPL"
-PV = "0.0.0+gitr${SRCREV}"
+PV = "0.2.0+gitr${SRCREV}"
PR = "r0"
SRC_URI = "${FREESMARTPHONE_GIT}/fso-monitord.git;protocol=git;branch=master"
diff --git a/packages/freesmartphone/libframeworkd-glib_git.bb b/packages/freesmartphone/libframeworkd-glib_git.bb
index bce8312fcb..79e040ed35 100644
--- a/packages/freesmartphone/libframeworkd-glib_git.bb
+++ b/packages/freesmartphone/libframeworkd-glib_git.bb
@@ -2,15 +2,10 @@ DESCRIPTION = "freesmartphone.org API glib wrapper"
LICENSE = "LGPL"
SECTION = "devel"
DEPENDS = "dbus-glib"
-PV = "0.0.1+gitr${SRCREV}"
+PV = "0.0.2+gitr${SRCREV}"
PR = "r0"
SRC_URI = "${FREESMARTPHONE_GIT}/libframeworkd-glib.git;protocol=git;branch=master"
S = "${WORKDIR}/git"
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
-
+inherit autotools autotools_stage pkgconfig
diff --git a/packages/freesmartphone/libgsm0710_git.bb b/packages/freesmartphone/libgsm0710_git.bb
new file mode 100644
index 0000000000..b9d9b36010
--- /dev/null
+++ b/packages/freesmartphone/libgsm0710_git.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "A GSM 07.10 Protocol Engine"
+LICENSE = "GPL"
+SECTION = "devel"
+PV = "1.1.0+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "${FREESMARTPHONE_GIT}/libgsm0710.git;protocol=git;branch=master"
+S = "${WORKDIR}/git"
+
+inherit autotools_stage pkgconfig
+
+# ship vapi file
+FILES_${PN}-dev += "${datadir}/vala"
diff --git a/packages/freesmartphone/libgsm0710mux/abyss.conf b/packages/freesmartphone/libgsm0710mux/abyss.conf
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/freesmartphone/libgsm0710mux/abyss.conf
diff --git a/packages/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf b/packages/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf
new file mode 100644
index 0000000000..48630146df
--- /dev/null
+++ b/packages/freesmartphone/libgsm0710mux/om-3d7k/abyss.conf
@@ -0,0 +1,16 @@
+[omuxerd]
+# set to 1, when the first AllocChannel request opens a session
+autoopen = 1
+# set to 1, when the last ReleaseChannel closes the session
+autoclose = 1
+# set to 1, when closing the session should close the program
+autoexit = 1
+
+[session]
+# set 0 for 07.10 basic multiplexing, 1 for advanced
+mode = 0
+# set maximum 07.10 frame size
+framesize = 98
+# configure modem port
+port = /dev/ttySAC1
+speed = 115200
diff --git a/packages/freesmartphone/libgsm0710mux/om-gta01/abyss.conf b/packages/freesmartphone/libgsm0710mux/om-gta01/abyss.conf
new file mode 100644
index 0000000000..67da210396
--- /dev/null
+++ b/packages/freesmartphone/libgsm0710mux/om-gta01/abyss.conf
@@ -0,0 +1,15 @@
+[omuxerd]
+autoopen = 1
+autoclose = 1
+autoexit = 1
+
+[session]
+mode = 1
+framesize = 98
+port = /dev/ttySAC0
+speed = 115200
+
+[device]
+wakeup_threshold = 6
+wakeup_waitms = 200
+
diff --git a/packages/freesmartphone/libgsm0710mux/om-gta02/abyss.conf b/packages/freesmartphone/libgsm0710mux/om-gta02/abyss.conf
new file mode 100644
index 0000000000..67da210396
--- /dev/null
+++ b/packages/freesmartphone/libgsm0710mux/om-gta02/abyss.conf
@@ -0,0 +1,15 @@
+[omuxerd]
+autoopen = 1
+autoclose = 1
+autoexit = 1
+
+[session]
+mode = 1
+framesize = 98
+port = /dev/ttySAC0
+speed = 115200
+
+[device]
+wakeup_threshold = 6
+wakeup_waitms = 200
+
diff --git a/packages/freesmartphone/libgsm0710mux_git.bb b/packages/freesmartphone/libgsm0710mux_git.bb
new file mode 100644
index 0000000000..1d69e3d9d3
--- /dev/null
+++ b/packages/freesmartphone/libgsm0710mux_git.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "A GSM 07.10 Multiplexing Engine"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+LICENSE = "GPL"
+SECTION = "devel"
+DEPENDS = "libgsm0710 vala-native glib-2.0"
+PV = "0.3.1+gitr${SRCREV}"
+PR = "r2"
+
+SRC_URI = "\
+ ${FREESMARTPHONE_GIT}/libgsm0710mux;protocol=git;branch=master \
+ file://abyss.conf \
+"
+S = "${WORKDIR}/git"
+
+inherit autotools_stage pkgconfig
+
+do_install_append() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/abyss.conf ${D}${sysconfdir}/
+}
+
+PACKAGES =+ "${PN}-config"
+
+FILES_${PN} += "${sysconfdir} ${datadir}"
+# ship vapi file
+FILES_${PN}-dev += "${datadir}/vala"
+
+RRECOMMENDS_${PN} = "${PN}-config"
+
+FILES_${PN}-config = "\
+ ${sysconfdir}/abyss.conf \
+"
+
+CONFFILES_${PN}-config = "\
+ ${sysconfdir}/abyss.conf \
+"
+
+PACKAGE_ARCH_${PN} = "${BASE_PACKAGE_ARCH}"
diff --git a/packages/fuse/sshfs-fuse_2.2.bb b/packages/fuse/sshfs-fuse_2.2.bb
new file mode 100644
index 0000000000..0ca2e132bc
--- /dev/null
+++ b/packages/fuse/sshfs-fuse_2.2.bb
@@ -0,0 +1,15 @@
+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 = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/fuse/${P}.tar.gz"
+S = "${WORKDIR}/${P}"
+
+inherit autotools
+
+FILES_${PN} += "${libdir}/sshnodelay.so"
diff --git a/packages/gcc/gcc-canadian-sdk_4.2.4.bb b/packages/gcc/gcc-canadian-sdk_4.2.4.bb
index 03d9ae364a..ae3245bf7f 100644
--- a/packages/gcc/gcc-canadian-sdk_4.2.4.bb
+++ b/packages/gcc/gcc-canadian-sdk_4.2.4.bb
@@ -17,13 +17,8 @@ require gcc-package-canadian-sdk.inc
SRC_URI_append = "file://fortran-cross-compile-hack.patch;patch=1 \
file://pr22133-mingw-path-fixup.patch;patch=1 \
file://pr33281-mingw-host-fragment.patch;patch=1 \
- file://pr35916-mingw-__USE_MINGW_ACCESS-everywhere.patch;patch=1"
-
-ARCH_FLAGS_FOR_TARGET += "-isystem${STAGING_INCDIR}"
-
-
-SRC_URI_append =+ "\
- file://canadian-build-modules-configure.patch;patch=1 \
+ file://pr35916-mingw-__USE_MINGW_ACCESS-everywhere.patch;patch=1 \
+ file://canadian-build-modules-configure.patch;patch=1 \
"
EXTRA_OECONF += "--disable-libunwind-exceptions --disable-libssp \
diff --git a/packages/gcc/gcc-common.inc b/packages/gcc/gcc-common.inc
index 73bc327507..6e777e6be2 100644
--- a/packages/gcc/gcc-common.inc
+++ b/packages/gcc/gcc-common.inc
@@ -7,8 +7,11 @@ inherit autotools gettext
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
+# When making a Canadian SDK, we use these files too to make the compiler
+# for building for the new host part. So only obey TARGET_FPU for the
+# real target.
def get_gcc_fpu_setting(bb, d):
- if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ]:
+ if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ] and bb.data.getVar('TARGET_OS', d, 1).find('linux') >= 0 :
return "--with-float=soft"
return ""
diff --git a/packages/gcc/gcc-configure-canadian-sdk.inc b/packages/gcc/gcc-configure-canadian-sdk.inc
index 489cb46371..c95a6c41df 100644
--- a/packages/gcc/gcc-configure-canadian-sdk.inc
+++ b/packages/gcc/gcc-configure-canadian-sdk.inc
@@ -3,7 +3,10 @@ require gcc-configure-common.inc
USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibc", "no", "", d )}'
USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibcgnueabi", "no", "", d )}'
-ARCH_FLAGS_FOR_TARGET=""
+#
+# We need to override this and make sure the compiler can find staging
+#
+export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET}"
# Tools for build
export CC_FOR_BUILD="${BUILD_CC}"
@@ -57,22 +60,16 @@ export WINDRES_FOR_TARGET="${TARGET_PREFIX}windres"
EXTRA_OECONF_DEP ?= ""
-SYSROOT = "${WORKDIR}/sysroot"
EXTRA_OECONF += ""
EXTRA_OECONF_PATHS = " \
--with-local-prefix=$dollar{prefix}/local \
--with-gxx-include-dir=$dollar{prefix}/${TARGET_SYS}/usr/include/c++/${BINV} \
- --with-build-sysroot=${SYSROOT} \
+ --with-build-sysroot=${STAGING_DIR_TARGET} \
--with-sysroot=${SDK_REALPATH}/${TARGET_SYS} \
"
do_configure () {
# Work around Hardcoded path assumptions in gcc
- mkdir -p ${SYSROOT}/usr
- ln -sf ${STAGING_DIR_HOST}${layout_includedir} \
- ${SYSROOT}/usr/include
- ln -sf ${STAGING_DIR_HOST}${layout_libdir} \
- ${SYSROOT}/usr/lib
(cd ${S} && gnu-configize) || die "failure running gnu-configize"
(cd ${S}/libstdc++-v3 && autoreconf)
canadian_sdk_runconf
diff --git a/packages/gcc/gcc-cross-sdk_4.3.1.bb b/packages/gcc/gcc-cross-sdk_4.3.1.bb
index 99777dfe00..13d395833e 100644
--- a/packages/gcc/gcc-cross-sdk_4.3.1.bb
+++ b/packages/gcc/gcc-cross-sdk_4.3.1.bb
@@ -1,4 +1,4 @@
-PR = "r12"
+PR = "r13"
inherit sdk
diff --git a/packages/gcc/gcc-cross-sdk_4.3.2.bb b/packages/gcc/gcc-cross-sdk_4.3.2.bb
index 54e7453e69..8057608e0d 100644
--- a/packages/gcc/gcc-cross-sdk_4.3.2.bb
+++ b/packages/gcc/gcc-cross-sdk_4.3.2.bb
@@ -1,4 +1,4 @@
-PR = "r4"
+PR = "r5"
inherit sdk
diff --git a/packages/gcc/gcc-cross-sdk_4.3.3.bb b/packages/gcc/gcc-cross-sdk_4.3.3.bb
index e4a1e41138..29ee187785 100644
--- a/packages/gcc/gcc-cross-sdk_4.3.3.bb
+++ b/packages/gcc/gcc-cross-sdk_4.3.3.bb
@@ -1,4 +1,4 @@
-PR = "r0"
+PR = "r1"
inherit sdk
diff --git a/packages/gcc/gcc-package-sdk.inc b/packages/gcc/gcc-package-sdk.inc
index 767895bb07..0dc19c70b4 100644
--- a/packages/gcc/gcc-package-sdk.inc
+++ b/packages/gcc/gcc-package-sdk.inc
@@ -16,7 +16,7 @@ FILES_${PN} = "\
${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \
${gcclibdir}/${TARGET_SYS}/${BINV}/specs \
${gcclibdir}/${TARGET_SYS}/${BINV}/lib* \
- ${gcclibdir}/${TARGET_SYS}/${BINV}/include \
+ ${gcclibdir}/${TARGET_SYS}/${BINV}/include* \
${includedir}/c++/${BINV} \
${prefix}/${TARGET_SYS}/bin/* \
${prefix}/${TARGET_SYS}/lib/* \
diff --git a/packages/gdb/gdbserver_6.8.bb b/packages/gdb/gdbserver_6.8.bb
new file mode 100644
index 0000000000..67fc280ea2
--- /dev/null
+++ b/packages/gdb/gdbserver_6.8.bb
@@ -0,0 +1 @@
+require gdbserver.inc
diff --git a/packages/glib-2.0/glib-2.0_2.18.0.bb b/packages/glib-2.0/glib-2.0_2.18.0.bb
index 3ac0487018..8fead80143 100644
--- a/packages/glib-2.0/glib-2.0_2.18.0.bb
+++ b/packages/glib-2.0/glib-2.0_2.18.0.bb
@@ -1,11 +1,8 @@
require glib.inc
-
-# This version requires a newer libtool that isn't default yet
-DEFAULT_PREFERENCE = "-1"
-
PR = "r0"
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.18/glib-${PV}.tar.bz2 \
- file://glibconfig-sysdefs.h \
- file://configure-libtool.patch;patch=1 \
- "
+SRC_URI = "\
+ http://ftp.gnome.org/pub/GNOME/sources/glib/2.18/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.18.1.bb b/packages/glib-2.0/glib-2.0_2.18.1.bb
index 1083ef4ba0..449fcd3769 100644
--- a/packages/glib-2.0/glib-2.0_2.18.1.bb
+++ b/packages/glib-2.0/glib-2.0_2.18.1.bb
@@ -1,12 +1,9 @@
require glib.inc
-
-# This version requires a newer libtool that isn't default yet
-DEFAULT_PREFERENCE = "-1"
-
PR = "r0"
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.18/glib-${PV}.tar.bz2 \
- file://glibconfig-sysdefs.h \
- file://configure-libtool.patch;patch=1 \
- "
-SRC_URI_append_arm = "file://atomic-thumb.patch;patch=1"
+SRC_URI = "\
+ http://ftp.gnome.org/pub/GNOME/sources/glib/2.18/glib-${PV}.tar.bz2 \
+ file://glibconfig-sysdefs.h \
+ file://configure-libtool.patch;patch=1 \
+"
+SRC_URI_append_arm = " file://atomic-thumb.patch;patch=1"
diff --git a/packages/glib-2.0/glib-2.0_2.18.3.bb b/packages/glib-2.0/glib-2.0_2.18.3.bb
index 6446b2491d..c8789e75d9 100644
--- a/packages/glib-2.0/glib-2.0_2.18.3.bb
+++ b/packages/glib-2.0/glib-2.0_2.18.3.bb
@@ -1,12 +1,9 @@
require glib.inc
-
-# This version requires a newer libtool that isn't default yet
-DEFAULT_PREFERENCE = "-1"
-
PR = "r1"
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.18/glib-${PV}.tar.bz2 \
- file://glibconfig-sysdefs.h \
- file://configure-libtool.patch;patch=1 \
- "
-SRC_URI_append_arm = "file://atomic-thumb.patch;patch=1"
+SRC_URI = "\
+ http://ftp.gnome.org/pub/GNOME/sources/glib/2.18/glib-${PV}.tar.bz2 \
+ file://glibconfig-sysdefs.h \
+ file://configure-libtool.patch;patch=1 \
+"
+SRC_URI_append_arm = " file://atomic-thumb.patch;patch=1"
diff --git a/packages/glibc/glibc-initial.inc b/packages/glibc/glibc-initial.inc
index 143a662d52..5528cf8edb 100644
--- a/packages/glibc/glibc-initial.inc
+++ b/packages/glibc/glibc-initial.inc
@@ -1,7 +1,7 @@
SECTION = "libs"
DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial 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)}"
+FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/glibc-2.4', '${FILE_DIRNAME}/glibc-${PV}', '${FILE_DIRNAME}/glibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
PACKAGES = ""
PACKAGES_DYNAMIC = ""
diff --git a/packages/glibc/glibc-initial_2.7.bb b/packages/glibc/glibc-initial_2.7.bb
new file mode 100644
index 0000000000..d66297090f
--- /dev/null
+++ b/packages/glibc/glibc-initial_2.7.bb
@@ -0,0 +1,6 @@
+require glibc_${PV}.bb
+require glibc-initial.inc
+
+do_configure_prepend () {
+ unset CFLAGS
+}
diff --git a/packages/glibc/glibc_2.7.bb b/packages/glibc/glibc_2.7.bb
index 3349ce5eef..ec4b347713 100644
--- a/packages/glibc/glibc_2.7.bb
+++ b/packages/glibc/glibc_2.7.bb
@@ -5,7 +5,7 @@ ARM_INSTRUCTION_SET = "arm"
PACKAGES_DYNAMIC = "libc6*"
RPROVIDES_${PN}-dev = "libc6-dev virtual-libc-dev"
-PR = "r8"
+PR = "r9"
# the -isystem in bitbake.conf screws up glibc do_stage
BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
@@ -60,12 +60,14 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
file://glibc-arm-IO-acquire-lock-fix.diff;patch=1 \
file://all_glibc-i586-chk.patch;patch=1 \
file://glibc-2.6.1-use-short-for-fnstsw.patch;patch=1 \
+ file://glibc-use-isystem-include-fixed.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"
+ file://generate-supported.mk \
+ "
# Build fails on sh3 and sh4 without additional patches
diff --git a/packages/gnash/gnash.inc b/packages/gnash/gnash.inc
index 29308b6c0a..3602f6fa90 100644
--- a/packages/gnash/gnash.inc
+++ b/packages/gnash/gnash.inc
@@ -1,7 +1,7 @@
DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features"
HOMEPAGE = "http://www.gnu.org/software/gnash"
LICENSE = "GPL-2"
-DEPENDS = "libtool gtk+ cairo libxml2 libsdl-mixer zlib boost jpeg pango curl freetype \
+DEPENDS = "giflib libtool gtk+ cairo libxml2 libsdl-mixer zlib boost jpeg pango curl freetype \
${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'ffmpeg libmad', d)}"
PR = "r5"
diff --git a/packages/gnash/gnash_0.8.5.bb b/packages/gnash/gnash_0.8.5.bb
new file mode 100644
index 0000000000..fa9b3230e3
--- /dev/null
+++ b/packages/gnash/gnash_0.8.5.bb
@@ -0,0 +1,38 @@
+require gnash.inc
+
+DEPENDS += "gst-plugins-base"
+
+acpaths = " -Imacros"
+
+DEFAULT_PREFERENCE = "-1"
+
+# Boost lacks defines for lots of archs
+TARGET_CC_ARCH_append = " -I${STAGING_INCDIR}/libxml2 -DHAVE_POLL_H ${@[' -D_BIG_ENDIAN', ' -D_LITTLE_ENDIAN'][bb.data.getVar('SITEINFO_ENDIANESS', d, 1) == 'le']}"
+
+
+do_configure_prepend() {
+ sed -i -e 's:GNASH_PKG_FIND(libpng:GNASH_PKG_FIND(png:g' ${S}/configure.ac
+ for i in $(find ${S} -name "Makefile.am") ; do
+ sed -i -e s:LIBPNG:PNG:g $i
+ done
+ export CFLAGS="${CFLAGS} -lpng"
+}
+
+do_install_append() {
+ oe_runmake DESTDIR=${D} install-plugin
+}
+
+
+EXTRA_OECONF += " --without-included-ltdl \
+ --with-ltdl-include=${STAGING_INCDIR} \
+ --with-ltdl-lib=${STAGING_LIBDIR} \
+ --enable-plugins \
+ --enable-npapi \
+ --with-npapi-plugindir=${libdir}/mozilla/plugins \
+ --enable-mit-shm \
+ --enable-png \
+ --with-png-incl=${STAGING_INCDIR} \
+ --with-png-lib=${STAGING_LIBDIR} \
+ --enable-media=gst \
+ "
+
diff --git a/packages/gnome/gnome-games_2.24.0.bb b/packages/gnome/gnome-games_2.24.0.bb
index a16e88b6e0..2f7800df03 100644
--- a/packages/gnome/gnome-games_2.24.0.bb
+++ b/packages/gnome/gnome-games_2.24.0.bb
@@ -3,7 +3,7 @@ DEPENDS = " guile libggz ggz-client-libs python-pygtk gtk+ libgnome libgnomeui l
inherit gnome distutils-base gconf
-PR = "r3"
+PR = "r4"
SRC_URI += "file://ggz-unbreak-m4.patch;patch=1 \
"
diff --git a/packages/gnome/gnome-icon-theme_2.24.0.bb b/packages/gnome/gnome-icon-theme_2.24.0.bb
index 2a7bf3abe2..755e39151e 100644
--- a/packages/gnome/gnome-icon-theme_2.24.0.bb
+++ b/packages/gnome/gnome-icon-theme_2.24.0.bb
@@ -4,7 +4,7 @@ DEPENDS = "icon-naming-utils-native glib-2.0 intltool-native"
RDEPENDS = "hicolor-icon-theme"
RRECOMMENDS = "librsvg-gtk"
-PR = "r1"
+PR = "r2"
FILES_${PN} += "${datadir}/*"
@@ -12,3 +12,18 @@ EXTRA_OECONF = "--disable-hicolor-check"
inherit gnome
+pkg_postinst_${PN}() {
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+# Update the pixbuf loaders in case they haven't been registered yet
+gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders
+
+gtk-update-icon-cache -q /usr/share/icons/gnome
+}
+
+pkg_postrm_${PN}() {
+gtk-update-icon-cache -q /usr/share/icons/gnome
+}
+
diff --git a/packages/gnome/gnome-python-desktop_2.23.0.bb b/packages/gnome/gnome-python-desktop_2.23.0.bb
index 140c0a8dbf..0ddc05e8e0 100644
--- a/packages/gnome/gnome-python-desktop_2.23.0.bb
+++ b/packages/gnome/gnome-python-desktop_2.23.0.bb
@@ -1,7 +1,7 @@
LICENSE = "GPL/LGPL"
DEPENDS = "librsvg libwnck totem-pl-parser libgtop gnome-panel gnome-desktop eds-dbus python-pygtk gnome-python libgnomeprint libgnomeprintui"
-PR = "r3"
+PR = "r4"
inherit gnome distutils-base
diff --git a/packages/gnome/gnome-python-extras_2.19.1.bb b/packages/gnome/gnome-python-extras_2.19.1.bb
index 9d8e786241..5ae9180067 100644
--- a/packages/gnome/gnome-python-extras_2.19.1.bb
+++ b/packages/gnome/gnome-python-extras_2.19.1.bb
@@ -1,6 +1,8 @@
LICENSE = "GPL/LGPL"
DEPENDS = "python-pygtk libwnck"
+PR = "r1"
+
inherit gnome distutils-base
SRC_URI += "file://acinclude.m4"
diff --git a/packages/gnome/gnome-python_2.22.1.bb b/packages/gnome/gnome-python_2.22.1.bb
index 0507cba010..d1ac8cc7ab 100644
--- a/packages/gnome/gnome-python_2.22.1.bb
+++ b/packages/gnome/gnome-python_2.22.1.bb
@@ -3,7 +3,7 @@ LICENSE = "LGPL"
DEPENDS = "libgnomeui pyorbit python-pygtk"
RDEPENDS = "pyorbit"
-PR = "r1"
+PR = "r2"
inherit gnome distutils-base pkgconfig
diff --git a/packages/gnome/gnome-vfs-2.12.0/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.12.0/gconftool-lossage.patch
deleted file mode 100644
index 3dbc130ddc..0000000000
--- a/packages/gnome/gnome-vfs-2.12.0/gconftool-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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.16.3/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.16.3/gconftool-lossage.patch
deleted file mode 100644
index 3dbc130ddc..0000000000
--- a/packages/gnome/gnome-vfs-2.16.3/gconftool-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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.16.3/gnome-vfs-no-kerberos.patch b/packages/gnome/gnome-vfs-2.16.3/gnome-vfs-no-kerberos.patch
deleted file mode 100644
index e25ecdd66f..0000000000
--- a/packages/gnome/gnome-vfs-2.16.3/gnome-vfs-no-kerberos.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-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-2.18.1/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.18.1/gconftool-lossage.patch
deleted file mode 100644
index 3dbc130ddc..0000000000
--- a/packages/gnome/gnome-vfs-2.18.1/gconftool-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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
deleted file mode 100644
index e25ecdd66f..0000000000
--- a/packages/gnome/gnome-vfs-2.18.1/gnome-vfs-no-kerberos.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-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-2.20.0/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.20.0/gconftool-lossage.patch
deleted file mode 100644
index 3dbc130ddc..0000000000
--- a/packages/gnome/gnome-vfs-2.20.0/gconftool-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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.20.0/gnome-vfs-no-kerberos.patch b/packages/gnome/gnome-vfs-2.20.0/gnome-vfs-no-kerberos.patch
deleted file mode 100644
index e25ecdd66f..0000000000
--- a/packages/gnome/gnome-vfs-2.20.0/gnome-vfs-no-kerberos.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-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-2.6.0/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.6.0/gconftool-lossage.patch
deleted file mode 100644
index 3dbc130ddc..0000000000
--- a/packages/gnome/gnome-vfs-2.6.0/gconftool-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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.6.2/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.6.2/gconftool-lossage.patch
deleted file mode 100644
index 3dbc130ddc..0000000000
--- a/packages/gnome/gnome-vfs-2.6.2/gconftool-lossage.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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.12.0.bb b/packages/gnome/gnome-vfs_2.12.0.bb
deleted file mode 100644
index 1c11f9841f..0000000000
--- a/packages/gnome/gnome-vfs_2.12.0.bb
+++ /dev/null
@@ -1,90 +0,0 @@
-LICENSE = "GPL"
-PR = "r2"
-
-inherit gnome
-
-DEPENDS = "libxml2 gconf libbonobo bzip2 gnome-mime-data orbit2 zlib samba-3.0.14a"
-RRECOMMENDS = "gnome-vfs-plugin-file gnome-mime-data shared-mime-info"
-
-SRC_URI += "file://gconftool-lossage.patch;patch=1;pnum=1"
-
-ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
-
-FILES_${PN} += " ${libdir}/bonobo/servers ${libdir}/bonobo/monikers/*.so ${libdir}/vfs"
-FILES_${PN}-dev += " ${libdir}/gnome-vfs-2.0/modules/*.a ${libdir}/gnome-vfs-2.0/modules/*.la ${libdir}/gnome-vfs-2.0/include ${libdir}/bonobo/monikers/*.a ${libdir}/bonobo/monikers/*.la"
-FILES_${PN}-doc += " ${datadir}/gtk-doc"
-
-GNOME_VFS_HEADERS = " \
-gnome-vfs-mime-deprecated.h \
-gnome-vfs-address.h \
-gnome-vfs-dns-sd.h \
-gnome-vfs-mime-info-cache.h \
-gnome-vfs-resolve.h \
-gnome-vfs-utils.h \
-gnome-vfs-application-registry.h \
-gnome-vfs-async-ops.h \
-gnome-vfs-ops.h \
-gnome-vfs-uri.h \
-gnome-vfs-standard-callbacks.h \
-gnome-vfs-module-callback.h \
-gnome-vfs-context.h \
-gnome-vfs-file-info.h \
-gnome-vfs-directory.h \
-gnome-vfs-mime-monitor.h \
-gnome-vfs-mime-handlers.h \
-gnome-vfs-result.h \
-gnome-vfs-job-limit.h \
-gnome-vfs-file-size.h \
-gnome-vfs-mime-utils.h \
-gnome-vfs-find-directory.h \
-gnome-vfs-init.h \
-gnome-vfs-handle.h \
-gnome-vfs.h \
-gnome-vfs-cancellation.h \
-gnome-vfs-xfer.h \
-gnome-vfs-monitor.h \
-gnome-vfs-types.h \
-gnome-vfs-volume-monitor.h \
-gnome-vfs-drive.h \
-gnome-vfs-volume.h \
-gnome-vfs-enum-types.h"
-
-GNOME_VFS_MODULE_HEADERS = " \
-gnome-vfs-mime-info.h \
-gnome-vfs-transform.h \
-gnome-vfs-ssl.h \
-gnome-vfs-inet-connection.h \
-gnome-vfs-socket.h \
-gnome-vfs-parse-ls.h \
-gnome-vfs-method.h \
-gnome-vfs-cancellable-ops.h \
-gnome-vfs-module.h \
-gnome-vfs-module-shared.h \
-gnome-vfs-module-callback-module-api.h \
-gnome-vfs-mime.h \
-gnome-vfs-socket-buffer.h"
-
-do_compile() {
- oe_runmake ORBIT_IDL="${ORBIT_IDL_SRC}"
-}
-
-do_stage() {
- oe_libinstall -so -C libgnomevfs libgnomevfs-2 ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/gnome-vfs-2.0/libgnomevfs
- for i in ${GNOME_VFS_HEADERS}; do install -m 0644 libgnomevfs/$i ${STAGING_INCDIR}/gnome-vfs-2.0/libgnomevfs/; done
- install -d ${STAGING_INCDIR}/gnome-vfs-module-2.0/libgnomevfs
- for i in ${GNOME_VFS_MODULE_HEADERS}; do install -m 0644 libgnomevfs/$i ${STAGING_INCDIR}/gnome-vfs-module-2.0/libgnomevfs/; done
-}
-
-do_install() {
- oe_runmake ORBIT_IDL="${ORBIT_IDL_SRC}" DESTDIR="${D}" install
-}
-
-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/gnome-vfs_2.16.3.bb b/packages/gnome/gnome-vfs_2.16.3.bb
deleted file mode 100644
index b1f634c0e9..0000000000
--- a/packages/gnome/gnome-vfs_2.16.3.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-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 = "r2"
-
-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/gnome-vfs_2.18.1.bb b/packages/gnome/gnome-vfs_2.18.1.bb
deleted file mode 100644
index 8a3e460119..0000000000
--- a/packages/gnome/gnome-vfs_2.18.1.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-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 = "r1"
-
-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 ${datadir}/dbus-1/services"
-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/gnome-vfs_2.20.0.bb b/packages/gnome/gnome-vfs_2.20.0.bb
deleted file mode 100644
index 5631a9c960..0000000000
--- a/packages/gnome/gnome-vfs_2.20.0.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "libxml2 gconf gnutls avahi dbus bzip2 gnome-mime-data zlib"
-RRECOMMENDS = "gnome-vfs-plugin-file shared-mime-info"
-# Some legacy packages will require gnome-mime-data to be installed, but use of
-# it is deprecated.
-PR = "r0"
-
-inherit gnome
-
-SRC_URI += "file://gconftool-lossage.patch;patch=1;pnum=1 \
- file://gnome-vfs-no-kerberos.patch;patch=1;pnum=0"
-
-# This is to provide compatibility with the gnome-vfs DBus fork
-PROVIDES = "gnome-vfs-plugin-dbus"
-RREPLACES = "gnome-vfs-dbus"
-
-EXTRA_OECONF = " \
- --disable-openssl \
- --enable-gnutls \
- --enable-avahi \
- --with-samba-includes=${STAGING_INCDIR} \
- "
-
-FILES_${PN} += " ${libdir}/vfs ${datadir}/dbus-1/services"
-FILES_${PN}-dbg += " ${libdir}/gnome-vfs-2.0/modules/.debug"
-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/gnome-vfs_2.22.0.bb b/packages/gnome/gnome-vfs_2.22.0.bb
index 5631a9c960..875aa76aaa 100644
--- a/packages/gnome/gnome-vfs_2.22.0.bb
+++ b/packages/gnome/gnome-vfs_2.22.0.bb
@@ -1,5 +1,5 @@
LICENSE = "GPL"
-DEPENDS = "libxml2 gconf gnutls avahi dbus bzip2 gnome-mime-data zlib"
+DEPENDS = "libxml2 gconf gnutls avahi dbus dbus-glib bzip2 gnome-mime-data zlib"
RRECOMMENDS = "gnome-vfs-plugin-file shared-mime-info"
# Some legacy packages will require gnome-mime-data to be installed, but use of
# it is deprecated.
@@ -21,10 +21,14 @@ EXTRA_OECONF = " \
--with-samba-includes=${STAGING_INCDIR} \
"
-FILES_${PN} += " ${libdir}/vfs ${datadir}/dbus-1/services"
-FILES_${PN}-dbg += " ${libdir}/gnome-vfs-2.0/modules/.debug"
-FILES_${PN}-dev += " ${libdir}/gnome-vfs-2.0/include"
-FILES_${PN}-doc += " ${datadir}/gtk-doc"
+FILES_${PN} += "${libdir}/vfs ${datadir}/dbus-1/services"
+FILES_${PN}-dbg += "${libdir}/gnome-vfs-2.0/modules/.debug"
+FILES_${PN}-dev += "\
+ ${libdir}/gnome-vfs-2.0/include \
+ ${libdir}/gnome-vfs-2.0/modules/*.a \
+ ${libdir}/gnome-vfs-2.0/modules/*.la \
+"
+FILES_${PN}-doc += "${datadir}/gtk-doc"
do_stage () {
autotools_stage_all
diff --git a/packages/gnome/gnome-vfs_2.6.0.bb b/packages/gnome/gnome-vfs_2.6.0.bb
deleted file mode 100644
index c967c746d1..0000000000
--- a/packages/gnome/gnome-vfs_2.6.0.bb
+++ /dev/null
@@ -1,76 +0,0 @@
-LICENSE = "GPL"
-PR = "r3"
-
-inherit gnome
-
-DEPENDS = "libxml2 gconf libbonobo bzip2 gnome-mime-data orbit2 zlib samba"
-RRECOMMENDS = "gnome-vfs-plugin-file shared-mime-info"
-
-SRC_URI += "file://gconftool-lossage.patch;patch=1;pnum=1"
-
-ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
-
-FILES_${PN} += " ${libdir}/gnome-vfs-2.0/modules/*.so ${libdir}/bonobo/servers ${libdir}/bonobo/monikers/*.so ${libdir}/vfs"
-FILES_${PN}-dev += " ${libdir}/gnome-vfs-2.0/modules/*.a ${libdir}/gnome-vfs-2.0/modules/*.la ${libdir}/gnome-vfs-2.0/include ${libdir}/bonobo/monikers/*.a ${libdir}/bonobo/monikers/*.la"
-FILES_${PN}-doc += " ${datadir}/gtk-doc"
-
-GNOME_VFS_HEADERS = " \
-gnome-vfs-utils.h \
-gnome-vfs-application-registry.h \
-gnome-vfs-async-ops.h \
-gnome-vfs-ops.h \
-gnome-vfs-uri.h \
-gnome-vfs-standard-callbacks.h \
-gnome-vfs-module-callback.h \
-gnome-vfs-context.h \
-gnome-vfs-file-info.h \
-gnome-vfs-directory.h \
-gnome-vfs-mime-monitor.h \
-gnome-vfs-mime-handlers.h \
-gnome-vfs-result.h \
-gnome-vfs-job-limit.h \
-gnome-vfs-file-size.h \
-gnome-vfs-mime-utils.h \
-gnome-vfs-find-directory.h \
-gnome-vfs-init.h \
-gnome-vfs-handle.h \
-gnome-vfs.h \
-gnome-vfs-cancellation.h \
-gnome-vfs-xfer.h \
-gnome-vfs-monitor.h \
-gnome-vfs-types.h \
-gnome-vfs-volume-monitor.h \
-gnome-vfs-drive.h \
-gnome-vfs-volume.h \
-gnome-vfs-enum-types.h"
-
-GNOME_VFS_MODULE_HEADERS = " \
-gnome-vfs-mime-info.h \
-gnome-vfs-transform.h \
-gnome-vfs-ssl.h \
-gnome-vfs-inet-connection.h \
-gnome-vfs-socket.h \
-gnome-vfs-parse-ls.h \
-gnome-vfs-method.h \
-gnome-vfs-cancellable-ops.h \
-gnome-vfs-module.h \
-gnome-vfs-module-shared.h \
-gnome-vfs-module-callback-module-api.h \
-gnome-vfs-mime.h \
-gnome-vfs-socket-buffer.h"
-
-do_compile() {
- oe_runmake ORBIT_IDL="${ORBIT_IDL_SRC}"
-}
-
-do_stage() {
- oe_libinstall -so -C libgnomevfs libgnomevfs-2 ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/gnome-vfs-2.0/libgnomevfs
- for i in ${GNOME_VFS_HEADERS}; do install -m 0644 libgnomevfs/$i ${STAGING_INCDIR}/gnome-vfs-2.0/libgnomevfs/; done
- install -d ${STAGING_INCDIR}/gnome-vfs-module-2.0/libgnomevfs
- for i in ${GNOME_VFS_MODULE_HEADERS}; do install -m 0644 libgnomevfs/$i ${STAGING_INCDIR}/gnome-vfs-module-2.0/libgnomevfs/; done
-}
-
-do_install() {
- oe_runmake ORBIT_IDL="${ORBIT_IDL_SRC}" DESTDIR="${D}" install
-}
diff --git a/packages/gnome/gnome-vfs_2.6.2.bb b/packages/gnome/gnome-vfs_2.6.2.bb
deleted file mode 100644
index e9a903f598..0000000000
--- a/packages/gnome/gnome-vfs_2.6.2.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-LICENSE = "GPL"
-PR = "r4"
-
-inherit gnome
-
-DEPENDS = "libxml2 gconf libbonobo bzip2 gnome-mime-data orbit2 zlib samba-3.0.14a"
-RRECOMMENDS = "gnome-vfs-plugin-file shared-mime-info"
-
-SRC_URI += "file://gconftool-lossage.patch;patch=1;pnum=1"
-
-ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
-
-FILES_${PN} += " ${libdir}/bonobo/servers ${libdir}/bonobo/monikers/*.so ${libdir}/vfs"
-FILES_${PN}-dev += " ${libdir}/gnome-vfs-2.0/modules/*.a ${libdir}/gnome-vfs-2.0/modules/*.la ${libdir}/gnome-vfs-2.0/include ${libdir}/bonobo/monikers/*.a ${libdir}/bonobo/monikers/*.la"
-FILES_${PN}-doc += " ${datadir}/gtk-doc"
-
-GNOME_VFS_HEADERS = " \
-gnome-vfs-utils.h \
-gnome-vfs-application-registry.h \
-gnome-vfs-async-ops.h \
-gnome-vfs-ops.h \
-gnome-vfs-uri.h \
-gnome-vfs-standard-callbacks.h \
-gnome-vfs-module-callback.h \
-gnome-vfs-context.h \
-gnome-vfs-file-info.h \
-gnome-vfs-directory.h \
-gnome-vfs-mime-monitor.h \
-gnome-vfs-mime-handlers.h \
-gnome-vfs-result.h \
-gnome-vfs-job-limit.h \
-gnome-vfs-file-size.h \
-gnome-vfs-mime-utils.h \
-gnome-vfs-find-directory.h \
-gnome-vfs-init.h \
-gnome-vfs-handle.h \
-gnome-vfs.h \
-gnome-vfs-cancellation.h \
-gnome-vfs-xfer.h \
-gnome-vfs-monitor.h \
-gnome-vfs-types.h \
-gnome-vfs-volume-monitor.h \
-gnome-vfs-drive.h \
-gnome-vfs-volume.h \
-gnome-vfs-enum-types.h"
-
-GNOME_VFS_MODULE_HEADERS = " \
-gnome-vfs-mime-info.h \
-gnome-vfs-transform.h \
-gnome-vfs-ssl.h \
-gnome-vfs-inet-connection.h \
-gnome-vfs-socket.h \
-gnome-vfs-parse-ls.h \
-gnome-vfs-method.h \
-gnome-vfs-cancellable-ops.h \
-gnome-vfs-module.h \
-gnome-vfs-module-shared.h \
-gnome-vfs-module-callback-module-api.h \
-gnome-vfs-mime.h \
-gnome-vfs-socket-buffer.h"
-
-do_compile() {
- oe_runmake ORBIT_IDL="${ORBIT_IDL_SRC}"
-}
-
-do_stage() {
- oe_libinstall -so -C libgnomevfs libgnomevfs-2 ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/gnome-vfs-2.0/libgnomevfs
- for i in ${GNOME_VFS_HEADERS}; do install -m 0644 libgnomevfs/$i ${STAGING_INCDIR}/gnome-vfs-2.0/libgnomevfs/; done
- install -d ${STAGING_INCDIR}/gnome-vfs-module-2.0/libgnomevfs
- for i in ${GNOME_VFS_MODULE_HEADERS}; do install -m 0644 libgnomevfs/$i ${STAGING_INCDIR}/gnome-vfs-module-2.0/libgnomevfs/; done
-}
-
-do_install() {
- oe_runmake ORBIT_IDL="${ORBIT_IDL_SRC}" DESTDIR="${D}" install
-}
-
-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/libchamplain-gtk_0.2.8.bb b/packages/gnome/libchamplain-gtk_0.2.8.bb
new file mode 100644
index 0000000000..b72685a786
--- /dev/null
+++ b/packages/gnome/libchamplain-gtk_0.2.8.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "Libchamplain is a C library aimed to provide a Gtk+ widget to display rasterized maps. "
+LICENSE = "LGPL"
+DEPENDS = "libchamplain clutter-gtk-0.8"
+
+inherit gnome autotools_stage
+
+SRC_URI = "http://libchamplain.pierlux.com/release/${PV}/libchamplain-gtk-${PV}.tar.gz"
+
+
diff --git a/packages/gnome/libchamplain_0.2.8.bb b/packages/gnome/libchamplain_0.2.8.bb
new file mode 100644
index 0000000000..9418a4d3e0
--- /dev/null
+++ b/packages/gnome/libchamplain_0.2.8.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Libchamplain is a C library aimed to provide a Gtk+ widget to display rasterized maps. "
+LICENSE = "LGPL"
+DEPENDS = "clutter-cairo libsoup-2.4 clutter gtk+"
+
+inherit gnome autotools_stage
+
+SRC_URI = "http://libchamplain.pierlux.com/release/${PV}/libchamplain-${PV}.tar.gz"
+
+FILES_${PN} += "${datadir}/champlain/error.svg"
+
diff --git a/packages/gnome/libsoup-2.4_2.24.3.bb b/packages/gnome/libsoup-2.4_2.24.3.bb
new file mode 100644
index 0000000000..c63c5bdcf1
--- /dev/null
+++ b/packages/gnome/libsoup-2.4_2.24.3.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "An HTTP library implementation in C"
+SECTION = "x11/gnome/libs"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 gnutls libxml2"
+
+inherit gnome
+
+SRC_URI = "${GNOME_MIRROR}/libsoup/${@gnome_verdir("${PV}")}/libsoup-${PV}.tar.bz2"
+S = "${WORKDIR}/libsoup-${PV}"
+
+do_stage() {
+ autotools_stage_all
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev = "${includedir}/ ${libdir}/"
+FILES_${PN}-doc = "${datadir}/"
diff --git a/packages/gnome/pyorbit_2.24.0.bb b/packages/gnome/pyorbit_2.24.0.bb
index fe6e2d1b0b..c98b99d1d5 100644
--- a/packages/gnome/pyorbit_2.24.0.bb
+++ b/packages/gnome/pyorbit_2.24.0.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Python Orbit bindings"
LICENSE = "LGPL"
-PR = "r0"
+PR = "r1"
inherit gnome distutils-base pkgconfig
diff --git a/packages/gnuchess/fltk-chess_0.51.bb b/packages/gnuchess/fltk-chess_0.51.bb
new file mode 100644
index 0000000000..512e260008
--- /dev/null
+++ b/packages/gnuchess/fltk-chess_0.51.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "fltk-chess is a frontend for the Gnuchess chess playing engine."
+AUTHOR = "Andreas Holzer <a.holzer@cheese.at>"
+SECTION = "x11/games"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "fltk"
+RDEPENDS = "gnuchess"
+
+
+SRC_URI = "http://members.cheese.at/woody/zaurus/src/fltk-chess-${PV}.tgz"
+S = "${WORKDIR}/fltk-chess/"
+
+
+do_compile() {
+ `fltk-config --cxx --cxxflags --ldflags --use-images` -o fltk-chess \
+ fltk-chess.cxx
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${datadir}/pixmaps/fltk-chess/
+ install -d ${D}${datadir}/applications/
+ install -m 0755 ${S}/fltk-chess ${D}${bindir}
+ install -m 0644 ${S}/bitmaps/*.pnx ${D}${datadir}/pixmaps/fltk-chess/
+ install -m 0644 ${S}/bitmaps/{user,computer}.png \
+ ${D}${datadir}/pixmaps/fltk-chess/
+ install -m 0644 ${S}/bitmaps/fltk-chess.png ${D}${datadir}/pixmaps/
+ install -m 0644 ${S}/fltk-chess.desktop ${D}${datadir}/applications/
+}
diff --git a/packages/gnuchess/gnuchess_5.021.bb b/packages/gnuchess/gnuchess_5.021.bb
new file mode 100644
index 0000000000..18c94bdab0
--- /dev/null
+++ b/packages/gnuchess/gnuchess_5.021.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Gnuchess is a chess playing engine."
+SECTION = "console"
+PRIORITY = "optional"
+MAINTAINER = "Andreas Holzer <a.holzer@cheese.at>"
+LICENSE = "GPL"
+SRC_URI = "http://members.cheese.at/woody/fltk-chess/gnuchess_5.02.tar.gz"
+S = "${WORKDIR}/chess-5.02/src"
+
+inherit autotools
+
+do_install() {
+ install -D ${S}/gnuchess ${D}${bindir}/gnuchess
+}
diff --git a/packages/gnuplot/gnuplot.inc b/packages/gnuplot/gnuplot.inc
index bf442527af..30affad357 100644
--- a/packages/gnuplot/gnuplot.inc
+++ b/packages/gnuplot/gnuplot.inc
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.gnuplot.info/"
SECTION = "console/scientific"
LICENSE = "BSD-4"
PRIORITY = "optional"
-DEPENDS = "virtual/libx11 readline"
+DEPENDS = "virtual/libx11 gd cairo readline"
inherit autotools
diff --git a/packages/gnuplot/gnuplot_4.2.4.bb b/packages/gnuplot/gnuplot_4.2.4.bb
index 478f6e2b0f..1df0c9fa21 100644
--- a/packages/gnuplot/gnuplot_4.2.4.bb
+++ b/packages/gnuplot/gnuplot_4.2.4.bb
@@ -1,6 +1,6 @@
require gnuplot.inc
-PR = "r0"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/gnuplot/${PN}-${PV}.tar.gz \
http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \
diff --git a/packages/gnuradio/gnuradio.inc b/packages/gnuradio/gnuradio.inc
index 8c972357f3..d406b504ad 100644
--- a/packages/gnuradio/gnuradio.inc
+++ b/packages/gnuradio/gnuradio.inc
@@ -12,6 +12,7 @@ export HOST_SYS=${MULTIMACH_TARGET_SYS}
CXXFLAGS_powerpc += "-lstdc++"
EXTRA_OECONF = " \
+ ${GR_CPU_SELECTION} \
--disable-gr-atsc \
--enable-gr-video-sdl \
--enable-gr-audio-alsa \
@@ -23,6 +24,8 @@ EXTRA_OECONF = " \
PYTHON_CPPFLAGS=-I${STAGING_INCDIR}/${PYTHON_DIR} \
"
+GR_CPU_SELECTION_armv7a = " --with-md-cpu=arm "
+
do_configure_prepend() {
if [ -e ${WORKDIR}/acinclude.m4 ] ; then
cp ${WORKDIR}/acinclude.m4 ${S}
diff --git a/packages/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch b/packages/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch
new file mode 100644
index 0000000000..9b734a9bf9
--- /dev/null
+++ b/packages/gnutls/gnutls-2.4.2/gnutls-replace-siginterrupt.patch
@@ -0,0 +1,37 @@
+Index: gnutls-2.4.2/src/tests.c
+===================================================================
+--- gnutls-2.4.2.orig/src/tests.c 2008-09-15 13:04:19.000000000 -0700
++++ gnutls-2.4.2/src/tests.c 2009-03-04 15:25:09.000000000 -0800
+@@ -491,6 +491,7 @@
+ int old, secs = 6;
+
+ #ifndef _WIN32
++ struct sigaction act;
+ signal (SIGALRM, got_alarm);
+ #endif
+
+@@ -511,7 +512,9 @@
+ return TEST_FAILED;
+
+ #ifndef _WIN32
+- old = siginterrupt (SIGALRM, 1);
++ (void) sigaction(SIGALRM, NULL, &act);
++ act.sa_flags &= ~SA_RESTART;
++ old = sigaction(SIGALRM, &act, NULL);
+ alarm (secs);
+ #else
+ setsockopt ((int)gnutls_transport_get_ptr (session), SOL_SOCKET, SO_RCVTIMEO,
+@@ -525,7 +528,12 @@
+ while (ret > 0);
+
+ #ifndef _WIN32
+- siginterrupt (SIGALRM, old);
++ (void) sigaction(SIGALRM, NULL, &act);
++ if (old)
++ act.sa_flags &= ~SA_RESTART;
++ else
++ act.sa_flags |= SA_RESTART;
++ sigaction(SIGALRM, &act, NULL);
+ #else
+ if (WSAGetLastError () == WSAETIMEDOUT ||
+ WSAGetLastError () == WSAECONNABORTED)
diff --git a/packages/gnutls/gnutls_2.4.2.bb b/packages/gnutls/gnutls_2.4.2.bb
index ddaef1dea3..d33e687741 100644
--- a/packages/gnutls/gnutls_2.4.2.bb
+++ b/packages/gnutls/gnutls_2.4.2.bb
@@ -4,6 +4,7 @@ SRC_URI += "\
file://gnutls-openssl.patch;patch=1 \
file://gnutls-texinfo-euro.patch;patch=1 \
file://configure_madness.patch;patch=1 \
+ file://gnutls-replace-siginterrupt.patch;patch=1 \
"
-PR = "r3"
+PR = "r4"
diff --git a/packages/gob2/gob2-native_2.0.14.bb b/packages/gob2/gob2-native_2.0.14.bb
new file mode 100644
index 0000000000..e6a26f13d2
--- /dev/null
+++ b/packages/gob2/gob2-native_2.0.14.bb
@@ -0,0 +1,5 @@
+require gob2_${PV}.bb
+DEPENDS = "bison-native flex-native"
+inherit native
+
+
diff --git a/packages/gpe-gallery/files/makefile-fix.patch b/packages/gpe-gallery/files/makefile-fix.patch
deleted file mode 100644
index ae4583573e..0000000000
--- a/packages/gpe-gallery/files/makefile-fix.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/Makefile 2006-07-26 11:02:47.000000000 +0200
-+++ gpe-gallery-0.97/Makefile 2006-07-26 11:05:07.584411000 +0200
-@@ -28,7 +28,7 @@
- $(CC) -o $@ $^ $(LDFLAGS) $(PACKAGE_LDFLAGS)
-
- install-program: all
-- install -Ds $(PACKAGE) $(DESTDIR)$(PREFIX)/bin/$(PACKAGE)
-+ install -D -s $(PACKAGE) $(DESTDIR)$(PREFIX)/bin/$(PACKAGE)
- install -D -m 644 $(PACKAGE).png $(DESTDIR)$(PREFIX)/share/pixmaps/$(PACKAGE).png
- install -D -m 644 $(PACKAGE).applications $(DESTDIR)/$(PREFIX)/share/application-registry/$(PACKAGE).applications
- mkdir -p $(DESTDIR)$(PREFIX)/share/applications
diff --git a/packages/gpe-gallery/files/svn-build.patch b/packages/gpe-gallery/files/svn-build.patch
deleted file mode 100644
index 5b6edf4893..0000000000
--- a/packages/gpe-gallery/files/svn-build.patch
+++ /dev/null
@@ -1,240 +0,0 @@
---- 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_0.97.bb b/packages/gpe-gallery/gpe-gallery_0.97.bb
deleted file mode 100644
index 4b4cfaebb8..0000000000
--- a/packages/gpe-gallery/gpe-gallery_0.97.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-LICENSE = "GPL"
-PR = "r0"
-
-inherit gpe
-
-SRC_URI += "file://makefile-fix.patch;patch=1"
-
-DEPENDS = "libgpewidget"
-SECTION = "gpe"
-
-FILES_${PN} += "${datadir}/gpe/pixmaps"
-FILES_${PN} += "${datadir}/application-registry"
-
-DESCRIPTION = "GPE image viewer application"
-export CVSBUILD = "no"
-
diff --git a/packages/gpe-gallery/gpe-gallery_svn.bb b/packages/gpe-gallery/gpe-gallery_svn.bb
index 863dfe5f93..ea1d23a5be 100644
--- a/packages/gpe-gallery/gpe-gallery_svn.bb
+++ b/packages/gpe-gallery/gpe-gallery_svn.bb
@@ -2,18 +2,13 @@ DESCRIPTION = "GPE image viewer application"
SECTION = "gpe"
LICENSE = "GPL"
DEPENDS = "libgpewidget"
-PV = "0.97+svn-${SRCDATE}"
+PV = "0.97+svnr${SRCREV}"
inherit autotools
export CVSBUILD = "no"
-SRC_URI += "${GPE_EXTRA_SVN} \
- file://svn-build.patch;patch=1"
-
+SRC_URI = "${GPE_EXTRA_SVN}"
S = "${WORKDIR}/${PN}"
FILES_${PN} += "${datadir}/gpe/pixmaps"
FILES_${PN} += "${datadir}/application-registry"
-
-
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb b/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb
index 8b56e23630..ae3a32c8f5 100644
--- a/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb
+++ b/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb
@@ -1,7 +1,9 @@
DEPENDS = "gtk+ glib-2.0 libgpewidget webkit-gtk"
-PV = "0.0.1+svn${SRCDATE}"
+PV = "0.0.1+svnr${SRCREV}"
PR = "r0"
+SRCREV = "9819"
+
inherit autotools
SRC_URI = "${GPE_EXTRA_SVN}"
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo.inc b/packages/gpe-ownerinfo/gpe-ownerinfo.inc
index 704044f09b..a56d2f9852 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo.inc
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo.inc
@@ -6,6 +6,10 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "gtk+ libgpewidget"
+do_compile_prepend() {
+ sed -i -e 's: -s : :g' Makefile
+}
+
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 b00cc7cc66..6ce0f8fbf7 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb
@@ -1,5 +1,5 @@
require gpe-ownerinfo.inc
-PR = "r1"
+PR = "r2"
SRC_URI += "file://compile.patch;patch=1"
diff --git a/packages/gpe-scap/gpe-scap_1.4.bb b/packages/gpe-scap/gpe-scap_1.4.bb
new file mode 100644
index 0000000000..03da9b02c3
--- /dev/null
+++ b/packages/gpe-scap/gpe-scap_1.4.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "A GPE application that allows you to take screenshots."
+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
index 3360189422..04010d7435 100644
--- a/packages/gpe-scap/gpe-scap_svn.bb
+++ b/packages/gpe-scap/gpe-scap_svn.bb
@@ -1,6 +1,6 @@
DEPENDS = "glib-2.0 gtk+ libgpewidget libglade libsoup"
RREPLACES = "gpe-screenshot"
-PV = "1.2+svn-${SRCDATE}"
+PV = "1.4+svn-${SRCDATE}"
PR = "r1"
inherit autotools
diff --git a/packages/gpgme/gpgme_1.1.4.bb b/packages/gpgme/gpgme_1.1.4.bb
index 7ab54ec5d7..68d71aab28 100644
--- a/packages/gpgme/gpgme_1.1.4.bb
+++ b/packages/gpgme/gpgme_1.1.4.bb
@@ -1,3 +1,3 @@
require gpgme.inc
-PR = "r4"
+PR = "r5"
diff --git a/packages/gpsd/gpsd.inc b/packages/gpsd/gpsd.inc
index e4f5a9988b..1022091c6c 100644
--- a/packages/gpsd/gpsd.inc
+++ b/packages/gpsd/gpsd.inc
@@ -24,7 +24,7 @@ inherit autotools update-rc.d
INITSCRIPT_NAME = "gpsd"
INITSCRIPT_PARAMS = "defaults 35"
-export LDFLAGS = "-L${STAGING_LIBDIR} -lm"
+LDFLAGS += "-L${STAGING_LIBDIR} -lm"
export STAGING_INCDIR
export STAGING_LIBDIR
diff --git a/packages/gpsd/gpsd_2.37.bb b/packages/gpsd/gpsd_2.37.bb
deleted file mode 100644
index 726ba42481..0000000000
--- a/packages/gpsd/gpsd_2.37.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require gpsd.inc
-
-PR = "r2"
diff --git a/packages/gpsd/gpsd_2.38.bb b/packages/gpsd/gpsd_2.38.bb
new file mode 100644
index 0000000000..58e9ebeee2
--- /dev/null
+++ b/packages/gpsd/gpsd_2.38.bb
@@ -0,0 +1,3 @@
+require gpsd.inc
+
+PR = "r0"
diff --git a/packages/grub/grub-0.97/menu.lst b/packages/grub/grub-0.97/menu.lst
new file mode 100644
index 0000000000..510e8f82b6
--- /dev/null
+++ b/packages/grub/grub-0.97/menu.lst
@@ -0,0 +1,6 @@
+# menu.lst
+default 0
+timeout 5
+title OpenEmbedded Linux (hda1)
+root (hd0,0)
+kernel /boot/bzImage root=/dev/hda1 ro
diff --git a/packages/grub/grub_0.97.bb b/packages/grub/grub_0.97.bb
index 67fca242d4..ef37af19e0 100644
--- a/packages/grub/grub_0.97.bb
+++ b/packages/grub/grub_0.97.bb
@@ -1,12 +1,13 @@
-DESCRIPTION = "GRUB is the GRand Unified Bootloader"
+DESCRIPTION = "GRand Unified Bootloader"
HOMEPAGE = "http://www.gnu.org/software/grub"
SECTION = "bootloaders"
PRIORITY = "optional"
RDEPENDS = "diffutils"
-PR = "r3"
+PR = "r4"
SRC_URI = "ftp://alpha.gnu.org/gnu/grub/grub-${PV}.tar.gz \
- file://automake-1.10.patch;patch=1"
+ file://automake-1.10.patch;patch=1 \
+ file://menu.lst"
inherit autotools
@@ -17,9 +18,12 @@ python __anonymous () {
raise bb.parse.SkipPackage("incompatible with host %s" % host)
}
-do_install_append_vmware() {
- mkdir -p ${D}/boot/
- ln -sf ../usr/lib/grub/{$TARGET_ARCH}{$TARGET_VENDOR}/ ${D}/boot/grub
+do_install_append() {
+ install -d ${D}/boot/
+ ln -sf ../usr/lib/grub/i386${TARGET_VENDOR}/ ${D}/boot/grub
+
+ # TODO: better use grub-set-default script here?
+ install -m 0644 ${WORKDIR}/menu.lst ${D}/boot/grub
}
FILES_${PN}-doc = "${datadir}"
diff --git a/packages/gstreamer/gst-ffmpeg/lower-rank.diff b/packages/gstreamer/gst-ffmpeg/lower-rank.diff
new file mode 100644
index 0000000000..4e81e379b2
--- /dev/null
+++ b/packages/gstreamer/gst-ffmpeg/lower-rank.diff
@@ -0,0 +1,13 @@
+Lower the rank of ffmpeg plugin so codecs that hook into accelerated pieces (e.g. dsp or hw engines) can get picked over this
+
+--- /tmp/gstffmpegdec.c 2009-03-05 09:31:15.000000000 +0100
++++ gst-ffmpeg-0.10.6/ext/ffmpeg/gstffmpegdec.c 2009-03-05 09:33:09.000000000 +0100
+@@ -2588,7 +2588,7 @@
+ case CODEC_ID_MSMPEG4V3:
+ case CODEC_ID_H264:
+ case CODEC_ID_COOK:
+- rank = GST_RANK_PRIMARY;
++ rank = GST_RANK_SECONDARY;
+ break;
+ case CODEC_ID_DVVIDEO:
+ /* we have a good dv decoder, fast on both ppc as well as x86. they say
diff --git a/packages/gstreamer/gst-ffmpeg_0.10.6.bb b/packages/gstreamer/gst-ffmpeg_0.10.6.bb
index 1e7f28d115..20cea128dd 100644
--- a/packages/gstreamer/gst-ffmpeg_0.10.6.bb
+++ b/packages/gstreamer/gst-ffmpeg_0.10.6.bb
@@ -4,12 +4,13 @@ PRIORITY = "optional"
LICENSE = "LGPL"
HOMEPAGE = "http://www.gstreamer.net/"
DEPENDS = "ffmpeg gstreamer gst-plugins-base zlib"
-PR = "r0"
+PR = "r1"
inherit autotools pkgconfig
SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \
file://configure-hack.diff;patch=1 \
+ file://lower-rank.diff;patch=1 \
"
FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
diff --git a/packages/gstreamer/gst-plugins-bad_0.10.6.bb b/packages/gstreamer/gst-plugins-bad_0.10.6.bb
index a8d87833ac..df7bf75852 100644
--- a/packages/gstreamer/gst-plugins-bad_0.10.6.bb
+++ b/packages/gstreamer/gst-plugins-bad_0.10.6.bb
@@ -1,5 +1,5 @@
require gst-plugins.inc
-PR = "r1"
+PR = "r2"
SRC_URI += "file://vorbisenc.h file://vorbisdec.h \
file://gst-plugins-directfb-fix.patch;patch=1;pnum=2 \
diff --git a/packages/gstreamer/gst-plugins-base_0.10.22.bb b/packages/gstreamer/gst-plugins-base_0.10.22.bb
new file mode 100644
index 0000000000..92f2f56fa3
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-base_0.10.22.bb
@@ -0,0 +1,12 @@
+require gst-plugins.inc
+
+PROVIDES += "gst-plugins"
+
+PR = "r1"
+
+# 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 libsm virtual/libx11 freetype gnome-vfs libxv"
+
diff --git a/packages/gstreamer/gst-plugins-good_0.10.13.bb b/packages/gstreamer/gst-plugins-good_0.10.13.bb
new file mode 100644
index 0000000000..b77d1fcf47
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-good_0.10.13.bb
@@ -0,0 +1,11 @@
+require gst-plugins.inc
+
+PR = "r1"
+
+inherit gconf
+
+EXTRA_OECONF += " --enable-experimental --enable-gst_v4l2 --enable-gconftool --enable-external --with-check=no"
+DEPENDS += "jpeg libtheora gst-plugins-base esound"
+
+PACKAGES =+ "gst-plugin-gconfelements"
+FILES_gst-plugin-gconfelements += "${sysconfdir}/gconf"
diff --git a/packages/gstreamer/gst-plugins-good_0.10.7.bb b/packages/gstreamer/gst-plugins-good_0.10.7.bb
deleted file mode 100644
index 7b7c3d71bb..0000000000
--- a/packages/gstreamer/gst-plugins-good_0.10.7.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require gst-plugins.inc
-PR = "r5"
-
-inherit gconf
-
-EXTRA_OECONF += " --enable-experimental --enable-gst_v4l2 --enable-gconftool --enable-external --with-check=no"
-DEPENDS += "jpeg libtheora gst-plugins-base esound"
-
-PACKAGES =+ "gst-plugin-gconfelements"
-FILES_gst-plugin-gconfelements += "${sysconfdir}/gconf"
diff --git a/packages/gstreamer/gst-plugins-ugly/gstmad_16bit.patch b/packages/gstreamer/gst-plugins-ugly/gstmad_16bit.patch
index 1d1eb83484..c766a5b916 100644
--- a/packages/gstreamer/gst-plugins-ugly/gstmad_16bit.patch
+++ b/packages/gstreamer/gst-plugins-ugly/gstmad_16bit.patch
@@ -1,6 +1,7 @@
---- gst-plugins-ugly-0.10.6/ext/mad/gstmad.c.orig 2007-06-13 11:21:25.000000000 +0200
-+++ gst-plugins-ugly-0.10.6/ext/mad/gstmad.c 2007-09-16 22:45:04.000000000 +0200
-@@ -119,8 +119,8 @@
+diff -urN gst-plugins-ugly-0.10.10.orig/ext/mad/gstmad.c gst-plugins-ugly-0.10.10/ext/mad/gstmad.c
+--- gst-plugins-ugly-0.10.10.orig/ext/mad/gstmad.c 2008-11-08 15:48:46.000000000 +0100
++++ gst-plugins-ugly-0.10.10/ext/mad/gstmad.c 2009-02-20 02:24:20.000000000 +0100
+@@ -65,8 +65,8 @@
GST_STATIC_CAPS ("audio/x-raw-int, "
"endianness = (int) " G_STRINGIFY (G_BYTE_ORDER) ", "
"signed = (boolean) true, "
@@ -11,16 +12,16 @@
"rate = (int) { 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, "
"channels = (int) [ 1, 2 ]")
);
-@@ -458,7 +458,7 @@
+@@ -407,7 +407,7 @@
mad = GST_MAD (GST_PAD_PARENT (pad));
-- bytes_per_sample = MAD_NCHANNELS (&mad->frame.header) * 4;
-+ bytes_per_sample = MAD_NCHANNELS (&mad->frame.header) << 1;
+- bytes_per_sample = mad->channels * 4;
++ bytes_per_sample = mad->channels << 1;
switch (src_format) {
case GST_FORMAT_BYTES:
-@@ -870,13 +870,11 @@
+@@ -832,13 +832,11 @@
return res;
}
@@ -36,7 +37,7 @@
/* clip */
if (sample >= MAD_F_ONE)
-@@ -884,13 +882,8 @@
+@@ -846,13 +844,8 @@
else if (sample < -MAD_F_ONE)
sample = -MAD_F_ONE;
@@ -51,7 +52,7 @@
}
/* do we need this function? */
-@@ -1277,8 +1270,8 @@
+@@ -1263,8 +1256,8 @@
caps = gst_caps_new_simple ("audio/x-raw-int",
"endianness", G_TYPE_INT, G_BYTE_ORDER,
"signed", G_TYPE_BOOLEAN, TRUE,
@@ -62,7 +63,7 @@
"rate", G_TYPE_INT, rate, "channels", G_TYPE_INT, nchannels, NULL);
gst_pad_set_caps (mad->srcpad, caps);
-@@ -1576,7 +1569,7 @@
+@@ -1581,7 +1574,7 @@
to skip and send the remaining pcm samples */
GstBuffer *outbuffer = NULL;
@@ -71,7 +72,7 @@
mad_fixed_t const *left_ch, *right_ch;
if (mad->need_newsegment) {
-@@ -1594,7 +1587,7 @@
+@@ -1612,7 +1605,7 @@
/* will attach the caps to the buffer */
result =
gst_pad_alloc_buffer_and_set_caps (mad->srcpad, 0,
@@ -80,7 +81,7 @@
&outbuffer);
if (result != GST_FLOW_OK) {
/* Head for the exit, dropping samples as we go */
-@@ -1607,7 +1600,7 @@
+@@ -1625,7 +1618,7 @@
left_ch = mad->synth.pcm.samples[0];
right_ch = mad->synth.pcm.samples[1];
@@ -89,7 +90,7 @@
GST_DEBUG ("mad out timestamp %" GST_TIME_FORMAT,
GST_TIME_ARGS (time_offset));
-@@ -1621,14 +1614,14 @@
+@@ -1640,14 +1633,14 @@
gint count = nsamples;
while (count--) {
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.10.bb b/packages/gstreamer/gst-plugins-ugly_0.10.10.bb
new file mode 100644
index 0000000000..0678e229f8
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-ugly_0.10.10.bb
@@ -0,0 +1,18 @@
+require gst-plugins.inc
+
+PR = "r1"
+
+DEPENDS += "gst-plugins-base mpeg2dec libsidplay"
+
+SRC_URI += "\
+ file://gstmad_16bit.patch;patch=1 \
+ file://gstsid_autofoo_HACK.patch;patch=1 \
+"
+
+python() {
+ # Don't build, if we are building an ENTERPRISE distro
+ enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
+ if enterprise == "1":
+ raise bb.parse.SkipPackage("gst-plugins-ugly will only build if ENTERPRISE_DISTRO != 1")
+}
+
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.7.bb b/packages/gstreamer/gst-plugins-ugly_0.10.7.bb
deleted file mode 100644
index 380a520234..0000000000
--- a/packages/gstreamer/gst-plugins-ugly_0.10.7.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require gst-plugins.inc
-PR = "r2"
-
-DEPENDS += "gst-plugins-base mpeg2dec libsidplay"
-
-SRC_URI += "\
- file://gstmad_16bit.patch;patch=1 \
- file://gstsid_autofoo_HACK.patch;patch=1 \
-"
-
-python() {
- # Don't build, if we are building an ENTERPRISE distro
- enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
- if enterprise == "1":
- raise bb.parse.SkipPackage("gst-plugins-ugly will only build if ENTERPRISE_DISTRO != 1")
-}
-
diff --git a/packages/gstreamer/gst-plugins.inc b/packages/gstreamer/gst-plugins.inc
index c0b15ef38b..3bf29ad3e9 100644
--- a/packages/gstreamer/gst-plugins.inc
+++ b/packages/gstreamer/gst-plugins.inc
@@ -19,7 +19,9 @@ LIBV = "0.10"
python populate_packages_prepend () {
gst_libdir = bb.data.expand('${libdir}/gstreamer-${LIBV}', d)
postinst = bb.data.getVar('plugin_postinst', d, 1)
+ glibdir = bb.data.expand('${libdir}', d)
+ do_split_packages(d, glibdir, '^lib(.*)\.so\.*', 'lib%s', 'gstreamer %s library', extra_depends='', allow_links=True)
do_split_packages(d, gst_libdir, '^libgst(.*)\.so$', 'gst-plugin-%s', 'GStreamer plugin for %s', postinst=postinst, extra_depends='')
do_split_packages(d, gst_libdir, '^libgst(.*)\.l?a$', 'gst-plugin-%s-dev', 'GStreamer plugin for %s (development files)', extra_depends='')
@@ -42,5 +44,10 @@ python populate_packages_prepend () {
ALLOW_EMPTY = "1"
+PACKAGES += "${PN}-apps"
+FILES_${PN}-apps = "${bindir}"
+
+FILES_${PN} = ""
FILES_${PN}-dbg += "${libdir}/gstreamer-${LIBV}/.debug"
+
diff --git a/packages/gstreamer/gstreamer_0.10.21.bb b/packages/gstreamer/gstreamer_0.10.21.bb
deleted file mode 100644
index a873629425..0000000000
--- a/packages/gstreamer/gstreamer_0.10.21.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require gstreamer.inc
-
-do_configure_prepend() {
- sed -i -e s:docs::g Makefile.am
-}
-
-SRC_URI += "file://po-makefile-fix.patch;patch=1 \
- "
diff --git a/packages/gstreamer/gstreamer_0.10.22.bb b/packages/gstreamer/gstreamer_0.10.22.bb
new file mode 100644
index 0000000000..906aa239ac
--- /dev/null
+++ b/packages/gstreamer/gstreamer_0.10.22.bb
@@ -0,0 +1,6 @@
+require gstreamer.inc
+
+do_configure_prepend() {
+ sed -i -e s:docs::g Makefile.am
+}
+
diff --git a/packages/gtk+/gdk-pixbuf-csource-native_2.12.11.bb b/packages/gtk+/gdk-pixbuf-csource-native_2.12.11.bb
index c7abc18855..22d30bfd01 100644
--- a/packages/gtk+/gdk-pixbuf-csource-native_2.12.11.bb
+++ b/packages/gtk+/gdk-pixbuf-csource-native_2.12.11.bb
@@ -15,6 +15,7 @@ EXTRA_OECONF = "\
--without-libtiff \
--with-libjpeg \
--with-libpng \
+ --disable-cups \
"
do_compile() {
diff --git a/packages/gtk+/gdk-pixbuf_2.10.14.bb b/packages/gtk+/gdk-pixbuf_2.10.14.bb
index 7d3e7dc92a..0aa53b856a 100644
--- a/packages/gtk+/gdk-pixbuf_2.10.14.bb
+++ b/packages/gtk+/gdk-pixbuf_2.10.14.bb
@@ -5,35 +5,15 @@ SECTION = "libs"
LICENSE = "LGPL"
PRIORITY = "optional"
DEPENDS = "libpng gettext glib-2.0"
-PR = "r1"
+PR = "r2"
S = "${WORKDIR}/gtk+-${PV}"
FILESPATH = "${FILE_DIRNAME}/gdk-pixbuf-csource:${FILE_DIRNAME}/gtk+-${PV}:${FILE_DIRNAME}/files"
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
- file://automake-lossage.patch;patch=1 \
- file://reduce-dependencies.patch;patch=1"
-
-# file://no-xwc.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://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 \
-# file://treeview-checkbox-size.patch;patch=1;pnum=0 \
-# file://cell-renderer-edit-focus.patch;patch=1;pnum=0 \
+SRC_URI = "\
+ ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
+ file://automake-lossage.patch;patch=1 \
+"
inherit autotools pkgconfig
@@ -44,7 +24,7 @@ FILES_${PN} = "${bindir}/gdk-pixbuf-query-loaders \
${libdir}/lib*.so.*"
FILES_${PN}-dev += " \
- ${datadir}/gtk-2.0/include \
+ ${datadir}/gtk-2.0/include \
${libdir}/gtk-2.0/include \
${libdir}/gtk-2.0/${LIBV}/loaders/*.la \
${bindir}/gdk-pixbuf-csource \
diff --git a/packages/gtk+/gtk+_2.14.2.bb b/packages/gtk+/gtk+_2.14.2.bb
index b0002b8102..38dd3a411d 100644
--- a/packages/gtk+/gtk+_2.14.2.bb
+++ b/packages/gtk+/gtk+_2.14.2.bb
@@ -1,6 +1,6 @@
require gtk+.inc
-PR = "r1"
+PR = "r3"
DEPENDS += "cairo jasper"
@@ -41,3 +41,8 @@ python populate_packages_prepend () {
if (bb.data.getVar('DEBIAN_NAMES', d, 1)):
bb.data.setVar('PKG_${PN}', 'libgtk-2.0', d)
}
+
+RPROVIDES_${PN} = "libgailutil18"
+RCONFLICTS_${PN} = "libgailutil18"
+RREPLACES_${PN} = "libgailutil18"
+
diff --git a/packages/gtk-webcore/midori_git.bb b/packages/gtk-webcore/midori_git.bb
new file mode 100644
index 0000000000..f4039a414f
--- /dev/null
+++ b/packages/gtk-webcore/midori_git.bb
@@ -0,0 +1,33 @@
+require midori.inc
+
+DEPENDS += "python-native python-docutils-native"
+
+# increment PR every time SRCREV is updated!
+PR = "r0"
+PV = "0.1.2+${PR}+gitr${SRCREV}"
+
+SRC_URI = "http://git.xfce.org/kalikiana/midori/snapshot/midori-${SRCREV}.tar.bz2"
+S = "${WORKDIR}/midori-${SRCREV}"
+
+do_configure() {
+ ./configure \
+ --prefix=${prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${EXTRA_OECONF}
+
+ sed -i /LINK_CC/d ./_build_/c4che/default.cache.py
+ echo "LINK_CC = '${CXX}'" >> ./_build_/c4che/default.cache.py
+}
+
+
+
diff --git a/packages/hal/gnome-device-manager_0.2.bb b/packages/hal/gnome-device-manager_0.2.bb
new file mode 100644
index 0000000000..9b79650c2e
--- /dev/null
+++ b/packages/hal/gnome-device-manager_0.2.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Device viewer with a GTK+ UI"
+LICENSE = "GPL/LGPL"
+DEPENDS = "libgnomeui hal gtk+"
+
+inherit gnome
+
+SRC_URI = "http://hal.freedesktop.org/releases/gnome-device-manager-${PV}.tar.bz2"
+
+FILES_${PN} += "${datadir}/icons"
+
+
diff --git a/packages/hal/hal-0.5.11/wifi-2.6.27.diff b/packages/hal/hal-0.5.11/wifi-2.6.27.diff
new file mode 100644
index 0000000000..4b41c2881c
--- /dev/null
+++ b/packages/hal/hal-0.5.11/wifi-2.6.27.diff
@@ -0,0 +1,64 @@
+Index: hal-0.5.11/hald/linux/device.c
+===================================================================
+--- hal-0.5.11.orig/hald/linux/device.c
++++ hal-0.5.11/hald/linux/device.c
+@@ -45,6 +45,10 @@
+ #include <linux/input.h>
+ #endif
+
++/* for wireless extensions */
++#include <linux/if.h>
++#include <linux/wireless.h>
++
+ #include <dbus/dbus.h>
+ #include <dbus/dbus-glib.h>
+
+@@ -532,10 +536,14 @@ net_add (const gchar *sysfs_path, const
+ const char *addr;
+ const char *parent_subsys;
+ char bridge_path[HAL_PATH_MAX];
+- char wireless_path[HAL_PATH_MAX];
+- char wiphy_path[HAL_PATH_MAX];
++ char phy80211_path[HAL_PATH_MAX];
+ struct stat s;
+ dbus_uint64_t mac_address = 0;
++ int ioctl_fd;
++ struct iwreq iwr;
++
++ ioctl_fd = socket (PF_INET, SOCK_DGRAM, 0);
++ strncpy (iwr.ifr_ifrn.ifrn_name, ifname, IFNAMSIZ);
+
+ addr = hal_device_property_get_string (d, "net.address");
+ if (addr != NULL) {
+@@ -554,9 +562,8 @@ net_add (const gchar *sysfs_path, const
+ }
+
+ snprintf (bridge_path, HAL_PATH_MAX, "%s/bridge", sysfs_path);
+- snprintf (wireless_path, HAL_PATH_MAX, "%s/wireless", sysfs_path);
+- /* wireless dscape stack e.g. from rt2500pci driver*/
+- snprintf (wiphy_path, HAL_PATH_MAX, "%s/wiphy", sysfs_path);
++ /* cfg80211 */
++ snprintf (phy80211_path, HAL_PATH_MAX, "%s/phy80211", sysfs_path);
+ parent_subsys = hal_device_property_get_string (parent_dev, "info.subsystem");
+
+ if (parent_subsys && strcmp(parent_subsys, "bluetooth") == 0) {
+@@ -564,8 +571,8 @@ net_add (const gchar *sysfs_path, const
+ hal_device_property_set_string (d, "info.category", "net.bluetooth");
+ hal_device_add_capability (d, "net.bluetooth");
+ hal_device_property_set_uint64 (d, "net.bluetooth.mac_address", mac_address);
+- } else if ((stat (wireless_path, &s) == 0 && (s.st_mode & S_IFDIR)) ||
+- (stat (wiphy_path, &s) == 0 && (s.st_mode & S_IFDIR))) {
++ } else if ((ioctl (ioctl_fd, SIOCGIWNAME, &iwr) == 0) ||
++ (stat (phy80211_path, &s) == 0 && (s.st_mode & S_IFDIR))) {
+ hal_device_property_set_string (d, "info.product", "WLAN Interface");
+ hal_device_property_set_string (d, "info.category", "net.80211");
+ hal_device_add_capability (d, "net.80211");
+@@ -581,6 +588,8 @@ net_add (const gchar *sysfs_path, const
+ hal_device_add_capability (d, "net.80203");
+ hal_device_property_set_uint64 (d, "net.80203.mac_address", mac_address);
+ }
++
++ close (ioctl_fd);
+ } else if (media_type == ARPHRD_IRDA) {
+ hal_device_property_set_string (d, "info.product", "Networking Interface");
+ hal_device_property_set_string (d, "info.category", "net.irda");
diff --git a/packages/hal/hal.inc b/packages/hal/hal.inc
index 98d02d5a2b..f8ef0e4398 100644
--- a/packages/hal/hal.inc
+++ b/packages/hal/hal.inc
@@ -76,6 +76,8 @@ pkg_postrm_hal () {
}
FILES_${PN} = "${sysconfdir} \
+ ${bindir}/hal-disable-polling \
+ ${bindir}/hal-setup-keymap \
${bindir}/lshal \
${bindir}/hal-find-by-capability \
${bindir}/hal-find-by-property \
diff --git a/packages/hal/hal_0.5.11.bb b/packages/hal/hal_0.5.11.bb
index f51f6b0343..3b5888a863 100644
--- a/packages/hal/hal_0.5.11.bb
+++ b/packages/hal/hal_0.5.11.bb
@@ -1,9 +1,10 @@
require hal.inc
-PR = "r3"
+PR = "r5"
SRC_URI += " file://hal-right-input-h.patch;patch=1 \
- file://fix-configure.diff;patch=1"
+ file://fix-configure.diff;patch=1 \
+ file://wifi-2.6.27.diff;patch=1"
# The following code finds the right linux/input.h,
# which also works with external-toolchain/SDK
diff --git a/packages/hdparm/hdparm_6.9.bb b/packages/hdparm/hdparm_6.9.bb
index 94d1e6e9bf..337a7e1e8b 100644
--- a/packages/hdparm/hdparm_6.9.bb
+++ b/packages/hdparm/hdparm_6.9.bb
@@ -4,11 +4,22 @@ SECTION = "console/utils"
PRIORITY = "optional"
LICENSE = "BSD"
+PR = "r1"
+
SRC_URI = "${SOURCEFORGE_MIRROR}/hdparm/hdparm-${PV}.tar.gz \
file://bswap.patch;patch=1 \
file://uclibc.patch;patch=1"
do_install () {
- install -d ${D}/${sbindir} ${D}/${mandir}/man8
- oe_runmake 'DESTDIR=${D}' install
+ install -d ${D}/${base_sbindir} ${D}/${mandir}/man8
+ oe_runmake 'DESTDIR=${D}' 'sbindir=${base_sbindir}' install
+ mv ${D}${base_sbindir}/hdparm ${D}${base_sbindir}/hdparm.${PN}
+}
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${base_sbindir}/hdparm hdparm hdparm.${PN} 100
}
+
+pkg_prerm_${PN} () {
+ update-alternatives --remove hdparm hdparm.${PN}
+} \ No newline at end of file
diff --git a/packages/i2c-tools/picodlp-control/picodlp-control b/packages/i2c-tools/picodlp-control/picodlp-control
index dd7d9bfd6b..3c3cd5acbb 100755
--- a/packages/i2c-tools/picodlp-control/picodlp-control
+++ b/packages/i2c-tools/picodlp-control/picodlp-control
@@ -43,8 +43,45 @@ case ${PICO_OPTION} in
${I2C_APP} ${PICO_ADDRESS} wb4 0x26 ${WORD_OFF}
fi;;
+"rled")
+ if [ $2 -gt 0 ] ; then
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x11 ${WORD_ON}
+ else
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x11 ${WORD_OFF}
+ fi;;
+
+"gled")
+ if [ $2 -gt 0 ] ; then
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x12 ${WORD_ON}
+ else
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x12 ${WORD_OFF}
+ fi;;
+
+"bled")
+ if [ $2 -gt 0 ] ; then
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x13 ${WORD_ON}
+ else
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x13 ${WORD_OFF}
+ fi;;
+
+"itp")
+ if [ $2 -gt 0 ] ; then
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x0B ${WORD_OFF}
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x04 ${WORD_ON}
+ #Parallel RGB Setting
+ else
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x0B $3
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x04 ${WORD_OFF}
+ #Test Pattern
+ fi;;
+"ledc")
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x0E $4
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x0F $5
+ ${I2C_APP} ${PICO_ADDRESS} wb4 0x10 $6
+ ;;
+
*)
- echo "Usage: $0 vflip|hflip|temporal-enhance 0/1";;
+ echo "Usage: $0 vflip|hflip|temporal-enhance|rled|gled|bled|itp|ledc 0/1 0x";;
esac
diff --git a/packages/i2c-tools/picodlp-control_0.1.bb b/packages/i2c-tools/picodlp-control_0.1.bb
index 79a896b35e..5fb5630d87 100644
--- a/packages/i2c-tools/picodlp-control_0.1.bb
+++ b/packages/i2c-tools/picodlp-control_0.1.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Small application to control the pico DLP over I2C"
LICENSE = "GPLv3"
-PR = "r2"
+PR = "r3"
SRC_URI = "file://*.c file://*.h file://${PN}"
diff --git a/packages/ica/ica-bin_10.6.bb b/packages/ica/ica-bin_10.6.bb
index c4b5c73459..201950559d 100644
--- a/packages/ica/ica-bin_10.6.bb
+++ b/packages/ica/ica-bin_10.6.bb
@@ -14,7 +14,7 @@ FILES_${PN} += "/"
FILES_${PN}-dbg += "/usr/lib/ICAClient/.debug"
do_configure() {
- rpm2cpio ${DL_DIR}/ICAClient-${PV}-1.i386.rpm | fakeroot cpio -i --make-directories
+ rpm2cpio.pl ${DL_DIR}/ICAClient-${PV}-1.i386.rpm | fakeroot cpio -i --make-directories
}
DDIR="${D}/usr/lib/ICAClient"
diff --git a/packages/images/distcc-slave-image.bb b/packages/images/distcc-slave-image.bb
new file mode 100644
index 0000000000..0691274fbb
--- /dev/null
+++ b/packages/images/distcc-slave-image.bb
@@ -0,0 +1,22 @@
+#Angstrom distcc image
+
+IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp"
+
+DEPENDS = "bridge-utils task-boot distcc task-native-sdk"
+
+IMAGE_INSTALL = "task-base \
+ distcc \
+ task-native-sdk \
+ bridge-utils \
+ task-proper-tools \
+ mtd-utils \
+ wireless-tools \
+ iptables"
+
+export IMAGE_BASENAME = "distcc-slave-image"
+IMAGE_LINGUAS = ""
+
+IMAGE_FSTYPES += "ubi"
+
+inherit image
+
diff --git a/packages/images/e-image.bb b/packages/images/e-image.bb
index 9bf95e4231..37d2b1a60c 100644
--- a/packages/images/e-image.bb
+++ b/packages/images/e-image.bb
@@ -10,7 +10,7 @@ IMAGE_INSTALL += "task-e-x11-core \
# task-gpe-apps \
task-gpe-connectivity \
task-gpe-games \
- task-apps-extra \
+# task-apps-extra \
figment \
xhost \
gpe-soundserver \
diff --git a/packages/images/epydial-image.bb b/packages/images/epydial-image.bb
deleted file mode 100644
index 2186fa55d1..0000000000
--- a/packages/images/epydial-image.bb
+++ /dev/null
@@ -1,78 +0,0 @@
-# pyneo image recipe
-
-IMAGE_LINGUAS = "\
-"
-
-# base system
-BASE_INSTALL = "\
- ${MACHINE_TASK_PROVIDER}\
- netbase\
- sysfsutils\
- module-init-tools-depmod\
- rsync\
- screen\
- fbset\
- fbset-modes\
-"
-
-# getting an X window system up
-X_INSTALL = "\
- e-wm \
- ${XSERVER}\
- xserver-kdrive-common\
- xserver-nodm-init\
- xauth\
- xhost\
- xset\
- xrandr\
- fontconfig-utils\
- ttf-dejavu-common\
- ttf-dejavu-sans\
- ttf-dejavu-serif\
-"
-
-# useful command line tools
-TOOLS_INSTALL = "\
- dosfstools\
- iptables\
- lsof\
- mtd-utils\
- s3c24xx-gpio\
- sysstat\
-"
-
-# media audio/video
-MEDIA_INSTALL = "\
- alsa-oss\
- alsa-state\
- alsa-utils-aplay\
- alsa-utils-amixer\
- gst-meta-audio\
- gst-plugin-mad\
- gst-plugin-modplug\
- gst-plugin-sid\
- openmoko-alsa-scenarios\
- mplayer\
-"
-
-# summary
-IMAGE_INSTALL = "\
- ${BASE_INSTALL}\
- ${X_INSTALL}\
- ${MEDIA_INSTALL}\
- ${TOOLS_INSTALL}\
- exquisite\
- pyneod\
- epydial\
- illume \
-"
-
-inherit image
-
-# perform some patches to the rootfs
-rootfs_postprocess() {
- # image timastamp
- date "+%m%d%H%M%Y" > ${IMAGE_ROOTFS}/etc/timestamp
-}
-
-ROOTFS_POSTPROCESS_COMMAND += "rootfs_postprocess"
diff --git a/packages/images/fso-console-image.bb b/packages/images/fso-console-image.bb
index 6bfab9dca9..8d985be01c 100644
--- a/packages/images/fso-console-image.bb
+++ b/packages/images/fso-console-image.bb
@@ -2,7 +2,10 @@
# FSO-compliant Console Image Recipe
#------------------------------------------------------
-require fso-image.bb
+require fso-image.inc
+
+PV = "1.1"
+PR = "r1"
IMAGE_INSTALL = "\
task-base \
diff --git a/packages/images/fso-illume-image.bb b/packages/images/fso-illume-image.bb
index 577e738030..189c8cba69 100644
--- a/packages/images/fso-illume-image.bb
+++ b/packages/images/fso-illume-image.bb
@@ -2,7 +2,7 @@
# FSO-compliant Illume Image Recipe
#------------------------------------------------------
-require fso-image.bb
+require fso-image.inc
PV = "1.1"
PR = "r1"
diff --git a/packages/images/fso-image-light.bb b/packages/images/fso-image-light.bb
index a3bf1f7eb5..12fa2f7205 100644
--- a/packages/images/fso-image-light.bb
+++ b/packages/images/fso-image-light.bb
@@ -2,7 +2,7 @@
# freesmartphone.org Image Recipe, Light Edition
#------------------------------------------------------
-require fso-image.bb
+require fso-image.inc
IMAGE_LINGUAS = ""
diff --git a/packages/images/fso-image-nox.bb b/packages/images/fso-image-nox.bb
index 056982e1b0..d241919367 100644
--- a/packages/images/fso-image-nox.bb
+++ b/packages/images/fso-image-nox.bb
@@ -4,7 +4,7 @@
PR = "r1.0"
-require fso-image.bb
+require fso-image.inc
export IMAGE_BASENAME = "fso-image-nox"
diff --git a/packages/images/fso-image.bb b/packages/images/fso-image.bb
deleted file mode 100644
index 4ed41b5e8d..0000000000
--- a/packages/images/fso-image.bb
+++ /dev/null
@@ -1,144 +0,0 @@
-#------------------------------------------------------
-# freesmartphone.org Image Recipe
-#------------------------------------------------------
-
-PV = "1.1"
-PR = "r3"
-
-# no languages for now
-IMAGE_LINGUAS = ""
-
-BASE_INSTALL = "\
- task-base \
-"
-
-ILLUME_THEME = "illume-theme-freesmartphone"
-
-X_INSTALL = "\
- task-x11-illume \
- task-fonts-truetype-core \
-"
-
-X_INSTALL_append_om-gta02 = "\
- task-fonts-truetype-chinese \
- task-fonts-truetype-japanese \
-"
-
-# tools
-TOOLS_INSTALL = "\
- task-cli-tools \
- task-cli-tools-python \
-"
-
-# audio
-AUDIO_INSTALL = "\
- alsa-oss \
- alsa-state \
- alsa-utils-aplay \
- alsa-utils-amixer \
- gst-meta-audio \
- gst-plugin-modplug \
- gst-plugin-sid \
- ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-mad', d)} \
- fso-sounds \
-"
-
-GTK_INSTALL = "\
- hicolor-icon-theme \
- tango-icon-theme \
- openmoko-calculator2 \
- vala-terminal \
- gpe-scap \
- tangogps \
-"
-
-GAMES_INSTALL = "\
- numptyphysics \
-"
-
-# FIXME these should rather be part of alsa-state,
-# once Om stabilizes them...
-AUDIO_INSTALL_append_om-gta01 = "\
- openmoko-alsa-scenarios \
-"
-AUDIO_INSTALL_append_om-gta02 = "\
- openmoko-alsa-scenarios \
-"
-
-# python
-PYTHON_INSTALL = "\
- task-python-efl \
- python-codecs \
- python-gst \
-"
-
-# fso+zhone
-ZHONE_INSTALL = "\
- task-fso-compliance \
- zhone \
-"
-
-# additional apps
-APPS_INSTALL = "\
-# tichy \
- gpe-gallery \
- gpe-sketchbook \
- gpe-filemanager \
- vagalume \
- starling \
-"
-
-IMAGE_INSTALL = "\
- ${BASE_INSTALL} \
- ${X_INSTALL} \
- ${GTK_INSTALL} \
- ${GAMES_INSTALL} \
- ${AUDIO_INSTALL} \
- ${TOOLS_INSTALL} \
- ${PYTHON_INSTALL} \
- ${ZHONE_INSTALL} \
- ${APPS_INSTALL} \
-"
-
-inherit image
-
-# perform some convenience tweaks to the rootfs to improve the out-of-the-box experience :M:
-fso_rootfs_postprocess() {
- curdir=$PWD
- cd ${IMAGE_ROOTFS}
- # date/time
- date "+%m%d%H%M%Y" >./etc/timestamp
- # alias foo
- echo "alias pico=nano" >>./etc/profile
- echo "alias fso='cd /local/pkg/fso'" >>./etc/profile
- echo "alias ipkg='opkg'" >>./etc/profile
- # nfs
- mkdir -p ./local/pkg
- echo >>./etc/fstab
- echo "# NFS Host" >>./etc/fstab
- echo "192.168.0.200:/local/pkg /local/pkg nfs noauto,nolock,soft,rsize=32768,wsize=32768 0 0" >>./etc/fstab
- # fix .desktop files for illume
- desktop=`find ./usr/share/applications -name "*.desktop"`
- for file in $desktop; do
- echo "Categories=Office;" >>$file
- done
- # minimal gtk theme foo
- mkdir -p ./etc/gtk-2.0/
- echo 'gtk-font-name = "Sans 5"' >> ./etc/gtk-2.0/gtkrc
- echo 'gtk-icon-theme-name = "Tango"' >> ./etc/gtk-2.0/gtkrc
- # fix strange iconv/gconf bug
- ln -s libc.so.6 ./lib/libc.so
- # set sensible default DNS entries
- echo "nameserver 208.67.222.222" > ./etc/resolv.conf
- echo "nameserver 208.67.220.220" >> ./etc/resolv.conf
- # remove autostart of gspd (if installed), we have fso-gpsd and this conflicts
- rm -f ./etc/init.d/gpsd
- # silence printk
- mkdir -p ./etc/profile.d/
- echo "echo 0 0 0 0 >/proc/sys/kernel/printk" >./etc/profile.d/printk.sh
- chmod a+rx ./etc/profile.d/printk.sh
- # back on track
- cd $curdir
-}
-
-ROOTFS_POSTPROCESS_COMMAND += "fso_rootfs_postprocess"
diff --git a/packages/images/fso-image.inc b/packages/images/fso-image.inc
new file mode 100644
index 0000000000..6c381a054b
--- /dev/null
+++ b/packages/images/fso-image.inc
@@ -0,0 +1,143 @@
+#------------------------------------------------------
+# freesmartphone.org Image Recipe Include
+#------------------------------------------------------
+
+# no languages for now
+IMAGE_LINGUAS = ""
+
+BASE_INSTALL = "\
+ task-base \
+"
+
+ILLUME_THEME = "illume-theme-freesmartphone"
+
+X_INSTALL = "\
+ task-x11-illume \
+ task-fonts-truetype-core \
+"
+
+X_INSTALL_append_om-gta02 = "\
+ task-fonts-truetype-chinese \
+ task-fonts-truetype-japanese \
+"
+
+# tools
+TOOLS_INSTALL = "\
+ task-cli-tools \
+ task-cli-tools-python \
+"
+
+# audio
+AUDIO_INSTALL = "\
+ alsa-oss \
+ alsa-state \
+ alsa-utils-aplay \
+ alsa-utils-amixer \
+ gst-meta-audio \
+ gst-plugin-modplug \
+ gst-plugin-sid \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'gst-plugin-mad', d)} \
+ fso-sounds \
+"
+
+GTK_INSTALL = "\
+ hicolor-icon-theme \
+ tango-icon-theme \
+ openmoko-calculator2 \
+ vala-terminal \
+ gpe-scap \
+ tangogps \
+"
+
+GAMES_INSTALL = "\
+ numptyphysics \
+"
+
+# FIXME these should rather be part of alsa-state,
+# once Om stabilizes them...
+AUDIO_INSTALL_append_om-gta01 = "\
+ openmoko-alsa-scenarios \
+"
+AUDIO_INSTALL_append_om-gta02 = "\
+ openmoko-alsa-scenarios \
+"
+
+# python
+PYTHON_INSTALL = "\
+ task-python-efl \
+ python-codecs \
+ python-gst \
+"
+
+# fso+zhone
+ZHONE_INSTALL = "\
+ task-fso-compliance \
+ zhone \
+"
+
+# additional apps
+APPS_INSTALL = "\
+ paroli \
+ gpe-gallery \
+ gpe-sketchbook \
+ gpe-filemanager \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'vagalume', d)} \
+ starling \
+"
+
+IMAGE_INSTALL = "\
+ ${BASE_INSTALL} \
+ ${X_INSTALL} \
+ ${GTK_INSTALL} \
+ ${GAMES_INSTALL} \
+ ${AUDIO_INSTALL} \
+ ${TOOLS_INSTALL} \
+ ${PYTHON_INSTALL} \
+ ${ZHONE_INSTALL} \
+ ${APPS_INSTALL} \
+"
+
+inherit image
+
+# perform some convenience tweaks to the rootfs to improve the out-of-the-box experience :M:
+fso_rootfs_postprocess() {
+ curdir=$PWD
+ cd ${IMAGE_ROOTFS}
+ # date/time
+ date "+%m%d%H%M%Y" >./etc/timestamp
+ # alias foo
+ echo "alias pico=nano" >>./etc/profile
+ echo "alias fso='cd /local/pkg/fso'" >>./etc/profile
+ echo "alias ipkg='opkg'" >>./etc/profile
+ echo "alias vim=vi" >>./etc/profile
+ echo "alias ll='ls -al'" >>./etc/profile
+ # nfs
+ mkdir -p ./local/pkg
+ echo >>./etc/fstab
+ echo "# NFS Host" >>./etc/fstab
+ echo "192.168.0.200:/local/pkg /local/pkg nfs noauto,nolock,soft,rsize=32768,wsize=32768 0 0" >>./etc/fstab
+ # fix .desktop files for illume
+ desktop=`find ./usr/share/applications -name "*.desktop"`
+ for file in $desktop; do
+ echo "Categories=Office;" >>$file
+ done
+ # minimal gtk theme foo
+ mkdir -p ./etc/gtk-2.0/
+ echo 'gtk-font-name = "Sans 5"' >> ./etc/gtk-2.0/gtkrc
+ echo 'gtk-icon-theme-name = "Tango"' >> ./etc/gtk-2.0/gtkrc
+ # fix strange iconv/gconf bug
+ ln -s libc.so.6 ./lib/libc.so
+ # set sensible default DNS entries
+ echo "nameserver 208.67.222.222" > ./etc/resolv.conf
+ echo "nameserver 208.67.220.220" >> ./etc/resolv.conf
+ # remove autostart of gspd (if installed), we have fso-gpsd and this conflicts
+ rm -f ./etc/init.d/gpsd
+ # silence printk
+ mkdir -p ./etc/profile.d/
+ echo "echo 0 0 0 0 >/proc/sys/kernel/printk" >./etc/profile.d/printk.sh
+ chmod a+rx ./etc/profile.d/printk.sh
+ # back on track
+ cd $curdir
+}
+
+ROOTFS_POSTPROCESS_COMMAND += "fso_rootfs_postprocess"
diff --git a/packages/images/fso-paroli-image.bb b/packages/images/fso-paroli-image.bb
new file mode 100644
index 0000000000..1d4bdd5a30
--- /dev/null
+++ b/packages/images/fso-paroli-image.bb
@@ -0,0 +1,12 @@
+require fso-zhone-image.bb
+
+# no extra apps
+GTK_INSTALL = ""
+GAMES_INSTALL = ""
+APP_INSTALL = ""
+
+# fso+zhone
+ZHONE_INSTALL = "\
+ task-fso-compliance \
+ paroli \
+"
diff --git a/packages/images/fso-zhone-image.bb b/packages/images/fso-zhone-image.bb
new file mode 100644
index 0000000000..7a6cb4927a
--- /dev/null
+++ b/packages/images/fso-zhone-image.bb
@@ -0,0 +1,13 @@
+#------------------------------------------------------
+# freesmartphone.org Image Recipe
+#------------------------------------------------------
+
+require fso-image.inc
+
+PV = "1.1"
+PR = "r4"
+
+ZHONE_INSTALL = "\
+ task-fso-compliance \
+ zhone \
+"
diff --git a/packages/images/gnuradio-image.bb b/packages/images/gnuradio-image.bb
new file mode 100644
index 0000000000..5421584481
--- /dev/null
+++ b/packages/images/gnuradio-image.bb
@@ -0,0 +1,26 @@
+#GNU radio image
+
+IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp"
+
+IMAGE_EXTRA_INSTALL ?= ""
+
+DEPENDS = "task-base-extended \
+ ${@base_contains("MACHINE_FEATURES", "screen", "psplash-zap", "",d)} \
+ "
+
+IMAGE_INSTALL = "task-base-extended \
+ ${IMAGE_EXTRA_INSTALL} \
+ ${@base_contains("MACHINE_FEATURES", "screen", "psplash-zap", "",d)} \
+ oprofile \
+ screen \
+ ntp ntp-bin \
+ make \
+ nfs-utils-client \
+ gnuradio gnuradio-examples \
+ "
+
+export IMAGE_BASENAME = "gnuradio-image"
+IMAGE_LINGUAS = ""
+
+inherit image
+
diff --git a/packages/images/jlime-opie.bb b/packages/images/jlime-opie.bb
index 7d98f98a32..bb9ad73f20 100644
--- a/packages/images/jlime-opie.bb
+++ b/packages/images/jlime-opie.bb
@@ -1,10 +1,11 @@
+PR = "r1"
IMAGE_LINGUAS = ""
-DEPENDS = "task-bootstrap task-opie"
+DEPENDS = "task-base task-opie"
extra_stuff = '${@base_conditional("ROOT_FLASH_SIZE", "24", "", "task-opie-extra-games task-opie-extra-apps task-opie-extra-styles konqueror-embedded",d)}'
-IMAGE_INSTALL = "task-bootstrap task-opie-base task-opie-base-applets \
+IMAGE_INSTALL = "task-base task-opie-base task-opie-base-applets \
task-opie-base-inputmethods task-opie-base-apps \
task-opie-base-settings task-opie-base-decorations \
task-opie-base-styles task-opie-base-pim \
diff --git a/packages/images/moko-underground-image.bb b/packages/images/moko-underground-image.bb
deleted file mode 100644
index 590aaf941f..0000000000
--- a/packages/images/moko-underground-image.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-#------------------------------------------------------
-# Moko Underground OS Image Recipe
-#------------------------------------------------------
-
-IMAGE_LINGUAS = ""
-
-ADD_INSTALL = "\
- fontconfig-utils \
- \
- ttf-dejavu-common \
- ttf-dejavu-sans \
- ttf-dejavu-serif \
- \
-"
-
-TOOLS_INSTALL = "\
- nano \
- powertop \
- htop \
-"
-
-IMAGE_INSTALL = "\
- ${MACHINE_TASK_PROVIDER} \
- netbase \
- sysfsutils \
- module-init-tools-depmod \
- rsync \
- screen \
- fbset \
- fbset-modes \
- \
- task-pyneo \
- \
- ${ADD_INSTALL} \
- ${TOOLS_INSTALL} \
-"
-
-inherit image
-
-ROOTFS_POSTPROCESS_COMMAND += 'date "+%m%d%H%M%Y" >${IMAGE_ROOTFS}/etc/timestamp'
diff --git a/packages/images/x11-gpe-image.bb b/packages/images/x11-gpe-image.bb
index 86f4cd838c..7b272f60a1 100644
--- a/packages/images/x11-gpe-image.bb
+++ b/packages/images/x11-gpe-image.bb
@@ -1,7 +1,6 @@
#Angstrom X11 image, with apps and kernel modules included
ANGSTROM_EXTRA_INSTALL += " \
- ${@base_contains("MACHINE_FEATURES", "phone", "openmoko-dialer2", "",d)} \
"
XSERVER ?= "xserver-kdrive-fbdev"
diff --git a/packages/images/x11-gpe-java-image.bb b/packages/images/x11-gpe-java-image.bb
index 72b04ec2bc..fcc022c7a0 100644
--- a/packages/images/x11-gpe-java-image.bb
+++ b/packages/images/x11-gpe-java-image.bb
@@ -1,7 +1,6 @@
#Angstrom X11 image, with apps and kernel modules included
ANGSTROM_EXTRA_INSTALL += " \
- ${@base_contains("MACHINE_FEATURES", "phone", "openmoko-dialer2", "",d)} \
"
XSERVER ?= "xserver-kdrive-fbdev"
diff --git a/packages/images/x11-office-image.bb b/packages/images/x11-office-image.bb
index 47a8fae71f..48799d8998 100644
--- a/packages/images/x11-office-image.bb
+++ b/packages/images/x11-office-image.bb
@@ -1,7 +1,6 @@
#Angstrom X11 image, with apps and kernel modules included
ANGSTROM_EXTRA_INSTALL += " \
- ${@base_contains("MACHINE_FEATURES", "phone", "openmoko-dialer2", "",d)} \
"
XSERVER ?= "xserver-kdrive-fbdev"
diff --git a/packages/images/x11-pimlico-image.bb b/packages/images/x11-pimlico-image.bb
index 3c93bfbd1b..79dcacce6e 100644
--- a/packages/images/x11-pimlico-image.bb
+++ b/packages/images/x11-pimlico-image.bb
@@ -1,7 +1,6 @@
#Angstrom X11 image, with apps and kernel modules included
ANGSTROM_EXTRA_INSTALL += " \
- ${@base_contains("MACHINE_FEATURES", "phone", "openmoko-dialer2", "",d)} \
"
XSERVER ?= "xserver-kdrive-fbdev"
diff --git a/packages/images/zad-image.bb b/packages/images/zad-image.bb
deleted file mode 100644
index 4de50cc8cb..0000000000
--- a/packages/images/zad-image.bb
+++ /dev/null
@@ -1,100 +0,0 @@
-# pyneo image recipe
-
-IMAGE_LINGUAS = "\
-"
-
-# base system
-BASE_INSTALL = "\
- ${MACHINE_TASK_PROVIDER}\
- netbase\
- sysfsutils\
- module-init-tools-depmod\
- rsync\
- screen\
- fbset\
- fbset-modes\
-"
-
-# getting an X window system up
-X_INSTALL = "\
- ${XSERVER}\
- xserver-kdrive-common\
- xserver-nodm-init\
- xauth\
- xhost\
- xset\
- xrandr\
- fontconfig-utils\
- ttf-dejavu-common\
- ttf-dejavu-sans\
- ttf-dejavu-serif\
-"
-
-# useful command line tools
-TOOLS_INSTALL = "\
- dosfstools\
- iptables\
- lsof\
- mtd-utils\
- s3c24xx-gpio\
- sysstat\
-"
-
-# media audio/video
-MEDIA_INSTALL = "\
- alsa-oss\
- alsa-state\
- alsa-utils-aplay\
- alsa-utils-amixer\
- gst-meta-audio\
- gst-plugin-mad\
- gst-plugin-modplug\
- gst-plugin-sid\
- openmoko-alsa-scenarios\
- mplayer\
-"
-
-GAMES_INSTALL = "\
- numptyphysics\
- scummvm\
- tichy\
- quake1\
-"
-
-# summary
-IMAGE_INSTALL = "\
- ${BASE_INSTALL}\
- ${X_INSTALL}\
- ${MEDIA_INSTALL}\
- ${GAMES_INSTALL}\
- ${TOOLS_INSTALL}\
- pyneod\
- zad\
-"
-
-inherit image
-
-# perform some patches to the rootfs
-rootfs_postprocess() {
- # image timastamp
- date "+%m%d%H%M%Y" > ${IMAGE_ROOTFS}/etc/timestamp
- # aliases
- touch ${IMAGE_ROOTFS}/etc/profile
- echo alias 'l="ls -l"' >> ${IMAGE_ROOTFS}/etc/profile
- echo alias 'll="ls -la"' >> ${IMAGE_ROOTFS}/etc/profile
- echo alias 'ipkg=opkg' >> ${IMAGE_ROOTFS}/etc/profile
- # nfs
- mkdir -p ${IMAGE_ROOTFS}/media/hostpc
- echo >> ${IMAGE_ROOTFS}/etc/fstab
- echo "# nfs to hostpc" >> ${IMAGE_ROOTFS}/etc/fstab
- echo "hostpc:/media/hostpc /media/hostpc nfs noauto,nolock,soft,rsize=32768,wsize=32768 0 0" >> ${IMAGE_ROOTFS}/etc/fstab
- # screen
- echo "startup_message off" >> ${IMAGE_ROOTFS}/home/root/.screenrc
- # keys
- ln -s /media/card/keys/ssh ${IMAGE_ROOTFS}/home/root/.ssh
- # bootup
- echo 'echo 0 0 0 0 > /proc/sys/kernel/printk' >> ${IMAGE_ROOTFS}/etc/init.d/rc
- echo 'touch /var/log/lastlog' >> ${IMAGE_ROOTFS}/etc/init.d/rc
-}
-
-ROOTFS_POSTPROCESS_COMMAND += "rootfs_postprocess"
diff --git a/packages/inetutils/inetutils_1.5.bb b/packages/inetutils/inetutils_1.5.bb
index 12a96b20b1..17f202cfbe 100644
--- a/packages/inetutils/inetutils_1.5.bb
+++ b/packages/inetutils/inetutils_1.5.bb
@@ -6,6 +6,8 @@ networking utilities and servers including ftp, ftpd, rcp, \
rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, \
talkd, telnet, telnetd, tftp, tftpd, and uucpd."
+PR = "r1"
+
SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.gz \
"
@@ -16,3 +18,22 @@ EXTRA_OECONF = "--with-ncurses-include-dir=${STAGING_INCDIR}"
do_configure_prepend () {
rm -f ${S}/glob/configure*
}
+
+do_install () {
+ autotools_do_install
+ mv ${D}${bindir}/tftp ${D}${bindir}/tftp.${PN}
+ mv ${D}${bindir}/telnet ${D}${bindir}/telnet.${PN}
+ mv ${D}${bindir}/logger ${D}${bindir}/logger.${PN}
+}
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${bindir}/tftp tftp tftp.${PN} 100
+ update-alternatives --install ${bindir}/telnet telnet telnet.${PN} 100
+ update-alternatives --install ${bindir}/logger logger logger.${PN} 100
+}
+
+pkg_prerm_${PN} () {
+ update-alternatives --remove tftp tftp.${PN}
+ update-alternatives --remove telnet telnet.${PN}
+ update-alternatives --remove logger logger.${PN}
+}
diff --git a/packages/initrdscripts/files/00-psplash.sh b/packages/initrdscripts/files/00-psplash.sh
index 491fe13fc3..db8aabedd7 100644
--- a/packages/initrdscripts/files/00-psplash.sh
+++ b/packages/initrdscripts/files/00-psplash.sh
@@ -1,4 +1,6 @@
-mkdir -p /mnt/.psplash
-mount tmpfs -t tmpfs /mnt/.psplash -o,size=40k
+if ! grep -Eq '\s?psplash=false\s?' /proc/cmdline; then
+ mkdir -p /mnt/.psplash
+ mount tmpfs -t tmpfs /mnt/.psplash -o,size=40k
-psplash &
+ psplash &
+fi
diff --git a/packages/initrdscripts/files/80-ext3.sh b/packages/initrdscripts/files/80-ext3.sh
index ed1909947b..1f52d391fa 100644
--- a/packages/initrdscripts/files/80-ext3.sh
+++ b/packages/initrdscripts/files/80-ext3.sh
@@ -1,7 +1,7 @@
ext3_mount () {
modprobe -q ext3
- mkdir $2
+ mkdir -p $2
mount -t ext3 -onoatime,data=journal,errors=continue $1 $2
}
diff --git a/packages/initrdscripts/files/98-aufs.sh b/packages/initrdscripts/files/98-aufs.sh
index df05418c57..5f7cc11432 100644
--- a/packages/initrdscripts/files/98-aufs.sh
+++ b/packages/initrdscripts/files/98-aufs.sh
@@ -1,7 +1,7 @@
aufs_mount () {
modprobe -q aufs
- mkdir $2 /mnt
+ mkdir -p $2 /mnt
mount -t aufs -o br:$1:$2 none /mnt
}
diff --git a/packages/initrdscripts/files/99-psplash.sh b/packages/initrdscripts/files/99-psplash.sh
index fa488cff8b..3d5f1d60d1 100644
--- a/packages/initrdscripts/files/99-psplash.sh
+++ b/packages/initrdscripts/files/99-psplash.sh
@@ -1,2 +1,4 @@
-mkdir -p /mnt/mnt/.psplash
-mount -n -o move /mnt/.psplash /mnt/mnt/.psplash
+if ! grep -Eq '\s?psplash=false\s?' /proc/cmdline; then
+ mkdir -p /mnt/mnt/.psplash
+ mount -n -o move /mnt/.psplash /mnt/mnt/.psplash
+fi
diff --git a/packages/initrdscripts/files/init.sh b/packages/initrdscripts/files/init.sh
index 5cdbab5e0d..221b8f56b9 100644
--- a/packages/initrdscripts/files/init.sh
+++ b/packages/initrdscripts/files/init.sh
@@ -35,10 +35,16 @@ read_args() {
ROOT_FSTYPE=$optarg ;;
rootdelay=*)
rootdelay=$optarg ;;
+ debug) set -x ;;
+ shell) sh ;;
esac
done
}
+do_depmod() {
+ [ -e "/lib/modules/$(uname -r)/modules.dep" ] || depmod
+}
+
load_module() {
# Cannot redir to $CONSOLE here easily - may not be set yet
echo "initramfs: Loading $module module"
@@ -66,6 +72,7 @@ fatal() {
echo "Starting initramfs boot..."
early_setup
load_modules '0*'
+do_depmod
[ -z "$CONSOLE" ] && CONSOLE="/dev/console"
diff --git a/packages/initrdscripts/initramfs-module-psplash_1.0.bb b/packages/initrdscripts/initramfs-module-psplash_1.0.bb
index a765b36ad3..44781fb6bf 100644
--- a/packages/initrdscripts/initramfs-module-psplash_1.0.bb
+++ b/packages/initrdscripts/initramfs-module-psplash_1.0.bb
@@ -1,6 +1,6 @@
SRC_URI = "file://00-psplash.sh file://99-psplash.sh"
-PR = "r1"
-RDEPENDS = "initramfs-uniboot psplash"
+PR = "r3"
+RDEPENDS = "initramfs-uniboot virtual/psplash"
DESCRIPTION = "An initramfs module to enable psplash."
do_install() {
diff --git a/packages/initscripts/files/hostname.sh b/packages/initscripts/files/hostname.sh
index 0f3d374286..1a3fd2f17e 100644
--- a/packages/initscripts/files/hostname.sh
+++ b/packages/initscripts/files/hostname.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# hostname.sh Set hostname.
#
diff --git a/packages/initscripts/initscripts-1.0/checkroot.sh b/packages/initscripts/initscripts-1.0/checkroot
index e5aa9aaf99..e5aa9aaf99 100755
--- a/packages/initscripts/initscripts-1.0/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/checkroot
diff --git a/packages/initscripts/initscripts-1.0/foonas/checkroot.sh b/packages/initscripts/initscripts-1.0/foonas/checkroot
index c69a773482..c69a773482 100755
--- a/packages/initscripts/initscripts-1.0/foonas/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/foonas/checkroot
diff --git a/packages/initscripts/initscripts-1.0/foonas/domainname.sh b/packages/initscripts/initscripts-1.0/foonas/domainname.sh
index 7113467d8c..55cb5dcfba 100644
--- a/packages/initscripts/initscripts-1.0/foonas/domainname.sh
+++ b/packages/initscripts/initscripts-1.0/foonas/domainname.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# domainname.sh Set the domainname.
#
diff --git a/packages/initscripts/initscripts-1.0/jornada6xx/checkroot.sh b/packages/initscripts/initscripts-1.0/jornada6xx/checkroot
index 9e2d3cfc85..9e2d3cfc85 100755
--- a/packages/initscripts/initscripts-1.0/jornada6xx/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/jornada6xx/checkroot
diff --git a/packages/initscripts/initscripts-1.0/jornada7xx/checkroot.sh b/packages/initscripts/initscripts-1.0/jornada7xx/checkroot
index 9e2d3cfc85..9e2d3cfc85 100755
--- a/packages/initscripts/initscripts-1.0/jornada7xx/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/jornada7xx/checkroot
diff --git a/packages/initscripts/initscripts-1.0/logicpd-pxa270/checkroot.sh b/packages/initscripts/initscripts-1.0/logicpd-pxa270/checkroot
index 2a4d2a67a9..2a4d2a67a9 100644
--- a/packages/initscripts/initscripts-1.0/logicpd-pxa270/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/logicpd-pxa270/checkroot
diff --git a/packages/initscripts/initscripts-1.0/mtx-1/checkroot.sh b/packages/initscripts/initscripts-1.0/mtx-1/checkroot
index e8ae039650..e8ae039650 100755
--- a/packages/initscripts/initscripts-1.0/mtx-1/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/mtx-1/checkroot
diff --git a/packages/initscripts/initscripts-1.0/mtx-1/mountall.sh b/packages/initscripts/initscripts-1.0/mtx-1/mountall.sh
index 4d12c06254..6ce2863dd9 100755
--- a/packages/initscripts/initscripts-1.0/mtx-1/mountall.sh
+++ b/packages/initscripts/initscripts-1.0/mtx-1/mountall.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# mountall.sh Mount all filesystems.
#
diff --git a/packages/initscripts/initscripts-1.0/mtx-2/checkroot.sh b/packages/initscripts/initscripts-1.0/mtx-2/checkroot
index e8ae039650..e8ae039650 100755
--- a/packages/initscripts/initscripts-1.0/mtx-2/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/mtx-2/checkroot
diff --git a/packages/initscripts/initscripts-1.0/mtx-2/mountall.sh b/packages/initscripts/initscripts-1.0/mtx-2/mountall.sh
index 4d12c06254..6ce2863dd9 100755
--- a/packages/initscripts/initscripts-1.0/mtx-2/mountall.sh
+++ b/packages/initscripts/initscripts-1.0/mtx-2/mountall.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# mountall.sh Mount all filesystems.
#
diff --git a/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh b/packages/initscripts/initscripts-1.0/openprotium/checkroot
index 6b63b07188..6b63b07188 100755
--- a/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/openprotium/checkroot
diff --git a/packages/initscripts/initscripts-1.0/openprotium/domainname.sh b/packages/initscripts/initscripts-1.0/openprotium/domainname.sh
index 7113467d8c..55cb5dcfba 100644
--- a/packages/initscripts/initscripts-1.0/openprotium/domainname.sh
+++ b/packages/initscripts/initscripts-1.0/openprotium/domainname.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# domainname.sh Set the domainname.
#
diff --git a/packages/initscripts/initscripts-1.0/openprotium/mountall.sh b/packages/initscripts/initscripts-1.0/openprotium/mountall.sh
index 94ea8217fd..b5ccf9e621 100644
--- a/packages/initscripts/initscripts-1.0/openprotium/mountall.sh
+++ b/packages/initscripts/initscripts-1.0/openprotium/mountall.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# mountall.sh Mount all filesystems.
#
diff --git a/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh b/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh
index 6ee0d50e84..12cf7c604c 100644
--- a/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh
+++ b/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh
# umount the static dev - we'd probably never use it.
#
[ -d /dev/.static/dev ] && umount /dev/.static/dev
diff --git a/packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot.sh b/packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot
index e5fc6ed8b5..e5fc6ed8b5 100755
--- a/packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot
diff --git a/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh b/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh
index 33d7065275..1418a4d0cf 100755
--- a/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh
+++ b/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
#
# mountall.sh Mount all filesystems.
#
diff --git a/packages/initscripts/initscripts-1.0/oplinux/checkroot.sh b/packages/initscripts/initscripts-1.0/oplinux/checkroot
index e5fc6ed8b5..e5fc6ed8b5 100755
--- a/packages/initscripts/initscripts-1.0/oplinux/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/oplinux/checkroot
diff --git a/packages/initscripts/initscripts-slugos_1.0.bb b/packages/initscripts/initscripts-slugos_1.0.bb
index ba1b97e024..29209dbf6a 100644
--- a/packages/initscripts/initscripts-slugos_1.0.bb
+++ b/packages/initscripts/initscripts-slugos_1.0.bb
@@ -16,7 +16,7 @@ RDEPENDS = ""
# All other standard definitions inherited from initscripts
# Except the PR which is hacked here. The format used is
# a suffix
-PR := "${PR}.17"
+PR := "${PR}.19"
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
@@ -26,7 +26,6 @@ SRC_URI += "file://alignment.sh"
SRC_URI += "file://domainname.sh"
SRC_URI += "file://devices.patch;patch=1"
SRC_URI += "file://bootclean.sh"
-SRC_URI += "file://checkroot"
# Without this it is not possible to patch checkroot
S = "${WORKDIR}"
@@ -35,14 +34,6 @@ do_install_append() {
# the image build command now installs this for slugos
rm ${D}${sysconfdir}/device_table
- # Ugly - we need to get rid of the checkroot.sh
- # that was installed by initscript-1.0.bb; the new
- # rcS script will "source" files that end in .sh,
- # and that messes up our checkroot.sh script (due
- # to redirection issues. We need to use only our
- # checkroot, without the ".sh" suffix.
- rm -f ${D}${sysconfdir}/init.d/checkroot.sh
-
# slugos specific scripts
install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/domainname.sh ${D}${sysconfdir}/init.d
@@ -69,7 +60,7 @@ do_install_append() {
rm ${D}${sysconfdir}/rc0.d/S40umountfs
rm ${D}${sysconfdir}/rc0.d/S90halt
rm ${D}${sysconfdir}/rcS.d/S02banner
- rm ${D}${sysconfdir}/rcS.d/S10checkroot.sh
+ rm ${D}${sysconfdir}/rcS.d/S10checkroot
# rm ${D}${sysconfdir}/rcS.d/S30checkfs.sh
rm ${D}${sysconfdir}/rcS.d/S35mountall.sh
rm ${D}${sysconfdir}/rcS.d/S39hostname.sh
diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb
index 51725f8708..b497576036 100644
--- a/packages/initscripts/initscripts_1.0.bb
+++ b/packages/initscripts/initscripts_1.0.bb
@@ -4,7 +4,7 @@ PRIORITY = "required"
DEPENDS = "makedevs"
RDEPENDS = "makedevs"
LICENSE = "GPL"
-PR = "r111"
+PR = "r112"
SRC_URI = "file://functions \
file://halt \
@@ -25,7 +25,7 @@ SRC_URI = "file://functions \
file://sendsigs \
file://urandom \
file://rmnologin \
- file://checkroot.sh \
+ file://checkroot \
file://umountnfs.sh \
file://sysfs.sh \
file://device_table.txt \
@@ -55,7 +55,7 @@ do_install () {
install -m 0755 ${WORKDIR}/functions ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/bootmisc.sh ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/checkroot.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/checkroot ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/finish.sh ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/halt ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/hostname.sh ${D}${sysconfdir}/init.d
@@ -106,7 +106,7 @@ do_install () {
ln -sf ../init.d/save-rtc.sh ${D}${sysconfdir}/rc0.d/S25save-rtc.sh
ln -sf ../init.d/save-rtc.sh ${D}${sysconfdir}/rc6.d/S25save-rtc.sh
ln -sf ../init.d/banner ${D}${sysconfdir}/rcS.d/S02banner
- ln -sf ../init.d/checkroot.sh ${D}${sysconfdir}/rcS.d/S10checkroot.sh
+ ln -sf ../init.d/checkroot ${D}${sysconfdir}/rcS.d/S10checkroot
# ln -sf ../init.d/checkfs.sh ${D}${sysconfdir}/rcS.d/S30checkfs.sh
ln -sf ../init.d/mountall.sh ${D}${sysconfdir}/rcS.d/S35mountall.sh
ln -sf ../init.d/hostname.sh ${D}${sysconfdir}/rcS.d/S39hostname.sh
diff --git a/packages/iscsi-target/files/2.6.29.patch b/packages/iscsi-target/files/2.6.29.patch
new file mode 100644
index 0000000000..24c1afbdd1
--- /dev/null
+++ b/packages/iscsi-target/files/2.6.29.patch
@@ -0,0 +1,72 @@
+Index: iscsitarget-0.4.17/kernel/block-io.c
+===================================================================
+--- iscsitarget-0.4.17/kernel/block-io.c (revision 198)
++++ iscsitarget-0.4.17/kernel/block-io.c (working copy)
+@@ -13,6 +13,7 @@
+ #include <linux/blkdev.h>
+ #include <linux/parser.h>
+ #include <linux/buffer_head.h>
++#include <linux/version.h>
+
+ #include "iscsi.h"
+ #include "iscsi_dbg.h"
+@@ -154,14 +155,22 @@
+ {
+ struct blockio_data *bio_data = volume->private;
+ struct block_device *bdev;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+ int flags = LUReadonly(volume) ? MS_RDONLY : 0;
++#else
++ fmode_t flags = LUReadonly(volume) ? FMODE_READ : (FMODE_READ | FMODE_WRITE);
++#endif
+ int err = 0;
+
+ bio_data->path = kstrdup(path, GFP_KERNEL);
+ if (!bio_data->path)
+ return -ENOMEM;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+ bdev = open_bdev_excl(path, flags, THIS_MODULE);
++#else
++ bdev = open_bdev_exclusive(path, flags, THIS_MODULE);
++#endif
+ if (IS_ERR(bdev)) {
+ err = PTR_ERR(bdev);
+ eprintk("Can't open device %s, error %d\n", path, err);
+@@ -324,8 +333,17 @@
+ {
+ struct blockio_data *bio_data = volume->private;
+
+- if (bio_data->bdev)
++ if (bio_data->bdev) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+ close_bdev_excl(bio_data->bdev);
++#else
++ if (LUReadonly(volume)) {
++ close_bdev_exclusive(bio_data->bdev, FMODE_READ);
++ } else {
++ close_bdev_exclusive(bio_data->bdev, FMODE_READ|FMODE_WRITE);
++ }
++#endif
++ }
+ kfree(bio_data->path);
+
+ kfree(volume->private);
+Index: iscsitarget-0.4.17/kernel/conn.c
+===================================================================
+--- iscsitarget-0.4.17/kernel/conn.c (revision 198)
++++ iscsitarget-0.4.17/kernel/conn.c (working copy)
+@@ -46,9 +46,13 @@
+ "%u.%u.%u.%u", NIPQUAD(inet_sk(sk)->daddr));
+ break;
+ case AF_INET6:
++#ifdef NIP6
+ snprintf(buf, sizeof(buf),
+ "[%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x]",
+ NIP6(inet6_sk(sk)->daddr));
++#else
++ snprintf(buf, sizeof(buf), "[%p6]", &inet6_sk(sk)->daddr);
++#endif
+ break;
+ default:
+ break;
diff --git a/packages/iscsi-target/iscsi-target_0.4.17.bb b/packages/iscsi-target/iscsi-target_0.4.17.bb
index deb09022d4..07cbee90df 100644
--- a/packages/iscsi-target/iscsi-target_0.4.17.bb
+++ b/packages/iscsi-target/iscsi-target_0.4.17.bb
@@ -1,10 +1,11 @@
DESCRIPTION = "iSCSI Enterprise Target is for building an iSCSI storage system on Linux"
HOMEPAGE = "http://iscsitarget.sourceforge.net/"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/iscsitarget/iscsitarget-${PV}.tar.gz \
file://libs.patch;patch=1 \
+ file://2.6.29.patch;patch=1 \
file://ietd.conf \
file://init"
S = "${WORKDIR}/iscsitarget-${PV}"
diff --git a/packages/jack/jack_0.116.2.bb b/packages/jack/jack_0.116.2.bb
new file mode 100644
index 0000000000..f0a2e7525e
--- /dev/null
+++ b/packages/jack/jack_0.116.2.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 = "http://jackaudio.org/downloads/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/jamvm/jamvm-native_1.5.1.bb b/packages/jamvm/jamvm-native_1.5.1.bb
deleted file mode 100644
index f38ae9f5bb..0000000000
--- a/packages/jamvm/jamvm-native_1.5.1.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require jamvm-native.inc
-
-PR = "r2"
-
diff --git a/packages/jamvm/jamvm-native_1.5.2.bb b/packages/jamvm/jamvm-native_1.5.2.bb
new file mode 100644
index 0000000000..e174e2a312
--- /dev/null
+++ b/packages/jamvm/jamvm-native_1.5.2.bb
@@ -0,0 +1,4 @@
+require jamvm-native.inc
+
+PR = "r0"
+
diff --git a/packages/jamvm/jamvm.inc b/packages/jamvm/jamvm.inc
index af6fd47ee6..428e6b2449 100644
--- a/packages/jamvm/jamvm.inc
+++ b/packages/jamvm/jamvm.inc
@@ -19,4 +19,4 @@ CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
ALTERNATIVE_NAME = "java"
ALTERNATIVE_PATH = "${bindir}/jamvm"
-ALTERNATIVE_PRIORITY = "5"
+ALTERNATIVE_PRIORITY = "4"
diff --git a/packages/jamvm/jamvm_1.4.5.bb b/packages/jamvm/jamvm_1.4.5.bb
index e8ca076350..7bb46f6f97 100644
--- a/packages/jamvm/jamvm_1.4.5.bb
+++ b/packages/jamvm/jamvm_1.4.5.bb
@@ -1,6 +1,6 @@
require jamvm.inc
-PR = "r2"
+PR = "r3"
SRC_URI += "file://jamvm-1.3.1-size-defaults.patch;patch=1"
diff --git a/packages/jamvm/jamvm_1.5.0.bb b/packages/jamvm/jamvm_1.5.0.bb
index 92c1992ea9..c95faf9d6b 100644
--- a/packages/jamvm/jamvm_1.5.0.bb
+++ b/packages/jamvm/jamvm_1.5.0.bb
@@ -2,7 +2,7 @@ require jamvm.inc
SRC_URI += "file://debian-jni.patch;patch=1;pnum=0"
-PR = "r3"
+PR = "r4"
do_configure_prepend() {
# Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
diff --git a/packages/jamvm/jamvm_1.5.1.bb b/packages/jamvm/jamvm_1.5.1.bb
deleted file mode 100644
index 81977a5f40..0000000000
--- a/packages/jamvm/jamvm_1.5.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require jamvm.inc
-
-SRC_URI += "file://debian-jni.patch;patch=1;pnum=0"
-
-PR = "r2"
-
-do_configure_prepend() {
- # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
- # configured in OE.
- sed -i -e "s|OE_LIBDIR_JNI|${libdir_jni}|" src/dll.c
-}
-
diff --git a/packages/jamvm/jamvm_1.5.2.bb b/packages/jamvm/jamvm_1.5.2.bb
new file mode 100644
index 0000000000..bf9271c938
--- /dev/null
+++ b/packages/jamvm/jamvm_1.5.2.bb
@@ -0,0 +1,12 @@
+require jamvm.inc
+
+SRC_URI += "file://debian-jni.patch;patch=1;pnum=0"
+
+PR = "r0"
+
+do_configure_prepend() {
+ # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
+ # configured in OE.
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir_jni}|" src/dll.c
+}
+
diff --git a/packages/kaeilos/kaeilos-version.bb b/packages/kaeilos/kaeilos-version.bb
new file mode 100644
index 0000000000..4600c41d4e
--- /dev/null
+++ b/packages/kaeilos/kaeilos-version.bb
@@ -0,0 +1,18 @@
+LICENSE = "MIT"
+
+PV = "${DISTRO_VERSION}"
+PR = "r2"
+PE = "1"
+
+PACKAGES = "${PN}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+export METADATA_REVISION
+export METADATA_BRANCH
+
+do_install() {
+ mkdir -p ${D}${sysconfdir}
+ echo "KaeilOS ${DISTRO_VERSION}" > ${D}${sysconfdir}/kaeilos-version
+ echo "Built from branch: ${METADATA_BRANCH}" >> ${D}${sysconfdir}/kaeilos-version
+ echo "Revision: ${METADATA_REVISION}" >> ${D}${sysconfdir}/kaeilos-version
+}
diff --git a/packages/kexecboot/device_table-oldmmc.txt b/packages/kexecboot/device_table-oldmmc.txt
new file mode 100644
index 0000000000..5c7097cbdb
--- /dev/null
+++ b/packages/kexecboot/device_table-oldmmc.txt
@@ -0,0 +1,36 @@
+#<path> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
+#/dev/mem c 640 0 0 1 1 0 0 -
+#
+#type can be one of:
+# f A regular file
+# d Directory
+# c Character special device file
+# b Block special device file
+# p Fifo (named pipe)
+
+/dev d 755 0 0 - - - - -
+/dev/initctl p 600 0 0 - - - - -
+/dev/apm_bios c 660 0 46 10 134 - - -
+/dev/fb0 c 600 0 0 29 0 - - -
+/dev/hda b 660 0 6 3 0 - - -
+/dev/hda b 660 0 6 3 1 1 1 20
+/dev/kmem c 640 0 15 1 2 - - -
+/dev/mem c 640 0 15 1 1 - - -
+/dev/null c 666 0 0 1 3 - - -
+/dev/ram b 640 0 0 1 0 0 1 4
+/dev/tty c 662 0 5 5 0 - - -
+/dev/tty c 666 0 5 4 0 0 1 9
+/dev/ttyS c 640 0 5 4 64 0 1 1
+/dev/ttySA c 640 0 5 204 5 0 1 1
+/dev/zero c 644 0 0 1 5 - - -
+/dev/mtd c 660 0 6 90 0 0 2 8
+/dev/mtdblock b 640 0 0 31 0 0 1 8
+/dev/console c 662 0 5 5 1 - - -
+/dev/random c 644 0 0 1 8 - - -
+/dev/urandom c 644 0 0 1 9 - - -
+/dev/ptmx c 644 0 0 5 2 - - -
+
+# mmc numbers are assigned dynamicly so if you have other dynamic assigned block devices it may be wrong
+/dev/mmcblk0 b 660 0 6 254 0 - - -
+/dev/mmcblk0p b 660 0 6 254 1 1 1 7
+/dev/event0 c 660 0 0 13 64 - - -
diff --git a/packages/kexecboot/files/angstrom/logo-img.h b/packages/kexecboot/files/angstrom/logo-img.h
new file mode 100644
index 0000000000..7de37c1642
--- /dev/null
+++ b/packages/kexecboot/files/angstrom/logo-img.h
@@ -0,0 +1,246 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define LOGO_IMG_ROWSTRIDE (392)
+#define LOGO_IMG_WIDTH (98)
+#define LOGO_IMG_HEIGHT (64)
+#define LOGO_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define LOGO_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\244\350\354\340\377\2\344\352\351\377\323\335\333\377\340\350\354\340" \
+ "\377\3\277\315\312\377\357\363\362\377\303\320\316\377\337\350\354\340" \
+ "\377\3\305\322\320\377\376\377\377\377\305\322\320\377\241\350\354\340" \
+ "\377\1\341\346\345\377\203\330\336\334\377\2\265\300\275\377\277\310" \
+ "\306\377\270\350\354\340\377\3\305\322\320\377\376\377\377\377\305\322" \
+ "\320\377\240\350\354\340\377\3m\202~\377dzv\377n\203\177\377\202o\204" \
+ "\177\377\2g}y\377\277\310\306\377\270\350\354\340\377\3\305\322\320\377" \
+ "\376\377\377\377\305\322\320\377\237\350\354\340\377\2\271\303\301\377" \
+ "\226\246\243\377\204\350\354\340\377\2\325\333\332\377\305\315\314\377" \
+ "\270\350\354\340\377\3\305\322\320\377\376\377\377\377\305\322\320\377" \
+ "\237\350\354\340\377\2\306\316\314\377\260\274\271\377\276\350\354\340" \
+ "\377\3\305\322\320\377\376\377\377\377\305\322\320\377\240\350\354\340" \
+ "\377\3\247\264\262\377\301\312\310\377\337\343\342\377\202\341\346\345" \
+ "\377\2\274\305\303\377\277\310\306\377\270\350\354\340\377\3\302\320" \
+ "\316\377\373\374\374\377\306\323\321\377\240\350\354\340\377\2r\207\202" \
+ "\377^vq\377\203e|w\377\2`xs\377\277\310\306\377\266\350\354\340\377\6" \
+ "\347\354\353\377\240\267\262\377\230\260\253\377\322\335\333\377\225" \
+ "\256\251\377\250\275\270\377\236\350\354\340\377\2\273\305\303\377\222" \
+ "\242\236\377\204\350\354\340\377\2\323\332\330\377\302\313\311\377\265" \
+ "\350\354\340\377\11\326\340\336\377\230\260\253\377\350\355\354\377\350" \
+ "\354\340\377\335\345\343\377\350\354\340\377\337\347\345\377\224\255" \
+ "\250\377\344\353\351\377\234\350\354\340\377\2\304\314\313\377\262\275" \
+ "\273\377\273\350\354\340\377\1\221\253\246\377\206\350\354\340\377\2" \
+ "\351\355\344\377\223\255\247\377\235\350\354\340\377\3\226\245\242\377" \
+ "\312\321\320\377\350\353\353\377\202\350\354\340\377\2\302\313\311\377" \
+ "\277\310\306\377\264\350\354\340\377\2\277\316\313\377\320\333\330\377" \
+ "\207\350\354\340\377\2\272\312\307\377\325\337\335\377\233\350\354\340" \
+ "\377\2\326\334\333\377Xql\377\204\\to\377\2Zrm\377\277\310\306\377\264" \
+ "\350\354\340\377\1\237\266\261\377\210\350\354\340\377\2\336\346\344" \
+ "\377\264\306\302\377\233\350\354\340\377\2\326\334\333\377\272\304\302" \
+ "\377\204\350\354\340\377\2\321\330\326\377\277\310\306\377\264\350\354" \
+ "\340\377\1\235\264\257\377\210\350\354\340\377\2\341\350\346\377\262" \
+ "\304\301\377\327\350\354\340\377\2\271\312\306\377\327\341\337\377\207" \
+ "\350\354\340\377\2\302\320\315\377\316\332\330\377\234\350\354\340\377" \
+ "\6\322\331\330\377o\204\200\377Vni\377Uni\377i~z\377\304\314\313\377" \
+ "\265\350\354\340\377\12\352\356\346\377\226\257\252\377\350\354\340\377" \
+ "\303\321\316\377\321\334\332\377\350\354\340\377\314\327\325\377\314" \
+ "\330\325\377\350\354\340\377\221\253\246\377\231\350\354\340\377\13\345" \
+ "\351\350\377Zrn\377\337\344\343\377\350\354\340\377o\204\200\377\276" \
+ "\307\305\377\337\344\343\377\341\346\345\377\304\315\313\377t\210\204" \
+ "\377\333\340\337\377\265\350\354\340\377\11\307\324\322\377\240\266\262" \
+ "\377\321\334\332\377\320\332\330\377\256\301\275\377\335\345\344\377" \
+ "\306\323\320\377\231\261\254\377\331\342\340\377\232\350\354\340\377" \
+ "\4\301\312\310\377\350\354\340\377\272\304\302\377\313\323\321\377\204" \
+ "\350\354\340\377\2\342\346\345\377\244\261\257\377\266\350\354\340\377" \
+ "\7\274\314\311\377\362\365\364\377\323\335\333\377\376\376\376\377\317" \
+ "\332\330\377\353\360\357\377\307\324\321\377\233\350\354\340\377\4\263" \
+ "\276\274\377\350\354\340\377\270\302\300\377\321\330\326\377\204\350" \
+ "\354\340\377\2\350\353\353\377\241\256\254\377\266\350\354\340\377\7" \
+ "\306\323\320\377\374\375\374\377\320\333\330\377\374\375\375\377\315" \
+ "\331\327\377\377\377\377\377\301\317\314\377\232\350\354\340\377\6\350" \
+ "\353\353\377`xs\377\345\351\343\377\346\352\342\377w\213\207\377\325" \
+ "\333\332\377\202\350\354\340\377\3\334\341\340\377\201\223\220\377\320" \
+ "\327\326\377\265\350\354\340\377\11\324\336\334\377\352\357\356\377\377" \
+ "\377\377\377\316\331\327\377\274\313\310\377\336\345\344\377\377\377" \
+ "\377\377\333\344\342\377\343\352\350\377\235\350\354\340\377\2\300\311" \
+ "\310\377_vr\377\202Slg\377\2Zrn\377\257\272\270\377\266\350\354\340\377" \
+ "\11\301\317\314\377\376\376\376\377\376\377\377\377\301\317\314\377\350" \
+ "\354\340\377\304\321\317\377\377\377\377\377\373\374\374\377\303\321" \
+ "\316\377\237\350\354\340\377\2\331\336\335\377\326\334\333\377\267\350" \
+ "\354\340\377\12\345\353\352\377\331\342\340\377\377\377\377\377\347\355" \
+ "\354\377\327\340\336\377\350\354\340\377\312\327\324\377\364\366\366" \
+ "\377\377\377\377\377\314\330\326\377\234\350\354\340\377\3\312\322\321" \
+ "\377m\202~\377\310\320\317\377\271\350\354\340\377\4\302\320\315\377" \
+ "\374\375\375\377\377\377\377\377\303\321\317\377\203\350\354\340\377" \
+ "\4\314\330\326\377\377\377\377\377\364\366\366\377\313\327\324\377\233" \
+ "\350\354\340\377\2\265\300\275\377\256\272\267\377\272\350\354\340\377" \
+ "\4\314\327\325\377\377\377\377\377\364\367\366\377\312\326\324\377\203" \
+ "\350\354\340\377\4\302\320\316\377\374\375\375\377\377\377\377\377\303" \
+ "\321\316\377\233\350\354\340\377\2\337\344\343\377\235\253\251\377\204" \
+ "\350\354\340\377\2\335\342\341\377\317\326\325\377\263\350\354\340\377" \
+ "\4\314\330\325\377\362\365\364\377\377\377\377\377\316\331\327\377\204" \
+ "\350\354\340\377\5\343\351\350\377\334\344\342\377\377\377\377\377\345" \
+ "\353\352\377\331\342\340\377\233\350\354\340\377\3\204\226\222\377\211" \
+ "\232\227\377\253\270\265\377\202\257\272\270\377\2\226\246\243\377\277" \
+ "\310\306\377\263\350\354\340\377\4\303\321\316\377\377\377\377\377\374" \
+ "\375\375\377\302\320\315\377\205\350\354\340\377\1\301\317\314\377\202" \
+ "\377\377\377\377\1\300\317\314\377\232\350\354\340\377\2\326\334\333" \
+ "\377|\217\213\377\204\230\247\244\377\2\206\227\224\377\277\310\306\377" \
+ "\262\350\354\340\377\10\332\343\341\377\344\352\351\377\377\377\377\377" \
+ "\335\345\343\377\342\351\347\377\350\354\340\377\350\355\354\377\276" \
+ "\315\312\377\202\350\354\340\377\4\323\335\333\377\353\360\357\377\377" \
+ "\377\377\377\325\337\335\377\232\350\354\340\377\2\343\347\347\377\321" \
+ "\330\326\377\204\350\354\340\377\2\341\345\344\377\325\333\331\377\262" \
+ "\350\354\340\377\4\301\317\314\377\372\373\373\377\377\377\377\377\301" \
+ "\317\315\377\202\350\354\340\377\2\343\352\350\377\316\331\327\377\203" \
+ "\350\354\340\377\4\307\324\321\377\377\377\377\377\365\370\367\377\305" \
+ "\323\321\377\232\350\354\340\377\1\347\352\352\377\204\350\354\340\377" \
+ "\1\237\255\252\377\255\350\354\340\377\3\305\323\320\377\207\244\236" \
+ "\377\222\254\246\377\202\235\264\257\377\5\241\267\263\377\260\302\276" \
+ "\377\321\334\332\377\324\336\334\377\223\254\247\377\202\235\264\257" \
+ "\377\3\232\262\255\377\315\331\327\377\234\263\257\377\202\235\264\257" \
+ "\377\5\227\257\252\377\325\337\335\377\321\334\332\377\254\277\273\377" \
+ "\237\266\262\377\202\235\264\257\377\3\217\252\244\377\207\244\236\377" \
+ "\327\341\337\377\223\350\354\340\377\2\326\334\333\377\272\304\302\377" \
+ "\204\350\354\340\377\2\300\311\307\377\252\266\264\377\254\350\354\340" \
+ "\377\3\312\327\324\377\223\254\247\377\235\264\257\377\202\247\274\267" \
+ "\377\5\233\262\256\377\331\342\340\377\320\333\331\377\257\302\276\377" \
+ "\251\276\271\377\202\247\274\267\377\3\242\270\263\377\315\331\327\377" \
+ "\245\272\266\377\202\247\274\267\377\5\252\276\272\377\262\303\300\377" \
+ "\320\333\331\377\330\341\337\377\231\260\253\377\202\247\274\267\377" \
+ "\3\232\262\255\377\223\254\247\377\333\344\342\377\222\350\354\340\377" \
+ "\3\350\353\353\377\304\315\313\377\255\271\266\377\204\350\353\353\377" \
+ "\2\313\323\321\377\241\256\254\377\261\350\354\340\377\4\307\324\322" \
+ "\377\377\377\377\377\366\370\370\377\306\323\321\377\203\350\354\340" \
+ "\377\2\343\352\350\377\316\331\327\377\204\350\354\340\377\4\301\320" \
+ "\315\377\374\375\374\377\377\377\377\377\301\317\314\377\226\350\354" \
+ "\340\377\4\303\314\312\377^vq\377\\so\377Zrm\377\203^vq\377\3_vr\377" \
+ "r\207\202\377\337\343\342\377\260\350\354\340\377\4\322\334\332\377\355" \
+ "\361\360\377\377\377\377\377\324\335\333\377\205\350\354\340\377\1\274" \
+ "\314\310\377\204\350\354\340\377\5\334\344\342\377\342\351\350\377\377" \
+ "\377\377\377\336\346\345\377\340\347\345\377\227\350\354\340\377\2\326" \
+ "\334\333\377\272\304\302\377\266\350\354\340\377\4\301\320\314\377\377" \
+ "\377\377\377\376\376\376\377\301\317\315\377\213\350\354\340\377\4\302" \
+ "\320\315\377\377\377\377\377\376\376\376\377\301\317\315\377\234\350" \
+ "\354\340\377\1\306\316\314\377\261\350\354\340\377\5\341\350\346\377" \
+ "\335\345\344\377\377\377\377\377\343\352\350\377\333\343\342\377\213" \
+ "\350\354\340\377\4\316\331\327\377\360\364\363\377\377\377\377\377\320" \
+ "\333\331\377\227\350\354\340\377\10\344\350\347\377f|x\377\310\320\317" \
+ "\377\350\354\340\377j\200{\377w\213\207\377o\204\200\377\345\351\350" \
+ "\377\257\350\354\340\377\4\303\320\316\377\374\375\375\377\377\377\377" \
+ "\377\303\321\316\377\215\350\354\340\377\4\312\327\325\377\377\377\377" \
+ "\377\365\370\367\377\311\325\323\377\226\350\354\340\377\10\276\307\305" \
+ "\377\300\311\310\377\350\354\340\377\301\312\310\377v\212\206\377\350" \
+ "\354\340\377\334\341\340\377\251\266\263\377\257\350\354\340\377\4\316" \
+ "\332\327\377\377\377\377\377\363\366\365\377\314\327\325\377\215\350" \
+ "\354\340\377\4\304\321\317\377\373\374\373\377\377\377\377\377\305\322" \
+ "\320\377\226\350\354\340\377\5\264\277\275\377\333\340\337\377\350\354" \
+ "\340\377\206\227\224\377\266\301\277\377\202\350\354\340\377\1\235\253" \
+ "\251\377\256\350\354\340\377\4\311\326\323\377\365\370\367\377\377\377" \
+ "\377\377\312\327\324\377\216\350\354\340\377\5\346\354\353\377\330\341" \
+ "\337\377\377\377\377\377\351\356\355\377\325\337\335\377\225\350\354" \
+ "\340\377\4\325\333\332\377\217\237\234\377\265\300\275\377]up\377\202" \
+ "\350\354\340\377\2\273\305\303\377\266\301\277\377\256\350\354\340\377" \
+ "\4\304\321\317\377\377\377\377\377\373\374\374\377\303\321\316\377\217" \
+ "\350\354\340\377\4\301\317\314\377\377\377\377\377\376\376\376\377\300" \
+ "\317\314\377\226\350\354\340\377\6\261\275\272\377\201\223\220\377\302" \
+ "\313\311\377\350\354\340\377\301\312\310\377\200\223\217\377\256\350" \
+ "\354\340\377\5\327\340\337\377\347\355\354\377\377\377\377\377\331\342" \
+ "\340\377\345\353\352\377\217\350\354\340\377\5\325\337\335\377\351\356" \
+ "\355\377\377\377\377\377\330\341\337\377\346\354\353\377\224\350\354" \
+ "\340\377\2\346\352\351\377\326\334\333\377\263\350\354\340\377\4\301" \
+ "\317\314\377\377\377\377\377\376\377\377\377\300\317\314\377\221\350" \
+ "\354\340\377\4\304\322\317\377\377\377\377\377\374\375\375\377\303\320" \
+ "\316\377\224\350\354\340\377\2\326\334\333\377\203\225\221\377\205\243" \
+ "\261\256\377\2\247\263\261\377\312\321\320\377\253\350\354\340\377\5" \
+ "\347\355\354\377\327\340\336\377\377\377\377\377\351\356\355\377\325" \
+ "\337\335\377\221\350\354\340\377\4\311\325\323\377\365\367\367\377\377" \
+ "\377\377\377\313\327\325\377\225\350\354\340\377\11w\213\207\377\204" \
+ "\226\222\377\240\256\253\377\242\257\255\377\214\234\231\377m\202~\377" \
+ "\240\256\253\377}\220\215\377\236\254\251\377\252\350\354\340\377\4\305" \
+ "\322\317\377\372\373\373\377\377\377\377\377\306\323\320\377\223\350" \
+ "\354\340\377\4\317\333\330\377\377\377\377\377\361\364\364\377\315\331" \
+ "\327\377\223\350\354\340\377\2\336\343\342\377\265\300\275\377\204\350" \
+ "\354\340\377\4\313\323\321\377\306\317\315\377\350\354\340\377\215\236" \
+ "\232\377\252\350\354\340\377\4\311\326\324\377\377\377\377\377\367\371" \
+ "\370\377\310\325\322\377\223\350\354\340\377\4\272\312\307\377\327\341" \
+ "\337\377\332\342\341\377\263\305\302\377\223\350\354\340\377\2\265\300" \
+ "\275\377\331\336\335\377\204\350\354\340\377\5\350\354\342\377\235\253" \
+ "\251\377\350\354\340\377\250\265\262\377\347\353\352\377\250\350\354" \
+ "\340\377\4\316\331\327\377\360\364\363\377\377\377\377\377\320\332\330" \
+ "\377\224\350\354\340\377\5\340\347\345\377\336\345\344\377\377\377\377" \
+ "\377\342\351\347\377\234\263\256\377\222\350\354\340\377\2\313\323\321" \
+ "\377\212\233\230\377\204\350\354\340\377\4\234\252\247\377\265\300\275" \
+ "\377\350\354\340\377\210\232\226\377\251\350\354\340\377\4\302\320\315" \
+ "\377\377\377\377\377\375\376\376\377\301\317\314\377\225\350\354\340" \
+ "\377\5\301\317\314\377\344\353\351\377\350\356\355\377\251\274\270\377" \
+ "\310\325\322\377\222\350\354\340\377\11\225\244\241\377Xql\377k\200|" \
+ "\377l\201}\377Zrn\377\206\227\224\377\350\354\340\377\272\304\302\377" \
+ "\212\233\230\377\250\350\354\340\377\5\335\345\344\377\341\350\347\377" \
+ "\377\377\377\377\340\347\346\377\336\346\344\377\225\350\354\340\377" \
+ "\5\317\332\330\377\353\357\356\377\306\324\321\377\321\333\331\377\244" \
+ "\271\265\377\223\350\354\340\377\4\340\344\344\377\273\305\303\377\271" \
+ "\303\301\377\332\337\336\377\254\350\354\340\377\4\301\320\315\377\376" \
+ "\376\376\377\377\377\377\377\302\320\315\377\227\350\354\340\377\4\306" \
+ "\324\321\377\314\330\326\377\357\363\362\377\264\306\302\377\227\350" \
+ "\354\340\377\2\311\321\317\377\277\310\306\377\251\350\354\340\377\5" \
+ "\352\356\346\377\321\334\332\377\377\377\377\377\357\363\362\377\317" \
+ "\332\330\377\227\350\354\340\377\4\305\322\317\377\351\356\355\377\276" \
+ "\315\312\377\266\307\304\377\222\350\354\340\377\2\204\226\222\377Yq" \
+ "l\377\204Slg\377\1\277\310\306\377\251\350\354\340\377\4\307\325\322" \
+ "\377\367\371\370\377\377\377\377\377\311\325\323\377\231\350\354\340" \
+ "\377\4\275\314\311\377\363\366\365\377\354\360\360\377\322\335\333\377" \
+ "\220\350\354\340\377\2\275\307\305\377\207\230\225\377\204\350\354\340" \
+ "\377\2\321\330\326\377\277\310\306\377\251\350\354\340\377\4\306\323" \
+ "\321\377\377\377\377\377\372\373\373\377\304\322\317\377\231\350\354" \
+ "\340\377\4\301\317\314\377\376\376\376\377\377\377\377\377\301\320\315" \
+ "\377\220\350\354\340\377\2\276\310\306\377\264\277\275\377\256\350\354" \
+ "\340\377\4\324\336\334\377\353\357\357\377\377\377\377\377\326\337\335" \
+ "\377\232\350\354\340\377\5\332\342\340\377\345\353\352\377\377\377\377" \
+ "\377\334\344\342\377\342\351\350\377\220\350\354\340\377\2\235\253\250" \
+ "\377\334\341\340\377\203\350\354\340\377\2\320\327\325\377\277\310\306" \
+ "\377\250\350\354\340\377\4\300\317\314\377\376\377\377\377\376\376\376" \
+ "\377\301\317\315\377\233\350\354\340\377\4\303\321\317\377\377\377\377" \
+ "\377\374\375\374\377\303\320\316\377\217\350\354\340\377\1\326\334\333" \
+ "\377\206Slg\377\1\277\310\306\377\247\350\354\340\377\5\344\352\351\377" \
+ "\332\343\341\377\377\377\377\377\347\354\353\377\330\341\337\377\233" \
+ "\350\354\340\377\4\312\327\324\377\364\366\366\377\377\377\377\377\315" \
+ "\331\326\377\217\350\354\340\377\2\326\334\333\377\265\300\275\377\204" \
+ "\350\354\340\377\2\312\322\321\377\277\310\306\377\247\350\354\340\377" \
+ "\4\302\320\316\377\374\375\375\377\377\377\377\377\303\322\317\377\235" \
+ "\350\354\340\377\4\314\330\325\377\377\377\377\377\364\367\366\377\312" \
+ "\326\324\377\275\350\354\340\377\4\315\330\325\377\377\377\377\377\364" \
+ "\366\366\377\312\327\324\377\235\350\354\340\377\4\303\321\316\377\374" \
+ "\374\374\377\377\377\377\377\303\321\316\377\224\350\354\340\377\1\257" \
+ "\272\270\377\247\350\354\340\377\4\314\330\325\377\363\366\365\377\377" \
+ "\377\377\377\313\327\325\377\236\350\354\340\377\5\343\352\350\377\314" \
+ "\330\326\377\332\342\341\377\331\342\340\377\331\341\340\377\221\350" \
+ "\354\340\377\3\331\337\336\377\230\247\244\377_vr\377\247\350\354\340" \
+ "\377\5\303\321\316\377\377\377\377\377\373\374\374\377\272\312\307\377" \
+ "\334\344\342\377\235\350\354\340\377\5\347\355\354\377\332\342\340\377" \
+ "\370\372\371\377\321\334\332\377\266\307\304\377\217\350\354\340\377" \
+ "\5\262\275\273\377s\207\203\377Uni\377s\207\203\377x\214\210\377\246" \
+ "\350\354\340\377\5\342\351\347\377\336\346\344\377\344\352\351\377\251" \
+ "\275\271\377\274\313\310\377\236\350\354\340\377\5\325\337\335\377\375" \
+ "\376\376\377\377\377\377\377\364\367\366\377\256\300\275\377\211\350" \
+ "\354\340\377\13\210\231\225\377\203\225\221\377\340\344\344\377\315\324" \
+ "\323\377\213\234\230\377Xql\377`wr\377\233\251\246\377\333\340\337\377" \
+ "\350\354\340\377\322\330\327\377\246\350\354\340\377\4\342\351\347\377" \
+ "\341\350\347\377\376\376\376\377\274\313\311\377\237\350\354\340\377" \
+ "\5\346\354\353\377\340\347\346\377\373\374\374\377\324\336\334\377\306" \
+ "\323\320\377\210\350\354\340\377\7\233\251\246\377\325\333\331\377\343" \
+ "\347\346\377Vni\377Wok\377\201\223\220\377|\217\213\377\253\350\354\340" \
+ "\377\4\346\354\353\377\335\345\343\377\355\361\360\377\321\334\332\377" \
+ "\241\350\354\340\377\3\272\312\307\377\350\355\354\377\317\331\327\377" \
+ "\210\350\354\340\377\7\253\270\265\377\255\271\266\377\270\302\300\377" \
+ "q\205\201\377u\211\205\377\272\304\302\377\225\245\242\377\253\350\354" \
+ "\340\377\3\352\356\352\377\330\341\337\377\306\323\321\377\243\350\354" \
+ "\340\377\2\321\333\331\377\314\327\326\377\211\350\354\340\377\2\267" \
+ "\301\277\377\260\274\271\377\202\350\354\340\377\4\275\307\305\377{\217" \
+ "\213\377\222\242\236\377\325\333\331\377\252\350\354\340\377\2\213\241" \
+ "\234\377\307\324\321\377\243\350\354\340\377\2\270\307\304\377\227\253" \
+ "\246\377\217\350\354\340\377\5\344\350\347\377\243\261\256\377\200\222" \
+ "\216\377\255\271\267\377\223\243\240\377\247\350\354\340\377\1\207\230" \
+ "\225\377\244\350\354\340\377\2\345\351\350\377\226\245\242\377\222\350" \
+ "\354\340\377\2\313\323\321\377w\213\207\377\247\350\354\340\377\1\347" \
+ "\352\352\377\271\350\354\340\377\1\323\332\330\377\225\350\354\340\377")
+
+
diff --git a/packages/kexecboot/files/angstrom/logo.png b/packages/kexecboot/files/angstrom/logo.png
new file mode 100644
index 0000000000..bd14069364
--- /dev/null
+++ b/packages/kexecboot/files/angstrom/logo.png
Binary files differ
diff --git a/packages/kexecboot/files/logo-img.h b/packages/kexecboot/files/logo-img.h
new file mode 100644
index 0000000000..22a6e76307
--- /dev/null
+++ b/packages/kexecboot/files/logo-img.h
@@ -0,0 +1,271 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define LOGO_IMG_ROWSTRIDE (392)
+#define LOGO_IMG_WIDTH (98)
+#define LOGO_IMG_HEIGHT (64)
+#define LOGO_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define LOGO_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\377\350\354\340\377\377\350\354\340\377\377\350\354\340\377\377\350\354" \
+ "\340\377\374\350\354\340\377\12\331\337\337\377\301\310\313\377\255\267" \
+ "\273\377\237\253\261\377\231\246\255\377\231\245\254\377\237\253\260" \
+ "\377\253\266\272\377\300\307\312\377\330\335\336\377\324\350\354\340" \
+ "\377\5\346\352\351\377\264\276\301\377\204\222\233\377gx\202\377_q{\377" \
+ "\210]oz\377\5^p{\377gx\202\377\202\220\230\377\261\273\277\377\344\350" \
+ "\347\377\316\350\354\340\377\3\321\327\331\377\213\231\240\377ct\177" \
+ "\377\220]oz\377\3bt~\377\207\225\236\377\315\324\325\377\312\350\354" \
+ "\340\377\3\332\337\340\377\205\223\234\377_q|\377\224]oz\377\3_q{\377" \
+ "\201\220\230\377\326\333\334\377\307\350\354\340\377\2\243\255\263\377" \
+ "as~\377\230]oz\377\2ar}\377\234\250\256\377\304\350\354\340\377\2\343" \
+ "\347\346\377z\212\223\377\234]oz\377\2v\206\217\377\336\343\343\377\301" \
+ "\350\354\340\377\2\321\330\332\377iz\204\377\214]oz\377\2_q}\377k{\206" \
+ "\377\202q\201\213\377\2k|\206\377`r}\377\214]oz\377\2fx\202\377\314\322" \
+ "\325\377\277\350\354\340\377\2\315\323\326\377du\200\377\211]oz\377\5" \
+ "`r}\377\203\222\231\377\256\270\274\377\325\332\333\377\351\355\345\377" \
+ "\204\350\354\340\377\5\351\355\345\377\327\333\334\377\260\272\276\377" \
+ "\206\224\233\377bs~\377\211]oz\377\2bs~\377\306\315\317\377\275\350\354" \
+ "\340\377\2\323\331\333\377du\200\377\210]oz\377\3hy\203\377\243\256\264" \
+ "\377\344\350\350\377\214\350\354\340\377\3\347\352\351\377\250\262\266" \
+ "\377iz\204\377\210]oz\377\2bs~\377\315\324\326\377\273\350\354\340\377" \
+ "\2\346\351\351\377iz\204\377\207]oz\377\3_q|\377\230\244\253\377\351" \
+ "\355\346\377\220\350\354\340\377\3\350\354\342\377\234\250\257\377`r" \
+ "}\377\207]oz\377\2fw\202\377\340\344\344\377\272\350\354\340\377\1{\213" \
+ "\224\377\207]oz\377\2j{\205\377\312\320\322\377\205\350\354\340\377\12" \
+ "\322\363\370\377\221\342\362\377f\324\355\377B\313\352\3771\306\350\377" \
+ "-\306\350\377A\312\351\377d\323\355\377\216\341\362\377\316\362\367\377" \
+ "\205\350\354\340\377\2\320\326\330\377m~\210\377\207]oz\377\1v\206\217" \
+ "\377\271\350\354\340\377\1\250\262\270\377\207]oz\377\2t\203\215\377" \
+ "\343\347\347\377\204\350\354\340\377\3\247\350\365\377E\312\351\377\32" \
+ "\276\345\377\210\25\274\344\377\3\31\276\344\377@\311\351\377\237\346" \
+ "\364\377\204\350\354\340\377\2\350\353\352\377y\207\220\377\207]oz\377" \
+ "\1\237\252\260\377\267\350\354\340\377\2\341\345\345\377ar}\377\206]" \
+ "oz\377\2r\203\214\377\351\354\350\377\203\350\354\340\377\3\314\361\370" \
+ "\377C\313\352\377\24\274\344\377\214\25\274\344\377\3\24\274\344\377" \
+ "@\312\351\377\302\360\367\377\204\350\354\340\377\1x\207\220\377\206" \
+ "]oz\377\2_q|\377\332\337\337\377\266\350\354\340\377\1\213\230\240\377" \
+ "\206]oz\377\2hy\203\377\342\347\347\377\203\350\354\340\377\2\235\344" \
+ "\363\377\34\277\345\377\220\25\274\344\377\2\31\277\345\377\222\341\362" \
+ "\377\203\350\354\340\377\2\350\354\350\377l}\206\377\206]oz\377\1\203" \
+ "\221\232\377\265\350\354\340\377\2\332\337\340\377^p{\377\205]oz\377" \
+ "\2^p{\377\307\316\321\377\203\350\354\340\377\2\214\337\361\377\27\275" \
+ "\344\377\222\25\274\344\377\2\26\275\344\377~\334\360\377\203\350\354" \
+ "\340\377\2\320\326\327\377_q|\377\206]oz\377\1\322\330\332\377\264\350" \
+ "\354\340\377\1\224\241\247\377\206]oz\377\1\222\237\246\377\203\350\354" \
+ "\340\377\2\237\345\363\377\27\275\344\377\224\25\274\344\377\2\26\275" \
+ "\344\377\224\342\362\377\203\350\354\340\377\1\234\247\256\377\206]o" \
+ "z\377\1\213\230\240\377\264\350\354\340\377\1bs~\377\205]oz\377\2ct\177" \
+ "\377\351\355\350\377\202\350\354\340\377\2\321\363\370\377\31\277\346" \
+ "\377\210\25\274\344\377\6\34\277\345\377;\310\351\377Q\317\354\377T\320" \
+ "\353\377@\311\351\377\36\277\345\377\210\25\274\344\377\2\30\276\345" \
+ "\377\310\361\370\377\203\350\354\340\377\1fw\202\377\205]oz\377\2_q|" \
+ "\377\351\354\350\377\262\350\354\340\377\1\276\306\312\377\206]oz\377" \
+ "\1\235\251\257\377\203\350\354\340\377\1D\314\352\377\207\25\274\344" \
+ "\377\3#\301\346\377\210\337\361\377\337\367\371\377\204\350\354\340\377" \
+ "\2\270\354\366\377\27\275\344\377\207\25\274\344\377\2%\301\346\377\316" \
+ "\362\370\377\203\350\354\340\377\1\247\261\266\377\206]oz\377\1\265\276" \
+ "\302\377\262\350\354\340\377\1\217\234\243\377\206]oz\377\1\341\345\345" \
+ "\377\202\350\354\340\377\2\257\352\365\377\24\274\344\377\206\25\274" \
+ "\344\377\2F\314\353\377\340\367\371\377\205\350\354\340\377\2\326\364" \
+ "\371\377.\304\347\377\207\25\274\344\377\2%\301\346\377\310\361\370\377" \
+ "\204\350\354\340\377\2\350\354\351\377^q|\377\205]oz\377\1\206\224\234" \
+ "\377\262\350\354\340\377\1hy\204\377\205]oz\377\1{\211\222\377\203\350" \
+ "\354\340\377\1G\314\353\377\206\25\274\344\377\1H\314\352\377\206\350" \
+ "\354\340\377\2\326\364\371\377.\304\347\377\207\25\274\344\377\2$\301" \
+ "\346\377\310\360\370\377\206\350\354\340\377\1\202\221\232\377\205]o" \
+ "z\377\1bt\177\377\261\350\354\340\377\1\347\352\352\377\206]oz\377\1" \
+ "\247\261\266\377\202\350\354\340\377\2\335\367\372\377\26\275\344\377" \
+ "\205\25\274\344\377\2#\301\346\377\341\370\372\377\205\350\354\340\377" \
+ "\2\327\365\371\377/\304\347\377\207\25\274\344\377\2$\301\346\377\307" \
+ "\360\367\377\203\350\354\340\377\2\250\351\365\377\317\363\371\377\202" \
+ "\350\354\340\377\1\260\271\276\377\206]oz\377\1\335\342\342\377\260\350" \
+ "\354\340\377\1\313\322\324\377\206]oz\377\1\314\323\325\377\202\350\354" \
+ "\340\377\1\234\345\363\377\206\25\274\344\377\1\212\336\361\377\205\350" \
+ "\354\340\377\2\327\365\371\377/\304\347\377\207\25\274\344\377\2$\301" \
+ "\346\377\307\360\367\377\203\350\354\340\377\3\251\351\365\377\30\276" \
+ "\345\377\217\340\362\377\202\350\354\340\377\1\326\333\335\377\206]o" \
+ "z\377\1\303\312\315\377\260\350\354\340\377\1\271\301\304\377\206]oz" \
+ "\377\1\347\352\352\377\202\350\354\340\377\1l\327\356\377\205\25\274" \
+ "\344\377\2\26\275\344\377\343\370\372\377\204\350\354\340\377\2\333\365" \
+ "\370\377/\304\350\377\207\25\274\344\377\2$\301\346\377\306\360\367\377" \
+ "\203\350\354\340\377\4\252\351\365\377\31\277\345\377\25\274\344\377" \
+ "]\322\354\377\203\350\354\340\377\206]oz\377\1\260\270\275\377\260\350" \
+ "\354\340\377\1\254\265\272\377\206]oz\377\203\350\354\340\377\1N\316" \
+ "\353\377\205\25\274\344\377\1""5\307\350\377\205\350\354\340\377\1B\312" \
+ "\352\377\207\25\274\344\377\2#\301\346\377\306\360\367\377\203\350\354" \
+ "\340\377\2\252\351\365\377\31\277\345\377\202\25\274\344\377\1@\312\352" \
+ "\377\203\350\354\340\377\1at\177\377\205]oz\377\1\241\255\262\377\260" \
+ "\350\354\340\377\1\245\257\264\377\205]oz\377\1`r}\377\203\350\354\340" \
+ "\377\1\77\311\351\377\205\25\274\344\377\1T\317\354\377\204\350\354\340" \
+ "\377\2\332\366\371\377\24\274\344\377\206\25\274\344\377\2#\301\346\377" \
+ "\305\360\367\377\203\350\354\340\377\2\253\351\365\377\31\277\345\377" \
+ "\203\25\274\344\377\1-\305\350\377\203\350\354\340\377\1j{\205\377\205" \
+ "]oz\377\1\232\247\255\377\260\350\354\340\377\1\246\260\265\377\205]" \
+ "oz\377\1as~\377\203\350\354\340\377\1>\311\351\377\205\25\274\344\377" \
+ "\1U\317\354\377\204\350\354\340\377\1\330\365\371\377\206\25\274\344" \
+ "\377\2#\301\346\377\304\357\367\377\203\350\354\340\377\2\260\353\365" \
+ "\377\31\277\345\377\204\25\274\344\377\1-\304\350\377\203\350\354\340" \
+ "\377\1j{\205\377\205]oz\377\1\233\247\255\377\260\350\354\340\377\1\254" \
+ "\265\272\377\206]oz\377\203\350\354\340\377\1N\315\353\377\205\25\274" \
+ "\344\377\1""9\307\351\377\205\350\354\340\377\1<\310\351\377\204\25\274" \
+ "\344\377\2\"\301\346\377\304\357\367\377\204\350\354\340\377\1G\313\352" \
+ "\377\205\25\274\344\377\1\77\311\351\377\203\350\354\340\377\1bt\177" \
+ "\377\205]oz\377\1\241\255\261\377\260\350\354\340\377\1\271\301\305\377" \
+ "\206]oz\377\1\350\353\352\377\202\350\354\340\377\1i\326\355\377\205" \
+ "\25\274\344\377\2\24\275\344\377\350\371\371\377\204\350\354\340\377" \
+ "\2\323\363\371\377:\310\351\377\202\24\274\344\377\2""3\306\350\377\306" \
+ "\360\367\377\205\350\354\340\377\1\33\276\345\377\205\25\274\344\377" \
+ "\1[\322\355\377\203\350\354\340\377\206]oz\377\1\260\271\275\377\260" \
+ "\350\354\340\377\1\312\322\324\377\206]oz\377\1\316\325\327\377\202\350" \
+ "\354\340\377\1\234\344\363\377\206\25\274\344\377\1\221\341\362\377\206" \
+ "\350\354\340\377\2\306\360\370\377\306\357\367\377\206\350\354\340\377" \
+ "\1\234\345\364\377\206\25\274\344\377\1\213\340\362\377\202\350\354\340" \
+ "\377\1\327\335\336\377\206]oz\377\1\302\311\314\377\260\350\354\340\377" \
+ "\1\346\351\351\377\206]oz\377\1\251\263\270\377\202\350\354\340\377\2" \
+ "\332\365\371\377\26\274\344\377\205\25\274\344\377\2&\302\347\377\347" \
+ "\371\373\377\215\350\354\340\377\1-\304\347\377\205\25\274\344\377\2" \
+ "\24\274\344\377\313\362\370\377\202\350\354\340\377\1\263\274\300\377" \
+ "\206]oz\377\1\334\341\341\377\261\350\354\340\377\1gx\202\377\205]oz" \
+ "\377\1}\214\225\377\203\350\354\340\377\1C\312\352\377\206\25\274\344" \
+ "\377\1S\320\354\377\214\350\354\340\377\1b\323\355\377\206\25\274\344" \
+ "\377\1""4\307\350\377\203\350\354\340\377\1\207\224\234\377\205]oz\377" \
+ "\1bs~\377\262\350\354\340\377\1\214\232\241\377\205]oz\377\2^p{\377\344" \
+ "\350\350\377\202\350\354\340\377\1\251\350\364\377\207\25\274\344\377" \
+ "\2W\321\354\377\350\370\370\377\210\350\354\340\377\2\351\362\352\377" \
+ "c\324\354\377\207\25\274\344\377\1\226\343\364\377\202\350\354\340\377" \
+ "\2\351\355\346\377_q|\377\205]oz\377\1\203\221\231\377\262\350\354\340" \
+ "\377\1\274\305\310\377\206]oz\377\1\242\255\263\377\203\350\354\340\377" \
+ "\1>\311\351\377\207\25\274\344\377\3-\304\350\377\236\344\363\377\347" \
+ "\371\373\377\204\350\354\340\377\3\351\365\361\377\242\346\364\3772\306" \
+ "\350\377\207\25\274\344\377\1""5\306\347\377\203\350\354\340\377\1\254" \
+ "\266\273\377\206]oz\377\1\263\274\300\377\263\350\354\340\377\1ar}\377" \
+ "\205]oz\377\2dv\201\377\350\354\342\377\202\350\354\340\377\2\311\360" \
+ "\370\377\31\276\345\377\210\25\274\344\377\6$\301\347\377I\314\353\377" \
+ "h\325\356\377j\325\355\377I\315\353\377'\302\346\377\210\25\274\344\377" \
+ "\2\30\275\345\377\271\355\366\377\203\350\354\340\377\1iz\204\377\205" \
+ "]oz\377\2_p{\377\350\353\352\377\263\350\354\340\377\1\220\235\244\377" \
+ "\206]oz\377\1\230\245\254\377\203\350\354\340\377\2\223\342\363\377\26" \
+ "\274\344\377\224\25\274\344\377\2\24\274\344\377\201\335\361\377\203" \
+ "\350\354\340\377\1\242\255\263\377\206]oz\377\1\207\225\235\377\264\350" \
+ "\354\340\377\2\327\334\336\377^p{\377\205]oz\377\2_q|\377\317\325\327" \
+ "\377\203\350\354\340\377\2z\334\360\377\26\275\344\377\222\25\274\344" \
+ "\377\2\24\274\344\377l\330\357\377\203\350\354\340\377\2\326\333\334" \
+ "\377ar}\377\206]oz\377\1\317\324\327\377\265\350\354\340\377\1\206\224" \
+ "\234\377\206]oz\377\2l|\206\377\350\354\350\377\203\350\354\340\377\2" \
+ "\217\340\361\377\33\276\345\377\220\25\274\344\377\2\32\276\345\377\201" \
+ "\335\361\377\203\350\354\340\377\2\350\354\342\377q\201\212\377\206]" \
+ "oz\377\1\177\215\226\377\266\350\354\340\377\1\335\341\342\377\207\204" \
+ "\223\232\377\1\237\253\260\377\204\350\354\340\377\3\274\356\367\377" \
+ "9\310\351\377\24\274\344\377\215\25\274\344\377\2""3\306\350\377\270" \
+ "\353\366\377\204\350\354\340\377\1\246\261\266\377\207\204\223\232\377" \
+ "\1\326\333\334\377\305\350\354\340\377\3\231\343\363\3776\307\351\377" \
+ "\27\275\344\377\210\25\274\344\377\3\26\275\344\3775\306\350\377\224" \
+ "\341\362\377\326\350\354\340\377\4\305\357\367\377\206\336\360\377S\317" \
+ "\353\3772\306\350\377\202.\303\347\377\4""2\306\350\377Q\317\353\377" \
+ "\177\335\361\377\300\357\366\377\377\350\354\340\377\317\350\354\340" \
+ "\377\1\350\366\365\377\205\350\354\340\377\1\351\361\352\377\211\350" \
+ "\354\340\377\1\351\363\356\377\303\350\354\340\377\2i\327\356\377d\323" \
+ "\355\377\214\350\354\340\377\2""4\306\350\377\234\343\363\377\203\350" \
+ "\354\340\377\2\205\336\361\377I\314\352\377\211\350\354\340\377\2F\313" \
+ "\352\377\213\337\361\377\302\350\354\340\377\2\\\324\355\377X\320\354" \
+ "\377\214\350\354\340\377\2&\303\347\377\217\337\361\377\203\350\354\340" \
+ "\377\2u\332\360\377;\310\351\377\211\350\354\340\377\2;\310\351\377\177" \
+ "\333\360\377\241\350\354\340\377\11\306\315\320\377\210\226\235\377\230" \
+ "\243\252\377\351\355\346\377\350\354\340\377\211\226\235\377\201\217" \
+ "\227\377\203\221\231\377\263\274\300\377\202\350\354\340\377\20\254\266" \
+ "\272\377\205\223\233\377\254\266\272\377\350\354\340\377\332\337\340" \
+ "\377\202\220\230\377\201\217\227\377\207\225\234\377\320\326\330\377" \
+ "\350\354\340\377\337\367\372\377g\325\355\377J\316\353\377\251\350\365" \
+ "\377\350\354\340\377\216\342\363\377\203I\313\351\377#D\314\352\377\214" \
+ "\340\362\377\350\354\340\377\\\324\355\377$\300\346\377I\313\351\377" \
+ "Z\322\354\377\330\365\371\377\350\354\340\377\263\352\365\377N\317\353" \
+ "\377^\323\355\377\330\365\371\377\350\354\340\377\301\356\367\377Q\316" \
+ "\353\377I\313\351\377\31\275\345\377\217\337\361\377\351\363\355\377" \
+ "e\325\355\377F\313\351\377*\303\347\377;\310\351\377\350\354\340\377" \
+ "\276\355\366\377R\320\353\377Z\322\354\377\317\363\371\377\350\354\340" \
+ "\377\305\361\370\377R\320\353\377I\313\351\377\35\277\345\377\177\333" \
+ "\360\377\240\350\354\340\3775\333\337\340\377_q|\377\214\231\241\377" \
+ "r\202\213\377\200\217\227\377\351\355\346\377]oz\377\214\232\242\377" \
+ "\226\243\252\377^p{\377\323\331\332\377\256\270\274\377cu\177\377\225" \
+ "\241\247\377cu\177\377\256\270\274\377\274\304\307\377_q|\377\234\250" \
+ "\257\377\205\223\232\377fw\202\377\350\354\340\377D\312\351\377/\305" \
+ "\350\377V\320\353\377\26\275\344\377\306\360\370\377^\321\354\3774\305" \
+ "\347\377R\316\353\377\25\274\344\377c\323\355\377\23\274\344\377\275" \
+ "\355\366\377\\\324\355\377/\304\347\377q\327\356\3771\306\350\377P\316" \
+ "\353\377\323\364\371\377\31\276\345\377N\316\353\3776\306\350\3773\307" \
+ "\351\377\350\354\340\377%\303\347\377F\313\352\377q\327\356\377\34\276" \
+ "\345\377\217\337\361\377t\331\357\377'\302\346\377q\326\356\377\202;" \
+ "\310\351\377\13\341\367\372\377\36\277\345\377I\315\352\377:\310\351" \
+ "\377)\304\350\377\350\354\340\3772\307\350\377@\311\351\377q\327\356" \
+ "\377#\301\346\377\177\333\360\377\240\350\354\340\377B\265\275\301\377" \
+ "hy\203\377\375\376\373\377\305\314\316\377]oz\377\346\352\352\377]oz" \
+ "\377\325\332\332\377\376\377\374\377bt\177\377\277\307\312\377\206\223" \
+ "\233\377}\215\225\377\276\306\311\377}\214\225\377\206\223\234\377\274" \
+ "\304\307\377bu\200\377\350\354\340\377\324\332\332\377]oz\377\343\354" \
+ "\355\377\25\274\344\377g\326\356\377\233\344\363\377\24\276\345\377\222" \
+ "\340\362\377^\321\354\377c\322\354\377\260\351\364\377\25\274\344\377" \
+ "\350\354\340\377\27\276\345\377\241\345\364\377\\\324\355\377X\320\354" \
+ "\377\376\377\374\377\203\335\360\3772\305\350\377\241\345\363\377\23" \
+ "\275\345\377\230\343\362\377k\330\356\377\25\274\344\377\325\365\373" \
+ "\377\25\274\344\377\251\352\365\377\376\377\374\377&\303\347\377\217" \
+ "\337\361\377^\321\354\377b\322\354\377\376\377\374\377u\332\360\377;" \
+ "\310\351\377\262\351\364\377\25\274\344\377\220\341\362\377q\333\360" \
+ "\377\25\274\344\377\325\364\370\377\16\276\345\377\245\346\364\377\376" \
+ "\377\374\377;\310\351\377\177\333\360\377\240\350\354\340\377\15\263" \
+ "\273\277\377l}\206\377\376\377\374\377\313\322\323\377]oz\377\345\351" \
+ "\351\377]oz\377\325\332\332\377\376\377\374\377bu\200\377\277\307\312" \
+ "\377\203\221\231\377bt~\377\202j{\205\377\11\215\232\241\377\274\304" \
+ "\307\377bu\200\377\350\354\340\377\325\332\332\377]oz\377\341\353\355" \
+ "\377\25\274\344\377\40\300\345\377\202'\301\346\377\17\227\342\362\377" \
+ "^\321\354\377c\322\354\377\260\351\364\377\25\274\344\377\350\354\340" \
+ "\377\32\277\345\377\240\345\364\377\\\324\355\377X\320\354\377\376\377" \
+ "\374\377\203\335\357\3772\305\350\377\234\343\362\377\24\274\344\377" \
+ "\203'\301\346\377\15\321\364\372\377\25\274\344\377\251\352\365\377\376" \
+ "\377\374\377&\303\347\377\217\337\361\377^\321\354\377c\322\354\377\376" \
+ "\377\374\377u\332\360\377;\310\351\377\260\351\364\377\25\274\344\377" \
+ "\203'\301\346\377\6\324\364\370\377\16\276\345\377\246\346\364\377\376" \
+ "\377\374\377;\310\351\377\177\333\360\377\240\350\354\340\377B\275\305" \
+ "\310\377bt\177\377\343\347\347\377\251\264\271\377du\177\377\350\354" \
+ "\351\377]oz\377\313\322\323\377\355\360\357\377`r}\377\301\311\314\377" \
+ "\206\224\234\377\215\233\242\377\352\355\355\377\352\355\354\377\362" \
+ "\365\363\377\274\304\307\377bu\200\377\350\354\340\377\325\332\332\377" \
+ "]oz\377\343\354\355\377\26\274\344\377\216\341\362\377\336\366\372\377" \
+ "\336\367\372\377\365\374\374\377^\321\354\377c\322\354\377\260\351\364" \
+ "\377\25\274\344\377\350\354\340\377\32\277\345\377\240\345\364\377\\" \
+ "\324\355\377R\316\353\377\352\372\372\377n\330\357\3777\306\350\377\240" \
+ "\345\363\377\17\276\345\377\330\365\371\377\336\366\372\377\342\367\372" \
+ "\377\350\354\340\377\26\274\344\377\226\343\363\377\352\372\372\377$" \
+ "\302\347\377\217\337\361\377^\322\355\377Q\316\353\377\352\372\372\377" \
+ "l\330\357\377;\310\351\377\260\352\365\377\25\274\344\377\317\362\370" \
+ "\377\336\366\372\377\341\367\372\377\373\376\374\377\24\277\345\377\216" \
+ "\340\362\377\352\372\372\3776\307\351\377\177\333\360\377\241\350\354" \
+ "\340\377Ax\207\220\377_q|\377`r}\377\256\270\275\377\351\355\346\377" \
+ "]oz\377ct\177\377bt~\377k{\205\377\351\355\346\377\273\303\307\377`r" \
+ "}\377dv\200\377ev\200\377\231\245\253\377\277\307\312\377ew\202\377\350" \
+ "\354\340\377\330\335\335\377^p{\377\350\354\342\377X\321\354\377\24\275" \
+ "\345\377\32\277\345\377\33\277\346\377\247\347\364\377^\322\355\377c" \
+ "\323\355\377\261\352\365\377\27\275\344\377\350\354\340\377\35\300\345" \
+ "\377\245\346\364\377_\325\356\377\27\275\344\377\32\277\345\377\24\275" \
+ "\345\377\201\335\361\377\333\367\372\377$\301\346\377\31\276\345\377" \
+ "\32\277\345\377%\302\346\377\350\354\340\377W\321\354\377\24\275\345" \
+ "\377\32\277\345\377\23\274\344\377\222\341\362\377\247\347\364\377\27" \
+ "\276\345\377\32\277\345\377\25\275\345\377\77\311\351\377\350\370\370" \
+ "\377,\303\347\377\30\276\345\377\32\277\345\377\40\301\346\377\344\370" \
+ "\372\377e\325\356\377\27\275\344\377\32\277\345\377\23\275\344\377\202" \
+ "\335\360\377\242\350\354\340\377\10\316\325\327\377\334\341\342\377\350" \
+ "\354\340\377\351\355\346\377]oz\377\255\267\273\377\312\321\323\377\351" \
+ "\355\346\377\202\350\354\340\377\1\332\337\337\377\202\311\320\322\377" \
+ "\3\341\346\346\377\350\354\340\377\327\335\336\377\202\350\354\340\377" \
+ "\1\322\330\332\377\202\350\354\340\377\1\267\354\367\377\202\260\351" \
+ "\365\377\11\347\372\373\377\330\365\371\377\332\365\371\377\350\354\340" \
+ "\377\277\356\367\377\350\354\340\377\305\357\367\377\350\356\343\377" \
+ "\333\365\371\377\202\260\351\365\377\1\300\357\367\377\202\350\354\340" \
+ "\377\4\337\367\372\377\261\351\365\377\260\351\365\377\271\354\366\377" \
+ "\202\350\354\340\377\1\267\354\367\377\202\260\351\365\377\3\351\365" \
+ "\361\377\350\354\340\377\311\361\370\377\202\260\351\365\377\6\314\362" \
+ "\370\377\350\354\340\377\345\370\372\377\263\351\365\377\260\351\365" \
+ "\377\264\353\366\377\202\350\354\340\377\1\274\354\366\377\202\260\351" \
+ "\365\377\1\343\370\372\377\245\350\354\340\377\3\351\354\345\377]oz\377" \
+ "\325\333\333\377\340\350\354\340\377\2\227\243\252\377\350\354\342\377" \
+ "\377\350\354\340\377\377\350\354\340\377\377\350\354\340\377\377\350" \
+ "\354\340\377\270\350\354\340\377")
+
+
diff --git a/packages/kexecboot/files/logo.png b/packages/kexecboot/files/logo.png
new file mode 100644
index 0000000000..d3bf8fb886
--- /dev/null
+++ b/packages/kexecboot/files/logo.png
Binary files differ
diff --git a/packages/kexecboot/initramfs-kexecboot-image.bb b/packages/kexecboot/initramfs-kexecboot-image.bb
index 6c3a76bf78..7fc2b79d04 100644
--- a/packages/kexecboot/initramfs-kexecboot-image.bb
+++ b/packages/kexecboot/initramfs-kexecboot-image.bb
@@ -4,7 +4,18 @@ ONLINE_PACKAGE_MANAGEMENT = "none"
IMAGE_FSTYPES += " cpio.gz"
inherit image
+# These devices need mmcblk* to be 254 instead of 179
+IMAGE_DEVICE_TABLES_hx4700 = "device_table-oldmmc.txt"
+IMAGE_DEVICE_TABLES_h2200 = "device_table-oldmmc.txt"
+
export IMAGE_BASENAME = "initramfs-kexecboot-image"
+EXTRA_IMAGEDEPENDS = ""
IMAGE_INSTALL = "kexecboot"
IMAGE_LINGUAS = ""
+
+IMAGE_LOGIN_MANAGER = ""
+IMAGE_INIT_MANAGER = ""
+IMAGE_INITSCRIPTS = ""
+IMAGE_DEV_MANAGER = ""
+#ONLINE_PACKAGE_MANAGEMENT = "none"
diff --git a/packages/kexecboot/kexecboot-0.4/fb-render-16bit.patch b/packages/kexecboot/kexecboot-0.4/fb-render-16bit.patch
new file mode 100644
index 0000000000..f3405e49d8
--- /dev/null
+++ b/packages/kexecboot/kexecboot-0.4/fb-render-16bit.patch
@@ -0,0 +1,21 @@
+Index: kexecboot-0.4/fb.c
+===================================================================
+--- kexecboot-0.4.orig/fb.c 2009-01-29 22:03:34.000000000 +0000
++++ kexecboot-0.4/fb.c 2009-01-29 22:08:22.000000000 +0000
+@@ -19,7 +19,15 @@
+
+ void fb_render(FB * fb)
+ {
+- memcpy(fb->data, fb->backbuffer, fb->screensize);
++ uint16 *source, *dest;
++ int n = fb->screensize/2;
++
++ source = (uint16 *)fb->backbuffer;
++ dest = (uint16 *)fb->data;
++
++ while (n--) {
++ *dest++ = *source++;
++ }
+ }
+
+ void fb_destroy(FB * fb)
diff --git a/packages/kexecboot/kexecboot-cfg_0.1.bb b/packages/kexecboot/kexecboot-cfg_0.1.bb
new file mode 100644
index 0000000000..d83f6529df
--- /dev/null
+++ b/packages/kexecboot/kexecboot-cfg_0.1.bb
@@ -0,0 +1,25 @@
+LICENSE = "GPL"
+SECTION = "base"
+DESCRIPTION = "Configuration file for kexecboot"
+
+PR = "r2"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+CMDLINE_CON = "console=ttyS0,115200n8 console=tty1 noinitrd"
+CMDLINE_CON_collie = "console=ttySA0,115200n8 console=tty1 noinitrd"
+CMDLINE_CON_qemuarm = "console=ttyAMA0,115200n8 console=tty1 noinitrd"
+
+CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
+
+CMDLINE_MEM_collie = "mem=64M"
+
+CMDLINE_ROTATE_spitz = "fbcon=rotate:1"
+CMDLINE_ROTATE_akita = "fbcon=rotate:1"
+CMDLINE_ROTATE_collie = "fbcon=rotate:1"
+CMDLINE_ROTATE_poodle = "fbcon=rotate:1"
+FILES_${PN} += "/boot/*"
+
+do_install () {
+ install -d ${D}/boot
+ echo "${CMDLINE_CON} ${CMDLINE_MEM} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"> ${D}/boot/kernel-cmdline
+}
diff --git a/packages/kexecboot/kexecboot.inc b/packages/kexecboot/kexecboot.inc
new file mode 100644
index 0000000000..5f3f34948e
--- /dev/null
+++ b/packages/kexecboot/kexecboot.inc
@@ -0,0 +1,39 @@
+LICENSE = "GPL"
+
+DEPENDS = "klibc"
+RDEPENDS = "kexec-static"
+
+inherit autotools
+
+# You can create your own *-img.h by doing
+# ./make-image-header.sh <file>.png HAND
+
+SRC_URI += "file://logo-img.h \
+ file://logo.png \
+ "
+
+export CC=${TARGET_PREFIX}klcc
+
+# standard oe cflags don't work with klcc
+export CFLAGS = ""
+export CPPFLAGS = ""
+export LDFLAGS = ""
+
+do_configure_prepend () {
+ install -m 0644 ${WORKDIR}/logo-img.h ${S}/res/
+ install -m 0644 ${WORKDIR}/logo.png ${S}/res/
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 kexecboot ${D}${bindir}/
+
+ install -d ${D}/proc
+ install -d ${D}/mnt
+}
+
+FILES_${PN} += " ${bindir}/kexecboot /init /proc /mnt"
+
+pkg_postinst_${PN} () {
+ ln -sf ${bindir}/kexecboot $D/init
+}
diff --git a/packages/kexecboot/kexecboot_0.4.bb b/packages/kexecboot/kexecboot_0.4.bb
index 85dd29e69c..c38b2b402c 100644
--- a/packages/kexecboot/kexecboot_0.4.bb
+++ b/packages/kexecboot/kexecboot_0.4.bb
@@ -1,12 +1,4 @@
-LICENSE = "GPL"
-PR = "r2"
-DEPENDS = "klibc"
-RDEPENDS = "kexec-static"
-
-inherit autotools
-
-# You can create your own *-img.h by doing
-# ./make-image-header.sh <file>.png HAND
+PR = "r5"
SRC_URI = "http://projects.linuxtogo.org/~jay7/kexecboot-${PV}.tar.gz \
file://add-reboot-option.patch;patch=1 \
@@ -16,27 +8,8 @@ SRC_URI = "http://projects.linuxtogo.org/~jay7/kexecboot-${PV}.tar.gz \
file://add-sleep.patch;patch=1 \
file://silent-output-hack.patch;patch=1 \
file://kexecboot-tosa.patch;patch=1 \
- "
+ file://fb-render-16bit.patch;patch=1"
S = "${WORKDIR}/kexecboot-${PV}"
-export CC=${TARGET_PREFIX}klcc
-
-# standard oe cflags don't work with klcc
-export CFLAGS = ""
-export CPPFLAGS = ""
-export LDFLAGS = ""
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 kexecboot ${D}${bindir}/
-
- install -d ${D}/proc
- install -d ${D}/mnt
-}
-
-FILES_${PN} += " ${bindir}/kexecboot /init /proc /mnt"
-
-pkg_postinst_${PN} () {
- ln -sf ${bindir}/kexecboot $D/init
-}
+require kexecboot.inc
diff --git a/packages/kexecboot/kexecboot_0.5.bb b/packages/kexecboot/kexecboot_0.5.bb
new file mode 100644
index 0000000000..b901903a2a
--- /dev/null
+++ b/packages/kexecboot/kexecboot_0.5.bb
@@ -0,0 +1,4 @@
+SRC_URI = "http://projects.linuxtogo.org/frs/download.php/226/kexecboot-${PV}.tar.gz \
+ "
+
+require kexecboot.inc
diff --git a/packages/kexecboot/kexecboot_git.bb b/packages/kexecboot/kexecboot_git.bb
new file mode 100644
index 0000000000..97a3f27512
--- /dev/null
+++ b/packages/kexecboot/kexecboot_git.bb
@@ -0,0 +1,15 @@
+PR = "r0"
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "git://git.linuxtogo.org/home/thesing/kexecboot.git;protocol=git "
+SRCREV = "8823a939a38a8a3287f90dee062e8ab8569f884f"
+
+# v0.5
+#tag=8823a939a38a8a3287f90dee062e8ab8569f884f
+
+# v0.4
+#tag=d7af5356df4f25203831403c69f1a263c163f31a
+
+S = "${WORKDIR}/git"
+
+require kexecboot.inc
diff --git a/packages/kexecboot/linux-kexecboot-2.6.21-hh20/hx4700/defconfig b/packages/kexecboot/linux-kexecboot-2.6.21-hh20/hx4700/defconfig
index d65aaff1bb..d573ed3ea0 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.21-hh20/hx4700/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.21-hh20/hx4700/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.21-hh20
-# Wed Jan 28 17:22:38 2009
+# Fri Jan 30 11:53:32 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -35,7 +35,7 @@ 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
@@ -50,14 +50,15 @@ CONFIG_IKCONFIG_PROC=y
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
+CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
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
@@ -77,12 +78,7 @@ CONFIG_BASE_SMALL=0
#
# 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
+# CONFIG_MODULES is not set
#
# Block layer
@@ -96,9 +92,9 @@ CONFIG_LSF=y
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=m
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
+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 is not set
@@ -160,7 +156,7 @@ CONFIG_BOARD_IRQ_MAP_BIG=y
CONFIG_MACH_H4700=y
CONFIG_HX4700_NAVPOINT=y
CONFIG_HX4700_CORE=y
-CONFIG_HX4700_BLUETOOTH=m
+# CONFIG_HX4700_BLUETOOTH is not set
CONFIG_HX4700_PCMCIA=y
CONFIG_HX4700_LCD=y
CONFIG_HX4700_LEDS=y
@@ -268,7 +264,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
+CONFIG_CMDLINE="console=ttyS0,115200n8"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
# CONFIG_TXTOFFSET_DELTA is not set
@@ -285,10 +281,10 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y
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_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_PXA=y
CONFIG_PXA25x_ALTERNATE_FREQS=y
@@ -305,7 +301,7 @@ CONFIG_PXA25x_ALTERNATE_FREQS=y
#
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
+CONFIG_BINFMT_MISC=y
#
# Power management options
@@ -339,9 +335,9 @@ 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_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
@@ -351,7 +347,7 @@ CONFIG_IP_PNP=y
# 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_TUNNEL=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
@@ -365,7 +361,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
+CONFIG_IPV6=y
# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_INET6_AH is not set
@@ -374,11 +370,11 @@ CONFIG_IPV6=m
# 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_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_SIT=y
# CONFIG_IPV6_TUNNEL is not set
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_NETWORK_SECMARK is not set
@@ -390,73 +386,20 @@ CONFIG_NETFILTER=y
#
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NF_CONNTRACK_ENABLED is not set
-CONFIG_NETFILTER_XTABLES=m
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# 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_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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 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
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
# 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_IP_NF_MANGLE=m
-# CONFIG_IP_NF_TARGET_TOS is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_TTL is not set
-CONFIG_IP_NF_RAW=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=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_OWNER is not set
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AH is not set
-# CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-# CONFIG_IP6_NF_FILTER is not set
-# CONFIG_IP6_NF_MANGLE is not set
-# CONFIG_IP6_NF_RAW is not set
+# CONFIG_IP6_NF_IPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -494,85 +437,9 @@ CONFIG_IP6_NF_IPTABLES=m
#
# 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=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 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 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 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=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_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
CONFIG_WIRELESS_EXT=y
#
@@ -585,8 +452,6 @@ 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
#
@@ -665,9 +530,7 @@ CONFIG_MTD_CFI_UTIL=y
#
# 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_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -701,9 +564,9 @@ CONFIG_MTDRAM_ERASE_SIZE=256
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
+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_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
@@ -776,7 +639,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
@@ -787,7 +650,7 @@ CONFIG_TUN=m
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
+# CONFIG_MII is not set
# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
# CONFIG_SMC911X is not set
@@ -825,59 +688,38 @@ CONFIG_NET_WIRELESS_RTNETLINK=y
#
# Wireless 802.11b ISA/PCI cards support
#
-CONFIG_HERMES=m
-CONFIG_ATMEL=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=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_USB_ZD1201=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_ZD1211RW=m
-# CONFIG_ZD1211RW_DEBUG 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_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# 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
+# 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_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=m
+# CONFIG_PPP 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
@@ -937,7 +779,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_ADC=y
# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_UINPUT is not set
#
# Hardware I/O ports
@@ -951,17 +793,13 @@ CONFIG_INPUT_UINPUT=m
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=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
@@ -1009,42 +847,7 @@ CONFIG_LEGACY_PTY_COUNT=32
#
# 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
+# CONFIG_I2C is not set
#
# SPI support
@@ -1061,8 +864,7 @@ 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
+# CONFIG_W1_MASTER_DS1WM is not set
#
# 1-wire Slaves
@@ -1221,67 +1023,12 @@ CONFIG_FONT_8x8=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_HX4700=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 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
+# CONFIG_SOUND is not set
#
# HID Devices
#
-CONFIG_HID=m
+CONFIG_HID=y
# CONFIG_HID_DEBUG is not set
#
@@ -1290,14 +1037,14 @@ CONFIG_HID=m
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=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_DEVICEFS=y
+CONFIG_USB_DYNAMIC_MINORS=y
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
@@ -1306,14 +1053,14 @@ CONFIG_USB=m
#
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_OHCI_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
+CONFIG_USB_SL811_HCD=y
+CONFIG_USB_SL811_CS=y
#
# 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'
@@ -1327,16 +1074,10 @@ CONFIG_USB_PRINTER=m
#
# USB Input Devices
#
-CONFIG_USB_HID=m
+CONFIG_USB_HID=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
@@ -1359,28 +1100,12 @@ CONFIG_USB_HID=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=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_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
#
@@ -1390,58 +1115,7 @@ CONFIG_USB_MON=y
#
# 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
+# CONFIG_USB_SERIAL is not set
#
# USB Miscellaneous drivers
@@ -1464,6 +1138,7 @@ CONFIG_USB_EZUSB=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
@@ -1488,13 +1163,12 @@ CONFIG_USB_PXA27X=y
# 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_ZERO is not set
+CONFIG_USB_ETH=y
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_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
@@ -1531,14 +1205,8 @@ 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
-# 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
@@ -1548,20 +1216,26 @@ CONFIG_RTC_DRV_SA1100=y
# File systems
#
CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
+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=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=m
+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_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
@@ -1571,23 +1245,24 @@ 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
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#
-CONFIG_ISO9660_FS=m
+CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
+CONFIG_ZISOFS=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_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
@@ -1602,7 +1277,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
@@ -1636,26 +1311,23 @@ CONFIG_JFFS2_CMODE_PRIORITY=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_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-# CONFIG_RPCSEC_GSS_KRB5 is not set
+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=y
-# CONFIG_CIFS_XATTR is not set
-# 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
@@ -1664,15 +1336,30 @@ CONFIG_CIFS_WEAK_PW_HASH=y
#
# Partition Types
#
-# CONFIG_PARTITION_ADVANCED is not set
+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 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=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
@@ -1694,19 +1381,19 @@ CONFIG_NLS_CODEPAGE_437=m
# 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=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_CODEPAGE_1251 is not set
+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 is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
@@ -1730,33 +1417,11 @@ CONFIG_ENABLE_MUST_CHECK=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=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# 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_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE 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
@@ -1768,41 +1433,40 @@ CONFIG_DEBUG_LL=y
# Cryptographic options
#
CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
+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 is not set
-CONFIG_CRYPTO_SHA1=m
+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 is not set
-CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=y
# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES 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_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_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=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
#
# Hardware crypto devices
diff --git a/packages/kexecboot/linux-kexecboot-2.6.24/akita/defconfig b/packages/kexecboot/linux-kexecboot-2.6.24/akita/defconfig
index 7ea31cb7d4..3b35eda5db 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.24/akita/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.24/akita/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24
-# Tue Aug 26 17:05:18 2008
+# Sun Feb 1 01:28:12 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -31,18 +31,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
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
@@ -52,28 +57,35 @@ CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS 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 is not set
-# CONFIG_ELF_CORE is not set
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
-# CONFIG_FUTEX is not set
+CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
-# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -84,14 +96,14 @@ CONFIG_BLOCK=y
# 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_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=y
-CONFIG_DEFAULT_IOSCHED="noop"
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
@@ -180,7 +192,7 @@ 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_IWMMXT=y
CONFIG_XSCALE_PMU=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
@@ -194,8 +206,8 @@ CONFIG_SHARP_SCOOP=y
CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_IOCTL is not set
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
@@ -205,11 +217,11 @@ CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
@@ -234,7 +246,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -243,6 +255,10 @@ CONFIG_ATAGS_PROC=y
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
#
# Floating point emulation
@@ -256,8 +272,8 @@ CONFIG_ATAGS_PROC=y
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
#
# Power management options
@@ -265,8 +281,9 @@ CONFIG_BINFMT_ELF=y
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
CONFIG_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
+CONFIG_SUSPEND=y
CONFIG_APM_EMULATION=y
#
@@ -285,8 +302,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -360,6 +375,7 @@ CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -369,10 +385,13 @@ CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_MISC_DEVICES is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
@@ -381,7 +400,7 @@ 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 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
@@ -389,12 +408,12 @@ CONFIG_BLK_DEV_IDECS=y
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDE_PROC_FS is not set
+CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
-# CONFIG_IDE_GENERIC is not set
+CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_PLATFORM is not set
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
@@ -405,7 +424,7 @@ CONFIG_IDE_ARCH_OBSOLETE_INIT=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
+CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
@@ -414,12 +433,12 @@ CONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=y
-CONFIG_CHR_DEV_OSST=y
-CONFIG_BLK_DEV_SR=y
+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=y
+CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
@@ -429,6 +448,7 @@ 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
@@ -437,10 +457,24 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_ATA is not set
-# CONFIG_MD is not set
+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
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
#
# Input device support
@@ -452,10 +486,10 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
+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_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
@@ -472,7 +506,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_KEYBOARD_SPITZ=y
CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_PXA27x is not set
# CONFIG_KEYBOARD_GPIO is not set
@@ -490,8 +524,14 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=y
+# 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=m
#
# Hardware I/O ports
@@ -511,9 +551,8 @@ CONFIG_HW_CONSOLE=y
#
# Serial drivers
#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_CS is not set
+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
@@ -528,7 +567,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
@@ -561,6 +600,8 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
#
# Miscellaneous I2C Chip support
@@ -605,26 +646,14 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-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 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_RADIO_ADAPTERS=y
-CONFIG_DAB=y
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DAB is not set
#
# Graphics support
#
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
+CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
@@ -650,7 +679,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
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_OVERLAY=y
# CONFIG_FB_PXA_PARAMETERS is not set
# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
@@ -658,7 +687,7 @@ CONFIG_FB_PXA_LCD_QVGA=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_CORGI=y
#
# Display device support
@@ -693,11 +722,207 @@ CONFIG_LOGO_LINUX_CLUT224=y
# Sound
#
# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW 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_SUPPORT=y
+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_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST 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
+# CONFIG_USB_R8A66597_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_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 Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=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_CH341 is not set
+# 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=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_OTI6858 is not set
+# 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_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 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_S3C2410 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=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_MMC=y
# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
+CONFIG_MMC_UNSAFE_RESUME=y
#
# MMC/SD Card Drivers
@@ -710,9 +935,71 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_PXA=y
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO 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
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 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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 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_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
#
# File systems
@@ -720,8 +1007,10 @@ 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 is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
@@ -746,8 +1035,11 @@ CONFIG_DNOTIFY=y
#
# DOS/FAT/NT Filesystems
#
+CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_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
#
@@ -787,8 +1079,8 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=y
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
# CONFIG_VXFS_FS is not set
@@ -821,42 +1113,42 @@ CONFIG_MSDOS_PARTITION=y
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=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_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
# CONFIG_INSTRUMENTATION is not set
@@ -870,33 +1162,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB 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_LOCK_STAT 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_VM is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -904,7 +1174,50 @@ CONFIG_FRAME_POINTER=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
+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 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_XTS is not set
+# CONFIG_CRYPTO_CRYPTD 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_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
#
# Library routines
@@ -915,11 +1228,12 @@ CONFIG_CRC_CCITT=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=y
+CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.24/c7x0/defconfig b/packages/kexecboot/linux-kexecboot-2.6.24/c7x0/defconfig
index 77a9c62e3a..bc621636fa 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.24/c7x0/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.24/c7x0/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24
-# Tue Aug 26 16:56:32 2008
+# Sun Feb 1 01:19:01 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -31,18 +31,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
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
@@ -52,28 +57,35 @@ CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS 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 is not set
-# CONFIG_ELF_CORE is not set
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
-# CONFIG_FUTEX is not set
+CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
-# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -84,14 +96,14 @@ CONFIG_BLOCK=y
# 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_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=y
-CONFIG_DEFAULT_IOSCHED="noop"
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
@@ -196,8 +208,8 @@ CONFIG_SHARP_SCOOP=y
CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_IOCTL is not set
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
@@ -207,11 +219,11 @@ CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
@@ -236,7 +248,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -245,6 +257,10 @@ CONFIG_ATAGS_PROC=y
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
#
# Floating point emulation
@@ -258,8 +274,8 @@ CONFIG_ATAGS_PROC=y
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
#
# Power management options
@@ -267,8 +283,9 @@ CONFIG_BINFMT_ELF=y
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
CONFIG_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
+CONFIG_SUSPEND=y
CONFIG_APM_EMULATION=y
#
@@ -287,8 +304,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -362,6 +377,7 @@ CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -371,10 +387,13 @@ CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_MISC_DEVICES is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
@@ -383,7 +402,7 @@ 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 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
@@ -391,12 +410,12 @@ CONFIG_BLK_DEV_IDECS=y
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDE_PROC_FS is not set
+CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
-# CONFIG_IDE_GENERIC is not set
+CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_PLATFORM is not set
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
@@ -407,7 +426,7 @@ CONFIG_IDE_ARCH_OBSOLETE_INIT=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
+CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
@@ -416,12 +435,12 @@ CONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=y
-CONFIG_CHR_DEV_OSST=y
-CONFIG_BLK_DEV_SR=y
+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=y
+CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
@@ -431,6 +450,7 @@ 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
@@ -439,10 +459,24 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_ATA is not set
-# CONFIG_MD is not set
+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
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
#
# Input device support
@@ -454,10 +488,10 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
+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_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
@@ -473,7 +507,7 @@ CONFIG_INPUT_KEYBOARD=y
# 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_CORGI=y
# CONFIG_KEYBOARD_SPITZ is not set
CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_GPIO is not set
@@ -491,8 +525,14 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=y
+# 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=m
#
# Hardware I/O ports
@@ -512,9 +552,8 @@ CONFIG_HW_CONSOLE=y
#
# Serial drivers
#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_CS is not set
+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
@@ -529,7 +568,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
@@ -562,6 +601,8 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
#
# Miscellaneous I2C Chip support
@@ -606,26 +647,14 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-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 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_RADIO_ADAPTERS=y
-CONFIG_DAB=y
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DAB is not set
#
# Graphics support
#
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
+CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
@@ -648,18 +677,14 @@ CONFIG_FB_CFB_IMAGEBLIT=y
# 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 is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_PXA is not set
# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
+CONFIG_FB_W100=y
# CONFIG_FB_VIRTUAL is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_CORGI=y
#
# Display device support
@@ -673,7 +698,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_FONTS=y
# CONFIG_FONT_8x8 is not set
CONFIG_FONT_8x16=y
@@ -694,11 +719,204 @@ CONFIG_LOGO_LINUX_CLUT224=y
# Sound
#
# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW 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_SUPPORT=y
+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_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST 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
+# CONFIG_USB_R8A66597_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_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 Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=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_CH341 is not set
+# 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=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_OTI6858 is not set
+# 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=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+CONFIG_USB_PXA2XX_SMALL=y
+# CONFIG_USB_GADGET_M66592 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_S3C2410 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=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_MMC=y
# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
+CONFIG_MMC_UNSAFE_RESUME=y
#
# MMC/SD Card Drivers
@@ -711,9 +929,71 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_PXA=y
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CORGI=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO 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
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 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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 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_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
#
# File systems
@@ -721,8 +1001,10 @@ 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 is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
@@ -747,8 +1029,11 @@ CONFIG_DNOTIFY=y
#
# DOS/FAT/NT Filesystems
#
+CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_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
#
@@ -788,8 +1073,8 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=y
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
# CONFIG_VXFS_FS is not set
@@ -822,42 +1107,42 @@ CONFIG_MSDOS_PARTITION=y
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=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_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
# CONFIG_INSTRUMENTATION is not set
@@ -871,33 +1156,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB 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_LOCK_STAT 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_VM is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -905,7 +1168,50 @@ CONFIG_FRAME_POINTER=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
+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 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_XTS is not set
+# CONFIG_CRYPTO_CRYPTD 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_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
#
# Library routines
@@ -916,11 +1222,12 @@ CONFIG_CRC_CCITT=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=y
+CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.24/poodle/defconfig b/packages/kexecboot/linux-kexecboot-2.6.24/poodle/defconfig
index 2bbd230ad9..6ad99c785d 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.24/poodle/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.24/poodle/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24
-# Tue Aug 19 23:55:42 2008
+# Sun Feb 1 20:09:19 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -33,7 +33,7 @@ CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_LOCALVERSION_AUTO=y
# CONFIG_SWAP is not set
# CONFIG_SYSVIPC is not set
# CONFIG_BSD_PROCESS_ACCT is not set
@@ -236,7 +236,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -287,8 +287,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -873,33 +871,10 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB 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_LOCK_STAT 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_VM is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
diff --git a/packages/kexecboot/linux-kexecboot-2.6.24/spitz/defconfig b/packages/kexecboot/linux-kexecboot-2.6.24/spitz/defconfig
index c63b1d8738..eab0e478d8 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.24/spitz/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.24/spitz/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24
-# Tue Aug 26 17:05:46 2008
+# Sun Feb 1 20:48:10 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -31,18 +31,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
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
@@ -52,28 +57,35 @@ CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_KALLSYMS 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 is not set
-# CONFIG_ELF_CORE is not set
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
-# CONFIG_FUTEX is not set
+CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
-# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -84,14 +96,14 @@ CONFIG_BLOCK=y
# 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_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=y
-CONFIG_DEFAULT_IOSCHED="noop"
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
@@ -180,7 +192,7 @@ 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_IWMMXT=y
CONFIG_XSCALE_PMU=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
@@ -194,8 +206,8 @@ CONFIG_SHARP_SCOOP=y
CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_IOCTL is not set
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
@@ -205,11 +217,11 @@ CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
@@ -234,7 +246,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -243,6 +255,10 @@ CONFIG_ATAGS_PROC=y
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
#
# Floating point emulation
@@ -256,8 +272,8 @@ CONFIG_ATAGS_PROC=y
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
#
# Power management options
@@ -265,8 +281,9 @@ CONFIG_BINFMT_ELF=y
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
CONFIG_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
+CONFIG_SUSPEND=y
CONFIG_APM_EMULATION=y
#
@@ -285,8 +302,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -360,6 +375,7 @@ CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -369,10 +385,13 @@ CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_MISC_DEVICES is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
@@ -381,7 +400,7 @@ 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 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
@@ -389,12 +408,12 @@ CONFIG_BLK_DEV_IDECS=y
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDE_PROC_FS is not set
+CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
-# CONFIG_IDE_GENERIC is not set
+CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_PLATFORM is not set
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
@@ -405,7 +424,7 @@ CONFIG_IDE_ARCH_OBSOLETE_INIT=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
+CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
@@ -414,12 +433,12 @@ CONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=y
-CONFIG_CHR_DEV_OSST=y
-CONFIG_BLK_DEV_SR=y
+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=y
+CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
@@ -429,6 +448,7 @@ 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
@@ -437,10 +457,24 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_ATA is not set
-# CONFIG_MD is not set
+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
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
#
# Input device support
@@ -452,10 +486,10 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
+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_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
@@ -472,7 +506,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_KEYBOARD_SPITZ=y
CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_PXA27x is not set
# CONFIG_KEYBOARD_GPIO is not set
@@ -490,8 +524,14 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=y
+# 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=m
#
# Hardware I/O ports
@@ -511,9 +551,8 @@ CONFIG_HW_CONSOLE=y
#
# Serial drivers
#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_CS is not set
+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
@@ -528,7 +567,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
@@ -561,6 +600,8 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
#
# Miscellaneous I2C Chip support
@@ -605,26 +646,14 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-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 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_RADIO_ADAPTERS=y
-CONFIG_DAB=y
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DAB is not set
#
# Graphics support
#
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
+CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
@@ -650,7 +679,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
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_OVERLAY=y
# CONFIG_FB_PXA_PARAMETERS is not set
# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
@@ -658,7 +687,7 @@ CONFIG_FB_PXA_LCD_QVGA=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_CORGI=y
#
# Display device support
@@ -680,7 +709,7 @@ CONFIG_FONT_8x16=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=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
@@ -693,11 +722,207 @@ CONFIG_LOGO_LINUX_CLUT224=y
# Sound
#
# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW 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_SUPPORT=y
+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_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST 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
+# CONFIG_USB_R8A66597_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_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 Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=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_CH341 is not set
+# 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=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_OTI6858 is not set
+# 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_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 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_S3C2410 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=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_MMC=y
# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
+CONFIG_MMC_UNSAFE_RESUME=y
#
# MMC/SD Card Drivers
@@ -710,9 +935,71 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_PXA=y
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO 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
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 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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 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_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
#
# File systems
@@ -720,8 +1007,10 @@ 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 is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
@@ -746,8 +1035,11 @@ CONFIG_DNOTIFY=y
#
# DOS/FAT/NT Filesystems
#
+CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_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
#
@@ -787,8 +1079,8 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=y
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
# CONFIG_VXFS_FS is not set
@@ -821,42 +1113,42 @@ CONFIG_MSDOS_PARTITION=y
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=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_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
# CONFIG_INSTRUMENTATION is not set
@@ -870,33 +1162,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB 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_LOCK_STAT 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_VM is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -904,7 +1174,50 @@ CONFIG_FRAME_POINTER=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
+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 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_XTS is not set
+# CONFIG_CRYPTO_CRYPTD 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_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
#
# Library routines
@@ -915,11 +1228,12 @@ CONFIG_CRC_CCITT=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=y
+CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.26/akita/defconfig b/packages/kexecboot/linux-kexecboot-2.6.26/akita/defconfig
index 305d935691..88236013ed 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.26/akita/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.26/akita/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.26
-# Sun Sep 7 00:09:12 2008
+# Mon Feb 2 00:27:17 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -35,7 +35,7 @@ CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
@@ -60,7 +60,6 @@ CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -81,9 +80,8 @@ CONFIG_SLAB=y
# CONFIG_SLOB is not set
CONFIG_PROFILING=y
# CONFIG_MARKERS is not set
-CONFIG_OPROFILE=m
+# CONFIG_OPROFILE is not set
CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
# CONFIG_HAVE_DMA_ATTRS is not set
@@ -92,13 +90,7 @@ CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+# CONFIG_MODULES is not set
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -110,8 +102,8 @@ CONFIG_BLOCK=y
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
@@ -247,7 +239,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -270,7 +262,7 @@ 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 debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -287,16 +279,13 @@ CONFIG_ATAGS_PROC=y
#
# 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_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
#
# Power management options
@@ -325,8 +314,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -401,7 +388,6 @@ CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -413,7 +399,6 @@ CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_MISC_DEVICES=y
@@ -434,7 +419,6 @@ 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
CONFIG_IDE_PROC_FS=y
@@ -449,57 +433,13 @@ CONFIG_IDE_PROC_FS=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA 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
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_ATA is not set
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
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_MULTIPATH_HP is not set
-# CONFIG_DM_DELAY is not set
-# CONFIG_DM_UEVENT is not set
+# CONFIG_BLK_DEV_DM is not set
#
# Input device support
@@ -511,7 +451,7 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
@@ -549,7 +489,6 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
@@ -557,7 +496,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_UINPUT is not set
#
# Hardware I/O ports
@@ -578,11 +517,7 @@ CONFIG_DEVKMEM=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
@@ -594,7 +529,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
+CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
@@ -620,8 +555,6 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
# CONFIG_I2C_PCA_PLATFORM is not set
#
@@ -645,7 +578,6 @@ CONFIG_HAVE_GPIO_LIB=y
#
# GPIO Support
#
-# CONFIG_DEBUG_GPIO is not set
#
# I2C GPIO expanders:
@@ -684,71 +616,19 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia core support
#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_COMMON=m
-CONFIG_VIDEO_ALLOW_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_MEDIA=m
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_VIDEO_MEDIA is not set
#
# Multimedia drivers
#
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=m
-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_TEA5761=m
-CONFIG_MEDIA_TUNER_TEA5767=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_VIDEO_V4L2=m
-CONFIG_VIDEO_V4L1=m
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# 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
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_USB_VIDEO_CLASS is not set
-# 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
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USB_STKWEBCAM is not set
-# CONFIG_SOC_CAMERA is not set
-# CONFIG_VIDEO_PXA27x is not set
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_USB_DSBR=m
-# CONFIG_USB_SI470X is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
+# CONFIG_DAB is not set
#
# Graphics support
#
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
@@ -815,276 +695,41 @@ 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_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 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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-
-#
-# ALSA SoC audio for Freescale SOCs
-#
-
-#
-# SoC Audio for the Texas Instruments OMAP
-#
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
+# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
+CONFIG_HID=y
# CONFIG_HID_DEBUG is not set
# CONFIG_HIDRAW 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_SUPPORT=y
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
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
-# CONFIG_USB_OTG is not set
+# CONFIG_USB is not set
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_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
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-# CONFIG_USB_WDM 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_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_EZUSB=y
-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_CH341 is not set
-# 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_IUU is not set
-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_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# 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
-
-#
-# 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
-# CONFIG_USB_ISIGHTFW is not set
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET is not set
# CONFIG_USB_GADGET_AMD5536UDC is not set
# CONFIG_USB_GADGET_ATMEL_USBA is not set
# CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
# CONFIG_USB_GADGET_M66592 is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
+# 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_S3C2410 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_ZERO is not set
# 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_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_PRINTER is not set
CONFIG_MMC=y
@@ -1248,7 +893,7 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
@@ -1281,42 +926,42 @@ CONFIG_MSDOS_PARTITION=y
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_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=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
#
@@ -1330,41 +975,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1372,85 +987,7 @@ CONFIG_DEBUG_ERRORS=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_AEAD=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_NULL=m
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_WP512=m
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_KHAZAD=m
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=m
-# CONFIG_CRYPTO_HW is not set
+# CONFIG_CRYPTO is not set
#
# Library routines
@@ -1463,7 +1000,7 @@ CONFIG_CRC_CCITT=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.26/c7x0/defconfig b/packages/kexecboot/linux-kexecboot-2.6.26/c7x0/defconfig
index 875c20dc18..7c48947854 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.26/c7x0/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.26/c7x0/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.26
-# Sat Sep 6 01:43:09 2008
+# Mon Feb 2 00:55:07 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -35,7 +35,7 @@ CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
@@ -60,7 +60,6 @@ CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -81,9 +80,8 @@ CONFIG_SLAB=y
# CONFIG_SLOB is not set
CONFIG_PROFILING=y
# CONFIG_MARKERS is not set
-CONFIG_OPROFILE=m
+# CONFIG_OPROFILE is not set
CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
# CONFIG_HAVE_DMA_ATTRS is not set
@@ -92,13 +90,7 @@ CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+# CONFIG_MODULES is not set
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -110,8 +102,8 @@ CONFIG_BLOCK=y
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
@@ -249,7 +241,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -272,7 +264,7 @@ 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 debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -280,22 +272,7 @@ CONFIG_ATAGS_PROC=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_POWERSAVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE 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_PXA=y
+# CONFIG_CPU_FREQ is not set
#
# Floating point emulation
@@ -304,16 +281,13 @@ CONFIG_CPU_FREQ_PXA=y
#
# 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_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
#
# Power management options
@@ -342,8 +316,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -418,7 +390,6 @@ CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -430,7 +401,6 @@ CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_MISC_DEVICES=y
@@ -451,7 +421,6 @@ 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
CONFIG_IDE_PROC_FS=y
@@ -466,57 +435,13 @@ CONFIG_IDE_PROC_FS=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA 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
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_ATA is not set
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
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_MULTIPATH_HP is not set
-# CONFIG_DM_DELAY is not set
-# CONFIG_DM_UEVENT is not set
+# CONFIG_BLK_DEV_DM is not set
#
# Input device support
@@ -528,7 +453,7 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
@@ -565,7 +490,6 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
@@ -573,7 +497,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_UINPUT is not set
#
# Hardware I/O ports
@@ -594,11 +518,7 @@ CONFIG_DEVKMEM=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
@@ -610,7 +530,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
+CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
@@ -636,8 +556,6 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
# CONFIG_I2C_PCA_PLATFORM is not set
#
@@ -661,7 +579,6 @@ CONFIG_HAVE_GPIO_LIB=y
#
# GPIO Support
#
-# CONFIG_DEBUG_GPIO is not set
#
# I2C GPIO expanders:
@@ -700,70 +617,19 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia core support
#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_COMMON=m
-CONFIG_VIDEO_ALLOW_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_MEDIA=m
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_VIDEO_MEDIA is not set
#
# Multimedia drivers
#
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=m
-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_TEA5761=m
-CONFIG_MEDIA_TUNER_TEA5767=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_VIDEO_V4L2=m
-CONFIG_VIDEO_V4L1=m
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# 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
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_USB_VIDEO_CLASS is not set
-# 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
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USB_STKWEBCAM is not set
-# CONFIG_SOC_CAMERA is not set
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_USB_DSBR=m
-# CONFIG_USB_SI470X is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
+# CONFIG_DAB is not set
#
# Graphics support
#
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
@@ -828,258 +694,28 @@ 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_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 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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_CORGI=m
-
-#
-# ALSA SoC audio for Freescale SOCs
-#
-
-#
-# SoC Audio for the Texas Instruments OMAP
-#
-CONFIG_SND_SOC_WM8731=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
+# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
+CONFIG_HID=y
# CONFIG_HID_DEBUG is not set
# CONFIG_HIDRAW 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_SUPPORT=y
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
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
-# CONFIG_USB_OTG is not set
+# CONFIG_USB is not set
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-# CONFIG_USB_WDM 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_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_EZUSB=y
-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_CH341 is not set
-# 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_IUU is not set
-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_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# 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
-
-#
-# 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
-# CONFIG_USB_ISIGHTFW is not set
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET is not set
# CONFIG_USB_GADGET_AMD5536UDC is not set
# CONFIG_USB_GADGET_ATMEL_USBA is not set
# CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-CONFIG_USB_PXA2XX_SMALL=y
+# CONFIG_USB_GADGET_PXA2XX is not set
# CONFIG_USB_GADGET_M66592 is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_GOKU is not set
@@ -1088,13 +724,11 @@ CONFIG_USB_PXA2XX_SMALL=y
# CONFIG_USB_GADGET_S3C2410 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_ZERO is not set
# 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_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_PRINTER is not set
CONFIG_MMC=y
@@ -1258,7 +892,7 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
@@ -1291,42 +925,42 @@ CONFIG_MSDOS_PARTITION=y
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_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=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
#
@@ -1340,41 +974,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1382,85 +986,7 @@ CONFIG_DEBUG_ERRORS=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_AEAD=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_NULL=m
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_WP512=m
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_KHAZAD=m
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=m
-# CONFIG_CRYPTO_HW is not set
+# CONFIG_CRYPTO is not set
#
# Library routines
@@ -1473,7 +999,7 @@ CONFIG_CRC_CCITT=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.26/poodle/defconfig b/packages/kexecboot/linux-kexecboot-2.6.26/poodle/defconfig
deleted file mode 100644
index a0696d854b..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.26/poodle/defconfig
+++ /dev/null
@@ -1,1757 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc8
-# Sun Jan 20 22:47:47 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
-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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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_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_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_MACH_HTCUNIVERSAL 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_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-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_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=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 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-CONFIG_CPU_FREQ_PXA25x=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_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE 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_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SUSPEND=y
-CONFIG_APM_EMULATION=y
-CONFIG_INPUT_APMPOWER=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-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_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=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-# CONFIG_INET_LRO 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_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
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NETFILTER_XTABLES=m
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY 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_TRACE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY 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
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-
-#
-# IP: Netfilter Configuration
-#
-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_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
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES 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
-# 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
-#
-# CONFIG_KINGSUN_DONGLE is not set
-# CONFIG_KSDAZZLE_DONGLE is not set
-# CONFIG_KS959_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 is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIUART_LL is not set
-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_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
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-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
-# 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
-# CONFIG_MTD_OOPS 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
-
-#
-# 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
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# 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=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=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 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
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-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
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=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=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
-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_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_ATA is not set
-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
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_MULTIPATH_HP is not set
-# CONFIG_DM_DELAY is not set
-# CONFIG_DM_UEVENT is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_VETH is not set
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_B44 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=y
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
-CONFIG_HERMES=m
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_ATMEL is not set
-CONFIG_AIRO_CS=m
-# 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_ZD1211RW 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_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_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_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_PPPOL2TP 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
-# 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=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_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_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_KEYBOARD_GPIO 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_CORGI=y
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# 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=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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-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 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_V4L_USB_DRIVERS=y
-# 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
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_USB_DSBR=m
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=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_CFB_REV_PIXELS_IN_BYTE 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 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_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
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY 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 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
-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=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 is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_AC97_CODEC is not set
-# 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
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_POODLE=m
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_WM8731=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_AC97_BUS is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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_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 Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=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_CH341 is not set
-# 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_OTI6858 is not set
-# 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=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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_S3C2410 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
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_GPIO 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
-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 is not set
-# CONFIG_RTC_DRV_DS1374 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
-# CONFIG_RTC_DRV_M41T80 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_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=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 is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=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 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_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_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS 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_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_NETWORK_FILESYSTEMS=y
-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_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=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
-
-#
-# 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
-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
-# CONFIG_DLM is not set
-CONFIG_INSTRUMENTATION=y
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-# CONFIG_MARKERS is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=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=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_SAMPLES 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
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-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 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_XTS is not set
-# CONFIG_CRYPTO_CRYPTD 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_SEED is not set
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_HW is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.26/spitz/defconfig b/packages/kexecboot/linux-kexecboot-2.6.26/spitz/defconfig
index 898319f417..2d34ad0225 100644
--- a/packages/kexecboot/linux-kexecboot-2.6.26/spitz/defconfig
+++ b/packages/kexecboot/linux-kexecboot-2.6.26/spitz/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.26
-# Sun Sep 7 00:20:18 2008
+# Mon Feb 2 00:49:55 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -35,7 +35,7 @@ CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
@@ -60,7 +60,6 @@ CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -81,9 +80,8 @@ CONFIG_SLAB=y
# CONFIG_SLOB is not set
CONFIG_PROFILING=y
# CONFIG_MARKERS is not set
-CONFIG_OPROFILE=m
+# CONFIG_OPROFILE is not set
CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
# CONFIG_HAVE_DMA_ATTRS is not set
@@ -92,13 +90,7 @@ CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+# CONFIG_MODULES is not set
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -110,8 +102,8 @@ CONFIG_BLOCK=y
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
@@ -247,7 +239,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -270,7 +262,7 @@ 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 rootdelay=1 rw fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
@@ -287,16 +279,13 @@ CONFIG_ATAGS_PROC=y
#
# 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_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
#
# Power management options
@@ -325,8 +314,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
@@ -343,7 +330,6 @@ CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
-# CONFIG_MTD_BLOCK_RO is not set
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
@@ -402,7 +388,6 @@ CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -414,7 +399,6 @@ CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_MISC_DEVICES=y
@@ -435,7 +419,6 @@ 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
CONFIG_IDE_PROC_FS=y
@@ -450,57 +433,13 @@ CONFIG_IDE_PROC_FS=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA 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
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_ATA is not set
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
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_MULTIPATH_HP is not set
-# CONFIG_DM_DELAY is not set
-# CONFIG_DM_UEVENT is not set
+# CONFIG_BLK_DEV_DM is not set
#
# Input device support
@@ -512,7 +451,7 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
@@ -550,7 +489,6 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
@@ -558,7 +496,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_UINPUT is not set
#
# Hardware I/O ports
@@ -579,11 +517,7 @@ CONFIG_DEVKMEM=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
@@ -595,7 +529,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
+CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
@@ -621,8 +555,6 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
# CONFIG_I2C_PCA_PLATFORM is not set
#
@@ -646,7 +578,6 @@ CONFIG_HAVE_GPIO_LIB=y
#
# GPIO Support
#
-# CONFIG_DEBUG_GPIO is not set
#
# I2C GPIO expanders:
@@ -685,71 +616,19 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia core support
#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_COMMON=m
-CONFIG_VIDEO_ALLOW_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_MEDIA=m
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_VIDEO_MEDIA is not set
#
# Multimedia drivers
#
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=m
-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_TEA5761=m
-CONFIG_MEDIA_TUNER_TEA5767=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_VIDEO_V4L2=m
-CONFIG_VIDEO_V4L1=m
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# 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
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_USB_VIDEO_CLASS is not set
-# 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
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USB_STKWEBCAM is not set
-# CONFIG_SOC_CAMERA is not set
-# CONFIG_VIDEO_PXA27x is not set
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_USB_DSBR=m
-# CONFIG_USB_SI470X is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
+# CONFIG_DAB is not set
#
# Graphics support
#
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
@@ -816,276 +695,41 @@ 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_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 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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-
-#
-# ALSA SoC audio for Freescale SOCs
-#
-
-#
-# SoC Audio for the Texas Instruments OMAP
-#
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
+# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
+CONFIG_HID=y
# CONFIG_HID_DEBUG is not set
# CONFIG_HIDRAW 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_SUPPORT=y
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
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
-# CONFIG_USB_OTG is not set
+# CONFIG_USB is not set
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_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
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-# CONFIG_USB_WDM 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_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_EZUSB=y
-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_CH341 is not set
-# 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_IUU is not set
-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_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# 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
-
-#
-# 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
-# CONFIG_USB_ISIGHTFW is not set
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET is not set
# CONFIG_USB_GADGET_AMD5536UDC is not set
# CONFIG_USB_GADGET_ATMEL_USBA is not set
# CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
# CONFIG_USB_GADGET_M66592 is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
+# 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_S3C2410 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_ZERO is not set
# 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_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_PRINTER is not set
CONFIG_MMC=y
@@ -1249,7 +893,7 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
@@ -1282,42 +926,42 @@ CONFIG_MSDOS_PARTITION=y
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_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=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
#
@@ -1331,41 +975,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1373,85 +987,7 @@ CONFIG_DEBUG_ERRORS=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_AEAD=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_NULL=m
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_WP512=m
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_KHAZAD=m
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=m
-# CONFIG_CRYPTO_HW is not set
+# CONFIG_CRYPTO is not set
#
# Library routines
@@ -1464,7 +1000,7 @@ CONFIG_CRC_CCITT=y
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
diff --git a/packages/kexecboot/linux-kexecboot.inc b/packages/kexecboot/linux-kexecboot.inc
index 47c7d4e94a..2056758796 100644
--- a/packages/kexecboot/linux-kexecboot.inc
+++ b/packages/kexecboot/linux-kexecboot.inc
@@ -1,3 +1,6 @@
+# We set PR here, since a change in the kexecboot recipe will need to get picked up by *all* the kernels:
+PR = "r12"
+
SRC_URI = "file://defconfig"
LOGO_SIZE = '${@base_conditional("GUI_MACHINE_CLASS", "bigscreen", "vga", "qvga", d)}'
@@ -13,6 +16,7 @@ CMDLINE_poodle = "console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
CMDLINE_akita = "console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
CMDLINE_collie = "console=ttySA0,115200n8 console=tty1 mem=64M fbcon=rotate:1"
CMDLINE_spitz = "console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
+CMDLINE_hx4700 = "console=ttyS0,115200n8 console=tty1 fbcon=rotate:1"
PACKAGES = ""
PROVIDES = ""
@@ -26,7 +30,7 @@ TKSRC = "http://www.informatik.hu-berlin.de/~tkunze/zaurus/patches"
KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-kexecboot-${PV}-${PR}-${MACHINE}"
KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-kexecboot-${MACHINE}"
-do_compile[depends] += "${INITRAMFS_IMAGE}:do_rootfs"
+do_configure[depends] += "${INITRAMFS_IMAGE}:do_rootfs"
do_configure_append() {
sed -i -e /CONFIG_BLK_DEV_INITRD/d \
diff --git a/packages/kexecboot/linux-kexecboot_2.6.21-hh20.bb b/packages/kexecboot/linux-kexecboot_2.6.21-hh20.bb
index 6dd9dd1c20..7667037037 100644
--- a/packages/kexecboot/linux-kexecboot_2.6.21-hh20.bb
+++ b/packages/kexecboot/linux-kexecboot_2.6.21-hh20.bb
@@ -10,4 +10,14 @@ SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('P
file://gcc4x-limits.patch;patch=1 \
file://defconfig"
+SRC_URI += "file://${LOGO_SIZE}/logo_linux_clut224.ppm.bz2"
+
S = "${WORKDIR}/kernel26"
+
+
+do_configure_append() {
+ gzip -d ${S}/initramfs.cpio.gz || true
+ sed -i -e s:\.gz::g .config
+}
+
+
diff --git a/packages/kexecboot/linux-kexecboot_2.6.24.bb b/packages/kexecboot/linux-kexecboot_2.6.24.bb
index 9a89b6aeb2..f728c7adc1 100644
--- a/packages/kexecboot/linux-kexecboot_2.6.24.bb
+++ b/packages/kexecboot/linux-kexecboot_2.6.24.bb
@@ -1,12 +1,13 @@
require linux-kexecboot.inc
-PR = "r4"
-
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_collie = "-1"
DEFAULT_PREFERENCE_poodle = "1"
DEFAULT_PREFERENCE_qemux86 = "-1"
DEFAULT_PREFERENCE_tosa = "1"
+DEFAULT_PREFERENCE_c7x0 = "1"
+DEFAULT_PREFERENCE_akita = "1"
+DEFAULT_PREFERENCE_spitz = "1"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
diff --git a/packages/kexecboot/linux-kexecboot_2.6.26.bb b/packages/kexecboot/linux-kexecboot_2.6.26.bb
index e1dd9d4660..bf1dbb62bf 100644
--- a/packages/kexecboot/linux-kexecboot_2.6.26.bb
+++ b/packages/kexecboot/linux-kexecboot_2.6.26.bb
@@ -1,6 +1,5 @@
require linux-kexecboot.inc
-PR = "r9"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_qemuarm = "-1"
DEFAULT_PREFERENCE_qemux86 = "-1"
@@ -71,83 +70,6 @@ SRC_URI_append_collie = "\
file://collie_keymap.patch;patch=1 \
"
-SRC_URI_append_poodle = "\
- ${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \
- file://poodle_ts.patch;patch=1 \
- file://pxafb.patch;patch=1 \
-"
-
-SRC_URI_append_tosa = "\
- file://tosa/0001-Allow-runtime-registration-of-regions-of-memory-that.patch;patch=1 \
- file://tosa/0002-Modify-dma_alloc_coherent-on-ARM-so-that-it-supports.patch;patch=1 \
- file://tosa/0003-Core-MFD-support.patch;patch=1 \
- file://tosa/0004-Add-support-for-tc6393xb-MFD-core.patch;patch=1 \
- file://tosa/0005-Add-support-for-tc6387xb-MFD-core.patch;patch=1 \
- file://tosa/0006-Add-support-for-t7l66xb-MFD-core.patch;patch=1 \
- file://tosa/0007-Common-headers-for-TMIO-MFD-subdevices.patch;patch=1 \
- file://tosa/0008-Nand-driver-for-TMIO-devices.patch;patch=1 \
- file://tosa/0009-FB-driver-for-TMIO-devices.patch;patch=1 \
- file://tosa/0010-OHCI-driver-for-TMIO-devices.patch;patch=1 \
- file://tosa/0011-MMC-driver-for-TMIO-devices.patch;patch=1 \
- file://tosa/0012-Tosa-keyboard-support.patch;patch=1 \
- file://tosa/0013-USB-gadget-pxa2xx_udc-supports-inverted-vbus.patch;patch=1 \
- file://tosa/0014-tosa_udc_use_gpio_vbus.patch.patch;patch=1 \
- file://tosa/0015-sharpsl-export-params.patch;patch=1 \
- file://tosa/0016-This-patch-fixes-the-pxa25x-clocks-definitions-to-ad.patch;patch=1 \
- file://tosa/0017-Convert-pxa2xx-UDC-to-use-debugfs.patch;patch=1 \
- file://tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch;patch=1 \
- file://tosa/0026-I-don-t-think-we-should-check-for-IRQs-when-determin.patch;patch=1 \
- file://tosa/0027-Add-LiMn-one-of-the-most-common-for-small-non-recha.patch;patch=1 \
- file://tosa/0028-Add-suspend-resume-wakeup-support-for-pda_power.patch;patch=1 \
- file://tosa/0029-Support-using-VOLTAGE_-properties-for-apm-calculati.patch;patch=1 \
- file://tosa/0030-Core-driver-for-WM97xx-touchscreens.patch;patch=1 \
- file://tosa/0031-Add-chip-driver-for-WM9705-touchscreen.patch;patch=1 \
- file://tosa/0032-Add-chip-driver-for-WM9712-touchscreen.patch;patch=1 \
- file://tosa/0033-Add-chip-driver-for-WM9713-touchscreen.patch;patch=1 \
- file://tosa/0034-Driver-for-WM97xx-touchscreens-in-streaming-mode-on.patch;patch=1 \
- file://tosa/0035-Build-system-and-MAINTAINERS-entry-for-WM97xx-touchs.patch;patch=1 \
- file://tosa/0036-Set-id-to-1-for-wm97xx-subdevices.patch;patch=1 \
- file://tosa/0037-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1 \
- file://tosa/0038-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1 \
- file://tosa/0044-fix-tmio_mmc-debug-compilation.patch;patch=1 \
- file://tosa/0045-Update-tmio_ohci.patch;patch=1 \
- file://tosa/0046-patch-tc6393xb-cleanup.patch;patch=1 \
- file://tosa/0047-tc6393xb-use-bitmasks-instead-of-bit-field-structs.patch;patch=1 \
- file://tosa/0048-tc6393xb-GPIO-support.patch;patch=1 \
- file://tosa/0049-platform-support-for-TMIO-on-tosa.patch;patch=1 \
- file://tosa/0050-tosa-update-for-tc6393xb-gpio.patch;patch=1 \
- file://tosa/0051-fix-sound-soc-pxa-tosa.c-to-new-gpio-api.patch;patch=1 \
- file://tosa/0052-tosa-platform-backlight-support.patch;patch=1 \
- file://tosa/0053-sound-soc-codecs-wm9712.c-28.patch;patch=1 \
- file://tosa/0054-sound-soc-codecs-wm9712.c-2.patch;patch=1 \
- file://tosa/0055-Add-GPIO_POWERON-to-the-list-of-devices-that-we-supp.patch;patch=1 \
- file://tosa/0058-Fix-tosakbd-suspend.patch;patch=1 \
- file://tosa/0059-patch-tosa-wakeup-test.patch;patch=1 \
- file://tosa/0060-Add-support-for-power_supply-on-tosa.patch;patch=1 \
- file://tosa/0061-tosa-bat-unify.patch;patch=1 \
- file://tosa/0062-tosa-bat-fix-charging.patch;patch=1 \
- file://tosa/0063-patch-tosa-bat-jacket-detect.patch;patch=1 \
- file://tosa/0064-Export-modes-via-sysfs.patch;patch=1 \
- file://tosa/0065-wm97xx-core-fixes.patch;patch=1 \
- file://tosa/0066-tmiofb_probe-should-be-__devinit.patch;patch=1 \
- file://tosa/0067-modeswitching.patch;patch=1 \
- file://tosa/0068-Preliminary-tosa-denoiser.patch;patch=1 \
- file://tosa/0019-pxa-remove-periodic-mode-emulation-support.patch;patch=1 \
- file://tosa/0020-Provide-dew-device-clock-backports-from-2.6.24-git.patch;patch=1 \
- file://tosa/0021-Add-an-empty-drivers-gpio-directory-for-gpiolib-infr.patch;patch=1 \
- file://tosa/0022-Provide-new-implementation-infrastructure-that-platf.patch;patch=1 \
- file://tosa/0023-This-adds-gpiolib-support-for-the-PXA-architecture.patch;patch=1 \
- file://tosa/0024-Update-Documentation-gpio.txt-primarily-to-include.patch;patch=1 \
- file://tosa/0025-Signed-off-by-Dmitry-Baryshkov-dbaryshkov-gmail.co.patch;patch=1 \
- file://tosa/0039-Add-generic-framework-for-managing-clocks.patch;patch=1 \
- file://tosa/0040-Clocklib-debugfs-support.patch;patch=1 \
- file://tosa/0041-From-80a359e60c2aec59ccf4fca0a7fd20495f82b1d2-Mon-Se.patch;patch=1 \
- file://tosa/0042-Use-correct-clock-for-IrDA-on-pxa.patch;patch=1 \
- file://tosa/0043-Use-clocklib-for-sa1100-sub-arch.patch;patch=1 \
- file://tosa/0056-Support-resetting-by-asserting-GPIO-pin.patch;patch=1 \
- file://tosa/0057-Clean-up-tosa-resetting.patch;patch=1 \
- "
-
SRC_URI_append_htcuniversal ="\
file://htcuni-acx.patch;patch=1;status=external \
"
diff --git a/packages/konqueror/files/fix_KDE_LDPATH_HACK.patch b/packages/konqueror/files/fix_KDE_LDPATH_HACK.patch
new file mode 100644
index 0000000000..c38ed5ce8b
--- /dev/null
+++ b/packages/konqueror/files/fix_KDE_LDPATH_HACK.patch
@@ -0,0 +1,27 @@
+diff -Nur kdenox.vanilla/acinclude.m4 kdenox/acinclude.m4
+--- kdenox.vanilla/acinclude.m4 2009-02-18 16:57:28.000000000 +0100
++++ kdenox/acinclude.m4 2009-02-18 16:59:44.000000000 +0100
+@@ -1887,16 +1887,17 @@
+ AC_SUBST(kde_libraries)
+ AC_SUBST(kde_includes)
+
+-if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then
++#if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then
+ KDE_INCLUDES=""
+-else
+- KDE_INCLUDES="-I$kde_includes"
+- all_includes="$KDE_INCLUDES $all_includes"
+-fi
++#else
++# KDE_INCLUDES="-I$kde_includes"
++# all_includes="$KDE_INCLUDES $all_includes"
++#fi
+
+ KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION"
+
+-KDE_LDFLAGS="-L$kde_libraries"
++#KDE_LDFLAGS="-L$kde_libraries"
++KDE_LDFLAGS=""
+ if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then
+ all_libraries="$KDE_LDFLAGS $all_libraries"
+ fi
diff --git a/packages/konqueror/files/fix_acinclude.patch b/packages/konqueror/files/fix_acinclude.patch
new file mode 100644
index 0000000000..c8d0909605
--- /dev/null
+++ b/packages/konqueror/files/fix_acinclude.patch
@@ -0,0 +1,5897 @@
+--- a/acinclude.m4.vanilla 2009-02-15 21:57:59.000000000 +0100
++++ b/acinclude.m4 2009-02-15 22:16:01.000000000 +0100
+@@ -5906,5894 +5906,3 @@
+ KDE_USE_PIE="-pie"
+ fi
+ ])
+-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+-## Copyright 1996, 1997, 1998, 1999, 2000, 2001
+-## Free Software Foundation, Inc.
+-## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+-##
+-## This program is free software; you can redistribute 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.
+-##
+-## 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.
+-
+-# serial 47 AC_PROG_LIBTOOL
+-
+-
+-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+-# -----------------------------------------------------------
+-# If this macro is not defined by Autoconf, define it here.
+-m4_ifdef([AC_PROVIDE_IFELSE],
+- [],
+- [m4_define([AC_PROVIDE_IFELSE],
+- [m4_ifdef([AC_PROVIDE_$1],
+- [$2], [$3])])])
+-
+-
+-# AC_PROG_LIBTOOL
+-# ---------------
+-AC_DEFUN([AC_PROG_LIBTOOL],
+-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+- AC_PROVIDE_IFELSE([AC_PROG_CXX],
+- [AC_LIBTOOL_CXX],
+- [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+- ])])
+-dnl And a similar setup for Fortran 77 support
+- AC_PROVIDE_IFELSE([AC_PROG_F77],
+- [AC_LIBTOOL_F77],
+- [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+-])])
+-
+-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+- AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+- [AC_LIBTOOL_GCJ],
+- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+- [AC_LIBTOOL_GCJ],
+- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+- [AC_LIBTOOL_GCJ],
+- [ifdef([AC_PROG_GCJ],
+- [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+- ifdef([A][M_PROG_GCJ],
+- [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+- ifdef([LT_AC_PROG_GCJ],
+- [define([LT_AC_PROG_GCJ],
+- defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+-])])# AC_PROG_LIBTOOL
+-
+-
+-# _AC_PROG_LIBTOOL
+-# ----------------
+-AC_DEFUN([_AC_PROG_LIBTOOL],
+-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+-
+-# This can be used to rebuild libtool when needed
+-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+-
+-# Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool --silent'
+-AC_SUBST(LIBTOOL)dnl
+-
+-# Prevent multiple expansion
+-define([AC_PROG_LIBTOOL], [])
+-])# _AC_PROG_LIBTOOL
+-
+-
+-# AC_LIBTOOL_SETUP
+-# ----------------
+-AC_DEFUN([AC_LIBTOOL_SETUP],
+-[AC_PREREQ(2.50)dnl
+-AC_REQUIRE([AC_ENABLE_SHARED])dnl
+-AC_REQUIRE([AC_ENABLE_STATIC])dnl
+-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+-AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+-AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([AC_PROG_LD])dnl
+-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+-AC_REQUIRE([AC_PROG_NM])dnl
+-
+-AC_REQUIRE([AC_PROG_LN_S])dnl
+-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+-AC_REQUIRE([AC_OBJEXT])dnl
+-AC_REQUIRE([AC_EXEEXT])dnl
+-dnl
+-
+-AC_LIBTOOL_SYS_MAX_CMD_LEN
+-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+-AC_LIBTOOL_OBJDIR
+-
+-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+-_LT_AC_PROG_ECHO_BACKSLASH
+-
+-case $host_os in
+-aix3*)
+- # AIX sometimes has problems with the GCC collect2 program. For some
+- # reason, if we set the COLLECT_NAMES environment variable, the problems
+- # vanish in a puff of smoke.
+- if test "X${COLLECT_NAMES+set}" != Xset; then
+- COLLECT_NAMES=
+- export COLLECT_NAMES
+- fi
+- ;;
+-esac
+-
+-# Sed substitution that helps us do robust quoting. It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-Xsed='sed -e s/^X//'
+-[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+-
+-# Same as above, but do not quote variable references.
+-[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+-
+-# Sed substitution to delay expansion of an escaped shell variable in a
+-# double_quote_subst'ed string.
+-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+-
+-# Sed substitution to avoid accidental globbing in evaled expressions
+-no_glob_subst='s/\*/\\\*/g'
+-
+-# Constants:
+-rm="rm -f"
+-
+-# Global variables:
+-default_ofile=libtool
+-can_build_shared=yes
+-
+-# All known linkers require a `.a' archive for static linking (except M$VC,
+-# which needs '.lib').
+-libext=a
+-ltmain="$ac_aux_dir/ltmain.sh"
+-ofile="$default_ofile"
+-with_gnu_ld="$lt_cv_prog_gnu_ld"
+-
+-AC_CHECK_TOOL(AR, ar, false)
+-AC_CHECK_TOOL(RANLIB, ranlib, :)
+-AC_CHECK_TOOL(STRIP, strip, :)
+-
+-old_CC="$CC"
+-old_CFLAGS="$CFLAGS"
+-
+-# Set sane defaults for various variables
+-test -z "$AR" && AR=ar
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
+-test -z "$AS" && AS=as
+-test -z "$CC" && CC=cc
+-test -z "$LTCC" && LTCC=$CC
+-test -z "$DLLTOOL" && DLLTOOL=dlltool
+-test -z "$LD" && LD=ld
+-test -z "$LN_S" && LN_S="ln -s"
+-test -z "$MAGIC_CMD" && MAGIC_CMD=file
+-test -z "$NM" && NM=nm
+-test -z "$SED" && SED=sed
+-test -z "$OBJDUMP" && OBJDUMP=objdump
+-test -z "$RANLIB" && RANLIB=:
+-test -z "$STRIP" && STRIP=:
+-test -z "$ac_objext" && ac_objext=o
+-
+-# Determine commands to create old-style static archives.
+-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+-old_postinstall_cmds='chmod 644 $oldlib'
+-old_postuninstall_cmds=
+-
+-if test -n "$RANLIB"; then
+- case $host_os in
+- openbsd*)
+- old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+- ;;
+- *)
+- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+- ;;
+- esac
+- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+-fi
+-
+-# Only perform the check for file, if the check method requires it
+-case $deplibs_check_method in
+-file_magic*)
+- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+- AC_PATH_MAGIC
+- fi
+- ;;
+-esac
+-
+-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+-enable_win32_dll=yes, enable_win32_dll=no)
+-
+-AC_ARG_ENABLE([libtool-lock],
+- [AC_HELP_STRING([--disable-libtool-lock],
+- [avoid locking (might break parallel builds)])])
+-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+-
+-AC_ARG_WITH([pic],
+- [AC_HELP_STRING([--with-pic],
+- [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+- [pic_mode="$withval"],
+- [pic_mode=default])
+-test -z "$pic_mode" && pic_mode=default
+-
+-# Use C for the default configuration in the libtool script
+-tagname=
+-AC_LIBTOOL_LANG_C_CONFIG
+-_LT_AC_TAGCONFIG
+-])# AC_LIBTOOL_SETUP
+-
+-
+-# _LT_AC_SYS_COMPILER
+-# -------------------
+-AC_DEFUN([_LT_AC_SYS_COMPILER],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-
+-# If no C compiler was specified, use CC.
+-LTCC=${LTCC-"$CC"}
+-
+-# Allow CC to be a program name with arguments.
+-compiler=$CC
+-])# _LT_AC_SYS_COMPILER
+-
+-
+-# _LT_AC_SYS_LIBPATH_AIX
+-# ----------------------
+-# Links a minimal program and checks the executable
+-# for the system default hardcoded library path. In most cases,
+-# this is /usr/lib:/lib, but when the MPI compilers are used
+-# the location of the communication and MPI libs are included too.
+-# If we don't find anything, use the default library path according
+-# to the aix ld manual.
+-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+-[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+-}'`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+-}'`; fi],[])
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+-])# _LT_AC_SYS_LIBPATH_AIX
+-
+-
+-# _LT_AC_SHELL_INIT(ARG)
+-# ----------------------
+-AC_DEFUN([_LT_AC_SHELL_INIT],
+-[ifdef([AC_DIVERSION_NOTICE],
+- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+- [AC_DIVERT_PUSH(NOTICE)])
+-$1
+-AC_DIVERT_POP
+-])# _LT_AC_SHELL_INIT
+-
+-
+-# _LT_AC_PROG_ECHO_BACKSLASH
+-# --------------------------
+-# Add some code to the start of the generated configure script which
+-# will find an echo command which doesn't interpret backslashes.
+-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+-[_LT_AC_SHELL_INIT([
+-# Check that we are running under the correct shell.
+-SHELL=${CONFIG_SHELL-/bin/sh}
+-
+-case X$ECHO in
+-X*--fallback-echo)
+- # Remove one level of quotation (which was required for Make).
+- ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+- ;;
+-esac
+-
+-echo=${ECHO-echo}
+-if test "X[$]1" = X--no-reexec; then
+- # Discard the --no-reexec flag, and continue.
+- shift
+-elif test "X[$]1" = X--fallback-echo; then
+- # Avoid inline document here, it may be left over
+- :
+-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+- # Yippee, $echo works!
+- :
+-else
+- # Restart under the correct shell.
+- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-fi
+-
+-if test "X[$]1" = X--fallback-echo; then
+- # used as fallback echo
+- shift
+- cat <<EOF
+-[$]*
+-EOF
+- exit 0
+-fi
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+-
+-if test -z "$ECHO"; then
+-if test "X${echo_test_string+set}" != Xset; then
+-# find a string as large as possible, as long as the shell can cope with it
+- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+- if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+- echo_test_string="`eval $cmd`" &&
+- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+- then
+- break
+- fi
+- done
+-fi
+-
+-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+- test "X$echo_testing_string" = "X$echo_test_string"; then
+- :
+-else
+- # The Solaris, AIX, and Digital Unix default echo programs unquote
+- # backslashes. This makes it impossible to quote backslashes using
+- # echo "$something" | sed 's/\\/\\\\/g'
+- #
+- # So, first we look for a working echo in the user's PATH.
+-
+- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+- for dir in $PATH /usr/ucb; do
+- IFS="$lt_save_ifs"
+- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+- test "X$echo_testing_string" = "X$echo_test_string"; then
+- echo="$dir/echo"
+- break
+- fi
+- done
+- IFS="$lt_save_ifs"
+-
+- if test "X$echo" = Xecho; then
+- # We didn't find a better echo, so look for alternatives.
+- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+- test "X$echo_testing_string" = "X$echo_test_string"; then
+- # This shell has a builtin print -r that does the trick.
+- echo='print -r'
+- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+- test "X$CONFIG_SHELL" != X/bin/ksh; then
+- # If we have ksh, try running configure again with it.
+- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+- export ORIGINAL_CONFIG_SHELL
+- CONFIG_SHELL=/bin/ksh
+- export CONFIG_SHELL
+- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+- else
+- # Try using printf.
+- echo='printf %s\n'
+- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+- test "X$echo_testing_string" = "X$echo_test_string"; then
+- # Cool, printf works
+- :
+- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+- test "X$echo_testing_string" = 'X\t' &&
+- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+- test "X$echo_testing_string" = "X$echo_test_string"; then
+- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+- export CONFIG_SHELL
+- SHELL="$CONFIG_SHELL"
+- export SHELL
+- echo="$CONFIG_SHELL [$]0 --fallback-echo"
+- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+- test "X$echo_testing_string" = 'X\t' &&
+- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+- test "X$echo_testing_string" = "X$echo_test_string"; then
+- echo="$CONFIG_SHELL [$]0 --fallback-echo"
+- else
+- # maybe with a smaller string...
+- prev=:
+-
+- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+- then
+- break
+- fi
+- prev="$cmd"
+- done
+-
+- if test "$prev" != 'sed 50q "[$]0"'; then
+- echo_test_string=`eval $prev`
+- export echo_test_string
+- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+- else
+- # Oops. We lost completely, so just stick with echo.
+- echo=echo
+- fi
+- fi
+- fi
+- fi
+-fi
+-fi
+-
+-# Copy echo and quote the copy suitably for passing to libtool from
+-# the Makefile, instead of quoting the original, which is used later.
+-ECHO=$echo
+-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+- ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+-fi
+-
+-AC_SUBST(ECHO)
+-])])# _LT_AC_PROG_ECHO_BACKSLASH
+-
+-
+-# _LT_AC_LOCK
+-# -----------
+-AC_DEFUN([_LT_AC_LOCK],
+-[AC_ARG_ENABLE([libtool-lock],
+- [AC_HELP_STRING([--disable-libtool-lock],
+- [avoid locking (might break parallel builds)])])
+-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+-
+-# Some flags need to be propagated to the compiler or linker for good
+-# libtool support.
+-case $host in
+-ia64-*-hpux*)
+- # Find out which ABI we are using.
+- echo 'int i;' > conftest.$ac_ext
+- if AC_TRY_EVAL(ac_compile); then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *ELF-32*)
+- HPUX_IA64_MODE="32"
+- ;;
+- *ELF-64*)
+- HPUX_IA64_MODE="64"
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+-*-*-irix6*)
+- # Find out which ABI we are using.
+- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+- if AC_TRY_EVAL(ac_compile); then
+- if test "$lt_cv_prog_gnu_ld" = yes; then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *32-bit*)
+- LD="${LD-ld} -melf32bsmip"
+- ;;
+- *N32*)
+- LD="${LD-ld} -melf32bmipn32"
+- ;;
+- *64-bit*)
+- LD="${LD-ld} -melf64bmip"
+- ;;
+- esac
+- else
+- case `/usr/bin/file conftest.$ac_objext` in
+- *32-bit*)
+- LD="${LD-ld} -32"
+- ;;
+- *N32*)
+- LD="${LD-ld} -n32"
+- ;;
+- *64-bit*)
+- LD="${LD-ld} -64"
+- ;;
+- esac
+- fi
+- fi
+- rm -rf conftest*
+- ;;
+-
+-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+- # Find out which ABI we are using.
+- echo 'int i;' > conftest.$ac_ext
+- if AC_TRY_EVAL(ac_compile); then
+- case "`/usr/bin/file conftest.o`" in
+- *32-bit*)
+- LINUX_64_MODE="32"
+- case $host in
+- x86_64-*linux*)
+- LD="${LD-ld} -m elf_i386"
+- ;;
+- ppc64-*linux*)
+- LD="${LD-ld} -m elf32ppclinux"
+- ;;
+- s390x-*linux*)
+- LD="${LD-ld} -m elf_s390"
+- ;;
+- sparc64-*linux*)
+- LD="${LD-ld} -m elf32_sparc"
+- ;;
+- esac
+- ;;
+- *64-bit*)
+- LINUX_64_MODE="64"
+- case $host in
+- x86_64-*linux*)
+- LD="${LD-ld} -m elf_x86_64"
+- ;;
+- ppc*-*linux*|powerpc*-*linux*)
+- LD="${LD-ld} -m elf64ppc"
+- ;;
+- s390*-*linux*)
+- LD="${LD-ld} -m elf64_s390"
+- ;;
+- sparc*-*linux*)
+- LD="${LD-ld} -m elf64_sparc"
+- ;;
+- esac
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+-
+-*-*-sco3.2v5*)
+- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+- SAVE_CFLAGS="$CFLAGS"
+- CFLAGS="$CFLAGS -belf"
+- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+- [AC_LANG_PUSH(C)
+- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+- AC_LANG_POP])
+- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+- CFLAGS="$SAVE_CFLAGS"
+- fi
+- ;;
+-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+- AC_CHECK_TOOL(AS, as, false)
+- AC_CHECK_TOOL(OBJDUMP, objdump, false)
+- ;;
+- ])
+-esac
+-
+-need_locks="$enable_libtool_lock"
+-
+-])# _LT_AC_LOCK
+-
+-
+-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+-# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+-# ----------------------------------------------------------------
+-# Check whether the given compiler option works
+-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+-[AC_REQUIRE([LT_AC_PROG_SED])
+-AC_CACHE_CHECK([$1], [$2],
+- [$2=no
+- ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+- lt_compiler_flag="$3"
+- # Insert the option either (1) after the last *FLAGS variable, or
+- # (2) before a word containing "conftest.", or (3) at the end.
+- # Note that $ac_compile itself does not contain backslashes and begins
+- # with a dollar sign (not a hyphen), so the echo should work correctly.
+- # The option is referenced via a variable to avoid confusing sed.
+- lt_compile=`echo "$ac_compile" | $SED \
+- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+- -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+- (eval "$lt_compile" 2>conftest.err)
+- ac_status=$?
+- cat conftest.err >&AS_MESSAGE_LOG_FD
+- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+- if (exit $ac_status) && test -s "$ac_outfile"; then
+- # The compiler can only warn and ignore the option if not recognized
+- # So say no if there are warnings
+- if test ! -s conftest.err; then
+- $2=yes
+- fi
+- fi
+- $rm conftest*
+-])
+-
+-if test x"[$]$2" = xyes; then
+- ifelse([$5], , :, [$5])
+-else
+- ifelse([$6], , :, [$6])
+-fi
+-])# AC_LIBTOOL_COMPILER_OPTION
+-
+-
+-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+-# [ACTION-SUCCESS], [ACTION-FAILURE])
+-# ------------------------------------------------------------
+-# Check whether the given compiler option works
+-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+-[AC_CACHE_CHECK([$1], [$2],
+- [$2=no
+- save_LDFLAGS="$LDFLAGS"
+- LDFLAGS="$LDFLAGS $3"
+- printf "$lt_simple_link_test_code" > conftest.$ac_ext
+- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+- # The compiler can only warn and ignore the option if not recognized
+- # So say no if there are warnings
+- if test -s conftest.err; then
+- # Append any errors to the config.log.
+- cat conftest.err 1>&AS_MESSAGE_LOG_FD
+- else
+- $2=yes
+- fi
+- fi
+- $rm conftest*
+- LDFLAGS="$save_LDFLAGS"
+-])
+-
+-if test x"[$]$2" = xyes; then
+- ifelse([$4], , :, [$4])
+-else
+- ifelse([$5], , :, [$5])
+-fi
+-])# AC_LIBTOOL_LINKER_OPTION
+-
+-
+-# AC_LIBTOOL_SYS_MAX_CMD_LEN
+-# --------------------------
+-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+-[# find the maximum length of command line arguments
+-AC_MSG_CHECKING([the maximum length of command line arguments])
+-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+- i=0
+- testring="ABCD"
+-
+- case $build_os in
+- msdosdjgpp*)
+- # On DJGPP, this test can blow up pretty badly due to problems in libc
+- # (any single argument exceeding 2000 bytes causes a buffer overrun
+- # during glob expansion). Even if it were fixed, the result of this
+- # check would be larger than it should be.
+- lt_cv_sys_max_cmd_len=12288; # 12K is about right
+- ;;
+-
+- gnu*)
+- # Under GNU Hurd, this test is not required because there is
+- # no limit to the length of command line arguments.
+- # Libtool will interpret -1 as no limit whatsoever
+- lt_cv_sys_max_cmd_len=-1;
+- ;;
+-
+- cygwin* | mingw*)
+- # On Win9x/ME, this test blows up -- it succeeds, but takes
+- # about 5 minutes as the teststring grows exponentially.
+- # Worse, since 9x/ME are not pre-emptively multitasking,
+- # you end up with a "frozen" computer, even though with patience
+- # the test eventually succeeds (with a max line length of 256k).
+- # Instead, let's just punt: use the minimum linelength reported by
+- # all of the supported platforms: 8192 (on NT/2K/XP).
+- lt_cv_sys_max_cmd_len=8192;
+- ;;
+-
+- *)
+- # If test is not a shell built-in, we'll probably end up computing a
+- # maximum length that is only half of the actual maximum length, but
+- # we can't tell.
+- while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \
+- = "XX$testring") >/dev/null 2>&1 &&
+- new_result=`expr "X$testring" : ".*" 2>&1` &&
+- lt_cv_sys_max_cmd_len=$new_result &&
+- test $i != 17 # 1/2 MB should be enough
+- do
+- i=`expr $i + 1`
+- testring=$testring$testring
+- done
+- testring=
+- # Add a significant safety factor because C++ compilers can tack on massive
+- # amounts of additional arguments before passing them to the linker.
+- # It appears as though 1/2 is a usable value.
+- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+- ;;
+- esac
+-])
+-if test -n $lt_cv_sys_max_cmd_len ; then
+- AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+-else
+- AC_MSG_RESULT(none)
+-fi
+-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+-
+-
+-# _LT_AC_CHECK_DLFCN
+-# --------------------
+-AC_DEFUN([_LT_AC_CHECK_DLFCN],
+-[AC_CHECK_HEADERS(dlfcn.h)dnl
+-])# _LT_AC_CHECK_DLFCN
+-
+-
+-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+-# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+-# ------------------------------------------------------------------
+-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+-if test "$cross_compiling" = yes; then :
+- [$4]
+-else
+- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+- lt_status=$lt_dlunknown
+- cat > conftest.$ac_ext <<EOF
+-[#line __oline__ "configure"
+-#include "confdefs.h"
+-
+-#if HAVE_DLFCN_H
+-#include <dlfcn.h>
+-#endif
+-
+-#include <stdio.h>
+-
+-#ifdef RTLD_GLOBAL
+-# define LT_DLGLOBAL RTLD_GLOBAL
+-#else
+-# ifdef DL_GLOBAL
+-# define LT_DLGLOBAL DL_GLOBAL
+-# else
+-# define LT_DLGLOBAL 0
+-# endif
+-#endif
+-
+-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+- find out it does not work in some platform. */
+-#ifndef LT_DLLAZY_OR_NOW
+-# ifdef RTLD_LAZY
+-# define LT_DLLAZY_OR_NOW RTLD_LAZY
+-# else
+-# ifdef DL_LAZY
+-# define LT_DLLAZY_OR_NOW DL_LAZY
+-# else
+-# ifdef RTLD_NOW
+-# define LT_DLLAZY_OR_NOW RTLD_NOW
+-# else
+-# ifdef DL_NOW
+-# define LT_DLLAZY_OR_NOW DL_NOW
+-# else
+-# define LT_DLLAZY_OR_NOW 0
+-# endif
+-# endif
+-# endif
+-# endif
+-#endif
+-
+-#ifdef __cplusplus
+-extern "C" void exit (int);
+-#endif
+-
+-void fnord() { int i=42;}
+-int main ()
+-{
+- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+- int status = $lt_dlunknown;
+-
+- if (self)
+- {
+- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+- /* dlclose (self); */
+- }
+-
+- exit (status);
+-}]
+-EOF
+- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+- (./conftest; exit; ) 2>/dev/null
+- lt_status=$?
+- case x$lt_status in
+- x$lt_dlno_uscore) $1 ;;
+- x$lt_dlneed_uscore) $2 ;;
+- x$lt_unknown|x*) $3 ;;
+- esac
+- else :
+- # compilation failed
+- $3
+- fi
+-fi
+-rm -fr conftest*
+-])# _LT_AC_TRY_DLOPEN_SELF
+-
+-
+-# AC_LIBTOOL_DLOPEN_SELF
+-# -------------------
+-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+-if test "x$enable_dlopen" != xyes; then
+- enable_dlopen=unknown
+- enable_dlopen_self=unknown
+- enable_dlopen_self_static=unknown
+-else
+- lt_cv_dlopen=no
+- lt_cv_dlopen_libs=
+-
+- case $host_os in
+- beos*)
+- lt_cv_dlopen="load_add_on"
+- lt_cv_dlopen_libs=
+- lt_cv_dlopen_self=yes
+- ;;
+-
+- mingw* | pw32*)
+- lt_cv_dlopen="LoadLibrary"
+- lt_cv_dlopen_libs=
+- ;;
+-
+- cygwin*)
+- lt_cv_dlopen="dlopen"
+- lt_cv_dlopen_libs=
+- ;;
+-
+- darwin*)
+- # if libdl is installed we need to link against it
+- AC_CHECK_LIB([dl], [dlopen],
+- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+- lt_cv_dlopen="dyld"
+- lt_cv_dlopen_libs=
+- lt_cv_dlopen_self=yes
+- ])
+- ;;
+-
+- *)
+- AC_CHECK_FUNC([shl_load],
+- [lt_cv_dlopen="shl_load"],
+- [AC_CHECK_LIB([dld], [shl_load],
+- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+- [AC_CHECK_FUNC([dlopen],
+- [lt_cv_dlopen="dlopen"],
+- [AC_CHECK_LIB([dl], [dlopen],
+- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+- [AC_CHECK_LIB([svld], [dlopen],
+- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+- [AC_CHECK_LIB([dld], [dld_link],
+- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+- ])
+- ])
+- ])
+- ])
+- ])
+- ;;
+- esac
+-
+- if test "x$lt_cv_dlopen" != xno; then
+- enable_dlopen=yes
+- else
+- enable_dlopen=no
+- fi
+-
+- case $lt_cv_dlopen in
+- dlopen)
+- save_CPPFLAGS="$CPPFLAGS"
+- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+-
+- save_LDFLAGS="$LDFLAGS"
+- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+-
+- save_LIBS="$LIBS"
+- LIBS="$lt_cv_dlopen_libs $LIBS"
+-
+- AC_CACHE_CHECK([whether a program can dlopen itself],
+- lt_cv_dlopen_self, [dnl
+- _LT_AC_TRY_DLOPEN_SELF(
+- lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+- lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+- ])
+-
+- if test "x$lt_cv_dlopen_self" = xyes; then
+- LDFLAGS="$LDFLAGS $link_static_flag"
+- AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+- lt_cv_dlopen_self_static, [dnl
+- _LT_AC_TRY_DLOPEN_SELF(
+- lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+- lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+- ])
+- fi
+-
+- CPPFLAGS="$save_CPPFLAGS"
+- LDFLAGS="$save_LDFLAGS"
+- LIBS="$save_LIBS"
+- ;;
+- esac
+-
+- case $lt_cv_dlopen_self in
+- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+- *) enable_dlopen_self=unknown ;;
+- esac
+-
+- case $lt_cv_dlopen_self_static in
+- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+- *) enable_dlopen_self_static=unknown ;;
+- esac
+-fi
+-])# AC_LIBTOOL_DLOPEN_SELF
+-
+-
+-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+-# ---------------------------------
+-# Check to see if options -c and -o are simultaneously supported by compiler
+-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+- $rm -r conftest 2>/dev/null
+- mkdir conftest
+- cd conftest
+- mkdir out
+- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+- # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+- # that will create temporary files in the current directory regardless of
+- # the output directory. Thus, making CWD read-only will cause this test
+- # to fail, enabling locking or at least warning the user not to do parallel
+- # builds.
+- chmod -w .
+-
+- lt_compiler_flag="-o out/conftest2.$ac_objext"
+- # Insert the option either (1) after the last *FLAGS variable, or
+- # (2) before a word containing "conftest.", or (3) at the end.
+- # Note that $ac_compile itself does not contain backslashes and begins
+- # with a dollar sign (not a hyphen), so the echo should work correctly.
+- lt_compile=`echo "$ac_compile" | $SED \
+- -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+- -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+- (eval "$lt_compile" 2>out/conftest.err)
+- ac_status=$?
+- cat out/conftest.err >&AS_MESSAGE_LOG_FD
+- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+- if (exit $ac_status) && test -s out/conftest2.$ac_objext
+- then
+- # The compiler can only warn and ignore the option if not recognized
+- # So say no if there are warnings
+- if test ! -s out/conftest.err; then
+- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+- fi
+- fi
+- chmod u+w .
+- $rm conftest* out/*
+- rmdir out
+- cd ..
+- rmdir conftest
+- $rm conftest*
+-])
+-])# AC_LIBTOOL_PROG_CC_C_O
+-
+-
+-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+-# -----------------------------------------
+-# Check to see if we can do hard links to lock some files if needed
+-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+-[AC_REQUIRE([_LT_AC_LOCK])dnl
+-
+-hard_links="nottested"
+-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+- # do not overwrite the value of need_locks provided by the user
+- AC_MSG_CHECKING([if we can lock with hard links])
+- hard_links=yes
+- $rm conftest*
+- ln conftest.a conftest.b 2>/dev/null && hard_links=no
+- touch conftest.a
+- ln conftest.a conftest.b 2>&5 || hard_links=no
+- ln conftest.a conftest.b 2>/dev/null && hard_links=no
+- AC_MSG_RESULT([$hard_links])
+- if test "$hard_links" = no; then
+- AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+- need_locks=warn
+- fi
+-else
+- need_locks=no
+-fi
+-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+-
+-
+-# AC_LIBTOOL_OBJDIR
+-# -----------------
+-AC_DEFUN([AC_LIBTOOL_OBJDIR],
+-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+-[rm -f .libs 2>/dev/null
+-mkdir .libs 2>/dev/null
+-if test -d .libs; then
+- lt_cv_objdir=.libs
+-else
+- # MS-DOS does not allow filenames that begin with a dot.
+- lt_cv_objdir=_libs
+-fi
+-rmdir .libs 2>/dev/null])
+-objdir=$lt_cv_objdir
+-])# AC_LIBTOOL_OBJDIR
+-
+-
+-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+-# ----------------------------------------------
+-# Check hardcoding attributes.
+-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+-[AC_MSG_CHECKING([how to hardcode library paths into programs])
+-_LT_AC_TAGVAR(hardcode_action, $1)=
+-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+- test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+- test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+-
+- # We can hardcode non-existant directories.
+- if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+- # If the only mechanism to avoid hardcoding is shlibpath_var, we
+- # have to relink, otherwise we might link with an installed library
+- # when we should be linking with a yet-to-be-installed one
+- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+- test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+- # Linking always hardcodes the temporary library directory.
+- _LT_AC_TAGVAR(hardcode_action, $1)=relink
+- else
+- # We can link without hardcoding, and we can hardcode nonexisting dirs.
+- _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+- fi
+-else
+- # We cannot hardcode anything, or else we can only hardcode existing
+- # directories.
+- _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+-fi
+-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+-
+-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+- # Fast installation is not supported
+- enable_fast_install=no
+-elif test "$shlibpath_overrides_runpath" = yes ||
+- test "$enable_shared" = no; then
+- # Fast installation is not necessary
+- enable_fast_install=needless
+-fi
+-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+-
+-
+-# AC_LIBTOOL_SYS_LIB_STRIP
+-# ------------------------
+-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+-[striplib=
+-old_striplib=
+-AC_MSG_CHECKING([whether stripping libraries is possible])
+-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+- AC_MSG_RESULT([yes])
+-else
+-# FIXME - insert some real tests, host_os isn't really good enough
+- case $host_os in
+- darwin*)
+- if test -n "$STRIP" ; then
+- striplib="$STRIP -x"
+- AC_MSG_RESULT([yes])
+- else
+- AC_MSG_RESULT([no])
+-fi
+- ;;
+- *)
+- AC_MSG_RESULT([no])
+- ;;
+- esac
+-fi
+-])# AC_LIBTOOL_SYS_LIB_STRIP
+-
+-
+-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+-# -----------------------------
+-# PORTME Fill in your ld.so characteristics
+-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+-[AC_MSG_CHECKING([dynamic linker characteristics])
+-library_names_spec=
+-libname_spec='lib$name'
+-soname_spec=
+-shrext=".so"
+-postinstall_cmds=
+-postuninstall_cmds=
+-finish_cmds=
+-finish_eval=
+-shlibpath_var=
+-shlibpath_overrides_runpath=unknown
+-version_type=none
+-dynamic_linker="$host_os ld.so"
+-sys_lib_dlsearch_path_spec="/lib /usr/lib"
+-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+-need_lib_prefix=unknown
+-hardcode_into_libs=no
+-
+-# when you set need_version to no, make sure it does not cause -set_version
+-# flags to be left without arguments
+-need_version=unknown
+-
+-case $host_os in
+-aix3*)
+- version_type=linux
+- library_names_spec='${libname}${release}${shared_ext}$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'
+- ;;
+-
+-aix4* | aix5*)
+- version_type=linux
+- need_lib_prefix=no
+- need_version=no
+- 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}'
+- shlibpath_var=LD_LIBRARY_PATH
+- else
+- # With GCC up to 2.95.x, collect2 would create an import file
+- # for dependence libraries. The import file would start with
+- # the line `#! .'. This would cause the generated library to
+- # depend on `.', always an invalid library. This was fixed in
+- # development snapshots of GCC prior to 3.0.
+- case $host_os in
+- aix4 | aix4.[[01]] | aix4.[[01]].*)
+- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+- echo ' yes '
+- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+- :
+- else
+- can_build_shared=no
+- fi
+- ;;
+- esac
+- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+- # soname into executable. Probably we can add versioning support to
+- # collect2, so additional links can be useful in future.
+- if test "$aix_use_runtimelinking" = yes; then
+- # 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}'
+- 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'
+- fi
+- shlibpath_var=LIBPATH
+- fi
+- ;;
+-
+-amigaos*)
+- library_names_spec='$libname.ixlibrary $libname.a'
+- # Create ${libname}_ixlibrary.a entries in /sys/libs.
+- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+- ;;
+-
+-beos*)
+- library_names_spec='${libname}${shared_ext}'
+- dynamic_linker="$host_os ld.so"
+- shlibpath_var=LIBRARY_PATH
+- ;;
+-
+-bsdi4*)
+- 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'
+- 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"
+- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+- # the default ld.so.conf also contains /usr/contrib/lib and
+- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+- # libtool to hard-code these into programs
+- ;;
+-
+-cygwin* | mingw* | pw32*)
+- version_type=windows
+- shrext=".dll"
+- need_version=no
+- need_lib_prefix=no
+-
+- case $GCC,$host_os in
+- yes,cygwin* | yes,mingw* | yes,pw32*)
+- library_names_spec='$libname.dll.a'
+- # DLL is installed to $(libdir)/../bin by postinstall_cmds
+- postinstall_cmds='base_file=`basename \${file}`~
+- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+- dldir=$destdir/`dirname \$dlpath`~
+- test -d \$dldir || mkdir -p \$dldir~
+- $install_prog $dir/$dlname \$dldir/$dlname'
+- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+- dlpath=$dir/\$dldll~
+- $rm \$dlpath'
+- shlibpath_overrides_runpath=yes
+-
+- 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}'
+- 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}'
+- 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
+- # mingw gcc, but we are running on Cygwin. Gcc prints its search
+- # path with ; separators, and with drive letters. We can handle the
+- # drive letters (cygwin fileutils understands them), so leave them,
+- # especially as we might pass files found there to a mingw objdump,
+- # which wouldn't understand a cygwinified path. Ahh.
+- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+- else
+- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+- fi
+- ;;
+- 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}'
+- ;;
+- esac
+- ;;
+-
+- *)
+- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+- ;;
+- esac
+- dynamic_linker='Win32 ld.exe'
+- # FIXME: first we should search . and the directory the executable is in
+- shlibpath_var=PATH
+- ;;
+-
+-darwin* | rhapsody*)
+- dynamic_linker="$host_os dyld"
+- 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'
+- shlibpath_overrides_runpath=yes
+- shlibpath_var=DYLD_LIBRARY_PATH
+- shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+- if test "$GCC" = yes; then
+- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+- else
+- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+- fi
+- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+- ;;
+-
+-dgux*)
+- 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'
+- shlibpath_var=LD_LIBRARY_PATH
+- ;;
+-
+-freebsd1*)
+- dynamic_linker=no
+- ;;
+-
+-kfreebsd*-gnu*)
+- 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'
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=no
+- hardcode_into_libs=yes
+- dynamic_linker='GNU ld.so'
+- ;;
+-
+-freebsd*)
+- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+- 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}'
+- need_version=no
+- need_lib_prefix=no
+- ;;
+- freebsd-*)
+- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+- need_version=yes
+- ;;
+- esac
+- shlibpath_var=LD_LIBRARY_PATH
+- case $host_os in
+- freebsd2*)
+- shlibpath_overrides_runpath=yes
+- ;;
+- freebsd3.[01]* | freebsdelf3.[01]*)
+- shlibpath_overrides_runpath=yes
+- hardcode_into_libs=yes
+- ;;
+- *) # from 3.2 on
+- shlibpath_overrides_runpath=no
+- hardcode_into_libs=yes
+- ;;
+- esac
+- ;;
+-
+-gnu*)
+- 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'
+- shlibpath_var=LD_LIBRARY_PATH
+- hardcode_into_libs=yes
+- ;;
+-
+-hpux9* | hpux10* | hpux11*)
+- # Give a soname corresponding to the major version so that dld.sl refuses to
+- # link against other versions.
+- version_type=sunos
+- need_lib_prefix=no
+- need_version=no
+- case "$host_cpu" in
+- ia64*)
+- shrext='.so'
+- hardcode_into_libs=yes
+- 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'
+- if test "X$HPUX_IA64_MODE" = X32; then
+- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+- else
+- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+- fi
+- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+- ;;
+- hppa*64*)
+- shrext='.sl'
+- hardcode_into_libs=yes
+- 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'
+- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+- ;;
+- *)
+- shrext='.sl'
+- 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'
+- ;;
+- esac
+- # HP-UX runs *really* slowly unless shared libraries are mode 555.
+- postinstall_cmds='chmod 555 $lib'
+- ;;
+-
+-irix5* | irix6* | nonstopux*)
+- case $host_os in
+- nonstopux*) version_type=nonstopux ;;
+- *)
+- if test "$lt_cv_prog_gnu_ld" = yes; then
+- version_type=linux
+- else
+- version_type=irix
+- fi ;;
+- 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}'
+- case $host_os in
+- irix5* | nonstopux*)
+- libsuff= shlibsuff=
+- ;;
+- *)
+- case $LD in # libtool.m4 will add one of these switches to LD
+- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+- libsuff= shlibsuff= libmagic=32-bit;;
+- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+- libsuff=32 shlibsuff=N32 libmagic=N32;;
+- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+- libsuff=64 shlibsuff=64 libmagic=64-bit;;
+- *) libsuff= shlibsuff= libmagic=never-match;;
+- esac
+- ;;
+- esac
+- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+- shlibpath_overrides_runpath=no
+- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+- hardcode_into_libs=yes
+- ;;
+-
+-# No shared lib support for Linux oldld, aout, or coff.
+-linux*oldld* | linux*aout* | linux*coff*)
+- dynamic_linker=no
+- ;;
+-
+-# This must be Linux ELF.
+-linux*)
+- 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'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+- libsuff=
+- if test "x$LINUX_64_MODE" = x64; then
+- # Some platforms are per default 64-bit, so there's no /lib64
+- if test -d /lib64; then
+- libsuff=64
+- fi
+- fi
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=no
+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+- # This implies no fast_install, which is unacceptable.
+- # Some rework will be needed to allow for fast_install
+- # before this can be enabled.
+- hardcode_into_libs=yes
+-
+- # We used to test for /lib/ld.so.1 and disable shared libraries on
+- # powerpc, because MkLinux only supported shared libraries with the
+- # GNU dynamic linker. Since this was broken with cross compilers,
+- # most powerpc-linux boxes support dynamic linking these days and
+- # people can always --disable-shared, the test was removed, and we
+- # assume the GNU/Linux dynamic linker is in use.
+- dynamic_linker='GNU/Linux ld.so'
+- ;;
+-
+-netbsd*)
+- version_type=sunos
+- 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'
+- 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}${release}${shared_ext} ${libname}${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
+- dynamic_linker='NetBSD ld.elf_so'
+- fi
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=yes
+- hardcode_into_libs=yes
+- ;;
+-
+-newsos6)
+- version_type=linux
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=yes
+- ;;
+-
+-nto-qnx*)
+- 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'
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=yes
+- ;;
+-
+-openbsd*)
+- version_type=sunos
+- need_lib_prefix=no
+- need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$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
+- case $host_os in
+- openbsd2.[[89]] | openbsd2.[[89]].*)
+- shlibpath_overrides_runpath=no
+- ;;
+- *)
+- shlibpath_overrides_runpath=yes
+- ;;
+- esac
+- else
+- shlibpath_overrides_runpath=yes
+- fi
+- ;;
+-
+-os2*)
+- libname_spec='$name'
+- shrext=".dll"
+- need_lib_prefix=no
+- library_names_spec='$libname${shared_ext} $libname.a'
+- dynamic_linker='OS/2 ld.exe'
+- shlibpath_var=LIBPATH
+- ;;
+-
+-osf3* | osf4* | osf5*)
+- 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}'
+- 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"
+- ;;
+-
+-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}'
+- shlibpath_var=LD_LIBRARY_PATH
+- ;;
+-
+-solaris*)
+- 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'
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=yes
+- hardcode_into_libs=yes
+- # ldd complains unless libraries are executable
+- postinstall_cmds='chmod +x $lib'
+- ;;
+-
+-sunos4*)
+- version_type=sunos
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+- shlibpath_var=LD_LIBRARY_PATH
+- shlibpath_overrides_runpath=yes
+- if test "$with_gnu_ld" = yes; then
+- need_lib_prefix=no
+- fi
+- need_version=yes
+- ;;
+-
+-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'
+- shlibpath_var=LD_LIBRARY_PATH
+- case $host_vendor in
+- sni)
+- shlibpath_overrides_runpath=no
+- need_lib_prefix=no
+- export_dynamic_flag_spec='${wl}-Blargedynsym'
+- runpath_var=LD_RUN_PATH
+- ;;
+- siemens)
+- need_lib_prefix=no
+- ;;
+- motorola)
+- need_lib_prefix=no
+- need_version=no
+- shlibpath_overrides_runpath=no
+- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+- ;;
+- esac
+- ;;
+-
+-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'
+- 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'
+- shlibpath_var=LD_LIBRARY_PATH
+- ;;
+-
+-*)
+- dynamic_linker=no
+- ;;
+-esac
+-AC_MSG_RESULT([$dynamic_linker])
+-test "$dynamic_linker" = no && can_build_shared=no
+-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+-
+-
+-# _LT_AC_TAGCONFIG
+-# ----------------
+-AC_DEFUN([_LT_AC_TAGCONFIG],
+-[AC_ARG_WITH([tags],
+- [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+- [include additional configurations @<:@automatic@:>@])],
+- [tagnames="$withval"])
+-
+-if test -f "$ltmain" && test -n "$tagnames"; then
+- if test ! -f "${ofile}"; then
+- AC_MSG_WARN([output file `$ofile' does not exist])
+- fi
+-
+- if test -z "$LTCC"; then
+- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+- if test -z "$LTCC"; then
+- AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+- else
+- AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+- fi
+- fi
+-
+- # Extract list of available tagged configurations in $ofile.
+- # Note that this assumes the entire list is on one line.
+- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+-
+- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+- for tagname in $tagnames; do
+- IFS="$lt_save_ifs"
+- # Check whether tagname contains only valid characters
+- case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+- "") ;;
+- *) AC_MSG_ERROR([invalid tag name: $tagname])
+- ;;
+- esac
+-
+- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+- then
+- AC_MSG_ERROR([tag name \"$tagname\" already exists])
+- fi
+-
+- # Update the list of available tags.
+- if test -n "$tagname"; then
+- echo appending configuration tag \"$tagname\" to $ofile
+-
+- case $tagname in
+- CXX)
+- if test -n "$CXX" && test "X$CXX" != "Xno"; then
+- AC_LIBTOOL_LANG_CXX_CONFIG
+- else
+- tagname=""
+- fi
+- ;;
+-
+- F77)
+- if test -n "$F77" && test "X$F77" != "Xno"; then
+- AC_LIBTOOL_LANG_F77_CONFIG
+- else
+- tagname=""
+- fi
+- ;;
+-
+- GCJ)
+- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+- AC_LIBTOOL_LANG_GCJ_CONFIG
+- else
+- tagname=""
+- fi
+- ;;
+-
+- RC)
+- AC_LIBTOOL_LANG_RC_CONFIG
+- ;;
+-
+- *)
+- AC_MSG_ERROR([Unsupported tag name: $tagname])
+- ;;
+- esac
+-
+- # Append the new tag name to the list of available tags.
+- if test -n "$tagname" ; then
+- available_tags="$available_tags $tagname"
+- fi
+- fi
+- done
+- IFS="$lt_save_ifs"
+-
+- # Now substitute the updated list of available tags.
+- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+- mv "${ofile}T" "$ofile"
+- chmod +x "$ofile"
+- else
+- rm -f "${ofile}T"
+- AC_MSG_ERROR([unable to update list of available tagged configurations.])
+- fi
+-fi
+-])# _LT_AC_TAGCONFIG
+-
+-
+-# AC_LIBTOOL_DLOPEN
+-# -----------------
+-# enable checks for dlopen support
+-AC_DEFUN([AC_LIBTOOL_DLOPEN],
+- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+-])# AC_LIBTOOL_DLOPEN
+-
+-
+-# AC_LIBTOOL_WIN32_DLL
+-# --------------------
+-# declare package support for building win32 dll's
+-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+-])# AC_LIBTOOL_WIN32_DLL
+-
+-
+-# AC_ENABLE_SHARED([DEFAULT])
+-# ---------------------------
+-# implement the --enable-shared flag
+-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+-AC_DEFUN([AC_ENABLE_SHARED],
+-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+-AC_ARG_ENABLE([shared],
+- [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+- [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+- [p=${PACKAGE-default}
+- case $enableval in
+- yes) enable_shared=yes ;;
+- no) enable_shared=no ;;
+- *)
+- enable_shared=no
+- # Look at the argument we got. We use all the common list separators.
+- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+- for pkg in $enableval; do
+- IFS="$lt_save_ifs"
+- if test "X$pkg" = "X$p"; then
+- enable_shared=yes
+- fi
+- done
+- IFS="$lt_save_ifs"
+- ;;
+- esac],
+- [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+-])# AC_ENABLE_SHARED
+-
+-
+-# AC_DISABLE_SHARED
+-# -----------------
+-#- set the default shared flag to --disable-shared
+-AC_DEFUN([AC_DISABLE_SHARED],
+-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+-AC_ENABLE_SHARED(no)
+-])# AC_DISABLE_SHARED
+-
+-
+-# AC_ENABLE_STATIC([DEFAULT])
+-# ---------------------------
+-# implement the --enable-static flag
+-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+-AC_DEFUN([AC_ENABLE_STATIC],
+-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+-AC_ARG_ENABLE([static],
+- [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+- [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+- [p=${PACKAGE-default}
+- case $enableval in
+- yes) enable_static=yes ;;
+- no) enable_static=no ;;
+- *)
+- enable_static=no
+- # Look at the argument we got. We use all the common list separators.
+- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+- for pkg in $enableval; do
+- IFS="$lt_save_ifs"
+- if test "X$pkg" = "X$p"; then
+- enable_static=yes
+- fi
+- done
+- IFS="$lt_save_ifs"
+- ;;
+- esac],
+- [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+-])# AC_ENABLE_STATIC
+-
+-
+-# AC_DISABLE_STATIC
+-# -----------------
+-# set the default static flag to --disable-static
+-AC_DEFUN([AC_DISABLE_STATIC],
+-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+-AC_ENABLE_STATIC(no)
+-])# AC_DISABLE_STATIC
+-
+-
+-# AC_ENABLE_FAST_INSTALL([DEFAULT])
+-# ---------------------------------
+-# implement the --enable-fast-install flag
+-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+-AC_ARG_ENABLE([fast-install],
+- [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+- [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+- [p=${PACKAGE-default}
+- case $enableval in
+- yes) enable_fast_install=yes ;;
+- no) enable_fast_install=no ;;
+- *)
+- enable_fast_install=no
+- # Look at the argument we got. We use all the common list separators.
+- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+- for pkg in $enableval; do
+- IFS="$lt_save_ifs"
+- if test "X$pkg" = "X$p"; then
+- enable_fast_install=yes
+- fi
+- done
+- IFS="$lt_save_ifs"
+- ;;
+- esac],
+- [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+-])# AC_ENABLE_FAST_INSTALL
+-
+-
+-# AC_DISABLE_FAST_INSTALL
+-# -----------------------
+-# set the default to --disable-fast-install
+-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+-AC_ENABLE_FAST_INSTALL(no)
+-])# AC_DISABLE_FAST_INSTALL
+-
+-
+-# AC_LIBTOOL_PICMODE([MODE])
+-# --------------------------
+-# implement the --with-pic flag
+-# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+-AC_DEFUN([AC_LIBTOOL_PICMODE],
+-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+-pic_mode=ifelse($#,1,$1,default)
+-])# AC_LIBTOOL_PICMODE
+-
+-
+-# AC_PROG_EGREP
+-# -------------
+-# This is predefined starting with Autoconf 2.54, so this conditional
+-# definition can be removed once we require Autoconf 2.54 or later.
+-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+- [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+- then ac_cv_prog_egrep='grep -E'
+- else ac_cv_prog_egrep='egrep'
+- fi])
+- EGREP=$ac_cv_prog_egrep
+- AC_SUBST([EGREP])
+-])])
+-
+-
+-# AC_PATH_TOOL_PREFIX
+-# -------------------
+-# find a file program which can recognise shared library
+-AC_DEFUN([AC_PATH_TOOL_PREFIX],
+-[AC_REQUIRE([AC_PROG_EGREP])dnl
+-AC_MSG_CHECKING([for $1])
+-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+-[case $MAGIC_CMD in
+-[[\\/*] | ?:[\\/]*])
+- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+- ;;
+-*)
+- lt_save_MAGIC_CMD="$MAGIC_CMD"
+- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-dnl $ac_dummy forces splitting on constant user-supplied paths.
+-dnl POSIX.2 word splitting is done only on the output of word expansions,
+-dnl not every word. This closes a longstanding sh security hole.
+- ac_dummy="ifelse([$2], , $PATH, [$2])"
+- for ac_dir in $ac_dummy; do
+- IFS="$lt_save_ifs"
+- test -z "$ac_dir" && ac_dir=.
+- if test -f $ac_dir/$1; then
+- lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+- if test -n "$file_magic_test_file"; then
+- case $deplibs_check_method in
+- "file_magic "*)
+- file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+- $EGREP "$file_magic_regex" > /dev/null; then
+- :
+- else
+- cat <<EOF 1>&2
+-
+-*** Warning: the command libtool uses to detect shared libraries,
+-*** $file_magic_cmd, produces output that libtool cannot recognize.
+-*** The result is that libtool may fail to recognize shared libraries
+-*** as such. This will affect the creation of libtool libraries that
+-*** depend on shared libraries, but programs linked with such libtool
+-*** libraries will work regardless of this problem. Nevertheless, you
+-*** may want to report the problem to your system manager and/or to
+-*** bug-libtool@gnu.org
+-
+-EOF
+- fi ;;
+- esac
+- fi
+- break
+- fi
+- done
+- IFS="$lt_save_ifs"
+- MAGIC_CMD="$lt_save_MAGIC_CMD"
+- ;;
+-esac])
+-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+-if test -n "$MAGIC_CMD"; then
+- AC_MSG_RESULT($MAGIC_CMD)
+-else
+- AC_MSG_RESULT(no)
+-fi
+-])# AC_PATH_TOOL_PREFIX
+-
+-
+-# AC_PATH_MAGIC
+-# -------------
+-# find a file program which can recognise a shared library
+-AC_DEFUN([AC_PATH_MAGIC],
+-[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+-if test -z "$lt_cv_path_MAGIC_CMD"; then
+- if test -n "$ac_tool_prefix"; then
+- AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+- else
+- MAGIC_CMD=:
+- fi
+-fi
+-])# AC_PATH_MAGIC
+-
+-
+-# AC_PROG_LD
+-# ----------
+-# find the pathname to the GNU or non-GNU linker
+-AC_DEFUN([AC_PROG_LD],
+-[AC_ARG_WITH([gnu-ld],
+- [AC_HELP_STRING([--with-gnu-ld],
+- [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+- [test "$withval" = no || with_gnu_ld=yes],
+- [with_gnu_ld=no])
+-AC_REQUIRE([LT_AC_PROG_SED])dnl
+-AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+-ac_prog=ld
+-if test "$GCC" = yes; then
+- # Check if gcc -print-prog-name=ld gives a path.
+- AC_MSG_CHECKING([for ld used by $CC])
+- case $host in
+- *-*-mingw*)
+- # gcc leaves a trailing carriage return which upsets mingw
+- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+- *)
+- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+- esac
+- case $ac_prog in
+- # Accept absolute paths.
+- [[\\/]]* | ?:[[\\/]]*)
+- re_direlt='/[[^/]][[^/]]*/\.\./'
+- # Canonicalize the pathname of ld
+- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+- done
+- test -z "$LD" && LD="$ac_prog"
+- ;;
+- "")
+- # If it fails, then pretend we aren't using GCC.
+- ac_prog=ld
+- ;;
+- *)
+- # If it is relative, then search for the first ld in PATH.
+- with_gnu_ld=unknown
+- ;;
+- esac
+-elif test "$with_gnu_ld" = yes; then
+- AC_MSG_CHECKING([for GNU ld])
+-else
+- AC_MSG_CHECKING([for non-GNU ld])
+-fi
+-AC_CACHE_VAL(lt_cv_path_LD,
+-[if test -z "$LD"; then
+- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+- for ac_dir in $PATH; do
+- IFS="$lt_save_ifs"
+- test -z "$ac_dir" && ac_dir=.
+- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+- lt_cv_path_LD="$ac_dir/$ac_prog"
+- # Check to see if the program is GNU ld. I'd rather use --version,
+- # but apparently some GNU ld's only accept -v.
+- # Break only if it was the GNU/non-GNU ld that we prefer.
+- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+- *GNU* | *'with BFD'*)
+- test "$with_gnu_ld" != no && break
+- ;;
+- *)
+- test "$with_gnu_ld" != yes && break
+- ;;
+- esac
+- fi
+- done
+- IFS="$lt_save_ifs"
+-else
+- lt_cv_path_LD="$LD" # Let the user override the test with a path.
+-fi])
+-LD="$lt_cv_path_LD"
+-if test -n "$LD"; then
+- AC_MSG_RESULT($LD)
+-else
+- AC_MSG_RESULT(no)
+-fi
+-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+-AC_PROG_LD_GNU
+-])# AC_PROG_LD
+-
+-
+-# AC_PROG_LD_GNU
+-# --------------
+-AC_DEFUN([AC_PROG_LD_GNU],
+-[AC_REQUIRE([AC_PROG_EGREP])dnl
+-AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+-case `$LD -v 2>&1 </dev/null` in
+-*GNU* | *'with BFD'*)
+- lt_cv_prog_gnu_ld=yes
+- ;;
+-*)
+- lt_cv_prog_gnu_ld=no
+- ;;
+-esac])
+-with_gnu_ld=$lt_cv_prog_gnu_ld
+-])# AC_PROG_LD_GNU
+-
+-
+-# AC_PROG_LD_RELOAD_FLAG
+-# ----------------------
+-# find reload flag for linker
+-# -- PORTME Some linkers may need a different reload flag.
+-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+-[AC_CACHE_CHECK([for $LD option to reload object files],
+- lt_cv_ld_reload_flag,
+- [lt_cv_ld_reload_flag='-r'])
+-reload_flag=$lt_cv_ld_reload_flag
+-case $reload_flag in
+-"" | " "*) ;;
+-*) reload_flag=" $reload_flag" ;;
+-esac
+-reload_cmds='$LD$reload_flag -o $output$reload_objs'
+-])# AC_PROG_LD_RELOAD_FLAG
+-
+-
+-# AC_DEPLIBS_CHECK_METHOD
+-# -----------------------
+-# how to check for library dependencies
+-# -- PORTME fill in with the dynamic library characteristics
+-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+-[AC_CACHE_CHECK([how to recognise dependent libraries],
+-lt_cv_deplibs_check_method,
+-[lt_cv_file_magic_cmd='$MAGIC_CMD'
+-lt_cv_file_magic_test_file=
+-lt_cv_deplibs_check_method='unknown'
+-# Need to set the preceding variable on all platforms that support
+-# interlibrary dependencies.
+-# 'none' -- dependencies not supported.
+-# `unknown' -- same as none, but documents that we really don't know.
+-# 'pass_all' -- all dependencies passed with no checks.
+-# 'test_compile' -- check by making test program.
+-# 'file_magic [[regex]]' -- check by looking for files in library path
+-# which responds to the $file_magic_cmd with a given extended regex.
+-# If you have `file' or equivalent on your system and you're not sure
+-# whether `pass_all' will *always* work, you probably want this one.
+-
+-case $host_os in
+-aix4* | aix5*)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-beos*)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-bsdi4*)
+- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+- lt_cv_file_magic_cmd='/usr/bin/file -L'
+- lt_cv_file_magic_test_file=/shlib/libc.so
+- ;;
+-
+-cygwin*)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-mingw* | pw32*)
+- # win32_libid is a shell function defined in ltmain.sh
+- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+- lt_cv_file_magic_cmd='win32_libid'
+- ;;
+-
+-darwin* | rhapsody*)
+- # this will be overwritten by pass_all, but leave it in just in case
+- lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+- lt_cv_file_magic_cmd='/usr/bin/file -L'
+- case "$host_os" in
+- rhapsody* | darwin1.[[012]])
+- lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+- ;;
+- *) # Darwin 1.3 on
+- lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+- ;;
+- esac
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-freebsd* | kfreebsd*-gnu)
+- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+- case $host_cpu in
+- i*86 )
+- # Not sure whether the presence of OpenBSD here was a mistake.
+- # Let's accept both of them until this is cleared up.
+- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+- lt_cv_file_magic_cmd=/usr/bin/file
+- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+- ;;
+- esac
+- else
+- lt_cv_deplibs_check_method=pass_all
+- fi
+- ;;
+-
+-gnu*)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-hpux10.20* | hpux11*)
+- lt_cv_file_magic_cmd=/usr/bin/file
+- case "$host_cpu" in
+- ia64*)
+- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+- ;;
+- hppa*64*)
+- [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+- ;;
+- *)
+- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+- lt_cv_file_magic_test_file=/usr/lib/libc.sl
+- ;;
+- esac
+- ;;
+-
+-irix5* | irix6* | nonstopux*)
+- case $host_os in
+- irix5* | nonstopux*)
+- # this will be overridden with pass_all, but let us keep it just in case
+- lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+- ;;
+- *)
+- case $LD in
+- *-32|*"-32 ") libmagic=32-bit;;
+- *-n32|*"-n32 ") libmagic=N32;;
+- *-64|*"-64 ") libmagic=64-bit;;
+- *) libmagic=never-match;;
+- esac
+- # this will be overridden with pass_all, but let us keep it just in case
+- lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+- ;;
+- esac
+- lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-# This must be Linux ELF.
+-linux*)
+- case $host_cpu in
+- alpha* | hppa* | i*86 | ia64* | m68* | mips* | powerpc* | sparc* | s390* | sh* | x86_64* )
+- lt_cv_deplibs_check_method=pass_all ;;
+- # the debian people say, arm and glibc 2.3.1 works for them with pass_all
+- arm* )
+- lt_cv_deplibs_check_method=pass_all ;;
+- *)
+- # glibc up to 2.1.1 does not perform some relocations on ARM
+- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+- esac
+- lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.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)$'
+- else
+- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+- fi
+- ;;
+-
+-newos6*)
+- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+- lt_cv_file_magic_cmd=/usr/bin/file
+- lt_cv_file_magic_test_file=/usr/lib/libnls.so
+- ;;
+-
+-nto-qnx*)
+- lt_cv_deplibs_check_method=unknown
+- ;;
+-
+-openbsd*)
+- lt_cv_file_magic_cmd=/usr/bin/file
+- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+- else
+- lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+- fi
+- ;;
+-
+-osf3* | osf4* | osf5*)
+- # this will be overridden with pass_all, but let us keep it just in case
+- lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+- lt_cv_file_magic_test_file=/shlib/libc.so
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-sco3.2v5*)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-
+-solaris*)
+- lt_cv_deplibs_check_method=pass_all
+- lt_cv_file_magic_test_file=/lib/libc.so
+- ;;
+-
+-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+- case $host_vendor in
+- motorola)
+- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+- ;;
+- ncr)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+- sequent)
+- lt_cv_file_magic_cmd='/bin/file'
+- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+- ;;
+- sni)
+- lt_cv_file_magic_cmd='/bin/file'
+- lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+- lt_cv_file_magic_test_file=/lib/libc.so
+- ;;
+- siemens)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+- esac
+- ;;
+-
+-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+- lt_cv_deplibs_check_method=pass_all
+- ;;
+-esac
+-])
+-file_magic_cmd=$lt_cv_file_magic_cmd
+-deplibs_check_method=$lt_cv_deplibs_check_method
+-test -z "$deplibs_check_method" && deplibs_check_method=unknown
+-])# AC_DEPLIBS_CHECK_METHOD
+-
+-
+-# AC_PROG_NM
+-# ----------
+-# find the pathname to a BSD-compatible name lister
+-AC_DEFUN([AC_PROG_NM],
+-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+-[if test -n "$NM"; then
+- # Let the user override the test.
+- lt_cv_path_NM="$NM"
+-else
+- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+- for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+- IFS="$lt_save_ifs"
+- test -z "$ac_dir" && ac_dir=.
+- tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+- # Check to see if the nm accepts a BSD-compat flag.
+- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+- # nm: unknown option "B" ignored
+- # Tru64's nm complains that /dev/null is an invalid object file
+- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+- */dev/null* | *'Invalid file or object type'*)
+- lt_cv_path_NM="$tmp_nm -B"
+- break
+- ;;
+- *)
+- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+- */dev/null*)
+- lt_cv_path_NM="$tmp_nm -p"
+- break
+- ;;
+- *)
+- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+- continue # so that we can try to find one that supports BSD flags
+- ;;
+- esac
+- esac
+- fi
+- done
+- IFS="$lt_save_ifs"
+- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+-fi])
+-NM="$lt_cv_path_NM"
+-])# AC_PROG_NM
+-
+-
+-# AC_CHECK_LIBM
+-# -------------
+-# check for math library
+-AC_DEFUN([AC_CHECK_LIBM],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-LIBM=
+-case $host in
+-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+- # These system don't have libm, or don't need it
+- ;;
+-*-ncr-sysv4.3*)
+- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+- AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+- ;;
+-*)
+- AC_CHECK_LIB(m, cos, LIBM="-lm")
+- ;;
+-esac
+-])# AC_CHECK_LIBM
+-
+-
+-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+-# -----------------------------------
+-# sets LIBLTDL to the link flags for the libltdl convenience library and
+-# LTDLINCL to the include flags for the libltdl header and adds
+-# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
+-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+-# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
+-# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+-# '${top_srcdir}/' (note the single quotes!). If your package is not
+-# flat and you're not using automake, define top_builddir and
+-# top_srcdir appropriately in the Makefiles.
+-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+- case $enable_ltdl_convenience in
+- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+- "") enable_ltdl_convenience=yes
+- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+- esac
+- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+- # For backwards non-gettext consistent compatibility...
+- INCLTDL="$LTDLINCL"
+-])# AC_LIBLTDL_CONVENIENCE
+-
+-
+-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+-# -----------------------------------
+-# sets LIBLTDL to the link flags for the libltdl installable library and
+-# LTDLINCL to the include flags for the libltdl header and adds
+-# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
+-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+-# DIRECTORY is not provided and an installed libltdl is not found, it is
+-# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
+-# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+-# quotes!). If your package is not flat and you're not using automake,
+-# define top_builddir and top_srcdir appropriately in the Makefiles.
+-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+- AC_CHECK_LIB(ltdl, lt_dlinit,
+- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+- [if test x"$enable_ltdl_install" = xno; then
+- AC_MSG_WARN([libltdl not installed, but installation disabled])
+- else
+- enable_ltdl_install=yes
+- fi
+- ])
+- if test x"$enable_ltdl_install" = x"yes"; then
+- ac_configure_args="$ac_configure_args --enable-ltdl-install"
+- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+- else
+- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+- LIBLTDL="-lltdl"
+- LTDLINCL=
+- fi
+- # For backwards non-gettext consistent compatibility...
+- INCLTDL="$LTDLINCL"
+-])# AC_LIBLTDL_INSTALLABLE
+-
+-
+-# AC_LIBTOOL_CXX
+-# --------------
+-# enable support for C++ libraries
+-AC_DEFUN([AC_LIBTOOL_CXX],
+-[AC_REQUIRE([_LT_AC_LANG_CXX])
+-])# AC_LIBTOOL_CXX
+-
+-
+-# _LT_AC_LANG_CXX
+-# ---------------
+-AC_DEFUN([_LT_AC_LANG_CXX],
+-[AC_REQUIRE([AC_PROG_CXX])
+-AC_REQUIRE([AC_PROG_CXXCPP])
+-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+-])# _LT_AC_LANG_CXX
+-
+-
+-# AC_LIBTOOL_F77
+-# --------------
+-# enable support for Fortran 77 libraries
+-AC_DEFUN([AC_LIBTOOL_F77],
+-[AC_REQUIRE([_LT_AC_LANG_F77])
+-])# AC_LIBTOOL_F77
+-
+-
+-# _LT_AC_LANG_F77
+-# ---------------
+-AC_DEFUN([_LT_AC_LANG_F77],
+-[AC_REQUIRE([AC_PROG_F77])
+-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+-])# _LT_AC_LANG_F77
+-
+-
+-# AC_LIBTOOL_GCJ
+-# --------------
+-# enable support for GCJ libraries
+-AC_DEFUN([AC_LIBTOOL_GCJ],
+-[AC_REQUIRE([_LT_AC_LANG_GCJ])
+-])# AC_LIBTOOL_GCJ
+-
+-
+-# _LT_AC_LANG_GCJ
+-# ---------------
+-AC_DEFUN([_LT_AC_LANG_GCJ],
+-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+- [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+- [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+- [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+-])# _LT_AC_LANG_GCJ
+-
+-
+-# AC_LIBTOOL_RC
+-# --------------
+-# enable support for Windows resource files
+-AC_DEFUN([AC_LIBTOOL_RC],
+-[AC_REQUIRE([LT_AC_PROG_RC])
+-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+-])# AC_LIBTOOL_RC
+-
+-
+-# AC_LIBTOOL_LANG_C_CONFIG
+-# ------------------------
+-# Ensure that the configuration vars for the C compiler are
+-# suitably defined. Those variables are subsequently used by
+-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+-[lt_save_CC="$CC"
+-AC_LANG_PUSH(C)
+-
+-# Source file extension for C test sources.
+-ac_ext=c
+-
+-# Object file extension for compiled C test sources.
+-objext=o
+-_LT_AC_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="int some_variable = 0;\n"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='int main(){return(0);}\n'
+-
+-_LT_AC_SYS_COMPILER
+-
+-#
+-# Check for any special shared library compilation flags.
+-#
+-_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+-if test "$GCC" = no; then
+- case $host_os in
+- sco3.2v5*)
+- _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+- ;;
+- esac
+-fi
+-if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+- AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+- if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then :
+- else
+- AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+- _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+- fi
+-fi
+-
+-
+-#
+-# Check to make sure the static flag actually works.
+-#
+-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+- _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+- $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+- [],
+- [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+-
+-
+-## CAVEAT EMPTOR:
+-## There is no encapsulation within the following macros, do not change
+-## the running order or otherwise move them around unless you know exactly
+-## what you are doing...
+-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+-AC_LIBTOOL_PROG_COMPILER_PIC($1)
+-AC_LIBTOOL_PROG_CC_C_O($1)
+-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+-AC_LIBTOOL_PROG_LD_SHLIBS($1)
+-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+-AC_LIBTOOL_SYS_LIB_STRIP
+-AC_LIBTOOL_DLOPEN_SELF($1)
+-
+-# Report which librarie types wil actually be built
+-AC_MSG_CHECKING([if libtool supports shared libraries])
+-AC_MSG_RESULT([$can_build_shared])
+-
+-AC_MSG_CHECKING([whether to build shared libraries])
+-test "$can_build_shared" = "no" && enable_shared=no
+-
+-# On AIX, shared libraries and static libraries use the same namespace, and
+-# are all built from PIC.
+-case "$host_os" in
+-aix3*)
+- test "$enable_shared" = yes && enable_static=no
+- if test -n "$RANLIB"; then
+- archive_cmds="$archive_cmds~\$RANLIB \$lib"
+- postinstall_cmds='$RANLIB $lib'
+- fi
+- ;;
+-
+-aix4*)
+- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+- test "$enable_shared" = yes && enable_static=no
+- fi
+- ;;
+- darwin* | rhapsody*)
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- case "$host_os" in
+- rhapsody* | darwin1.[[012]])
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress'
+- ;;
+- *) # Darwin 1.3 on
+- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+- else
+- case ${MACOSX_DEPLOYMENT_TARGET} in
+- 10.[012])
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+- ;;
+- 10.*)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup'
+- ;;
+- esac
+- fi
+- ;;
+- esac
+- output_verbose_link_cmd='echo'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring'
+- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs'
+- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+-esac
+-AC_MSG_RESULT([$enable_shared])
+-
+-AC_MSG_CHECKING([whether to build static libraries])
+-# Make sure either enable_shared or enable_static is yes.
+-test "$enable_shared" = yes || enable_static=yes
+-AC_MSG_RESULT([$enable_static])
+-
+-AC_LIBTOOL_CONFIG($1)
+-
+-AC_LANG_POP
+-CC="$lt_save_CC"
+-])# AC_LIBTOOL_LANG_C_CONFIG
+-
+-
+-# AC_LIBTOOL_LANG_CXX_CONFIG
+-# --------------------------
+-# Ensure that the configuration vars for the C compiler are
+-# suitably defined. Those variables are subsequently used by
+-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+-[AC_LANG_PUSH(C++)
+-AC_REQUIRE([AC_PROG_CXX])
+-AC_REQUIRE([AC_PROG_CXXCPP])
+-
+-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+-_LT_AC_TAGVAR(always_export_symbols, $1)=no
+-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_AC_TAGVAR(hardcode_direct, $1)=no
+-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+-_LT_AC_TAGVAR(module_cmds, $1)=
+-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_AC_TAGVAR(no_undefined_flag, $1)=
+-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Dependencies to place before and after the object being linked:
+-_LT_AC_TAGVAR(predep_objects, $1)=
+-_LT_AC_TAGVAR(postdep_objects, $1)=
+-_LT_AC_TAGVAR(predeps, $1)=
+-_LT_AC_TAGVAR(postdeps, $1)=
+-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+-
+-# Source file extension for C++ test sources.
+-ac_ext=cc
+-
+-# Object file extension for compiled C++ test sources.
+-objext=o
+-_LT_AC_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="int some_variable = 0;\n"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_AC_SYS_COMPILER
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC=$CC
+-lt_save_LD=$LD
+-lt_save_GCC=$GCC
+-GCC=$GXX
+-lt_save_with_gnu_ld=$with_gnu_ld
+-lt_save_path_LD=$lt_cv_path_LD
+-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+-else
+- unset lt_cv_prog_gnu_ld
+-fi
+-if test -n "${lt_cv_path_LDCXX+set}"; then
+- lt_cv_path_LD=$lt_cv_path_LDCXX
+-else
+- unset lt_cv_path_LD
+-fi
+-test -z "${LDCXX+set}" || LD=$LDCXX
+-CC=${CXX-"c++"}
+-compiler=$CC
+-_LT_AC_TAGVAR(compiler, $1)=$CC
+-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+-
+-# We don't want -fno-exception wen compiling C++ code, so set the
+-# no_builtin_flag separately
+-if test "$GXX" = yes; then
+- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+-else
+- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+-fi
+-
+-if test "$GXX" = yes; then
+- # Set up default GNU C++ configuration
+-
+- AC_PROG_LD
+-
+- # Check if GNU C++ uses GNU ld as the underlying linker, since the
+- # archiving commands below assume that GNU ld is being used.
+- if test "$with_gnu_ld" = yes; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-
+- # If archive_cmds runs LD, not CC, wlarc should be empty
+- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+- # investigate it a little bit more. (MM)
+- wlarc='${wl}'
+-
+- # ancient GNU ld didn't support --whole-archive et. al.
+- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+- grep 'no-whole-archive' > /dev/null; then
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+- else
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+- fi
+- else
+- with_gnu_ld=no
+- wlarc=
+-
+- # A generic and very simple default shared library creation
+- # command for GNU C++ for the case where it uses the native
+- # linker, instead of GNU ld. If possible, this setting should
+- # overridden to take advantage of the native linker features on
+- # the platform it is being used on.
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $lib'
+- fi
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+-
+-else
+- GXX=no
+- with_gnu_ld=no
+- wlarc=
+-fi
+-
+-# PORTME: fill in a description of your system's C++ link characteristics
+-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+-_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+-case $host_os in
+- aix3*)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- aix4* | aix5*)
+- if test "$host_cpu" = ia64; then
+- # On IA64, the linker does run time linking by default, so we don't
+- # have to do anything special.
+- aix_use_runtimelinking=no
+- exp_sym_flag='-Bexport'
+- no_entry_flag=""
+- else
+- # KDE requires run time linking. Make it the default.
+- aix_use_runtimelinking=yes
+- exp_sym_flag='-bexport'
+- no_entry_flag='-bnoentry'
+- fi
+-
+- # When large executables or shared objects are built, AIX ld can
+- # have problems creating the table of contents. If linking a library
+- # or program results in "error TOC overflow" add -mminimal-toc to
+- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+-
+- _LT_AC_TAGVAR(archive_cmds, $1)=''
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+-
+- if test "$GXX" = yes; then
+- case $host_os in aix4.[012]|aix4.[012].*)
+- # We only want to do this on AIX 4.2 and lower, the check
+- # below for broken collect2 doesn't work under 4.3+
+- collect2name=`${CC} -print-prog-name=collect2`
+- if test -f "$collect2name" && \
+- strings "$collect2name" | grep resolve_lib_name >/dev/null
+- then
+- # We have reworked collect2
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- else
+- # We have old collect2
+- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+- # It fails to find uninstalled libraries when the uninstalled
+- # path is not listed in the libpath. Setting hardcode_minus_L
+- # to unsupported forces relinking
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+- fi
+- esac
+- shared_flag='-shared'
+- else
+- # not using gcc
+- if test "$host_cpu" = ia64; then
+- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+- # chokes on -Wl,-G. The following line is correct:
+- shared_flag='-G'
+- else
+- if test "$aix_use_runtimelinking" = yes; then
+- shared_flag='-qmkshrobj ${wl}-G'
+- else
+- shared_flag='-qmkshrobj'
+- fi
+- fi
+- fi
+-
+- # Let the compiler handle the export list.
+- _LT_AC_TAGVAR(always_export_symbols, $1)=no
+- if test "$aix_use_runtimelinking" = yes; then
+- # Warning - without using the other runtime loading flags (-brtl),
+- # -berok will link without error, but may produce a broken library.
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+- # Determine the default libpath from the value encoded in an empty executable.
+- _LT_AC_SYS_LIBPATH_AIX
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-
+- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag"
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+- else
+- if test "$host_cpu" = ia64; then
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+- else
+- # Determine the default libpath from the value encoded in an empty executable.
+- _LT_AC_SYS_LIBPATH_AIX
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+- # Warning - without using the other run time loading flags,
+- # -berok will link without error, but may produce a broken library.
+- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+- # -bexpall does not export symbols beginning with underscore (_)
+- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+- # Exported symbols can be pulled into shared objects from archives
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+- # This is similar to how AIX traditionally builds it's shared libraries.
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+- fi
+- fi
+- ;;
+- chorus*)
+- case $cc_basename in
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- ;;
+-
+- cygwin* | mingw* | pw32*)
+- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+- # as there is no search path for DLLs.
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+- _LT_AC_TAGVAR(always_export_symbols, $1)=no
+- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-
+- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+- # If the export-symbols file already is a .def file (1st line
+- # is EXPORTS), use it as is; otherwise, prepend...
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+- cp $export_symbols $output_objdir/$soname.def;
+- else
+- echo EXPORTS > $output_objdir/$soname.def;
+- cat $export_symbols >> $output_objdir/$soname.def;
+- fi~
+- $CC -shared -nostdlib $output_objdir/$soname.def $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+-
+- darwin* | rhapsody*)
+- if test "$GXX" = yes; then
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- case "$host_os" in
+- rhapsody* | darwin1.[[012]])
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress'
+- ;;
+- *) # Darwin 1.3 on
+- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+- else
+- case ${MACOSX_DEPLOYMENT_TARGET} in
+- 10.[012])
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+- ;;
+- 10.*)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup'
+- ;;
+- esac
+- fi
+- ;;
+- esac
+- lt_int_apple_cc_single_mod=no
+- output_verbose_link_cmd='echo'
+- if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+- lt_int_apple_cc_single_mod=yes
+- fi
+- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring'
+- fi
+- _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs'
+-
+- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- else
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- fi
+- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+-
+- dgux*)
+- case $cc_basename in
+- ec++)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- ghcx)
+- # Green Hills C++ Compiler
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- ;;
+- freebsd[12]*)
+- # C++ shared libraries reported to be fairly broken before switch to ELF
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- freebsd-elf*)
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- ;;
+- freebsd* | kfreebsd*-gnu)
+- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+- # conventions
+- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+- ;;
+- gnu*)
+- ;;
+- hpux9*)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+- # but as the default
+- # location of the library.
+-
+- case $cc_basename in
+- CC)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- aCC)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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 -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+- ;;
+- *)
+- if test "$GXX" = yes; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+- else
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+- esac
+- ;;
+- hpux10*|hpux11*)
+- if test $with_gnu_ld = no; then
+- case "$host_cpu" in
+- hppa*64*)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- ;;
+- ia64*)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- ;;
+- *)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+- ;;
+- esac
+- fi
+- case "$host_cpu" in
+- hppa*64*)
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+- ia64*)
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+- # but as the default
+- # location of the library.
+- ;;
+- *)
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+- # but as the default
+- # location of the library.
+- ;;
+- esac
+-
+- case $cc_basename in
+- CC)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- aCC)
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+- ;;
+- *)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects'
+- ;;
+- esac
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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 -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+- ;;
+- *)
+- if test "$GXX" = yes; then
+- if test $with_gnu_ld = no; then
+- case "$host_cpu" in
+- ia64*|hppa*64*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+- ;;
+- *)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects'
+- ;;
+- esac
+- fi
+- else
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+- esac
+- ;;
+- irix5* | irix6*)
+- case $cc_basename in
+- CC)
+- # SGI C++
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+-
+- # Archives containing C++ object files must be created using
+- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+- # necessary to make sure instantiated templates are included
+- # in the archive.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+- ;;
+- *)
+- if test "$GXX" = yes; then
+- if test "$with_gnu_ld" = no; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+- fi
+- fi
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+- ;;
+- esac
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- ;;
+- linux*)
+- case $cc_basename in
+- KCC)
+- # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+- # 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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-
+- # Archives containing C++ object files must be created using
+- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+- ;;
+- icpc)
+- # Intel C++
+- with_gnu_ld=yes
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+- ;;
+- cxx)
+- # Compaq C++
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+-
+- runpath_var=LD_RUN_PATH
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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 -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+- ;;
+- esac
+- ;;
+- lynxos*)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- m88k*)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- mvs*)
+- case $cc_basename in
+- cxx)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- ;;
+- netbsd*)
+- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+- wlarc=
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- fi
+- # Workaround some broken pre-1.5 toolchains
+- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+- ;;
+- osf3*)
+- case $cc_basename in
+- KCC)
+- # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+- # 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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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)=:
+-
+- # Archives containing C++ object files must be created using
+- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+-
+- ;;
+- RCC)
+- # Rational C++ 2.4.1
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- cxx)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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 -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+- ;;
+- *)
+- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+-
+- else
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+- esac
+- ;;
+- osf4* | osf5*)
+- case $cc_basename in
+- KCC)
+- # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+- # 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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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)=:
+-
+- # Archives containing C++ object files must be created using
+- # the KAI C++ compiler.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+- ;;
+- RCC)
+- # Rational C++ 2.4.1
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- cxx)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+- echo "-hidden">> $lib.exp~
+- $CC -shared$allow_undefined_flag $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+- $rm $lib.exp'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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 -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+- ;;
+- *)
+- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+-
+- else
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+- esac
+- ;;
+- psos*)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- sco*)
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- case $cc_basename in
+- CC)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- ;;
+- sunos4*)
+- case $cc_basename in
+- CC)
+- # Sun C++ 4.x
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- lcc)
+- # Lucid
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- ;;
+- solaris*)
+- case $cc_basename in
+- CC)
+- # Sun C++ 4.2, 5.x and Centerline C++
+- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+- $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp'
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- case $host_os in
+- solaris2.[0-5] | solaris2.[0-5].*) ;;
+- *)
+- # The C++ compiler is used as linker so we must use $wl
+- # flag to pass the commands to the underlying system
+- # linker.
+- # Supported since Solaris 2.6 (maybe 2.5.1?)
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+- ;;
+- esac
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- #
+- # There doesn't appear to be a way to prevent this compiler from
+- # 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 -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+-
+- # Archives containing C++ object files must be created using
+- # "CC -xar", where "CC" is the Sun C++ compiler. This is
+- # necessary to make sure instantiated templates are included
+- # in the archive.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+- ;;
+- gcx)
+- # Green Hills C++ Compiler
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib'
+-
+- # The C++ compiler must be used to create the archive.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+- ;;
+- *)
+- # GNU C++ compiler with Solaris linker
+- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+- if $CC --version | grep -v '^2\.7' > /dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp'
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+- else
+- # g++ 2.7 appears to require `-G' NOT `-shared' on this
+- # platform.
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp'
+-
+- # Commands to make compiler produce verbose output that lists
+- # what "hidden" libraries, object files and flags are used when
+- # linking a shared library.
+- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+- fi
+-
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+- fi
+- ;;
+- esac
+- ;;
+- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- ;;
+- tandem*)
+- case $cc_basename in
+- NCC)
+- # NonStop-UX NCC 3.20
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- ;;
+- vxworks*)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- *)
+- # FIXME: insert proper C++ library support
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+-esac
+-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-_LT_AC_TAGVAR(GCC, $1)="$GXX"
+-_LT_AC_TAGVAR(LD, $1)="$LD"
+-
+-## CAVEAT EMPTOR:
+-## There is no encapsulation within the following macros, do not change
+-## the running order or otherwise move them around unless you know exactly
+-## what you are doing...
+-AC_LIBTOOL_POSTDEP_PREDEP($1)
+-AC_LIBTOOL_PROG_COMPILER_PIC($1)
+-AC_LIBTOOL_PROG_CC_C_O($1)
+-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+-AC_LIBTOOL_PROG_LD_SHLIBS($1)
+-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+-AC_LIBTOOL_SYS_LIB_STRIP
+-AC_LIBTOOL_DLOPEN_SELF($1)
+-
+-AC_LIBTOOL_CONFIG($1)
+-
+-AC_LANG_POP
+-CC=$lt_save_CC
+-LDCXX=$LD
+-LD=$lt_save_LD
+-GCC=$lt_save_GCC
+-with_gnu_ldcxx=$with_gnu_ld
+-with_gnu_ld=$lt_save_with_gnu_ld
+-lt_cv_path_LDCXX=$lt_cv_path_LD
+-lt_cv_path_LD=$lt_save_path_LD
+-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+-])# AC_LIBTOOL_LANG_CXX_CONFIG
+-
+-# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+-# ------------------------
+-# Figure out "hidden" library dependencies from verbose
+-# compiler output when linking a shared library.
+-# Parse the compiler output and extract the necessary
+-# objects, libraries and library flags.
+-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+-dnl we can't use the lt_simple_compile_test_code here,
+-dnl because it contains code intended for an executable,
+-dnl not a library. It's possible we should let each
+-dnl tag define a new lt_????_link_test_code variable,
+-dnl but it's only used here...
+-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+-int a;
+-void foo (void) { a = 0; }
+-EOF
+-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+-class Foo
+-{
+-public:
+- Foo (void) { a = 0; }
+-private:
+- int a;
+-};
+-EOF
+-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+- subroutine foo
+- implicit none
+- integer*4 a
+- a=0
+- return
+- end
+-EOF
+-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+-public class foo {
+- private int a;
+- public void bar (void) {
+- a = 0;
+- }
+-};
+-EOF
+-])
+-dnl Parse the compiler output and extract the necessary
+-dnl objects, libraries and library flags.
+-if AC_TRY_EVAL(ac_compile); then
+- # Parse the compiler output and extract the necessary
+- # objects, libraries and library flags.
+-
+- # Sentinel used to keep track of whether or not we are before
+- # the conftest object file.
+- pre_test_object_deps_done=no
+-
+- # The `*' in the case matches for architectures that use `case' in
+- # $output_verbose_cmd can trigger glob expansion during the loop
+- # eval without this substitution.
+- output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+-
+- for p in `eval $output_verbose_link_cmd`; do
+- case $p in
+-
+- -L* | -R* | -l*)
+- # Some compilers place space between "-{L,R}" and the path.
+- # Remove the space.
+- if test $p = "-L" \
+- || test $p = "-R"; then
+- prev=$p
+- continue
+- else
+- prev=
+- fi
+-
+- if test "$pre_test_object_deps_done" = no; then
+- case $p in
+- -L* | -R*)
+- # Internal compiler library paths should come after those
+- # provided the user. The postdeps already come after the
+- # user supplied libs so there is no need to process them.
+- if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+- else
+- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+- fi
+- ;;
+- # The "-l" case would never come before the object being
+- # linked, so don't bother handling this case.
+- esac
+- else
+- if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+- _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+- else
+- _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+- fi
+- fi
+- ;;
+-
+- *.$objext|*.$libext)
+- # This assumes that the test object file only shows up
+- # once in the compiler output.
+- if test "$p" = "conftest.$objext"; then
+- pre_test_object_deps_done=yes
+- continue
+- fi
+-
+- if test "$pre_test_object_deps_done" = no; then
+- if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+- _LT_AC_TAGVAR(predep_objects, $1)="$p"
+- else
+- _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+- fi
+- else
+- if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+- _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+- else
+- _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+- fi
+- fi
+- ;;
+-
+- *) ;; # Ignore the rest.
+-
+- esac
+- done
+-
+- # Clean up.
+- rm -f a.out a.exe
+-else
+- echo "libtool.m4: error: problem compiling $1 test program"
+-fi
+-
+-$rm -f confest.$objext
+-
+-case " $_LT_AC_TAGVAR(postdeps, $1) " in
+-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+-esac
+-])# AC_LIBTOOL_POSTDEP_PREDEP
+-
+-# AC_LIBTOOL_LANG_F77_CONFIG
+-# ------------------------
+-# Ensure that the configuration vars for the C compiler are
+-# suitably defined. Those variables are subsequently used by
+-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+-[AC_REQUIRE([AC_PROG_F77])
+-AC_LANG_PUSH(Fortran 77)
+-
+-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+-_LT_AC_TAGVAR(always_export_symbols, $1)=no
+-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_AC_TAGVAR(hardcode_direct, $1)=no
+-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+-_LT_AC_TAGVAR(module_cmds, $1)=
+-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_AC_TAGVAR(no_undefined_flag, $1)=
+-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for f77 test sources.
+-ac_ext=f
+-
+-# Object file extension for compiled f77 test sources.
+-objext=o
+-_LT_AC_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code=" program t\n end\n"
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_AC_SYS_COMPILER
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-CC=${F77-"f77"}
+-compiler=$CC
+-_LT_AC_TAGVAR(compiler, $1)=$CC
+-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+-
+-AC_MSG_CHECKING([if libtool supports shared libraries])
+-AC_MSG_RESULT([$can_build_shared])
+-
+-AC_MSG_CHECKING([whether to build shared libraries])
+-test "$can_build_shared" = "no" && enable_shared=no
+-
+-# On AIX, shared libraries and static libraries use the same namespace, and
+-# are all built from PIC.
+-case "$host_os" in
+-aix3*)
+- test "$enable_shared" = yes && enable_static=no
+- if test -n "$RANLIB"; then
+- archive_cmds="$archive_cmds~\$RANLIB \$lib"
+- postinstall_cmds='$RANLIB $lib'
+- fi
+- ;;
+-aix4*)
+- test "$enable_shared" = yes && enable_static=no
+- ;;
+-esac
+-AC_MSG_RESULT([$enable_shared])
+-
+-AC_MSG_CHECKING([whether to build static libraries])
+-# Make sure either enable_shared or enable_static is yes.
+-test "$enable_shared" = yes || enable_static=yes
+-AC_MSG_RESULT([$enable_static])
+-
+-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-_LT_AC_TAGVAR(GCC, $1)="$G77"
+-_LT_AC_TAGVAR(LD, $1)="$LD"
+-
+-AC_LIBTOOL_PROG_COMPILER_PIC($1)
+-AC_LIBTOOL_PROG_CC_C_O($1)
+-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+-AC_LIBTOOL_PROG_LD_SHLIBS($1)
+-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+-AC_LIBTOOL_SYS_LIB_STRIP
+-
+-
+-AC_LIBTOOL_CONFIG($1)
+-
+-AC_LANG_POP
+-CC="$lt_save_CC"
+-])# AC_LIBTOOL_LANG_F77_CONFIG
+-
+-
+-# AC_LIBTOOL_LANG_GCJ_CONFIG
+-# --------------------------
+-# Ensure that the configuration vars for the C compiler are
+-# suitably defined. Those variables are subsequently used by
+-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+-[AC_LANG_SAVE
+-
+-# Source file extension for Java test sources.
+-ac_ext=java
+-
+-# Object file extension for compiled Java test sources.
+-objext=o
+-_LT_AC_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="class foo {}\n"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_AC_SYS_COMPILER
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-CC=${GCJ-"gcj"}
+-compiler=$CC
+-_LT_AC_TAGVAR(compiler, $1)=$CC
+-
+-# GCJ did not exist at the time GCC didn't implicitly link libc in.
+-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+-
+-## CAVEAT EMPTOR:
+-## There is no encapsulation within the following macros, do not change
+-## the running order or otherwise move them around unless you know exactly
+-## what you are doing...
+-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+-AC_LIBTOOL_PROG_COMPILER_PIC($1)
+-AC_LIBTOOL_PROG_CC_C_O($1)
+-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+-AC_LIBTOOL_PROG_LD_SHLIBS($1)
+-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+-AC_LIBTOOL_SYS_LIB_STRIP
+-AC_LIBTOOL_DLOPEN_SELF($1)
+-
+-AC_LIBTOOL_CONFIG($1)
+-
+-AC_LANG_RESTORE
+-CC="$lt_save_CC"
+-])# AC_LIBTOOL_LANG_GCJ_CONFIG
+-
+-
+-# AC_LIBTOOL_LANG_RC_CONFIG
+-# --------------------------
+-# Ensure that the configuration vars for the Windows resource compiler are
+-# suitably defined. Those variables are subsequently used by
+-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+-[AC_LANG_SAVE
+-
+-# Source file extension for RC test sources.
+-ac_ext=rc
+-
+-# Object file extension for compiled RC test sources.
+-objext=o
+-_LT_AC_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code="$lt_simple_compile_test_code"
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_AC_SYS_COMPILER
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-CC=${RC-"windres"}
+-compiler=$CC
+-_LT_AC_TAGVAR(compiler, $1)=$CC
+-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+-
+-AC_LIBTOOL_CONFIG($1)
+-
+-AC_LANG_RESTORE
+-CC="$lt_save_CC"
+-])# AC_LIBTOOL_LANG_RC_CONFIG
+-
+-
+-# AC_LIBTOOL_CONFIG([TAGNAME])
+-# ----------------------------
+-# If TAGNAME is not passed, then create an initial libtool script
+-# with a default configuration from the untagged config vars. Otherwise
+-# add code to config.status for appending the configuration named by
+-# TAGNAME from the matching tagged config vars.
+-AC_DEFUN([AC_LIBTOOL_CONFIG],
+-[# The else clause should only fire when bootstrapping the
+-# libtool distribution, otherwise you forgot to ship ltmain.sh
+-# with your package, and you will get complaints that there are
+-# no rules to generate ltmain.sh.
+-if test -f "$ltmain"; then
+- # See if we are running on zsh, and set the options which allow our commands through
+- # without removal of \ escapes.
+- if test -n "${ZSH_VERSION+set}" ; then
+- setopt NO_GLOB_SUBST
+- fi
+- # Now quote all the things that may contain metacharacters while being
+- # careful not to overquote the AC_SUBSTed values. We take copies of the
+- # variables and quote the copies for generation of the libtool script.
+- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+- deplibs_check_method reload_flag reload_cmds need_locks \
+- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+- lt_cv_sys_global_symbol_to_c_name_address \
+- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+- old_postinstall_cmds old_postuninstall_cmds \
+- _LT_AC_TAGVAR(compiler, $1) \
+- _LT_AC_TAGVAR(CC, $1) \
+- _LT_AC_TAGVAR(LD, $1) \
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+- _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+- _LT_AC_TAGVAR(old_archive_cmds, $1) \
+- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+- _LT_AC_TAGVAR(predep_objects, $1) \
+- _LT_AC_TAGVAR(postdep_objects, $1) \
+- _LT_AC_TAGVAR(predeps, $1) \
+- _LT_AC_TAGVAR(postdeps, $1) \
+- _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+- _LT_AC_TAGVAR(archive_cmds, $1) \
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+- _LT_AC_TAGVAR(postinstall_cmds, $1) \
+- _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+- _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+- _LT_AC_TAGVAR(no_undefined_flag, $1) \
+- _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+- _LT_AC_TAGVAR(hardcode_automatic, $1) \
+- _LT_AC_TAGVAR(module_cmds, $1) \
+- _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+- _LT_AC_TAGVAR(exclude_expsyms, $1) \
+- _LT_AC_TAGVAR(include_expsyms, $1); do
+-
+- case $var in
+- _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+- _LT_AC_TAGVAR(archive_cmds, $1) | \
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+- _LT_AC_TAGVAR(module_cmds, $1) | \
+- _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+- _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+- extract_expsyms_cmds | reload_cmds | finish_cmds | \
+- postinstall_cmds | postuninstall_cmds | \
+- old_postinstall_cmds | old_postuninstall_cmds | \
+- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+- # Double-quote double-evaled strings.
+- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+- ;;
+- *)
+- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+- ;;
+- esac
+- done
+-
+- case $lt_echo in
+- *'\[$]0 --fallback-echo"')
+- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+- ;;
+- esac
+-
+-ifelse([$1], [],
+- [cfgfile="${ofile}T"
+- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+- $rm -f "$cfgfile"
+- AC_MSG_NOTICE([creating $ofile])],
+- [cfgfile="$ofile"])
+-
+- cat <<__EOF__ >> "$cfgfile"
+-ifelse([$1], [],
+-[#! $SHELL
+-
+-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+-#
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+-# Free Software Foundation, Inc.
+-#
+-# This file is part of GNU Libtool:
+-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+-#
+-# This program is free software; you can redistribute 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.
+-#
+-# 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.
+-
+-# A sed program that does not truncate output.
+-SED=$lt_SED
+-
+-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+-Xsed="$SED -e s/^X//"
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+-
+-# The names of the tagged configurations supported by this script.
+-available_tags=
+-
+-# ### BEGIN LIBTOOL CONFIG],
+-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+-
+-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+-
+-# Shell to use when invoking shell scripts.
+-SHELL=$lt_SHELL
+-
+-# Whether or not to build shared libraries.
+-build_libtool_libs=$enable_shared
+-
+-# Whether or not to build static libraries.
+-build_old_libs=$enable_static
+-
+-# Whether or not to add -lc for building shared libraries.
+-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+-
+-# Whether or not to disallow shared libs when runtime libs are static
+-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+-
+-# Whether or not to optimize for fast installation.
+-fast_install=$enable_fast_install
+-
+-# The host system.
+-host_alias=$host_alias
+-host=$host
+-
+-# An echo program that does not interpret backslashes.
+-echo=$lt_echo
+-
+-# The archiver.
+-AR=$lt_AR
+-AR_FLAGS=$lt_AR_FLAGS
+-
+-# A C compiler.
+-LTCC=$lt_LTCC
+-
+-# A language-specific compiler.
+-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+-
+-# Is the compiler the GNU C compiler?
+-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+-
+-# An ERE matcher.
+-EGREP=$lt_EGREP
+-
+-# The linker used to build libraries.
+-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+-
+-# Whether we need hard or soft links.
+-LN_S=$lt_LN_S
+-
+-# A BSD-compatible nm program.
+-NM=$lt_NM
+-
+-# A symbol stripping program
+-STRIP=$STRIP
+-
+-# Used to examine libraries when file_magic_cmd begins "file"
+-MAGIC_CMD=$MAGIC_CMD
+-
+-# Used on cygwin: DLL creation program.
+-DLLTOOL="$DLLTOOL"
+-
+-# Used on cygwin: object dumper.
+-OBJDUMP="$OBJDUMP"
+-
+-# Used on cygwin: assembler.
+-AS="$AS"
+-
+-# The name of the directory that contains temporary libtool files.
+-objdir=$objdir
+-
+-# How to create reloadable object files.
+-reload_flag=$lt_reload_flag
+-reload_cmds=$lt_reload_cmds
+-
+-# How to pass a linker flag through the compiler.
+-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+-
+-# Object file suffix (normally "o").
+-objext="$ac_objext"
+-
+-# Old archive suffix (normally "a").
+-libext="$libext"
+-
+-# Shared library suffix (normally ".so").
+-shrext='$shrext'
+-
+-# Executable file suffix (normally "").
+-exeext="$exeext"
+-
+-# Additional compiler flags for building library objects.
+-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+-pic_mode=$pic_mode
+-
+-# What is the maximum length of a command?
+-max_cmd_len=$lt_cv_sys_max_cmd_len
+-
+-# Does compiler simultaneously support -c and -o options?
+-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+-
+-# Must we lock files when doing compilation ?
+-need_locks=$lt_need_locks
+-
+-# Do we need the lib prefix for modules?
+-need_lib_prefix=$need_lib_prefix
+-
+-# Do we need a version for libraries?
+-need_version=$need_version
+-
+-# Whether dlopen is supported.
+-dlopen_support=$enable_dlopen
+-
+-# Whether dlopen of programs is supported.
+-dlopen_self=$enable_dlopen_self
+-
+-# Whether dlopen of statically linked programs is supported.
+-dlopen_self_static=$enable_dlopen_self_static
+-
+-# Compiler flag to prevent dynamic linking.
+-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+-
+-# Compiler flag to turn off builtin functions.
+-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+-
+-# Compiler flag to allow reflexive dlopens.
+-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+-
+-# Compiler flag to generate shared objects directly from archives.
+-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+-
+-# Compiler flag to generate thread-safe objects.
+-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+-
+-# Library versioning type.
+-version_type=$version_type
+-
+-# Format of library name prefix.
+-libname_spec=$lt_libname_spec
+-
+-# List of archive names. First name is the real one, the rest are links.
+-# The last name is the one that the linker finds with -lNAME.
+-library_names_spec=$lt_library_names_spec
+-
+-# The coded name of the library, if different from the real name.
+-soname_spec=$lt_soname_spec
+-
+-# Commands used to build and install an old-style archive.
+-RANLIB=$lt_RANLIB
+-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+-old_postinstall_cmds=$lt_old_postinstall_cmds
+-old_postuninstall_cmds=$lt_old_postuninstall_cmds
+-
+-# Create an old-style archive from a shared archive.
+-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+-
+-# Create a temporary old-style archive to link instead of a shared archive.
+-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+-
+-# Commands used to build and install a shared archive.
+-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+-postinstall_cmds=$lt_postinstall_cmds
+-postuninstall_cmds=$lt_postuninstall_cmds
+-
+-# Commands used to build a loadable module (assumed same as above if empty)
+-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+-
+-# Commands to strip libraries.
+-old_striplib=$lt_old_striplib
+-striplib=$lt_striplib
+-
+-# Dependencies to place before the objects being linked to create a
+-# shared library.
+-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+-
+-# Dependencies to place after the objects being linked to create a
+-# shared library.
+-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+-
+-# Dependencies to place before the objects being linked to create a
+-# shared library.
+-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+-
+-# Dependencies to place after the objects being linked to create a
+-# shared library.
+-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+-
+-# The library search path used internally by the compiler when linking
+-# a shared library.
+-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+-
+-# Method to check whether dependent libraries are shared objects.
+-deplibs_check_method=$lt_deplibs_check_method
+-
+-# Command to use when deplibs_check_method == file_magic.
+-file_magic_cmd=$lt_file_magic_cmd
+-
+-# Flag that allows shared libraries with undefined symbols to be built.
+-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+-
+-# Flag that forces no undefined symbols.
+-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+-
+-# Commands used to finish a libtool library installation in a directory.
+-finish_cmds=$lt_finish_cmds
+-
+-# Same as above, but a single script fragment to be evaled but not shown.
+-finish_eval=$lt_finish_eval
+-
+-# Take the output of nm and produce a listing of raw symbols and C names.
+-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+-
+-# Transform the output of nm in a proper C declaration
+-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+-
+-# Transform the output of nm in a C name address pair
+-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+-
+-# This is the shared library runtime path variable.
+-runpath_var=$runpath_var
+-
+-# This is the shared library path variable.
+-shlibpath_var=$shlibpath_var
+-
+-# Is shlibpath searched before the hard-coded library search path?
+-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+-
+-# How to hardcode a shared library path into an executable.
+-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+-
+-# Whether we should hardcode library paths into libraries.
+-hardcode_into_libs=$hardcode_into_libs
+-
+-# 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)
+-
+-# 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)
+-
+-# 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
+-# resulting binary.
+-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+-
+-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+-# resulting binary.
+-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+-
+-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+-# the resulting binary.
+-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+-
+-# Set to yes if building a shared library automatically hardcodes DIR into the library
+-# and all subsequent libraries and executables linked against it.
+-hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+-
+-# Variables whose values should be saved in libtool wrapper scripts and
+-# restored at relink time.
+-variables_saved_for_relink="$variables_saved_for_relink"
+-
+-# Whether libtool must link a program against all its dependency libraries.
+-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+-
+-# Compile-time system search path for libraries
+-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+-
+-# Run-time system search path for libraries
+-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+-
+-# Fix the shell variable \$srcfile for the compiler.
+-fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+-
+-# Set to yes if exported symbols are required.
+-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+-
+-# The commands to list exported symbols.
+-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+-
+-# The commands to extract the exported symbol list from a shared archive.
+-extract_expsyms_cmds=$lt_extract_expsyms_cmds
+-
+-# Symbols that should not be listed in the preloaded symbols.
+-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+-
+-# Symbols that must always be exported.
+-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+-
+-ifelse([$1],[],
+-[# ### END LIBTOOL CONFIG],
+-[# ### END LIBTOOL TAG CONFIG: $tagname])
+-
+-__EOF__
+-
+-ifelse([$1],[], [
+- case $host_os in
+- aix3*)
+- cat <<\EOF >> "$cfgfile"
+-
+-# AIX sometimes has problems with the GCC collect2 program. For some
+-# reason, if we set the COLLECT_NAMES environment variable, the problems
+-# vanish in a puff of smoke.
+-if test "X${COLLECT_NAMES+set}" != Xset; then
+- COLLECT_NAMES=
+- export COLLECT_NAMES
+-fi
+-EOF
+- ;;
+- esac
+-
+- # We use sed instead of cat because bash on DJGPP gets confused if
+- # if finds mixed CR/LF and LF-only lines. Since sed operates in
+- # text mode, it properly converts lines to CR/LF. This bash problem
+- # is reportedly fixed, but why not run on old versions too?
+- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+-
+- mv -f "$cfgfile" "$ofile" || \
+- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+- chmod +x "$ofile"
+-])
+-else
+- # If there is no Makefile yet, we rely on a make rule to execute
+- # `config.status --recheck' to rerun these tests and create the
+- # libtool script then.
+- test -f Makefile && make "$ltmain"
+-fi
+-])# AC_LIBTOOL_CONFIG
+-
+-
+-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+-# -------------------------------------------
+-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+-
+-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+-
+-if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+-
+- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+- lt_cv_prog_compiler_rtti_exceptions,
+- [-fno-rtti -fno-exceptions], [],
+- [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+-fi
+-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+-
+-
+-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+-# ---------------------------------
+-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+-[AC_REQUIRE([AC_CANONICAL_HOST])
+-AC_REQUIRE([AC_PROG_NM])
+-AC_REQUIRE([AC_OBJEXT])
+-# Check for command to grab the raw symbol name followed by C symbol from nm.
+-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+-[
+-# These are sane defaults that work on at least a few old systems.
+-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+-
+-# Character class describing NM global symbol codes.
+-symcode='[[BCDEGRST]]'
+-
+-# Regexp to match symbols that can be accessed directly from C.
+-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+-
+-# Transform the above into a raw symbol and a C symbol.
+-symxfrm='\1 \2\3 \3'
+-
+-# Transform an extracted symbol line into a proper C declaration
+-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+-
+-# Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+-
+-# Define system-specific variables.
+-case $host_os in
+-aix*)
+- symcode='[[BCDT]]'
+- ;;
+-cygwin* | mingw* | pw32*)
+- symcode='[[ABCDGISTW]]'
+- ;;
+-hpux*) # Its linker distinguishes data from code symbols
+- if test "$host_cpu" = ia64; then
+- symcode='[[ABCDEGRST]]'
+- fi
+- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+- ;;
+-irix* | nonstopux*)
+- symcode='[[BCDEGRST]]'
+- ;;
+-osf*)
+- symcode='[[BCDEGQRST]]'
+- ;;
+-solaris* | sysv5*)
+- symcode='[[BDT]]'
+- ;;
+-sysv4)
+- symcode='[[DFNSTU]]'
+- ;;
+-esac
+-
+-# Handle CRLF in mingw tool chain
+-opt_cr=
+-case $build_os in
+-mingw*)
+- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+- ;;
+-esac
+-
+-# If we're using GNU nm, then use its standard symbol codes.
+-case `$NM -V 2>&1` in
+-*GNU* | *'with BFD'*)
+- symcode='[[ABCDGISTW]]' ;;
+-esac
+-
+-# Try without a prefix undercore, then with it.
+-for ac_symprfx in "" "_"; do
+-
+- # Write the raw and C identifiers.
+- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+-
+- # Check to see that the pipe works correctly.
+- pipe_works=no
+-
+- rm -f conftest*
+- cat > conftest.$ac_ext <<EOF
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-char nm_test_var;
+-void nm_test_func(){}
+-#ifdef __cplusplus
+-}
+-#endif
+-int main(){nm_test_var='a';nm_test_func();return(0);}
+-EOF
+-
+- if AC_TRY_EVAL(ac_compile); then
+- # Now try to grab the symbols.
+- nlist=conftest.nm
+- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+- # Try sorting and uniquifying the output.
+- if sort "$nlist" | uniq > "$nlist"T; then
+- mv -f "$nlist"T "$nlist"
+- else
+- rm -f "$nlist"T
+- fi
+-
+- # Make sure that we snagged all the symbols we need.
+- if grep ' nm_test_var$' "$nlist" >/dev/null; then
+- if grep ' nm_test_func$' "$nlist" >/dev/null; then
+- cat <<EOF > conftest.$ac_ext
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-EOF
+- # Now generate the symbol file.
+- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+-
+- cat <<EOF >> conftest.$ac_ext
+-#if defined (__STDC__) && __STDC__
+-# define lt_ptr_t void *
+-#else
+-# define lt_ptr_t char *
+-# define const
+-#endif
+-
+-/* The mapping between symbol names and symbols. */
+-const struct {
+- const char *name;
+- lt_ptr_t address;
+-}
+-lt_preloaded_symbols[[]] =
+-{
+-EOF
+- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+- cat <<\EOF >> conftest.$ac_ext
+- {0, (lt_ptr_t) 0}
+-};
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-EOF
+- # Now try linking the two files.
+- mv conftest.$ac_objext conftstm.$ac_objext
+- lt_save_LIBS="$LIBS"
+- lt_save_CFLAGS="$CFLAGS"
+- LIBS="conftstm.$ac_objext"
+- CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+- pipe_works=yes
+- fi
+- LIBS="$lt_save_LIBS"
+- CFLAGS="$lt_save_CFLAGS"
+- else
+- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+- fi
+- else
+- echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+- fi
+- else
+- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+- fi
+- else
+- echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+- cat conftest.$ac_ext >&5
+- fi
+- rm -f conftest* conftst*
+-
+- # Do not use the global_symbol_pipe unless it works.
+- if test "$pipe_works" = yes; then
+- break
+- else
+- lt_cv_sys_global_symbol_pipe=
+- fi
+-done
+-])
+-if test -z "$lt_cv_sys_global_symbol_pipe"; then
+- lt_cv_sys_global_symbol_to_cdecl=
+-fi
+-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+- AC_MSG_RESULT(failed)
+-else
+- AC_MSG_RESULT(ok)
+-fi
+-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+-
+-
+-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+-# ---------------------------------------
+-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+-
+-AC_MSG_CHECKING([for $compiler option to produce PIC])
+- ifelse([$1],[CXX],[
+- # C++ specific cases for pic, static, wl, etc.
+- if test "$GXX" = yes; then
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-
+- case $host_os in
+- aix*)
+- # All AIX code is PIC.
+- if test "$host_cpu" = ia64; then
+- # AIX 5 now supports IA64 processor
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- fi
+- ;;
+- amigaos*)
+- # FIXME: we need at least 68020 code to build shared libraries, but
+- # adding the `-m68020' flag to GCC prevents building anything better,
+- # like `-m68040'.
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+- ;;
+- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+- # PIC is the default for these OSes.
+- ;;
+- mingw* | os2* | pw32*)
+- # This hack is so that the source file can tell whether it is being
+- # built for inclusion in a dll (and should export symbols for example).
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+- ;;
+- darwin* | rhapsody*)
+- # PIC is the default on this platform
+- # Common symbols not allowed in MH_DYLIB files
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+- ;;
+- *djgpp*)
+- # DJGPP does not support shared libraries at all
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+- ;;
+- sysv4*MP*)
+- if test -d /usr/nec; then
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+- fi
+- ;;
+- hpux*)
+- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+- # not for PA HP-UX.
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+- ;;
+- esac
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+- ;;
+- esac
+- else
+- case $host_os in
+- aix4* | aix5*)
+- # All AIX code is PIC.
+- if test "$host_cpu" = ia64; then
+- # AIX 5 now supports IA64 processor
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- else
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+- fi
+- ;;
+- chorus*)
+- case $cc_basename in
+- cxch68)
+- # Green Hills C++ Compiler
+- # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+- ;;
+- esac
+- ;;
+- dgux*)
+- case $cc_basename in
+- ec++)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- ;;
+- ghcx)
+- # Green Hills C++ Compiler
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- freebsd* | kfreebsd*-gnu)
+- # FreeBSD uses GNU C++
+- ;;
+- hpux9* | hpux10* | hpux11*)
+- case $cc_basename in
+- CC)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+- if test "$host_cpu" != ia64; then
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+- fi
+- ;;
+- aCC)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- # +Z the default
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+- ;;
+- esac
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- irix5* | irix6* | nonstopux*)
+- case $cc_basename in
+- CC)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+- # CC pic flag -KPIC is the default.
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- linux*)
+- case $cc_basename in
+- KCC)
+- # KAI C++ Compiler
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+- ;;
+- icpc)
+- # Intel C++
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+- ;;
+- cxx)
+- # Compaq C++
+- # Make sure the PIC flag is empty. It appears that all Alpha
+- # Linux and Compaq Tru64 Unix objects are PIC.
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- lynxos*)
+- ;;
+- m88k*)
+- ;;
+- mvs*)
+- case $cc_basename in
+- cxx)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- netbsd*)
+- ;;
+- osf3* | osf4* | osf5*)
+- case $cc_basename in
+- KCC)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+- ;;
+- RCC)
+- # Rational C++ 2.4.1
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+- ;;
+- cxx)
+- # Digital/Compaq C++
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- # Make sure the PIC flag is empty. It appears that all Alpha
+- # Linux and Compaq Tru64 Unix objects are PIC.
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- psos*)
+- ;;
+- sco*)
+- case $cc_basename in
+- CC)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- solaris*)
+- case $cc_basename in
+- CC)
+- # Sun C++ 4.2, 5.x and Centerline C++
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+- ;;
+- gcx)
+- # Green Hills C++ Compiler
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- sunos4*)
+- case $cc_basename in
+- CC)
+- # Sun C++ 4.x
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- ;;
+- lcc)
+- # Lucid
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- tandem*)
+- case $cc_basename in
+- NCC)
+- # NonStop-UX NCC 3.20
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- ;;
+- *)
+- ;;
+- esac
+- ;;
+- unixware*)
+- ;;
+- vxworks*)
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+- ;;
+- esac
+- fi
+-],
+-[
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-
+- case $host_os in
+- aix*)
+- # All AIX code is PIC.
+- if test "$host_cpu" = ia64; then
+- # AIX 5 now supports IA64 processor
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- fi
+- ;;
+-
+- amigaos*)
+- # FIXME: we need at least 68020 code to build shared libraries, but
+- # adding the `-m68020' flag to GCC prevents building anything better,
+- # like `-m68040'.
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+- ;;
+-
+- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+- # PIC is the default for these OSes.
+- ;;
+-
+- mingw* | pw32* | os2*)
+- # This hack is so that the source file can tell whether it is being
+- # built for inclusion in a dll (and should export symbols for example).
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+- ;;
+-
+- darwin* | rhapsody*)
+- # PIC is the default on this platform
+- # Common symbols not allowed in MH_DYLIB files
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+- ;;
+-
+- msdosdjgpp*)
+- # Just because we use GCC doesn't mean we suddenly get shared libraries
+- # on systems that don't support them.
+- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+- enable_shared=no
+- ;;
+-
+- sysv4*MP*)
+- if test -d /usr/nec; then
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+- fi
+- ;;
+-
+- hpux*)
+- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+- # not for PA HP-UX.
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- # +Z the default
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+- ;;
+- esac
+- ;;
+-
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+- ;;
+- esac
+- else
+- # PORTME Check for flag to pass linker flags through the system compiler.
+- case $host_os in
+- aix*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- if test "$host_cpu" = ia64; then
+- # AIX 5 now supports IA64 processor
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- else
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+- fi
+- ;;
+-
+- mingw* | pw32* | os2*)
+- # This hack is so that the source file can tell whether it is being
+- # built for inclusion in a dll (and should export symbols for example).
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+- ;;
+-
+- hpux9* | hpux10* | hpux11*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+- # not for PA HP-UX.
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- # +Z the default
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+- ;;
+- esac
+- # Is there a better lt_prog_compiler_static that works with the bundled CC?
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+- ;;
+-
+- irix5* | irix6* | nonstopux*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- # PIC (with -KPIC) is the default.
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+- ;;
+-
+- newsos6)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- ;;
+-
+- linux*)
+- case $CC in
+- icc* | ecc*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+- ;;
+- ccc*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- # All Alpha code is PIC.
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+- ;;
+- esac
+- ;;
+-
+- osf3* | osf4* | osf5*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- # All OSF/1 code is PIC.
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+- ;;
+-
+- sco3.2v5*)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+- ;;
+-
+- solaris*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- ;;
+-
+- sunos4*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- ;;
+-
+- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- ;;
+-
+- sysv4*MP*)
+- if test -d /usr/nec ;then
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- fi
+- ;;
+-
+- uts4*)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+- ;;
+-
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+- ;;
+- esac
+- fi
+-])
+-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+-
+-#
+-# Check to make sure the PIC flag actually works.
+-#
+-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+- _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+- [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+- [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+- "" | " "*) ;;
+- *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+- esac],
+- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+-fi
+-case "$host_os" in
+- # For platforms which do not support PIC, -DPIC is meaningless:
+- *djgpp*)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+- ;;
+- *)
+- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+- ;;
+-esac
+-])
+-
+-
+-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+-# ------------------------------------
+-# See if the linker supports building shared libraries.
+-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+-[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+-ifelse([$1],[CXX],[
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- case $host_os in
+- aix4* | aix5*)
+- # If we're using GNU nm, then we don't want the "-C" option.
+- # -C means demangle to AIX nm, but means don't demangle with GNU nm
+- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+- else
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+- fi
+- ;;
+- pw32*)
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+- ;;
+- cygwin* | mingw*)
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
+- *)
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- ;;
+- esac
+-],[
+- runpath_var=
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+- _LT_AC_TAGVAR(archive_cmds, $1)=
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+- _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+- _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+- _LT_AC_TAGVAR(module_cmds, $1)=
+- _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+- _LT_AC_TAGVAR(always_export_symbols, $1)=no
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+- # include_expsyms should be a list of space-separated symbols to be *always*
+- # included in the symbol list
+- _LT_AC_TAGVAR(include_expsyms, $1)=
+- # exclude_expsyms can be an extended regexp of symbols to exclude
+- # it will be wrapped by ` (' and `)$', so one must not match beginning or
+- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+- # as well as any symbol that contains `d'.
+- _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+- # platforms (ab)use it in PIC code, but their linkers get confused if
+- # the symbol is explicitly referenced. Since portable code cannot
+- # rely on this symbol name, it's probably fine to never include it in
+- # preloaded symbol tables.
+- extract_expsyms_cmds=
+-
+- case $host_os in
+- cygwin* | mingw* | pw32*)
+- # FIXME: the MSVC++ port hasn't been tested in a loooong time
+- # When not using gcc, we currently assume that we are using
+- # Microsoft Visual C++.
+- if test "$GCC" != yes; then
+- with_gnu_ld=no
+- fi
+- ;;
+- openbsd*)
+- with_gnu_ld=no
+- ;;
+- esac
+-
+- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+- if test "$with_gnu_ld" = yes; then
+- # If archive_cmds runs LD, not CC, wlarc should be empty
+- wlarc='${wl}'
+-
+- # See if GNU ld supports shared libraries.
+- case $host_os in
+- aix3* | aix4* | aix5*)
+- # On AIX/PPC, the GNU linker is very broken
+- if test "$host_cpu" != ia64; then
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- cat <<EOF 1>&2
+-
+-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+-*** to be unable to reliably create shared libraries on AIX.
+-*** Therefore, libtool is disabling shared libraries support. If you
+-*** really care for shared libraries, you may want to modify your PATH
+-*** so that a non-GNU linker is found, and then restart.
+-
+-EOF
+- fi
+- ;;
+-
+- amigaos*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+-
+- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+- # that the semantics of dynamic libraries on AmigaOS, at least up
+- # to version 4, is to share data among multiple programs linked
+- # with the same dynamic library. Since this doesn't match the
+- # behavior of shared libraries on other platforms, we can't use
+- # them.
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+-
+- beos*)
+- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+- # support --undefined. This deserves some investigation. FIXME
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+-
+- cygwin* | mingw* | pw32*)
+- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+- # as there is no search path for DLLs.
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+- _LT_AC_TAGVAR(always_export_symbols, $1)=no
+- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+-
+- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+- # If the export-symbols file already is a .def file (1st line
+- # is EXPORTS), use it as is; otherwise, prepend...
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+- cp $export_symbols $output_objdir/$soname.def;
+- else
+- echo EXPORTS > $output_objdir/$soname.def;
+- cat $export_symbols >> $output_objdir/$soname.def;
+- fi~
+- $CC -shared $output_objdir/$soname.def $compiler_flags $libobjs $deplibs -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+- else
+- ld_shlibs=no
+- fi
+- ;;
+-
+- netbsd*)
+- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+- wlarc=
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+- fi
+- ;;
+-
+- solaris* | sysv5*)
+- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- cat <<EOF 1>&2
+-
+-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+-*** create shared libraries on Solaris systems. Therefore, libtool
+-*** is disabling shared libraries support. We urge you to upgrade GNU
+-*** binutils to release 2.9.1 or newer. Another option is to modify
+-*** your PATH or compiler configuration so that the native linker is
+-*** used, and then restart.
+-
+-EOF
+- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+-
+- sunos4*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+- wlarc=
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- *)
+- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+- esac
+-
+- if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+- runpath_var=LD_RUN_PATH
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+- # ancient GNU ld didn't support --whole-archive et. al.
+- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+- else
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+- fi
+- fi
+- else
+- # PORTME fill in a description of your system's linker (not GNU ld)
+- case $host_os in
+- aix3*)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+- # Note: this linker hardcodes the directories in LIBPATH if there
+- # are no directories specified by -L.
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- if test "$GCC" = yes && test -z "$link_static_flag"; then
+- # Neither direct hardcoding nor static linking is supported with a
+- # broken collect2.
+- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+- fi
+- ;;
+-
+- aix4* | aix5*)
+- if test "$host_cpu" = ia64; then
+- # On IA64, the linker does run time linking by default, so we don't
+- # have to do anything special.
+- aix_use_runtimelinking=no
+- exp_sym_flag='-Bexport'
+- no_entry_flag=""
+- else
+- # If we're using GNU nm, then we don't want the "-C" option.
+- # -C means demangle to AIX nm, but means don't demangle with GNU nm
+- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+- else
+- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+- fi
+-
+- # KDE requires run time linking. Make it the default.
+- aix_use_runtimelinking=yes
+- exp_sym_flag='-bexport'
+- no_entry_flag='-bnoentry'
+- fi
+-
+- # When large executables or shared objects are built, AIX ld can
+- # have problems creating the table of contents. If linking a library
+- # or program results in "error TOC overflow" add -mminimal-toc to
+- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+-
+- _LT_AC_TAGVAR(archive_cmds, $1)=''
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+-
+- if test "$GCC" = yes; then
+- case $host_os in aix4.[012]|aix4.[012].*)
+- # We only want to do this on AIX 4.2 and lower, the check
+- # below for broken collect2 doesn't work under 4.3+
+- collect2name=`${CC} -print-prog-name=collect2`
+- if test -f "$collect2name" && \
+- strings "$collect2name" | grep resolve_lib_name >/dev/null
+- then
+- # We have reworked collect2
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- else
+- # We have old collect2
+- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+- # It fails to find uninstalled libraries when the uninstalled
+- # path is not listed in the libpath. Setting hardcode_minus_L
+- # to unsupported forces relinking
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+- fi
+- esac
+- shared_flag='-shared'
+- else
+- # not using gcc
+- if test "$host_cpu" = ia64; then
+- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+- # chokes on -Wl,-G. The following line is correct:
+- shared_flag='-G'
+- else
+- if test "$aix_use_runtimelinking" = yes; then
+- shared_flag='-qmkshrobj ${wl}-G'
+- else
+- shared_flag='-qmkshrobj'
+- fi
+- fi
+- fi
+-
+- # Let the compiler handle the export list.
+- _LT_AC_TAGVAR(always_export_symbols, $1)=no
+- if test "$aix_use_runtimelinking" = yes; then
+- # Warning - without using the other runtime loading flags (-brtl),
+- # -berok will link without error, but may produce a broken library.
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+- # Determine the default libpath from the value encoded in an empty executable.
+- _LT_AC_SYS_LIBPATH_AIX
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag"
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+- else
+- if test "$host_cpu" = ia64; then
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+- else
+- # Determine the default libpath from the value encoded in an empty executable.
+- _LT_AC_SYS_LIBPATH_AIX
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+- # Warning - without using the other run time loading flags,
+- # -berok will link without error, but may produce a broken library.
+- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+- # -bexpall does not export symbols beginning with underscore (_)
+- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+- # Exported symbols can be pulled into shared objects from archives
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+- # This is similar to how AIX traditionally builds it's shared libraries.
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+- fi
+- fi
+- ;;
+-
+- amigaos*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- # see comment about different semantics on the GNU ld section
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+-
+- bsdi4*)
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+- ;;
+-
+- cygwin* | mingw* | pw32*)
+- # When not using gcc, we currently assume that we are using
+- # Microsoft Visual C++.
+- # hardcode_libdir_flag_spec is actually meaningless, as there is
+- # no search path for DLLs.
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+- # Tell ltmain to make .lib files, not .a files.
+- libext=lib
+- # Tell ltmain to make .dll files, not .so files.
+- shrext=".dll"
+- # FIXME: Setting linknames here is a bad hack.
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $compiler_flags $libobjs `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+- # The linker will automatically build a .lib file if we build a DLL.
+- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+- # FIXME: Should let the user specify the lib program.
+- _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+- fix_srcfile_path='`cygpath -w "$srcfile"`'
+- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+- ;;
+-
+- darwin* | rhapsody*)
+- if test "$GXX" = yes ; then
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- case "$host_os" in
+- rhapsody* | darwin1.[[012]])
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress'
+- ;;
+- *) # Darwin 1.3 on
+- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+- else
+- case ${MACOSX_DEPLOYMENT_TARGET} in
+- 10.[012])
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+- ;;
+- 10.*)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup'
+- ;;
+- esac
+- fi
+- ;;
+- esac
+- lt_int_apple_cc_single_mod=no
+- output_verbose_link_cmd='echo'
+- if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+- lt_int_apple_cc_single_mod=yes
+- fi
+- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring'
+- fi
+- _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs'
+- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- else
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- fi
+- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+- else
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- fi
+- ;;
+-
+- dgux*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- freebsd1*)
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+-
+- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+- # support. Future versions do this automatically, but an explicit c++rt0.o
+- # does not break anything, and helps significantly (at the cost of a little
+- # extra space).
+- freebsd2.2*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+- freebsd* | kfreebsd*-gnu)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $compiler_flags $libobjs $deplibs'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- hpux9*)
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $libobjs $deplibs~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+-
+- # hardcode_minus_L: Not really in the search PATH,
+- # but as the default location of the library.
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+- ;;
+-
+- hpux10* | hpux11*)
+- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+- ;;
+- *)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $libobjs $deplibs'
+- ;;
+- esac
+- else
+- case "$host_cpu" in
+- hppa*64*|ia64*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+- ;;
+- *)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+- ;;
+- esac
+- fi
+- if test "$with_gnu_ld" = no; then
+- case "$host_cpu" in
+- hppa*64*)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+- ia64*)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+-
+- # hardcode_minus_L: Not really in the search PATH,
+- # but as the default location of the library.
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- ;;
+- *)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-
+- # hardcode_minus_L: Not really in the search PATH,
+- # but as the default location of the library.
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- ;;
+- esac
+- fi
+- ;;
+-
+- irix5* | irix6* | nonstopux*)
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+- ;;
+-
+- netbsd*)
+- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- newsos6)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- openbsd*)
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+- else
+- case $host_os in
+- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- ;;
+- *)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+- ;;
+- esac
+- fi
+- ;;
+-
+- os2*)
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+- _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $compiler_flags $libobjs $deplibs$output_objdir/$libname.def'
+- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+- ;;
+-
+- osf3*)
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $libobjs $deplibs ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+- else
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- ;;
+-
+- osf4* | osf5*) # as osf3* with the addition of -msym flag
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $libobjs $deplibs ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+- else
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+-
+- # Both c and cxx compiler support -rpath directly
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+- ;;
+-
+- sco3.2v5*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+- runpath_var=LD_RUN_PATH
+- hardcode_runpath_var=yes
+- ;;
+-
+- solaris*)
+- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs~$rm $lib.exp'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- case $host_os in
+- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+- *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+- esac
+- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+- ;;
+-
+- sunos4*)
+- if test "x$host_vendor" = xsequent; then
+- # Use $CC to link under sequent, because it throws in some extra .o
+- # files that make .init and .fini sections work.
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $compiler_flags $libobjs $deplibs'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+- fi
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- sysv4)
+- case $host_vendor in
+- sni)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+- ;;
+- siemens)
+- ## LD is ld it makes a PLAMLIB
+- ## CC just makes a GrossModule.
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no
+- ;;
+- motorola)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+- ;;
+- esac
+- runpath_var='LD_RUN_PATH'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- sysv4.3*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+- ;;
+-
+- sysv4*MP*)
+- if test -d /usr/nec; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- runpath_var=LD_RUN_PATH
+- hardcode_runpath_var=yes
+- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+- fi
+- ;;
+-
+- sysv4.2uw2*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- hardcode_runpath_var=yes
+- runpath_var=LD_RUN_PATH
+- ;;
+-
+- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+- if test "$GCC" = yes; then
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+- else
+- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+- fi
+- runpath_var='LD_RUN_PATH'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- sysv5*)
+- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+- # $CC -shared without GNU ld will not create a library from C++
+- # object files and a static libstdc++, better avoid it by now
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- runpath_var='LD_RUN_PATH'
+- ;;
+-
+- uts4*)
+- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+- ;;
+-
+- *)
+- _LT_AC_TAGVAR(ld_shlibs, $1)=no
+- ;;
+- esac
+- fi
+-])
+-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+-if test "$GCC" = yes; then
+- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+-fi
+-
+-#
+-# Do we need to explicitly link libc?
+-#
+-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+-x|xyes)
+- # Assume -lc should be added
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+-
+- if test "$enable_shared" = yes && test "$GCC" = yes; then
+- case $_LT_AC_TAGVAR(archive_cmds, $1) in
+- *'~'*)
+- # FIXME: we may have to deal with multi-command sequences.
+- ;;
+- '$CC '*)
+- # Test whether the compiler implicitly links with -lc since on some
+- # systems, -lgcc has to come before -lc. If gcc already passes -lc
+- # to ld, don't add -lc before -lgcc.
+- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+- $rm conftest*
+- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+- if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+- soname=conftest
+- lib=conftest
+- libobjs=conftest.$ac_objext
+- deplibs=
+- wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+- compiler_flags=-v
+- linker_flags=-v
+- verstring=
+- output_objdir=.
+- libname=conftest
+- lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+- if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+- then
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+- else
+- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+- fi
+- _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+- else
+- cat conftest.err 1>&5
+- fi
+- $rm conftest*
+- AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+- ;;
+- esac
+- fi
+- ;;
+-esac
+-])# AC_LIBTOOL_PROG_LD_SHLIBS
+-
+-
+-# _LT_AC_FILE_LTDLL_C
+-# -------------------
+-# Be careful that the start marker always follows a newline.
+-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+-# /* ltdll.c starts here */
+-# #define WIN32_LEAN_AND_MEAN
+-# #include <windows.h>
+-# #undef WIN32_LEAN_AND_MEAN
+-# #include <stdio.h>
+-#
+-# #ifndef __CYGWIN__
+-# # ifdef __CYGWIN32__
+-# # define __CYGWIN__ __CYGWIN32__
+-# # endif
+-# #endif
+-#
+-# #ifdef __cplusplus
+-# extern "C" {
+-# #endif
+-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+-# #ifdef __cplusplus
+-# }
+-# #endif
+-#
+-# #ifdef __CYGWIN__
+-# #include <cygwin/cygwin_dll.h>
+-# DECLARE_CYGWIN_DLL( DllMain );
+-# #endif
+-# HINSTANCE __hDllInstance_base;
+-#
+-# BOOL APIENTRY
+-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+-# {
+-# __hDllInstance_base = hInst;
+-# return TRUE;
+-# }
+-# /* ltdll.c ends here */
+-])# _LT_AC_FILE_LTDLL_C
+-
+-
+-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+-# ---------------------------------
+-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+-
+-
+-# old names
+-AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+-AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+-AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+-AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+-AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+-
+-# This is just to silence aclocal about the macro not being used
+-ifelse([AC_DISABLE_FAST_INSTALL])
+-
+-AC_DEFUN([LT_AC_PROG_GCJ],
+-[AC_CHECK_TOOL(GCJ, gcj, no)
+- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+- AC_SUBST(GCJFLAGS)
+-])
+-
+-AC_DEFUN([LT_AC_PROG_RC],
+-[AC_CHECK_TOOL(RC, windres, no)
+-])
+-
+-############################################################
+-# NOTE: This macro has been submitted for inclusion into #
+-# GNU Autoconf as AC_PROG_SED. When it is available in #
+-# a released version of Autoconf we should remove this #
+-# macro and use it instead. #
+-############################################################
+-# LT_AC_PROG_SED
+-# --------------
+-# Check for a fully-functional sed program, that truncates
+-# as few characters as possible. Prefer GNU sed if found.
+-AC_DEFUN([LT_AC_PROG_SED],
+-[AC_MSG_CHECKING([for a sed that does not truncate output])
+-AC_CACHE_VAL(lt_cv_path_SED,
+-[# Loop through the user's path and test for sed and gsed.
+-# Then use that list of sed's as ones to test for truncation.
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for lt_ac_prog in sed gsed; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+- fi
+- done
+- done
+-done
+-lt_ac_max=0
+-lt_ac_count=0
+-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+-# along with /bin/sed that truncates output.
+-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+- test ! -f $lt_ac_sed && break
+- cat /dev/null > conftest.in
+- lt_ac_count=0
+- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+- # Check for GNU sed and select it if it is found.
+- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+- lt_cv_path_SED=$lt_ac_sed
+- break
+- fi
+- while true; do
+- cat conftest.in conftest.in >conftest.tmp
+- mv conftest.tmp conftest.in
+- cp conftest.in conftest.nl
+- echo >>conftest.nl
+- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+- cmp -s conftest.out conftest.nl || break
+- # 10000 chars as input seems more than enough
+- test $lt_ac_count -gt 10 && break
+- lt_ac_count=`expr $lt_ac_count + 1`
+- if test $lt_ac_count -gt $lt_ac_max; then
+- lt_ac_max=$lt_ac_count
+- lt_cv_path_SED=$lt_ac_sed
+- fi
+- done
+-done
+-])
+-SED=$lt_cv_path_SED
+-AC_MSG_RESULT([$SED])
+-])
diff --git a/packages/konqueror/konqueror-embedded_20070316.bb b/packages/konqueror/konqueror-embedded_20070316.bb
index 83b5ab40a3..e8c0a5e296 100644
--- a/packages/konqueror/konqueror-embedded_20070316.bb
+++ b/packages/konqueror/konqueror-embedded_20070316.bb
@@ -4,7 +4,7 @@ PRIORITY = "optional"
HOMEPAGE = "http://www.konqueror.org/"
DEPENDS = "openssl libpcre virtual/libqte2 dcopidl-native dcopidl2cpp-native"
LICENSE = "LGPL GPL"
-PR = "r6"
+PR = "r7"
# this Konqueror needs the KDEDIR set and the font helvetica installed on the target
@@ -14,7 +14,10 @@ SRC_URI = "http://www.basyskom.de/uploads/175/37/kdenox_snapshot_qt2_20070316.ta
file://dont-use-kde-config.patch;patch=1 \
file://konqe_new_opie.patch;patch=1 \
file://konqe-kapplication.patch;patch=1 \
- file://fix_configure.patch;patch=1"
+ file://fix_configure.patch;patch=1 \
+ file://fix_acinclude.patch;patch=1 \
+ file://fix_KDE_LDPATH_HACK.patch;patch=1 \
+ "
S = "${WORKDIR}/kdenox"
export QMAKE = "${STAGING_BINDIR_NATIVE}/qmake"
diff --git a/packages/krb/krb5_1.6.3.bb b/packages/krb/krb5_1.6.3.bb
index b13e5f15b1..5fc75b4c7e 100644
--- a/packages/krb/krb5_1.6.3.bb
+++ b/packages/krb/krb5_1.6.3.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "A network authentication protocol"
HOMEPAGE = "http://web.mit.edu/Kerberos/"
SECTION = "console/network"
-PR = "r4"
+PR = "r5"
LICENSE = "MIT"
DEPENDS = "perl-native ncurses e2fsprogs-libs"
@@ -20,9 +20,17 @@ LDFLAGS_append += "-lpthread"
FILES_${PN}-doc += /usr/share/examples
-do_configure() {
+krb5_do_unpack() {
tar xzf ${WORKDIR}/krb5-1.6.3.tar.gz -C ${WORKDIR}/
- patch -p1 < ${WORKDIR}/fix-uclibc-ruserpass-collision.patch
+ patch -d ${S} -p1 < ${WORKDIR}/fix-uclibc-ruserpass-collision.patch
+}
+
+python do_unpack() {
+ bb.build.exec_func('base_do_unpack', d)
+ bb.build.exec_func('krb5_do_unpack', d)
+}
+
+do_configure() {
oe_runconf
}
diff --git a/packages/libcap/libcap2-2.16/make.patch b/packages/libcap/libcap2-2.16/make.patch
new file mode 100644
index 0000000000..3672f77c63
--- /dev/null
+++ b/packages/libcap/libcap2-2.16/make.patch
@@ -0,0 +1,23 @@
+--- libcap-2.16/Make.Rules.orig 2009-03-07 18:50:23.000000000 +0100
++++ libcap-2.16/Make.Rules 2009-03-07 18:50:44.000000000 +0100
+@@ -45,19 +45,12 @@
+ KERNEL_HEADERS := $(topdir)/libcap/include
+ IPATH += -I$(topdir)/libcap/include -I$(KERNEL_HEADERS)
+
+-CC := gcc
+-CFLAGS := -O2
+-BUILD_CC := $(CC)
+-BUILD_CFLAGS := $(CFLAGS) $(IPATH)
+-AR := ar
+-RANLIB := ranlib
++LD=$(CC) -Wl,-x -shared
+ DEBUG = -g #-DDEBUG
+ WARNINGS=-fPIC -Wall -Wwrite-strings \
+ -Wpointer-arith -Wcast-qual -Wcast-align \
+ -Wstrict-prototypes -Wmissing-prototypes \
+ -Wnested-externs -Winline -Wshadow
+-LD=$(CC) -Wl,-x -shared
+-LDFLAGS := #-g
+
+ SYSTEM_HEADERS = /usr/include
+ INCS=$(topdir)/libcap/include/sys/capability.h
diff --git a/packages/libcap/libcap2_2.16.bb b/packages/libcap/libcap2_2.16.bb
new file mode 100644
index 0000000000..8c9803d392
--- /dev/null
+++ b/packages/libcap/libcap2_2.16.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "Libcap is a library for getting and setting POSIX.1e (formerly POSIX 6) draft 15 capabilities."
+PRIORITY = "optional"
+SECTION = "libs"
+LICENSE = "GPL"
+DEPENDS = "bison-native flex-native libattr"
+PR = "r0"
+
+CFLAGS_append = " -I${S}/libcap/include"
+LDFLAGS_prepend = "-L../libcap"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/security/linux-privs/libcap2/libcap-${PV}.tar.bz2 \
+ file://make.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/libcap-${PV}"
+
+FILES_${PN} = "${libdir}"
+FILES_${PN}-dev = "${includedir}"
+
+do_install() {
+ install -d ${D}${includedir}/sys
+ install -m 0644 libcap/include/sys/capability.h ${D}${includedir}/sys/
+ install -d ${D}${libdir}
+ oe_libinstall -s -C libcap libcap ${D}${libdir}
+}
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/sys
+ install -m 0644 libcap/include/sys/capability.h ${STAGING_INCDIR}/sys/
+ oe_libinstall -s -C libcap libcap ${STAGING_LIBDIR}
+}
diff --git a/packages/libdaemon/libdaemon_0.10.bb b/packages/libdaemon/libdaemon_0.10.bb
deleted file mode 100644
index ba7140ffdb..0000000000
--- a/packages/libdaemon/libdaemon_0.10.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-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 = "r1"
-
-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/libdaemon/libdaemon_0.11.bb b/packages/libdaemon/libdaemon_0.11.bb
deleted file mode 100644
index c91f6351ff..0000000000
--- a/packages/libdaemon/libdaemon_0.11.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-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/libdaemon/libdaemon_0.12.bb b/packages/libdaemon/libdaemon_0.12.bb
deleted file mode 100644
index c91f6351ff..0000000000
--- a/packages/libdaemon/libdaemon_0.12.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-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/libdaemon/libdaemon_0.13.bb b/packages/libdaemon/libdaemon_0.13.bb
new file mode 100644
index 0000000000..3a6b2051d5
--- /dev/null
+++ b/packages/libdaemon/libdaemon_0.13.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdaemon is a lightweight C library that 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_stage pkgconfig
+
+EXTRA_OECONF = "--disable-lynx --disable-doxygen"
diff --git a/packages/libdaemon/libdaemon_0.6.bb b/packages/libdaemon/libdaemon_0.6.bb
deleted file mode 100644
index bdf52503c0..0000000000
--- a/packages/libdaemon/libdaemon_0.6.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-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 = "GPLv2"
-
-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 src libdaemon ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/libdaemon
- for i in dlog.h dexec.h dfork.h dsignal.h dnonblock.h dpid.h; do
- install -m 0644 ${S}/src/$i ${STAGING_INCDIR}/libdaemon/
- done
-}
diff --git a/packages/libgc/libgc_7.1.bb b/packages/libgc/libgc_7.1.bb
new file mode 100644
index 0000000000..8078407e9b
--- /dev/null
+++ b/packages/libgc/libgc_7.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Garbage collector for C and C++"
+LICENSE = "As is"
+HOMEPAGE = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/"
+
+SRC_URI = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-${PV}.tar.gz"
+
+inherit autotools_stage
+
+S = "${WORKDIR}/gc-${PV}"
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
+LEAD_SONAME = "libgc.so.1"
+
+FILES_${PN}-doc += "${datadir}/gc/"
+
diff --git a/packages/libnetfilter-queue/libnetfilter-queue.inc b/packages/libnetfilter-queue/libnetfilter-queue.inc
new file mode 100644
index 0000000000..96ec16c330
--- /dev/null
+++ b/packages/libnetfilter-queue/libnetfilter-queue.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "libnetfilter_queue is a userspace library providing an API to \
+packets that have been queued by the kernel packet filter. It is is part of a \
+system that deprecates the old ip_queue / libipq mechanism."
+
+SECTION = "devel/libs"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.netfilter.org/projects/libnetfilter_queue/index.html"
+PR = "r0"
+
+
+DEPENDS = "libnfnetlink"
+
+SRC_URI = "http://www.netfilter.org/projects/libnetfilter_queue/files/libnetfilter_queue-${PV}.tar.bz2"
+
+S = "${WORKDIR}/libnetfilter_queue-${PV}"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/libnetfilter-queue/libnetfilter-queue_0.0.13.bb b/packages/libnetfilter-queue/libnetfilter-queue_0.0.13.bb
index 97af3a7da5..044777c0ce 100644
--- a/packages/libnetfilter-queue/libnetfilter-queue_0.0.13.bb
+++ b/packages/libnetfilter-queue/libnetfilter-queue_0.0.13.bb
@@ -1,30 +1,2 @@
-DESCRIPTION = "libnetfilter_queue is a userspace library providing an API to \
-packets that have been queued by the kernel packet filter. It is is part of a \
-system that deprecates the old ip_queue / libipq mechanism."
-
-SECTION = "devel/libs"
-LICENSE = "GPL"
-HOMEPAGE = "http://www.netfilter.org/projects/libnetfilter_queue/index.html"
-PR = "r0"
-
-
-# This package requires libtool-cross-1.5.24 which is not the default libtool
-# used by OE (25AUG2007)
-DEPENDS = "libnfnetlink libtool-cross (>=1.5.24)"
-
-SRC_URI = "http://www.netfilter.org/projects/libnetfilter_queue/files/libnetfilter_queue-${PV}.tar.bz2"
-
-S = "${WORKDIR}/libnetfilter_queue-${PV}"
-
-inherit autotools pkgconfig
-
-do_configure() {
- gnu-configize
- libtoolize --force
- oe_runconf
-}
-
-do_stage() {
- autotools_stage_all
-}
+include libnetfilter-queue.inc
diff --git a/packages/libnetfilter-queue/libnetfilter-queue_0.0.16.bb b/packages/libnetfilter-queue/libnetfilter-queue_0.0.16.bb
new file mode 100644
index 0000000000..044777c0ce
--- /dev/null
+++ b/packages/libnetfilter-queue/libnetfilter-queue_0.0.16.bb
@@ -0,0 +1,2 @@
+include libnetfilter-queue.inc
+
diff --git a/packages/libnfnetlink/libnfnetlink_0.0.39.bb b/packages/libnfnetlink/libnfnetlink_0.0.39.bb
new file mode 100644
index 0000000000..a17a198961
--- /dev/null
+++ b/packages/libnfnetlink/libnfnetlink_0.0.39.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/libnl/files/fix-includes.patch b/packages/libnl/files/fix-includes.patch
new file mode 100644
index 0000000000..b172fd2f86
--- /dev/null
+++ b/packages/libnl/files/fix-includes.patch
@@ -0,0 +1,13 @@
+diff -ruN libnl-1.1/lib/route/link/vlan.c libnl-1.1-new/lib/route/link/vlan.c
+--- libnl-1.1/lib/route/link/vlan.c 2008-01-14 18:48:45.000000000 +0300
++++ libnl-1.1-new/lib/route/link/vlan.c 2009-01-30 10:55:09.000000000 +0300
+@@ -26,7 +26,9 @@
+ #include <netlink/route/link/info-api.h>
+ #include <netlink/route/link/vlan.h>
+
++#ifndef VLAN_FLAG_REORDER_HDR
+ #include <linux/if_vlan.h>
++#endif
+
+ /** @cond SKIP */
+ #define VLAN_HAS_ID (1<<0)
diff --git a/packages/libnl/libnl_1.1.bb b/packages/libnl/libnl_1.1.bb
index 51f4c4385b..dcca3c6e92 100644
--- a/packages/libnl/libnl_1.1.bb
+++ b/packages/libnl/libnl_1.1.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "libnl is a library for applications dealing with netlink sockets"
SECTION = "libs/network"
LICENSE = "LGPL"
HOMEPAGE = "http://people.suug.ch/~tgr/libnl"
+PR = "r1"
inherit autotools pkgconfig
@@ -10,6 +11,7 @@ CFLAGS += '-DVLAN_FLAG_REORDER_HDR=1'
SRC_URI = "\
http://people.suug.ch/~tgr/libnl/files/libnl-${PV}.tar.gz \
file://local-includes-and-avoid-wrong-ldflags.patch;patch=1 \
+ file://fix-includes.patch;patch=1 \
"
do_stage () {
diff --git a/packages/libpcap/libpcap-1.0.0/aclocal.patch b/packages/libpcap/libpcap-1.0.0/aclocal.patch
new file mode 100644
index 0000000000..29cd275d58
--- /dev/null
+++ b/packages/libpcap/libpcap-1.0.0/aclocal.patch
@@ -0,0 +1,156 @@
+diff -Naru libpcap-0.9.7.orig/aclocal.m4 libpcap-0.9.7/acinclude.m4
+--- libpcap-0.9.7.orig/aclocal.m4 2007-09-16 01:19:51.000000000 +0200
++++ libpcap-0.9.7/aclocal.m4 2007-09-16 02:45:52.000000000 +0200
+@@ -42,7 +42,7 @@
+ dnl ac_cv_lbl_gcc_vers
+ dnl LBL_CFLAGS
+ dnl
+-AC_DEFUN(AC_LBL_C_INIT,
++AC_DEFUN([AC_LBL_C_INIT],
+ [AC_PREREQ(2.12)
+ AC_BEFORE([$0], [AC_PROG_CC])
+ AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
+@@ -169,7 +169,7 @@
+ # Make sure we use the V_CCOPT flags, because some of those might
+ # disable inlining.
+ #
+-AC_DEFUN(AC_LBL_C_INLINE,
++AC_DEFUN([AC_LBL_C_INLINE],
+ [AC_MSG_CHECKING(for inline)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$V_CCOPT"
+@@ -225,7 +225,7 @@
+ dnl LIBS
+ dnl LBL_LIBS
+ dnl
+-AC_DEFUN(AC_LBL_LIBPCAP,
++AC_DEFUN([AC_LBL_LIBPCAP],
+ [AC_REQUIRE([AC_LBL_LIBRARY_NET])
+ dnl
+ dnl save a copy before locating libpcap.a
+@@ -293,7 +293,7 @@
+ dnl RETSIGTYPE (defined)
+ dnl RETSIGVAL (defined)
+ dnl
+-AC_DEFUN(AC_LBL_TYPE_SIGNAL,
++AC_DEFUN([AC_LBL_TYPE_SIGNAL],
+ [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
+ AC_TYPE_SIGNAL
+ if test "$ac_cv_type_signal" = void ; then
+@@ -323,7 +323,7 @@
+ dnl
+ dnl AC_LBL_FIXINCLUDES
+ dnl
+-AC_DEFUN(AC_LBL_FIXINCLUDES,
++AC_DEFUN([AC_LBL_FIXINCLUDES],
+ [if test "$GCC" = yes ; then
+ AC_MSG_CHECKING(for ANSI ioctl definitions)
+ AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
+@@ -369,7 +369,7 @@
+ dnl $2 (yacc appended)
+ dnl $3 (optional flex and bison -P prefix)
+ dnl
+-AC_DEFUN(AC_LBL_LEX_AND_YACC,
++AC_DEFUN([AC_LBL_LEX_AND_YACC],
+ [AC_ARG_WITH(flex, [ --without-flex don't use flex])
+ AC_ARG_WITH(bison, [ --without-bison don't use bison])
+ if test "$with_flex" = no ; then
+@@ -422,7 +422,7 @@
+ dnl
+ dnl DECLWAITSTATUS (defined)
+ dnl
+-AC_DEFUN(AC_LBL_UNION_WAIT,
++AC_DEFUN([AC_LBL_UNION_WAIT],
+ [AC_MSG_CHECKING(if union wait is used)
+ AC_CACHE_VAL(ac_cv_lbl_union_wait,
+ AC_TRY_COMPILE([
+@@ -451,7 +451,7 @@
+ dnl
+ dnl HAVE_SOCKADDR_SA_LEN (defined)
+ dnl
+-AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
++AC_DEFUN([AC_LBL_SOCKADDR_SA_LEN],
+ [AC_MSG_CHECKING(if sockaddr struct has sa_len member)
+ AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
+ AC_TRY_COMPILE([
+@@ -476,7 +476,7 @@
+ dnl
+ dnl HAVE_SOCKADDR_STORAGE (defined)
+ dnl
+-AC_DEFUN(AC_LBL_SOCKADDR_STORAGE,
++AC_DEFUN([AC_LBL_SOCKADDR_STORAGE],
+ [AC_MSG_CHECKING(if sockaddr_storage struct exists)
+ AC_CACHE_VAL(ac_cv_lbl_has_sockaddr_storage,
+ AC_TRY_COMPILE([
+@@ -509,7 +509,7 @@
+ dnl won't be using code that would use that member, or we wouldn't
+ dnl compile in any case).
+ dnl
+-AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1,
++AC_DEFUN([AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1],
+ [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member)
+ AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1,
+ AC_TRY_COMPILE([
+@@ -535,7 +535,7 @@
+ dnl
+ dnl ac_cv_lbl_have_run_path (yes or no)
+ dnl
+-AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
++AC_DEFUN([AC_LBL_HAVE_RUN_PATH],
+ [AC_MSG_CHECKING(for ${CC-cc} -R)
+ AC_CACHE_VAL(ac_cv_lbl_have_run_path,
+ [echo 'main(){}' > conftest.c
+@@ -561,7 +561,7 @@
+ dnl int32_t (defined)
+ dnl u_int32_t (defined)
+ dnl
+-AC_DEFUN(AC_LBL_CHECK_TYPE,
++AC_DEFUN([AC_LBL_CHECK_TYPE],
+ [AC_MSG_CHECKING(for $1 using $CC)
+ AC_CACHE_VAL(ac_cv_lbl_have_$1,
+ AC_TRY_COMPILE([
+@@ -590,7 +590,7 @@
+ dnl
+ dnl LBL_ALIGN (DEFINED)
+ dnl
+-AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
++AC_DEFUN([AC_LBL_UNALIGNED_ACCESS],
+ [AC_MSG_CHECKING(if unaligned accesses fail)
+ AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
+ [case "$host_cpu" in
+@@ -695,7 +695,7 @@
+ dnl HAVE_OS_PROTO_H (defined)
+ dnl os-proto.h (symlinked)
+ dnl
+-AC_DEFUN(AC_LBL_DEVEL,
++AC_DEFUN([AC_LBL_DEVEL],
+ [rm -f os-proto.h
+ if test "${LBL_CFLAGS+set}" = set; then
+ $1="$$1 ${LBL_CFLAGS}"
+@@ -825,7 +825,7 @@
+ dnl statically and happen to have a libresolv.a lying around (and no
+ dnl libnsl.a).
+ dnl
+-AC_DEFUN(AC_LBL_LIBRARY_NET, [
++AC_DEFUN([AC_LBL_LIBRARY_NET], [
+ # Most operating systems have gethostbyname() in the default searched
+ # libraries (i.e. libc):
+ # Some OSes (eg. Solaris) place it in libnsl
+@@ -848,7 +848,7 @@
+ dnl Test for __attribute__
+ dnl
+
+-AC_DEFUN(AC_C___ATTRIBUTE__, [
++AC_DEFUN([AC_C___ATTRIBUTE__], [
+ AC_MSG_CHECKING(for __attribute__)
+ AC_CACHE_VAL(ac_cv___attribute__, [
+ AC_COMPILE_IFELSE(
+@@ -886,7 +886,7 @@
+ dnl
+ dnl -Scott Barron
+ dnl
+-AC_DEFUN(AC_LBL_TPACKET_STATS,
++AC_DEFUN([AC_LBL_TPACKET_STATS],
+ [AC_MSG_CHECKING(if if_packet.h has tpacket_stats defined)
+ AC_CACHE_VAL(ac_cv_lbl_tpacket_stats,
+ AC_TRY_COMPILE([
diff --git a/packages/libpcap/libpcap-1.0.0/ieee80215-arphrd.patch b/packages/libpcap/libpcap-1.0.0/ieee80215-arphrd.patch
new file mode 100644
index 0000000000..f29c7cb54c
--- /dev/null
+++ b/packages/libpcap/libpcap-1.0.0/ieee80215-arphrd.patch
@@ -0,0 +1,22 @@
+Index: libpcap-1.0.0/pcap-linux.c
+===================================================================
+--- libpcap-1.0.0.orig/pcap-linux.c 2009-01-28 11:58:54.000000000 +0300
++++ libpcap-1.0.0/pcap-linux.c 2009-01-28 11:59:04.000000000 +0300
+@@ -1616,6 +1616,17 @@
+ * so let's use "Linux-cooked" mode. Jean II */
+ //handle->md.cooked = 1;
+ break;
++#ifndef ARPHRD_IEEE80215
++#define ARPHRD_IEEE80215 804
++#endif
++#ifndef ARPHRD_IEEE80215_PHY
++#define ARPHRD_IEEE80215_PHY 805
++#endif
++
++ case ARPHRD_IEEE80215:
++ case ARPHRD_IEEE80215_PHY:
++ handle->linktype = DLT_IEEE802_15_4;
++ break;
+
+ /* ARPHRD_LAPD is unofficial and randomly allocated, if reallocation
+ * is needed, please report it to <daniele@orlandi.com> */
diff --git a/packages/libpcap/libpcap-1.0.0/shared.patch b/packages/libpcap/libpcap-1.0.0/shared.patch
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libpcap/libpcap-1.0.0/shared.patch
diff --git a/packages/libpcap/libpcap.inc b/packages/libpcap/libpcap.inc
index f2e5d3072b..4468a4b89e 100644
--- a/packages/libpcap/libpcap.inc
+++ b/packages/libpcap/libpcap.inc
@@ -2,7 +2,9 @@ DESCRIPTION = "Network Packet Capture Library"
HOMEPAGE = "http://www.tcpdump.org/"
SECTION = "libs/network"
LICENSE = "BSD"
-DEPENDS = "flex-native bison-native"
+DEPENDS = "bluez-libs flex-native bison-native"
+
+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 \
diff --git a/packages/libpcap/libpcap_1.0.0.bb b/packages/libpcap/libpcap_1.0.0.bb
new file mode 100644
index 0000000000..b85bf4c5d4
--- /dev/null
+++ b/packages/libpcap/libpcap_1.0.0.bb
@@ -0,0 +1,29 @@
+require libpcap.inc
+
+PR = "r5"
+SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz"
+SRC_URI += "file://aclocal.patch;patch=1"
+SRC_URI += "file://ieee80215-arphrd.patch;patch=1"
+
+do_compile () {
+ oe_runmake
+ rm -f *.o
+ oe_runmake shared
+}
+
+do_install () {
+ install -d ${D}${libdir}
+ install -d ${D}${bindir}
+ oe_runmake install DESTDIR=${D}
+ oe_runmake install-shared DESTDIR=${D}
+ oe_libinstall -a -so libpcap ${D}${libdir}
+}
+
+do_stage_append () {
+ install -d ${STAGING_INCDIR}/pcap
+ install -m 0644 pcap/pcap.h ${STAGING_INCDIR}/pcap/pcap.h
+ install -m 0644 pcap/namedb.h ${STAGING_INCDIR}/pcap/namedb.h
+ install -m 0644 pcap/bpf.h ${STAGING_INCDIR}/pcap/bpf.h
+}
+
+
diff --git a/packages/libpng/libpng-native_1.2.35.bb b/packages/libpng/libpng-native_1.2.35.bb
new file mode 100644
index 0000000000..52c92e9954
--- /dev/null
+++ b/packages/libpng/libpng-native_1.2.35.bb
@@ -0,0 +1,4 @@
+require libpng_${PV}.bb
+require libpng-native.inc
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libpng-${PV}"
diff --git a/packages/libpng/libpng_1.2.35.bb b/packages/libpng/libpng_1.2.35.bb
new file mode 100644
index 0000000000..3ed02a7f17
--- /dev/null
+++ b/packages/libpng/libpng_1.2.35.bb
@@ -0,0 +1,14 @@
+require libpng.inc
+
+PR = "r0"
+
+SRC_URI += "file://makefile_fix.patch;patch=1"
+
+do_stage() {
+ cp libpng.pc libpng12.pc
+ install -m 644 png.h ${STAGING_INCDIR}/png.h
+ install -m 644 pngconf.h ${STAGING_INCDIR}/pngconf.h
+ oe_libinstall -so libpng ${STAGING_LIBDIR}/
+ oe_libinstall -so libpng12 ${STAGING_LIBDIR}/
+ ln -sf libpng12.so ${STAGING_LIBDIR}/libpng.so
+}
diff --git a/packages/libsdl/libsdl-directfb_1.2.11.bb b/packages/libsdl/libsdl-directfb_1.2.11.bb
new file mode 100644
index 0000000000..3f44f9df3f
--- /dev/null
+++ b/packages/libsdl/libsdl-directfb_1.2.11.bb
@@ -0,0 +1,27 @@
+require libsdl.inc
+
+DEPENDS = "alsa-lib directfb"
+# extra-keys.patch is missing
+DEFAULT_PREFERENCE = "-1"
+
+PR = "r0"
+
+SRC_URI = "\
+ http://www.libsdl.org/release/SDL-${PV}.tar.gz \
+ file://acinclude.m4 \
+ file://configure_tweak.patch;patch=1 \
+ file://pagesize.patch;patch=1 \
+ file://kernel-asm-page.patch;patch=1 \
+ file://sdl-cdfix.patch;patch=1 \
+ file://fixmfour.patch;patch=1 \
+"
+
+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 \
+ --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga \
+ --enable-video-fbcon --enable-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 --disable-video-qtopia --enable-dlopen"
+
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/fix_Makefile.am.patch b/packages/libsdl/libsdl-qpe-1.2.9/fix_Makefile.am.patch
new file mode 100644
index 0000000000..7ad33fb6a5
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/fix_Makefile.am.patch
@@ -0,0 +1,11 @@
+--- SDL-1.2.9.vanilla/Makefile.am 2009-02-24 19:53:25.000000000 +0100
++++ SDL-1.2.9/Makefile.am 2009-02-24 19:54:14.000000000 +0100
+@@ -85,7 +85,7 @@
+ cd src && $(MAKE) install-libLTLIBRARIES
+
+ # Run ldconfig after installing the library:
+-install-hook:
++install-exec-hook:
+ -ldconfig
+
+ # Grab the test programs for the distribution:
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/fix_configure.in.patch b/packages/libsdl/libsdl-qpe-1.2.9/fix_configure.in.patch
new file mode 100644
index 0000000000..19e1afd6ee
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/fix_configure.in.patch
@@ -0,0 +1,10 @@
+--- SDL-1.2.9.vanilla/configure.in 2009-02-24 19:53:25.000000000 +0100
++++ SDL-1.2.9/configure.in 2009-02-24 20:08:10.000000000 +0100
+@@ -1,6 +1,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(README)
+
++AM_PROG_AS
+ dnl Set various version strings - taken gratefully from the GTk sources
+ #
+ # Making releases:
diff --git a/packages/libsdl/libsdl-qpe_1.2.9.bb b/packages/libsdl/libsdl-qpe_1.2.9.bb
index e33cf44e60..711a05d656 100644
--- a/packages/libsdl/libsdl-qpe_1.2.9.bb
+++ b/packages/libsdl/libsdl-qpe_1.2.9.bb
@@ -1,5 +1,7 @@
require libsdl.inc
+PR="r1"
+
SECTION = "opie/libs"
DEPENDS = "virtual/libqpe1 libopie2"
@@ -13,6 +15,8 @@ SRC_URI += "\
file://fixlibs-1.2.9.patch;patch=1 \
file://explicit-extern-C.patch;patch=1 \
file://no-PAGE_SIZE.patch;patch=1 \
+ file://fix_Makefile.am.patch;patch=1 \
+ file://fix_configure.in.patch;patch=1 \
"
EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \
diff --git a/packages/libsidplay/libsidplay_1.36.59.bb b/packages/libsidplay/libsidplay_1.36.59.bb
index 9ca4ee13c4..59cabae085 100644
--- a/packages/libsidplay/libsidplay_1.36.59.bb
+++ b/packages/libsidplay/libsidplay_1.36.59.bb
@@ -2,15 +2,11 @@ DESCRIPTION = "A library for replaying C64 SID music"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "GPL"
-
PR = "r1"
-SRC_URI = "http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/libsidplay-${PV}.tgz \
- http://ftp.debian.org/debian/pool/main/libs/libsidplay/libsidplay_1.36.59-5.diff.gz;patch=1 \
+SRC_URI = "\
+ ftp://ftp.uni-frankfurt.de/pub/Mirrors2/gentoo.org/distfiles/libsidplay-1.36.59.tgz \
+ http://ftp.debian.org/debian/pool/main/libs/libsidplay/libsidplay_1.36.59-5.diff.gz;patch=1 \
"
-inherit autotools
-
-do_stage() {
- autotools_stage_all
-}
+inherit autotools_stage
diff --git a/packages/libsmi/libsmi_0.4.8.bb b/packages/libsmi/libsmi_0.4.8.bb
new file mode 100644
index 0000000000..6c832f3724
--- /dev/null
+++ b/packages/libsmi/libsmi_0.4.8.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "A Library to Access SMI MIB Information"
+LICENSE = "BSD"
+SRC_URI = "ftp://ftp.ibr.cs.tu-bs.de/pub/local/libsmi/libsmi-0.4.8.tar.gz"
+PR = "r1"
+
+inherit autotools
+
+PACKAGES += "${PN}-mibs ${PN}-pibs"
+FILES_${PN}-mibs += "${datadir}/mibs"
+FILES_${PN}-pibs += "${datadir}/pibs"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/libssh/files/libssh_libdir_fix.patch b/packages/libssh/files/libssh_libdir_fix.patch
new file mode 100644
index 0000000000..a9fcce79e3
--- /dev/null
+++ b/packages/libssh/files/libssh_libdir_fix.patch
@@ -0,0 +1,13 @@
+diff -NurpP --minimal libssh-0.2/libssh/Makefile.in libssh-0.2-libdir/libssh/Makefile.in
+--- libssh-0.2/libssh/Makefile.in 2006-12-29 23:03:59.000000000 +0800
++++ libssh-0.2-libdir/libssh/Makefile.in 2008-10-13 10:04:13.000000000 +0800
+@@ -15,7 +15,7 @@ exec_prefix = @exec_prefix@
+ bindir = $(exec_prefix)/bin
+ incldir= $(prefix)/include
+ infodir = $(prefix)/info
+-libdir = $(prefix)/lib/
++libdir = $(prefix)/lib
+ mandir = $(prefix)/man/man1
+
+ CC = @CC@
+
diff --git a/packages/libssh/libssh_0.11.bb b/packages/libssh/libssh_0.11.bb
index ab6949f409..833567ebb0 100644
--- a/packages/libssh/libssh_0.11.bb
+++ b/packages/libssh/libssh_0.11.bb
@@ -6,6 +6,8 @@ includes SFTP support, and a sample SSH client is provided."
DEPENDS = "openssl"
LICENSE = "LGPL"
+DEFAULT_PREFERENCE="-1"
+
SRC_URI = "http://www.0xbadc0de.be/libssh/libssh-${PV}.tgz"
inherit autotools
diff --git a/packages/libssh/libssh_0.2.bb b/packages/libssh/libssh_0.2.bb
new file mode 100644
index 0000000000..b776094018
--- /dev/null
+++ b/packages/libssh/libssh_0.2.bb
@@ -0,0 +1,28 @@
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "The SSH library is a C library to authenticate in a \
+simple manner to one or more SSH servers. The goal of this project \
+is to provide a library much simpler to use than OpenSSHs one. It \
+includes SFTP support, and a sample SSH client is provided."
+
+HOMEPAGE = "http://0xbadc0de.be/wiki/libssh:libssh"
+LICENSE = "LGPL"
+SECTION = "libs"
+DEPENDS = "openssl"
+SRC_URI = "http://www.0xbadc0de.be/libssh/libssh-${PV}.tgz \
+ file://libssh_libdir_fix.patch;patch=1 \
+ "
+inherit autotools
+
+EXTRA_OECONF = "--cache-file=${S}/config.cache"
+do_compile () {
+ oenote make "$@"
+ make "$@" || die "oe_runmake failed"
+}
+do_stage () {
+ install -d ${STAGING_INCDIR}/libssh
+ for i in crypto.h libssh.h sftp.h ssh2.h; do
+ install -m 0644 ${S}/include/libssh/$i ${STAGING_INCDIR}/libssh/
+ done
+ oe_libinstall -so -C libssh libssh ${STAGING_LIBDIR}
+}
diff --git a/packages/libtiff/tiff_3.8.2.bb b/packages/libtiff/tiff_3.8.2.bb
index 8c6e02c4a7..00edb40eb3 100644
--- a/packages/libtiff/tiff_3.8.2.bb
+++ b/packages/libtiff/tiff_3.8.2.bb
@@ -1,24 +1,13 @@
DESCRIPTION = "This software provides support for the Tag Image File Format (TIFF)"
-LICENSE = ""
+LICENSE = "${PN}"
HOMEPAGE = "http://www.remotesensing.org/libtiff/"
DEPENDS = "zlib jpeg lzo"
-
-DEFAULT_PREFERENCE = "-1"
-
PV = "3.8.2+4.0.0beta2"
-SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.0beta2.tar.gz"
+SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.0beta2.tar.gz"
S = "${WORKDIR}/${PN}-4.0.0beta2"
-inherit autotools
-
-do_stage() {
- autotools_stage_includes
- install -d ${STAGING_LIBDIR}
- oe_libinstall -C libtiff -a -so libtiff ${STAGING_LIBDIR}
- oe_libinstall -C libtiff -a -so libtiffxx ${STAGING_LIBDIR}
-
-}
+inherit autotools_stage
PACKAGES =+ "tiffxx tiffxx-dbg tiffxx-dev tiff-utils tiff-utils-dbg"
FILES_tiffxx = "${libdir}/libtiffxx.so.*"
diff --git a/packages/libtool/libtool-cross_2.2.4.bb b/packages/libtool/libtool-cross_2.2.4.bb
index 9b3c6d78ea..fab8aa4d42 100644
--- a/packages/libtool/libtool-cross_2.2.4.bb
+++ b/packages/libtool/libtool-cross_2.2.4.bb
@@ -1,11 +1,11 @@
require libtool.inc
require libtool_${PV}.bb
-
PR = "r23"
-PACKAGES = ""
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
-SRC_URI_append = " file://cross_compile.patch;patch=1 \
- file://prefix.patch;patch=1"
+
+SRC_URI += "\
+ file://cross_compile.patch;patch=1 \
+ file://prefix.patch;patch=1 \
+"
DEPENDS += "libtool-native"
@@ -43,3 +43,5 @@ do_stage () {
do_install () {
:
}
+
+PACKAGES = ""
diff --git a/packages/libtool/libtool-native_2.2.4.bb b/packages/libtool/libtool-native_2.2.4.bb
index a4f76c69dc..bfef6a6c96 100644
--- a/packages/libtool/libtool-native_2.2.4.bb
+++ b/packages/libtool/libtool-native_2.2.4.bb
@@ -1,11 +1,11 @@
require libtool.inc
require libtool_${PV}.bb
-
PR = "r20"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
-SRC_URI_append = " file://cross_compile.patch;patch=1 \
- file://prefix.patch;patch=1"
+SRC_URI += "\
+ file://cross_compile.patch;patch=1 \
+ file://prefix.patch;patch=1 \
+"
S = "${WORKDIR}/libtool-${PV}"
inherit native
diff --git a/packages/libtool/libtool.inc b/packages/libtool/libtool.inc
index db86d15ba4..197612910a 100644
--- a/packages/libtool/libtool.inc
+++ b/packages/libtool/libtool.inc
@@ -6,3 +6,4 @@ HOMEPAGE = "http://www.gnu.org/software/libtool/libtool.html"
LICENSE = "GPL"
SECTION = "devel"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
diff --git a/packages/libtool/libtool_2.2.4.bb b/packages/libtool/libtool_2.2.4.bb
index c8380d161c..f4b1ab824f 100644
--- a/packages/libtool/libtool_2.2.4.bb
+++ b/packages/libtool/libtool_2.2.4.bb
@@ -1,8 +1,5 @@
require libtool.inc
-
-PR = "r14"
-
-DEFAULT_PREFERENCE = "-1"
+PR = "r15"
SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz"
S = "${WORKDIR}/libtool-${PV}"
diff --git a/packages/libxsettings/libxsettings_0.11.bb b/packages/libxsettings/libxsettings_0.11.bb
index 2d9a3657f9..fc6f452470 100644
--- a/packages/libxsettings/libxsettings_0.11.bb
+++ b/packages/libxsettings/libxsettings_0.11.bb
@@ -4,10 +4,16 @@ LICENSE = "BSD-X"
PRIORITY = "optional"
DEPENDS = "virtual/libx11"
+PR = "r1"
+
inherit gpe
headers = "xsettings-common.h"
+do_compile_prepend() {
+ sed -i -e 's: -s : :g' Makefile
+}
+
do_stage () {
oe_libinstall -so libXsettings ${STAGING_LIBDIR}
diff --git a/packages/linux/at91_2.6.28.bb b/packages/linux/at91_2.6.28.bb
deleted file mode 100644
index a24dad3ee5..0000000000
--- a/packages/linux/at91_2.6.28.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-require linux.inc
-
-KERNEL_RELEASE = "2.6.28"
-PV = "2.6.28"
-PR = "r0"
-
-DEPENDS += "u-boot-utils-native"
-DEPENDS += "ipkg-utils-native"
-
-S = "${WORKDIR}/linux-${KERNEL_RELEASE}"
-
-# Mark archs/machines that this kernel supports
-DEFAULT_PREFERENCE = "-1"
-
-DEFAULT_PREFERENCE_at91sam9260ek = "1"
-CMDLINE_at91sam9260ek = "mem=64M console=ttyS0,115200 root=/dev/mtdblock0 rw rootfstype=jffs2"
-FILES_kernel-image_at91sam9260ek = ""
-
-DEFAULT_PREFERENCE_at91sam9261ek = "1"
-CMDLINE_at91sam9261ek = "mem=64M console=ttyS0,115200 root=/dev/mtdblock0 rw rootfstype=jffs2"
-FILES_kernel-image_at91sam9261ek = ""
-
-DEFAULT_PREFERENCE_at91sam9263ek = "1"
-CMDLINE_at91sam9263ek = "mem=64M console=ttyS0,115200 root=/dev/mtdblock0 rw rootfstype=jffs2"
-FILES_kernel-image_at91sam9263ek = ""
-
-DEFAULT_PREFERENCE_at91sam9g20ek = "1"
-CMDLINE_at91sam9g20ek = "mem=64M console=ttyS0,115200 root=/dev/mtdblock0 rw rootfstype=jffs2"
-FILES_kernel-image_at91sam9g20ek = ""
-
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${KERNEL_RELEASE}.tar.bz2 \
- file://linux-2.6.28-at91.patch.bz2;patch=1 \
- file://linux-2.6.28-exp.patch.bz2;patch=1 \
- file://defconfig \
- "
diff --git a/packages/linux/linux-2.6.24/oxe810/defconfig b/packages/linux/linux-2.6.24/oxnas/defconfig
index 5382e30f85..5382e30f85 100644
--- a/packages/linux/linux-2.6.24/oxe810/defconfig
+++ b/packages/linux/linux-2.6.24/oxnas/defconfig
diff --git a/packages/linux/linux-2.6.24/oxnas/oxnas-pci-config-delay.patch b/packages/linux/linux-2.6.24/oxnas/oxnas-pci-config-delay.patch
new file mode 100644
index 0000000000..5936b5bbca
--- /dev/null
+++ b/packages/linux/linux-2.6.24/oxnas/oxnas-pci-config-delay.patch
@@ -0,0 +1,56 @@
+--- linux-2.6.24.org/arch/arm/mach-oxnas/pci.c 2009-03-09 14:26:43.000000000 +0100
++++ linux-2.6.24/arch/arm/mach-oxnas/pci.c 2009-03-09 14:31:12.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <linux/interrupt.h>
+ #include <linux/init.h>
+ #include <linux/delay.h>
++#include <linux/jiffies.h>
+
+ #include <asm/io.h>
+ #include <asm/hardware.h>
+@@ -71,6 +72,12 @@
+
+ extern spinlock_t oxnas_gpio_spinlock;
+
++#ifdef CONFIG_OXNAS_PCI_RESET
++static unsigned long pci_trhfa_startwait = 0;
++static unsigned long pci_trhfa_msec = 0;
++static unsigned long pci_trhfa_timeout = 0;
++#endif // CONFIG_OXNAS_PCI_RESET
++
+ #define PCI_BUS_NONMEM_START 0x00000000
+ #define PCI_BUS_NONMEM_SIZE 0x00080000
+
+@@ -505,6 +512,15 @@
+ struct pci_bus *oxnas_pci_scan_bus(int nr, struct pci_sys_data *sys)
+ {
+ // printk(KERN_DEBUG "PCI: oxnas_pci_scan_bus\n");
++
++#ifdef CONFIG_OXNAS_PCI_RESET
++ printk(KERN_DEBUG "PCI: oxnas_pci_scan_bus now it's %lu, still waiting till %lu to become ready for config\n", jiffies, pci_trhfa_timeout);
++ if (time_after_eq(jiffies + msecs_to_jiffies(pci_trhfa_msec), pci_trhfa_timeout)) /* ensure not wrap */
++ while(time_before(jiffies, pci_trhfa_timeout))
++ udelay(100);
++ printk(KERN_DEBUG "PCI: oxnas_pci_scan_bus waited from %lu to %lu to become ready for config\n", pci_trhfa_startwait, jiffies);
++#endif // CONFIG_OXNAS_PCI_RESET
++
+ return pci_scan_bus(sys->busnr, &oxnas_pci_ops, sys);
+ }
+
+@@ -651,6 +667,16 @@
+
+ static int __init oxnas_pci_init(void)
+ {
++#ifdef CONFIG_OXNAS_PCI_RESET
++ // CPU has reset PCI bus via GPIO.
++ // According to PCI spec, we have to wait for 2^25 PCI clocks to meet
++ // the PCI timing parameter Trhfa (RST# high to first access).
++ pci_trhfa_startwait = jiffies;
++ pci_trhfa_msec = 1000; // 1 sec should be fine for 33MHz
++ pci_trhfa_timeout = jiffies + msecs_to_jiffies(pci_trhfa_msec);
++ printk(KERN_DEBUG "PCI: oxnas_pci_init now it's %lu, will wait till %lu to become ready for config\n", pci_trhfa_startwait, pci_trhfa_timeout);
++#endif // CONFIG_OXNAS_PCI_RESET
++
+ pci_common_init(&oxnas_pci);
+ return 0;
+ }
diff --git a/packages/linux/linux-2.6.24/oxnas/oxnas-pci-max-size.patch b/packages/linux/linux-2.6.24/oxnas/oxnas-pci-max-size.patch
new file mode 100644
index 0000000000..89af49bd91
--- /dev/null
+++ b/packages/linux/linux-2.6.24/oxnas/oxnas-pci-max-size.patch
@@ -0,0 +1,21 @@
+diff -Nurd linux-2.6.24.orig//arch/arm/mach-oxnas/pci.c linux-2.6.24/arch/arm/mach-oxnas/pci.c
+--- linux-2.6.24.orig//arch/arm/mach-oxnas/pci.c 2009-03-10 20:29:02.000000000 +0100
++++ linux-2.6.24/arch/arm/mach-oxnas/pci.c 2009-03-10 21:10:47.000000000 +0100
+@@ -78,12 +78,14 @@
+ static unsigned long pci_trhfa_timeout = 0;
+ #endif // CONFIG_OXNAS_PCI_RESET
+
++// processor allows up to 8MB PCI address ranges maximum by design
++// we split this up to 4MB prefetchable and 4MB non-prefetchable
++
+ #define PCI_BUS_NONMEM_START 0x00000000
+-#define PCI_BUS_NONMEM_SIZE 0x00080000
+-
++#define PCI_BUS_NONMEM_SIZE 0x00400000
+
+ #define PCI_BUS_PREMEM_START PCI_BUS_NONMEM_START + PCI_BUS_NONMEM_SIZE
+-#define PCI_BUS_PREMEM_SIZE 0x00080000
++#define PCI_BUS_PREMEM_SIZE 0x00400000
+
+ #define SYNOPSYS_PCI_MEMORY_BASE_ADDRESS PCI_BASE_ADDRESS_0
+ #define SYNOPSYS_PCI_DUAL_CYCLE_BASE_ADDRESS PCI_BASE_ADDRESS_2
diff --git a/packages/linux/linux-2.6.24/oxnas/oxnas-uart.patch b/packages/linux/linux-2.6.24/oxnas/oxnas-uart.patch
new file mode 100644
index 0000000000..e72b0db898
--- /dev/null
+++ b/packages/linux/linux-2.6.24/oxnas/oxnas-uart.patch
@@ -0,0 +1,176 @@
+diff -Nurd linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_dse_defconfig linux-2.6.24/arch/arm/configs/oxnas_810_eabi_dse_defconfig
+--- linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_dse_defconfig 2009-02-05 12:06:15.000000000 +0100
++++ linux-2.6.24/arch/arm/configs/oxnas_810_eabi_dse_defconfig 2009-02-05 12:08:36.000000000 +0100
+@@ -160,6 +160,8 @@
+ # CONFIG_OXNAS_VERSION_0X850 is not set
+ # CONFIG_ARCH_OXNAS_UART1 is not set
+ CONFIG_ARCH_OXNAS_UART2=y
++CONFIG_ARCH_OXNAS_UART2_DEBUG=y
++CONFIG_ARCH_OXNAS_UART2_BOOTPROGRESS=y
+ # CONFIG_ARCH_OXNAS_UART2_MODEM is not set
+ # CONFIG_ARCH_OXNAS_UART3 is not set
+ # CONFIG_ARCH_OXNAS_PCI_REQGNT_0 is not set
+diff -Nurd linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_upgrade_defconfig linux-2.6.24/arch/arm/configs/oxnas_810_eabi_upgrade_defconfig
+--- linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_upgrade_defconfig 2009-02-05 12:06:15.000000000 +0100
++++ linux-2.6.24/arch/arm/configs/oxnas_810_eabi_upgrade_defconfig 2009-02-05 12:08:36.000000000 +0100
+@@ -152,6 +152,8 @@
+ # CONFIG_OXNAS_VERSION_0X850 is not set
+ # CONFIG_ARCH_OXNAS_UART1 is not set
+ CONFIG_ARCH_OXNAS_UART2=y
++CONFIG_ARCH_OXNAS_UART2_DEBUG=y
++CONFIG_ARCH_OXNAS_UART2_BOOTPROGRESS=y
+ # CONFIG_ARCH_OXNAS_UART2_MODEM is not set
+ # CONFIG_ARCH_OXNAS_UART3 is not set
+ # CONFIG_ARCH_OXNAS_PCI_REQGNT_0 is not set
+diff -Nurd linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_wd_eval_defconfig linux-2.6.24/arch/arm/configs/oxnas_810_eabi_wd_eval_defconfig
+--- linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_wd_eval_defconfig 2009-02-05 12:06:15.000000000 +0100
++++ linux-2.6.24/arch/arm/configs/oxnas_810_eabi_wd_eval_defconfig 2009-02-05 12:08:36.000000000 +0100
+@@ -160,6 +160,8 @@
+ # CONFIG_OXNAS_VERSION_0X850 is not set
+ # CONFIG_ARCH_OXNAS_UART1 is not set
+ CONFIG_ARCH_OXNAS_UART2=y
++CONFIG_ARCH_OXNAS_UART2_DEBUG=y
++CONFIG_ARCH_OXNAS_UART2_BOOTPROGRESS=y
+ # CONFIG_ARCH_OXNAS_UART2_MODEM is not set
+ # CONFIG_ARCH_OXNAS_UART3 is not set
+ # CONFIG_ARCH_OXNAS_UART4 is not set
+diff -Nurd linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_wd_prod_defconfig linux-2.6.24/arch/arm/configs/oxnas_810_eabi_wd_prod_defconfig
+--- linux-2.6.24.org/arch/arm/configs/oxnas_810_eabi_wd_prod_defconfig 2009-02-05 12:06:15.000000000 +0100
++++ linux-2.6.24/arch/arm/configs/oxnas_810_eabi_wd_prod_defconfig 2009-02-05 12:08:36.000000000 +0100
+@@ -158,6 +158,8 @@
+ # CONFIG_OXNAS_VERSION_0X850 is not set
+ # CONFIG_ARCH_OXNAS_UART1 is not set
+ CONFIG_ARCH_OXNAS_UART2=y
++CONFIG_ARCH_OXNAS_UART2_DEBUG=y
++CONFIG_ARCH_OXNAS_UART2_BOOTPROGRESS=y
+ # CONFIG_ARCH_OXNAS_UART2_MODEM is not set
+ # CONFIG_ARCH_OXNAS_UART3 is not set
+ # CONFIG_ARCH_OXNAS_UART4 is not set
+diff -Nurd linux-2.6.24.org/arch/arm/mach-oxnas/Kconfig linux-2.6.24/arch/arm/mach-oxnas/Kconfig
+--- linux-2.6.24.org/arch/arm/mach-oxnas/Kconfig 2009-02-05 12:06:15.000000000 +0100
++++ linux-2.6.24/arch/arm/mach-oxnas/Kconfig 2009-02-05 12:08:34.000000000 +0100
+@@ -66,6 +66,20 @@
+ UARTs will be mapped to ttySn numbers from UART1 to UART4, only
+ including those UARTs selected to be present
+
++config ARCH_OXNAS_UART1_DEBUG
++ bool "Use UART1 as debug channel"
++ depends on ARCH_OXNAS_UART1
++ default n
++ help
++ This enables UART1 to be usable as debug channel.
++
++config ARCH_OXNAS_UART1_BOOTPROGRESS
++ bool "Display boot progress over UART1"
++ depends on ARCH_OXNAS_UART1
++ default n
++ help
++ This enables displaying boot progress over UART1.
++
+ config ARCH_OXNAS_UART1_MODEM
+ bool "Support UART1 modem control lines"
+ depends on ARCH_OXNAS_UART1
+@@ -81,6 +95,20 @@
+ UARTs will be mapped to ttySn numbers from UART1 to UART4, only
+ including those UARTs selected to be present
+
++config ARCH_OXNAS_UART2_DEBUG
++ bool "Use UART2 as debug channel"
++ depends on ARCH_OXNAS_UART2
++ default n
++ help
++ This enables UART2 to be usable as debug channel.
++
++config ARCH_OXNAS_UART2_BOOTPROGRESS
++ bool "Display boot progress over UART2"
++ depends on ARCH_OXNAS_UART2
++ default n
++ help
++ This enables displaying boot progress over UART2.
++
+ config ARCH_OXNAS_UART2_MODEM
+ bool "Support UART2 modem control lines"
+ depends on ARCH_OXNAS_UART2
+@@ -96,6 +124,20 @@
+ UARTs will be mapped to ttySn numbers from UART1 to UART4, only
+ including those UARTs selected to be present
+
++config ARCH_OXNAS_UART3_DEBUG
++ bool "Use UART3 as debug channel"
++ depends on ARCH_OXNAS_UART3
++ default n
++ help
++ This enables UART3 to be usable as debug channel.
++
++config ARCH_OXNAS_UART3_BOOTPROGRESS
++ bool "Display boot progress over UART3"
++ depends on ARCH_OXNAS_UART3
++ default n
++ help
++ This enables displaying boot progress over UART3.
++
+ config ARCH_OXNAS_UART3_MODEM
+ bool "Support UART3 modem control lines"
+ depends on ARCH_OXNAS_UART3
+@@ -114,6 +156,20 @@
+ UART4 always has its modem control lines available on external pins
+ when selected (overlaying PCI functions)
+
++config ARCH_OXNAS_UART4_DEBUG
++ bool "Use UART4 as debug channel"
++ depends on ARCH_OXNAS_UART4
++ default n
++ help
++ This enables UART4 to be usable as debug channel.
++
++config ARCH_OXNAS_UART4_BOOTPROGRESS
++ bool "Display boot progress over UART4"
++ depends on ARCH_OXNAS_UART4
++ default n
++ help
++ This enables displaying boot progress over UART4.
++
+ config ARCH_OXNAS_PCI_REQGNT_0
+ bool "Enable req/gnt for PCI device 0"
+ depends on PCI
+diff -Nurd linux-2.6.24.org/include/asm-arm/arch-oxnas/debug-macro.S linux-2.6.24/include/asm-arm/arch-oxnas/debug-macro.S
+--- linux-2.6.24.org/include/asm-arm/arch-oxnas/debug-macro.S 2009-02-05 12:06:19.000000000 +0100
++++ linux-2.6.24/include/asm-arm/arch-oxnas/debug-macro.S 2009-02-05 12:08:34.000000000 +0100
+@@ -14,13 +14,13 @@
+ .macro addruart,rx
+ mrc p15, 0, \rx, c1, c0
+ tst \rx, #1 @ MMU enabled?
+-#ifdef CONFIG_ARCH_OXNAS_UART1
++#ifdef CONFIG_ARCH_OXNAS_UART1_DEBUG
+ ldreq \rx, =UART_1_BASE_PA @ physical base address
+ ldrne \rx, =UART_1_BASE @ virtual address
+-#elif CONFIG_ARCH_OXNAS_UART2
++#elif CONFIG_ARCH_OXNAS_UART2_DEBUG
+ ldreq \rx, =UART_2_BASE_PA @ physical base address
+ ldrne \rx, =UART_2_BASE @ virtual address
+-#elif CONFIG_ARCH_OXNAS_UART3
++#elif CONFIG_ARCH_OXNAS_UART3_DEBUG
+ ldreq \rx, =UART_3_BASE_PA @ physical base address
+ ldrne \rx, =UART_3_BASE @ virtual address
+ #else
+diff -Nurd linux-2.6.24.org/include/asm-arm/arch-oxnas/uncompress.h linux-2.6.24/include/asm-arm/arch-oxnas/uncompress.h
+--- linux-2.6.24.org/include/asm-arm/arch-oxnas/uncompress.h 2009-02-05 12:06:19.000000000 +0100
++++ linux-2.6.24/include/asm-arm/arch-oxnas/uncompress.h 2009-02-05 12:08:34.000000000 +0100
+@@ -12,13 +12,13 @@
+
+ static inline void putc(int c)
+ {
+-#ifdef CONFIG_ARCH_OXNAS_UART1
++#ifdef CONFIG_ARCH_OXNAS_UART1_BOOTPROGRESS
+ static volatile unsigned char* uart = (volatile unsigned char*)UART_1_BASE_PA;
+-#elif defined(CONFIG_ARCH_OXNAS_UART2)
++#elif defined(CONFIG_ARCH_OXNAS_UART2_BOOTPROGRESS)
+ static volatile unsigned char* uart = (volatile unsigned char*)UART_2_BASE_PA;
+-#elif defined(CONFIG_ARCH_OXNAS_UART3)
++#elif defined(CONFIG_ARCH_OXNAS_UART3_BOOTPROGRESS)
+ static volatile unsigned char* uart = (volatile unsigned char*)UART_3_BASE_PA;
+-#elif defined(CONFIG_ARCH_OXNAS_UART4)
++#elif defined(CONFIG_ARCH_OXNAS_UART4_BOOTPROGRESS)
+ static volatile unsigned char* uart = (volatile unsigned char*)UART_4_BASE_PA;
+ #else
+ #define NO_UART
diff --git a/packages/linux/linux-2.6.24/oxe810/oxe810.diff b/packages/linux/linux-2.6.24/oxnas/oxnas.diff
index 04ff1a670b..04ff1a670b 100644
--- a/packages/linux/linux-2.6.24/oxe810/oxe810.diff
+++ b/packages/linux/linux-2.6.24/oxnas/oxnas.diff
diff --git a/packages/linux/linux-2.6.24/simpad/defconfig b/packages/linux/linux-2.6.24/simpad/defconfig
index 24e98f8fa7..b9ea3f137c 100644
--- a/packages/linux/linux-2.6.24/simpad/defconfig
+++ b/packages/linux/linux-2.6.24/simpad/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24
-# Fri Jan 9 09:35:22 2009
+# Fri Mar 6 21:44:02 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -826,17 +826,17 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_MISC_DEVICES is not set
-CONFIG_IDE=m
+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=y
-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
@@ -1072,7 +1072,11 @@ CONFIG_SERIAL_NONSTANDARD=y
#
# Serial drivers
#
-# CONFIG_SERIAL_8250 is not set
+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
diff --git a/packages/linux/linux-2.6.25.20/ronetix-pm9261/defconfig b/packages/linux/linux-2.6.25.20/ronetix-pm9261/defconfig
new file mode 100644
index 0000000000..77cb9fafe5
--- /dev/null
+++ b/packages/linux/linux-2.6.25.20/ronetix-pm9261/defconfig
@@ -0,0 +1,1346 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.25.20
+# Fri Jan 2 12:42:20 2009
+#
+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_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-KaeilOS-PM9261"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS 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_COMPAT_BRK=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_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+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_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG 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"
+CONFIG_CLASSIC_RCU=y
+
+#
+# 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_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_MXC is not set
+# CONFIG_ARCH_ORION 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_MSM7X00A is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+CONFIG_ARCH_AT91SAM9261=y
+# CONFIG_ARCH_AT91SAM9263 is not set
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9261 Board Type
+#
+# CONFIG_MACH_AT91SAM9261EK is not set
+CONFIG_MACH_PM9261=y
+
+#
+# AT91 Board Options
+#
+# CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 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=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_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+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_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_PREEMPT is not set
+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_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# 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_ARCH_SUSPEND_POSSIBLE=y
+
+#
+# Networking
+#
+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 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_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_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
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# 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
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+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
+# 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
+# CONFIG_MTD_OOPS 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 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
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x10000000
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 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
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+CONFIG_MTD_NAND_AT91_ECC_SOFT=y
+# CONFIG_MTD_NAND_AT91_ECC_HW is not set
+# CONFIG_MTD_NAND_AT91_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=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 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_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ATMEL_PWM is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide/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=y
+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
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=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 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
+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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_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_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+CONFIG_DM9000=y
+# CONFIG_ENC28J60 is not set
+CONFIG_DM9000_DEBUGLEVEL=4
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 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 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_NET_PCMCIA is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_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 is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV 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_KEYBOARD_GPIO=y
+# 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 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_TSC2301=y
+# CONFIG_TSC2301_XY_SWAP is not set
+# CONFIG_TSC2301_X_INVERSE is not set
+# CONFIG_TSC2301_Y_INVERSE 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_PDC=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
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# 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
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_SPI_TSC2301=y
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS1WM is not set
+CONFIG_W1_MASTER_GPIO=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+CONFIG_W1_SLAVE_SMEM=y
+# CONFIG_W1_SLAVE_DS2433 is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91SAM9_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 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_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_S1D15605 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+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=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=y
+# 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
+#
+
+#
+# SPI devices
+#
+# CONFIG_SND_AT73C213 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_AT91_SOC=y
+CONFIG_SND_AT91_SOC_SSC=y
+CONFIG_SND_AT91_SOC_PM9261_TSC2301=y
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+CONFIG_SND_SOC_TSC2301=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW 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_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# 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
+# CONFIG_USB_R8A66597_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=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_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
+#
+# 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
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 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 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 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_PRINTER 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
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+# CONFIG_MMC_AT91 is not set
+CONFIG_MMC_SPI=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+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=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+
+#
+# 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_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_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA 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 is not set
+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_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_FS_WBUF_VERIFY is not set
+# 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 is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+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_SUNRPC_BIND34=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
+CONFIG_NLS=y
+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 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=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_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE 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
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# 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=y
+CONFIG_CRC32=y
+CONFIG_CRC7=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/linux-2.6.25.20/ronetix-pm9263/defconfig b/packages/linux/linux-2.6.25.20/ronetix-pm9263/defconfig
new file mode 100644
index 0000000000..c7171cd4ae
--- /dev/null
+++ b/packages/linux/linux-2.6.25.20/ronetix-pm9263/defconfig
@@ -0,0 +1,1344 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.25.20
+# Fri Jan 2 12:48:49 2009
+#
+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_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-KaeilOS-PM9263"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS 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_COMPAT_BRK=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_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+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_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG 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"
+CONFIG_CLASSIC_RCU=y
+
+#
+# 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_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_MXC is not set
+# CONFIG_ARCH_ORION 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_MSM7X00A is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# 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
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9263 Board Type
+#
+# CONFIG_MACH_AT91SAM9263EK is not set
+# CONFIG_MACH_USB_A9263 is not set
+CONFIG_MACH_PM9263=y
+CONFIG_PM9263_LCD_TX09D70=y
+# CONFIG_PM9263_LCD_TCG057VGLAC is not set
+
+#
+# AT91 Board Options
+#
+# CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 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=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_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+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_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_PREEMPT is not set
+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_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# 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_ARCH_SUSPEND_POSSIBLE=y
+
+#
+# Networking
+#
+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 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_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_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
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# 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
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+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
+# 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
+# CONFIG_MTD_OOPS 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 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
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x10000000
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 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
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+CONFIG_MTD_NAND_AT91_ECC_SOFT=y
+# CONFIG_MTD_NAND_AT91_ECC_HW is not set
+# CONFIG_MTD_NAND_AT91_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=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 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_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ATMEL_PWM is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide/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=y
+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
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=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 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
+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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_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_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 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 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_NET_PCMCIA is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_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 is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV 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_KEYBOARD_GPIO=y
+# 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_FUJITSU 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_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_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+CONFIG_SERIAL_ATMEL_PDC=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
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# 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
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_SPI_TSC2301 is not set
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS1WM is not set
+CONFIG_W1_MASTER_GPIO=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+CONFIG_W1_SLAVE_SMEM=y
+# CONFIG_W1_SLAVE_DS2433 is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91SAM9_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 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_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_S1D15605 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+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=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=y
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+# 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_AT91_AC97=y
+
+#
+# SPI devices
+#
+# CONFIG_SND_AT73C213 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW 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_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# 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
+# CONFIG_USB_R8A66597_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=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_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
+#
+# 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
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 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 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 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_PRINTER 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
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_AT91=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+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=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+
+#
+# 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_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_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA 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 is not set
+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_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_FS_WBUF_VERIFY is not set
+# 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 is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+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_SUNRPC_BIND34=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
+CONFIG_NLS=y
+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 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=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_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE 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
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# 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_CRC7 is not set
+# 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/linux-2.6.27/boc01/005-090112-isl12024.patch b/packages/linux/linux-2.6.27/boc01/005-090112-isl12024.patch
deleted file mode 100644
index 32bde9dfc8..0000000000
--- a/packages/linux/linux-2.6.27/boc01/005-090112-isl12024.patch
+++ /dev/null
@@ -1,950 +0,0 @@
-Index: linux-2.6.27/drivers/i2c/chips/isl12024-eeprom.c
-===================================================================
---- /dev/null
-+++ linux-2.6.27/drivers/i2c/chips/isl12024-eeprom.c
-@@ -0,0 +1,254 @@
-+/*
-+ * Intersil ISL12024 EEPROM class driver
-+ *
-+ *
-+ * Copyright (C) 2007, CenoSYS (www.cenosys.com).
-+ * Guillaume Ligneul
-+ * Guillaume.ligneul@gmail.com
-+ *
-+ * Code is based on eeprom.c
-+ *
-+ * This software program is licensed subject to the GNU General Public License
-+ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+//#include <linux/slab.h>
-+//#include <linux/jiffies.h>
-+#include <linux/i2c.h>
-+#include <linux/mutex.h>
-+#include <linux/i2c/isl12024.h>
-+
-+/* Addresses to scan */
-+static const unsigned short normal_i2c[] = { ISL12024_I2C_EEPROM_ADDR, I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD_1(eeprom);
-+
-+
-+/* Size of EEPROM in bytes */
-+#define EEPROM_SIZE 4096
-+
-+/* Each client has this additional data */
-+struct eeprom_data {
-+ struct i2c_client client;
-+ struct mutex update_lock;
-+};
-+
-+int
-+isl12024_i2c_read(struct i2c_client *client, u8 reg, u8 buf[],
-+ unsigned len)
-+{
-+ int ret;
-+ u8 dt_addr[2];
-+
-+ struct i2c_msg msgs[2] = {
-+ {
-+ .addr = client->addr,
-+ .flags = 0,
-+ .len = 2,
-+ .buf = dt_addr,
-+ },
-+ {
-+ .addr = client->addr,
-+ .flags = I2C_M_RD,
-+ .len = len ,
-+ .buf = buf ,
-+ },
-+ };
-+
-+ dt_addr[0] = 0;
-+ dt_addr[1] = reg;
-+
-+ ret = i2c_transfer(client->adapter, msgs, 2);
-+ if ( ret < 0) {
-+ dev_err(&client->dev, "read error\n");
-+ return -EIO;
-+ }
-+ return ret;
-+}
-+
-+
-+int
-+isl12024_i2c_write(struct i2c_client *client, u8 reg, u8 const buf[],
-+ unsigned len)
-+{
-+ int ret;
-+ u8 i2c_buf[EEPROM_SIZE];
-+
-+ struct i2c_msg msgs[1] = {
-+ {
-+ .addr = client->addr,
-+ .flags = 0,
-+ .len = len+2,
-+ .buf = i2c_buf,
-+ },
-+ };
-+
-+ i2c_buf[0] = 0;
-+ i2c_buf[1] = reg;
-+
-+
-+ memcpy(&i2c_buf[2], &buf[0], len );
-+
-+
-+ ret = i2c_transfer(client->adapter, msgs, 1);
-+ printk(KERN_INFO "i2c_transfer %d\n",ret);
-+ return ret;
-+}
-+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);
-+
-+/* This is the driver that will be inserted */
-+static struct i2c_driver eeprom_driver = {
-+ .driver = {
-+ .name = "isl12024-eeprom",
-+ },
-+ .attach_adapter = eeprom_attach_adapter,
-+ .detach_client = eeprom_detach_client,
-+};
-+
-+static ssize_t eeprom_read(struct kobject *kobj, struct bin_attribute *bin_attr,
-+ char *buf, loff_t off, size_t count)
-+{
-+ struct i2c_client *client = to_i2c_client(container_of(kobj, struct device, kobj));
-+ struct eeprom_data *data = i2c_get_clientdata(client);
-+ int rc;
-+
-+ mutex_lock(&data->update_lock);
-+
-+ if (off >= EEPROM_SIZE)
-+ return 0;
-+
-+ if (off + count > EEPROM_SIZE)
-+ count = EEPROM_SIZE - off;
-+
-+ rc = isl12024_i2c_read(client,0,buf,EEPROM_SIZE);
-+
-+ if (rc < 0){
-+ mutex_unlock(&data->update_lock);
-+ return -EIO;
-+ }
-+
-+ mutex_unlock(&data->update_lock);
-+ return count;
-+}
-+
-+static ssize_t eeprom_write(struct kobject *kobj, struct bin_attribute *attr,
-+ char *buf, loff_t off, size_t count)
-+{
-+ struct i2c_client *client = kobj_to_i2c_client(kobj);
-+ struct eeprom_data *data = i2c_get_clientdata(client);
-+
-+ if (off >= 256)
-+ return -ENOSPC;
-+
-+ if (off + count > 256)
-+ count = 256 - off;
-+
-+ mutex_unlock(&data->update_lock);
-+ if (isl12024_i2c_write(client, off, buf, count) < 0)
-+ {
-+ mutex_unlock(&data->update_lock);
-+ return -EIO;
-+ }
-+
-+ mutex_unlock(&data->update_lock);
-+ return count;
-+}
-+
-+static struct bin_attribute eeprom_attr = {
-+ .attr = {
-+ .name = "eeprom",
-+ .mode = S_IRUGO,
-+ },
-+ .size = EEPROM_SIZE,
-+ .read = eeprom_read,
-+ .write= eeprom_write,
-+};
-+
-+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)
-+{
-+ struct i2c_client *new_client;
-+ struct eeprom_data *data;
-+ int err = 0;
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_READ_BYTE_DATA
-+ | I2C_FUNC_SMBUS_BYTE))
-+ goto exit;
-+
-+ if (!(data = kzalloc(sizeof(struct eeprom_data), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ new_client = &data->client;
-+ i2c_set_clientdata(new_client, data);
-+ new_client->addr = address;
-+ new_client->adapter = adapter;
-+ new_client->driver = &eeprom_driver;
-+ new_client->flags = 0;
-+
-+ strlcpy(new_client->name, "isl12024-eeprom", I2C_NAME_SIZE);
-+ mutex_init(&data->update_lock);
-+
-+ /* Tell the I2C layer a new client has arrived */
-+ if ((err = i2c_attach_client(new_client)))
-+ goto exit_kfree;
-+
-+ /* create the sysfs eeprom file */
-+ err = sysfs_create_bin_file(&new_client->dev.kobj, &eeprom_attr);
-+ if (err)
-+ goto exit_detach;
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(new_client);
-+exit_kfree:
-+ kfree(data);
-+exit:
-+ return err;
-+}
-+
-+static int eeprom_detach_client(struct i2c_client *client)
-+{
-+ int err;
-+
-+ sysfs_remove_bin_file(&client->dev.kobj, &eeprom_attr);
-+
-+ err = i2c_detach_client(client);
-+ if (err)
-+ return err;
-+
-+ kfree(i2c_get_clientdata(client));
-+
-+ return 0;
-+}
-+
-+static int __init eeprom_init(void)
-+{
-+ return i2c_add_driver(&eeprom_driver);
-+}
-+
-+static void __exit eeprom_exit(void)
-+{
-+ i2c_del_driver(&eeprom_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Guillaume Ligneul <guillaume.ligneul@cenosys.com>");
-+MODULE_DESCRIPTION("I2C Intersil12024 EEPROM driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(eeprom_init);
-+module_exit(eeprom_exit);
-Index: linux-2.6.27/drivers/i2c/chips/Kconfig
-===================================================================
---- linux-2.6.27.orig/drivers/i2c/chips/Kconfig
-+++ linux-2.6.27/drivers/i2c/chips/Kconfig
-@@ -40,6 +40,15 @@ config AT24
- This driver can also be built as a module. If so, the module
- will be called at24.
-
-+config ISL12024EEPROM
-+ tristate "Intersil 12024 EEPROM"
-+ depends on RTC_DRV_ISL12024
-+ help
-+ If you say yes here you get support for Intersil12024 EEPROM.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called isl12024-eeprom.
-+
- config SENSORS_EEPROM
- tristate "EEPROM reader"
- depends on EXPERIMENTAL
-Index: linux-2.6.27/drivers/i2c/chips/Makefile
-===================================================================
---- linux-2.6.27.orig/drivers/i2c/chips/Makefile
-+++ linux-2.6.27/drivers/i2c/chips/Makefile
-@@ -9,6 +9,8 @@
- # * I/O expander drivers go to drivers/gpio
- #
-
-+
-+obj-$(CONFIG_ISL12024EEPROM) += isl12024-eeprom.o
- obj-$(CONFIG_DS1682) += ds1682.o
- obj-$(CONFIG_AT24) += at24.o
- obj-$(CONFIG_SENSORS_EEPROM) += eeprom.o
-Index: linux-2.6.27/drivers/rtc/Kconfig
-===================================================================
---- linux-2.6.27.orig/drivers/rtc/Kconfig
-+++ linux-2.6.27/drivers/rtc/Kconfig
-@@ -124,6 +124,12 @@ comment "I2C RTC drivers"
-
- if I2C
-
-+config RTC_DRV_ISL12024
-+ tristate "Intersil 12024 RTC/ UniqueID"
-+ help
-+ If you say yes ....
-+ This driver can also be built as a module.
-+
- config RTC_DRV_DS1307
- tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00"
- help
-Index: linux-2.6.27/drivers/rtc/Makefile
-===================================================================
---- linux-2.6.27.orig/drivers/rtc/Makefile
-+++ linux-2.6.27/drivers/rtc/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_RTC_DRV_DS1742) += rtc-ds17
- obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o
- obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o
- obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o
-+obj-$(CONFIG_RTC_DRV_ISL12024) += rtc-isl12024.o
- obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o
- obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o
- obj-$(CONFIG_RTC_DRV_M48T59) += rtc-m48t59.o
-Index: linux-2.6.27/drivers/rtc/rtc-isl12024.c
-===================================================================
---- /dev/null
-+++ linux-2.6.27/drivers/rtc/rtc-isl12024.c
-@@ -0,0 +1,516 @@
-+/*
-+ * Intersil ISL12024 class driver
-+ *
-+ *
-+ * Copyright (C) 2007, CenoSYS (www.cenosys.com).
-+ * Guillaume Ligneul
-+ * Guillaume.ligneul@gmail.com
-+ *
-+ * This software program is licensed subject to the GNU General Public License
-+ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/i2c.h>
-+#include <linux/bcd.h>
-+#include <linux/rtc.h>
-+#include <linux/proc_fs.h>
-+#include <linux/i2c/isl12024.h>
-+#include <linux/delay.h>
-+
-+
-+#define DBG 1
-+#undef DBG
-+
-+static u8 buf_id[ISL12024_RTC_SECTION_LEN] = { 0 ,};
-+
-+#define DRV_NAME "isl12024"
-+#define DRV_VERSION "0.1"
-+
-+/* i2c configuration */
-+
-+static const unsigned short normal_i2c[] = {
-+ ISL12024_I2C_ADDR >>1, I2C_CLIENT_END
-+};
-+I2C_CLIENT_INSMOD;
-+
-+/* Procfs management */
-+static struct proc_dir_entry * root_proc = NULL;
-+static struct proc_dir_entry * entry_proc = NULL;
-+static int read_proc (char * page, char ** start, off_t off, int count, int * eof, void * data);
-+
-+static int isl12024_get_status(struct i2c_client *client, unsigned char *sr);
-+static int isl12024_fix_osc(struct i2c_client *client);
-+
-+
-+static int isl12024_attach_adapter(struct i2c_adapter *adapter);
-+static int isl12024_detach_client(struct i2c_client *client);
-+
-+// To debug (may be add in includ/linux/i2c-id.h)
-+#define I2C_DRIVERID_ISL12024 97
-+
-+static struct i2c_driver isl12024_driver = {
-+ .driver = {
-+ .name = DRV_NAME,
-+ },
-+ .id = I2C_DRIVERID_ISL12024,
-+ .attach_adapter = &isl12024_attach_adapter,
-+ .detach_client = &isl12024_detach_client,
-+};
-+
-+int
-+isl12024_i2c_read_regs(struct i2c_client *client, u8 reg, u8 buf[],
-+ unsigned len)
-+{
-+ int ret;
-+ u8 dt_addr[2];
-+
-+ struct i2c_msg msgs[2] = {
-+ {
-+ .addr = client->addr,
-+ .flags = 0,
-+ .len = 2,
-+ .buf = dt_addr,
-+ },
-+ {
-+ .addr = client->addr,
-+ .flags = I2C_M_RD,
-+ .len = len ,
-+ .buf = buf ,
-+ },
-+ };
-+
-+ dt_addr[0] = 0;
-+ dt_addr[1] = reg;
-+
-+ ret = i2c_transfer(client->adapter, msgs, 2);
-+ if ( ret < 0) {
-+ dev_err(&client->dev, "read error\n");
-+ return -EIO;
-+ }
-+ return ret;
-+}
-+
-+EXPORT_SYMBOL(isl12024_i2c_read_regs);
-+
-+
-+int
-+isl12024_i2c_set_regs(struct i2c_client *client, u8 reg, u8 const buf[],
-+ unsigned len)
-+{
-+ int ret;
-+ u8 i2c_buf[10];
-+
-+ struct i2c_msg msgs[1] = {
-+ {
-+ .addr = client->addr,
-+ .flags = 0,
-+ .len = len+2,
-+ .buf = i2c_buf,
-+ },
-+ };
-+
-+ i2c_buf[0] = 0;
-+ i2c_buf[1] = reg;
-+
-+
-+ memcpy(&i2c_buf[2], &buf[0], len );
-+
-+
-+ ret = i2c_transfer(client->adapter, msgs, 1);
-+ printk(KERN_INFO "i2c_transfer %d\n",ret);
-+ return ret;
-+}
-+
-+EXPORT_SYMBOL(isl12024_i2c_set_regs);
-+
-+static int isl12024_i2c_validate_client(struct i2c_client *client)
-+{
-+ u8 regs[ISL12024_RTC_SECTION_LEN] = { 0, };
-+ u8 zero_mask[ISL12024_RTC_SECTION_LEN] = {
-+ 0x80, 0x80, 0x40, 0xc0, 0xe0, 0x00, 0xf8, 0xc6
-+ };
-+
-+ int i;
-+ int ret;
-+
-+ ret = isl12024_i2c_read_regs(client, ISL12024_REG_SC, regs, ISL12024_RTC_SECTION_LEN);
-+
-+ if (ret < 0)
-+ return ret;
-+
-+ for (i = 0; i < ISL12024_RTC_SECTION_LEN; ++i) {
-+ if (regs[i] & zero_mask[i]) /* check if bits are cleared */
-+ return -ENODEV;
-+
-+ }
-+
-+ return 0;
-+}
-+
-+static int isl12024_read_time(struct i2c_client *client,
-+ struct rtc_time *tm)
-+{
-+ unsigned char sr;
-+ int err;
-+ u8 regs[ISL12024_RTC_SECTION_LEN] = { 0, };
-+
-+ printk(KERN_INFO "%s\n ",__FUNCTION__ );
-+
-+
-+ if (isl12024_get_status(client, &sr) < 0) {
-+ dev_err(&client->dev, "%s: reading SR failed\n", __func__);
-+ return -EIO;
-+ }
-+
-+ err = isl12024_i2c_read_regs(client, ISL12024_REG_SC, regs, ISL12024_RTC_SECTION_LEN);
-+
-+#ifdef DBG
-+ int i;
-+ for(i=0; i<ISL12024_RTC_SECTION_LEN; i++)
-+ printk(KERN_INFO "0x%2X\n", regs[i]);
-+#endif
-+
-+ if (err < 0) {
-+ dev_err(&client->dev, "%s: reading RTC section failed\n",
-+ __func__);
-+ return sr;
-+ }
-+
-+ tm->tm_sec = BCD2BIN(regs[0]);
-+ tm->tm_min = BCD2BIN(regs[1]);
-+
-+ { /* HR field has a more complex interpretation */
-+ const u8 _hr = regs[2];
-+ if (_hr & ISL12024_REG_HR_MIL) /* 24h format */
-+ tm->tm_hour = BCD2BIN(_hr & 0x3f);
-+ else { // 12h format
-+ tm->tm_hour = BCD2BIN(_hr & 0x1f);
-+ if (_hr & ISL12024_REG_HR_PM) /* PM flag set */
-+ tm->tm_hour += 12;
-+ }
-+ }
-+
-+ tm->tm_mday = BCD2BIN(regs[3]);
-+ tm->tm_mon = BCD2BIN(regs[4]);
-+ tm->tm_year = BCD2BIN(regs[5]) + 100;
-+ tm->tm_wday = BCD2BIN(regs[6]);
-+
-+ return rtc_valid_tm(tm);
-+}
-+
-+static int isl12024_get_status(struct i2c_client *client, unsigned char *sr)
-+{
-+ static unsigned char sr_addr[2] = { 0, ISL12024_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", __func__);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int isl12024_set_datetime(struct i2c_client *client, struct rtc_time *tm,
-+ int datetoo, u8 reg_base, unsigned char alm_enable)
-+{
-+ int i, xfer, nbytes;
-+ unsigned char buf[8];
-+ unsigned char rdata[10] = { 0, reg_base };
-+
-+ static const unsigned char wel[3] = { 0, ISL12024_REG_SR,
-+ ISL12024_SR_WEL };
-+
-+ static const unsigned char rwel[3] = { 0, ISL12024_REG_SR,
-+ ISL12024_SR_WEL | ISL12024_SR_RWEL };
-+
-+ static const unsigned char diswe[3] = { 0, ISL12024_REG_SR, 0 };
-+
-+ dev_dbg(&client->dev,
-+ "%s: secs=%d, mins=%d, hours=%d\n",
-+ __func__,
-+ 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) | ISL12024_HR_MIL;
-+
-+ /* should we also set the date? */
-+ if (datetoo) {
-+ dev_dbg(&client->dev,
-+ "%s: mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __func__,
-+ 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);
-+
-+ /* 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);
-+ }
-+
-+ /* If writing alarm registers, set compare bits on registers 0-4 */
-+ if (reg_base < ISL12024_CCR_BASE)
-+ for (i = 0; i <= 4; i++)
-+ buf[i] |= 0x80;
-+
-+ /* 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", __func__, xfer);
-+ return -EIO;
-+ }
-+
-+ if ((xfer = i2c_master_send(client, rwel, 3)) != 3) {
-+ dev_err(&client->dev, "%s: rwel - %d\n", __func__, xfer);
-+ return -EIO;
-+ }
-+
-+
-+ /* write register's data */
-+ if (datetoo)
-+ nbytes = 8;
-+ else
-+ nbytes = 3;
-+ for (i = 0; i < nbytes; i++)
-+ rdata[2+i] = buf[i];
-+
-+ xfer = i2c_master_send(client, rdata, nbytes+2);
-+ if (xfer != nbytes+2) {
-+ dev_err(&client->dev,
-+ "%s: result=%d addr=%02x, data=%02x\n",
-+ __func__,
-+ xfer, rdata[1], rdata[2]);
-+ return -EIO;
-+ }
-+
-+ /* If we wrote to the nonvolatile region, wait 10msec for write cycle*/
-+ if (reg_base < ISL12024_CCR_BASE) {
-+ unsigned char al0e[3] = { 0, ISL12024_REG_INT, 0 };
-+
-+ msleep(10);
-+
-+ /* ...and set or clear the AL0E bit in the INT register */
-+
-+ /* Need to set RWEL again as the write has cleared it */
-+ xfer = i2c_master_send(client, rwel, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev,
-+ "%s: aloe rwel - %d\n",
-+ __func__,
-+ xfer);
-+ return -EIO;
-+ }
-+
-+ if (alm_enable)
-+ al0e[2] = ISL12024_INT_AL0E;
-+
-+ xfer = i2c_master_send(client, al0e, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev,
-+ "%s: al0e - %d\n",
-+ __func__,
-+ xfer);
-+ return -EIO;
-+ }
-+
-+ /* and wait 10msec again for this write to complete */
-+ msleep(10);
-+ }
-+
-+ /* disable further writes */
-+ if ((xfer = i2c_master_send(client, diswe, 3)) != 3) {
-+ dev_err(&client->dev, "%s: diswe - %d\n", __func__, xfer);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int isl12024_fix_osc(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_time tm;
-+
-+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
-+
-+ err = isl12024_set_datetime(client, &tm, 0, ISL12024_CCR_BASE, 0);
-+ if (err < 0)
-+ printk(KERN_INFO "unable to restart the oscillator\n");
-+
-+ return err;
-+}
-+
-+static int isl12024_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return isl12024_read_time(to_i2c_client(dev), tm);
-+
-+}
-+
-+static int isl12024_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return isl12024_set_datetime(to_i2c_client(dev),
-+ tm, 1, ISL12024_CCR_BASE, 0);
-+}
-+
-+static int
-+isl12024_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+
-+ /* Nothing to do */
-+
-+ return 0;
-+}
-+
-+static const struct rtc_class_ops isl12024_rtc_ops = {
-+ .proc = isl12024_rtc_proc,
-+ .read_time = isl12024_rtc_read_time,
-+ .set_time = isl12024_rtc_set_time,
-+};
-+
-+static int read_proc (char * page, char ** start, off_t off, int count, int * eof, void * data)
-+{
-+ int i=0;
-+
-+ printk("id: 0x");
-+ for(i=0;i<ISL12024_RTC_SECTION_LEN;i++)
-+ printk("%02X",buf_id[i]);
-+ printk("\n");
-+ return 0;
-+}
-+
-+static int
-+isl12024_probe(struct i2c_adapter *adapter, int addr, int kind)
-+{
-+
-+ int rc = 0;
-+ int err = 0;
-+ unsigned char sr;
-+ struct i2c_client *new_client = NULL;
-+ struct rtc_device *rtc = NULL;
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ rc = -ENODEV;
-+ goto failout;
-+ }
-+
-+ new_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (new_client == NULL) {
-+ rc = -ENOMEM;
-+ goto failout;
-+ }
-+
-+ new_client->addr = addr;
-+ new_client->adapter = adapter;
-+ new_client->driver = &isl12024_driver;
-+ new_client->flags = 0;
-+ strcpy(new_client->name, DRV_NAME);
-+
-+ if (kind < 0) {
-+ rc = isl12024_i2c_validate_client(new_client);
-+ if (rc < 0)
-+ goto failout;
-+ }
-+
-+ rc = i2c_attach_client(new_client);
-+ if (rc < 0)
-+ goto failout;
-+
-+ rtc = rtc_device_register(isl12024_driver.driver.name,
-+ &new_client->dev,
-+ &isl12024_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ printk("Error during rtc registration\n");
-+ rc = PTR_ERR(rtc);
-+ goto failout;
-+ }
-+
-+ i2c_set_clientdata(new_client, rtc);
-+
-+ /* Check for power failures and eventualy enable the osc */
-+ if ((err = isl12024_get_status(new_client, &sr)) == 0) {
-+ if (sr & ISL12024_SR_RTCF) {
-+ printk(KERN_INFO "power failure detected, "
-+ "please set the clock\n");
-+ udelay(50);
-+ isl12024_fix_osc(new_client);
-+ }
-+ }
-+ else
-+ printk(KERN_INFO "couldn't read status\n");
-+
-+ root_proc = proc_mkdir( "isl12024", 0 );
-+ entry_proc = create_proc_entry("id", S_IFREG | S_IRUGO | S_IWUSR, root_proc);
-+
-+ if (entry_proc == NULL)
-+ return -1;
-+
-+ entry_proc->owner = THIS_MODULE;
-+ entry_proc->read_proc = read_proc;
-+
-+ /* read unique id from eeprom */
-+ isl12024_i2c_read_regs(new_client, ISL12024_REG_ID, buf_id, sizeof(buf_id));
-+
-+
-+ return 0;
-+
-+ failout:
-+ kfree(new_client);
-+ return rc;
-+}
-+
-+static int
-+isl12024_attach_adapter (struct i2c_adapter *adapter)
-+{
-+ return i2c_probe(adapter, &addr_data, isl12024_probe);
-+}
-+
-+static int
-+isl12024_detach_client(struct i2c_client *client)
-+{
-+ int rc;
-+ struct rtc_device *const rtc = i2c_get_clientdata(client);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ rc = i2c_detach_client(client);
-+ if (rc)
-+ return rc;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+/* module init/exit */
-+
-+static int __init isl12024_init(void)
-+{
-+ return i2c_add_driver(&isl12024_driver);
-+}
-+
-+static void __exit isl12024_exit(void)
-+{
-+ i2c_del_driver(&isl12024_driver);
-+}
-+
-+MODULE_AUTHOR("Guillaume Ligneul <guillaume.ligneul@cenosys.com>");
-+MODULE_DESCRIPTION("Intersil ISL12024 driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(isl12024_init);
-+module_exit(isl12024_exit);
-Index: linux-2.6.27/include/linux/i2c/isl12024.h
-===================================================================
---- /dev/null
-+++ linux-2.6.27/include/linux/i2c/isl12024.h
-@@ -0,0 +1,103 @@
-+/*
-+ * Intersil ISL12024 chip registers definitions
-+ *
-+ *
-+ * Copyright (C) 2008, CenoSYS (www.cenosys.com).
-+ * Guillaume Ligneul
-+ * Guillaume.ligneul@gmail.com
-+ *
-+ * This software program is licensed subject to the GNU General Public License
-+ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
-+ */
-+
-+#ifndef ISL12024_H_
-+#define ISL12024_H_
-+
-+#define ISL12024_REG_SR 0x3F /* status register */
-+#define ISL12024_REG_Y2K 0x37
-+#define ISL12024_REG_DW 0x36
-+#define ISL12024_REG_YR 0x35
-+#define ISL12024_REG_MO 0x34
-+#define ISL12024_REG_DT 0x33
-+#define ISL12024_REG_HR 0x32
-+#define ISL12024_REG_MN 0x31
-+#define ISL12024_REG_SC 0x30
-+#define ISL12024_REG_DTR 0x13
-+#define ISL12024_REG_ATR 0x12
-+#define ISL12024_REG_INT 0x11
-+#define ISL12024_REG_0 0x10
-+#define ISL12024_REG_Y2K1 0x0F
-+#define ISL12024_REG_DWA1 0x0E
-+#define ISL12024_REG_YRA1 0x0D
-+#define ISL12024_REG_MOA1 0x0C
-+#define ISL12024_REG_DTA1 0x0B
-+#define ISL12024_REG_HRA1 0x0A
-+#define ISL12024_REG_MNA1 0x09
-+#define ISL12024_REG_SCA1 0x08
-+#define ISL12024_REG_Y2K0 0x07
-+#define ISL12024_REG_DWA0 0x06
-+#define ISL12024_REG_YRA0 0x05
-+#define ISL12024_REG_MOA0 0x04
-+#define ISL12024_REG_DTA0 0x03
-+#define ISL12024_REG_HRA0 0x02
-+#define ISL12024_REG_MNA0 0x01
-+#define ISL12024_REG_SCA0 0x00
-+
-+#define ISL12024_CCR_BASE 0x30 /* Base address of CCR */
-+#define ISL12024_ALM0_BASE 0x00 /* Base address of ALARM0 */
-+
-+#define ISL12024_SR_RTCF 0x01 /* Clock failure */
-+#define ISL12024_SR_WEL 0x02 /* Write Enable Latch */
-+#define ISL12024_SR_RWEL 0x04 /* Register Write Enable */
-+#define ISL12024_SR_AL0 0x20 /* Alarm 0 match */
-+
-+#define ISL12024_DTR_DTR0 0x01
-+#define ISL12024_DTR_DTR1 0x02
-+#define ISL12024_DTR_DTR2 0x04
-+
-+#define ISL12024_HR_MIL 0x80 /* Set in ccr.hour for 24 hr mode */
-+
-+#define ISL12024_INT_AL0E 0x20 /* Alarm 0 enable */
-+/* I2C ADDRESS */
-+#define ISL12024_I2C_ADDR 0xDE
-+#define ISL12024_I2C_EEPROM_ADDR 0x57
-+/* device id section */
-+#define ISL12024_REG_ID 0x20
-+/* Register map */
-+/* rtc section */
-+//#define ISL12024_REG_MSB 0x00
-+//#define ISL12024_REG_SC 0x30 /* Seconds */
-+//#define ISL12024_REG_MN 0x31 /* Minutes */
-+//#define ISL12024_REG_HR 0x32 /* Hours */
-+#define ISL12024_REG_HR_MIL (1<<7) /* 24h/12h mode */
-+#define ISL12024_REG_HR_PM (1<<5) /* PM/AM bit in 12h mode */
-+//#define ISL12024_REG_DT 0x33 /* Date */
-+//#define ISL12024_REG_MO 0x34 /* Month */
-+//#define ISL12024_REG_YR 0x35 /* Year */
-+//#define ISL12024_REG_DW 0x36
-+//#define ISL12024_REG_Y2K 0x37
-+#define ISL12024_RTC_SECTION_LEN 8
-+
-+
-+
-+/* control/status section */
-+//#define ISL12024_REG_SR 0x3F
-+//#define ISL12024_REG_SR_BAT (1<<7) /* battery */
-+//#define ISL12024_REG_SR_AL1 (1<<6) /* alarm 0 */
-+//#define ISL12024_REG_SR_AL0 (1<<5) /* alarm 1 */
-+//#define ISL12024_REG_SR_OSCF (1<<4) /* oscillator fail */
-+//#define ISL12024_REG_SR_RWEL (1<<2) /* register write enable latch */
-+//#define ISL12024_REG_SR_WEL (1<<1) /* write enable latch */
-+//#define ISL12024_REG_SR_RTCF (1<<0) /* rtc fail */
-+//#define ISL12024_REG_INT 0x11
-+
-+#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
-+
-+#endif /*ISL12024_H_*/
diff --git a/packages/linux/linux-2.6.27/boc01/005-090217-isl12024.patch b/packages/linux/linux-2.6.27/boc01/005-090217-isl12024.patch
new file mode 100644
index 0000000000..672e405de0
--- /dev/null
+++ b/packages/linux/linux-2.6.27/boc01/005-090217-isl12024.patch
@@ -0,0 +1,669 @@
+Index: linux-2.6.27/drivers/rtc/Kconfig
+===================================================================
+--- linux-2.6.27.orig/drivers/rtc/Kconfig
++++ linux-2.6.27/drivers/rtc/Kconfig
+@@ -124,6 +124,12 @@ comment "I2C RTC drivers"
+
+ if I2C
+
++config RTC_DRV_ISL12024
++ tristate "Intersil 12024 RTC/ UniqueID"
++ help
++ If you say yes ....
++ This driver can also be built as a module.
++
+ config RTC_DRV_DS1307
+ tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00"
+ help
+Index: linux-2.6.27/drivers/rtc/Makefile
+===================================================================
+--- linux-2.6.27.orig/drivers/rtc/Makefile
++++ linux-2.6.27/drivers/rtc/Makefile
+@@ -34,6 +34,7 @@ obj-$(CONFIG_RTC_DRV_DS1742) += rtc-ds17
+ obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o
+ obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o
+ obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o
++obj-$(CONFIG_RTC_DRV_ISL12024) += rtc-isl12024.o
+ obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o
+ obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o
+ obj-$(CONFIG_RTC_DRV_M48T59) += rtc-m48t59.o
+Index: linux-2.6.27/drivers/rtc/rtc-isl12024.c
+===================================================================
+--- /dev/null
++++ linux-2.6.27/drivers/rtc/rtc-isl12024.c
+@@ -0,0 +1,517 @@
++/*
++ * Intersil ISL12024 class driver
++ *
++ *
++ * Copyright (C) 2007, CenoSYS (www.cenosys.com).
++ * Guillaume Ligneul
++ * Guillaume.ligneul@gmail.com
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/i2c.h>
++#include <linux/bcd.h>
++#include <linux/rtc.h>
++#include <linux/proc_fs.h>
++#include <linux/delay.h>
++
++#include "isl12024.h"
++
++
++#define DBG 1
++#undef DBG
++
++static u8 buf_id[ISL12024_RTC_SECTION_LEN] = { 0 ,};
++
++#define DRV_NAME "isl12024"
++#define DRV_VERSION "0.1"
++
++/* i2c configuration */
++
++static const unsigned short normal_i2c[] = {
++ ISL12024_I2C_ADDR >>1, I2C_CLIENT_END
++};
++I2C_CLIENT_INSMOD;
++
++/* Procfs management */
++static struct proc_dir_entry * root_proc = NULL;
++static struct proc_dir_entry * entry_proc = NULL;
++static int read_proc (char * page, char ** start, off_t off, int count, int * eof, void * data);
++
++static int isl12024_get_status(struct i2c_client *client, unsigned char *sr);
++static int isl12024_fix_osc(struct i2c_client *client);
++
++
++static int isl12024_attach_adapter(struct i2c_adapter *adapter);
++static int isl12024_detach_client(struct i2c_client *client);
++
++// To debug (may be add in includ/linux/i2c-id.h)
++#define I2C_DRIVERID_ISL12024 97
++
++static struct i2c_driver isl12024_driver = {
++ .driver = {
++ .name = DRV_NAME,
++ },
++ .id = I2C_DRIVERID_ISL12024,
++ .attach_adapter = &isl12024_attach_adapter,
++ .detach_client = &isl12024_detach_client,
++};
++
++int
++isl12024_i2c_read_regs(struct i2c_client *client, u8 reg, u8 buf[],
++ unsigned len)
++{
++ int ret;
++ u8 dt_addr[2];
++
++ struct i2c_msg msgs[2] = {
++ {
++ .addr = client->addr,
++ .flags = 0,
++ .len = 2,
++ .buf = dt_addr,
++ },
++ {
++ .addr = client->addr,
++ .flags = I2C_M_RD,
++ .len = len ,
++ .buf = buf ,
++ },
++ };
++
++ dt_addr[0] = 0;
++ dt_addr[1] = reg;
++
++ ret = i2c_transfer(client->adapter, msgs, 2);
++ if ( ret < 0) {
++ dev_err(&client->dev, "read error\n");
++ return -EIO;
++ }
++ return ret;
++}
++
++EXPORT_SYMBOL(isl12024_i2c_read_regs);
++
++
++int
++isl12024_i2c_set_regs(struct i2c_client *client, u8 reg, u8 const buf[],
++ unsigned len)
++{
++ int ret;
++ u8 i2c_buf[10];
++
++ struct i2c_msg msgs[1] = {
++ {
++ .addr = client->addr,
++ .flags = 0,
++ .len = len+2,
++ .buf = i2c_buf,
++ },
++ };
++
++ i2c_buf[0] = 0;
++ i2c_buf[1] = reg;
++
++
++ memcpy(&i2c_buf[2], &buf[0], len );
++
++
++ ret = i2c_transfer(client->adapter, msgs, 1);
++ printk(KERN_INFO "i2c_transfer %d\n",ret);
++ return ret;
++}
++
++EXPORT_SYMBOL(isl12024_i2c_set_regs);
++
++static int isl12024_i2c_validate_client(struct i2c_client *client)
++{
++ u8 regs[ISL12024_RTC_SECTION_LEN] = { 0, };
++ u8 zero_mask[ISL12024_RTC_SECTION_LEN] = {
++ 0x80, 0x80, 0x40, 0xc0, 0xe0, 0x00, 0xf8, 0xc6
++ };
++
++ int i;
++ int ret;
++
++ ret = isl12024_i2c_read_regs(client, ISL12024_REG_SC, regs, ISL12024_RTC_SECTION_LEN);
++
++ if (ret < 0)
++ return ret;
++
++ for (i = 0; i < ISL12024_RTC_SECTION_LEN; ++i) {
++ if (regs[i] & zero_mask[i]) /* check if bits are cleared */
++ return -ENODEV;
++
++ }
++
++ return 0;
++}
++
++static int isl12024_read_time(struct i2c_client *client,
++ struct rtc_time *tm)
++{
++ unsigned char sr;
++ int err;
++ u8 regs[ISL12024_RTC_SECTION_LEN] = { 0, };
++
++ printk(KERN_INFO "%s\n ",__FUNCTION__ );
++
++
++ if (isl12024_get_status(client, &sr) < 0) {
++ dev_err(&client->dev, "%s: reading SR failed\n", __func__);
++ return -EIO;
++ }
++
++ err = isl12024_i2c_read_regs(client, ISL12024_REG_SC, regs, ISL12024_RTC_SECTION_LEN);
++
++#ifdef DBG
++ int i;
++ for(i=0; i<ISL12024_RTC_SECTION_LEN; i++)
++ printk(KERN_INFO "0x%2X\n", regs[i]);
++#endif
++
++ if (err < 0) {
++ dev_err(&client->dev, "%s: reading RTC section failed\n",
++ __func__);
++ return sr;
++ }
++
++ tm->tm_sec = BCD2BIN(regs[0]);
++ tm->tm_min = BCD2BIN(regs[1]);
++
++ { /* HR field has a more complex interpretation */
++ const u8 _hr = regs[2];
++ if (_hr & ISL12024_REG_HR_MIL) /* 24h format */
++ tm->tm_hour = BCD2BIN(_hr & 0x3f);
++ else { // 12h format
++ tm->tm_hour = BCD2BIN(_hr & 0x1f);
++ if (_hr & ISL12024_REG_HR_PM) /* PM flag set */
++ tm->tm_hour += 12;
++ }
++ }
++
++ tm->tm_mday = BCD2BIN(regs[3]);
++ tm->tm_mon = BCD2BIN(regs[4]);
++ tm->tm_year = BCD2BIN(regs[5]) + 100;
++ tm->tm_wday = BCD2BIN(regs[6]);
++
++ return rtc_valid_tm(tm);
++}
++
++static int isl12024_get_status(struct i2c_client *client, unsigned char *sr)
++{
++ static unsigned char sr_addr[2] = { 0, ISL12024_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", __func__);
++ return -EIO;
++ }
++
++ return 0;
++}
++
++static int isl12024_set_datetime(struct i2c_client *client, struct rtc_time *tm,
++ int datetoo, u8 reg_base, unsigned char alm_enable)
++{
++ int i, xfer, nbytes;
++ unsigned char buf[8];
++ unsigned char rdata[10] = { 0, reg_base };
++
++ static const unsigned char wel[3] = { 0, ISL12024_REG_SR,
++ ISL12024_SR_WEL };
++
++ static const unsigned char rwel[3] = { 0, ISL12024_REG_SR,
++ ISL12024_SR_WEL | ISL12024_SR_RWEL };
++
++ static const unsigned char diswe[3] = { 0, ISL12024_REG_SR, 0 };
++
++ dev_dbg(&client->dev,
++ "%s: secs=%d, mins=%d, hours=%d\n",
++ __func__,
++ 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) | ISL12024_HR_MIL;
++
++ /* should we also set the date? */
++ if (datetoo) {
++ dev_dbg(&client->dev,
++ "%s: mday=%d, mon=%d, year=%d, wday=%d\n",
++ __func__,
++ 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);
++
++ /* 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);
++ }
++
++ /* If writing alarm registers, set compare bits on registers 0-4 */
++ if (reg_base < ISL12024_CCR_BASE)
++ for (i = 0; i <= 4; i++)
++ buf[i] |= 0x80;
++
++ /* 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", __func__, xfer);
++ return -EIO;
++ }
++
++ if ((xfer = i2c_master_send(client, rwel, 3)) != 3) {
++ dev_err(&client->dev, "%s: rwel - %d\n", __func__, xfer);
++ return -EIO;
++ }
++
++
++ /* write register's data */
++ if (datetoo)
++ nbytes = 8;
++ else
++ nbytes = 3;
++ for (i = 0; i < nbytes; i++)
++ rdata[2+i] = buf[i];
++
++ xfer = i2c_master_send(client, rdata, nbytes+2);
++ if (xfer != nbytes+2) {
++ dev_err(&client->dev,
++ "%s: result=%d addr=%02x, data=%02x\n",
++ __func__,
++ xfer, rdata[1], rdata[2]);
++ return -EIO;
++ }
++
++ /* If we wrote to the nonvolatile region, wait 10msec for write cycle*/
++ if (reg_base < ISL12024_CCR_BASE) {
++ unsigned char al0e[3] = { 0, ISL12024_REG_INT, 0 };
++
++ msleep(10);
++
++ /* ...and set or clear the AL0E bit in the INT register */
++
++ /* Need to set RWEL again as the write has cleared it */
++ xfer = i2c_master_send(client, rwel, 3);
++ if (xfer != 3) {
++ dev_err(&client->dev,
++ "%s: aloe rwel - %d\n",
++ __func__,
++ xfer);
++ return -EIO;
++ }
++
++ if (alm_enable)
++ al0e[2] = ISL12024_INT_AL0E;
++
++ xfer = i2c_master_send(client, al0e, 3);
++ if (xfer != 3) {
++ dev_err(&client->dev,
++ "%s: al0e - %d\n",
++ __func__,
++ xfer);
++ return -EIO;
++ }
++
++ /* and wait 10msec again for this write to complete */
++ msleep(10);
++ }
++
++ /* disable further writes */
++ if ((xfer = i2c_master_send(client, diswe, 3)) != 3) {
++ dev_err(&client->dev, "%s: diswe - %d\n", __func__, xfer);
++ return -EIO;
++ }
++
++ return 0;
++}
++
++static int isl12024_fix_osc(struct i2c_client *client)
++{
++ int err;
++ struct rtc_time tm;
++
++ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
++
++ err = isl12024_set_datetime(client, &tm, 0, ISL12024_CCR_BASE, 0);
++ if (err < 0)
++ printk(KERN_INFO "unable to restart the oscillator\n");
++
++ return err;
++}
++
++static int isl12024_rtc_read_time(struct device *dev, struct rtc_time *tm)
++{
++ return isl12024_read_time(to_i2c_client(dev), tm);
++
++}
++
++static int isl12024_rtc_set_time(struct device *dev, struct rtc_time *tm)
++{
++ return isl12024_set_datetime(to_i2c_client(dev),
++ tm, 1, ISL12024_CCR_BASE, 0);
++}
++
++static int
++isl12024_rtc_proc(struct device *dev, struct seq_file *seq)
++{
++
++ /* Nothing to do */
++
++ return 0;
++}
++
++static const struct rtc_class_ops isl12024_rtc_ops = {
++ .proc = isl12024_rtc_proc,
++ .read_time = isl12024_rtc_read_time,
++ .set_time = isl12024_rtc_set_time,
++};
++
++static int read_proc (char * page, char ** start, off_t off, int count, int * eof, void * data)
++{
++ int i=0;
++
++ printk("id: 0x");
++ for(i=0;i<ISL12024_RTC_SECTION_LEN;i++)
++ printk("%02X",buf_id[i]);
++ printk("\n");
++ return 0;
++}
++
++static int
++isl12024_probe(struct i2c_adapter *adapter, int addr, int kind)
++{
++
++ int rc = 0;
++ int err = 0;
++ unsigned char sr;
++ struct i2c_client *new_client = NULL;
++ struct rtc_device *rtc = NULL;
++
++ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
++ rc = -ENODEV;
++ goto failout;
++ }
++
++ new_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
++ if (new_client == NULL) {
++ rc = -ENOMEM;
++ goto failout;
++ }
++
++ new_client->addr = addr;
++ new_client->adapter = adapter;
++ new_client->driver = &isl12024_driver;
++ new_client->flags = 0;
++ strcpy(new_client->name, DRV_NAME);
++
++ if (kind < 0) {
++ rc = isl12024_i2c_validate_client(new_client);
++ if (rc < 0)
++ goto failout;
++ }
++
++ rc = i2c_attach_client(new_client);
++ if (rc < 0)
++ goto failout;
++
++ rtc = rtc_device_register(isl12024_driver.driver.name,
++ &new_client->dev,
++ &isl12024_rtc_ops, THIS_MODULE);
++
++ if (IS_ERR(rtc)) {
++ printk("Error during rtc registration\n");
++ rc = PTR_ERR(rtc);
++ goto failout;
++ }
++
++ i2c_set_clientdata(new_client, rtc);
++
++ /* Check for power failures and eventualy enable the osc */
++ if ((err = isl12024_get_status(new_client, &sr)) == 0) {
++ if (sr & ISL12024_SR_RTCF) {
++ printk(KERN_INFO "power failure detected, "
++ "please set the clock\n");
++ udelay(50);
++ isl12024_fix_osc(new_client);
++ }
++ }
++ else
++ printk(KERN_INFO "couldn't read status\n");
++
++ root_proc = proc_mkdir( "isl12024", 0 );
++ entry_proc = create_proc_entry("id", S_IFREG | S_IRUGO | S_IWUSR, root_proc);
++
++ if (entry_proc == NULL)
++ return -1;
++
++ entry_proc->owner = THIS_MODULE;
++ entry_proc->read_proc = read_proc;
++
++ /* read unique id from eeprom */
++ isl12024_i2c_read_regs(new_client, ISL12024_REG_ID, buf_id, sizeof(buf_id));
++
++
++ return 0;
++
++ failout:
++ kfree(new_client);
++ return rc;
++}
++
++static int
++isl12024_attach_adapter (struct i2c_adapter *adapter)
++{
++ return i2c_probe(adapter, &addr_data, isl12024_probe);
++}
++
++static int
++isl12024_detach_client(struct i2c_client *client)
++{
++ int rc;
++ struct rtc_device *const rtc = i2c_get_clientdata(client);
++
++ if (rtc)
++ rtc_device_unregister(rtc);
++
++ rc = i2c_detach_client(client);
++ if (rc)
++ return rc;
++
++ kfree(client);
++
++ return 0;
++}
++
++/* module init/exit */
++
++static int __init isl12024_init(void)
++{
++ return i2c_add_driver(&isl12024_driver);
++}
++
++static void __exit isl12024_exit(void)
++{
++ i2c_del_driver(&isl12024_driver);
++}
++
++MODULE_AUTHOR("Guillaume Ligneul <guillaume.ligneul@cenosys.com>");
++MODULE_DESCRIPTION("Intersil ISL12024 driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(DRV_VERSION);
++
++module_init(isl12024_init);
++module_exit(isl12024_exit);
+Index: linux-2.6.27/drivers/i2c/chips/at24.c
+===================================================================
+--- linux-2.6.27.orig/drivers/i2c/chips/at24.c
++++ linux-2.6.27/drivers/i2c/chips/at24.c
+@@ -114,6 +114,8 @@ static const struct i2c_device_id at24_i
+ { "spd", AT24_DEVICE_MAGIC(2048 / 8,
+ AT24_FLAG_READONLY | AT24_FLAG_IRUGO) },
+ { "24c04", AT24_DEVICE_MAGIC(4096 / 8, 0) },
++ /* Intersil RTC/Unique-ID isl12024 eeprom handled here */
++ { "isl12024",AT24_DEVICE_MAGIC(4096 / 8, AT24_FLAG_ADDR16) },
+ /* 24rf08 quirk is handled at i2c-core */
+ { "24c08", AT24_DEVICE_MAGIC(8192 / 8, 0) },
+ { "24c16", AT24_DEVICE_MAGIC(16384 / 8, 0) },
+Index: linux-2.6.27/drivers/rtc/isl12024.h
+===================================================================
+--- /dev/null
++++ linux-2.6.27/drivers/rtc/isl12024.h
+@@ -0,0 +1,100 @@
++/*
++ * Intersil ISL12024 chip registers definitions
++ *
++ *
++ * Copyright (C) 2008, CenoSYS (www.cenosys.com).
++ * Guillaume Ligneul
++ * Guillaume.ligneul@gmail.com
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ */
++
++#ifndef ISL12024_H_
++#define ISL12024_H_
++
++#define ISL12024_REG_SR 0x3F /* status register */
++#define ISL12024_REG_Y2K 0x37
++#define ISL12024_REG_DW 0x36
++#define ISL12024_REG_YR 0x35
++#define ISL12024_REG_MO 0x34
++#define ISL12024_REG_DT 0x33
++#define ISL12024_REG_HR 0x32
++#define ISL12024_REG_MN 0x31
++#define ISL12024_REG_SC 0x30
++#define ISL12024_REG_DTR 0x13
++#define ISL12024_REG_ATR 0x12
++#define ISL12024_REG_INT 0x11
++#define ISL12024_REG_0 0x10
++#define ISL12024_REG_Y2K1 0x0F
++#define ISL12024_REG_DWA1 0x0E
++#define ISL12024_REG_YRA1 0x0D
++#define ISL12024_REG_MOA1 0x0C
++#define ISL12024_REG_DTA1 0x0B
++#define ISL12024_REG_HRA1 0x0A
++#define ISL12024_REG_MNA1 0x09
++#define ISL12024_REG_SCA1 0x08
++#define ISL12024_REG_Y2K0 0x07
++#define ISL12024_REG_DWA0 0x06
++#define ISL12024_REG_YRA0 0x05
++#define ISL12024_REG_MOA0 0x04
++#define ISL12024_REG_DTA0 0x03
++#define ISL12024_REG_HRA0 0x02
++#define ISL12024_REG_MNA0 0x01
++#define ISL12024_REG_SCA0 0x00
++
++#define ISL12024_CCR_BASE 0x30 /* Base address of CCR */
++#define ISL12024_ALM0_BASE 0x00 /* Base address of ALARM0 */
++
++#define ISL12024_SR_RTCF 0x01 /* Clock failure */
++#define ISL12024_SR_WEL 0x02 /* Write Enable Latch */
++#define ISL12024_SR_RWEL 0x04 /* Register Write Enable */
++#define ISL12024_SR_AL0 0x20 /* Alarm 0 match */
++
++#define ISL12024_DTR_DTR0 0x01
++#define ISL12024_DTR_DTR1 0x02
++#define ISL12024_DTR_DTR2 0x04
++
++#define ISL12024_HR_MIL 0x80 /* Set in ccr.hour for 24 hr mode */
++
++#define ISL12024_INT_AL0E 0x20 /* Alarm 0 enable */
++
++/* I2C ADDRESS */
++#define ISL12024_I2C_ADDR 0xDE
++#define ISL12024_I2C_EEPROM_ADDR 0x57
++
++/* device id section */
++#define ISL12024_REG_ID 0x20
++
++/* Register map */
++/* rtc section */
++#define ISL12024_REG_HR_MIL (1<<7) /* 24h/12h mode */
++#define ISL12024_REG_HR_PM (1<<5) /* PM/AM bit in 12h mode */
++//#define ISL12024_REG_DT 0x33 /* Date */
++//#define ISL12024_REG_MO 0x34 /* Month */
++//#define ISL12024_REG_YR 0x35 /* Year */
++//#define ISL12024_REG_DW 0x36
++//#define ISL12024_REG_Y2K 0x37
++#define ISL12024_RTC_SECTION_LEN 8
++
++/* control/status section */
++//#define ISL12024_REG_SR 0x3F
++//#define ISL12024_REG_SR_BAT (1<<7) /* battery */
++//#define ISL12024_REG_SR_AL1 (1<<6) /* alarm 0 */
++//#define ISL12024_REG_SR_AL0 (1<<5) /* alarm 1 */
++//#define ISL12024_REG_SR_OSCF (1<<4) /* oscillator fail */
++//#define ISL12024_REG_SR_RWEL (1<<2) /* register write enable latch */
++//#define ISL12024_REG_SR_WEL (1<<1) /* write enable latch */
++//#define ISL12024_REG_SR_RTCF (1<<0) /* rtc fail */
++//#define ISL12024_REG_INT 0x11
++
++#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
++
++#endif /*ISL12024_H_*/
diff --git a/packages/linux/linux-2.6.27/boc01/012-090115-cy3218-btns.patch b/packages/linux/linux-2.6.27/boc01/012-090115-cy3218-btns.patch
deleted file mode 100644
index 2529be5274..0000000000
--- a/packages/linux/linux-2.6.27/boc01/012-090115-cy3218-btns.patch
+++ /dev/null
@@ -1,406 +0,0 @@
-Index: linux-2.6.27/drivers/input/misc/cy3218-btns.c
-===================================================================
---- /dev/null
-+++ linux-2.6.27/drivers/input/misc/cy3218-btns.c
-@@ -0,0 +1,373 @@
-+/*
-+ * CAPSENSE Interface driver
-+ *
-+ *
-+ * Copyright (C) 2008, CenoSYS (www.cenosys.com).
-+ *
-+ * Guillaume Ligneul <guillaume.ligneul@gmail.com>
-+ * Jeremy Lainé <jeremy.laine@bolloretelecom.eu>
-+ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
-+ *
-+ * This software program is licensed subject to the GNU General Public License
-+ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/input-polldev.h>
-+#include <linux/ioport.h>
-+#include <linux/module.h>
-+#include <linux/i2c.h>
-+#include <linux/leds.h>
-+
-+static int capsense_attach_adapter(struct i2c_adapter *adapter);
-+static int capsense_detach_client(struct i2c_client *client);
-+#ifdef CONFIG_PM
-+static int capsense_suspend(struct i2c_client *client, pm_message_t mesg);
-+static int capsense_resume(struct i2c_client *client);
-+#endif
-+
-+#define CAPSENSE_NAME "Capsense"
-+
-+/* i2c configuration */
-+#define CAPSENSE_I2C_ADDR 0x25
-+// To debug (may be add in include/linux/i2c-id.h)
-+#define I2C_DRIVERID_CAPSENSE 98
-+
-+#define BUTTONS_POLL_INTERVAL 30 /* msec */
-+
-+#define CAP_OUTPUT_PORT(port) (0x04+(port))
-+#define CAP_OP_SEL(port,bit) (0x1C+(25*(port))+(5*(bit)))
-+#define CAP_READ_STATUS(port) (0x88+(port))
-+
-+#define MASK0 0x10
-+#define MASK1 0x4
-+#define MASK2 0x8
-+#define MASK3 0x1
-+
-+#define CAP_NLEDS 5
-+
-+static int poll_interval = BUTTONS_POLL_INTERVAL;
-+module_param_named(poll, poll_interval, uint, 0);
-+MODULE_PARM_DESC(poll, "poll interval in msec (30=default)");
-+
-+static const unsigned short normal_i2c[] = {
-+ CAPSENSE_I2C_ADDR , I2C_CLIENT_END
-+};
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver capsense_driver = {
-+ .driver = {
-+ .name = CAPSENSE_NAME,
-+ },
-+ .id = I2C_DRIVERID_CAPSENSE,
-+ .attach_adapter = &capsense_attach_adapter,
-+ .detach_client = &capsense_detach_client,
-+#ifdef CONFIG_PM
-+ .suspend = &capsense_suspend,
-+ .resume = &capsense_resume,
-+#endif
-+};
-+
-+struct cy3218_led {
-+ struct led_classdev cdev;
-+ struct cy3218 *capsense;
-+ int port;
-+ int bit;
-+};
-+
-+struct cy3218 {
-+ struct input_polled_dev *ipdev;
-+ struct i2c_client client;
-+ unsigned char key_state;
-+ struct cy3218_led leds[CAP_NLEDS];
-+ unsigned char led_state[2];
-+ struct mutex mutex;
-+};
-+
-+static unsigned short keymap[] = {
-+ // GP0
-+ KEY_F1,
-+ KEY_ENTER,
-+ KEY_DOWN,
-+ KEY_BACKSPACE,
-+ // GP1
-+ KEY_UP,
-+};
-+
-+struct cy3218_ledmap {
-+ char *name;
-+ int port, bit;
-+};
-+
-+static struct cy3218_ledmap ledmap[CAP_NLEDS] = {
-+ { "capsense:blue:back", 0, 1 },
-+ { "capsense:blue:info", 1, 0 },
-+ { "capsense:blue:down", 1, 1 },
-+ { "capsense:blue:ok", 1, 2 },
-+ { "capsense:blue:up", 1, 3 },
-+};
-+
-+static void handle_buttons(struct input_polled_dev *dev)
-+{
-+ struct cy3218 *capsense = dev->private;
-+ u8 port_value;
-+ u8 new_state = 0;
-+ u8 changed;
-+ int i;
-+
-+ mutex_lock(&capsense->mutex);
-+
-+ // read status
-+ port_value = i2c_smbus_read_byte_data(&capsense->client, CAP_READ_STATUS(0));
-+ if (port_value & MASK0) new_state |= 0x01;
-+ if (port_value & MASK1) new_state |= 0x02;
-+ if (port_value & MASK2) new_state |= 0x04;
-+ if (port_value & MASK3) new_state |= 0x08;
-+
-+ port_value = i2c_smbus_read_byte_data(&capsense->client, CAP_READ_STATUS(1));
-+ if (port_value & MASK0) new_state |= 0x10;
-+
-+ mutex_unlock(&capsense->mutex);
-+
-+ // update keyboard state
-+ changed = capsense->key_state ^ new_state;
-+ for (i = 0; i < ARRAY_SIZE(keymap); i++)
-+ if (changed & (1 << i))
-+ input_report_key(dev->input, keymap[i], (new_state & (1 << i)));
-+ capsense->key_state = new_state;
-+ input_sync(dev->input);
-+}
-+
-+
-+static void
-+capsense_led_set(struct led_classdev *led_cdev,
-+ enum led_brightness value)
-+{
-+ struct cy3218_led *led = (struct cy3218_led *) led_cdev;
-+ struct cy3218 *capsense = led->capsense;
-+ int port = led->port;
-+ unsigned char mask = (1 << led->bit);
-+
-+ if ( value )
-+ capsense->led_state[port] |= mask;
-+ else
-+ capsense->led_state[port] &= ~mask;
-+
-+ mutex_lock(&capsense->mutex);
-+ i2c_smbus_write_byte_data(&capsense->client, CAP_OUTPUT_PORT(port), capsense->led_state[port]);
-+ mutex_unlock(&capsense->mutex);
-+}
-+
-+static void
-+capsense_led_enable(struct cy3218_led *led, int state)
-+{
-+ struct cy3218 *capsense = led->capsense;
-+
-+ mutex_lock(&capsense->mutex);
-+ i2c_smbus_write_byte_data(&capsense->client, CAP_OP_SEL(led->port, led->bit), state ? 0x00 : 0x80);
-+ mutex_unlock(&capsense->mutex);
-+}
-+
-+static int
-+capsense_led_init(struct cy3218 *capsense)
-+{
-+ int i;
-+ int ret;
-+
-+ for (i = 0; i < CAP_NLEDS; i++) {
-+ struct cy3218_led *led = &(capsense->leds[i]);
-+
-+ led->cdev.name = ledmap[i].name;
-+ led->cdev.brightness_set = capsense_led_set;
-+ led->capsense = capsense;
-+ led->port = ledmap[i].port;
-+ led->bit = ledmap[i].bit;
-+
-+ ret = led_classdev_register(&capsense->ipdev->input->dev, &led->cdev);
-+ if ( ret < 0 )
-+ return -1;
-+
-+ capsense_led_enable(led, 1);
-+ }
-+
-+ /* Switch all leds off */
-+ mutex_lock(&capsense->mutex);
-+
-+ capsense->led_state[0] = 0x00;
-+ i2c_smbus_write_byte_data(&capsense->client, CAP_OUTPUT_PORT(0), 0x00);
-+
-+ capsense->led_state[1] = 0x00;
-+ i2c_smbus_write_byte_data(&capsense->client, CAP_OUTPUT_PORT(1), 0x00);
-+
-+ mutex_unlock(&capsense->mutex);
-+
-+ return 0;
-+}
-+
-+
-+static void
-+capsense_led_exit(struct cy3218 *capsense)
-+{
-+ int i;
-+
-+ for (i = 0; i < CAP_NLEDS; i++) {
-+ led_classdev_unregister(&capsense->leds[i].cdev);
-+ }
-+}
-+
-+
-+static inline void
-+capsense_led_suspend(struct cy3218 *capsense)
-+{
-+ int i;
-+
-+ for (i = 0; i < CAP_NLEDS; i++) {
-+ struct cy3218_led *led = &(capsense->leds[i]);
-+
-+ led_classdev_suspend(&led->cdev);
-+ capsense_led_enable(led, 0);
-+ }
-+}
-+
-+
-+static inline void
-+capsense_led_resume(struct cy3218 *capsense)
-+{
-+ int i;
-+
-+ for (i = 0; i < CAP_NLEDS; i++) {
-+ struct cy3218_led *led = &(capsense->leds[i]);
-+
-+ capsense_led_enable(led, 1);
-+ led_classdev_resume(&led->cdev);
-+ }
-+}
-+
-+
-+static int
-+capsense_probe(struct i2c_adapter *adapter, int addr, int kind)
-+{
-+ struct cy3218 *capsense;
-+ struct input_polled_dev *ipdev;
-+ struct input_dev *input;
-+ int rc = 0, err = -ENOMEM, i=0;
-+
-+ capsense = kzalloc(sizeof(*capsense), GFP_KERNEL);
-+ if (!capsense)
-+ goto failout;
-+
-+ mutex_init(&capsense->mutex);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ goto failout;
-+ }
-+
-+ ipdev = input_allocate_polled_device();
-+ if (!ipdev)
-+ goto failout;
-+
-+ capsense->key_state = 0;
-+ capsense->ipdev = ipdev;
-+ capsense->client.adapter = adapter;
-+ capsense->client.addr = addr;
-+ capsense->client.driver = &capsense_driver;
-+ strlcpy(capsense->client.name, CAPSENSE_NAME, I2C_NAME_SIZE);
-+ i2c_set_clientdata(&capsense->client, capsense);
-+
-+ rc = i2c_attach_client(&capsense->client);
-+ if (rc)
-+ goto out_attach;
-+
-+ ipdev->poll = handle_buttons;
-+ ipdev->private = capsense;
-+ ipdev->poll_interval = poll_interval;
-+
-+ input = ipdev->input;
-+ input->name = "Capsense buttons";
-+ input->phys = "capsense/input0";
-+ input->id.bustype = BUS_I2C;
-+ input->dev.parent = &capsense->client.dev;
-+
-+ input->keycode = keymap;
-+ input->keycodemax = ARRAY_SIZE(keymap);
-+ input->keycodesize = sizeof(unsigned short);
-+
-+ input_set_capability(input, EV_MSC, MSC_SCAN);
-+ set_bit(EV_KEY, ipdev->input->evbit);
-+
-+ for (i = 0; i < ARRAY_SIZE(keymap); i++)
-+ set_bit(keymap[i], ipdev->input->keybit);
-+
-+ rc = input_register_polled_device(ipdev);
-+ if(rc)
-+ goto out_polled;
-+
-+ if ( capsense_led_init(capsense) )
-+ goto out_registered;
-+
-+ return 0;
-+
-+out_registered:
-+ input_unregister_polled_device(ipdev);
-+out_polled:
-+ i2c_detach_client(&capsense->client);
-+out_attach:
-+ input_free_polled_device(ipdev);
-+failout:
-+ return err;
-+}
-+
-+static int
-+capsense_attach_adapter (struct i2c_adapter *adapter)
-+{
-+ return i2c_probe(adapter, &addr_data, capsense_probe);
-+}
-+
-+static int
-+capsense_detach_client(struct i2c_client *client)
-+{
-+ struct cy3218 *capsense = i2c_get_clientdata(client);
-+
-+ capsense_led_exit(capsense);
-+ input_unregister_polled_device(capsense->ipdev);
-+ i2c_detach_client(&capsense->client);
-+ input_free_polled_device(capsense->ipdev);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int capsense_suspend(struct i2c_client *client, pm_message_t mesg)
-+{
-+ struct cy3218 *capsense = i2c_get_clientdata(client);
-+
-+ capsense_led_suspend(capsense);
-+
-+ return 0;
-+}
-+
-+static int capsense_resume(struct i2c_client *client)
-+{
-+ struct cy3218 *capsense = i2c_get_clientdata(client);
-+
-+ capsense_led_resume(capsense);
-+
-+ return 0;
-+}
-+#endif
-+
-+
-+static int __init capsense_buttons_init(void)
-+{
-+ return i2c_add_driver(&capsense_driver);
-+}
-+
-+static void __exit capsense_buttons_exit(void)
-+{
-+ i2c_del_driver(&capsense_driver);
-+}
-+
-+MODULE_AUTHOR("Guillaume Ligneul <guillaume.ligneul@cenosys.com>");
-+MODULE_DESCRIPTION("Capsense CY3218 Input driver");
-+MODULE_LICENSE("GPL");
-+module_init(capsense_buttons_init);
-+module_exit(capsense_buttons_exit);
-Index: linux-2.6.27/drivers/input/misc/Kconfig
-===================================================================
---- linux-2.6.27.orig/drivers/input/misc/Kconfig
-+++ linux-2.6.27/drivers/input/misc/Kconfig
-@@ -207,4 +207,13 @@ config HP_SDC_RTC
- Say Y here if you want to support the built-in real time clock
- of the HP SDC controller.
-
-+config INPUT_CAPSENSE_BTNS
-+ tristate "CAPSENSE CY3218 button interface"
-+ select INPUT_POLLDEV
-+ select LEDS_CLASS
-+ help
-+ To compile this driver as a module, choose M here: the
-+ module will be called cy3218-btns.
-+ To change poll interval, invoque poll parameter in msecs.
-+
- endif
-Index: linux-2.6.27/drivers/input/misc/Makefile
-===================================================================
---- linux-2.6.27.orig/drivers/input/misc/Makefile
-+++ linux-2.6.27/drivers/input/misc/Makefile
-@@ -20,3 +20,5 @@ obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.
- obj-$(CONFIG_INPUT_UINPUT) += uinput.o
- obj-$(CONFIG_INPUT_APANEL) += apanel.o
- obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o
-+obj-$(CONFIG_INPUT_CAPSENSE_BTNS) += cy3218-btns.o
-+
diff --git a/packages/linux/linux-2.6.27/boc01/012-090219-capsense.patch b/packages/linux/linux-2.6.27/boc01/012-090219-capsense.patch
new file mode 100644
index 0000000000..fed8218427
--- /dev/null
+++ b/packages/linux/linux-2.6.27/boc01/012-090219-capsense.patch
@@ -0,0 +1,865 @@
+Index: linux-2.6.27/drivers/input/misc/Kconfig
+===================================================================
+--- linux-2.6.27.orig/drivers/input/misc/Kconfig
++++ linux-2.6.27/drivers/input/misc/Kconfig
+@@ -207,4 +207,13 @@ config HP_SDC_RTC
+ Say Y here if you want to support the built-in real time clock
+ of the HP SDC controller.
+
++config INPUT_CAPSENSE_BTNS
++ tristate "CAPSENSE CY8C201xx buttons interface"
++ select INPUT_POLLDEV
++ select LEDS_CLASS
++ help
++ To compile this driver as a module, choose M here:
++ the module will be called capsense-btns.
++ To change poll interval, invoque poll parameter in msecs.
++
+ endif
+Index: linux-2.6.27/drivers/input/misc/Makefile
+===================================================================
+--- linux-2.6.27.orig/drivers/input/misc/Makefile
++++ linux-2.6.27/drivers/input/misc/Makefile
+@@ -20,3 +20,4 @@ obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.
+ obj-$(CONFIG_INPUT_UINPUT) += uinput.o
+ obj-$(CONFIG_INPUT_APANEL) += apanel.o
+ obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o
++obj-$(CONFIG_INPUT_CAPSENSE_BTNS) += capsense-btns.o
+Index: linux-2.6.27/drivers/input/misc/capsense-btns.c
+===================================================================
+--- /dev/null
++++ linux-2.6.27/drivers/input/misc/capsense-btns.c
+@@ -0,0 +1,438 @@
++/*
++ * CAPSENSE Interface driver
++ *
++ *
++ * Copyright (C) 2008, CenoSYS (www.cenosys.com).
++ *
++ * Guillaume Ligneul <guillaume.ligneul@gmail.com>
++ * Jeremy Lainé <jeremy.laine@bolloretelecom.eu>
++ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ */
++
++#include <linux/init.h>
++#include <linux/input-polldev.h>
++#include <linux/ioport.h>
++#include <linux/module.h>
++#include <linux/i2c.h>
++#include <linux/leds.h>
++
++
++static int capsense_attach_adapter(struct i2c_adapter *adapter);
++static int capsense_detach_client(struct i2c_client *client);
++#ifdef CONFIG_PM
++static int capsense_suspend(struct i2c_client *client, pm_message_t mesg);
++static int capsense_resume(struct i2c_client *client);
++#endif
++
++#define DRIVER_NAME "capsense"
++
++/* i2c configuration */
++#define CAPSENSE_I2C_ADDR 0x25
++// To debug (may be add in include/linux/i2c-id.h)
++#define I2C_DRIVERID_CAPSENSE 98
++
++#define BUTTONS_POLL_INTERVAL 30 /* msec */
++
++#define CAP_OUTPUT_PORT(port) (0x04+(port))
++#define CAP_OP_SEL(port,bit) (0x1C+(25*(port))+(5*(bit)))
++#define CAP_READ_STATUS(port) (0x88+(port))
++
++#define CAP_CS(command,port,bit) ((command)+(5*(port))+(bit))
++#define CAP_CS_FINGER_TH(port,bit) CAP_CS(0x61,port,bit)
++#define CAP_CS_IDAC(port,bit) CAP_CS(0x6B,port,bit)
++
++#define CAP_DEVICE_ID 0x7A
++#define CAP_DEVICE_STATUS 0x7B
++#define CAP_I2C_ADDR_DM 0x7C
++
++#define CAP_COMMAND_REG 0xA0
++#define CAP_COMMAND_STORE_NVM 0x01
++#define CAP_COMMAND_RESTORE_FACTORY 0x02
++#define CAP_COMMAND_RECONFIGURE 0x06
++#define CAP_COMMAND_NORMAL_MODE 0x07
++#define CAP_COMMAND_SETUP_MODE 0x08
++
++#define CAP_NLEDS 5
++
++static int poll_interval = BUTTONS_POLL_INTERVAL;
++module_param_named(poll, poll_interval, uint, 0);
++MODULE_PARM_DESC(poll, "poll interval in msec (30=default)");
++
++static const unsigned short normal_i2c[] = {
++ CAPSENSE_I2C_ADDR , I2C_CLIENT_END
++};
++I2C_CLIENT_INSMOD;
++
++static struct i2c_driver capsense_driver = {
++ .driver = {
++ .name = DRIVER_NAME,
++ },
++ .id = I2C_DRIVERID_CAPSENSE,
++ .attach_adapter = &capsense_attach_adapter,
++ .detach_client = &capsense_detach_client,
++#ifdef CONFIG_PM
++ .suspend = &capsense_suspend,
++ .resume = &capsense_resume,
++#endif
++};
++
++struct capsense_led {
++ struct led_classdev cdev;
++ struct capsense_ctx *capsense;
++ int port;
++ int bit;
++};
++
++struct capsense_ctx {
++ struct input_polled_dev *ipdev;
++ struct i2c_client client;
++ unsigned char key_state;
++ struct capsense_led leds[CAP_NLEDS];
++ unsigned char led_state[2];
++ struct mutex mutex;
++};
++
++static unsigned short input_keymap[] = {
++ // GP0
++ KEY_F1,
++ KEY_ENTER,
++ KEY_DOWN,
++ KEY_BACKSPACE,
++ // GP1
++ KEY_UP,
++};
++
++struct capsense_keymap {
++ char *name;
++ int port, bit;
++};
++
++static struct capsense_keymap phys_keymap[] = {
++ { "info", 0, 4 },
++ { "ok", 0, 2 },
++ { "down", 0, 3 },
++ { "back", 0, 0 },
++ { "up", 1, 4 },
++};
++
++
++struct capsense_ledmap {
++ char *name;
++ int port, bit;
++};
++
++static struct capsense_ledmap ledmap[CAP_NLEDS] = {
++ { "capsense:blue:back", 0, 1 },
++ { "capsense:blue:info", 1, 0 },
++ { "capsense:blue:down", 1, 1 },
++ { "capsense:blue:ok", 1, 2 },
++ { "capsense:blue:up", 1, 3 },
++};
++
++
++/*
++ * Buttons events handling
++ */
++
++static void handle_buttons(struct input_polled_dev *dev)
++{
++ struct capsense_ctx *capsense = dev->private;
++ u8 port_value;
++ u8 new_state = 0;
++ int port;
++ u8 changed;
++ int i;
++
++ mutex_lock(&capsense->mutex);
++
++ // read status
++ port = -1;
++ port_value = 0;
++ for (i = 0; i < ARRAY_SIZE(phys_keymap); i++) {
++ if ( phys_keymap[i].port != port ) {
++ port = phys_keymap[i].port;
++ port_value = i2c_smbus_read_byte_data(&capsense->client, CAP_READ_STATUS(port));
++ }
++
++ if ( port_value & (1 << phys_keymap[i].bit) )
++ new_state |= (1 << i);
++ }
++
++ mutex_unlock(&capsense->mutex);
++
++ // update keyboard state
++ changed = capsense->key_state ^ new_state;
++ for (i = 0; i < ARRAY_SIZE(input_keymap); i++)
++ if (changed & (1 << i))
++ input_report_key(dev->input, input_keymap[i], (new_state & (1 << i)));
++ capsense->key_state = new_state;
++ input_sync(dev->input);
++}
++
++
++/*
++ * LEDs management
++ */
++
++static void
++capsense_led_set(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct capsense_led *led = (struct capsense_led *) led_cdev;
++ struct capsense_ctx *capsense = led->capsense;
++ int port = led->port;
++ unsigned char mask = (1 << led->bit);
++
++ if ( value )
++ capsense->led_state[port] |= mask;
++ else
++ capsense->led_state[port] &= ~mask;
++
++ mutex_lock(&capsense->mutex);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_OUTPUT_PORT(port), capsense->led_state[port]);
++ mutex_unlock(&capsense->mutex);
++}
++
++static void
++capsense_led_enable(struct capsense_led *led, int state)
++{
++ struct capsense_ctx *capsense = led->capsense;
++
++ mutex_lock(&capsense->mutex);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_OP_SEL(led->port, led->bit), state ? 0x00 : 0x80);
++ mutex_unlock(&capsense->mutex);
++}
++
++static int
++capsense_led_init(struct capsense_ctx *capsense)
++{
++ int i;
++ int ret;
++
++ for (i = 0; i < CAP_NLEDS; i++) {
++ struct capsense_led *led = &(capsense->leds[i]);
++
++ led->cdev.name = ledmap[i].name;
++ led->cdev.brightness_set = capsense_led_set;
++ led->capsense = capsense;
++ led->port = ledmap[i].port;
++ led->bit = ledmap[i].bit;
++
++ ret = led_classdev_register(&capsense->ipdev->input->dev, &led->cdev);
++ if ( ret < 0 )
++ return -1;
++
++ capsense_led_enable(led, 1);
++ }
++
++ /* Switch all leds off */
++ mutex_lock(&capsense->mutex);
++
++ capsense->led_state[0] = 0x00;
++ i2c_smbus_write_byte_data(&capsense->client, CAP_OUTPUT_PORT(0), 0x00);
++
++ capsense->led_state[1] = 0x00;
++ i2c_smbus_write_byte_data(&capsense->client, CAP_OUTPUT_PORT(1), 0x00);
++
++ mutex_unlock(&capsense->mutex);
++
++ return 0;
++}
++
++
++static void
++capsense_led_exit(struct capsense_ctx *capsense)
++{
++ int i;
++
++ for (i = 0; i < CAP_NLEDS; i++) {
++ led_classdev_unregister(&capsense->leds[i].cdev);
++ }
++}
++
++
++static inline void
++capsense_led_suspend(struct capsense_ctx *capsense)
++{
++ int i;
++
++ for (i = 0; i < CAP_NLEDS; i++) {
++ struct capsense_led *led = &(capsense->leds[i]);
++
++ led_classdev_suspend(&led->cdev);
++ capsense_led_enable(led, 0);
++ }
++}
++
++
++static inline void
++capsense_led_resume(struct capsense_ctx *capsense)
++{
++ int i;
++
++ for (i = 0; i < CAP_NLEDS; i++) {
++ struct capsense_led *led = &(capsense->leds[i]);
++
++ capsense_led_enable(led, 1);
++ led_classdev_resume(&led->cdev);
++ }
++}
++
++
++/*
++ * Device configuration through procfs entries
++ */
++
++#ifdef CONFIG_PROC_FS
++#include "capsense-procfs.c"
++#endif
++
++
++/*
++ * Device initialisation
++ */
++
++static int
++capsense_probe(struct i2c_adapter *adapter, int addr, int kind)
++{
++ struct capsense_ctx *capsense;
++ struct input_polled_dev *ipdev;
++ struct input_dev *input;
++ int rc = 0, err = -ENOMEM, i=0;
++
++ capsense = kzalloc(sizeof(*capsense), GFP_KERNEL);
++ if (!capsense)
++ goto failout;
++
++ mutex_init(&capsense->mutex);
++
++ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
++ goto failout;
++ }
++
++ ipdev = input_allocate_polled_device();
++ if (!ipdev)
++ goto failout;
++
++ capsense->key_state = 0;
++ capsense->ipdev = ipdev;
++ capsense->client.adapter = adapter;
++ capsense->client.addr = addr;
++ capsense->client.driver = &capsense_driver;
++ strlcpy(capsense->client.name, DRIVER_NAME, I2C_NAME_SIZE);
++ i2c_set_clientdata(&capsense->client, capsense);
++
++ rc = i2c_attach_client(&capsense->client);
++ if (rc)
++ goto out_attach;
++
++ ipdev->poll = handle_buttons;
++ ipdev->private = capsense;
++ ipdev->poll_interval = poll_interval;
++
++ input = ipdev->input;
++ input->name = "Capsense buttons";
++ input->phys = "capsense/input0";
++ input->id.bustype = BUS_I2C;
++ input->dev.parent = &capsense->client.dev;
++
++ input->keycode = input_keymap;
++ input->keycodemax = ARRAY_SIZE(input_keymap);
++ input->keycodesize = sizeof(unsigned short);
++
++ input_set_capability(input, EV_MSC, MSC_SCAN);
++ set_bit(EV_KEY, ipdev->input->evbit);
++
++ for (i = 0; i < ARRAY_SIZE(input_keymap); i++)
++ set_bit(input_keymap[i], ipdev->input->keybit);
++
++ rc = input_register_polled_device(ipdev);
++ if(rc)
++ goto out_polled;
++
++ if ( capsense_led_init(capsense) )
++ goto out_registered;
++
++#ifdef CONFIG_PROC_FS
++ /* Create /proc entries for hardware device configuration */
++ capsense_proc_init(capsense);
++#endif
++
++ return 0;
++
++out_registered:
++ input_unregister_polled_device(ipdev);
++out_polled:
++ i2c_detach_client(&capsense->client);
++out_attach:
++ input_free_polled_device(ipdev);
++failout:
++ return err;
++}
++
++static int
++capsense_attach_adapter (struct i2c_adapter *adapter)
++{
++ return i2c_probe(adapter, &addr_data, capsense_probe);
++}
++
++static int
++capsense_detach_client(struct i2c_client *client)
++{
++ struct capsense_ctx *capsense = i2c_get_clientdata(client);
++
++ capsense_led_exit(capsense);
++ input_unregister_polled_device(capsense->ipdev);
++ i2c_detach_client(&capsense->client);
++ input_free_polled_device(capsense->ipdev);
++ return 0;
++}
++
++
++/*
++ * Power management
++ */
++
++#ifdef CONFIG_PM
++static int capsense_suspend(struct i2c_client *client, pm_message_t mesg)
++{
++ struct capsense_ctx *capsense = i2c_get_clientdata(client);
++
++ capsense_led_suspend(capsense);
++
++ return 0;
++}
++
++static int capsense_resume(struct i2c_client *client)
++{
++ struct capsense_ctx *capsense = i2c_get_clientdata(client);
++
++ capsense_led_resume(capsense);
++
++ return 0;
++}
++#endif
++
++
++/*
++ * Driver initialisation
++ */
++
++static int __init capsense_buttons_init(void)
++{
++ return i2c_add_driver(&capsense_driver);
++}
++
++static void __exit capsense_buttons_exit(void)
++{
++ i2c_del_driver(&capsense_driver);
++}
++
++MODULE_AUTHOR("Guillaume Ligneul <guillaume.ligneul@cenosys.com>");
++MODULE_DESCRIPTION("Capsense CY8C201xx Input driver");
++MODULE_LICENSE("GPL");
++module_init(capsense_buttons_init);
++module_exit(capsense_buttons_exit);
+Index: linux-2.6.27/drivers/input/misc/capsense-procfs.c
+===================================================================
+--- /dev/null
++++ linux-2.6.27/drivers/input/misc/capsense-procfs.c
+@@ -0,0 +1,390 @@
++/*
++ * CAPSENSE Interface driver
++ * Device setup using procfs
++ *
++ * Copyright (C) 2008, Goobie (www.goobie.fr).
++ *
++ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ */
++
++#include <linux/proc_fs.h>
++#include <linux/uaccess.h>
++
++
++struct capsense_proc_data {
++ struct capsense_ctx *capsense;
++ struct capsense_keymap *phys;
++ char *name;
++ unsigned char command;
++ unsigned char hex;
++};
++
++struct capsense_proc_entry {
++ char *name;
++ unsigned char command;
++ struct capsense_proc_data data[ARRAY_SIZE(phys_keymap)];
++};
++
++static struct capsense_proc_entry capsense_proc_key_entries[] = {
++ { "CS_FINGER_TH", CAP_CS_FINGER_TH(0,0) },
++ { "CS_IDAC", CAP_CS_IDAC(0,0) },
++};
++
++static struct capsense_proc_entry capsense_proc_device_entries[] = {
++ { "DEVICE_ID", CAP_DEVICE_ID },
++ { "DEVICE_STATUS", CAP_DEVICE_STATUS },
++};
++
++struct capsense_proc_command {
++ char *name;
++ unsigned char command;
++ struct capsense_ctx *capsense;
++};
++
++static struct capsense_proc_command capsense_proc_commands[] = {
++ { "store", CAP_COMMAND_STORE_NVM },
++ //{ "factory", CAP_COMMAND_RESTORE_FACTORY },
++ //{ "reconfigure", CAP_COMMAND_RECONFIGURE },
++};
++
++
++static int capsense_proc_read(char *page, char **start, off_t off, int count,
++ int *eof, void *_data)
++{
++ struct capsense_proc_data *data = _data;
++ struct capsense_ctx *capsense = data->capsense;
++ u8 value;
++ int len;
++
++ mutex_lock(&capsense->mutex);
++ value = i2c_smbus_read_byte_data(&capsense->client, data->command);
++ mutex_unlock(&capsense->mutex);
++
++ if ( data->hex )
++ len = sprintf(page, "%02X\n", value);
++ else
++ len = sprintf(page, "%u\n", value);
++
++ len -= off;
++ if ( len < count ) {
++ *eof = 1;
++ if ( len <= 0 )
++ return 0;
++ } else {
++ len = count;
++ }
++
++ *start = page + off;
++
++ return len;
++}
++
++
++static int capsense_proc_write(struct file *file, const char *buf,
++ unsigned long count, void *_data)
++{
++ struct capsense_proc_data *data = _data;
++ struct capsense_ctx *capsense = data->capsense;
++ char lbuf[count+1];
++ u8 value;
++
++ /* Only root can do this */
++ if ( !capable(CAP_SYS_ADMIN) )
++ return -EACCES;
++
++ memset(lbuf, 0, sizeof(lbuf));
++
++ if (copy_from_user(lbuf, buf, count))
++ return -EFAULT;
++
++ if ( sscanf(lbuf, "%hhi", &value) == 1 ) {
++ mutex_lock(&capsense->mutex);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_COMMAND_REG, CAP_COMMAND_SETUP_MODE);
++ i2c_smbus_write_byte_data(&capsense->client, data->command, value);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_COMMAND_REG, CAP_COMMAND_NORMAL_MODE);
++ mutex_unlock(&capsense->mutex);
++ }
++ else {
++ printk(KERN_INFO DRIVER_NAME ": [%s/%s] Syntax error in expression\n", data->phys->name, data->name);
++ return -EINVAL;
++ }
++
++ return count;
++}
++
++
++static inline char *str_skip_blanks(char *s)
++{
++ while ( (*s != '\0') && (*s <= ' ') )
++ s++;
++ return s;
++}
++
++
++static inline char *str_skip_chars(char *s)
++{
++ while ( *s > ' ' )
++ s++;
++ return s;
++}
++
++
++static int capsense_proc_write_iic(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ struct capsense_ctx *capsense = data;
++ char lbuf[count+1];
++ int lnum;
++ char *s;
++
++ /* Only root can do this */
++ if ( !capable(CAP_SYS_ADMIN) )
++ return -EACCES;
++
++ printk(KERN_INFO DRIVER_NAME ": Reading configuration script from /proc/" DRIVER_NAME "/iic (%lu bytes)\n", count);
++
++ memset(lbuf, 0, sizeof(lbuf));
++
++ if (copy_from_user(lbuf, buf, count))
++ return -EFAULT;
++
++ s = lbuf;
++ lnum = 0;
++
++ while ( *s != '\0' ) {
++ char *line;
++ char operation;
++ unsigned char data[255];
++ int size;
++ struct i2c_msg msg;
++ int ret;
++
++ lnum++;
++
++ /* Spot the end of the line */
++ line = s;
++ while ( (*s != '\0') && (*s != '\n') )
++ s++;
++ if ( *s != '\0' )
++ *(s++) = '\0';
++
++ //printk(KERN_INFO DRIVER_NAME ": iic:%d: '%s'\n", lnum, line);
++
++ /* Strip leading blank characters */
++ line = str_skip_blanks(line);
++
++ /* Empty or commented line: skip! */
++ if ( (*line == '\0') || (*line == '#') )
++ continue;
++
++ /* Only accept write operations 'w' */
++ operation = *(line++);
++ if ( operation != 'w' ) {
++ printk(KERN_ERR DRIVER_NAME ": iic:%d: Unknown operation '%c ...' -- skipped\n", lnum, operation);
++ continue;
++ }
++
++ /* Extract data values */
++ size = 0;
++ while ( (*line != '\0') && (size < sizeof(data)) ) {
++ line = str_skip_blanks(line);
++ if ( *line != '\0' )
++ sscanf(line, "%hhx", &data[size++]);
++ line = str_skip_chars(line);
++ }
++
++ {
++ int i;
++
++ printk(KERN_DEBUG DRIVER_NAME ": iic:%d: %c", lnum, operation);
++ for (i = 0; i < size; i++)
++ printk(" %02X", data[i]);
++ printk("\n");
++ }
++
++ /* Do nothing if there are less than 2 data bytes (address, command) */
++ if ( size < 3 ) {
++ printk(KERN_ERR DRIVER_NAME ": iic:%d: Too few data for operation '%c ...' -- skipped\n", lnum, operation);
++ continue;
++ }
++
++ /* First data byte is the i2c device address:
++ Warn if it does not match the standard i2c address */
++ if ( data[0] != CAPSENSE_I2C_ADDR ) {
++ printk(KERN_WARNING DRIVER_NAME ": iic:%d: WARNING - Specified i2c address (%02X) differs from standard i2c address (%02X)\n", lnum, data[0], CAPSENSE_I2C_ADDR);
++ }
++
++ /* Second data byte is the capsense register:
++ Warn if changing the device I2C address */
++ if ( data[1] == CAP_I2C_ADDR_DM ) {
++ printk(KERN_WARNING DRIVER_NAME ": iic:%d: WARNING - Changing i2c address to %02X (I2C_ADDR_DM=%02X)\n", lnum, data[2] & 0x7F, data[2]);
++ }
++
++ /* Send command to i2c device */
++ mutex_lock(&capsense->mutex);
++
++ msg.addr = data[0];
++ msg.flags = capsense->client.flags;
++ msg.len = size - 1;
++ msg.buf = data + 1;
++ //printk(KERN_INFO DRIVER_NAME ": iic:%d: i2c transfer: addr=0x%02X flags=0x%04X len=%d\n", lnum, msg.addr, msg.flags, msg.len);
++
++ ret = i2c_transfer(capsense->client.adapter, &msg, 1);
++ if ( ret < 0 )
++ printk(KERN_ERR DRIVER_NAME ": iic:%d: i2c transfer failed (%d), command rejected\n", lnum, ret);
++
++ mutex_unlock(&capsense->mutex);
++ }
++
++ return count;
++}
++
++
++static int capsense_proc_write_command(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ struct capsense_proc_command *command = data;
++ struct capsense_ctx *capsense = command->capsense;
++
++ /* Only root can do this */
++ if ( !capable(CAP_SYS_ADMIN) )
++ return -EACCES;
++
++ printk(KERN_INFO DRIVER_NAME ": %s (%02X)\n", command->name, command->command);
++
++ mutex_lock(&capsense->mutex);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_COMMAND_REG, CAP_COMMAND_SETUP_MODE);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_COMMAND_REG, command->command);
++ i2c_smbus_write_byte_data(&capsense->client, CAP_COMMAND_REG, CAP_COMMAND_NORMAL_MODE);
++ mutex_unlock(&capsense->mutex);
++
++ return count;
++}
++
++
++static int capsense_proc_init(struct capsense_ctx *capsense)
++{
++ struct proc_dir_entry *root;
++ struct proc_dir_entry *dir;
++ struct proc_dir_entry *ent;
++ int i;
++
++ /* Create capsense proc directory */
++ printk(KERN_INFO DRIVER_NAME ": Creating setup entries in /proc/" DRIVER_NAME "/\n");
++
++ root = proc_mkdir(DRIVER_NAME, NULL);
++ if ( root == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create directory /proc/" DRIVER_NAME "\n");
++ return -1;
++ }
++
++ root->owner = THIS_MODULE;
++
++ /* Create iic config file dump entry */
++ ent = create_proc_entry("iic", S_IFREG|S_IWUSR, root);
++ if ( ent == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create entry /proc/" DRIVER_NAME "/iic\n");
++ return -1;
++ }
++
++ ent->owner = THIS_MODULE;
++ ent->data = capsense;
++ ent->write_proc = capsense_proc_write_iic;
++
++ /* Create commands directory */
++ dir = proc_mkdir("commands", root);
++ if ( dir == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create directory /proc/" DRIVER_NAME "/commands\n");
++ return -1;
++ }
++
++ dir->owner = THIS_MODULE;
++
++ /* Create command entries */
++ for (i = 0; i < ARRAY_SIZE(capsense_proc_commands); i++) {
++ struct capsense_proc_command *command = &capsense_proc_commands[i];
++
++ command->capsense = capsense;
++
++ ent = create_proc_entry(command->name, S_IFREG|S_IWUSR, dir);
++ if ( ent == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create entry /proc/" DRIVER_NAME "/commands/%s\n", command->name);
++ return -1;
++ }
++
++ ent->owner = THIS_MODULE;
++ ent->data = command;
++ ent->write_proc = capsense_proc_write_command;
++ }
++
++ /* Create device status read entries */
++ for (i = 0; i < ARRAY_SIZE(capsense_proc_device_entries); i++) {
++ struct capsense_proc_entry *entry = &(capsense_proc_device_entries[i]);
++ struct capsense_proc_data *data = &(entry->data[i]);
++
++ data->capsense = capsense;
++ data->phys = NULL;
++ data->name = entry->name;
++ data->command = entry->command;
++ data->hex = 1;
++
++ ent = create_proc_entry(entry->name, S_IFREG|S_IRUSR, root);
++ if ( ent == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create entry /proc/" DRIVER_NAME "/%s\n", entry->name);
++ continue;
++ }
++
++ ent->owner = THIS_MODULE;
++ ent->data = data;
++ ent->read_proc = capsense_proc_read;
++ }
++
++ /* Create keys management directory */
++ dir = proc_mkdir("keys", root);
++ if ( dir == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create directory /proc/" DRIVER_NAME "/keys\n");
++ return -1;
++ }
++
++ dir->owner = THIS_MODULE;
++
++ /* Create keys sensitivity adjustment entries */
++ for (i = 0; i < ARRAY_SIZE(phys_keymap); i++) {
++ struct capsense_keymap *phys = &phys_keymap[i];
++ struct proc_dir_entry *subdir;
++ int ientry;
++
++ subdir = proc_mkdir(phys->name, dir);
++ if ( subdir == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create directory /proc/" DRIVER_NAME "/keys/%s\n", phys->name);
++ continue;
++ }
++
++ for (ientry = 0; ientry < ARRAY_SIZE(capsense_proc_key_entries); ientry++) {
++ struct capsense_proc_entry *entry = &(capsense_proc_key_entries[ientry]);
++ struct capsense_proc_data *data = &(entry->data[i]);
++
++ data->capsense = capsense;
++ data->phys = phys;
++ data->name = entry->name;
++ data->command = CAP_CS(entry->command, phys->port, phys->bit);
++ data->hex = 0;
++
++ ent = create_proc_entry(entry->name, S_IFREG|S_IRUSR|S_IWUSR, subdir);
++ if ( ent == NULL ) {
++ printk(KERN_WARNING DRIVER_NAME ": Cannot create entry /proc/" DRIVER_NAME "/keys/%s/%s\n", phys->name, entry->name);
++ continue;
++ }
++
++ ent->owner = THIS_MODULE;
++ ent->data = data;
++ ent->read_proc = capsense_proc_read;
++ ent->write_proc = capsense_proc_write;
++ }
++ }
++
++ return 0;
++}
diff --git a/packages/linux/linux-2.6.27/boc01/013-090116-lcd.patch b/packages/linux/linux-2.6.27/boc01/013-090116-lcd.patch
deleted file mode 100644
index 46a7534d2f..0000000000
--- a/packages/linux/linux-2.6.27/boc01/013-090116-lcd.patch
+++ /dev/null
@@ -1,933 +0,0 @@
-Index: linux-2.6.27/drivers/video/Kconfig
-===================================================================
---- linux-2.6.27.orig/drivers/video/Kconfig
-+++ linux-2.6.27/drivers/video/Kconfig
-@@ -480,6 +480,28 @@ config FB_ARC
- this driver, say Y or M; otherwise say N. You must specify the
- GPIO IO address to be used for setting control and data.
-
-+config FB_NT7506
-+ tristate "Novatek 7506 LCD board support"
-+ depends on FB
-+ select FB_SYS_FILLRECT
-+ select FB_SYS_COPYAREA
-+ select FB_SYS_IMAGEBLIT
-+ select FB_SYS_FOPS
-+ select FB_BACKLIGHT
-+ select LCD_CLASS_DEVICE
-+ help
-+ This is the frame buffer device driver for the Novatek 7506 Monochrome/Grayscale LCD board.
-+ The board is based on the NT7506 LCD controller.
-+
-+config FB_NT7506_GRAYSCALE
-+ bool "Novatek 7506 Grayscale mode"
-+ depends on FB_NT7506
-+ default y
-+ help
-+ This option switches the Monochrome/Grayscale mode for the Novatek 7506 LCD board.
-+ Say Y to enable 4-levels Grayscale mode (2 bpp).
-+ Say N to enable Monochrome mode (1 bpp).
-+
- config FB_ATARI
- bool "Atari native chipset support"
- depends on (FB = y) && ATARI
-Index: linux-2.6.27/drivers/video/Makefile
-===================================================================
---- linux-2.6.27.orig/drivers/video/Makefile
-+++ linux-2.6.27/drivers/video/Makefile
-@@ -31,6 +31,7 @@ obj-$(CONFIG_FB_DEFERRED_IO) += fb_def
- obj-$(CONFIG_FB_AMIGA) += amifb.o c2p.o
- obj-$(CONFIG_FB_AM200EPD) += am200epd.o
- obj-$(CONFIG_FB_ARC) += arcfb.o
-+obj-$(CONFIG_FB_NT7506) += nt7506fb.o
- obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o
- obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
- obj-$(CONFIG_FB_PM2) += pm2fb.o
-Index: linux-2.6.27/drivers/video/nt7506fb.c
-===================================================================
---- /dev/null
-+++ linux-2.6.27/drivers/video/nt7506fb.c
-@@ -0,0 +1,847 @@
-+/*
-+ * linux/drivers/video/nt7506fb.c -- FB driver for NT7506 monochrome LCD board
-+ *
-+ * Copyright (C) 2008, CenoSYS (www.cenosys.com).
-+ *
-+ * Alexandre Coffignal <alexandre.coffignal@cenosys.com>
-+ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
-+ * Jeremy Laine <jeremy.laine@bolloretelecom.eu>
-+ *
-+ * 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.
-+ *
-+ * Layout is based on arcfb.c by Jaya Kumar
-+ *
-+ * This driver was written to be used with the Novatek NT7506 LCD board.
-+ *
-+ * Novatek uses a set of NT7506 chips that control individual 128x128 LCD
-+ * matrices. The interface between the board and the host is TTL based GPIO.
-+ *
-+ * General notes:
-+ * - User must set tuhold. It's in microseconds. According to the 108 spec,
-+ * the hold time is supposed to be at least 1 microsecond.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/delay.h>
-+#include <linux/timer.h>
-+#include <linux/fb.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/backlight.h>
-+#include <linux/lcd.h>
-+#include <linux/nt7506fb.h>
-+
-+#include <linux/uaccess.h>
-+
-+#define DRIVER_NAME "nt7506fb"
-+
-+//NT7506 Hardware
-+#define LCD_RST 0x08
-+#define LCD_RSTN 0x00
-+#define LCD_BCKLIGH 0x04
-+#define LCD_BCKLIGHN 0x00
-+#define LCD_RS 0x02
-+#define LCD_RSN 0x00
-+#define LCD_ERD 0x01
-+#define LCD_ERDN 0x00
-+
-+//Base address
-+#define LCD_BASE 0xf0000000
-+#define LCD_SIZE 0x2
-+
-+//NT7506 Instructions
-+#define NT_ICON 0xA2
-+#define NT_PAGE_ADDR 0xB0
-+#define NT_COL_MSB 0x10
-+#define NT_COL_LSB 0x00
-+#define NT_DISP 0xAE
-+#define NT_START_LINE 0x40
-+#define NT_COM0 0x44
-+#define NT_DUTY 0x48
-+#define DUTY_1_128 0x80
-+#define NT_REV_DISP 0xA6
-+#define NT_POWER 0x28
-+#define VC 0x04
-+#define VR 0x02
-+#define VF 0x01
-+#define NT_DCDC 0x64
-+#define TIME6 0x03
-+#define NT_REG_RES 0x20
-+#define RES_7_2 0x07
-+#define NT_ELEC_VOL 0x81
-+#define NT_BIAS 0x50
-+#define BIAS_1_11 0x06
-+#define NT_ADC_NOR 0xA0
-+#define NT_ADC_REV 0xA1
-+#define NT_SHL_NOR 0xC0
-+#define NT_SHL_REV 0xC8
-+#define NT_SET_PWRSAVE 0xA8
-+#define NT_OSC 0xAB
-+#define NT_RLS_PWRSAVE 0xE1
-+#define NT_RESET 0xE2
-+#define NT_DATA_DIR 0xe8
-+#define NT_FRC_PWM 0x90
-+#define PWM15 0x03
-+
-+#define ON 0x01
-+#define OFF 0x00
-+
-+#define NT_GRAY_SCALE 0x88
-+#define GRAY_WHITE_AB 0
-+#define GRAY_WHITE_CD 1
-+#define GRAY_LIGHT_AB 2
-+#define GRAY_LIGHT_CD 3
-+#define GRAY_DARK_AB 4
-+#define GRAY_DARK_CD 5
-+#define GRAY_BLACK_AB 6
-+#define GRAY_BLACK_CD 7
-+
-+// Geometric settings
-+#define LCD_WIDTH 128
-+#define LCD_HEIGHT 128
-+#define LCD_NPAGES (LCD_HEIGHT/8) /* LCD pages of 8 vertical pixels */
-+
-+#define DEFAULT_CONTRAST 20
-+#define DEFAULT_FPS 5
-+
-+static struct resource *lcd_mem = NULL;
-+static void * _lcd_io = NULL;
-+static unsigned long tuhold;
-+struct fb_info *info;
-+static struct timer_list fb_timer;
-+static char _fps = DEFAULT_FPS;
-+static char _backlight = 1;
-+
-+struct nt7506fb_par {
-+ atomic_t ref_count;
-+ struct fb_info *info;
-+ spinlock_t lock;
-+ struct lcd_device *lcd_dev;
-+ int power;
-+ int contrast;
-+};
-+
-+static struct fb_fix_screeninfo nt7506fb_fix __initdata = {
-+ .id = DRIVER_NAME,
-+ .type = FB_TYPE_PACKED_PIXELS,
-+#ifdef CONFIG_FB_NT7506_GRAYSCALE
-+ .visual = FB_VISUAL_STATIC_PSEUDOCOLOR,
-+ .line_length = LCD_WIDTH / 4,
-+#else
-+ .visual = FB_VISUAL_MONO01,
-+ .line_length = LCD_WIDTH / 8,
-+#endif
-+ .xpanstep = 1,
-+ .ypanstep = 1,
-+ .ywrapstep = 0,
-+ .accel = FB_ACCEL_NONE,
-+};
-+
-+static struct fb_var_screeninfo nt7506fb_var __initdata = {
-+ .xres = LCD_WIDTH,
-+ .yres = LCD_HEIGHT,
-+ .xres_virtual = LCD_WIDTH,
-+ .yres_virtual = LCD_HEIGHT,
-+ .nonstd = 1,
-+#ifdef CONFIG_FB_NT7506_GRAYSCALE
-+ .bits_per_pixel = 2,
-+ .grayscale = 1,
-+ .red = { 0, 2, 0 },
-+ .green = { 0, 2, 0 },
-+ .blue = { 0, 2, 0 },
-+ .transp = { 0, 0, 0 },
-+#else
-+ .bits_per_pixel = 1,
-+#endif
-+};
-+
-+
-+/*
-+ * Low-level i/o primitives
-+ */
-+
-+static void NT7506_init_lcd(char ael);
-+
-+static void NT7506_writeb_ctl(unsigned char value)
-+{
-+ unsigned short svalue;
-+ char bl = _backlight ? LCD_BCKLIGH : LCD_BCKLIGHN;
-+
-+ svalue=value<<8 | LCD_RSN | LCD_RST | LCD_ERDN | bl;
-+ iowrite16(svalue, _lcd_io);
-+ udelay(tuhold);
-+ //The data on DB0/7 are latched at the falling edge of the E_RD signal
-+ svalue=value<<8 | LCD_RSN | LCD_RST | LCD_ERD | bl;
-+ iowrite16(svalue, _lcd_io);
-+ udelay(tuhold);
-+}
-+
-+static void NT7506_writeb_data(unsigned char value)
-+{
-+ unsigned short svalue;
-+ char bl = _backlight ? LCD_BCKLIGH : LCD_BCKLIGHN;
-+
-+ svalue=value<<8|LCD_RS |LCD_RST | LCD_ERD | bl ;
-+ iowrite16(svalue, _lcd_io);
-+ udelay(tuhold);
-+ //The data on DB0/7 are latched at the falling edge of the E_RD signal
-+ svalue=value<<8|LCD_RS |LCD_RST | LCD_ERDN | bl;
-+ iowrite16(svalue, _lcd_io);
-+ udelay(tuhold);
-+}
-+
-+static void NT7506_set_start_line(unsigned char y)
-+{
-+ NT7506_writeb_ctl(NT_START_LINE);
-+ NT7506_writeb_ctl(y);
-+}
-+
-+static void NT7506_set_yaddr(unsigned char y)
-+{
-+ NT7506_writeb_ctl(NT_PAGE_ADDR+y);
-+}
-+
-+static void NT7506_set_xaddr(unsigned char x)
-+{
-+ NT7506_writeb_ctl(NT_COL_MSB | (x >> 0x04)); //Send high nibble
-+ NT7506_writeb_ctl(NT_COL_LSB | (x & 0x0F) ); //Send low nibble
-+}
-+
-+
-+/*
-+ * LCD device management
-+ */
-+
-+static int
-+nt7506fb_lcd_get_contrast(struct lcd_device *lcd_dev)
-+{
-+ struct nt7506fb_par *par = lcd_get_data(lcd_dev);
-+ return par->contrast;
-+}
-+
-+static int
-+nt7506fb_lcd_set_contrast(struct lcd_device *lcd_dev, int contrast)
-+{
-+ struct nt7506fb_par *par = lcd_get_data(lcd_dev);
-+
-+ par->contrast = contrast;
-+ NT7506_writeb_ctl(NT_ELEC_VOL); NT7506_writeb_ctl(par->contrast);
-+
-+ //printk(KERN_INFO DRIVER_NAME": contrast = %d\n", par->contrast);
-+ return 0;
-+}
-+
-+static struct lcd_ops nt7506fb_lcd_ops = {
-+ .get_contrast = nt7506fb_lcd_get_contrast,
-+ .set_contrast = nt7506fb_lcd_set_contrast,
-+};
-+
-+static void
-+nt7506fb_lcd_init(struct nt7506fb_par *par)
-+{
-+ struct fb_info *info = par->info;
-+ struct lcd_device *lcd_dev;
-+
-+ lcd_dev = lcd_device_register(DRIVER_NAME, info->dev, par, &nt7506fb_lcd_ops);
-+ if (IS_ERR(lcd_dev)) {
-+ par->lcd_dev = NULL;
-+ printk(KERN_WARNING DRIVER_NAME ": LCD device registration failed\n");
-+ return;
-+ }
-+
-+ par->lcd_dev = lcd_dev;
-+ lcd_dev->props.max_contrast = 255;
-+ par->contrast = DEFAULT_CONTRAST;
-+ printk(KERN_INFO DRIVER_NAME ": LCD contrast management initialized\n");
-+}
-+
-+static void
-+nt7506fb_lcd_exit(struct nt7506fb_par *par)
-+{
-+ if ( par->lcd_dev ) {
-+ lcd_device_unregister(par->lcd_dev);
-+ par->lcd_dev = NULL;
-+ }
-+}
-+
-+
-+/*
-+ * Backlight device management
-+ */
-+static void nt7506fb_start_timer(void);
-+
-+static int
-+nt7506fb_bl_update_status(struct backlight_device *bd)
-+{
-+ struct nt7506fb_par *par = bl_get_data(bd);
-+ int power_on = (bd->props.power != FB_BLANK_POWERDOWN);
-+
-+ _backlight = bd->props.brightness & power_on;
-+
-+ printk(KERN_INFO DRIVER_NAME ": backlight=%d power_on=%d\n", _backlight, power_on);
-+
-+ if ( bd->props.power != par->power ) {
-+ par->power = bd->props.power;
-+
-+ if ( power_on ) {
-+ /* Power LCD device on */
-+ NT7506_writeb_ctl(NT_SET_PWRSAVE|OFF);
-+ NT7506_writeb_ctl(NT_RLS_PWRSAVE);
-+
-+ /* Restart refresh timer */
-+ if ( ! timer_pending(&fb_timer) )
-+ nt7506fb_start_timer();
-+ }
-+ else {
-+ /* Throttle refresh timer */
-+ del_timer(&fb_timer);
-+
-+ /* Put LCD device in power save mode */
-+ NT7506_writeb_ctl(NT_SET_PWRSAVE|ON);
-+ NT7506_writeb_ctl(NT_RLS_PWRSAVE);
-+ }
-+ }
-+
-+ //printk(KERN_INFO DRIVER_NAME": backlight = %d\n", _backlight);
-+ return 0;
-+}
-+
-+static int
-+nt7506fb_bl_get_brightness(struct backlight_device *bd)
-+{
-+ return bd->props.brightness;
-+}
-+
-+static struct backlight_ops nt7506fb_bl_ops = {
-+ .get_brightness = nt7506fb_bl_get_brightness,
-+ .update_status = nt7506fb_bl_update_status,
-+};
-+
-+
-+static void
-+nt7506fb_bl_init(struct nt7506fb_par *par)
-+{
-+ struct fb_info *info = par->info;
-+ struct backlight_device *bd;
-+
-+ bd = backlight_device_register(DRIVER_NAME, info->dev, par, &nt7506fb_bl_ops);
-+ if (IS_ERR(bd)) {
-+ info->bl_dev = NULL;
-+ printk(KERN_WARNING DRIVER_NAME ": Backlight device registration failed\n");
-+ return;
-+ }
-+
-+ info->bl_dev = bd;
-+ bd->props.max_brightness = 1;
-+ bd->props.power = FB_BLANK_UNBLANK;
-+ bd->props.brightness = 1;
-+ par->power = bd->props.power;
-+
-+ nt7506fb_bl_update_status(bd);
-+
-+ printk(KERN_INFO DRIVER_NAME ": Backlight control initialized\n");
-+}
-+
-+static void
-+nt7506fb_bl_exit(struct fb_info *info)
-+{
-+ if ( info->bl_dev ) {
-+ backlight_device_unregister(info->bl_dev);
-+ info->bl_dev = NULL;
-+ }
-+}
-+
-+
-+/*
-+ * Main frame buffer operations
-+ */
-+
-+static int nt7506fb_open(struct fb_info *info, int user)
-+{
-+ struct nt7506fb_par *par = info->par;
-+ atomic_inc(&par->ref_count);
-+ return 0;
-+}
-+
-+static int nt7506fb_release(struct fb_info *info, int user)
-+{
-+ struct nt7506fb_par *par = info->par;
-+ int count = atomic_read(&par->ref_count);
-+ if (!count)
-+ return -EINVAL;
-+ atomic_dec(&par->ref_count);
-+ return 0;
-+}
-+
-+static int nt7506fb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ if ( (var->vmode & FB_VMODE_YWRAP) &&
-+ (var->yoffset < LCD_HEIGHT) &&
-+ (info->var.yres <= LCD_HEIGHT) ) {
-+ NT7506_set_start_line(var->yoffset);
-+ info->var.yoffset = var->yoffset;
-+ return 0;
-+ }
-+
-+ return -EINVAL;
-+}
-+
-+static void nt7506fb_lcd_update(struct nt7506fb_par *par)
-+{
-+ unsigned char *src = (unsigned char __force *) par->info->screen_base;
-+ int line_length = par->info->fix.line_length;
-+ int page, x, bit;
-+ unsigned char plane1, plane2;
-+ unsigned char *ptr;
-+ unsigned char xshift;
-+
-+ if ( info->var.bits_per_pixel == 1 ) {
-+
-+ for (page = 0; page < LCD_NPAGES; page++) {
-+ NT7506_set_yaddr(page);
-+ NT7506_set_xaddr(0);
-+ for (x = 0; x < LCD_WIDTH; x++) {
-+ xshift = 7 - (x % 8);
-+ plane1 = plane2 = 0;
-+ ptr = src + (page * 8 * line_length + x / 8);
-+ for (bit = 0; bit < 8; ptr += line_length, bit++) {
-+ plane1 |= (((*ptr) >> xshift) & 1) << bit;
-+ }
-+ NT7506_writeb_data(plane1);
-+ NT7506_writeb_data(plane2);
-+ }
-+ NT7506_writeb_data((unsigned char)0);
-+ }
-+
-+ } else {
-+
-+ for (page = 0; page < LCD_NPAGES; page++) {
-+ NT7506_set_yaddr(page);
-+ NT7506_set_xaddr(0);
-+ for (x = 0; x < LCD_WIDTH; x++) {
-+ xshift = (3 - (x % 4)) << 1;
-+ plane1 = plane2 = 0;
-+ ptr = src + (page * 8 * line_length + x / 4);
-+ for (bit = 0; bit < 8; ptr += line_length, bit++) {
-+ plane1 |= (((*ptr) >> (xshift + 1)) & 1) << bit;
-+ plane2 |= (((*ptr) >> xshift) & 1) << bit;
-+ }
-+ NT7506_writeb_data(plane1);
-+ NT7506_writeb_data(plane2);
-+ }
-+ NT7506_writeb_data((unsigned char)0);
-+ }
-+
-+ }
-+}
-+
-+static void nt7506fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
-+{
-+ sys_fillrect(info, rect);
-+}
-+
-+
-+
-+static void nt7506fb_copyarea(struct fb_info *info,
-+ const struct fb_copyarea *area)
-+{
-+ sys_copyarea(info, area);
-+}
-+
-+
-+static void nt7506fb_imageblit(struct fb_info *info, const struct fb_image *image)
-+{
-+ sys_imageblit(info, image);
-+}
-+
-+
-+/*
-+ * this is the access path from userspace. they can seek and write to
-+ * the fb. it's inefficient for them to do anything less than 128*8
-+ * writes since we update the lcd in each write() anyway.
-+ */
-+static ssize_t nt7506fb_write(struct fb_info *info, const char __user *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ unsigned long p = *ppos;
-+ unsigned int fbmemlength;
-+ int err = 0;
-+
-+ fbmemlength = (info->var.xres * info->var.yres)/8;
-+
-+ if ( p > fbmemlength ) {
-+ return -EFBIG;
-+ }
-+
-+ if ( (count + p) > fbmemlength ) {
-+ count = fbmemlength - p;
-+ err = -ENOSPC;
-+ }
-+
-+ if ( count ) {
-+ char *base_addr = (char __force *) info->screen_base;
-+ if ( copy_from_user(base_addr + p, buf, count) )
-+ err = -EFAULT;
-+ }
-+
-+ if ( !err )
-+ *ppos += count;
-+
-+ return err ? err : count;
-+}
-+
-+
-+static int nt7506fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
-+{
-+ unsigned long off;
-+ unsigned long start;
-+ u32 len;
-+
-+ if (vma->vm_end - vma->vm_start == 0)
-+ return 0;
-+ if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
-+ return -EINVAL;
-+ off = vma->vm_pgoff << PAGE_SHIFT;
-+ start = info->fix.smem_start;
-+ len = info->fix.smem_len;
-+ if (off >= len)
-+ {
-+ return -EINVAL;
-+
-+ }
-+ if ((vma->vm_end - vma->vm_start + off) > len)
-+ {
-+ return -EINVAL;
-+ }
-+ off += start;
-+ vma->vm_pgoff = off >> PAGE_SHIFT;
-+ if (remap_pfn_range(vma, vma->vm_start, virt_to_phys((void *)info->fix.smem_start) >> PAGE_SHIFT,
-+ info->fix.smem_len, vma->vm_page_prot))
-+
-+ {
-+ return -EAGAIN;
-+ }
-+ return 0;
-+
-+}
-+
-+
-+static int nt7506fb_ioctl(struct fb_info *info,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ unsigned char frame_rate;
-+
-+ switch ( cmd ) {
-+ case FBIO_FRAMERATE:
-+ if (get_user(frame_rate, (unsigned char *)arg))
-+ return -EFAULT;
-+ printk(KERN_INFO "fb%d: framerate=%d Hz\n", info->node, frame_rate);
-+ _fps = frame_rate;
-+ return 0;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+
-+static struct fb_ops nt7506fb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = nt7506fb_open,
-+ .fb_read = fb_sys_read,
-+ .fb_write = nt7506fb_write,
-+ .fb_release = nt7506fb_release,
-+ .fb_pan_display = nt7506fb_pan_display,
-+ .fb_fillrect = nt7506fb_fillrect,
-+ .fb_copyarea = nt7506fb_copyarea,
-+ .fb_imageblit = nt7506fb_imageblit,
-+ .fb_ioctl = nt7506fb_ioctl,
-+ .fb_mmap = nt7506fb_mmap,
-+};
-+
-+
-+static void
-+nt7506fb_start_timer(void)
-+{
-+ fb_timer.expires = jiffies + (HZ/_fps);
-+ add_timer(&fb_timer);
-+}
-+
-+static void
-+nt7506fb_refresh(unsigned long data)
-+{
-+ nt7506fb_lcd_update(info->par);
-+ nt7506fb_start_timer();
-+}
-+
-+static int __init
-+nt7506fb_probe(struct platform_device *dev)
-+{
-+ int retval = -ENOMEM;
-+ struct nt7506fb_par *par;
-+ static unsigned char *videomemory;
-+ static int videomemorysize;
-+ int i;
-+
-+ NT7506_init_lcd(DEFAULT_CONTRAST);
-+
-+ videomemorysize = LCD_WIDTH * LCD_HEIGHT / 4;
-+
-+ if (!(videomemory = kmalloc(videomemorysize,GFP_ATOMIC)))
-+ goto failout;
-+ memset(videomemory, 0, videomemorysize);
-+
-+ info = framebuffer_alloc(sizeof(struct nt7506fb_par), &dev->dev);
-+
-+ if (!info)
-+ goto out_alloc;
-+ info->screen_base = (char __iomem *)videomemory;
-+ info->fbops = &nt7506fb_ops;
-+
-+ info->var = nt7506fb_var;
-+ info->fix = nt7506fb_fix;
-+ info->fix.smem_start = (unsigned long)videomemory;
-+ info->fix.smem_len = videomemorysize;
-+
-+ par = info->par;
-+ par->info = info;
-+
-+ info->flags = FBINFO_FLAG_DEFAULT;
-+ spin_lock_init(&par->lock);
-+ platform_set_drvdata(dev, info);
-+
-+#ifdef CONFIG_FB_NT7506_GRAYSCALE
-+ /* Allocate cmap */
-+ retval = fb_alloc_cmap(&info->cmap, 4, 0);
-+ if (retval < 0) {
-+ printk(KERN_ERR "fb%d: Failed to allocate colormap\n", info->node);
-+ goto out_register;
-+ }
-+
-+ /* Set cmap */
-+ for (i = 0; i < 4; i++)
-+ info->cmap.red[i] = (((4*i)+1)*(0xFFFF))/16;
-+ memcpy(info->cmap.green, info->cmap.red, sizeof(u16)*4);
-+ memcpy(info->cmap.blue, info->cmap.red, sizeof(u16)*4);
-+#endif
-+
-+ /* Register framebuffer */
-+ retval = register_framebuffer(info);
-+ if (retval < 0)
-+ goto out_register;
-+
-+ setup_timer(&fb_timer, nt7506fb_refresh, (unsigned long) par);
-+
-+ printk(KERN_INFO
-+ "fb%d: nt7506 frame buffer device, using %dK of video memory\n",
-+ info->node, videomemorysize >> 10);
-+
-+ /* Initialize backlight and contrast control (do not abort driver if it fails) */
-+ nt7506fb_bl_init(par);
-+ nt7506fb_lcd_init(par);
-+
-+ nt7506fb_start_timer();
-+
-+ return 0;
-+
-+out_register:
-+ framebuffer_release(info);
-+out_alloc:
-+ vfree(videomemory);
-+failout:
-+ return retval;
-+}
-+
-+static int nt7506fb_remove(struct platform_device *dev)
-+{
-+ struct fb_info *info = platform_get_drvdata(dev);
-+
-+ del_timer(&fb_timer);
-+
-+ if (info) {
-+ nt7506fb_lcd_exit(info->par);
-+ nt7506fb_bl_exit(info);
-+ unregister_framebuffer(info);
-+ vfree((void __force *)info->screen_base);
-+ framebuffer_release(info);
-+ }
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int nt7506fb_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ struct fb_info *info = platform_get_drvdata(dev);
-+
-+ printk(KERN_INFO DRIVER_NAME ": Switching to Power Save mode\n");
-+
-+ info->bl_dev->props.power = FB_BLANK_POWERDOWN;
-+ nt7506fb_bl_update_status(info->bl_dev);
-+
-+ return 0;
-+}
-+
-+static int nt7506fb_resume(struct platform_device *dev)
-+{
-+ struct fb_info *info = platform_get_drvdata(dev);
-+
-+ info->bl_dev->props.power = FB_BLANK_UNBLANK;
-+ nt7506fb_bl_update_status(info->bl_dev);
-+
-+ return 0;
-+}
-+#else
-+#define nt7506fb_suspend NULL
-+#define nt7506fb_resume NULL
-+#endif
-+
-+
-+static struct platform_driver nt7506fb_driver = {
-+ .probe = nt7506fb_probe,
-+ .remove = nt7506fb_remove,
-+ .suspend = nt7506fb_suspend,
-+ .resume = nt7506fb_resume,
-+ .driver = {
-+ .name = DRIVER_NAME,
-+ },
-+};
-+
-+static struct platform_device *nt7506fb_device;
-+
-+static int __init nt7506fb_init(void)
-+{
-+ int ret;
-+
-+
-+ if (!(lcd_mem = request_mem_region(LCD_BASE, LCD_SIZE, "mpc8313-lcd")))
-+ return -ENOMEM;
-+
-+ if (!(_lcd_io = ioremap(LCD_BASE, LCD_SIZE)))
-+ {
-+ release_mem_region(LCD_BASE, LCD_SIZE);
-+ lcd_mem = NULL;
-+ return -ENOMEM;
-+ }
-+ ret = platform_driver_register(&nt7506fb_driver);
-+
-+ if (!ret) {
-+ nt7506fb_device = platform_device_alloc(DRIVER_NAME, 0);
-+ if (nt7506fb_device)
-+ {
-+ ret = platform_device_add(nt7506fb_device);
-+ }
-+ else
-+ {
-+ ret = -ENOMEM;
-+ }
-+ if (ret)
-+ {
-+ platform_device_put(nt7506fb_device);
-+ platform_driver_unregister(&nt7506fb_driver);
-+ }
-+
-+ }
-+
-+
-+ return ret;
-+
-+}
-+
-+
-+static void NT7506_init_lcd(char ael)
-+{
-+ /* this resets the lcd*/
-+ char bl = _backlight ? LCD_BCKLIGH : LCD_BCKLIGHN;
-+
-+ iowrite16(LCD_RSTN | LCD_ERD | bl, _lcd_io);
-+ udelay(100);
-+ iowrite16(LCD_RST| LCD_ERD | bl, _lcd_io);
-+ udelay(200);
-+ /* Soft reset*/
-+ NT7506_writeb_ctl(NT_RESET);
-+ /* Disable ICON display*/
-+ NT7506_writeb_ctl(NT_ICON|OFF);
-+ /* Sets the duty ratio 1/128*/
-+ NT7506_writeb_ctl(NT_DUTY); NT7506_writeb_ctl(DUTY_1_128);
-+ /* Sets reverse direction between RAM column address and segment driver*/
-+ NT7506_writeb_ctl(NT_ADC_REV);
-+ NT7506_writeb_ctl(NT_SHL_NOR);
-+ /* Enales the built in Oscillator circuit.*/
-+ NT7506_writeb_ctl(NT_OSC);
-+ /* Set Initial row to 0*/
-+ NT7506_writeb_ctl(NT_COM0); NT7506_writeb_ctl(0);
-+ /* Sets DC-DC*/
-+ NT7506_writeb_ctl(NT_DCDC|TIME6);
-+ /* Selects resistance ratio of the internal resistor*/
-+ NT7506_writeb_ctl(NT_REG_RES|RES_7_2);
-+ /* set Reference Voltage mode*/
-+ NT7506_writeb_ctl(NT_ELEC_VOL); NT7506_writeb_ctl(ael);
-+ /* Selects LCD bias ratio*/
-+ NT7506_writeb_ctl(NT_BIAS|BIAS_1_11);
-+
-+ NT7506_writeb_ctl(NT_DATA_DIR); NT7506_writeb_ctl(0);
-+ NT7506_writeb_ctl(NT_FRC_PWM|PWM15);
-+
-+#ifdef CONFIG_FB_NT7506_GRAYSCALE
-+ /* Feed grayscale palette */
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_WHITE_AB);
-+ NT7506_writeb_ctl(0x00);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_WHITE_CD);
-+ NT7506_writeb_ctl(0x00);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_LIGHT_AB);
-+ NT7506_writeb_ctl(0x55);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_LIGHT_CD);
-+ NT7506_writeb_ctl(0x55);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_DARK_AB);
-+ NT7506_writeb_ctl(0xAA);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_DARK_CD);
-+ NT7506_writeb_ctl(0xAA);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_BLACK_AB);
-+ NT7506_writeb_ctl(0xFF);
-+ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_BLACK_CD);
-+ NT7506_writeb_ctl(0xFF);
-+#endif
-+
-+ /* Select power circuit functions */
-+ NT7506_writeb_ctl(NT_POWER|VC);
-+ udelay(5000);
-+ NT7506_writeb_ctl(NT_POWER|VC|VR);
-+ udelay(5000);
-+ NT7506_writeb_ctl(NT_POWER|VC|VR|VF);
-+ udelay(5000);
-+ /* Reverses the display status on LCD panel */
-+ NT7506_writeb_ctl(NT_REV_DISP|OFF);
-+ /* Forces the whole LCD points to be turned on regardless of the contents of the display data RAM*/
-+ NT7506_writeb_ctl(NT_DISP|ON);
-+ /* Set Initial Start Line Address */
-+ NT7506_writeb_ctl(NT_START_LINE); NT7506_writeb_ctl(0x00);
-+}
-+
-+static void __exit nt7506fb_exit(void)
-+{
-+ if (lcd_mem)
-+ release_mem_region(LCD_BASE, LCD_SIZE);
-+ lcd_mem = NULL;
-+ platform_device_unregister(nt7506fb_device);
-+ platform_driver_unregister(&nt7506fb_driver);
-+}
-+
-+module_param(tuhold, ulong, 0);
-+MODULE_PARM_DESC(tuhold, "Time to hold between strobing data to NT7506 board");
-+
-+module_init(nt7506fb_init);
-+module_exit(nt7506fb_exit);
-+
-+MODULE_DESCRIPTION("fbdev driver for Novatek NT7506 monochrome LCD board");
-+MODULE_AUTHOR("Alexandre Coffignal");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.27/include/linux/nt7506fb.h
-===================================================================
---- /dev/null
-+++ linux-2.6.27/include/linux/nt7506fb.h
-@@ -0,0 +1,31 @@
-+
-+/*
-+ * (C) Copyright 2008
-+ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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
-+ *
-+ */
-+
-+#ifndef __LINUX_NT7506FB_H__
-+#define __LINUX_NT7506FB_H__
-+
-+#define FBIO_FRAMERATE _IOR('f', 1, char)
-+
-+#endif
diff --git a/packages/linux/linux-2.6.27/boc01/013-090209-lcd.patch b/packages/linux/linux-2.6.27/boc01/013-090209-lcd.patch
new file mode 100644
index 0000000000..c867e2cf3a
--- /dev/null
+++ b/packages/linux/linux-2.6.27/boc01/013-090209-lcd.patch
@@ -0,0 +1,933 @@
+Index: linux-2.6.27/drivers/video/Kconfig
+===================================================================
+--- linux-2.6.27.orig/drivers/video/Kconfig
++++ linux-2.6.27/drivers/video/Kconfig
+@@ -480,6 +480,28 @@ config FB_ARC
+ this driver, say Y or M; otherwise say N. You must specify the
+ GPIO IO address to be used for setting control and data.
+
++config FB_NT7506
++ tristate "Novatek 7506 LCD board support"
++ depends on FB
++ select FB_SYS_FILLRECT
++ select FB_SYS_COPYAREA
++ select FB_SYS_IMAGEBLIT
++ select FB_SYS_FOPS
++ select FB_BACKLIGHT
++ select LCD_CLASS_DEVICE
++ help
++ This is the frame buffer device driver for the Novatek 7506 Monochrome/Grayscale LCD board.
++ The board is based on the NT7506 LCD controller.
++
++config FB_NT7506_GRAYSCALE
++ bool "Novatek 7506 Grayscale mode"
++ depends on FB_NT7506
++ default y
++ help
++ This option switches the Monochrome/Grayscale mode for the Novatek 7506 LCD board.
++ Say Y to enable 4-levels Grayscale mode (2 bpp).
++ Say N to enable Monochrome mode (1 bpp).
++
+ config FB_ATARI
+ bool "Atari native chipset support"
+ depends on (FB = y) && ATARI
+Index: linux-2.6.27/drivers/video/Makefile
+===================================================================
+--- linux-2.6.27.orig/drivers/video/Makefile
++++ linux-2.6.27/drivers/video/Makefile
+@@ -31,6 +31,7 @@ obj-$(CONFIG_FB_DEFERRED_IO) += fb_def
+ obj-$(CONFIG_FB_AMIGA) += amifb.o c2p.o
+ obj-$(CONFIG_FB_AM200EPD) += am200epd.o
+ obj-$(CONFIG_FB_ARC) += arcfb.o
++obj-$(CONFIG_FB_NT7506) += nt7506fb.o
+ obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o
+ obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
+ obj-$(CONFIG_FB_PM2) += pm2fb.o
+Index: linux-2.6.27/drivers/video/nt7506fb.c
+===================================================================
+--- /dev/null
++++ linux-2.6.27/drivers/video/nt7506fb.c
+@@ -0,0 +1,847 @@
++/*
++ * linux/drivers/video/nt7506fb.c -- FB driver for NT7506 monochrome LCD board
++ *
++ * Copyright (C) 2008, CenoSYS (www.cenosys.com).
++ *
++ * Alexandre Coffignal <alexandre.coffignal@cenosys.com>
++ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
++ * Jeremy Laine <jeremy.laine@bolloretelecom.eu>
++ *
++ * 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.
++ *
++ * Layout is based on arcfb.c by Jaya Kumar
++ *
++ * This driver was written to be used with the Novatek NT7506 LCD board.
++ *
++ * Novatek uses a set of NT7506 chips that control individual 128x128 LCD
++ * matrices. The interface between the board and the host is TTL based GPIO.
++ *
++ * General notes:
++ * - User must set tuhold. It's in microseconds. According to the 108 spec,
++ * the hold time is supposed to be at least 1 microsecond.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/mm.h>
++#include <linux/vmalloc.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++#include <linux/fb.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/backlight.h>
++#include <linux/lcd.h>
++#include <linux/nt7506fb.h>
++
++#include <linux/uaccess.h>
++
++#define DRIVER_NAME "nt7506fb"
++
++//NT7506 Hardware
++#define LCD_RST 0x08
++#define LCD_RSTN 0x00
++#define LCD_BCKLIGH 0x04
++#define LCD_BCKLIGHN 0x00
++#define LCD_RS 0x02
++#define LCD_RSN 0x00
++#define LCD_ERD 0x01
++#define LCD_ERDN 0x00
++
++//Base address
++#define LCD_BASE 0xf0000000
++#define LCD_SIZE 0x2
++
++//NT7506 Instructions
++#define NT_ICON 0xA2
++#define NT_PAGE_ADDR 0xB0
++#define NT_COL_MSB 0x10
++#define NT_COL_LSB 0x00
++#define NT_DISP 0xAE
++#define NT_START_LINE 0x40
++#define NT_COM0 0x44
++#define NT_DUTY 0x48
++#define DUTY_1_128 0x80
++#define NT_REV_DISP 0xA6
++#define NT_POWER 0x28
++#define VC 0x04
++#define VR 0x02
++#define VF 0x01
++#define NT_DCDC 0x64
++#define TIME6 0x03
++#define NT_REG_RES 0x20
++#define RES_7_2 0x07
++#define NT_ELEC_VOL 0x81
++#define NT_BIAS 0x50
++#define BIAS_1_11 0x06
++#define NT_ADC_NOR 0xA0
++#define NT_ADC_REV 0xA1
++#define NT_SHL_NOR 0xC0
++#define NT_SHL_REV 0xC8
++#define NT_SET_PWRSAVE 0xA8
++#define NT_OSC 0xAB
++#define NT_RLS_PWRSAVE 0xE1
++#define NT_RESET 0xE2
++#define NT_DATA_DIR 0xe8
++#define NT_FRC_PWM 0x90
++#define PWM15 0x03
++
++#define ON 0x01
++#define OFF 0x00
++
++#define NT_GRAY_SCALE 0x88
++#define GRAY_WHITE_AB 0
++#define GRAY_WHITE_CD 1
++#define GRAY_LIGHT_AB 2
++#define GRAY_LIGHT_CD 3
++#define GRAY_DARK_AB 4
++#define GRAY_DARK_CD 5
++#define GRAY_BLACK_AB 6
++#define GRAY_BLACK_CD 7
++
++// Geometric settings
++#define LCD_WIDTH 128
++#define LCD_HEIGHT 128
++#define LCD_NPAGES (LCD_HEIGHT/8) /* LCD pages of 8 vertical pixels */
++
++#define DEFAULT_CONTRAST 20
++#define DEFAULT_FPS 10
++
++static struct resource *lcd_mem = NULL;
++static void * _lcd_io = NULL;
++static unsigned long tuhold;
++struct fb_info *info;
++static struct timer_list fb_timer;
++static char _fps = DEFAULT_FPS;
++static char _backlight = 1;
++
++struct nt7506fb_par {
++ atomic_t ref_count;
++ struct fb_info *info;
++ spinlock_t lock;
++ struct lcd_device *lcd_dev;
++ int power;
++ int contrast;
++};
++
++static struct fb_fix_screeninfo nt7506fb_fix __initdata = {
++ .id = DRIVER_NAME,
++ .type = FB_TYPE_PACKED_PIXELS,
++#ifdef CONFIG_FB_NT7506_GRAYSCALE
++ .visual = FB_VISUAL_STATIC_PSEUDOCOLOR,
++ .line_length = LCD_WIDTH / 4,
++#else
++ .visual = FB_VISUAL_MONO01,
++ .line_length = LCD_WIDTH / 8,
++#endif
++ .xpanstep = 1,
++ .ypanstep = 1,
++ .ywrapstep = 0,
++ .accel = FB_ACCEL_NONE,
++};
++
++static struct fb_var_screeninfo nt7506fb_var __initdata = {
++ .xres = LCD_WIDTH,
++ .yres = LCD_HEIGHT,
++ .xres_virtual = LCD_WIDTH,
++ .yres_virtual = LCD_HEIGHT,
++ .nonstd = 1,
++#ifdef CONFIG_FB_NT7506_GRAYSCALE
++ .bits_per_pixel = 2,
++ .grayscale = 1,
++ .red = { 0, 2, 0 },
++ .green = { 0, 2, 0 },
++ .blue = { 0, 2, 0 },
++ .transp = { 0, 0, 0 },
++#else
++ .bits_per_pixel = 1,
++#endif
++};
++
++
++/*
++ * Low-level i/o primitives
++ */
++
++static void NT7506_init_lcd(char ael);
++
++static void NT7506_writeb_ctl(unsigned char value)
++{
++ unsigned short svalue;
++ char bl = _backlight ? LCD_BCKLIGH : LCD_BCKLIGHN;
++
++ svalue=value<<8 | LCD_RSN | LCD_RST | LCD_ERDN | bl;
++ iowrite16(svalue, _lcd_io);
++ udelay(tuhold);
++ //The data on DB0/7 are latched at the falling edge of the E_RD signal
++ svalue=value<<8 | LCD_RSN | LCD_RST | LCD_ERD | bl;
++ iowrite16(svalue, _lcd_io);
++ udelay(tuhold);
++}
++
++static void NT7506_writeb_data(unsigned char value)
++{
++ unsigned short svalue;
++ char bl = _backlight ? LCD_BCKLIGH : LCD_BCKLIGHN;
++
++ svalue=value<<8|LCD_RS |LCD_RST | LCD_ERD | bl ;
++ iowrite16(svalue, _lcd_io);
++ udelay(tuhold);
++ //The data on DB0/7 are latched at the falling edge of the E_RD signal
++ svalue=value<<8|LCD_RS |LCD_RST | LCD_ERDN | bl;
++ iowrite16(svalue, _lcd_io);
++ udelay(tuhold);
++}
++
++static void NT7506_set_start_line(unsigned char y)
++{
++ NT7506_writeb_ctl(NT_START_LINE);
++ NT7506_writeb_ctl(y);
++}
++
++static void NT7506_set_yaddr(unsigned char y)
++{
++ NT7506_writeb_ctl(NT_PAGE_ADDR+y);
++}
++
++static void NT7506_set_xaddr(unsigned char x)
++{
++ NT7506_writeb_ctl(NT_COL_MSB | (x >> 0x04)); //Send high nibble
++ NT7506_writeb_ctl(NT_COL_LSB | (x & 0x0F) ); //Send low nibble
++}
++
++
++/*
++ * LCD device management
++ */
++
++static int
++nt7506fb_lcd_get_contrast(struct lcd_device *lcd_dev)
++{
++ struct nt7506fb_par *par = lcd_get_data(lcd_dev);
++ return par->contrast;
++}
++
++static int
++nt7506fb_lcd_set_contrast(struct lcd_device *lcd_dev, int contrast)
++{
++ struct nt7506fb_par *par = lcd_get_data(lcd_dev);
++
++ par->contrast = contrast;
++ NT7506_writeb_ctl(NT_ELEC_VOL); NT7506_writeb_ctl(par->contrast);
++
++ //printk(KERN_INFO DRIVER_NAME": contrast = %d\n", par->contrast);
++ return 0;
++}
++
++static struct lcd_ops nt7506fb_lcd_ops = {
++ .get_contrast = nt7506fb_lcd_get_contrast,
++ .set_contrast = nt7506fb_lcd_set_contrast,
++};
++
++static void
++nt7506fb_lcd_init(struct nt7506fb_par *par)
++{
++ struct fb_info *info = par->info;
++ struct lcd_device *lcd_dev;
++
++ lcd_dev = lcd_device_register(DRIVER_NAME, info->dev, par, &nt7506fb_lcd_ops);
++ if (IS_ERR(lcd_dev)) {
++ par->lcd_dev = NULL;
++ printk(KERN_WARNING DRIVER_NAME ": LCD device registration failed\n");
++ return;
++ }
++
++ par->lcd_dev = lcd_dev;
++ lcd_dev->props.max_contrast = 255;
++ par->contrast = DEFAULT_CONTRAST;
++ printk(KERN_INFO DRIVER_NAME ": LCD contrast management initialized\n");
++}
++
++static void
++nt7506fb_lcd_exit(struct nt7506fb_par *par)
++{
++ if ( par->lcd_dev ) {
++ lcd_device_unregister(par->lcd_dev);
++ par->lcd_dev = NULL;
++ }
++}
++
++
++/*
++ * Backlight device management
++ */
++static void nt7506fb_start_timer(void);
++
++static int
++nt7506fb_bl_update_status(struct backlight_device *bd)
++{
++ struct nt7506fb_par *par = bl_get_data(bd);
++ int power_on = (bd->props.power != FB_BLANK_POWERDOWN);
++
++ _backlight = bd->props.brightness & power_on;
++
++ printk(KERN_INFO DRIVER_NAME ": backlight=%d power_on=%d\n", _backlight, power_on);
++
++ if ( bd->props.power != par->power ) {
++ par->power = bd->props.power;
++
++ if ( power_on ) {
++ /* Power LCD device on */
++ NT7506_writeb_ctl(NT_SET_PWRSAVE|OFF);
++ NT7506_writeb_ctl(NT_RLS_PWRSAVE);
++
++ /* Restart refresh timer */
++ if ( ! timer_pending(&fb_timer) )
++ nt7506fb_start_timer();
++ }
++ else {
++ /* Throttle refresh timer */
++ del_timer(&fb_timer);
++
++ /* Put LCD device in power save mode */
++ NT7506_writeb_ctl(NT_SET_PWRSAVE|ON);
++ NT7506_writeb_ctl(NT_RLS_PWRSAVE);
++ }
++ }
++
++ //printk(KERN_INFO DRIVER_NAME": backlight = %d\n", _backlight);
++ return 0;
++}
++
++static int
++nt7506fb_bl_get_brightness(struct backlight_device *bd)
++{
++ return bd->props.brightness;
++}
++
++static struct backlight_ops nt7506fb_bl_ops = {
++ .get_brightness = nt7506fb_bl_get_brightness,
++ .update_status = nt7506fb_bl_update_status,
++};
++
++
++static void
++nt7506fb_bl_init(struct nt7506fb_par *par)
++{
++ struct fb_info *info = par->info;
++ struct backlight_device *bd;
++
++ bd = backlight_device_register(DRIVER_NAME, info->dev, par, &nt7506fb_bl_ops);
++ if (IS_ERR(bd)) {
++ info->bl_dev = NULL;
++ printk(KERN_WARNING DRIVER_NAME ": Backlight device registration failed\n");
++ return;
++ }
++
++ info->bl_dev = bd;
++ bd->props.max_brightness = 1;
++ bd->props.power = FB_BLANK_UNBLANK;
++ bd->props.brightness = 1;
++ par->power = bd->props.power;
++
++ nt7506fb_bl_update_status(bd);
++
++ printk(KERN_INFO DRIVER_NAME ": Backlight control initialized\n");
++}
++
++static void
++nt7506fb_bl_exit(struct fb_info *info)
++{
++ if ( info->bl_dev ) {
++ backlight_device_unregister(info->bl_dev);
++ info->bl_dev = NULL;
++ }
++}
++
++
++/*
++ * Main frame buffer operations
++ */
++
++static int nt7506fb_open(struct fb_info *info, int user)
++{
++ struct nt7506fb_par *par = info->par;
++ atomic_inc(&par->ref_count);
++ return 0;
++}
++
++static int nt7506fb_release(struct fb_info *info, int user)
++{
++ struct nt7506fb_par *par = info->par;
++ int count = atomic_read(&par->ref_count);
++ if (!count)
++ return -EINVAL;
++ atomic_dec(&par->ref_count);
++ return 0;
++}
++
++static int nt7506fb_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ if ( (var->vmode & FB_VMODE_YWRAP) &&
++ (var->yoffset < LCD_HEIGHT) &&
++ (info->var.yres <= LCD_HEIGHT) ) {
++ NT7506_set_start_line(var->yoffset);
++ info->var.yoffset = var->yoffset;
++ return 0;
++ }
++
++ return -EINVAL;
++}
++
++static void nt7506fb_lcd_update(struct nt7506fb_par *par)
++{
++ unsigned char *src = (unsigned char __force *) par->info->screen_base;
++ int line_length = par->info->fix.line_length;
++ int page, x, bit;
++ unsigned char plane1, plane2;
++ unsigned char *ptr;
++ unsigned char xshift;
++
++ if ( info->var.bits_per_pixel == 1 ) {
++
++ for (page = 0; page < LCD_NPAGES; page++) {
++ NT7506_set_yaddr(page);
++ NT7506_set_xaddr(0);
++ for (x = 0; x < LCD_WIDTH; x++) {
++ xshift = 7 - (x % 8);
++ plane1 = plane2 = 0;
++ ptr = src + (page * 8 * line_length + x / 8);
++ for (bit = 0; bit < 8; ptr += line_length, bit++) {
++ plane1 |= (((*ptr) >> xshift) & 1) << bit;
++ }
++ NT7506_writeb_data(plane1);
++ NT7506_writeb_data(plane2);
++ }
++ NT7506_writeb_data((unsigned char)0);
++ }
++
++ } else {
++
++ for (page = 0; page < LCD_NPAGES; page++) {
++ NT7506_set_yaddr(page);
++ NT7506_set_xaddr(0);
++ for (x = 0; x < LCD_WIDTH; x++) {
++ xshift = (3 - (x % 4)) << 1;
++ plane1 = plane2 = 0;
++ ptr = src + (page * 8 * line_length + x / 4);
++ for (bit = 0; bit < 8; ptr += line_length, bit++) {
++ plane1 |= (((*ptr) >> (xshift + 1)) & 1) << bit;
++ plane2 |= (((*ptr) >> xshift) & 1) << bit;
++ }
++ NT7506_writeb_data(plane1);
++ NT7506_writeb_data(plane2);
++ }
++ NT7506_writeb_data((unsigned char)0);
++ }
++
++ }
++}
++
++static void nt7506fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
++{
++ sys_fillrect(info, rect);
++}
++
++
++
++static void nt7506fb_copyarea(struct fb_info *info,
++ const struct fb_copyarea *area)
++{
++ sys_copyarea(info, area);
++}
++
++
++static void nt7506fb_imageblit(struct fb_info *info, const struct fb_image *image)
++{
++ sys_imageblit(info, image);
++}
++
++
++/*
++ * this is the access path from userspace. they can seek and write to
++ * the fb. it's inefficient for them to do anything less than 128*8
++ * writes since we update the lcd in each write() anyway.
++ */
++static ssize_t nt7506fb_write(struct fb_info *info, const char __user *buf,
++ size_t count, loff_t *ppos)
++{
++ unsigned long p = *ppos;
++ unsigned int fbmemlength;
++ int err = 0;
++
++ fbmemlength = (info->var.xres * info->var.yres)/8;
++
++ if ( p > fbmemlength ) {
++ return -EFBIG;
++ }
++
++ if ( (count + p) > fbmemlength ) {
++ count = fbmemlength - p;
++ err = -ENOSPC;
++ }
++
++ if ( count ) {
++ char *base_addr = (char __force *) info->screen_base;
++ if ( copy_from_user(base_addr + p, buf, count) )
++ err = -EFAULT;
++ }
++
++ if ( !err )
++ *ppos += count;
++
++ return err ? err : count;
++}
++
++
++static int nt7506fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
++{
++ unsigned long off;
++ unsigned long start;
++ u32 len;
++
++ if (vma->vm_end - vma->vm_start == 0)
++ return 0;
++ if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
++ return -EINVAL;
++ off = vma->vm_pgoff << PAGE_SHIFT;
++ start = info->fix.smem_start;
++ len = info->fix.smem_len;
++ if (off >= len)
++ {
++ return -EINVAL;
++
++ }
++ if ((vma->vm_end - vma->vm_start + off) > len)
++ {
++ return -EINVAL;
++ }
++ off += start;
++ vma->vm_pgoff = off >> PAGE_SHIFT;
++ if (remap_pfn_range(vma, vma->vm_start, virt_to_phys((void *)info->fix.smem_start) >> PAGE_SHIFT,
++ info->fix.smem_len, vma->vm_page_prot))
++
++ {
++ return -EAGAIN;
++ }
++ return 0;
++
++}
++
++
++static int nt7506fb_ioctl(struct fb_info *info,
++ unsigned int cmd, unsigned long arg)
++{
++ unsigned char frame_rate;
++
++ switch ( cmd ) {
++ case FBIO_FRAMERATE:
++ if (get_user(frame_rate, (unsigned char *)arg))
++ return -EFAULT;
++ printk(KERN_INFO "fb%d: framerate=%d Hz\n", info->node, frame_rate);
++ _fps = frame_rate;
++ return 0;
++
++ default:
++ return -EINVAL;
++ }
++}
++
++
++static struct fb_ops nt7506fb_ops = {
++ .owner = THIS_MODULE,
++ .fb_open = nt7506fb_open,
++ .fb_read = fb_sys_read,
++ .fb_write = nt7506fb_write,
++ .fb_release = nt7506fb_release,
++ .fb_pan_display = nt7506fb_pan_display,
++ .fb_fillrect = nt7506fb_fillrect,
++ .fb_copyarea = nt7506fb_copyarea,
++ .fb_imageblit = nt7506fb_imageblit,
++ .fb_ioctl = nt7506fb_ioctl,
++ .fb_mmap = nt7506fb_mmap,
++};
++
++
++static void
++nt7506fb_start_timer(void)
++{
++ fb_timer.expires = jiffies + (HZ/_fps);
++ add_timer(&fb_timer);
++}
++
++static void
++nt7506fb_refresh(unsigned long data)
++{
++ nt7506fb_lcd_update(info->par);
++ nt7506fb_start_timer();
++}
++
++static int __init
++nt7506fb_probe(struct platform_device *dev)
++{
++ int retval = -ENOMEM;
++ struct nt7506fb_par *par;
++ static unsigned char *videomemory;
++ static int videomemorysize;
++ int i;
++
++ NT7506_init_lcd(DEFAULT_CONTRAST);
++
++ videomemorysize = LCD_WIDTH * LCD_HEIGHT / 4;
++
++ if (!(videomemory = kmalloc(videomemorysize,GFP_ATOMIC)))
++ goto failout;
++ memset(videomemory, 0, videomemorysize);
++
++ info = framebuffer_alloc(sizeof(struct nt7506fb_par), &dev->dev);
++
++ if (!info)
++ goto out_alloc;
++ info->screen_base = (char __iomem *)videomemory;
++ info->fbops = &nt7506fb_ops;
++
++ info->var = nt7506fb_var;
++ info->fix = nt7506fb_fix;
++ info->fix.smem_start = (unsigned long)videomemory;
++ info->fix.smem_len = videomemorysize;
++
++ par = info->par;
++ par->info = info;
++
++ info->flags = FBINFO_FLAG_DEFAULT;
++ spin_lock_init(&par->lock);
++ platform_set_drvdata(dev, info);
++
++#ifdef CONFIG_FB_NT7506_GRAYSCALE
++ /* Allocate cmap */
++ retval = fb_alloc_cmap(&info->cmap, 4, 0);
++ if (retval < 0) {
++ printk(KERN_ERR "fb%d: Failed to allocate colormap\n", info->node);
++ goto out_register;
++ }
++
++ /* Set cmap */
++ for (i = 0; i < 4; i++)
++ info->cmap.red[i] = (((4*i)+1)*(0xFFFF))/16;
++ memcpy(info->cmap.green, info->cmap.red, sizeof(u16)*4);
++ memcpy(info->cmap.blue, info->cmap.red, sizeof(u16)*4);
++#endif
++
++ /* Register framebuffer */
++ retval = register_framebuffer(info);
++ if (retval < 0)
++ goto out_register;
++
++ setup_timer(&fb_timer, nt7506fb_refresh, (unsigned long) par);
++
++ printk(KERN_INFO
++ "fb%d: nt7506 frame buffer device, using %dK of video memory\n",
++ info->node, videomemorysize >> 10);
++
++ /* Initialize backlight and contrast control (do not abort driver if it fails) */
++ nt7506fb_bl_init(par);
++ nt7506fb_lcd_init(par);
++
++ nt7506fb_start_timer();
++
++ return 0;
++
++out_register:
++ framebuffer_release(info);
++out_alloc:
++ vfree(videomemory);
++failout:
++ return retval;
++}
++
++static int nt7506fb_remove(struct platform_device *dev)
++{
++ struct fb_info *info = platform_get_drvdata(dev);
++
++ del_timer(&fb_timer);
++
++ if (info) {
++ nt7506fb_lcd_exit(info->par);
++ nt7506fb_bl_exit(info);
++ unregister_framebuffer(info);
++ vfree((void __force *)info->screen_base);
++ framebuffer_release(info);
++ }
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int nt7506fb_suspend(struct platform_device *dev, pm_message_t state)
++{
++ struct fb_info *info = platform_get_drvdata(dev);
++
++ printk(KERN_INFO DRIVER_NAME ": Switching to Power Save mode\n");
++
++ info->bl_dev->props.power = FB_BLANK_POWERDOWN;
++ nt7506fb_bl_update_status(info->bl_dev);
++
++ return 0;
++}
++
++static int nt7506fb_resume(struct platform_device *dev)
++{
++ struct fb_info *info = platform_get_drvdata(dev);
++
++ info->bl_dev->props.power = FB_BLANK_UNBLANK;
++ nt7506fb_bl_update_status(info->bl_dev);
++
++ return 0;
++}
++#else
++#define nt7506fb_suspend NULL
++#define nt7506fb_resume NULL
++#endif
++
++
++static struct platform_driver nt7506fb_driver = {
++ .probe = nt7506fb_probe,
++ .remove = nt7506fb_remove,
++ .suspend = nt7506fb_suspend,
++ .resume = nt7506fb_resume,
++ .driver = {
++ .name = DRIVER_NAME,
++ },
++};
++
++static struct platform_device *nt7506fb_device;
++
++static int __init nt7506fb_init(void)
++{
++ int ret;
++
++
++ if (!(lcd_mem = request_mem_region(LCD_BASE, LCD_SIZE, "mpc8313-lcd")))
++ return -ENOMEM;
++
++ if (!(_lcd_io = ioremap(LCD_BASE, LCD_SIZE)))
++ {
++ release_mem_region(LCD_BASE, LCD_SIZE);
++ lcd_mem = NULL;
++ return -ENOMEM;
++ }
++ ret = platform_driver_register(&nt7506fb_driver);
++
++ if (!ret) {
++ nt7506fb_device = platform_device_alloc(DRIVER_NAME, 0);
++ if (nt7506fb_device)
++ {
++ ret = platform_device_add(nt7506fb_device);
++ }
++ else
++ {
++ ret = -ENOMEM;
++ }
++ if (ret)
++ {
++ platform_device_put(nt7506fb_device);
++ platform_driver_unregister(&nt7506fb_driver);
++ }
++
++ }
++
++
++ return ret;
++
++}
++
++
++static void NT7506_init_lcd(char ael)
++{
++ /* this resets the lcd*/
++ char bl = _backlight ? LCD_BCKLIGH : LCD_BCKLIGHN;
++
++ iowrite16(LCD_RSTN | LCD_ERD | bl, _lcd_io);
++ udelay(100);
++ iowrite16(LCD_RST| LCD_ERD | bl, _lcd_io);
++ udelay(200);
++ /* Soft reset*/
++ NT7506_writeb_ctl(NT_RESET);
++ /* Disable ICON display*/
++ NT7506_writeb_ctl(NT_ICON|OFF);
++ /* Sets the duty ratio 1/128*/
++ NT7506_writeb_ctl(NT_DUTY); NT7506_writeb_ctl(DUTY_1_128);
++ /* Sets reverse direction between RAM column address and segment driver*/
++ NT7506_writeb_ctl(NT_ADC_REV);
++ NT7506_writeb_ctl(NT_SHL_NOR);
++ /* Enales the built in Oscillator circuit.*/
++ NT7506_writeb_ctl(NT_OSC);
++ /* Set Initial row to 0*/
++ NT7506_writeb_ctl(NT_COM0); NT7506_writeb_ctl(0);
++ /* Sets DC-DC*/
++ NT7506_writeb_ctl(NT_DCDC|TIME6);
++ /* Selects resistance ratio of the internal resistor*/
++ NT7506_writeb_ctl(NT_REG_RES|RES_7_2);
++ /* set Reference Voltage mode*/
++ NT7506_writeb_ctl(NT_ELEC_VOL); NT7506_writeb_ctl(ael);
++ /* Selects LCD bias ratio*/
++ NT7506_writeb_ctl(NT_BIAS|BIAS_1_11);
++
++ NT7506_writeb_ctl(NT_DATA_DIR); NT7506_writeb_ctl(0);
++ NT7506_writeb_ctl(NT_FRC_PWM|PWM15);
++
++#ifdef CONFIG_FB_NT7506_GRAYSCALE
++ /* Feed grayscale palette */
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_WHITE_AB);
++ NT7506_writeb_ctl(0x00);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_WHITE_CD);
++ NT7506_writeb_ctl(0x00);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_LIGHT_AB);
++ NT7506_writeb_ctl(0x55);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_LIGHT_CD);
++ NT7506_writeb_ctl(0x55);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_DARK_AB);
++ NT7506_writeb_ctl(0xAA);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_DARK_CD);
++ NT7506_writeb_ctl(0xAA);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_BLACK_AB);
++ NT7506_writeb_ctl(0xFF);
++ NT7506_writeb_ctl(NT_GRAY_SCALE | GRAY_BLACK_CD);
++ NT7506_writeb_ctl(0xFF);
++#endif
++
++ /* Select power circuit functions */
++ NT7506_writeb_ctl(NT_POWER|VC);
++ udelay(5000);
++ NT7506_writeb_ctl(NT_POWER|VC|VR);
++ udelay(5000);
++ NT7506_writeb_ctl(NT_POWER|VC|VR|VF);
++ udelay(5000);
++ /* Reverses the display status on LCD panel */
++ NT7506_writeb_ctl(NT_REV_DISP|OFF);
++ /* Forces the whole LCD points to be turned on regardless of the contents of the display data RAM*/
++ NT7506_writeb_ctl(NT_DISP|ON);
++ /* Set Initial Start Line Address */
++ NT7506_writeb_ctl(NT_START_LINE); NT7506_writeb_ctl(0x00);
++}
++
++static void __exit nt7506fb_exit(void)
++{
++ if (lcd_mem)
++ release_mem_region(LCD_BASE, LCD_SIZE);
++ lcd_mem = NULL;
++ platform_device_unregister(nt7506fb_device);
++ platform_driver_unregister(&nt7506fb_driver);
++}
++
++module_param(tuhold, ulong, 0);
++MODULE_PARM_DESC(tuhold, "Time to hold between strobing data to NT7506 board");
++
++module_init(nt7506fb_init);
++module_exit(nt7506fb_exit);
++
++MODULE_DESCRIPTION("fbdev driver for Novatek NT7506 monochrome LCD board");
++MODULE_AUTHOR("Alexandre Coffignal");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.27/include/linux/nt7506fb.h
+===================================================================
+--- /dev/null
++++ linux-2.6.27/include/linux/nt7506fb.h
+@@ -0,0 +1,31 @@
++
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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
++ *
++ */
++
++#ifndef __LINUX_NT7506FB_H__
++#define __LINUX_NT7506FB_H__
++
++#define FBIO_FRAMERATE _IOR('f', 1, char)
++
++#endif
diff --git a/packages/linux/linux-2.6.27/boc01/014-090115-pm-wakeup.patch b/packages/linux/linux-2.6.27/boc01/014-090115-pm-wakeup.patch
deleted file mode 100644
index 536a788ffc..0000000000
--- a/packages/linux/linux-2.6.27/boc01/014-090115-pm-wakeup.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-Index: linux-2.6.27/arch/powerpc/platforms/83xx/Kconfig
-===================================================================
---- linux-2.6.27.orig/arch/powerpc/platforms/83xx/Kconfig
-+++ linux-2.6.27/arch/powerpc/platforms/83xx/Kconfig
-@@ -104,6 +104,13 @@ config ASP834x
-
- endif
-
-+
-+config WAKEUP_IT
-+ tristate "83xx interrupt for PM wakeup"
-+ help
-+ This enables a driver to be used as a wakeup source .
-+
-+
- # used for usb
- config PPC_MPC831x
- bool
-Index: linux-2.6.27/arch/powerpc/platforms/83xx/Makefile
-===================================================================
---- linux-2.6.27.orig/arch/powerpc/platforms/83xx/Makefile
-+++ linux-2.6.27/arch/powerpc/platforms/83xx/Makefile
-@@ -14,3 +14,4 @@ obj-$(CONFIG_MPC837x_MDS) += mpc837x_mds
- obj-$(CONFIG_SBC834x) += sbc834x.o
- obj-$(CONFIG_MPC837x_RDB) += mpc837x_rdb.o
- obj-$(CONFIG_ASP834x) += asp834x.o
-+obj-$(CONFIG_WAKEUP_IT) += wakeup-it.o
-Index: linux-2.6.27/arch/powerpc/platforms/83xx/wakeup-it.c
-===================================================================
---- /dev/null
-+++ linux-2.6.27/arch/powerpc/platforms/83xx/wakeup-it.c
-@@ -0,0 +1,163 @@
-+/*
-+ * This support a driver to be used as a wakeup source on the MPC8313.
-+ *
-+ * Copyright (c) 2008 Cenosys
-+ *
-+ * Alexandre Coffignal <alexandre.coffignal@censoys.com>
-+ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
-+ *
-+ * 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/module.h>
-+#include <linux/interrupt.h>
-+#include <linux/of_platform.h>
-+#include <linux/reboot.h>
-+#include <linux/irq.h>
-+
-+#include <sysdev/fsl_soc.h>
-+
-+#define DRIVER_NAME "wakeup-it"
-+
-+char suspend = 0;
-+
-+static char *wakeup_irq_ids[] = {
-+ "capsense",
-+ "rfid",
-+};
-+
-+struct wakeup_priv {
-+ int nirq;
-+ int irq[ARRAY_SIZE(wakeup_irq_ids)];
-+ spinlock_t lock;
-+};
-+
-+struct wakeup_irq_desc {
-+ char *name;
-+ int index;
-+};
-+
-+static irqreturn_t wakeup(int irq, void *dev_id)
-+{
-+ //printk(KERN_INFO "===== WAKEUP INTERRUPT %d !!\n", irq);
-+
-+ if ( suspend )
-+ kernel_restart(NULL);
-+ return IRQ_HANDLED ;
-+}
-+
-+
-+static void wakeup_free(struct wakeup_priv *priv)
-+{
-+ int i;
-+
-+ for (i = 0; i < priv->nirq; i++) {
-+ free_irq(priv->irq[i], priv);
-+ }
-+
-+ kfree(priv);
-+}
-+
-+
-+static int __devinit wakeup_probe(struct of_device *dev, const struct of_device_id *match)
-+{
-+ struct device_node *np = dev->node;
-+ struct resource res;
-+ int ret = 0;
-+ struct wakeup_priv *priv;
-+ int i;
-+
-+ priv = kmalloc(sizeof(struct wakeup_priv), GFP_KERNEL);
-+ if (!priv)
-+ return -ENOMEM;
-+
-+ priv->nirq = 0;
-+ spin_lock_init(&priv->lock);
-+ dev_set_drvdata(&dev->dev, priv);
-+
-+ ret = of_address_to_resource(np, 0, &res);
-+ if (ret)
-+ goto out;
-+
-+ for (i = 0; i < ARRAY_SIZE(wakeup_irq_ids); i++) {
-+ char *id = wakeup_irq_ids[i];
-+ char it_name[32];
-+ int it_num;
-+
-+ it_num = irq_of_parse_and_map(np, i);
-+ if ( it_num == NO_IRQ ) {
-+ dev_err(&dev->dev, DRIVER_NAME ": interrupt #%d (%s) does not exist in device tree.\n", i, id);
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+
-+ set_irq_type(it_num, IRQ_TYPE_EDGE_FALLING);
-+
-+ snprintf(it_name, sizeof(it_name), DRIVER_NAME ":%s", id);
-+
-+ ret = request_irq(it_num, wakeup, 0, it_name, priv);
-+ if ( ret ) {
-+ printk(KERN_WARNING DRIVER_NAME ": cannot request interrupt %d (%s)\n", it_num, id);
-+ goto out;
-+ }
-+
-+ printk(KERN_INFO DRIVER_NAME ": accepting wakeup event from %s (%d)\n", id, it_num);
-+
-+ priv->irq[priv->nirq++] = it_num;
-+ }
-+
-+ return 0;
-+
-+out:
-+ wakeup_free(priv);
-+ return ret;
-+}
-+
-+static int __devexit wakeup_remove(struct of_device *dev)
-+{
-+ struct wakeup_priv *priv = dev_get_drvdata(&dev->dev);
-+ wakeup_free(priv);
-+ return 0;
-+}
-+
-+static struct of_device_id wakeup_match[] = {
-+ {
-+ .compatible = "fsl,wakeup-it",
-+ },
-+ {},
-+};
-+
-+static int wakeup_suspend(struct of_device * dev, pm_message_t state)
-+{
-+ int ret = 0;
-+ printk(KERN_INFO DRIVER_NAME ": suspend\n");
-+ suspend=1;
-+ return ret;
-+}
-+
-+
-+static struct of_platform_driver wakeup_driver = {
-+ .name = DRIVER_NAME,
-+ .match_table = wakeup_match,
-+ .probe = wakeup_probe,
-+ .suspend = wakeup_suspend,
-+ .remove = __devexit_p(wakeup_remove)
-+
-+};
-+
-+static int __init wakeup_init(void)
-+{
-+ return of_register_platform_driver(&wakeup_driver);
-+}
-+
-+static void __exit wakeup_exit(void)
-+{
-+ of_unregister_platform_driver(&wakeup_driver);
-+}
-+
-+module_init(wakeup_init);
-+module_exit(wakeup_exit);
diff --git a/packages/linux/linux-2.6.27/boc01/014-090209-pm-wakeup.patch b/packages/linux/linux-2.6.27/boc01/014-090209-pm-wakeup.patch
new file mode 100644
index 0000000000..3acbf40c32
--- /dev/null
+++ b/packages/linux/linux-2.6.27/boc01/014-090209-pm-wakeup.patch
@@ -0,0 +1,195 @@
+Index: linux-2.6.27/arch/powerpc/platforms/83xx/Kconfig
+===================================================================
+--- linux-2.6.27.orig/arch/powerpc/platforms/83xx/Kconfig 2008-10-10 00:13:53.000000000 +0200
++++ linux-2.6.27/arch/powerpc/platforms/83xx/Kconfig 2009-01-23 10:54:03.000000000 +0100
+@@ -104,6 +104,13 @@
+
+ endif
+
++
++config WAKEUP_IT
++ tristate "83xx interrupt for PM wakeup"
++ help
++ This enables a driver to be used as a wakeup source .
++
++
+ # used for usb
+ config PPC_MPC831x
+ bool
+Index: linux-2.6.27/arch/powerpc/platforms/83xx/Makefile
+===================================================================
+--- linux-2.6.27.orig/arch/powerpc/platforms/83xx/Makefile 2008-10-10 00:13:53.000000000 +0200
++++ linux-2.6.27/arch/powerpc/platforms/83xx/Makefile 2009-01-23 10:54:03.000000000 +0100
+@@ -14,3 +14,4 @@
+ obj-$(CONFIG_SBC834x) += sbc834x.o
+ obj-$(CONFIG_MPC837x_RDB) += mpc837x_rdb.o
+ obj-$(CONFIG_ASP834x) += asp834x.o
++obj-$(CONFIG_WAKEUP_IT) += wakeup-it.o
+Index: linux-2.6.27/arch/powerpc/platforms/83xx/wakeup-it.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.27/arch/powerpc/platforms/83xx/wakeup-it.c 2009-01-23 10:49:09.000000000 +0100
+@@ -0,0 +1,163 @@
++/*
++ * This support a driver to be used as a wakeup source on the MPC8313.
++ *
++ * Copyright (c) 2008 Cenosys
++ *
++ * Alexandre Coffignal <alexandre.coffignal@censoys.com>
++ * Sylvain Giroudon <sylvain.giroudon@goobie.fr>
++ *
++ * 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/module.h>
++#include <linux/interrupt.h>
++#include <linux/of_platform.h>
++#include <linux/reboot.h>
++#include <linux/irq.h>
++
++#include <sysdev/fsl_soc.h>
++
++#define DRIVER_NAME "wakeup-it"
++
++char suspend = 0;
++
++static char *wakeup_irq_ids[] = {
++ "capsense",
++ "rfid",
++};
++
++struct wakeup_priv {
++ int nirq;
++ int irq[ARRAY_SIZE(wakeup_irq_ids)];
++ spinlock_t lock;
++};
++
++struct wakeup_irq_desc {
++ char *name;
++ int index;
++};
++
++static irqreturn_t wakeup(int irq, void *dev_id)
++{
++ //printk(KERN_INFO "===== WAKEUP INTERRUPT %d !!\n", irq);
++
++// if ( suspend )
++// kernel_restart(NULL);
++ return IRQ_HANDLED ;
++}
++
++
++static void wakeup_free(struct wakeup_priv *priv)
++{
++ int i;
++
++ for (i = 0; i < priv->nirq; i++) {
++ free_irq(priv->irq[i], priv);
++ }
++
++ kfree(priv);
++}
++
++
++static int __devinit wakeup_probe(struct of_device *dev, const struct of_device_id *match)
++{
++ struct device_node *np = dev->node;
++ struct resource res;
++ int ret = 0;
++ struct wakeup_priv *priv;
++ int i;
++
++ priv = kmalloc(sizeof(struct wakeup_priv), GFP_KERNEL);
++ if (!priv)
++ return -ENOMEM;
++
++ priv->nirq = 0;
++ spin_lock_init(&priv->lock);
++ dev_set_drvdata(&dev->dev, priv);
++
++ ret = of_address_to_resource(np, 0, &res);
++ if (ret)
++ goto out;
++
++ for (i = 0; i < ARRAY_SIZE(wakeup_irq_ids); i++) {
++ char *id = wakeup_irq_ids[i];
++ char it_name[32];
++ int it_num;
++
++ it_num = irq_of_parse_and_map(np, i);
++ if ( it_num == NO_IRQ ) {
++ dev_err(&dev->dev, DRIVER_NAME ": interrupt #%d (%s) does not exist in device tree.\n", i, id);
++ ret = -ENODEV;
++ goto out;
++ }
++
++ set_irq_type(it_num, IRQ_TYPE_EDGE_FALLING);
++
++ snprintf(it_name, sizeof(it_name), DRIVER_NAME ":%s", id);
++
++ ret = request_irq(it_num, wakeup, 0, it_name, priv);
++ if ( ret ) {
++ printk(KERN_WARNING DRIVER_NAME ": cannot request interrupt %d (%s)\n", it_num, id);
++ goto out;
++ }
++
++ printk(KERN_INFO DRIVER_NAME ": accepting wakeup event from %s (%d)\n", id, it_num);
++
++ priv->irq[priv->nirq++] = it_num;
++ }
++
++ return 0;
++
++out:
++ wakeup_free(priv);
++ return ret;
++}
++
++static int __devexit wakeup_remove(struct of_device *dev)
++{
++ struct wakeup_priv *priv = dev_get_drvdata(&dev->dev);
++ wakeup_free(priv);
++ return 0;
++}
++
++static struct of_device_id wakeup_match[] = {
++ {
++ .compatible = "fsl,wakeup-it",
++ },
++ {},
++};
++
++static int wakeup_suspend(struct of_device * dev, pm_message_t state)
++{
++ int ret = 0;
++ printk(KERN_INFO DRIVER_NAME ": suspend\n");
++ suspend=1;
++ return ret;
++}
++
++
++static struct of_platform_driver wakeup_driver = {
++ .name = DRIVER_NAME,
++ .match_table = wakeup_match,
++ .probe = wakeup_probe,
++ .suspend = wakeup_suspend,
++ .remove = __devexit_p(wakeup_remove)
++
++};
++
++static int __init wakeup_init(void)
++{
++ return of_register_platform_driver(&wakeup_driver);
++}
++
++static void __exit wakeup_exit(void)
++{
++ of_unregister_platform_driver(&wakeup_driver);
++}
++
++module_init(wakeup_init);
++module_exit(wakeup_exit);
diff --git a/packages/linux/linux-2.6.27/boc01/boc01.dts b/packages/linux/linux-2.6.27/boc01/boc01.dts
index fec7c85673..ffc27abb31 100644
--- a/packages/linux/linux-2.6.27/boc01/boc01.dts
+++ b/packages/linux/linux-2.6.27/boc01/boc01.dts
@@ -132,6 +132,10 @@
compatible = "at24,24c32";
reg = <0x50>;
};
+ at24@57 {
+ compatible = "at24,isl12024";
+ reg = <0x57>;
+ };
};
crypto@30000 {
@@ -184,7 +188,6 @@
mdio@24520 {
#address-cells = <1>;
#size-cells = <0>;
- compatible = "fsl,gianfar-mdio";
reg = <0x24520 0x20>;
phy4: ethernet-phy@4 {
interrupt-parent = <&ipic>;
@@ -252,7 +255,7 @@
gtm1: timer@500 {
compatible = "fsl,mpc8313-gtm", "fsl,gtm";
reg = <0x500 0x100>;
- interrupts = <90 8 78 8 84 8 72 8>;
+ interrupts = <72 8 78 8 84 8 90 8>;
interrupt-parent = <&ipic>;
};
diff --git a/packages/linux/linux-2.6.27/boc01/defconfig b/packages/linux/linux-2.6.27/boc01/defconfig
index f302f0747d..bb667bcd10 100644
--- a/packages/linux/linux-2.6.27/boc01/defconfig
+++ b/packages/linux/linux-2.6.27/boc01/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.27
-# Fri Jan 16 19:05:52 2009
+# Thu Feb 26 12:59:36 2009
#
# CONFIG_PPC64 is not set
@@ -40,7 +40,6 @@ CONFIG_ARCH_HAS_ILOG2_U32=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
CONFIG_PPC=y
CONFIG_EARLY_PRINTK=y
@@ -264,7 +263,6 @@ CONFIG_GENERIC_ISA_DMA=y
CONFIG_PPC_INDIRECT_PCI=y
CONFIG_FSL_SOC=y
CONFIG_FSL_PCI=y
-CONFIG_FSL_LBC=y
CONFIG_PPC_PCI_CHOICE=y
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
@@ -734,7 +732,6 @@ CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ALAUDA is not set
CONFIG_MTD_NAND_FSL_ELBC=y
-CONFIG_MTD_NAND_FSL_UPM=y
# CONFIG_MTD_ONENAND is not set
#
@@ -742,7 +739,6 @@ CONFIG_MTD_NAND_FSL_UPM=y
#
# CONFIG_MTD_UBI is not set
CONFIG_OF_DEVICE=y
-CONFIG_OF_GPIO=y
CONFIG_OF_I2C=y
CONFIG_OF_SPI=y
# CONFIG_PARPORT is not set
@@ -1091,7 +1087,6 @@ CONFIG_I2C_HELPER_AUTO=y
#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
-# CONFIG_I2C_GPIO is not set
CONFIG_I2C_MPC=y
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_SIMTEC is not set
@@ -1119,13 +1114,11 @@ CONFIG_I2C_MPC=y
#
# CONFIG_DS1682 is not set
CONFIG_AT24=y
-CONFIG_ISL12024EEPROM=y
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_I2C_DEBUG_CORE is not set
@@ -1148,26 +1141,7 @@ CONFIG_SPI_MPC83xx=y
CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_TLE62X0 is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-CONFIG_GPIOLIB=y
-CONFIG_GPIO_SYSFS=y
-
-#
-# I2C GPIO expanders:
-#
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-
-#
-# PCI GPIO expanders:
-#
-# CONFIG_GPIO_BT8XX is not set
-
-#
-# SPI GPIO expanders:
-#
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
@@ -1528,7 +1502,6 @@ CONFIG_LEDS_CLASS=y
# LED drivers
#
# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_GPIO is not set
# CONFIG_LEDS_PCA955X is not set
#
diff --git a/packages/linux/linux-2.6.28+2.6.29-rc6/tosa/0001--tosa-Set-a-bus_id-for-the-tc6393xb-so-that-the-clk.patch b/packages/linux/linux-2.6.28+2.6.29-rc6/tosa/0001--tosa-Set-a-bus_id-for-the-tc6393xb-so-that-the-clk.patch
new file mode 100644
index 0000000000..e7975b4a18
--- /dev/null
+++ b/packages/linux/linux-2.6.28+2.6.29-rc6/tosa/0001--tosa-Set-a-bus_id-for-the-tc6393xb-so-that-the-clk.patch
@@ -0,0 +1,26 @@
+From 6c3a8973776e8b75e46c34513379c611c0ba2615 Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <dp@xora.org.uk>
+Date: Tue, 3 Mar 2009 12:14:18 +0000
+Subject: [PATCH] [tosa] Set a bus_id for the tc6393xb so that the clk aliasing works and
+ the tc6393xb will actually probe ok
+
+Signed-off-by: Graeme Gregory <dp@xora.org.uk>
+---
+ arch/arm/mach-pxa/tosa.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
+index 3332e5d..1f5ca18 100644
+--- a/arch/arm/mach-pxa/tosa.c
++++ b/arch/arm/mach-pxa/tosa.c
+@@ -800,6 +800,7 @@ static struct platform_device tc6393xb_device = {
+ .name = "tc6393xb",
+ .id = -1,
+ .dev = {
++ .bus_id = "tc6393xb",
+ .platform_data = &tosa_tc6393xb_data,
+ },
+ .num_resources = ARRAY_SIZE(tc6393xb_resources),
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28+2.6.29-rc6/tosa/defconfig b/packages/linux/linux-2.6.28+2.6.29-rc6/tosa/defconfig
new file mode 100644
index 0000000000..eefd497518
--- /dev/null
+++ b/packages/linux/linux-2.6.28+2.6.29-rc6/tosa/defconfig
@@ -0,0 +1,2010 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.29-rc6
+# Tue Mar 3 08:43:22 2009
+#
+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_HAVE_LATENCYTOP_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_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_COMPAT_BRK=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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+CONFIG_FREEZER=y
+
+#
+# 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_CLPS711X 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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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_S3C64XX 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_MSM is not set
+# CONFIG_ARCH_W90X900 is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# 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_AKITA is not set
+# CONFIG_MACH_SPITZ is not set
+# CONFIG_MACH_BORZOI is not set
+CONFIG_MACH_TOSA=y
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_H5000 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_ARCH_PXA_PALM is not set
+# CONFIG_PXA_EZX is not set
+CONFIG_PXA25x=y
+# CONFIG_PXA_PWM is not set
+# CONFIG_TOSA_BT is not set
+CONFIG_PXA_HAVE_BOARD_IRQS=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_NOIFAR=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_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+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_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+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_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE 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_PXA=y
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_COMPAT_NET_DEV_OPS=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_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
+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_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=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO 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=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_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE 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_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT 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
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_NF_DEFRAG_IPV4 is not set
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES 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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=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
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_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_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+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_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=m
+CONFIG_LIB80211_CRYPT_WEP=m
+CONFIG_LIB80211_CRYPT_CCMP=m
+CONFIG_LIB80211_CRYPT_TKIP=m
+# CONFIG_MAC80211 is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=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
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# 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_GPIO 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_TMIO=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# 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
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+CONFIG_IDE_ATAPI=y
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+CONFIG_BLK_DEV_IDECS=y
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=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=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
+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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+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_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_HERMES=m
+CONFIG_HERMES_CACHE_FW_ON_INIT=y
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_USB_ZD1201=m
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_IWLWIFI_LEDS is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# 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_DM9601 is not set
+# CONFIG_USB_NET_SMSC95XX is not set
+CONFIG_USB_NET_GL620A=m
+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 is not set
+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_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_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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=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_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_APMPOWER 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_CORGI is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_KEYBOARD_TOSA=y
+# CONFIG_KEYBOARD_TOSA_USE_EXT_KEYCODES is not set
+CONFIG_KEYBOARD_GPIO=y
+# 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 is not set
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO 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_WM97XX=y
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+CONFIG_TOUCHSCREEN_WM9712=y
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+CONFIG_INPUT_MISC=y
+# 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_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=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_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 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_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_PXA2XX is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 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_BATTERY_TOSA=y
+# CONFIG_BATTERY_WM97XX is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+CONFIG_MFD_TMIO=y
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+CONFIG_MFD_TC6393XB=y
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_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_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
+CONFIG_USB_GSPCA=m
+# CONFIG_USB_M5602 is not set
+# CONFIG_USB_STV06XX is not set
+# CONFIG_USB_GSPCA_CONEX is not set
+# CONFIG_USB_GSPCA_ETOMS is not set
+# CONFIG_USB_GSPCA_FINEPIX is not set
+# CONFIG_USB_GSPCA_MARS is not set
+# CONFIG_USB_GSPCA_OV519 is not set
+# CONFIG_USB_GSPCA_OV534 is not set
+# CONFIG_USB_GSPCA_PAC207 is not set
+# CONFIG_USB_GSPCA_PAC7311 is not set
+# CONFIG_USB_GSPCA_SONIXB is not set
+# CONFIG_USB_GSPCA_SONIXJ is not set
+# CONFIG_USB_GSPCA_SPCA500 is not set
+# CONFIG_USB_GSPCA_SPCA501 is not set
+# CONFIG_USB_GSPCA_SPCA505 is not set
+# CONFIG_USB_GSPCA_SPCA506 is not set
+# CONFIG_USB_GSPCA_SPCA508 is not set
+# CONFIG_USB_GSPCA_SPCA561 is not set
+# CONFIG_USB_GSPCA_STK014 is not set
+# CONFIG_USB_GSPCA_SUNPLUS is not set
+# CONFIG_USB_GSPCA_T613 is not set
+# CONFIG_USB_GSPCA_TV8532 is not set
+# CONFIG_USB_GSPCA_VC032X is not set
+# CONFIG_USB_GSPCA_ZC3XX is not set
+# 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_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
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_USB_SI470X is not set
+# CONFIG_USB_MR800 is not set
+# CONFIG_RADIO_TEA5764 is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+CONFIG_FB_TMIO=y
+CONFIG_FB_TMIO_ACCELL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_CORGI is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_LCD_TOSA=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+CONFIG_BACKLIGHT_TOSA=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=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
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+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 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
+CONFIG_SND_VMASTER=y
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_PXA2XX_LIB=y
+CONFIG_SND_PXA2XX_LIB_AC97=y
+# CONFIG_SND_PXA2XX_AC97 is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+CONFIG_SND_PCMCIA=y
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_AC97_BUS=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_AC97=y
+CONFIG_SND_PXA2XX_SOC_TOSA=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_WM9712=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_HID_PID 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
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=m
+CONFIG_HID_APPLE=m
+CONFIG_HID_BELKIN=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+CONFIG_HID_CYPRESS=m
+CONFIG_HID_EZKEY=m
+CONFIG_HID_GYRATION=m
+CONFIG_HID_LOGITECH=m
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
+# CONFIG_HID_NTRIG is not set
+CONFIG_HID_PANTHERLORD=m
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=m
+CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SONY=m
+CONFIG_HID_SUNPLUS=m
+# CONFIG_GREENASIA_FF is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=m
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD 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_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_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_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# 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_IUU is not set
+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_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI 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_OPTICON 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_SEVSEG is not set
+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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_PXA25X=y
+CONFIG_USB_PXA25X=m
+# CONFIG_USB_PXA25X_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_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
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON 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=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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_PXA is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO is not set
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+# CONFIG_MEILHAUS is not set
+# CONFIG_USB_IP_COMMON is not set
+CONFIG_PRISM2_USB=m
+# CONFIG_ECHO is not set
+# CONFIG_USB_ATMEL is not set
+# CONFIG_COMEDI is not set
+# CONFIG_ASUS_OLED is not set
+# CONFIG_INPUT_MIMIO is not set
+# CONFIG_TRANZPORT is not set
+
+#
+# Android
+#
+# CONFIG_ANDROID is not set
+# CONFIG_ANDROID_BINDER_IPC is not set
+# CONFIG_ANDROID_LOGGER is not set
+# CONFIG_ANDROID_RAM_CONSOLE is not set
+# CONFIG_ANDROID_TIMED_GPIO is not set
+# CONFIG_ANDROID_LOW_MEMORY_KILLER 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_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# 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_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+# CONFIG_MISC_FILESYSTEMS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+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
+
+#
+# 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
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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 is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ALGAPI2=m
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=m
+CONFIG_CRYPTO_RNG2=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_MANAGER2=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch b/packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch
new file mode 100644
index 0000000000..51c161f99d
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch
@@ -0,0 +1,106 @@
+From 4765c85914d55590c6d17b6cf9e6f7964d1af108 Mon Sep 17 00:00:00 2001
+From: Dmitry Baryshkov <dbaryshkov@gmail.com>
+Date: Tue, 28 Oct 2008 21:41:39 +0300
+Subject: [PATCH 01/23] collie: start scoop converton to new api
+
+Start converting scoop gpio access to new API instead of old
+deprecated one.
+
+Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
+---
+ arch/arm/mach-sa1100/collie.c | 28 +++++++++++++++++++++++-----
+ arch/arm/mach-sa1100/include/mach/collie.h | 7 ++++---
+ 2 files changed, 27 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
+index fe28999..8cf267f 100644
+--- a/arch/arm/mach-sa1100/collie.c
++++ b/arch/arm/mach-sa1100/collie.c
+@@ -25,6 +25,7 @@
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/timer.h>
++#include <linux/gpio.h>
+
+ #include <mach/hardware.h>
+ #include <asm/mach-types.h>
+@@ -55,6 +56,7 @@ static struct resource collie_scoop_resources[] = {
+ static struct scoop_config collie_scoop_setup = {
+ .io_dir = COLLIE_SCOOP_IO_DIR,
+ .io_out = COLLIE_SCOOP_IO_OUT,
++ .gpio_base = COLLIE_SCOOP_GPIO_BASE,
+ };
+
+ struct platform_device colliescoop_device = {
+@@ -196,18 +198,34 @@ static struct mtd_partition collie_partitions[] = {
+ }
+ };
+
++static int collie_flash_init(void)
++{
++ int rc;
++ rc = gpio_request(COLLIE_GPIO_VPEN, "flash Vpp enable");
++ if (rc)
++ return rc;
++
++ rc = gpio_direction_output(COLLIE_GPIO_VPEN, 1);
++ if (rc)
++ gpio_free(COLLIE_GPIO_VPEN);
++
++ return rc;
++}
++
+ static void collie_set_vpp(int vpp)
+ {
+- write_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR) | COLLIE_SCP_VPEN);
+- if (vpp)
+- write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR) | COLLIE_SCP_VPEN);
+- else
+- write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR) & ~COLLIE_SCP_VPEN);
++ gpio_set_value(COLLIE_GPIO_VPEN, vpp);
+ }
+
++static void collie_flash_exit(void)
++{
++ gpio_free(COLLIE_GPIO_VPEN);
++}
+ static struct flash_platform_data collie_flash_data = {
+ .map_name = "cfi_probe",
++ .init = collie_flash_init,
+ .set_vpp = collie_set_vpp,
++ .exit = collie_flash_exit,
+ .parts = collie_partitions,
+ .nr_parts = ARRAY_SIZE(collie_partitions),
+ };
+diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h
+index 69e9624..9bc5349 100644
+--- a/arch/arm/mach-sa1100/include/mach/collie.h
++++ b/arch/arm/mach-sa1100/include/mach/collie.h
+@@ -14,6 +14,7 @@
+ #define __ASM_ARCH_COLLIE_H
+
+
++#define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1)
+ #define COLLIE_SCP_CHARGE_ON SCOOP_GPCR_PA11
+ #define COLLIE_SCP_DIAG_BOOT1 SCOOP_GPCR_PA12
+ #define COLLIE_SCP_DIAG_BOOT2 SCOOP_GPCR_PA13
+@@ -21,13 +22,13 @@
+ #define COLLIE_SCP_MUTE_R SCOOP_GPCR_PA15
+ #define COLLIE_SCP_5VON SCOOP_GPCR_PA16
+ #define COLLIE_SCP_AMP_ON SCOOP_GPCR_PA17
+-#define COLLIE_SCP_VPEN SCOOP_GPCR_PA18
++#define COLLIE_GPIO_VPEN (COLLIE_SCOOP_GPIO_BASE + 7)
+ #define COLLIE_SCP_LB_VOL_CHG SCOOP_GPCR_PA19
+
+ #define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
+- COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | COLLIE_SCP_VPEN | \
++ COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | \
+ COLLIE_SCP_LB_VOL_CHG )
+-#define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | COLLIE_SCP_VPEN | \
++#define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
+ COLLIE_SCP_CHARGE_ON )
+
+ /* GPIOs for which the generic definition doesn't say much */
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch b/packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch
new file mode 100644
index 0000000000..7530beee2c
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch
@@ -0,0 +1,1228 @@
+From dae5d7c71ba47bdd0603d5cc3e8a3dfe28d209a0 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:30:32 +0200
+Subject: [PATCH 02/23] add locomo_spi driver
+
+---
+ drivers/spi/Kconfig | 4 +
+ drivers/spi/Makefile | 1 +
+ drivers/spi/locomo_spi.c | 1097 ++++++++++++++++++++++++++++++++++++++++++++++
+ drivers/spi/locomo_spi.h | 75 ++++
+ 4 files changed, 1177 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/spi/locomo_spi.c
+ create mode 100644 drivers/spi/locomo_spi.h
+
+diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
+index b9d0efb..aa3c60a 100644
+--- a/drivers/spi/Kconfig
++++ b/drivers/spi/Kconfig
+@@ -123,6 +123,10 @@ config SPI_MPC52xx_PSC
+ This enables using the Freescale MPC52xx Programmable Serial
+ Controller in master SPI mode.
+
++config SPI_LOCOMO
++ tristate "Locomo SPI master"
++ depends on SPI_MASTER && SHARP_LOCOMO && EXPERIMENTAL
++
+ config SPI_MPC83xx
+ tristate "Freescale MPC83xx/QUICC Engine SPI controller"
+ depends on (PPC_83xx || QUICC_ENGINE) && EXPERIMENTAL
+diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
+index ccf18de..794dd45 100644
+--- a/drivers/spi/Makefile
++++ b/drivers/spi/Makefile
+@@ -29,6 +29,7 @@ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
+ obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
+ obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
+ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
++obj-$(CONFIG_SPI_LOCOMO) += locomo_spi.o
+ # ... add above this line ...
+
+ # SPI protocol drivers (device/link on bus)
+diff --git a/drivers/spi/locomo_spi.c b/drivers/spi/locomo_spi.c
+new file mode 100644
+index 0000000..d3a4bd9
+--- /dev/null
++++ b/drivers/spi/locomo_spi.c
+@@ -0,0 +1,1097 @@
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/stat.h>
++#include <linux/delay.h>
++#include <linux/wait.h>
++#include <linux/interrupt.h>
++#include <asm/hardware/locomo.h>
++#include <asm/errno.h>
++#include <linux/mmc/host.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/mmc_spi.h>
++#include <linux/workqueue.h>
++#include <linux/spinlock.h>
++#include <linux/list.h>
++#include "locomo_spi.h"
++static struct locomospi_dev * spidev;
++static struct work_struct transfer_wq;
++int delay;
++
++char* transtxbuf=(char*)NULL;
++char* transrxbuf=(char*)NULL;
++int transfercount=0, transfersize=0;
++static DECLARE_WAIT_QUEUE_HEAD(transferqueue);
++/* MMC_SPI functions *********************************************************/
++
++static int locomommcspi_init(struct device *dev, irqreturn_t (*isr)(int, void*), void *mmc)
++{
++ int result;
++ result=request_irq(IRQ_LOCOMO_CARDDETECT, isr, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "locomo-spi", mmc);
++ return result;
++}
++
++static void locomommcspi_exit(struct device *dev, void* mmc)
++{
++ free_irq(IRQ_LOCOMO_CARDDETECT, mmc);
++}
++
++static int locomommcspi_getro(struct device *dev)
++{
++ return locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_WRITE_PROT) > 0 ? 1 : 0;
++}
++
++static void locomommcspi_setpower(struct device *dev, unsigned int mask)
++{
++ if(!mask && spidev->card_power)
++ locomospi_power(0);
++ else if( !spidev->card_power )
++ locomospi_power(1);
++
++}
++
++
++static struct mmc_spi_platform_data colliemmc ={
++ .init = locomommcspi_init,
++ .exit = locomommcspi_exit,
++ .detect_delay = 200,
++ .get_ro = locomommcspi_getro,
++ .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
++ .setpower = locomommcspi_setpower,
++ .powerup_msecs = 200,
++};
++
++/* Utility function **********************************************************/
++
++static void locomospi_power(int on)
++{
++ locomo_gpio_write(spidev->ldev->dev.parent, LOCOMO_GPIO_CARD_POWER, on);
++ spidev->card_power=on;
++ printk(KERN_DEBUG "locomospi: power %d\n",on);
++}
++
++static void locomospi_setclock(unsigned int div, unsigned int clock)
++{
++ u16 r = ioread16(spidev->base+LOCOMO_SPIMD);
++ div &= 0x7;
++ clock &= 0x3;
++ if(clock != spidev->clock_base || div != spidev->clock_div){
++ r &= ~(LOCOMO_SPI_XSEL | LOCOMO_SPI_CLKSEL | LOCOMO_SPI_XEN);
++ iowrite16(r,spidev->base+LOCOMO_SPIMD);
++ r |= (div | (clock <<3) | LOCOMO_SPI_XEN);
++ iowrite16(r,spidev->base+LOCOMO_SPIMD);
++ spidev->clock_div = div;
++ spidev->clock_base = clock;
++ udelay(300);
++ }
++
++}
++// returns 1 if card ist present, 0 otherwise
++static int locomospi_carddetect()
++{
++ return (locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_CARD_DETECT)>0)?0:1;
++}
++
++static void locomospi_setcs(int high)
++{
++ u16 r;
++ printk(KERN_DEBUG "locomospi: cs %d\n",high);
++ r = ioread16(spidev->base + LOCOMO_SPICT);
++ if(high)
++ r |= LOCOMO_SPI_CS;
++ else
++ r &= ~LOCOMO_SPI_CS;
++ iowrite16(r, spidev->base + LOCOMO_SPICT);
++}
++
++static void locomospi_reg_open()
++{
++ u16 r;
++ spidev->clock_div = DIV_64;
++ spidev->clock_base = CLOCK_18MHZ;
++ locomospi_power(1);
++ msleep(100);
++// iowrite16( 0xec00 | (CLOCK_18MHZ <<3)|DIV_64, spidev->base+LOCOMO_SPIMD);
++ iowrite16( LOCOMO_SPI_MSB1ST | LOCOMO_SPI_DOSTAT | LOCOMO_SPI_RCPOL | LOCOMO_SPI_TCPOL
++ |(CLOCK_18MHZ <<3) | DIV_64, spidev->base+LOCOMO_SPIMD);
++// if(locomospi_carddetect()){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16( r, spidev->base+LOCOMO_SPIMD);
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XEN;
++ iowrite16( r, spidev->base+LOCOMO_SPIMD);
++// }
++ iowrite16( LOCOMO_SPI_CS, spidev->base+LOCOMO_SPICT);
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r |= (LOCOMO_SPI_CEN | LOCOMO_SPI_RXUEN | LOCOMO_SPI_ALIGNEN);
++ iowrite16( r, spidev->base+LOCOMO_SPICT);
++ udelay(200);
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r &= ~LOCOMO_SPI_CS;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++}
++
++static void locomospi_reg_release()
++{
++ u16 r;
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r &= ~LOCOMO_SPI_CEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r &= ~LOCOMO_SPI_XEN;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r &= ~LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r |= LOCOMO_SPI_XEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++ locomospi_power(0);
++}
++#if 0
++static int txrx(const char* txbuffer, char* rxbuffer, int size)
++{
++ u16 r = ioread16(spidev->base+LOCOMO_SPICT);
++ r |= LOCOMO_SPI_ALIGNEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++ printk(KERN_DEBUG "locomospi: %d bytes to prozess\n",size);
++ /* initialize global vars for isr */
++ transfercount=0; transfersize=size;
++ transtxbuf=txbuffer; transrxbuf=rxbuffer;
++
++ /* start transmit and go sleep isr will wake us*/
++ enable_irq(IRQ_LOCOMO_SPI_TEND);
++ iowrite8(txbuffer[0], spidev->base+LOCOMO_SPITD);
++ wait_event(transferqueue, transfercount >= transfersize);
++ disable_irq(IRQ_LOCOMO_SPI_TEND);
++ transrxbuf=NULL; transtxbuf=NULL;
++
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r &= ~LOCOMO_SPI_ALIGNEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++ int i;
++ for(i=0; i< size; i++)
++ printk(KERN_DEBUG "locomospi: sent: %x received: %x \n",txbuffer[i], rxbuffer[i]);
++
++
++ return size;
++}
++
++
++static int tx(const char* txbuffer, int size)
++{
++ printk(KERN_DEBUG "locomospi: %d bytes to send\n",size);
++ /* initialize global vars for isr */
++ transfercount=0; transfersize=size;
++ transtxbuf=txbuffer;
++
++ /* start transmit and go sleep isr will wake us*/
++ enable_irq(IRQ_LOCOMO_SPI_RFW);
++ iowrite8(txbuffer[0], spidev->base+LOCOMO_SPITD);
++ wait_event(transferqueue, transfercount >= transfersize);
++ disable_irq(IRQ_LOCOMO_SPI_RFW);
++ transtxbuf=NULL;
++
++ int i;
++ for(i=0; i< size; i++)
++ printk(KERN_DEBUG "locomospi: sent: %x\n",txbuffer[i]);
++
++
++ return size;
++}
++
++static int rx(char* rxbuffer, int size)
++{
++ printk(KERN_DEBUG "locomospi: %d bytes to read\n",size);
++ /* initialize global vars for isr */
++ transfercount=0; transfersize=size;
++ transrxbuf=rxbuffer;
++
++ /* start transmit and go sleep isr will wake us*/
++ enable_irq(IRQ_LOCOMO_SPI_RFR);
++ rxbuffer[0]=ioread8(spidev->base+LOCOMO_SPIRD);
++ wait_event(transferqueue, transfercount >= transfersize);
++ disable_irq(IRQ_LOCOMO_SPI_RFR);
++ transrxbuf=NULL;
++
++ int i;
++ for(i=0; i< size; i++)
++ printk(KERN_DEBUG "locomospi: received: %x \n", rxbuffer[i]);
++
++
++ return size;
++}
++
++#else
++static int txrx(const char* txbuffer, char* rxbuffer, int size)
++{
++ int i=0,j=0;
++ int wait;
++ u16 r;
++/* char * txback = kmalloc(size * sizeof(char), GFP_KERNEL);
++ memcpy(txback, txbuffer, size);
++*/
++ if(spidev->clock_div == 4)
++ wait = 0x10000;
++ else
++ wait = 8;
++
++// printk(KERN_DEBUG "locomospi: txrx %d bytes to prozess\n",size);
++
++// r = ioread16(spidev->base+LOCOMO_SPICT);
++// r |= LOCOMO_SPI_ALIGNEN;
++// iowrite16(r, spidev->base+LOCOMO_SPICT);
++ //discard first bogus byte
++
++ ioread8(spidev->base+LOCOMO_SPIRD);
++ for(i=0; i<size; i++){
++ for(j=0; j <= wait; j++){
++ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFW)
++ break;
++ }
++ iowrite8(txbuffer[i], spidev->base+LOCOMO_SPITD);
++ ndelay(delay);
++
++ for(j=0; j <= wait; j++){
++ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFR)
++ break;
++ }
++ rxbuffer[i] = ioread8(spidev->base+LOCOMO_SPIRD);
++ ndelay(delay);
++ }
++// r = ioread16(spidev->base+LOCOMO_SPICT);
++// r &= ~LOCOMO_SPI_ALIGNEN;
++// iowrite16(r, spidev->base+LOCOMO_SPICT);
++
++/* for(j=0; j< size; j++)
++ printk(KERN_DEBUG "locomospi: sent: %x received: %x \n",txback[j], rxbuffer[j]);
++
++ kfree(txback);
++*/ return i;
++}
++
++static int tx(const char* buffer, int size)
++{
++ int i=0,j=0;
++ int wait;
++ u16 r;
++ if(spidev->clock_div == 4)
++ wait = 0x10000;
++ else
++ wait = 8;
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r &= ~LOCOMO_SPI_ALIGNEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++
++// printk(KERN_DEBUG "locomospi: tx %d bytes to transmit\n",size);
++ for(i=0; i<size; i++){
++ for(j=0; j <= wait; j++){
++ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFW)
++ break;
++ }
++ iowrite8(buffer[i], spidev->base+LOCOMO_SPITD);
++ ndelay(delay);
++ }
++
++ for(j=0; j <= wait; j++){
++ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_TEND)
++ break;
++ }
++
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r |= LOCOMO_SPI_ALIGNEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++
++// for(j=0; j< size; j++)
++// printk(KERN_DEBUG "locomospi: sent: %x \n", buffer[j]);
++// printk(KERN_DEBUG "locomospi: tx %d bytes transmitted\n",i);
++ return i;
++}
++
++static int rx(char* buffer, int size)
++{
++ int i,j;
++ int wait;
++ u16 r;
++ printk(KERN_DEBUG "locomospi: rx %d bytes to receive\n",size);
++ if(spidev->clock_div == 4)
++ wait = 0x10000;
++ else
++ wait = 8;
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r &= ~LOCOMO_SPI_ALIGNEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++
++ for(i=0; i<size; i++){
++
++ for(j=0; j <= wait; j++){
++ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFR)
++ break;
++ }
++ buffer[i]= ioread8(spidev->base+LOCOMO_SPIRD);
++ ndelay(delay);
++ }
++
++ r = ioread16(spidev->base+LOCOMO_SPICT);
++ r |= LOCOMO_SPI_ALIGNEN;
++ iowrite16(r, spidev->base+LOCOMO_SPICT);
++
++ for(j=0; j< size; j++)
++ printk(KERN_DEBUG "locomospi: received: %x \n", buffer[j]);
++ printk(KERN_DEBUG "locomospi: rx %d bytes received\n",i);
++ return i;
++}
++#endif
++/*
++static irqreturn_t locomospi_rwready(int irq, void *dev_id)
++{
++ struct locomospi_dev* dev=(struct locomospi_dev*) dev_id;
++// dev_dbg(&spidev->sdev->dev, "IRQ: %d\n", irq);
++// printk(KERN_DEBUG "locomospi: IRQ: %d\n", irq);
++ wake_up_interruptible(&dev->waitqueue);
++ return IRQ_HANDLED;
++}
++*/
++static irqreturn_t locomospi_testisr(int irq, void *dev_id)
++{
++ char *buf="";
++ switch(irq){
++ case IRQ_LOCOMO_SPI_RFR: buf="RFR";
++ break;
++ case IRQ_LOCOMO_SPI_RFW: buf="RFW";
++ break;
++ case IRQ_LOCOMO_SPI_REND:buf="REND";
++ break;
++ case IRQ_LOCOMO_SPI_TEND:buf="TEND";
++ break;
++ case IRQ_LOCOMO_CARDDETECT:
++ buf="CARD_DETECT";
++ break;
++ default: return IRQ_NONE;
++ }
++ printk(KERN_DEBUG "locomospi: IRQ: %s\n",buf);
++// dev_dbg(&spidev->sdev->dev, "IRQ: %s\n",buf);
++ return IRQ_HANDLED;
++}
++static irqreturn_t locomospi_txrxisr(int irq, void *dev_id)
++{
++ if(transfercount < transfersize){
++ transrxbuf[transfercount++] = ioread8(spidev->base+LOCOMO_SPIRD);
++ iowrite8(transtxbuf[transfercount], spidev->base+LOCOMO_SPITD);
++ }
++ else{
++ /* transfer complete. wake up txrx */
++ wake_up(&transferqueue);
++ }
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t locomospi_txisr(int irq, void *dev_id)
++{
++ if(transfercount < transfersize){
++ iowrite8(transtxbuf[transfercount++], spidev->base+LOCOMO_SPITD);
++ }
++ else{
++ /* transfer complete. wake up txrx */
++ wake_up(&transferqueue);
++ }
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t locomospi_rxisr(int irq, void *dev_id)
++{
++ if(transfercount < transfersize){
++ transrxbuf[transfercount++] = ioread8(spidev->base+LOCOMO_SPIRD);
++ }
++ else{
++ /* transfer complete. wake up txrx */
++ wake_up(&transferqueue);
++ }
++ return IRQ_HANDLED;
++}
++
++static void locomospi_clock(unsigned int Hz)
++{
++ u16 r;
++ printk(KERN_DEBUG "locomospi: changing clock to: %d\n", Hz);
++ if(Hz == 0){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r &= ~LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ }
++ else if(Hz >= 24576000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_1, CLOCK_25MHZ);
++ delay=41;
++ }
++ else if(Hz >= 22579200){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_1, CLOCK_22MHZ);
++ delay=45;
++ }
++ else if(Hz >= 18432000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_1, CLOCK_18MHZ);
++ delay=55;
++ }
++ else if(Hz >= 12288000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_2, CLOCK_25MHZ);
++ delay=82;
++ }
++ else if(Hz >= 11289600){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_2, CLOCK_22MHZ);
++ delay=89;
++ }
++ else if(Hz >= 9216000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_2, CLOCK_18MHZ);
++ delay=110;
++ }
++ else if(Hz >= 6144000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_4, CLOCK_25MHZ);
++ delay=164;
++ }
++ else if(Hz >= 5644800){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_4, CLOCK_22MHZ);
++ delay=178;
++ }
++ else if(Hz >= 4608000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_4, CLOCK_18MHZ);
++ delay=218;
++ }
++ else if(Hz >= 3072000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_8, CLOCK_25MHZ);
++ delay=327;
++ }
++ else if(Hz >= 2822400){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_8, CLOCK_22MHZ);
++ delay=355;
++ }
++ else if(Hz >= 2304000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_8, CLOCK_18MHZ);
++ delay=435;
++ }
++ else if(Hz >= 384000){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_64, CLOCK_25MHZ);
++ delay=2605;
++ }
++ else if(Hz >= 352800){
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_64, CLOCK_22MHZ);
++ delay=2834;
++ }
++ else{ /* set to 288 KHz */
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_XON;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ locomospi_setclock(DIV_64, CLOCK_18MHZ);
++ delay=3473;
++ }
++ spidev->clock = Hz;
++}
++
++/* sysfs attributes used for debug *******************************************/
++
++/* SPI registers */
++ssize_t locomospi_showspimd(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIMD));
++}
++
++ssize_t locomospi_storespimd(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIMD);
++ return count;
++}
++static DRIVER_ATTR(spimd, S_IWUSR | S_IRUGO, locomospi_showspimd, locomospi_storespimd);
++
++ssize_t locomospi_showspict(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPICT));
++}
++
++ssize_t locomospi_storespict(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPICT);
++ return count;
++}
++static DRIVER_ATTR(spict, S_IWUSR | S_IRUGO, locomospi_showspict, locomospi_storespict);
++
++ssize_t locomospi_showspist(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIST));
++}
++
++ssize_t locomospi_storespist(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIST);
++ return count;
++}
++static DRIVER_ATTR(spist, S_IWUSR | S_IRUGO, locomospi_showspist, locomospi_storespist);
++
++ssize_t locomospi_showspitd(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPITD));
++}
++
++ssize_t locomospi_storespitd(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPITD);
++ return count;
++}
++static DRIVER_ATTR(spitd, S_IWUSR | S_IRUGO, locomospi_showspitd, locomospi_storespitd);
++
++ssize_t locomospi_showspird(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIRD));
++}
++
++ssize_t locomospi_storespird(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIRD);
++ return count;
++}
++static DRIVER_ATTR(spird, S_IWUSR | S_IRUGO, locomospi_showspird, locomospi_storespird);
++
++ssize_t locomospi_showspits(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPITS));
++}
++
++ssize_t locomospi_storespits(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPITS);
++ return count;
++}
++static DRIVER_ATTR(spits, S_IWUSR | S_IRUGO, locomospi_showspits, locomospi_storespits);
++
++ssize_t locomospi_showspirs(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIRS));
++}
++
++ssize_t locomospi_storespirs(struct device_driver *drv, const char *buf, size_t count)
++{
++ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIRS);
++ return count;
++}
++static DRIVER_ATTR(spirs, S_IWUSR | S_IRUGO, locomospi_showspirs, locomospi_storespirs);
++
++/* MMC Card status */
++
++ssize_t locomospi_showpower(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "%d\n", spidev->card_power);
++}
++
++ssize_t locomospi_storepower(struct device_driver *drv, const char *buf, size_t count)
++{
++ locomospi_power(simple_strtoul(buf, NULL, 10));
++ return count;
++}
++static DRIVER_ATTR(cardpower, S_IWUSR | S_IRUGO, locomospi_showpower, locomospi_storepower);
++
++ssize_t locomospi_detectcard(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "%d\n",(locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_CARD_DETECT)>0)?0:1);
++}
++static DRIVER_ATTR(carddetect, S_IRUGO, locomospi_detectcard, NULL);
++
++ssize_t locomospi_writeprotect(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "%d\n",(locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_WRITE_PROT)>0)?1:0);
++}
++static DRIVER_ATTR(cardwriteprotect, S_IRUGO, locomospi_writeprotect, NULL);
++
++
++ssize_t locomospi_showclock(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "%d\n", spidev->clock);
++}
++
++ssize_t locomospi_storeclock(struct device_driver *drv, const char *buf, size_t count)
++{
++ locomospi_clock(simple_strtoul(buf, NULL, 10));
++ return count;
++}
++static DRIVER_ATTR(clock, S_IWUSR | S_IRUGO, locomospi_showclock, locomospi_storeclock);
++
++/* debug */
++ssize_t locomospi_showdelay(struct device_driver *drv, char *buf)
++{
++ return sprintf(buf, "%d\n", delay);
++}
++
++ssize_t locomospi_storedelay(struct device_driver *drv, const char *buf, size_t count)
++{
++ delay=simple_strtoul(buf,NULL,10);
++ return count;
++}
++static DRIVER_ATTR(delay, S_IWUSR | S_IRUGO, locomospi_showdelay, locomospi_storedelay);
++
++ssize_t locomospi_reset(struct device_driver *drv, const char *buf, size_t count)
++{
++ int choice = simple_strtoul(buf, NULL, 10);
++ char buff[100];
++ u16 r;
++ switch(choice){
++ case 0: locomospi_reg_release();
++ schedule_timeout(2*HZ);
++ locomospi_reg_open();
++ break;
++ case 1: {
++ char b1[] = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
++ char b2[] = "\xff\x40\x00\x00\x00\x00\x95\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
++ locomospi_setcs(1);
++ txrx(b1,b1,17);
++ locomospi_setcs(0);
++ txrx(b2,b2,18);
++
++ }
++ break;
++ case 2: locomospi_setcs(1);
++ txrx("\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",buff,18);
++ locomospi_setcs(0);
++ txrx("\xff\x40\x00\x00\x00\x00\x95\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",buff,17);
++ break;
++ case 3:
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r |= LOCOMO_SPI_LOOPBACK;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ txrx("X",buff,1);
++ txrx("abcdefghijklmnopqrstuvwxyz1234567890",buff,36);
++ txrx("Y",buff,1);
++ udelay(100);
++ txrx("Z",buff,1);
++ schedule_timeout(HZ);
++ txrx("abcdefghijklmnopqrstuvwxyz1234567890",buff,36);
++
++ r = ioread16(spidev->base+LOCOMO_SPIMD);
++ r &= ~LOCOMO_SPI_LOOPBACK;
++ iowrite16(r, spidev->base+LOCOMO_SPIMD);
++ break;
++ default: /* do nothing */;
++ }
++ return count;
++}
++static DRIVER_ATTR(reset, S_IWUSR, NULL, locomospi_reset);
++
++typedef struct locomo_reg_entry {
++ u32 addr;
++ char* name;
++} locomo_reg_entry_t;
++#define LCM (sizeof(locomo_regs)/sizeof(locomo_reg_entry_t))
++static locomo_reg_entry_t locomo_regs[] =
++{
++/* { addr, name, description } */
++ { 0x00, "VER" },
++ { 0x04, "ST" },
++ { 0x08, "C32K" },
++ { 0x0C, "ICR" },
++ { 0x10, "MCSX0" },
++ { 0x14, "MCSX1" },
++ { 0x18, "MCSX2" },
++ { 0x1C, "MCSX3" },
++ { 0x20, "ASD" },
++ { 0x28, "HSD" },
++ { 0x2C, "HSC" },
++ { 0x30, "TADC" },
++ { 0x38, "TC" },
++ { 0x3C, "CPSD" },
++ { 0x40, "KIB" },
++ { 0x44, "KSC" },
++ { 0x48, "KCMD" },
++ { 0x4C, "KIC" },
++ { 0x54, "ACC" },
++ { 0x60, "SPIMD" },
++ { 0x64, "SPICT" },
++ { 0x68, "SPIST" },
++ { 0x70, "SPIIS" },
++ { 0x74, "SPIWE" },
++ { 0x78, "SPIIE" },
++ { 0x7C, "SPIIR" },
++ { 0x80, "SPITD" },
++ { 0x84, "SPIRD" },
++ { 0x88, "SPITS" },
++ { 0x8C, "SPIRS" },
++ { 0x90, "GPD" },
++ { 0x94, "GPE" },
++ { 0x98, "GPL" },
++ { 0x9C, "GPO" },
++ { 0xa0, "GRIE" },
++ { 0xa4, "GFIE" },
++ { 0xa8, "GIS" },
++ { 0xac, "GWE" },
++ { 0xb0, "GIE" },
++ { 0xb4, "GIR" },
++ { 0xc8, "ALC" },
++ { 0xcc, "ALR" },
++ { 0xd0, "PAIF" },
++ { 0xd8, "LTC" },
++ { 0xdc, "LTINT" },
++ { 0xe0, "DAC" },
++ { 0xe8, "LPT0" },
++ { 0xec, "LPT1" },
++ { 0xfc, "TCR" },
++};
++
++static ssize_t lcm_show(struct device *dev, struct device_attribute *attr, char *buf)
++{
++ int base = spidev->base - LOCOMO_SPI;
++ char b[4000]="";
++ char c[30];
++ int i;
++ for(i=0; i<LCM; i++){
++ sprintf(c,"%s:\t\t 0x%x\n",locomo_regs[i].name, ioread16(base + locomo_regs[i].addr));
++ strcat(b,c);
++ }
++ return sprintf(buf,"%s",b);
++}
++
++static DRIVER_ATTR(regs, 0444, lcm_show, NULL);
++
++
++/* SPI functions *************************************************************/
++
++static void locomospi_do_transfer(struct work_struct *wrk)
++{
++ struct list_head *mptr, *tptr, *mptr2;
++ struct spi_transfer *entry;
++ struct spi_message *msg;
++
++ list_for_each_safe(mptr, mptr2, &spidev->message_list){
++ msg = list_entry(mptr, struct spi_message, queue);
++
++ msg->status = 0;
++ msg->actual_length = 0;
++ list_for_each(tptr, &msg->transfers){
++ entry = list_entry(tptr, struct spi_transfer, transfer_list);
++ if(entry->tx_buf && entry->rx_buf){ //duplex
++ txrx((char*) entry->tx_buf, (char*) entry->rx_buf, entry->len);
++ msg->actual_length += entry->len;
++ } else if(entry->tx_buf && !entry->rx_buf){ //write
++ tx((char*) entry->tx_buf, entry->len);
++ msg->actual_length += entry->len;
++ } else if(!entry->tx_buf && entry->rx_buf){ //read
++ rx((char*) entry->rx_buf, entry->len);
++ msg->actual_length += entry->len;
++ } else if(!entry->tx_buf && !entry->rx_buf){ //error
++ dev_err(&spidev->sdev->dev, "do_transfer: no buffers allocated\n");
++ msg->status = -EFAULT;
++ }
++ }
++ spin_lock(&spidev->message_lock);
++ list_del(mptr);
++ spin_unlock(&spidev->message_lock);
++ msg->complete(msg->context);
++ }
++}
++
++static int locomospi_setup(struct spi_device *spi)
++{
++ if((spi->mode & SPI_CS_HIGH) != (spidev->spimode & SPI_CS_HIGH))
++ locomospi_setcs(spi->mode & SPI_CS_HIGH ? 1 : 0 );
++ if(spidev->clock != spi->max_speed_hz){
++ locomospi_clock(spi->max_speed_hz);
++ }
++ spidev->spimode = spi->mode;
++
++ return 0;
++}
++
++static int locomospi_transfer(struct spi_device *spi, struct spi_message *msg)
++{
++
++ spin_lock(&spidev->message_lock);
++ list_add_tail(&msg->queue, &spidev->message_list);
++ spin_unlock(&spidev->message_lock);
++ schedule_work(&transfer_wq);
++ return 0;
++}
++
++static struct locomo_driver locomo_spi_driver = {
++ .drv = {
++ .name = "locomo-spi",
++ },
++ .devid = LOCOMO_DEVID_SPI,
++ .probe = locomospi_probe,
++ .remove = locomospi_remove,
++#ifdef CONFIG_PM
++ .suspend = locomospi_suspend,
++ .resume = locomospi_resume,
++#endif
++};
++
++static struct spi_board_info board = {
++ .modalias = "mmc_spi",
++ .platform_data = (void*) &colliemmc,
++ .controller_data= NULL,
++ .irq = 0,
++ .max_speed_hz = 25000000,
++ .bus_num = 0,
++ .chip_select = 0,
++ .mode = 0,
++};
++
++#ifdef CONFIG_PM
++static int locomospi_suspend(struct locomo_dev *dev, pm_message_t state)
++{
++ disable_irq(IRQ_LOCOMO_CARDDETECT);
++ return 0;
++}
++
++static int locomospi_resume(struct locomo_dev *dev)
++{
++ enable_irq(IRQ_LOCOMO_CARDDETECT);
++ return 0;
++}
++#endif
++
++static int locomospi_probe(struct locomo_dev *dev)
++{
++ int result=0;
++ printk(KERN_DEBUG "Collie MMC over SPI Driver\n");
++ spidev=kmalloc(sizeof(struct locomospi_dev),GFP_KERNEL);
++ if(!spidev){
++ return -ENOMEM;
++ }
++ spidev->ldev = dev;
++ spidev->card_power = 1;
++ spidev->spimode = 0;
++
++ if(!request_mem_region((unsigned long) dev->mapbase, dev->length, LOCOMO_DRIVER_NAME(dev))) {
++ dev_err(&dev->dev, " Can't aquire access to io memory\n");
++ return -EBUSY;
++ }
++ spidev->base=(unsigned long) dev->mapbase;
++ locomospi_reg_open();
++
++ locomo_gpio_set_dir(dev->dev.parent, LOCOMO_GPIO_CARD_POWER, 0);
++ locomo_gpio_set_dir(dev->dev.parent, LOCOMO_GPIO_CARD_DETECT, 1);
++ locomo_gpio_set_dir(dev->dev.parent, LOCOMO_GPIO_WRITE_PROT, 1);
++
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_cardpower);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_carddetect);
++ if(result){
++ dev_err(&dev->dev,"error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_cardwriteprotect);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spimd);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spict);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spist);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spitd);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spird);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spits);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spirs);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_clock);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_delay);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_reset);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_regs);
++ if(result){
++ dev_err(&dev->dev, "error creating driver attribute\n");
++ goto region;
++ }
++ INIT_WORK(&transfer_wq, locomospi_do_transfer);
++ INIT_LIST_HEAD(&spidev->message_list);
++ spin_lock_init(&spidev->message_lock);
++ init_waitqueue_head(&spidev->waitqueue);
++ spidev->master=spi_alloc_master(&dev->dev,0);
++ if(!spidev->master){
++ result=-ENOMEM;
++ goto region;
++ }
++ spidev->master->bus_num = 0;
++ spidev->master->num_chipselect = 1;
++ spidev->master->setup = locomospi_setup;
++ spidev->master->transfer = locomospi_transfer;
++ spidev->sdev = spi_new_device(spidev->master, &board);
++ if(!spidev->sdev){
++ dev_err(&dev->dev, "failed to register spi device\n");
++ result = -EINVAL;
++ goto master;
++ }
++/* result=request_irq(IRQ_LOCOMO_SPI_RFR, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
++ if(result) {
++ dev_err(&dev->dev, "Could not get IRQ: RFR\n");
++ goto regdev;
++ }
++ //disable_irq(IRQ_LOCOMO_SPI_RFR);
++*//* result=request_irq(IRQ_LOCOMO_SPI_RFW, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
++ if(result) {
++ dev_err(&dev->dev, "Could not get IRQ: RFW\n");
++ goto irq1;
++ }
++ //disable_irq(IRQ_LOCOMO_SPI_RFW);
++*//* result=request_irq(IRQ_LOCOMO_SPI_REND, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
++ if(result) {
++ dev_err(&dev->dev, "Could not get IRQ: REND\n");
++ goto irq2;
++ }
++*//* result=request_irq(IRQ_LOCOMO_SPI_TEND, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
++ if(result) {
++ dev_err(&dev->dev, "Could not get IRQ: TEND\n");
++ goto irq3;
++ }
++ //disable_irq(IRQ_LOCOMO_SPI_TEND);
++*/ spidev->workqueue = create_singlethread_workqueue("locomo-spi");
++ if(!spidev->workqueue){
++ dev_err(&dev->dev, "failed to create workqueue\n");
++ goto irq4;
++ }
++ result=spi_register_master(spidev->master);
++ if(result){
++ dev_err(&dev->dev, "failed to register spimaster\n");
++ goto wq;
++ }
++ return 0;
++wq:
++ destroy_workqueue(spidev->workqueue);
++irq4:
++// free_irq(IRQ_LOCOMO_SPI_TEND, (void*) spidev);
++irq3:
++// free_irq(IRQ_LOCOMO_SPI_REND, (void*) spidev);
++irq2:
++// free_irq(IRQ_LOCOMO_SPI_RFW, (void*) spidev);
++irq1:
++// free_irq(IRQ_LOCOMO_SPI_RFR, (void*) spidev);
++regdev:
++ spi_unregister_device(spidev->sdev);
++master:
++ spi_master_put(spidev->master);
++region:
++ release_mem_region((unsigned long) dev->mapbase, dev->length);
++ kfree(spidev);
++ return result;
++
++}
++
++static int locomospi_remove(struct locomo_dev *dev)
++{
++ spi_unregister_device(spidev->sdev);
++ spi_unregister_master(spidev->master);
++ destroy_workqueue(spidev->workqueue);
++ locomospi_reg_release();
++// free_irq(IRQ_LOCOMO_SPI_TEND, (void*) spidev);
++// free_irq(IRQ_LOCOMO_SPI_REND, (void*) spidev);
++// free_irq(IRQ_LOCOMO_SPI_RFW, (void*) spidev);
++// free_irq(IRQ_LOCOMO_SPI_RFR, (void*) spidev);
++ spi_master_put(spidev->master);
++ release_mem_region((unsigned long) dev->mapbase, dev->length);
++ kfree(spidev);
++ return 0;
++}
++
++
++
++static int __init locomospi_init(void)
++{
++ int ret = locomo_driver_register(&locomo_spi_driver);
++ if (ret)
++ return ret;
++
++
++ return 0;
++}
++
++static void __exit locomospi_exit(void)
++{
++ locomo_driver_unregister(&locomo_spi_driver);
++}
++
++module_init(locomospi_init);
++module_exit(locomospi_exit);
++
++MODULE_AUTHOR("Thomas Kunze thommy@tabao.de");
++MODULE_DESCRIPTION("Collie mmc driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/spi/locomo_spi.h b/drivers/spi/locomo_spi.h
+new file mode 100644
+index 0000000..7e1c0ce
+--- /dev/null
++++ b/drivers/spi/locomo_spi.h
+@@ -0,0 +1,75 @@
++#include <asm/hardware/locomo.h>
++#ifndef __LOCOMO_SPI_H__
++#define __LOCOMO_SPI_H__
++
++/* locomo-spi status register LOCOMO_SPIST */
++#define LOCOMO_SPI_TEND (1 << 3) /* Transfer end bit */
++#define LOCOMO_SPI_REND (1 << 2) /* Receive end bit */
++#define LOCOMO_SPI_RFW (1 << 1) /* write buffer bit */
++#define LOCOMO_SPI_RFR (1) /* read buffer bit */
++
++/* locomo-spi mode register LOCOMO_SPIMD */
++#define LOCOMO_SPI_LOOPBACK (1 << 15) /* loopback tx to rx */
++#define LOCOMO_SPI_MSB1ST (1 << 14) /* send MSB first */
++#define LOCOMO_SPI_DOSTAT (1 << 13) /* transmit line is idle high */
++#define LOCOMO_SPI_TCPOL (1 << 11) /* transmit CPOL (maybe affects CPHA too) */
++#define LOCOMO_SPI_RCPOL (1 << 10) /* receive CPOL (maybe affects CPHA too) */
++#define LOCOMO_SPI_TDINV (1 << 9) /* invert transmit line */
++#define LOCOMO_SPI_RDINV (1 << 8) /* invert receive line */
++#define LOCOMO_SPI_XON (1 << 7) /* enable spi controller clock */
++#define LOCOMO_SPI_XEN (1 << 6) /* clock bit write enable xon must be off, wait 300 us before xon->1 */
++#define LOCOMO_SPI_XSEL 0x0018 /* clock select */
++#define CLOCK_18MHZ 0 /* 18,432 MHz clock */
++#define CLOCK_22MHZ 1 /* 22,5792 MHz clock */
++#define CLOCK_25MHZ 2 /* 24,576 MHz clock */
++#define LOCOMO_SPI_CLKSEL 0x7
++#define DIV_1 0 /* don't divide clock */
++#define DIV_2 1 /* divide clock by two */
++#define DIV_4 2 /* divide clock by four */
++#define DIV_8 3 /* divide clock by eight*/
++#define DIV_64 4 /* divide clock by 64 */
++
++/* locomo-spi control register LOCOMO_SPICT */
++#define LOCOMO_SPI_CRC16_7_B (1 << 15) /* 0: crc16 1: crc7 */
++#define LOCOMO_SPI_CRCRX_TX_B (1 << 14)
++#define LOCOMO_SPI_CRCRESET_B (1 << 13)
++#define LOCOMO_SPI_CEN (1 << 7) /* ?? enable */
++#define LOCOMO_SPI_CS (1 << 6) /* chip select */
++#define LOCOMO_SPI_UNIT16 (1 << 5) /* 0: 8 bit units, 1: 16 bit unit */
++#define LOCOMO_SPI_ALIGNEN (1 << 2) /* align transfer enable */
++#define LOCOMO_SPI_RXWEN (1 << 1) /* continous receive */
++#define LOCOMO_SPI_RXUEN (1 << 0) /* aligned receive */
++
++#define IRQ_LOCOMO_CARDDETECT IRQ_LOCOMO_GPIO13
++
++
++struct locomospi_dev {
++ struct locomo_dev *ldev;
++ struct spi_master *master;
++ struct spi_device *sdev;
++ int card_power;
++ int clock_base;
++ int clock_div;
++ int clock;
++ unsigned long base;
++ u8 spimode;
++ wait_queue_head_t waitqueue;
++ struct workqueue_struct *workqueue;
++ struct list_head message_list;
++ spinlock_t message_lock;
++};
++
++
++static irqreturn_t locomospi_cardisr(int, void*);
++static int locomospi_probe(struct locomo_dev*);
++static int locomospi_remove(struct locomo_dev*);
++static int locomospi_carddetect(void);
++static void locomospi_reg_open(void);
++static void locomospi_reg_release(void);
++static int tx(const char*, int);
++static int rx(char *, int);
++static void locomospi_power(int on);
++static int locomospi_suspend(struct locomo_dev *dev, pm_message_t state);
++static int locomospi_resume(struct locomo_dev *dev);
++static void locomospi_setcs(int high);
++#endif
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch b/packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch
new file mode 100644
index 0000000000..4ce284d52c
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch
@@ -0,0 +1,25 @@
+From 41eabd493ccc241ccd52b77c576211759976972d Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:33:29 +0200
+Subject: [PATCH 03/23] enable cpufreq for collie
+
+---
+ arch/arm/Kconfig | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 9722f8b..609f0fb 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -1048,7 +1048,7 @@ config CPU_FREQ_SA1100
+
+ config CPU_FREQ_SA1110
+ bool
+- depends on CPU_FREQ && (SA1100_ASSABET || SA1100_CERF || SA1100_PT_SYSTEM3)
++ depends on CPU_FREQ && (SA1100_ASSABET || SA1100_CERF || SA1100_PT_SYSTEM3 || SA1100_COLLIE)
+ default y
+
+ config CPU_FREQ_INTEGRATOR
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch b/packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch
new file mode 100644
index 0000000000..6dbb856189
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch
@@ -0,0 +1,25 @@
+From 4f4df9e1c0c82cfd9133f52089025a8ff363977c Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:39:02 +0200
+Subject: [PATCH 04/23] fix dma for SA1100
+
+---
+ arch/arm/mach-sa1100/dma.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/dma.c b/arch/arm/mach-sa1100/dma.c
+index f990a3e..1489d64 100644
+--- a/arch/arm/mach-sa1100/dma.c
++++ b/arch/arm/mach-sa1100/dma.c
+@@ -39,7 +39,7 @@ typedef struct {
+
+ static sa1100_dma_t dma_chan[SA1100_DMA_CHANNELS];
+
+-static spinlock_t dma_list_lock;
++static DEFINE_SPINLOCK(dma_list_lock);
+
+
+ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch b/packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch
new file mode 100644
index 0000000000..1200038de4
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch
@@ -0,0 +1,24 @@
+From 71f6a1b91e92c89f3fcf0330c55ad41fd3315c33 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:40:32 +0200
+Subject: [PATCH 05/23] fix collie keyboard bug
+
+---
+ drivers/input/keyboard/locomokbd.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/input/keyboard/locomokbd.c b/drivers/input/keyboard/locomokbd.c
+index 9caed30..79e19bf 100644
+--- a/drivers/input/keyboard/locomokbd.c
++++ b/drivers/input/keyboard/locomokbd.c
+@@ -265,6 +265,7 @@ static int __devinit locomokbd_probe(struct locomo_dev *dev)
+ for (i = 0; i < LOCOMOKBD_NUMKEYS; i++)
+ set_bit(locomokbd->keycode[i], input_dev->keybit);
+ clear_bit(0, input_dev->keybit);
++ locomo_writel(0, locomokbd->base + LOCOMO_KSC);
+
+ /* attempt to get the interrupt */
+ err = request_irq(dev->irq[0], locomokbd_interrupt, 0, "locomokbd", locomokbd);
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch b/packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch
new file mode 100644
index 0000000000..0b987b6851
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch
@@ -0,0 +1,722 @@
+From 6b663bce31fb1e1a78dbca22190e98251628fd4f Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:48:10 +0200
+Subject: [PATCH 06/23] add collie flash hack
+
+---
+ arch/arm/mach-sa1100/collie.c | 2 +-
+ drivers/mtd/chips/Kconfig | 8 +
+ drivers/mtd/chips/Makefile | 1 +
+ drivers/mtd/chips/sharp.c | 645 +++++++++++++++++++++++++++++++++++++++++
+ drivers/mtd/maps/Kconfig | 2 +-
+ 5 files changed, 656 insertions(+), 2 deletions(-)
+ create mode 100644 drivers/mtd/chips/sharp.c
+
+diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
+index 8cf267f..ec673b8 100644
+--- a/arch/arm/mach-sa1100/collie.c
++++ b/arch/arm/mach-sa1100/collie.c
+@@ -222,7 +222,7 @@ static void collie_flash_exit(void)
+ gpio_free(COLLIE_GPIO_VPEN);
+ }
+ static struct flash_platform_data collie_flash_data = {
+- .map_name = "cfi_probe",
++ .map_name = "sharp",
+ .init = collie_flash_init,
+ .set_vpp = collie_set_vpp,
+ .exit = collie_flash_exit,
+diff --git a/drivers/mtd/chips/Kconfig b/drivers/mtd/chips/Kconfig
+index 9408099..2dcbd03 100644
+--- a/drivers/mtd/chips/Kconfig
++++ b/drivers/mtd/chips/Kconfig
+@@ -241,5 +241,13 @@ config MTD_XIP
+ used for XIP purposes. If you're not sure what this is all about
+ then say N.
+
++config MTD_SHARP
++ tristate "pre-CFI Sharp chip support"
++ depends on MTD
++ help
++ This option enables support for flash chips using Sharp-compatible
++ commands, including some which are not CFI-compatible and hence
++ cannot be used with the CONFIG_MTD_CFI_INTELxxx options.
++
+ endmenu
+
+diff --git a/drivers/mtd/chips/Makefile b/drivers/mtd/chips/Makefile
+index 3658241..7283c57 100644
+--- a/drivers/mtd/chips/Makefile
++++ b/drivers/mtd/chips/Makefile
+@@ -12,4 +12,5 @@ obj-$(CONFIG_MTD_GEN_PROBE) += gen_probe.o
+ obj-$(CONFIG_MTD_JEDECPROBE) += jedec_probe.o
+ obj-$(CONFIG_MTD_RAM) += map_ram.o
+ obj-$(CONFIG_MTD_ROM) += map_rom.o
++obj-$(CONFIG_MTD_SHARP) += sharp.o
+ obj-$(CONFIG_MTD_ABSENT) += map_absent.o
+diff --git a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c
+new file mode 100644
+index 0000000..046b964
+--- /dev/null
++++ b/drivers/mtd/chips/sharp.c
+@@ -0,0 +1,645 @@
++/*
++ * MTD chip driver for pre-CFI Sharp flash chips
++ *
++ * Copyright 2000,2001 David A. Schleef <ds@schleef.org>
++ * 2000,2001 Lineo, Inc.
++ *
++ * $Id: sharp.c,v 1.17 2005/11/29 14:28:28 gleixner Exp $
++ *
++ * Devices supported:
++ * LH28F016SCT Symmetrical block flash memory, 2Mx8
++ * LH28F008SCT Symmetrical block flash memory, 1Mx8
++ *
++ * Documentation:
++ * http://www.sharpmeg.com/datasheets/memic/flashcmp/
++ * http://www.sharpmeg.com/datasheets/memic/flashcmp/01symf/16m/016sctl9.pdf
++ * 016sctl9.pdf
++ *
++ * Limitations:
++ * This driver only supports 4x1 arrangement of chips.
++ * Not tested on anything but PowerPC.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/cfi.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++
++#define CMD_RESET 0xffffffff
++#define CMD_READ_ID 0x90909090
++#define CMD_READ_STATUS 0x70707070
++#define CMD_CLEAR_STATUS 0x50505050
++#define CMD_BLOCK_ERASE_1 0x20202020
++#define CMD_BLOCK_ERASE_2 0xd0d0d0d0
++#define CMD_BYTE_WRITE 0x40404040
++#define CMD_SUSPEND 0xb0b0b0b0
++#define CMD_RESUME 0xd0d0d0d0
++#define CMD_SET_BLOCK_LOCK_1 0x60606060
++#define CMD_SET_BLOCK_LOCK_2 0x01010101
++#define CMD_SET_MASTER_LOCK_1 0x60606060
++#define CMD_SET_MASTER_LOCK_2 0xf1f1f1f1
++#define CMD_CLEAR_BLOCK_LOCKS_1 0x60606060
++#define CMD_CLEAR_BLOCK_LOCKS_2 0xd0d0d0d0
++
++#define SR_READY 0x80808080 // 1 = ready
++#define SR_ERASE_SUSPEND 0x40404040 // 1 = block erase suspended
++#define SR_ERROR_ERASE 0x20202020 // 1 = error in block erase or clear lock bits
++#define SR_ERROR_WRITE 0x10101010 // 1 = error in byte write or set lock bit
++#define SR_VPP 0x08080808 // 1 = Vpp is low
++#define SR_WRITE_SUSPEND 0x04040404 // 1 = byte write suspended
++#define SR_PROTECT 0x02020202 // 1 = lock bit set
++#define SR_RESERVED 0x01010101
++
++#define SR_ERRORS (SR_ERROR_ERASE|SR_ERROR_WRITE|SR_VPP|SR_PROTECT)
++
++#define BLOCK_MASK 0xfffe0000
++
++/* Configuration options */
++
++#define AUTOUNLOCK /* automatically unlocks blocks before erasing */
++
++static struct mtd_info *sharp_probe(struct map_info *);
++
++static int sharp_probe_map(struct map_info *map, struct mtd_info *mtd);
++
++static int sharp_read(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, u_char *buf);
++static int sharp_write(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, const u_char *buf);
++static int sharp_erase(struct mtd_info *mtd, struct erase_info *instr);
++static void sharp_sync(struct mtd_info *mtd);
++static int sharp_suspend(struct mtd_info *mtd);
++static void sharp_resume(struct mtd_info *mtd);
++static void sharp_destroy(struct mtd_info *mtd);
++
++static int sharp_write_oneword(struct map_info *map, struct flchip *chip,
++ unsigned long adr, __u32 datum);
++static int sharp_erase_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr);
++#ifdef AUTOUNLOCK
++static inline void sharp_unlock_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr);
++#endif
++
++
++struct sharp_info{
++ struct flchip *chip;
++ int bogus;
++ int chipshift;
++ int numchips;
++ struct flchip chips[1];
++};
++
++static void sharp_destroy(struct mtd_info *mtd);
++
++static struct mtd_chip_driver sharp_chipdrv = {
++ .probe = sharp_probe,
++ .destroy = sharp_destroy,
++ .name = "sharp",
++ .module = THIS_MODULE
++};
++
++static void sharp_udelay(unsigned long i) {
++ if (in_interrupt()) {
++ udelay(i);
++ } else {
++ schedule();
++ }
++}
++
++static struct mtd_info *sharp_probe(struct map_info *map)
++{
++ struct mtd_info *mtd = NULL;
++ struct sharp_info *sharp = NULL;
++ int width;
++
++ mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
++ if(!mtd)
++ return NULL;
++
++ sharp = kzalloc(sizeof(*sharp), GFP_KERNEL);
++ if(!sharp) {
++ kfree(mtd);
++ return NULL;
++ }
++
++ width = sharp_probe_map(map,mtd);
++ if(!width){
++ kfree(mtd);
++ kfree(sharp);
++ return NULL;
++ }
++
++ mtd->priv = map;
++ mtd->type = MTD_NORFLASH;
++ mtd->erase = sharp_erase;
++ mtd->read = sharp_read;
++ mtd->write = sharp_write;
++ mtd->sync = sharp_sync;
++ mtd->suspend = sharp_suspend;
++ mtd->resume = sharp_resume;
++ mtd->flags = MTD_CAP_NORFLASH;
++ mtd->writesize = 1;
++ mtd->name = map->name;
++
++ sharp->chipshift = 24;
++ sharp->numchips = 1;
++ sharp->chips[0].start = 0;
++ sharp->chips[0].state = FL_READY;
++ sharp->chips[0].mutex = &sharp->chips[0]._spinlock;
++ sharp->chips[0].word_write_time = 0;
++ init_waitqueue_head(&sharp->chips[0].wq);
++ spin_lock_init(&sharp->chips[0]._spinlock);
++
++ map->fldrv = &sharp_chipdrv;
++ map->fldrv_priv = sharp;
++
++ __module_get(THIS_MODULE);
++ return mtd;
++}
++
++static inline void sharp_send_cmd(struct map_info *map, unsigned long cmd, unsigned long adr)
++{
++ map_word map_cmd;
++ map_cmd.x[0] = cmd;
++ map_write(map, map_cmd, adr);
++}
++
++static int sharp_probe_map(struct map_info *map,struct mtd_info *mtd)
++{
++ map_word tmp, read0, read4;
++ unsigned long base = 0;
++ int width = 4;
++
++ tmp = map_read(map, base+0);
++
++ sharp_send_cmd(map, CMD_READ_ID, base+0);
++
++ read0 = map_read(map, base+0);
++ read4 = map_read(map, base+4);
++ if (read0.x[0] == 0x00b000b0) {
++ printk("Sharp chip, %lx, %lx, width = %d\n", read0.x[0], read4.x[0], width);
++ /* Prints b000b0, b000b0, width = 4 on collie */
++ switch(read4.x[0]){
++ case 0xaaaaaaaa:
++ case 0xa0a0a0a0:
++ /* aa - LH28F016SCT-L95 2Mx8, 32 64k blocks*/
++ /* a0 - LH28F016SCT-Z4 2Mx8, 32 64k blocks*/
++ mtd->erasesize = 0x10000 * width;
++ mtd->size = 0x200000 * width;
++ return width;
++ case 0xa6a6a6a6:
++ /* a6 - LH28F008SCT-L12 1Mx8, 16 64k blocks*/
++ /* a6 - LH28F008SCR-L85 1Mx8, 16 64k blocks*/
++ mtd->erasesize = 0x10000 * width;
++ mtd->size = 0x100000 * width;
++ return width;
++ case 0x00b000b0:
++ /* a6 - LH28F640BFHE 8 64k * 2 chip blocks*/
++ mtd->erasesize = 0x10000 * width / 2;
++ mtd->size = 0x800000 * width / 2;
++ return width;
++ default:
++ printk("Sort-of looks like sharp flash, 0x%08lx 0x%08lx\n",
++ read0.x[0], read4.x[0]);
++ }
++ } else if ((map_read(map, base+0).x[0] == CMD_READ_ID)){
++ /* RAM, probably */
++ printk("Looks like RAM\n");
++ map_write(map, tmp, base+0);
++ }else{
++ printk("Doesn't look like sharp flash, 0x%08lx 0x%08lx\n",
++ read0.x[0], read4.x[0]);
++ }
++
++ return 0;
++}
++
++/* This function returns with the chip->mutex lock held. */
++static int sharp_wait(struct map_info *map, struct flchip *chip)
++{
++ map_word status;
++ unsigned long timeo = jiffies + HZ;
++ DECLARE_WAITQUEUE(wait, current);
++ int adr = 0;
++
++retry:
++ spin_lock_bh(chip->mutex);
++
++ switch (chip->state) {
++ case FL_READY:
++ sharp_send_cmd(map, CMD_READ_STATUS, adr);
++ chip->state = FL_STATUS;
++ case FL_STATUS:
++ status = map_read(map, adr);
++ if ((status.x[0] & SR_READY) == SR_READY)
++ break;
++ spin_unlock_bh(chip->mutex);
++ if (time_after(jiffies, timeo)) {
++ printk("Waiting for chip to be ready timed out in erase\n");
++ return -EIO;
++ }
++ sharp_udelay(1);
++ goto retry;
++ default:
++ set_current_state(TASK_INTERRUPTIBLE);
++ add_wait_queue(&chip->wq, &wait);
++
++ spin_unlock_bh(chip->mutex);
++
++ sharp_udelay(1);
++
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&chip->wq, &wait);
++
++ if(signal_pending(current))
++ return -EINTR;
++
++ timeo = jiffies + HZ;
++
++ goto retry;
++ }
++
++ sharp_send_cmd(map, CMD_RESET, adr);
++
++ chip->state = FL_READY;
++
++ return 0;
++}
++
++static void sharp_release(struct flchip *chip)
++{
++ wake_up(&chip->wq);
++ spin_unlock_bh(chip->mutex);
++}
++
++static int sharp_read(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, u_char *buf)
++{
++ struct map_info *map = mtd->priv;
++ struct sharp_info *sharp = map->fldrv_priv;
++ int chipnum;
++ int ret = 0;
++ int ofs = 0;
++
++ chipnum = (from >> sharp->chipshift);
++ ofs = from & ((1 << sharp->chipshift)-1);
++
++ *retlen = 0;
++
++ while(len){
++ unsigned long thislen;
++
++ if(chipnum>=sharp->numchips)
++ break;
++
++ thislen = len;
++ if(ofs+thislen >= (1<<sharp->chipshift))
++ thislen = (1<<sharp->chipshift) - ofs;
++
++ ret = sharp_wait(map,&sharp->chips[chipnum]);
++ if(ret<0)
++ break;
++
++ map_copy_from(map,buf,ofs,thislen);
++
++ sharp_release(&sharp->chips[chipnum]);
++
++ *retlen += thislen;
++ len -= thislen;
++ buf += thislen;
++
++ ofs = 0;
++ chipnum++;
++ }
++ return ret;
++}
++
++static int sharp_write(struct mtd_info *mtd, loff_t to, size_t len,
++ size_t *retlen, const u_char *buf)
++{
++ struct map_info *map = mtd->priv;
++ struct sharp_info *sharp = map->fldrv_priv;
++ int ret = 0;
++ int i,j;
++ int chipnum;
++ unsigned long ofs;
++ union { u32 l; unsigned char uc[4]; } tbuf;
++
++ *retlen = 0;
++
++ while(len){
++ tbuf.l = 0xffffffff;
++ chipnum = to >> sharp->chipshift;
++ ofs = to & ((1<<sharp->chipshift)-1);
++
++ j=0;
++ for(i=ofs&3;i<4 && len;i++){
++ tbuf.uc[i] = *buf;
++ buf++;
++ to++;
++ len--;
++ j++;
++ }
++ sharp_write_oneword(map, &sharp->chips[chipnum], ofs&~3, tbuf.l);
++ if(ret<0)
++ return ret;
++ (*retlen)+=j;
++ }
++
++ return 0;
++}
++
++static int sharp_write_oneword(struct map_info *map, struct flchip *chip,
++ unsigned long adr, __u32 datum)
++{
++ int ret;
++ int try;
++ int i;
++ map_word data, status;
++
++ status.x[0] = 0;
++ ret = sharp_wait(map,chip);
++ if (ret < 0)
++ return ret;
++
++ for (try=0; try<10; try++) {
++ long timeo;
++
++ sharp_send_cmd(map, CMD_BYTE_WRITE, adr);
++ /* cpu_to_le32 -> hack to fix the writel be->le conversion */
++ data.x[0] = cpu_to_le32(datum);
++ map_write(map, data, adr);
++
++ chip->state = FL_WRITING;
++ timeo = jiffies + (HZ/2);
++
++ sharp_send_cmd(map, CMD_READ_STATUS, adr);
++ for(i=0;i<100;i++){
++ status = map_read(map, adr);
++ if((status.x[0] & SR_READY) == SR_READY)
++ break;
++ }
++#ifdef AUTOUNLOCK
++ if (status.x[0] & SR_PROTECT) { /* lock block */
++ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
++ sharp_unlock_oneblock(map,chip,adr);
++ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
++ sharp_send_cmd(map, CMD_RESET, adr);
++ continue;
++ }
++#endif
++ if(i==100){
++ printk("sharp: timed out writing\n");
++ }
++
++ if (!(status.x[0] & SR_ERRORS))
++ break;
++
++ printk("sharp: error writing byte at addr=%08lx status=%08lx\n", adr, status.x[0]);
++
++ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
++ }
++ sharp_send_cmd(map, CMD_RESET, adr);
++ chip->state = FL_READY;
++
++ sharp_release(chip);
++
++ return 0;
++}
++
++static int sharp_erase(struct mtd_info *mtd, struct erase_info *instr)
++{
++ struct map_info *map = mtd->priv;
++ struct sharp_info *sharp = map->fldrv_priv;
++ unsigned long adr,len;
++ int chipnum, ret=0;
++
++ if(instr->addr & (mtd->erasesize - 1))
++ return -EINVAL;
++ if(instr->len & (mtd->erasesize - 1))
++ return -EINVAL;
++ if(instr->len + instr->addr > mtd->size)
++ return -EINVAL;
++
++ chipnum = instr->addr >> sharp->chipshift;
++ adr = instr->addr & ((1<<sharp->chipshift)-1);
++ len = instr->len;
++
++ while(len){
++ ret = sharp_erase_oneblock(map, &sharp->chips[chipnum], adr);
++ if(ret)return ret;
++
++ if (adr >= 0xfe0000) {
++ adr += mtd->erasesize / 8;
++ len -= mtd->erasesize / 8;
++ } else {
++ adr += mtd->erasesize;
++ len -= mtd->erasesize;
++ }
++ if(adr >> sharp->chipshift){
++ adr = 0;
++ chipnum++;
++ if(chipnum>=sharp->numchips)
++ break;
++ }
++ }
++
++ instr->state = MTD_ERASE_DONE;
++ mtd_erase_callback(instr);
++
++ return 0;
++}
++
++static inline int sharp_do_wait_for_ready(struct map_info *map, struct flchip *chip,
++ unsigned long adr)
++{
++ int ret;
++ unsigned long timeo;
++ map_word status;
++ DECLARE_WAITQUEUE(wait, current);
++
++ sharp_send_cmd(map, CMD_READ_STATUS, adr);
++ status = map_read(map, adr);
++
++ timeo = jiffies + HZ * 10;
++
++ while (time_before(jiffies, timeo)) {
++ sharp_send_cmd(map, CMD_READ_STATUS, adr);
++ status = map_read(map, adr);
++ if ((status.x[0] & SR_READY) == SR_READY) {
++ ret = 0;
++ goto out;
++ }
++ set_current_state(TASK_INTERRUPTIBLE);
++ add_wait_queue(&chip->wq, &wait);
++
++ spin_unlock_bh(chip->mutex);
++
++ schedule_timeout(1);
++ schedule();
++
++ spin_lock_bh(chip->mutex);
++
++ remove_wait_queue(&chip->wq, &wait);
++ set_current_state(TASK_RUNNING);
++ }
++ ret = -ETIME;
++out:
++ return ret;
++}
++
++static int sharp_erase_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr)
++{
++ int ret;
++ map_word status;
++
++ ret = sharp_wait(map,chip);
++ if (ret < 0)
++ return ret;
++
++#ifdef AUTOUNLOCK
++ /* This seems like a good place to do an unlock */
++ sharp_unlock_oneblock(map,chip,adr);
++#endif
++
++ sharp_send_cmd(map, CMD_BLOCK_ERASE_1, adr);
++ sharp_send_cmd(map, CMD_BLOCK_ERASE_2, adr);
++
++ chip->state = FL_ERASING;
++
++ ret = sharp_do_wait_for_ready(map,chip,adr);
++ if(ret<0) {
++ spin_unlock_bh(chip->mutex);
++ return ret;
++ }
++
++ sharp_send_cmd(map, CMD_READ_STATUS, adr);
++ status = map_read(map, adr);
++
++ if (!(status.x[0] & SR_ERRORS)) {
++ sharp_send_cmd(map, CMD_RESET, adr);
++ chip->state = FL_READY;
++ spin_unlock_bh(chip->mutex);
++ return 0;
++ }
++
++ printk("sharp: error erasing block at addr=%08lx status=%08lx\n", adr, status.x[0]);
++ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
++
++ sharp_release(chip);
++
++ return -EIO;
++}
++
++#ifdef AUTOUNLOCK
++static inline void sharp_unlock_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr)
++{
++ map_word status;
++
++ sharp_send_cmd(map, CMD_CLEAR_BLOCK_LOCKS_1, adr & BLOCK_MASK);
++ sharp_send_cmd(map, CMD_CLEAR_BLOCK_LOCKS_2, adr & BLOCK_MASK);
++
++ sharp_do_wait_for_ready(map,chip,adr);
++
++ status = map_read(map, adr);
++
++ if (!(status.x[0] & SR_ERRORS)) {
++ sharp_send_cmd(map, CMD_RESET, adr);
++ chip->state = FL_READY;
++ return;
++ }
++
++ printk("sharp: error unlocking block at addr=%08lx status=%08lx\n", adr, status.x[0]);
++ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
++}
++#endif
++
++static void sharp_sync(struct mtd_info *mtd)
++{
++}
++
++static int sharp_suspend(struct mtd_info *mtd)
++{
++ struct map_info *map = mtd->priv;
++ struct sharp_info *sharp = map->fldrv_priv;
++ int i;
++ struct flchip *chip;
++ int ret = 0;
++
++ for (i = 0; !ret && i < sharp->numchips; i++) {
++ chip = &sharp->chips[i];
++ ret = sharp_wait(map,chip);
++
++ if (ret) {
++ ret = -EAGAIN;
++ } else {
++ chip->state = FL_PM_SUSPENDED;
++ spin_unlock_bh(chip->mutex);
++ }
++ }
++ return ret;
++}
++
++static void sharp_resume(struct mtd_info *mtd)
++{
++ struct map_info *map = mtd->priv;
++ struct sharp_info *sharp = map->fldrv_priv;
++ int i;
++ struct flchip *chip;
++
++ for (i = 0; i < sharp->numchips; i++) {
++ chip = &sharp->chips[i];
++
++ spin_lock_bh(chip->mutex);
++
++ if (chip->state == FL_PM_SUSPENDED) {
++ /* We need to force it back to a known state */
++ sharp_send_cmd(map, CMD_RESET, chip->start);
++ chip->state = FL_READY;
++ wake_up(&chip->wq);
++ }
++
++ spin_unlock_bh(chip->mutex);
++ }
++}
++
++static void sharp_destroy(struct mtd_info *mtd)
++{
++ struct map_info *map = mtd->priv;
++ struct sharp_info *sharp = map->fldrv_priv;
++
++ kfree(sharp);
++}
++
++static int __init sharp_probe_init(void)
++{
++ printk("MTD Sharp chip driver <ds@lineo.com>\n");
++
++ register_mtd_chip_driver(&sharp_chipdrv);
++
++ return 0;
++}
++
++static void __exit sharp_probe_exit(void)
++{
++ unregister_mtd_chip_driver(&sharp_chipdrv);
++}
++
++module_init(sharp_probe_init);
++module_exit(sharp_probe_exit);
++
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("David Schleef <ds@schleef.org>");
++MODULE_DESCRIPTION("Old MTD chip driver for pre-CFI Sharp flash chips");
+diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
+index 5ea1693..d523464 100644
+--- a/drivers/mtd/maps/Kconfig
++++ b/drivers/mtd/maps/Kconfig
+@@ -360,7 +360,7 @@ config MTD_CDB89712
+
+ config MTD_SA1100
+ tristate "CFI Flash device mapped on StrongARM SA11x0"
+- depends on MTD_CFI && ARCH_SA1100 && MTD_PARTITIONS
++ depends on (MTD_CFI || MTD_SHARP) && ARCH_SA1100 && MTD_PARTITIONS
+ help
+ This enables access to the flash chips on most platforms based on
+ the SA1100 and SA1110, including the Assabet and the Compaq iPAQ.
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch b/packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch
new file mode 100644
index 0000000000..230bd93476
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch
@@ -0,0 +1,107 @@
+From 8200a4430e1515bf4523e3651fa7c29fdebbb0fb Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:50:06 +0200
+Subject: [PATCH 07/23] hostap workaround for buggy sa1100 pcmcia driver
+
+---
+ drivers/net/wireless/hostap/hostap_cs.c | 6 ++++--
+ drivers/net/wireless/hostap/hostap_hw.c | 14 ++++++++++++--
+ drivers/net/wireless/hostap/hostap_pci.c | 1 +
+ drivers/net/wireless/hostap/hostap_plx.c | 2 +-
+ 4 files changed, 18 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
+index 6337402..928cdf0 100644
+--- a/drivers/net/wireless/hostap/hostap_cs.c
++++ b/drivers/net/wireless/hostap/hostap_cs.c
+@@ -35,7 +35,7 @@ static int ignore_cis_vcc;
+ module_param(ignore_cis_vcc, int, 0444);
+ MODULE_PARM_DESC(ignore_cis_vcc, "Ignore broken CIS VCC entry");
+
+-
++int activar=0;
+ /* struct local_info::hw_priv */
+ struct hostap_cs_priv {
+ dev_node_t node;
+@@ -499,11 +499,13 @@ static int hostap_cs_probe(struct pcmcia_device *p_dev)
+
+ PDEBUG(DEBUG_HW, "%s: setting Vcc=33 (constant)\n", dev_info);
+ p_dev->conf.IntType = INT_MEMORY_AND_IO;
+-
++
++ activar=0;
+ ret = prism2_config(p_dev);
+ if (ret) {
+ PDEBUG(DEBUG_EXTRA, "prism2_config() failed\n");
+ }
++ activar=1;
+
+ return ret;
+ }
+diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
+index 3153fe9..188eaee 100644
+--- a/drivers/net/wireless/hostap/hostap_hw.c
++++ b/drivers/net/wireless/hostap/hostap_hw.c
+@@ -54,6 +54,7 @@
+ #include "hostap.h"
+ #include "hostap_ap.h"
+
++extern int activar;
+
+ /* #define final_version */
+
+@@ -1497,6 +1498,8 @@ static int prism2_hw_config(struct net_device *dev, int initial)
+ if (local->hw_downloading)
+ return 1;
+
++ activar=1;
++
+ if (prism2_hw_init(dev, initial)) {
+ return local->no_pri ? 0 : 1;
+ }
+@@ -2628,8 +2631,15 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
+ int events = 0;
+ u16 ev;
+
+- iface = netdev_priv(dev);
+- local = iface->local;
++
++ // Todos los parametros de entrada son correctos (no son nulos). De momento esta es la unica forma que conozco de detectar el problema.
++ if (!activar) {
++ printk("hostap_hw.c: INTERRUPT BEFORE DEVICE INIT!\n");
++ return IRQ_HANDLED;
++ }
++
++ iface = netdev_priv(dev);
++ local = iface->local;
+
+ prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
+
+diff --git a/drivers/net/wireless/hostap/hostap_pci.c b/drivers/net/wireless/hostap/hostap_pci.c
+index 3a874fc..df58aa3 100644
+--- a/drivers/net/wireless/hostap/hostap_pci.c
++++ b/drivers/net/wireless/hostap/hostap_pci.c
+@@ -19,6 +19,7 @@
+
+ #include "hostap_wlan.h"
+
++int activar=1;
+
+ static char *dev_info = "hostap_pci";
+
+diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c
+index cbf15d7..4475174 100644
+--- a/drivers/net/wireless/hostap/hostap_plx.c
++++ b/drivers/net/wireless/hostap/hostap_plx.c
+@@ -21,7 +21,7 @@
+ #include <asm/io.h>
+
+ #include "hostap_wlan.h"
+-
++int activar=1;
+
+ static char *dev_info = "hostap_plx";
+
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch b/packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch
new file mode 100644
index 0000000000..19557f9e18
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch
@@ -0,0 +1,70 @@
+From 8ebd75d9f4d7dcc74e18b46ed82070eec52deaa8 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:51:21 +0200
+Subject: [PATCH 08/23] fix collie suspend hack
+
+---
+ drivers/pcmcia/pxa2xx_sharpsl.c | 2 +-
+ drivers/pcmcia/sa1100_generic.c | 19 ++++++++++---------
+ 2 files changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c
+index 1cd02f5..3724395 100644
+--- a/drivers/pcmcia/pxa2xx_sharpsl.c
++++ b/drivers/pcmcia/pxa2xx_sharpsl.c
+@@ -222,7 +222,7 @@ static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
+ sharpsl_pcmcia_init_reset(skt);
+ }
+
+-static struct pcmcia_low_level sharpsl_pcmcia_ops __initdata = {
++static struct pcmcia_low_level sharpsl_pcmcia_ops = {
+ .owner = THIS_MODULE,
+ .hw_init = sharpsl_pcmcia_hw_init,
+ .hw_shutdown = sharpsl_pcmcia_hw_shutdown,
+diff --git a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c
+index c5b2a44..eecbe8c 100644
+--- a/drivers/pcmcia/sa1100_generic.c
++++ b/drivers/pcmcia/sa1100_generic.c
+@@ -81,13 +81,14 @@ static int sa11x0_drv_pcmcia_probe(struct device *dev)
+ 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,
++ },
+ };
+
+ /* sa11x0_pcmcia_init()
+@@ -100,7 +101,7 @@ static struct device_driver sa11x0_pcmcia_driver = {
+ */
+ 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 +111,7 @@ static int __init sa11x0_pcmcia_init(void)
+ */
+ 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>");
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch b/packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch
new file mode 100644
index 0000000000..bb8dd5cd63
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch
@@ -0,0 +1,2629 @@
+From 923ac0a48c2a064e4639b0fa53dbd0a18d87043e Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 18:09:03 +0100
+Subject: [PATCH 09/23] add sa1100 usb gadget driver hack
+
+Conflicts:
+
+ drivers/usb/gadget/Makefile
+---
+ arch/arm/mach-sa1100/include/mach/collie.h | 5 +-
+ drivers/usb/gadget/Kconfig | 14 +
+ drivers/usb/gadget/Makefile | 1 +
+ drivers/usb/gadget/sa1100_udc.c | 2447 ++++++++++++++++++++++++++++
+ drivers/usb/gadget/sa1100_udc.h | 94 ++
+ 5 files changed, 2558 insertions(+), 3 deletions(-)
+ create mode 100644 drivers/usb/gadget/sa1100_udc.c
+ create mode 100644 drivers/usb/gadget/sa1100_udc.h
+
+diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h
+index 9bc5349..799c930 100644
+--- a/arch/arm/mach-sa1100/include/mach/collie.h
++++ b/arch/arm/mach-sa1100/include/mach/collie.h
+@@ -23,11 +23,10 @@
+ #define COLLIE_SCP_5VON SCOOP_GPCR_PA16
+ #define COLLIE_SCP_AMP_ON SCOOP_GPCR_PA17
+ #define COLLIE_GPIO_VPEN (COLLIE_SCOOP_GPIO_BASE + 7)
+-#define COLLIE_SCP_LB_VOL_CHG SCOOP_GPCR_PA19
++#define COLLIE_GPIO_LB_VOL_CHG (COLLIE_SCOOP_GPIO_BASE + 8)
+
+ #define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
+- COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | \
+- COLLIE_SCP_LB_VOL_CHG )
++ COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON )
+ #define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
+ COLLIE_SCP_CHARGE_ON )
+
+diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
+index dd4cd5a..efb65ac 100644
+--- a/drivers/usb/gadget/Kconfig
++++ b/drivers/usb/gadget/Kconfig
+@@ -419,6 +419,20 @@ config USB_GOKU
+ default USB_GADGET
+ select USB_GADGET_SELECTED
+
++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
+
+ #
+ # LAST -- dummy/emulated controller
+diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
+index bd4041b..5cdd0ce 100644
+--- a/drivers/usb/gadget/Makefile
++++ b/drivers/usb/gadget/Makefile
+@@ -19,6 +19,7 @@ obj-$(CONFIG_USB_ATMEL_USBA) += atmel_usba_udc.o
+ obj-$(CONFIG_USB_FSL_USB2) += fsl_usb2_udc.o
+ obj-$(CONFIG_USB_M66592) += m66592-udc.o
+ obj-$(CONFIG_USB_FSL_QE) += fsl_qe_udc.o
++obj-$(CONFIG_USB_SA1100) += sa1100_udc.o
+
+ #
+ # USB gadget drivers
+diff --git a/drivers/usb/gadget/sa1100_udc.c b/drivers/usb/gadget/sa1100_udc.c
+new file mode 100644
+index 0000000..5e26a6d
+--- /dev/null
++++ b/drivers/usb/gadget/sa1100_udc.c
+@@ -0,0 +1,2447 @@
++/*
++ * 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, 2007
++ * Many fragments from pxa2xx_udc.c and mach-sa1100 driver with various
++ * GPL Copyright authors incl Russel king and Nicolas Pitre
++ * Working port to 2.6.32-1 by N C Bane
++ *
++ * This file provides interrupt routing and overall coordination for the
++ * sa1100 USB endpoints: ep0, ep1out-bulk, ep2in-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
++// This is a clunky fix for dma alignemnt issues
++// It should probably be done better by someone more
++// steeped in DMA lore
++#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 <mach/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/balloon2.h>
++#endif
++
++#if defined(CONFIG_SA1100_COLLIE)
++#include <linux/gpio.h>
++#include <mach/collie.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 (%#lx) 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 (%#lx) 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 (%#lx) 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 (%#lx) 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 0
++
++#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
++
++/* 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;
++ __u32 in, out;
++
++ /* 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);
++ in = __le16_to_cpu( the_controller->ep[1].ep.maxpacket );
++ 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) {
++ 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");
++ 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
++ PRINTKD("%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.8lX\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.8lX)\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.8lX)\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.8lX)\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=%ld\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_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 );
++
++ 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 {
++ ep2_curdmapos += ep2_curdmalen;
++ ep2_remain -= ep2_curdmalen;
++
++ 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;
++ ep->stopped = 0;
++
++ 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, gfp_t gfp_flags)
++{
++ struct sa1100_request *req;
++
++ if (!_ep)
++ return 0;
++
++ req = kzalloc(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;
++
++ req = container_of (_req, struct sa1100_request, req);
++ WARN_ON (!list_empty (&req->queue));
++ kfree(req); //NCB - see pxa2xx_udc
++}
++
++/*-------------------------------------------------------------------------*/
++
++static void done(struct sa1100_ep *ep, struct sa1100_request *req, int status)
++{
++ unsigned stopped = ep->stopped;
++
++ list_del_init (&req->queue);
++
++ if (likely(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;
++ req->req.complete (&ep->ep, &req->req);
++ ep->stopped = stopped;
++}
++
++/*-------------------------------------------------------------------------*/
++
++/* 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;
++
++ 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_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;
++
++ 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, gfp_t 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 (unlikely(!_ep || (!ep->desc && _ep->name != ep0name)))
++ return -EINVAL;
++
++ dev = ep->dev;
++ if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))
++ return -ESHUTDOWN;
++
++ // 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;
++ }
++
++ /* 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;
++
++ VDEBUG (dev, "%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;
++
++ 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 */
++ while (!list_empty (&ep->queue)) {
++ req = list_entry (ep->queue.next,
++ struct sa1100_request,
++ queue);
++ done (ep, req, status);
++ }
++ if (ep == &ep->dev->ep[1])
++ ep1_reset ();
++ else if (ep == &ep->dev->ep[2])
++ ep2_reset ();
++}
++
++/* 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);
++ 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;
++ }
++
++ 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 (unlikely(!_ep
++ || (!ep->desc && _ep->name != ep0name))
++ || (ep->desc->bmAttributes & 0x03) == USB_ENDPOINT_XFER_ISOC)
++ return -EINVAL;
++ if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
++ return -ESHUTDOWN;
++
++ 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,
++
++ .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.8lX\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.8lX\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.8lX\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.8lX\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;
++}
++
++static irqreturn_t udc_int_hndlr(int irq, void *_dev)
++{
++ struct sa1100_udc *dev = _dev;
++ u32 status = Ser0UDCSR;
++
++ PRINTKD("%s: status = 0x%x and control = 0x%lx\n", __FUNCTION__,
++ status, Ser0UDCCR);
++ /* 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
++ UDC_set(Ser0UDCCR, UDCCR_REM); // mask reset
++ UDC_clear(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)
++ PRINTKD("%s: processing ep0_int_hndlr\n",__FUNCTION__);
++ 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_cpld_control(BALLOON_UDC_DISCONNECT, 0);
++ else
++ balloon_cpld_control(BALLOON_UDC_DISCONNECT, 1);
++ }
++}
++#elif defined(CONFIG_SA1100_COLLIE)
++static int collie_usb_init(void)
++{
++ int rc;
++ rc = gpio_request(COLLIE_GPIO_LB_VOL_CHG, "usb enable");
++ if (rc)
++ return rc;
++
++ rc = gpio_direction_output(COLLIE_GPIO_LB_VOL_CHG, 1);
++ if (rc)
++ gpio_free(COLLIE_GPIO_LB_VOL_CHG);
++
++ return rc;
++}
++
++static void collie_set_usb(int enable)
++{
++ gpio_set_value(COLLIE_GPIO_LB_VOL_CHG, enable);
++}
++
++static void collie_usb_exit(void)
++{
++ gpio_free(COLLIE_GPIO_LB_VOL_CHG);
++}
++
++static void soft_connect_hook(int enable)
++{
++ collie_set_usb(enable);
++}
++#else
++#define soft_connect_hook(x) do { } while (0);
++#endif
++
++/* "function" sysfs attribute */
++static ssize_t
++show_function(struct device *_dev, struct device_attribute *attr, 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->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;
++
++ retval = device_add(&dev->gadget.dev);
++ if (retval != 0) {
++ printk(KERN_ERR "Error in device_add() : %d\n",retval);
++ goto register_error;
++ }
++
++ retval = driver->bind (&dev->gadget);
++ if (retval != 0) {
++ DEBUG(dev, "bind to driver %s --> %d\n",
++ driver->driver.name, retval);
++ device_del(&dev->gadget.dev);
++ goto register_error;
++ }
++
++ 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;
++
++register_error:
++ dev->driver = NULL;
++ dev->gadget.dev.driver = NULL;
++ return retval;
++}
++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)
++ driver->disconnect(&dev->gadget);
++
++ /* 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();
++ if (driver->unbind)
++ driver->unbind(&dev->gadget);
++ dev->driver = 0;
++
++ 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",
++ },
++ },
++
++ /* control endpoint */
++ .ep[0] = {
++ .ep = {
++ .name = ep0name,
++ .ops = &sa1100_ep_ops,
++ .maxpacket = EP0_FIFO_SIZE,
++ },
++ .dev = &memory,
++ },
++
++ /* first group of endpoints */
++ .ep[1] = {
++ .ep = {
++ .name = "ep1out-bulk",
++ .ops = &sa1100_ep_ops,
++ .maxpacket = BULK_FIFO_SIZE,
++ },
++ .dev = &memory,
++ },
++ .ep[2] = {
++ .ep = {
++ .name = "ep2in-bulk",
++ .ops = &sa1100_ep_ops,
++ .maxpacket = BULK_FIFO_SIZE,
++ },
++ .dev = &memory,
++ }
++};
++
++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();
++
++#if defined(CONFIG_SA1100_COLLIE)
++ collie_usb_init();
++#endif
++
++ /* 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, IRQF_DISABLED,
++ 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;
++#if defined(CONFIG_SA1100_COLLIE)
++ collie_usb_exit();
++#endif
++ 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,
++ .owner = THIS_MODULE,
++};
++
++static int __init udc_init(void)
++{
++ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
++#ifdef NCB_DMA_FIX
++ send_buffer = (char*) kzalloc(SEND_BUFFER_SIZE, GFP_KERNEL | GFP_DMA );
++ receive_buffer = (char*) kzalloc(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 --git a/drivers/usb/gadget/sa1100_udc.h b/drivers/usb/gadget/sa1100_udc.h
+new file mode 100644
+index 0000000..86fa28d
+--- /dev/null
++++ b/drivers/usb/gadget/sa1100_udc.h
+@@ -0,0 +1,94 @@
++/*
++ * 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)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;
++ 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)
++
++/*-------------------------------------------------------------------------*/
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch b/packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch
new file mode 100644
index 0000000000..fbf1b4573b
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch
@@ -0,0 +1,59 @@
+From 53fc40876ed9b753f935361fb1027718a184c41e Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Thu, 5 Feb 2009 00:49:03 +0100
+Subject: [PATCH 10/23] mmc_spi: add suspend and resume callbacks
+
+---
+ drivers/mmc/host/mmc_spi.c | 29 +++++++++++++++++++++++++++++
+ 1 files changed, 29 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
+index ad00e16..ac6719b 100644
+--- a/drivers/mmc/host/mmc_spi.c
++++ b/drivers/mmc/host/mmc_spi.c
+@@ -1407,6 +1407,33 @@ static int __devexit mmc_spi_remove(struct spi_device *spi)
+ return 0;
+ }
+
++#ifdef CONFIG_PM
++static int mmc_spi_suspend(struct spi_device *spi, pm_message_t state)
++{
++ struct mmc_host *mmc = dev_get_drvdata(&spi->dev);
++ struct mmc_spi_host *host = mmc_priv(mmc);
++ int ret = 0;
++
++ if (mmc)
++ ret = mmc_suspend_host(mmc, state);
++ return ret;
++}
++
++static int mmc_spi_resume(struct spi_device *spi)
++{
++ struct mmc_host *mmc = dev_get_drvdata(&spi->dev);
++ int ret = 0;
++
++ if (mmc)
++ ret = mmc_resume_host(mmc);
++
++ return ret;
++}
++#else
++#define mmc_spi_suspend NULL
++#define mmc_spi_resume NULL
++#endif
++
+
+ static struct spi_driver mmc_spi_driver = {
+ .driver = {
+@@ -1416,6 +1443,8 @@ static struct spi_driver mmc_spi_driver = {
+ },
+ .probe = mmc_spi_probe,
+ .remove = __devexit_p(mmc_spi_remove),
++ .suspend = mmc_spi_suspend,
++ .resume = mmc_spi_resume,
+ };
+
+
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch b/packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch
new file mode 100644
index 0000000000..0bc3dbb713
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch
@@ -0,0 +1,803 @@
+From c69779dac8693a3b057b3708d19f7013c6973bf2 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 14:54:57 +0100
+Subject: [PATCH 11/23] move drivers/mfd/*.h to include/linux/mfd
+
+So drivers like collie_battery driver can use
+those files easier.
+---
+ arch/arm/mach-sa1100/collie_pm.c | 2 +-
+ drivers/mfd/mcp-core.c | 2 +-
+ drivers/mfd/mcp-sa11x0.c | 2 +-
+ drivers/mfd/mcp.h | 66 ----------
+ drivers/mfd/ucb1x00-assabet.c | 2 +-
+ drivers/mfd/ucb1x00-core.c | 2 +-
+ drivers/mfd/ucb1x00-ts.c | 2 +-
+ drivers/mfd/ucb1x00.h | 255 --------------------------------------
+ include/linux/mfd/mcp.h | 68 ++++++++++
+ include/linux/mfd/ucb1x00.h | 255 ++++++++++++++++++++++++++++++++++++++
+ 10 files changed, 329 insertions(+), 327 deletions(-)
+ delete mode 100644 drivers/mfd/mcp.h
+ delete mode 100644 drivers/mfd/ucb1x00.h
+ create mode 100644 include/linux/mfd/mcp.h
+ create mode 100644 include/linux/mfd/ucb1x00.h
+
+diff --git a/arch/arm/mach-sa1100/collie_pm.c b/arch/arm/mach-sa1100/collie_pm.c
+index b1161fc..65b8b31 100644
+--- a/arch/arm/mach-sa1100/collie_pm.c
++++ b/arch/arm/mach-sa1100/collie_pm.c
+@@ -22,6 +22,7 @@
+ #include <linux/interrupt.h>
+ #include <linux/device.h>
+ #include <linux/platform_device.h>
++#include <linux/mfd/ucb1x00.h>
+
+ #include <asm/irq.h>
+ #include <mach/hardware.h>
+@@ -31,7 +32,6 @@
+ #include <asm/mach/sharpsl_param.h>
+ #include <asm/hardware/sharpsl_pm.h>
+
+-#include "../drivers/mfd/ucb1x00.h"
+
+ static struct ucb1x00 *ucb;
+ static int ad_revise;
+diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
+index b4ed57e..64c806a 100644
+--- a/drivers/mfd/mcp-core.c
++++ b/drivers/mfd/mcp-core.c
+@@ -17,11 +17,11 @@
+ #include <linux/device.h>
+ #include <linux/slab.h>
+ #include <linux/string.h>
++#include <linux/mfd/mcp.h>
+
+ #include <asm/dma.h>
+ #include <asm/system.h>
+
+-#include "mcp.h"
+
+ #define to_mcp(d) container_of(d, struct mcp, attached_device)
+ #define to_mcp_driver(d) container_of(d, struct mcp_driver, drv)
+diff --git a/drivers/mfd/mcp-sa11x0.c b/drivers/mfd/mcp-sa11x0.c
+index 28380b2..88c81cf 100644
+--- a/drivers/mfd/mcp-sa11x0.c
++++ b/drivers/mfd/mcp-sa11x0.c
+@@ -19,6 +19,7 @@
+ #include <linux/spinlock.h>
+ #include <linux/slab.h>
+ #include <linux/platform_device.h>
++#include <linux/mfd/mcp.h>
+
+ #include <asm/dma.h>
+ #include <mach/hardware.h>
+@@ -28,7 +29,6 @@
+
+ #include <mach/assabet.h>
+
+-#include "mcp.h"
+
+ struct mcp_sa11x0 {
+ u32 mccr0;
+diff --git a/drivers/mfd/mcp.h b/drivers/mfd/mcp.h
+deleted file mode 100644
+index c093a93..0000000
+--- a/drivers/mfd/mcp.h
++++ /dev/null
+@@ -1,66 +0,0 @@
+-/*
+- * linux/drivers/mfd/mcp.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 MCP_H
+-#define MCP_H
+-
+-struct mcp_ops;
+-
+-struct mcp {
+- struct module *owner;
+- struct mcp_ops *ops;
+- spinlock_t lock;
+- int use_count;
+- unsigned int sclk_rate;
+- unsigned int rw_timeout;
+- dma_device_t dma_audio_rd;
+- dma_device_t dma_audio_wr;
+- dma_device_t dma_telco_rd;
+- dma_device_t dma_telco_wr;
+- struct device attached_device;
+-};
+-
+-struct mcp_ops {
+- void (*set_telecom_divisor)(struct mcp *, unsigned int);
+- void (*set_audio_divisor)(struct mcp *, unsigned int);
+- void (*reg_write)(struct mcp *, unsigned int, unsigned int);
+- unsigned int (*reg_read)(struct mcp *, unsigned int);
+- void (*enable)(struct mcp *);
+- void (*disable)(struct mcp *);
+-};
+-
+-void mcp_set_telecom_divisor(struct mcp *, unsigned int);
+-void mcp_set_audio_divisor(struct mcp *, unsigned int);
+-void mcp_reg_write(struct mcp *, unsigned int, unsigned int);
+-unsigned int mcp_reg_read(struct mcp *, unsigned int);
+-void mcp_enable(struct mcp *);
+-void mcp_disable(struct mcp *);
+-#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
+-
+-struct mcp *mcp_host_alloc(struct device *, size_t);
+-int mcp_host_register(struct mcp *);
+-void mcp_host_unregister(struct mcp *);
+-
+-struct mcp_driver {
+- struct device_driver drv;
+- int (*probe)(struct mcp *);
+- void (*remove)(struct mcp *);
+- int (*suspend)(struct mcp *, pm_message_t);
+- int (*resume)(struct mcp *);
+-};
+-
+-int mcp_driver_register(struct mcp_driver *);
+-void mcp_driver_unregister(struct mcp_driver *);
+-
+-#define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device)
+-#define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d)
+-
+-#define mcp_priv(mcp) ((void *)((mcp)+1))
+-
+-#endif
+diff --git a/drivers/mfd/ucb1x00-assabet.c b/drivers/mfd/ucb1x00-assabet.c
+index 61aeaf7..0f6f46d 100644
+--- a/drivers/mfd/ucb1x00-assabet.c
++++ b/drivers/mfd/ucb1x00-assabet.c
+@@ -14,10 +14,10 @@
+ #include <linux/fs.h>
+ #include <linux/proc_fs.h>
+ #include <linux/device.h>
++#include <linux/mfd/ucb1x00.h>
+
+ #include <asm/dma.h>
+
+-#include "ucb1x00.h"
+
+ #define UCB1X00_ATTR(name,input)\
+ static ssize_t name##_show(struct device *dev, struct device_attribute *attr, \
+diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
+index a316f1b..bc2c1ba 100644
+--- a/drivers/mfd/ucb1x00-core.c
++++ b/drivers/mfd/ucb1x00-core.c
+@@ -24,11 +24,11 @@
+ #include <linux/interrupt.h>
+ #include <linux/device.h>
+ #include <linux/mutex.h>
++#include <linux/mfd/ucb1x00.h>
+
+ #include <asm/dma.h>
+ #include <mach/hardware.h>
+
+-#include "ucb1x00.h"
+
+ static DEFINE_MUTEX(ucb1x00_mutex);
+ static LIST_HEAD(ucb1x00_drivers);
+diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c
+index 44762ca..b5feae9 100644
+--- a/drivers/mfd/ucb1x00-ts.c
++++ b/drivers/mfd/ucb1x00-ts.c
+@@ -30,12 +30,12 @@
+ #include <linux/freezer.h>
+ #include <linux/slab.h>
+ #include <linux/kthread.h>
++#include <linux/mfd/ucb1x00.h>
+
+ #include <asm/dma.h>
+ #include <mach/collie.h>
+ #include <asm/mach-types.h>
+
+-#include "ucb1x00.h"
+
+
+ struct ucb1x00_ts {
+diff --git a/drivers/mfd/ucb1x00.h b/drivers/mfd/ucb1x00.h
+deleted file mode 100644
+index a8ad8a0..0000000
+--- a/drivers/mfd/ucb1x00.h
++++ /dev/null
+@@ -1,255 +0,0 @@
+-/*
+- * linux/drivers/mfd/ucb1x00.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 UCB1200_H
+-#define UCB1200_H
+-
+-#define UCB_IO_DATA 0x00
+-#define UCB_IO_DIR 0x01
+-
+-#define UCB_IO_0 (1 << 0)
+-#define UCB_IO_1 (1 << 1)
+-#define UCB_IO_2 (1 << 2)
+-#define UCB_IO_3 (1 << 3)
+-#define UCB_IO_4 (1 << 4)
+-#define UCB_IO_5 (1 << 5)
+-#define UCB_IO_6 (1 << 6)
+-#define UCB_IO_7 (1 << 7)
+-#define UCB_IO_8 (1 << 8)
+-#define UCB_IO_9 (1 << 9)
+-
+-#define UCB_IE_RIS 0x02
+-#define UCB_IE_FAL 0x03
+-#define UCB_IE_STATUS 0x04
+-#define UCB_IE_CLEAR 0x04
+-#define UCB_IE_ADC (1 << 11)
+-#define UCB_IE_TSPX (1 << 12)
+-#define UCB_IE_TSMX (1 << 13)
+-#define UCB_IE_TCLIP (1 << 14)
+-#define UCB_IE_ACLIP (1 << 15)
+-
+-#define UCB_IRQ_TSPX 12
+-
+-#define UCB_TC_A 0x05
+-#define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
+-#define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */
+-
+-#define UCB_TC_B 0x06
+-#define UCB_TC_B_VOICE_ENA (1 << 3)
+-#define UCB_TC_B_CLIP (1 << 4)
+-#define UCB_TC_B_ATT (1 << 6)
+-#define UCB_TC_B_SIDE_ENA (1 << 11)
+-#define UCB_TC_B_MUTE (1 << 13)
+-#define UCB_TC_B_IN_ENA (1 << 14)
+-#define UCB_TC_B_OUT_ENA (1 << 15)
+-
+-#define UCB_AC_A 0x07
+-#define UCB_AC_B 0x08
+-#define UCB_AC_B_LOOP (1 << 8)
+-#define UCB_AC_B_MUTE (1 << 13)
+-#define UCB_AC_B_IN_ENA (1 << 14)
+-#define UCB_AC_B_OUT_ENA (1 << 15)
+-
+-#define UCB_TS_CR 0x09
+-#define UCB_TS_CR_TSMX_POW (1 << 0)
+-#define UCB_TS_CR_TSPX_POW (1 << 1)
+-#define UCB_TS_CR_TSMY_POW (1 << 2)
+-#define UCB_TS_CR_TSPY_POW (1 << 3)
+-#define UCB_TS_CR_TSMX_GND (1 << 4)
+-#define UCB_TS_CR_TSPX_GND (1 << 5)
+-#define UCB_TS_CR_TSMY_GND (1 << 6)
+-#define UCB_TS_CR_TSPY_GND (1 << 7)
+-#define UCB_TS_CR_MODE_INT (0 << 8)
+-#define UCB_TS_CR_MODE_PRES (1 << 8)
+-#define UCB_TS_CR_MODE_POS (2 << 8)
+-#define UCB_TS_CR_BIAS_ENA (1 << 11)
+-#define UCB_TS_CR_TSPX_LOW (1 << 12)
+-#define UCB_TS_CR_TSMX_LOW (1 << 13)
+-
+-#define UCB_ADC_CR 0x0a
+-#define UCB_ADC_SYNC_ENA (1 << 0)
+-#define UCB_ADC_VREFBYP_CON (1 << 1)
+-#define UCB_ADC_INP_TSPX (0 << 2)
+-#define UCB_ADC_INP_TSMX (1 << 2)
+-#define UCB_ADC_INP_TSPY (2 << 2)
+-#define UCB_ADC_INP_TSMY (3 << 2)
+-#define UCB_ADC_INP_AD0 (4 << 2)
+-#define UCB_ADC_INP_AD1 (5 << 2)
+-#define UCB_ADC_INP_AD2 (6 << 2)
+-#define UCB_ADC_INP_AD3 (7 << 2)
+-#define UCB_ADC_EXT_REF (1 << 5)
+-#define UCB_ADC_START (1 << 7)
+-#define UCB_ADC_ENA (1 << 15)
+-
+-#define UCB_ADC_DATA 0x0b
+-#define UCB_ADC_DAT_VAL (1 << 15)
+-#define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5)
+-
+-#define UCB_ID 0x0c
+-#define UCB_ID_1200 0x1004
+-#define UCB_ID_1300 0x1005
+-#define UCB_ID_TC35143 0x9712
+-
+-#define UCB_MODE 0x0d
+-#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
+-#define UCB_MODE_AUD_OFF_CAN (1 << 13)
+-
+-#include "mcp.h"
+-
+-struct ucb1x00_irq {
+- void *devid;
+- void (*fn)(int, void *);
+-};
+-
+-struct ucb1x00 {
+- spinlock_t lock;
+- struct mcp *mcp;
+- unsigned int irq;
+- struct semaphore adc_sem;
+- spinlock_t io_lock;
+- u16 id;
+- u16 io_dir;
+- u16 io_out;
+- u16 adc_cr;
+- u16 irq_fal_enbl;
+- u16 irq_ris_enbl;
+- struct ucb1x00_irq irq_handler[16];
+- struct device dev;
+- struct list_head node;
+- struct list_head devs;
+-};
+-
+-struct ucb1x00_driver;
+-
+-struct ucb1x00_dev {
+- struct list_head dev_node;
+- struct list_head drv_node;
+- struct ucb1x00 *ucb;
+- struct ucb1x00_driver *drv;
+- void *priv;
+-};
+-
+-struct ucb1x00_driver {
+- struct list_head node;
+- struct list_head devs;
+- int (*add)(struct ucb1x00_dev *dev);
+- void (*remove)(struct ucb1x00_dev *dev);
+- int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state);
+- int (*resume)(struct ucb1x00_dev *dev);
+-};
+-
+-#define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev)
+-
+-int ucb1x00_register_driver(struct ucb1x00_driver *);
+-void ucb1x00_unregister_driver(struct ucb1x00_driver *);
+-
+-/**
+- * ucb1x00_clkrate - return the UCB1x00 SIB clock rate
+- * @ucb: UCB1x00 structure describing chip
+- *
+- * Return the SIB clock rate in Hz.
+- */
+-static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb)
+-{
+- return mcp_get_sclk_rate(ucb->mcp);
+-}
+-
+-/**
+- * ucb1x00_enable - enable the UCB1x00 SIB clock
+- * @ucb: UCB1x00 structure describing chip
+- *
+- * Enable the SIB clock. This can be called multiple times.
+- */
+-static inline void ucb1x00_enable(struct ucb1x00 *ucb)
+-{
+- mcp_enable(ucb->mcp);
+-}
+-
+-/**
+- * ucb1x00_disable - disable the UCB1x00 SIB clock
+- * @ucb: UCB1x00 structure describing chip
+- *
+- * Disable the SIB clock. The SIB clock will only be disabled
+- * when the number of ucb1x00_enable calls match the number of
+- * ucb1x00_disable calls.
+- */
+-static inline void ucb1x00_disable(struct ucb1x00 *ucb)
+-{
+- mcp_disable(ucb->mcp);
+-}
+-
+-/**
+- * ucb1x00_reg_write - write a UCB1x00 register
+- * @ucb: UCB1x00 structure describing chip
+- * @reg: UCB1x00 4-bit register index to write
+- * @val: UCB1x00 16-bit value to write
+- *
+- * Write the UCB1x00 register @reg with value @val. The SIB
+- * clock must be running for this function to return.
+- */
+-static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val)
+-{
+- mcp_reg_write(ucb->mcp, reg, val);
+-}
+-
+-/**
+- * ucb1x00_reg_read - read a UCB1x00 register
+- * @ucb: UCB1x00 structure describing chip
+- * @reg: UCB1x00 4-bit register index to write
+- *
+- * Read the UCB1x00 register @reg and return its value. The SIB
+- * clock must be running for this function to return.
+- */
+-static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg)
+-{
+- return mcp_reg_read(ucb->mcp, reg);
+-}
+-/**
+- * ucb1x00_set_audio_divisor -
+- * @ucb: UCB1x00 structure describing chip
+- * @div: SIB clock divisor
+- */
+-static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div)
+-{
+- mcp_set_audio_divisor(ucb->mcp, div);
+-}
+-
+-/**
+- * ucb1x00_set_telecom_divisor -
+- * @ucb: UCB1x00 structure describing chip
+- * @div: SIB clock divisor
+- */
+-static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div)
+-{
+- mcp_set_telecom_divisor(ucb->mcp, div);
+-}
+-
+-void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int);
+-void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int);
+-unsigned int ucb1x00_io_read(struct ucb1x00 *ucb);
+-
+-#define UCB_NOSYNC (0)
+-#define UCB_SYNC (1)
+-
+-unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync);
+-void ucb1x00_adc_enable(struct ucb1x00 *ucb);
+-void ucb1x00_adc_disable(struct ucb1x00 *ucb);
+-
+-/*
+- * Which edges of the IRQ do you want to control today?
+- */
+-#define UCB_RISING (1 << 0)
+-#define UCB_FALLING (1 << 1)
+-
+-int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid);
+-void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
+-void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
+-int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid);
+-
+-#endif
+diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h
+new file mode 100644
+index 0000000..be95e09
+--- /dev/null
++++ b/include/linux/mfd/mcp.h
+@@ -0,0 +1,68 @@
++/*
++ * linux/drivers/mfd/mcp.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 MCP_H
++#define MCP_H
++
++#include <mach/dma.h>
++
++struct mcp_ops;
++
++struct mcp {
++ struct module *owner;
++ struct mcp_ops *ops;
++ spinlock_t lock;
++ int use_count;
++ unsigned int sclk_rate;
++ unsigned int rw_timeout;
++ dma_device_t dma_audio_rd;
++ dma_device_t dma_audio_wr;
++ dma_device_t dma_telco_rd;
++ dma_device_t dma_telco_wr;
++ struct device attached_device;
++};
++
++struct mcp_ops {
++ void (*set_telecom_divisor)(struct mcp *, unsigned int);
++ void (*set_audio_divisor)(struct mcp *, unsigned int);
++ void (*reg_write)(struct mcp *, unsigned int, unsigned int);
++ unsigned int (*reg_read)(struct mcp *, unsigned int);
++ void (*enable)(struct mcp *);
++ void (*disable)(struct mcp *);
++};
++
++void mcp_set_telecom_divisor(struct mcp *, unsigned int);
++void mcp_set_audio_divisor(struct mcp *, unsigned int);
++void mcp_reg_write(struct mcp *, unsigned int, unsigned int);
++unsigned int mcp_reg_read(struct mcp *, unsigned int);
++void mcp_enable(struct mcp *);
++void mcp_disable(struct mcp *);
++#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
++
++struct mcp *mcp_host_alloc(struct device *, size_t);
++int mcp_host_register(struct mcp *);
++void mcp_host_unregister(struct mcp *);
++
++struct mcp_driver {
++ struct device_driver drv;
++ int (*probe)(struct mcp *);
++ void (*remove)(struct mcp *);
++ int (*suspend)(struct mcp *, pm_message_t);
++ int (*resume)(struct mcp *);
++};
++
++int mcp_driver_register(struct mcp_driver *);
++void mcp_driver_unregister(struct mcp_driver *);
++
++#define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device)
++#define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d)
++
++#define mcp_priv(mcp) ((void *)((mcp)+1))
++
++#endif
+diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
+new file mode 100644
+index 0000000..eac3463
+--- /dev/null
++++ b/include/linux/mfd/ucb1x00.h
+@@ -0,0 +1,255 @@
++/*
++ * linux/include/mfd/ucb1x00.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 UCB1200_H
++#define UCB1200_H
++
++#include <linux/mfd/mcp.h>
++#define UCB_IO_DATA 0x00
++#define UCB_IO_DIR 0x01
++
++#define UCB_IO_0 (1 << 0)
++#define UCB_IO_1 (1 << 1)
++#define UCB_IO_2 (1 << 2)
++#define UCB_IO_3 (1 << 3)
++#define UCB_IO_4 (1 << 4)
++#define UCB_IO_5 (1 << 5)
++#define UCB_IO_6 (1 << 6)
++#define UCB_IO_7 (1 << 7)
++#define UCB_IO_8 (1 << 8)
++#define UCB_IO_9 (1 << 9)
++
++#define UCB_IE_RIS 0x02
++#define UCB_IE_FAL 0x03
++#define UCB_IE_STATUS 0x04
++#define UCB_IE_CLEAR 0x04
++#define UCB_IE_ADC (1 << 11)
++#define UCB_IE_TSPX (1 << 12)
++#define UCB_IE_TSMX (1 << 13)
++#define UCB_IE_TCLIP (1 << 14)
++#define UCB_IE_ACLIP (1 << 15)
++
++#define UCB_IRQ_TSPX 12
++
++#define UCB_TC_A 0x05
++#define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
++#define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */
++
++#define UCB_TC_B 0x06
++#define UCB_TC_B_VOICE_ENA (1 << 3)
++#define UCB_TC_B_CLIP (1 << 4)
++#define UCB_TC_B_ATT (1 << 6)
++#define UCB_TC_B_SIDE_ENA (1 << 11)
++#define UCB_TC_B_MUTE (1 << 13)
++#define UCB_TC_B_IN_ENA (1 << 14)
++#define UCB_TC_B_OUT_ENA (1 << 15)
++
++#define UCB_AC_A 0x07
++#define UCB_AC_B 0x08
++#define UCB_AC_B_LOOP (1 << 8)
++#define UCB_AC_B_MUTE (1 << 13)
++#define UCB_AC_B_IN_ENA (1 << 14)
++#define UCB_AC_B_OUT_ENA (1 << 15)
++
++#define UCB_TS_CR 0x09
++#define UCB_TS_CR_TSMX_POW (1 << 0)
++#define UCB_TS_CR_TSPX_POW (1 << 1)
++#define UCB_TS_CR_TSMY_POW (1 << 2)
++#define UCB_TS_CR_TSPY_POW (1 << 3)
++#define UCB_TS_CR_TSMX_GND (1 << 4)
++#define UCB_TS_CR_TSPX_GND (1 << 5)
++#define UCB_TS_CR_TSMY_GND (1 << 6)
++#define UCB_TS_CR_TSPY_GND (1 << 7)
++#define UCB_TS_CR_MODE_INT (0 << 8)
++#define UCB_TS_CR_MODE_PRES (1 << 8)
++#define UCB_TS_CR_MODE_POS (2 << 8)
++#define UCB_TS_CR_BIAS_ENA (1 << 11)
++#define UCB_TS_CR_TSPX_LOW (1 << 12)
++#define UCB_TS_CR_TSMX_LOW (1 << 13)
++
++#define UCB_ADC_CR 0x0a
++#define UCB_ADC_SYNC_ENA (1 << 0)
++#define UCB_ADC_VREFBYP_CON (1 << 1)
++#define UCB_ADC_INP_TSPX (0 << 2)
++#define UCB_ADC_INP_TSMX (1 << 2)
++#define UCB_ADC_INP_TSPY (2 << 2)
++#define UCB_ADC_INP_TSMY (3 << 2)
++#define UCB_ADC_INP_AD0 (4 << 2)
++#define UCB_ADC_INP_AD1 (5 << 2)
++#define UCB_ADC_INP_AD2 (6 << 2)
++#define UCB_ADC_INP_AD3 (7 << 2)
++#define UCB_ADC_EXT_REF (1 << 5)
++#define UCB_ADC_START (1 << 7)
++#define UCB_ADC_ENA (1 << 15)
++
++#define UCB_ADC_DATA 0x0b
++#define UCB_ADC_DAT_VAL (1 << 15)
++#define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5)
++
++#define UCB_ID 0x0c
++#define UCB_ID_1200 0x1004
++#define UCB_ID_1300 0x1005
++#define UCB_ID_TC35143 0x9712
++
++#define UCB_MODE 0x0d
++#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
++#define UCB_MODE_AUD_OFF_CAN (1 << 13)
++
++
++struct ucb1x00_irq {
++ void *devid;
++ void (*fn)(int, void *);
++};
++
++struct ucb1x00 {
++ spinlock_t lock;
++ struct mcp *mcp;
++ unsigned int irq;
++ struct semaphore adc_sem;
++ spinlock_t io_lock;
++ u16 id;
++ u16 io_dir;
++ u16 io_out;
++ u16 adc_cr;
++ u16 irq_fal_enbl;
++ u16 irq_ris_enbl;
++ struct ucb1x00_irq irq_handler[16];
++ struct device dev;
++ struct list_head node;
++ struct list_head devs;
++};
++
++struct ucb1x00_driver;
++
++struct ucb1x00_dev {
++ struct list_head dev_node;
++ struct list_head drv_node;
++ struct ucb1x00 *ucb;
++ struct ucb1x00_driver *drv;
++ void *priv;
++};
++
++struct ucb1x00_driver {
++ struct list_head node;
++ struct list_head devs;
++ int (*add)(struct ucb1x00_dev *dev);
++ void (*remove)(struct ucb1x00_dev *dev);
++ int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state);
++ int (*resume)(struct ucb1x00_dev *dev);
++};
++
++#define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev)
++
++int ucb1x00_register_driver(struct ucb1x00_driver *);
++void ucb1x00_unregister_driver(struct ucb1x00_driver *);
++
++/**
++ * ucb1x00_clkrate - return the UCB1x00 SIB clock rate
++ * @ucb: UCB1x00 structure describing chip
++ *
++ * Return the SIB clock rate in Hz.
++ */
++static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb)
++{
++ return mcp_get_sclk_rate(ucb->mcp);
++}
++
++/**
++ * ucb1x00_enable - enable the UCB1x00 SIB clock
++ * @ucb: UCB1x00 structure describing chip
++ *
++ * Enable the SIB clock. This can be called multiple times.
++ */
++static inline void ucb1x00_enable(struct ucb1x00 *ucb)
++{
++ mcp_enable(ucb->mcp);
++}
++
++/**
++ * ucb1x00_disable - disable the UCB1x00 SIB clock
++ * @ucb: UCB1x00 structure describing chip
++ *
++ * Disable the SIB clock. The SIB clock will only be disabled
++ * when the number of ucb1x00_enable calls match the number of
++ * ucb1x00_disable calls.
++ */
++static inline void ucb1x00_disable(struct ucb1x00 *ucb)
++{
++ mcp_disable(ucb->mcp);
++}
++
++/**
++ * ucb1x00_reg_write - write a UCB1x00 register
++ * @ucb: UCB1x00 structure describing chip
++ * @reg: UCB1x00 4-bit register index to write
++ * @val: UCB1x00 16-bit value to write
++ *
++ * Write the UCB1x00 register @reg with value @val. The SIB
++ * clock must be running for this function to return.
++ */
++static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val)
++{
++ mcp_reg_write(ucb->mcp, reg, val);
++}
++
++/**
++ * ucb1x00_reg_read - read a UCB1x00 register
++ * @ucb: UCB1x00 structure describing chip
++ * @reg: UCB1x00 4-bit register index to write
++ *
++ * Read the UCB1x00 register @reg and return its value. The SIB
++ * clock must be running for this function to return.
++ */
++static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg)
++{
++ return mcp_reg_read(ucb->mcp, reg);
++}
++/**
++ * ucb1x00_set_audio_divisor -
++ * @ucb: UCB1x00 structure describing chip
++ * @div: SIB clock divisor
++ */
++static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div)
++{
++ mcp_set_audio_divisor(ucb->mcp, div);
++}
++
++/**
++ * ucb1x00_set_telecom_divisor -
++ * @ucb: UCB1x00 structure describing chip
++ * @div: SIB clock divisor
++ */
++static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div)
++{
++ mcp_set_telecom_divisor(ucb->mcp, div);
++}
++
++void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int);
++void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int);
++unsigned int ucb1x00_io_read(struct ucb1x00 *ucb);
++
++#define UCB_NOSYNC (0)
++#define UCB_SYNC (1)
++
++unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync);
++void ucb1x00_adc_enable(struct ucb1x00 *ucb);
++void ucb1x00_adc_disable(struct ucb1x00 *ucb);
++
++/*
++ * Which edges of the IRQ do you want to control today?
++ */
++#define UCB_RISING (1 << 0)
++#define UCB_FALLING (1 << 1)
++
++int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid);
++void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
++void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
++int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid);
++
++#endif
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch b/packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch
new file mode 100644
index 0000000000..c1aafef5e2
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch
@@ -0,0 +1,981 @@
+From 9e0d71c4a6247d88d3b772f6b05bcaa39711a937 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 19:31:25 +0100
+Subject: [PATCH 12/23] move ucb1200-ts driver
+
+Move the touchscreen driver to drivers/input/touchscreen
+where touchscreen drivers belong.
+
+Conflicts:
+
+ drivers/input/touchscreen/Makefile
+ drivers/mfd/Kconfig
+ drivers/mfd/Makefile
+
+Conflicts:
+
+ drivers/mfd/Kconfig
+ drivers/mfd/Makefile
+---
+ drivers/input/touchscreen/Kconfig | 7 +
+ drivers/input/touchscreen/Makefile | 1 +
+ drivers/input/touchscreen/ucb1x00-ts.c | 438 ++++++++++++++++++++++++++++++++
+ drivers/mfd/Kconfig | 3 -
+ drivers/mfd/Makefile | 3 +-
+ drivers/mfd/ucb1x00-ts.c | 438 --------------------------------
+ 6 files changed, 447 insertions(+), 443 deletions(-)
+ create mode 100644 drivers/input/touchscreen/ucb1x00-ts.c
+ delete mode 100644 drivers/mfd/ucb1x00-ts.c
+
+diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
+index 3d1ab8f..3ac8cd6 100644
+--- a/drivers/input/touchscreen/Kconfig
++++ b/drivers/input/touchscreen/Kconfig
+@@ -221,6 +221,13 @@ config TOUCHSCREEN_ATMEL_TSADCC
+ To compile this driver as a module, choose M here: the
+ module will be called atmel_tsadcc.
+
++config TOUCHSCREEN_UCB1200_TS
++ tristate "Philips UCB1200 touchscreen"
++ depends on MCP_UCB1200
++ help
++ This enabled support for the Pilips UCB1200 touchscreen interface
++ and compatible.
++
+ config TOUCHSCREEN_UCB1400
+ tristate "Philips UCB1400 touchscreen"
+ depends on AC97_BUS
+diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
+index 15cf290..77ba930 100644
+--- a/drivers/input/touchscreen/Makefile
++++ b/drivers/input/touchscreen/Makefile
+@@ -25,6 +25,7 @@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
++obj-$(CONFIG_TOUCHSCREEN_UCB1200_TS) += ucb1x00-ts.o
+ obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o
+ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o
+diff --git a/drivers/input/touchscreen/ucb1x00-ts.c b/drivers/input/touchscreen/ucb1x00-ts.c
+new file mode 100644
+index 0000000..b5feae9
+--- /dev/null
++++ b/drivers/input/touchscreen/ucb1x00-ts.c
+@@ -0,0 +1,438 @@
++/*
++ * Touchscreen driver for UCB1x00-based touchscreens
++ *
++ * Copyright (C) 2001 Russell King, All Rights Reserved.
++ * Copyright (C) 2005 Pavel Machek
++ *
++ * 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.
++ *
++ * 21-Jan-2002 <jco@ict.es> :
++ *
++ * Added support for synchronous A/D mode. This mode is useful to
++ * avoid noise induced in the touchpanel by the LCD, provided that
++ * the UCB1x00 has a valid LCD sync signal routed to its ADCSYNC pin.
++ * 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.
++ */
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/smp.h>
++#include <linux/sched.h>
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/string.h>
++#include <linux/input.h>
++#include <linux/device.h>
++#include <linux/freezer.h>
++#include <linux/slab.h>
++#include <linux/kthread.h>
++#include <linux/mfd/ucb1x00.h>
++
++#include <asm/dma.h>
++#include <mach/collie.h>
++#include <asm/mach-types.h>
++
++
++
++struct ucb1x00_ts {
++ struct input_dev *idev;
++ struct ucb1x00 *ucb;
++
++ wait_queue_head_t irq_wait;
++ struct task_struct *rtask;
++ u16 x_res;
++ u16 y_res;
++
++ unsigned int restart:1;
++ unsigned int adcsync:1;
++};
++
++static int adcsync;
++
++static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
++{
++ struct input_dev *idev = ts->idev;
++
++ input_report_abs(idev, ABS_X, x);
++ input_report_abs(idev, ABS_Y, y);
++ input_report_abs(idev, ABS_PRESSURE, pressure);
++ input_sync(idev);
++}
++
++static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
++{
++ struct input_dev *idev = ts->idev;
++
++ input_report_abs(idev, ABS_PRESSURE, 0);
++ input_sync(idev);
++}
++
++/*
++ * Switch to interrupt mode.
++ */
++static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
++{
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
++ UCB_TS_CR_MODE_INT);
++}
++
++/*
++ * Switch to pressure mode, and read pressure. We don't need to wait
++ * here, since both plates are being driven.
++ */
++static inline unsigned int ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
++{
++ if (machine_is_collie()) {
++ ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSPX_POW | UCB_TS_CR_TSMX_POW |
++ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
++
++ udelay(55);
++
++ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync);
++ } else {
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++
++ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
++ }
++}
++
++/*
++ * Switch to X position mode and measure Y plate. We switch the plate
++ * configuration in pressure mode, then switch to position mode. This
++ * gives a faster response time. Even so, we need to wait about 55us
++ * for things to stabilise.
++ */
++static inline unsigned int ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
++{
++ if (machine_is_collie())
++ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
++ else {
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ }
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
++
++ udelay(55);
++
++ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
++}
++
++/*
++ * Switch to Y position mode and measure X plate. We switch the plate
++ * configuration in pressure mode, then switch to position mode. This
++ * gives a faster response time. Even so, we need to wait about 55us
++ * for things to stabilise.
++ */
++static inline unsigned int ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
++{
++ if (machine_is_collie())
++ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
++ else {
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ }
++
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
++ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
++
++ udelay(55);
++
++ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync);
++}
++
++/*
++ * Switch to X plate resistance mode. Set MX to ground, PX to
++ * supply. Measure current.
++ */
++static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
++{
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
++}
++
++/*
++ * Switch to Y plate resistance mode. Set MY to ground, PY to
++ * supply. Measure current.
++ */
++static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
++{
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
++}
++
++static inline int ucb1x00_ts_pen_down(struct ucb1x00_ts *ts)
++{
++ unsigned int val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR);
++
++ if (machine_is_collie())
++ return (!(val & (UCB_TS_CR_TSPX_LOW)));
++ else
++ return (val & (UCB_TS_CR_TSPX_LOW | UCB_TS_CR_TSMX_LOW));
++}
++
++/*
++ * This is a RT kernel thread that handles the ADC accesses
++ * (mainly so we can use semaphores in the UCB1200 core code
++ * to serialise accesses to the ADC).
++ */
++static int ucb1x00_thread(void *_ts)
++{
++ struct ucb1x00_ts *ts = _ts;
++ DECLARE_WAITQUEUE(wait, current);
++ int valid = 0;
++
++ set_freezable();
++ add_wait_queue(&ts->irq_wait, &wait);
++ while (!kthread_should_stop()) {
++ unsigned int x, y, p;
++ signed long timeout;
++
++ ts->restart = 0;
++
++ ucb1x00_adc_enable(ts->ucb);
++
++ x = ucb1x00_ts_read_xpos(ts);
++ y = ucb1x00_ts_read_ypos(ts);
++ p = ucb1x00_ts_read_pressure(ts);
++
++ /*
++ * Switch back to interrupt mode.
++ */
++ ucb1x00_ts_mode_int(ts);
++ ucb1x00_adc_disable(ts->ucb);
++
++ msleep(10);
++
++ ucb1x00_enable(ts->ucb);
++
++
++ if (ucb1x00_ts_pen_down(ts)) {
++ set_current_state(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.
++ */
++ if (valid) {
++ ucb1x00_ts_event_release(ts);
++ valid = 0;
++ }
++
++ timeout = MAX_SCHEDULE_TIMEOUT;
++ } else {
++ ucb1x00_disable(ts->ucb);
++
++ /*
++ * Filtering is policy. Policy belongs in user
++ * space. We therefore leave it to user space
++ * to do any filtering they please.
++ */
++ if (!ts->restart) {
++ ucb1x00_ts_evt_add(ts, p, x, y);
++ valid = 1;
++ }
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeout = HZ / 100;
++ }
++
++ try_to_freeze();
++
++ schedule_timeout(timeout);
++ }
++
++ remove_wait_queue(&ts->irq_wait, &wait);
++
++ ts->rtask = NULL;
++ return 0;
++}
++
++/*
++ * We only detect touch screen _touches_ with this interrupt
++ * handler, and even then we just schedule our task.
++ */
++static void ucb1x00_ts_irq(int idx, void *id)
++{
++ struct ucb1x00_ts *ts = id;
++
++ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_FALLING);
++ wake_up(&ts->irq_wait);
++}
++
++static int ucb1x00_ts_open(struct input_dev *idev)
++{
++ struct ucb1x00_ts *ts = input_get_drvdata(idev);
++ int ret = 0;
++
++ BUG_ON(ts->rtask);
++
++ init_waitqueue_head(&ts->irq_wait);
++ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
++ if (ret < 0)
++ goto out;
++
++ /*
++ * If we do this at all, we should allow the user to
++ * measure and read the X and Y resistance at any time.
++ */
++ ucb1x00_adc_enable(ts->ucb);
++ ts->x_res = ucb1x00_ts_read_xres(ts);
++ ts->y_res = ucb1x00_ts_read_yres(ts);
++ ucb1x00_adc_disable(ts->ucb);
++
++ ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
++ if (!IS_ERR(ts->rtask)) {
++ ret = 0;
++ } else {
++ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
++ ts->rtask = NULL;
++ ret = -EFAULT;
++ }
++
++ out:
++ return ret;
++}
++
++/*
++ * Release touchscreen resources. Disable IRQs.
++ */
++static void ucb1x00_ts_close(struct input_dev *idev)
++{
++ struct ucb1x00_ts *ts = input_get_drvdata(idev);
++
++ if (ts->rtask)
++ kthread_stop(ts->rtask);
++
++ ucb1x00_enable(ts->ucb);
++ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
++ ucb1x00_disable(ts->ucb);
++}
++
++#ifdef CONFIG_PM
++static int ucb1x00_ts_resume(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_ts *ts = dev->priv;
++
++ if (ts->rtask != NULL) {
++ /*
++ * Restart the TS thread to ensure the
++ * TS interrupt mode is set up again
++ * after sleep.
++ */
++ ts->restart = 1;
++ wake_up(&ts->irq_wait);
++ }
++ return 0;
++}
++#else
++#define ucb1x00_ts_resume NULL
++#endif
++
++
++/*
++ * Initialisation.
++ */
++static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_ts *ts;
++ struct input_dev *idev;
++ int err;
++
++ ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
++ idev = input_allocate_device();
++ if (!ts || !idev) {
++ err = -ENOMEM;
++ goto fail;
++ }
++
++ ts->ucb = dev->ucb;
++ ts->idev = idev;
++ ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
++
++ idev->name = "Touchscreen panel";
++ idev->id.product = ts->ucb->id;
++ idev->open = ucb1x00_ts_open;
++ idev->close = ucb1x00_ts_close;
++
++ __set_bit(EV_ABS, idev->evbit);
++ __set_bit(ABS_X, idev->absbit);
++ __set_bit(ABS_Y, idev->absbit);
++ __set_bit(ABS_PRESSURE, idev->absbit);
++
++ input_set_drvdata(idev, ts);
++
++ err = input_register_device(idev);
++ if (err)
++ goto fail;
++
++ dev->priv = ts;
++
++ return 0;
++
++ fail:
++ input_free_device(idev);
++ kfree(ts);
++ return err;
++}
++
++static void ucb1x00_ts_remove(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_ts *ts = dev->priv;
++
++ input_unregister_device(ts->idev);
++ kfree(ts);
++}
++
++static struct ucb1x00_driver ucb1x00_ts_driver = {
++ .add = ucb1x00_ts_add,
++ .remove = ucb1x00_ts_remove,
++ .resume = ucb1x00_ts_resume,
++};
++
++static int __init ucb1x00_ts_init(void)
++{
++ return ucb1x00_register_driver(&ucb1x00_ts_driver);
++}
++
++static void __exit ucb1x00_ts_exit(void)
++{
++ ucb1x00_unregister_driver(&ucb1x00_ts_driver);
++}
++
++module_param(adcsync, int, 0444);
++module_init(ucb1x00_ts_init);
++module_exit(ucb1x00_ts_exit);
++
++MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
++MODULE_DESCRIPTION("UCB1x00 touchscreen driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
+index 2572773..bbc137d 100644
+--- a/drivers/mfd/Kconfig
++++ b/drivers/mfd/Kconfig
+@@ -172,8 +172,5 @@ config MCP_UCB1200
+ tristate "Support for UCB1200 / UCB1300"
+ depends on MCP
+
+-config MCP_UCB1200_TS
+- tristate "Touchscreen interface support"
+- depends on MCP_UCB1200 && INPUT
+
+ endmenu
+diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
+index 9a5ad8a..4981aff 100644
+--- a/drivers/mfd/Makefile
++++ b/drivers/mfd/Makefile
+@@ -24,11 +24,10 @@ obj-$(CONFIG_MFD_CORE) += mfd-core.o
+ obj-$(CONFIG_MCP) += mcp-core.o
+ obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
+-obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00-ts.o
+
+ ifeq ($(CONFIG_SA1100_ASSABET),y)
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
+ endif
+ obj-$(CONFIG_UCB1400_CORE) += ucb1400_core.o
+
+-obj-$(CONFIG_PMIC_DA903X) += da903x.o
+\ No newline at end of file
++obj-$(CONFIG_PMIC_DA903X) += da903x.o
+diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c
+deleted file mode 100644
+index b5feae9..0000000
+--- a/drivers/mfd/ucb1x00-ts.c
++++ /dev/null
+@@ -1,438 +0,0 @@
+-/*
+- * Touchscreen driver for UCB1x00-based touchscreens
+- *
+- * Copyright (C) 2001 Russell King, All Rights Reserved.
+- * Copyright (C) 2005 Pavel Machek
+- *
+- * 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.
+- *
+- * 21-Jan-2002 <jco@ict.es> :
+- *
+- * Added support for synchronous A/D mode. This mode is useful to
+- * avoid noise induced in the touchpanel by the LCD, provided that
+- * the UCB1x00 has a valid LCD sync signal routed to its ADCSYNC pin.
+- * 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.
+- */
+-#include <linux/module.h>
+-#include <linux/moduleparam.h>
+-#include <linux/init.h>
+-#include <linux/smp.h>
+-#include <linux/sched.h>
+-#include <linux/completion.h>
+-#include <linux/delay.h>
+-#include <linux/string.h>
+-#include <linux/input.h>
+-#include <linux/device.h>
+-#include <linux/freezer.h>
+-#include <linux/slab.h>
+-#include <linux/kthread.h>
+-#include <linux/mfd/ucb1x00.h>
+-
+-#include <asm/dma.h>
+-#include <mach/collie.h>
+-#include <asm/mach-types.h>
+-
+-
+-
+-struct ucb1x00_ts {
+- struct input_dev *idev;
+- struct ucb1x00 *ucb;
+-
+- wait_queue_head_t irq_wait;
+- struct task_struct *rtask;
+- u16 x_res;
+- u16 y_res;
+-
+- unsigned int restart:1;
+- unsigned int adcsync:1;
+-};
+-
+-static int adcsync;
+-
+-static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
+-{
+- struct input_dev *idev = ts->idev;
+-
+- input_report_abs(idev, ABS_X, x);
+- input_report_abs(idev, ABS_Y, y);
+- input_report_abs(idev, ABS_PRESSURE, pressure);
+- input_sync(idev);
+-}
+-
+-static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
+-{
+- struct input_dev *idev = ts->idev;
+-
+- input_report_abs(idev, ABS_PRESSURE, 0);
+- input_sync(idev);
+-}
+-
+-/*
+- * Switch to interrupt mode.
+- */
+-static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
+-{
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
+- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
+- UCB_TS_CR_MODE_INT);
+-}
+-
+-/*
+- * Switch to pressure mode, and read pressure. We don't need to wait
+- * here, since both plates are being driven.
+- */
+-static inline unsigned int ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
+-{
+- if (machine_is_collie()) {
+- ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSPX_POW | UCB_TS_CR_TSMX_POW |
+- UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
+-
+- udelay(55);
+-
+- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync);
+- } else {
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
+- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+-
+- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
+- }
+-}
+-
+-/*
+- * Switch to X position mode and measure Y plate. We switch the plate
+- * configuration in pressure mode, then switch to position mode. This
+- * gives a faster response time. Even so, we need to wait about 55us
+- * for things to stabilise.
+- */
+-static inline unsigned int ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
+-{
+- if (machine_is_collie())
+- ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
+- else {
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+- }
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
+- UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
+-
+- udelay(55);
+-
+- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
+-}
+-
+-/*
+- * Switch to Y position mode and measure X plate. We switch the plate
+- * configuration in pressure mode, then switch to position mode. This
+- * gives a faster response time. Even so, we need to wait about 55us
+- * for things to stabilise.
+- */
+-static inline unsigned int ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
+-{
+- if (machine_is_collie())
+- ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
+- else {
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+- }
+-
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
+- UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
+-
+- udelay(55);
+-
+- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync);
+-}
+-
+-/*
+- * Switch to X plate resistance mode. Set MX to ground, PX to
+- * supply. Measure current.
+- */
+-static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
+-{
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+- return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
+-}
+-
+-/*
+- * Switch to Y plate resistance mode. Set MY to ground, PY to
+- * supply. Measure current.
+- */
+-static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
+-{
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
+- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+- return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
+-}
+-
+-static inline int ucb1x00_ts_pen_down(struct ucb1x00_ts *ts)
+-{
+- unsigned int val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR);
+-
+- if (machine_is_collie())
+- return (!(val & (UCB_TS_CR_TSPX_LOW)));
+- else
+- return (val & (UCB_TS_CR_TSPX_LOW | UCB_TS_CR_TSMX_LOW));
+-}
+-
+-/*
+- * This is a RT kernel thread that handles the ADC accesses
+- * (mainly so we can use semaphores in the UCB1200 core code
+- * to serialise accesses to the ADC).
+- */
+-static int ucb1x00_thread(void *_ts)
+-{
+- struct ucb1x00_ts *ts = _ts;
+- DECLARE_WAITQUEUE(wait, current);
+- int valid = 0;
+-
+- set_freezable();
+- add_wait_queue(&ts->irq_wait, &wait);
+- while (!kthread_should_stop()) {
+- unsigned int x, y, p;
+- signed long timeout;
+-
+- ts->restart = 0;
+-
+- ucb1x00_adc_enable(ts->ucb);
+-
+- x = ucb1x00_ts_read_xpos(ts);
+- y = ucb1x00_ts_read_ypos(ts);
+- p = ucb1x00_ts_read_pressure(ts);
+-
+- /*
+- * Switch back to interrupt mode.
+- */
+- ucb1x00_ts_mode_int(ts);
+- ucb1x00_adc_disable(ts->ucb);
+-
+- msleep(10);
+-
+- ucb1x00_enable(ts->ucb);
+-
+-
+- if (ucb1x00_ts_pen_down(ts)) {
+- set_current_state(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.
+- */
+- if (valid) {
+- ucb1x00_ts_event_release(ts);
+- valid = 0;
+- }
+-
+- timeout = MAX_SCHEDULE_TIMEOUT;
+- } else {
+- ucb1x00_disable(ts->ucb);
+-
+- /*
+- * Filtering is policy. Policy belongs in user
+- * space. We therefore leave it to user space
+- * to do any filtering they please.
+- */
+- if (!ts->restart) {
+- ucb1x00_ts_evt_add(ts, p, x, y);
+- valid = 1;
+- }
+-
+- set_current_state(TASK_INTERRUPTIBLE);
+- timeout = HZ / 100;
+- }
+-
+- try_to_freeze();
+-
+- schedule_timeout(timeout);
+- }
+-
+- remove_wait_queue(&ts->irq_wait, &wait);
+-
+- ts->rtask = NULL;
+- return 0;
+-}
+-
+-/*
+- * We only detect touch screen _touches_ with this interrupt
+- * handler, and even then we just schedule our task.
+- */
+-static void ucb1x00_ts_irq(int idx, void *id)
+-{
+- struct ucb1x00_ts *ts = id;
+-
+- ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_FALLING);
+- wake_up(&ts->irq_wait);
+-}
+-
+-static int ucb1x00_ts_open(struct input_dev *idev)
+-{
+- struct ucb1x00_ts *ts = input_get_drvdata(idev);
+- int ret = 0;
+-
+- BUG_ON(ts->rtask);
+-
+- init_waitqueue_head(&ts->irq_wait);
+- ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
+- if (ret < 0)
+- goto out;
+-
+- /*
+- * If we do this at all, we should allow the user to
+- * measure and read the X and Y resistance at any time.
+- */
+- ucb1x00_adc_enable(ts->ucb);
+- ts->x_res = ucb1x00_ts_read_xres(ts);
+- ts->y_res = ucb1x00_ts_read_yres(ts);
+- ucb1x00_adc_disable(ts->ucb);
+-
+- ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
+- if (!IS_ERR(ts->rtask)) {
+- ret = 0;
+- } else {
+- ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
+- ts->rtask = NULL;
+- ret = -EFAULT;
+- }
+-
+- out:
+- return ret;
+-}
+-
+-/*
+- * Release touchscreen resources. Disable IRQs.
+- */
+-static void ucb1x00_ts_close(struct input_dev *idev)
+-{
+- struct ucb1x00_ts *ts = input_get_drvdata(idev);
+-
+- if (ts->rtask)
+- kthread_stop(ts->rtask);
+-
+- ucb1x00_enable(ts->ucb);
+- ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
+- ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
+- ucb1x00_disable(ts->ucb);
+-}
+-
+-#ifdef CONFIG_PM
+-static int ucb1x00_ts_resume(struct ucb1x00_dev *dev)
+-{
+- struct ucb1x00_ts *ts = dev->priv;
+-
+- if (ts->rtask != NULL) {
+- /*
+- * Restart the TS thread to ensure the
+- * TS interrupt mode is set up again
+- * after sleep.
+- */
+- ts->restart = 1;
+- wake_up(&ts->irq_wait);
+- }
+- return 0;
+-}
+-#else
+-#define ucb1x00_ts_resume NULL
+-#endif
+-
+-
+-/*
+- * Initialisation.
+- */
+-static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
+-{
+- struct ucb1x00_ts *ts;
+- struct input_dev *idev;
+- int err;
+-
+- ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
+- idev = input_allocate_device();
+- if (!ts || !idev) {
+- err = -ENOMEM;
+- goto fail;
+- }
+-
+- ts->ucb = dev->ucb;
+- ts->idev = idev;
+- ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
+-
+- idev->name = "Touchscreen panel";
+- idev->id.product = ts->ucb->id;
+- idev->open = ucb1x00_ts_open;
+- idev->close = ucb1x00_ts_close;
+-
+- __set_bit(EV_ABS, idev->evbit);
+- __set_bit(ABS_X, idev->absbit);
+- __set_bit(ABS_Y, idev->absbit);
+- __set_bit(ABS_PRESSURE, idev->absbit);
+-
+- input_set_drvdata(idev, ts);
+-
+- err = input_register_device(idev);
+- if (err)
+- goto fail;
+-
+- dev->priv = ts;
+-
+- return 0;
+-
+- fail:
+- input_free_device(idev);
+- kfree(ts);
+- return err;
+-}
+-
+-static void ucb1x00_ts_remove(struct ucb1x00_dev *dev)
+-{
+- struct ucb1x00_ts *ts = dev->priv;
+-
+- input_unregister_device(ts->idev);
+- kfree(ts);
+-}
+-
+-static struct ucb1x00_driver ucb1x00_ts_driver = {
+- .add = ucb1x00_ts_add,
+- .remove = ucb1x00_ts_remove,
+- .resume = ucb1x00_ts_resume,
+-};
+-
+-static int __init ucb1x00_ts_init(void)
+-{
+- return ucb1x00_register_driver(&ucb1x00_ts_driver);
+-}
+-
+-static void __exit ucb1x00_ts_exit(void)
+-{
+- ucb1x00_unregister_driver(&ucb1x00_ts_driver);
+-}
+-
+-module_param(adcsync, int, 0444);
+-module_init(ucb1x00_ts_init);
+-module_exit(ucb1x00_ts_exit);
+-
+-MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
+-MODULE_DESCRIPTION("UCB1x00 touchscreen driver");
+-MODULE_LICENSE("GPL");
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch b/packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch
new file mode 100644
index 0000000000..92159d5649
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch
@@ -0,0 +1,528 @@
+From 40787f3e48d1cc1e63dc5dd6aeda720f688fc05e Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 20 Oct 2008 17:44:23 +0200
+Subject: [PATCH 13/23] add collie touchscreen driver
+
+---
+ drivers/input/touchscreen/Kconfig | 6 +
+ drivers/input/touchscreen/Makefile | 1 +
+ drivers/input/touchscreen/collie-ts.c | 449 +++++++++++++++++++++++++++++++++
+ drivers/mfd/Makefile | 1 -
+ include/linux/mfd/ucb1x00.h | 3 +
+ 5 files changed, 459 insertions(+), 1 deletions(-)
+ create mode 100644 drivers/input/touchscreen/collie-ts.c
+
+diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
+index 3ac8cd6..a9f89ed 100644
+--- a/drivers/input/touchscreen/Kconfig
++++ b/drivers/input/touchscreen/Kconfig
+@@ -228,6 +228,12 @@ config TOUCHSCREEN_UCB1200_TS
+ This enabled support for the Pilips UCB1200 touchscreen interface
+ and compatible.
+
++config TOUCHSCREEN_COLLIE_TS
++ tristate "Touchscreen collie support"
++ depends on MCP_UCB1200 && INPUT && !MCP_UCB1200_TS
++ help
++ Driver for touchscreen on collie - sharp sl-5500.
++
+ config TOUCHSCREEN_UCB1400
+ tristate "Philips UCB1400 touchscreen"
+ depends on AC97_BUS
+diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
+index 77ba930..77715cd 100644
+--- a/drivers/input/touchscreen/Makefile
++++ b/drivers/input/touchscreen/Makefile
+@@ -26,6 +26,7 @@ obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
+ obj-$(CONFIG_TOUCHSCREEN_UCB1200_TS) += ucb1x00-ts.o
++obj-$(CONFIG_TOUCHSCREEN_COLLIE_TS) += collie-ts.o
+ obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o
+ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o
+diff --git a/drivers/input/touchscreen/collie-ts.c b/drivers/input/touchscreen/collie-ts.c
+new file mode 100644
+index 0000000..c7c0272
+--- /dev/null
++++ b/drivers/input/touchscreen/collie-ts.c
+@@ -0,0 +1,449 @@
++/*
++ * Touchscreen driver for UCB1x00-based touchscreens
++ *
++ * Copyright (C) 2001 Russell King, All Rights Reserved.
++ * Copyright (C) 2005 Pavel Machek
++ *
++ * 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.
++ *
++ * 21-Jan-2002 <jco@ict.es> :
++ *
++ * Added support for synchronous A/D mode. This mode is useful to
++ * avoid noise induced in the touchpanel by the LCD, provided that
++ * the UCB1x00 has a valid LCD sync signal routed to its ADCSYNC pin.
++ * 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.
++ */
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/smp.h>
++#include <linux/smp_lock.h>
++#include <linux/sched.h>
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/string.h>
++#include <linux/input.h>
++#include <linux/device.h>
++#include <linux/freezer.h>
++#include <linux/slab.h>
++#include <linux/kthread.h>
++#include <linux/semaphore.h>
++
++#include <mach/dma.h>
++#include <mach/collie.h>
++#include <asm/mach-types.h>
++
++#include <linux/mfd/ucb1x00.h>
++
++struct ucb1x00_ts {
++ struct input_dev *idev;
++ struct ucb1x00 *ucb;
++
++ wait_queue_head_t irq_wait;
++ struct task_struct *rtask;
++ u16 x_res;
++ u16 y_res;
++
++ unsigned int adcsync:1;
++};
++
++static int adcsync;
++
++/**********************************
++
++ ................
++ . . = 340
++ . .
++ . ^.
++ . ^.
++ . ^.
++ . ^.
++ . .
++ . X. = 10
++ . <<<<<<<< Y .
++ ................
++ . Sharp =200
++ . .
++ . - O - .
++ . .
++ ................
++
++**********************************/
++
++
++static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
++{
++ struct input_dev *idev = ts->idev;
++
++ input_report_abs(idev, ABS_X, x);
++ input_report_abs(idev, ABS_Y, y);
++ input_report_abs(idev, ABS_PRESSURE, pressure);
++ input_report_key(idev, BTN_TOUCH, 1);
++ input_sync(idev);
++}
++
++static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
++{
++ struct input_dev *idev = ts->idev;
++
++ input_report_abs(idev, ABS_PRESSURE, 0);
++ input_report_key(idev, BTN_TOUCH, 0);
++ input_sync(idev);
++}
++
++/*
++ * Switch to interrupt mode. This set touchscreen to interrupt
++ * mode, so that chip is able to send interrupt.
++ */
++static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
++{
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
++ UCB_TS_CR_MODE_INT);
++}
++
++/*
++ * Switch to pressure mode, and read pressure. We don't need to wait
++ * here, since both plates are being driven.
++ *
++ * set_read_pressure() in sharp code
++ */
++static inline void ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
++{
++ ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSPX_POW | UCB_TS_CR_TSMX_POW |
++ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
++
++ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
++ UCB_ADC_INP_AD2 |
++ UCB_ADC_SYNC_ENA);
++ udelay(100);
++ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
++ UCB_ADC_INP_AD2 |
++ UCB_ADC_SYNC_ENA | UCB_ADC_START);
++}
++
++/*
++ * Switch to X position mode and measure Y plate. We switch the plate
++ * configuration in pressure mode, then switch to position mode. This
++ * gives a faster response time. Even so, we need to wait about 55us
++ * for things to stabilise.
++ */
++static inline void ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
++{
++ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
++
++
++ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
++ UCB_ADC_INP_TSPY | UCB_ADC_SYNC_ENA);
++ udelay(100);
++ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
++ UCB_ADC_INP_TSPY | UCB_ADC_SYNC_ENA |
++ UCB_ADC_START);
++}
++
++/*
++ * Switch to Y position mode and measure X plate. We switch the plate
++ * configuration in pressure mode, then switch to position mode. This
++ * gives a faster response time. Even so, we need to wait about 55us
++ * for things to stabilise.
++ */
++static inline void ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
++{
++ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
++
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
++ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
++
++
++ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
++ UCB_ADC_INP_TSPX | UCB_ADC_SYNC_ENA);
++ udelay(100);
++ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
++ UCB_ADC_INP_TSPX | UCB_ADC_SYNC_ENA |
++ UCB_ADC_START);
++}
++
++/*
++ * Switch to X plate resistance mode. Set MX to ground, PX to
++ * supply. Measure current.
++ */
++static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
++{
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
++}
++
++/*
++ * Switch to Y plate resistance mode. Set MY to ground, PY to
++ * supply. Measure current.
++ */
++static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
++{
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
++ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
++ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
++ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
++}
++
++/*
++ * This is a RT kernel thread that handles the ADC accesses
++ * (mainly so we can use semaphores in the UCB1200 core code
++ * to serialise accesses to the ADC).
++ */
++static int ucb1x00_thread(void *_ts)
++{
++ struct ucb1x00_ts *ts = _ts;
++ struct task_struct *tsk = current;
++ DECLARE_WAITQUEUE(wait, tsk);
++ int state;
++
++ /*
++ * We could run as a real-time thread. However, thus far
++ * this doesn't seem to be necessary.
++ */
++
++ add_wait_queue(&ts->irq_wait, &wait);
++
++ while (!kthread_should_stop()) {
++ unsigned int data[3];
++
++ for (state=0; state<3; state++) {
++
++ ucb1x00_adc_enable(ts->ucb);
++ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_ADC, UCB_FALLING);
++ switch (state) {
++ /* Order matters here; last measurement seems to be more noisy then the
++ rest, and we care about pressure least */
++ case 2: ucb1x00_ts_read_pressure(ts);
++ break;
++ case 0: ucb1x00_ts_read_ypos(ts);
++ break;
++ case 1: ucb1x00_ts_read_xpos(ts);
++ break;
++ }
++ /* wait for adc */
++ try_to_freeze();
++ schedule_timeout(1000 * HZ);
++ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_ADC, UCB_FALLING);
++ data[state] = UCB_ADC_DAT(ucb1x00_reg_read(ts->ucb, UCB_ADC_DATA));
++ ucb1x00_adc_disable(ts->ucb);
++ }
++
++ /* If not pressed any more, try to sleep! */
++ if (data[2] < 300) {
++ set_task_state(tsk, TASK_INTERRUPTIBLE);
++ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_RISING);
++ ucb1x00_ts_mode_int(ts);
++ ucb1x00_disable(ts->ucb);
++ ucb1x00_ts_event_release(ts);
++ try_to_freeze();
++ schedule_timeout(1000 * HZ);
++ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_RISING);
++ ucb1x00_enable(ts->ucb);
++ } else {
++ ucb1x00_ts_evt_add(ts, data[2], data[1], data[0]);
++ }
++ ucb1x00_disable(ts->ucb);
++ msleep(20);
++ ucb1x00_enable(ts->ucb);
++ }
++
++ remove_wait_queue(&ts->irq_wait, &wait);
++
++ ts->rtask = NULL;
++ return 0;
++}
++
++/*
++ * We only detect touch screen _touches_ with this interrupt
++ * handler, and even then we just schedule our task.
++ */
++static void ucb1x00_ts_irq(int idx, void *id)
++{
++ struct ucb1x00_ts *ts = id;
++ wake_up(&ts->irq_wait);
++}
++
++static void ucb1x00_adc_irq(int idx, void *id)
++{
++ struct ucb1x00_ts *ts = id;
++ wake_up(&ts->irq_wait);
++}
++
++static int ucb1x00_ts_open(struct input_dev *idev)
++{
++ struct ucb1x00_ts *ts = input_get_drvdata(idev);
++ int ret = 0;
++
++ BUG_ON(ts->rtask);
++
++ init_waitqueue_head(&ts->irq_wait);
++
++ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
++ if (ret < 0)
++ return ret;
++
++ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_ADC, ucb1x00_adc_irq, ts);
++ if (ret < 0) {
++ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
++ return ret;
++ }
++
++ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_RISING);
++
++ /*
++ * If we do this at all, we should allow the user to
++ * measure and read the X and Y resistance at any time.
++ */
++ ucb1x00_adc_enable(ts->ucb);
++ ts->x_res = ucb1x00_ts_read_xres(ts);
++ ts->y_res = ucb1x00_ts_read_yres(ts);
++ ucb1x00_adc_disable(ts->ucb);
++
++ if (machine_is_collie()) {
++ ucb1x00_io_set_dir(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
++ }
++
++ ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
++ if (!IS_ERR(ts->rtask)) {
++ ret = 0;
++ } else {
++ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
++ ts->rtask = NULL;
++ ret = -EFAULT;
++ }
++
++ return ret;
++}
++
++/*
++ * Release touchscreen resources. Disable IRQs.
++ */
++static void ucb1x00_ts_close(struct input_dev *idev)
++{
++ struct ucb1x00_ts *ts = input_get_drvdata(idev);
++
++ if (ts->rtask)
++ kthread_stop(ts->rtask);
++
++ ucb1x00_enable(ts->ucb);
++ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
++ ucb1x00_free_irq(ts->ucb, UCB_IRQ_ADC, ts);
++ ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
++ ucb1x00_disable(ts->ucb);
++}
++
++#ifdef CONFIG_PM
++static int ucb1x00_ts_resume(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_ts *ts = dev->priv;
++
++ if (ts->rtask != NULL) {
++ /*
++ * Restart the TS thread to ensure the
++ * TS interrupt mode is set up again
++ * after sleep.
++ */
++ wake_up(&ts->irq_wait);
++ }
++ return 0;
++}
++#else
++#define ucb1x00_ts_resume NULL
++#endif
++
++
++/*
++ * Initialisation.
++ */
++static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_ts *ts;
++ struct input_dev *idev;
++ int err;
++
++ ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
++ idev = input_allocate_device();
++ if (!ts || !idev) {
++ err = -ENOMEM;
++ goto fail;
++ }
++
++ ts->ucb = dev->ucb;
++ ts->idev = idev;
++ ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
++
++ input_set_drvdata(idev, ts);
++ idev->name = "Touchscreen panel";
++ idev->id.product = ts->ucb->id;
++ idev->open = ucb1x00_ts_open;
++ idev->close = ucb1x00_ts_close;
++
++ __set_bit(EV_ABS, idev->evbit);
++ __set_bit(ABS_X, idev->absbit);
++ __set_bit(ABS_Y, idev->absbit);
++ __set_bit(ABS_PRESSURE, idev->absbit);
++
++ input_set_abs_params(ts->idev, ABS_X, 0, 450, 0, 0);
++ input_set_abs_params(ts->idev, ABS_Y, 200, 800, 0, 0);
++ input_set_abs_params(ts->idev, ABS_PRESSURE, 400, 800, 0, 0);
++
++
++ err = input_register_device(idev);
++ if (err)
++ goto fail;
++
++ dev->priv = ts;
++
++ return 0;
++
++ fail:
++ input_free_device(idev);
++ kfree(ts);
++ return err;
++}
++
++static void ucb1x00_ts_remove(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_ts *ts = dev->priv;
++
++ input_unregister_device(ts->idev);
++ kfree(ts);
++}
++
++static struct ucb1x00_driver ucb1x00_ts_driver = {
++ .add = ucb1x00_ts_add,
++ .remove = ucb1x00_ts_remove,
++ .resume = ucb1x00_ts_resume,
++};
++
++static int __init ucb1x00_ts_init(void)
++{
++ return ucb1x00_register_driver(&ucb1x00_ts_driver);
++}
++
++static void __exit ucb1x00_ts_exit(void)
++{
++ ucb1x00_unregister_driver(&ucb1x00_ts_driver);
++}
++
++module_param(adcsync, int, 0444);
++module_init(ucb1x00_ts_init);
++module_exit(ucb1x00_ts_exit);
++
++MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
++MODULE_DESCRIPTION("UCB1x00 touchscreen driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
+index 4981aff..7bbba6e 100644
+--- a/drivers/mfd/Makefile
++++ b/drivers/mfd/Makefile
+@@ -24,7 +24,6 @@ obj-$(CONFIG_MFD_CORE) += mfd-core.o
+ obj-$(CONFIG_MCP) += mcp-core.o
+ obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
+-
+ ifeq ($(CONFIG_SA1100_ASSABET),y)
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
+ endif
+diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
+index eac3463..70eb763 100644
+--- a/include/linux/mfd/ucb1x00.h
++++ b/include/linux/mfd/ucb1x00.h
+@@ -35,7 +35,10 @@
+ #define UCB_IE_TCLIP (1 << 14)
+ #define UCB_IE_ACLIP (1 << 15)
+
++/* UCB1200 irqs */
++#define UCB_IRQ_ADC 11
+ #define UCB_IRQ_TSPX 12
++#define UCB_IRQ_TSMX 13
+
+ #define UCB_TC_A 0x05
+ #define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch b/packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch
new file mode 100644
index 0000000000..4d2828e53a
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch
@@ -0,0 +1,27 @@
+From 047e4432e024fbec1e308e3c496822f52ce63ecb Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 13:21:42 +0100
+Subject: [PATCH 14/23] collie: locomo-led change default trigger
+
+Collie uses now the powersupply framework. Change the
+default led-trigger of locomo-led to reflect that.
+---
+ drivers/leds/leds-locomo.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c
+index 5d91362..1f7c10f 100644
+--- a/drivers/leds/leds-locomo.c
++++ b/drivers/leds/leds-locomo.c
+@@ -44,7 +44,7 @@ static void locomoled_brightness_set1(struct led_classdev *led_cdev,
+
+ static struct led_classdev locomo_led0 = {
+ .name = "locomo:amber:charge",
+- .default_trigger = "sharpsl-charge",
++ .default_trigger = "main-battery-charging",
+ .brightness_set = locomoled_brightness_set0,
+ };
+
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch b/packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch
new file mode 100644
index 0000000000..99d0314a46
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch
@@ -0,0 +1,43 @@
+From 87e4ecb2702d0d1a800da0ba81cd867b0f150410 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Mon, 9 Feb 2009 23:14:44 +0100
+Subject: [PATCH 15/23] SA1100: make gpio_to_irq and reverse a macro
+
+The function can't be used for static initialisations so
+convert them to macros.
+---
+ arch/arm/mach-sa1100/include/mach/gpio.h | 19 ++++---------------
+ 1 files changed, 4 insertions(+), 15 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/include/mach/gpio.h b/arch/arm/mach-sa1100/include/mach/gpio.h
+index 582a0c9..7befc10 100644
+--- a/arch/arm/mach-sa1100/include/mach/gpio.h
++++ b/arch/arm/mach-sa1100/include/mach/gpio.h
+@@ -49,20 +49,9 @@ static inline void gpio_set_value(unsigned gpio, int value)
+
+ #define gpio_cansleep __gpio_cansleep
+
+-static inline unsigned gpio_to_irq(unsigned gpio)
+-{
+- if (gpio < 11)
+- return IRQ_GPIO0 + gpio;
+- else
+- return IRQ_GPIO11 - 11 + gpio;
+-}
+-
+-static inline unsigned irq_to_gpio(unsigned irq)
+-{
+- if (irq < IRQ_GPIO11_27)
+- return irq - IRQ_GPIO0;
+- else
+- return irq - IRQ_GPIO11 + 11;
+-}
++#define gpio_to_irq(gpio) ((gpio < 11) ? (IRQ_GPIO0 + gpio) : \
++ (IRQ_GPIO11 - 11 + gpio))
++#define irq_to_gpio(irq) ((irq < IRQ_GPIO11_27) ? (irq - IRQ_GPIO0) : \
++ (irq - IRQ_GPIO11 + 11))
+
+ #endif
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch b/packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch
new file mode 100644
index 0000000000..aab08a66c9
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch
@@ -0,0 +1,242 @@
+From 1de1b5c2860d889a9422f187ad90d8e38b2431fd Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 14:50:56 +0100
+Subject: [PATCH 16/23] add gpiolib support to ucb1x00
+
+The old access methods to the gpios will be removed when
+all users has been converted. (mainly ucb1x00-ts)
+---
+ arch/arm/mach-sa1100/include/mach/mcp.h | 1 +
+ drivers/mfd/mcp-sa11x0.c | 1 +
+ drivers/mfd/ucb1x00-core.c | 87 ++++++++++++++++++++++++++++++-
+ include/linux/mfd/mcp.h | 1 +
+ include/linux/mfd/ucb1x00.h | 3 +
+ 5 files changed, 91 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/include/mach/mcp.h b/arch/arm/mach-sa1100/include/mach/mcp.h
+index fb8b09a..ed1a331 100644
+--- a/arch/arm/mach-sa1100/include/mach/mcp.h
++++ b/arch/arm/mach-sa1100/include/mach/mcp.h
+@@ -16,6 +16,7 @@ struct mcp_plat_data {
+ u32 mccr0;
+ u32 mccr1;
+ unsigned int sclk_rate;
++ int gpio_base;
+ };
+
+ #endif
+diff --git a/drivers/mfd/mcp-sa11x0.c b/drivers/mfd/mcp-sa11x0.c
+index 88c81cf..dfa59eb 100644
+--- a/drivers/mfd/mcp-sa11x0.c
++++ b/drivers/mfd/mcp-sa11x0.c
+@@ -163,6 +163,7 @@ static int mcp_sa11x0_probe(struct platform_device *pdev)
+ mcp->dma_audio_wr = DMA_Ser4MCP0Wr;
+ mcp->dma_telco_rd = DMA_Ser4MCP1Rd;
+ mcp->dma_telco_wr = DMA_Ser4MCP1Wr;
++ mcp->gpio_base = data->gpio_base;
+
+ platform_set_drvdata(pdev, mcp);
+
+diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
+index bc2c1ba..b9c3f3d 100644
+--- a/drivers/mfd/ucb1x00-core.c
++++ b/drivers/mfd/ucb1x00-core.c
+@@ -25,11 +25,11 @@
+ #include <linux/device.h>
+ #include <linux/mutex.h>
+ #include <linux/mfd/ucb1x00.h>
++#include <linux/gpio.h>
+
+ #include <asm/dma.h>
+ #include <mach/hardware.h>
+
+-
+ static DEFINE_MUTEX(ucb1x00_mutex);
+ static LIST_HEAD(ucb1x00_drivers);
+ static LIST_HEAD(ucb1x00_devices);
+@@ -107,6 +107,60 @@ unsigned int ucb1x00_io_read(struct ucb1x00 *ucb)
+ return ucb1x00_reg_read(ucb, UCB_IO_DATA);
+ }
+
++static void ucb1x00_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
++{
++ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
++ unsigned long flags;
++
++ spin_lock_irqsave(&ucb->io_lock, flags);
++ if (value)
++ ucb->io_out |= 1 << offset;
++ else
++ ucb->io_out &= ~(1 << offset);
++
++ ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
++ spin_unlock_irqrestore(&ucb->io_lock, flags);
++}
++
++static int ucb1x00_gpio_get(struct gpio_chip *chip, unsigned offset)
++{
++ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
++ return ucb1x00_reg_read(ucb, UCB_IO_DATA) & (1 << offset);
++}
++
++static int ucb1x00_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
++{
++ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
++ unsigned long flags;
++
++ spin_lock_irqsave(&ucb->io_lock, flags);
++ ucb->io_dir &= ~(1 << offset);
++ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
++ spin_unlock_irqrestore(&ucb->io_lock, flags);
++
++ return 0;
++}
++
++static int ucb1x00_gpio_direction_output(struct gpio_chip *chip, unsigned offset
++ , int value)
++{
++ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
++ unsigned long flags;
++
++ spin_lock_irqsave(&ucb->io_lock, flags);
++ ucb->io_dir |= (1 << offset);
++ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
++
++ if (value)
++ ucb->io_out |= 1 << offset;
++ else
++ ucb->io_out &= ~(1 << offset);
++ ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
++ spin_unlock_irqrestore(&ucb->io_lock, flags);
++
++ return 0;
++}
++
+ /*
+ * UCB1300 data sheet says we must:
+ * 1. enable ADC => 5us (including reference startup time)
+@@ -475,6 +529,7 @@ static int ucb1x00_probe(struct mcp *mcp)
+ struct ucb1x00_driver *drv;
+ unsigned int id;
+ int ret = -ENODEV;
++ int temp;
+
+ mcp_enable(mcp);
+ id = mcp_reg_read(mcp, UCB_ID);
+@@ -507,12 +562,27 @@ static int ucb1x00_probe(struct mcp *mcp)
+ goto err_free;
+ }
+
++ ucb->gpio.base = -1;
++ if (mcp->gpio_base != 0) {
++ ucb->gpio.label = dev_name(&ucb->dev);
++ ucb->gpio.base = mcp->gpio_base;
++ ucb->gpio.ngpio = 10;
++ ucb->gpio.set = ucb1x00_gpio_set;
++ ucb->gpio.get = ucb1x00_gpio_get;
++ ucb->gpio.direction_input = ucb1x00_gpio_direction_input;
++ ucb->gpio.direction_output = ucb1x00_gpio_direction_output;
++ ret = gpiochip_add(&ucb->gpio);
++ if (ret)
++ goto err_free;
++ } else
++ dev_info(&ucb->dev, "gpio_base not set so no gpiolib support");
++
+ ret = request_irq(ucb->irq, ucb1x00_irq, IRQF_TRIGGER_RISING,
+ "UCB1x00", ucb);
+ if (ret) {
+ printk(KERN_ERR "ucb1x00: unable to grab irq%d: %d\n",
+ ucb->irq, ret);
+- goto err_free;
++ goto err_gpio;
+ }
+
+ mcp_set_drvdata(mcp, ucb);
+@@ -521,6 +591,7 @@ static int ucb1x00_probe(struct mcp *mcp)
+ if (ret)
+ goto err_irq;
+
++
+ INIT_LIST_HEAD(&ucb->devs);
+ mutex_lock(&ucb1x00_mutex);
+ list_add(&ucb->node, &ucb1x00_devices);
+@@ -528,10 +599,14 @@ static int ucb1x00_probe(struct mcp *mcp)
+ ucb1x00_add_dev(ucb, drv);
+ }
+ mutex_unlock(&ucb1x00_mutex);
++
+ goto out;
+
+ err_irq:
+ free_irq(ucb->irq, ucb);
++ err_gpio:
++ if (ucb->gpio.base != -1)
++ temp = gpiochip_remove(&ucb->gpio);
+ err_free:
+ kfree(ucb);
+ err_disable:
+@@ -544,6 +619,7 @@ static void ucb1x00_remove(struct mcp *mcp)
+ {
+ struct ucb1x00 *ucb = mcp_get_drvdata(mcp);
+ struct list_head *l, *n;
++ int ret;
+
+ mutex_lock(&ucb1x00_mutex);
+ list_del(&ucb->node);
+@@ -553,6 +629,12 @@ static void ucb1x00_remove(struct mcp *mcp)
+ }
+ mutex_unlock(&ucb1x00_mutex);
+
++ if (ucb->gpio.base != -1) {
++ ret = gpiochip_remove(&ucb->gpio);
++ if (ret)
++ dev_err(&ucb->dev, "Can't remove gpio chip: %d\n", ret);
++ }
++
+ free_irq(ucb->irq, ucb);
+ device_unregister(&ucb->dev);
+ }
+@@ -603,6 +685,7 @@ static int ucb1x00_resume(struct mcp *mcp)
+ struct ucb1x00 *ucb = mcp_get_drvdata(mcp);
+ struct ucb1x00_dev *dev;
+
++ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
+ mutex_lock(&ucb1x00_mutex);
+ list_for_each_entry(dev, &ucb->devs, dev_node) {
+ if (dev->drv->resume)
+diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h
+index be95e09..ee49670 100644
+--- a/include/linux/mfd/mcp.h
++++ b/include/linux/mfd/mcp.h
+@@ -26,6 +26,7 @@ struct mcp {
+ dma_device_t dma_telco_rd;
+ dma_device_t dma_telco_wr;
+ struct device attached_device;
++ int gpio_base;
+ };
+
+ struct mcp_ops {
+diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
+index 70eb763..b13171e 100644
+--- a/include/linux/mfd/ucb1x00.h
++++ b/include/linux/mfd/ucb1x00.h
+@@ -11,6 +11,8 @@
+ #define UCB1200_H
+
+ #include <linux/mfd/mcp.h>
++#include <linux/gpio.h>
++
+ #define UCB_IO_DATA 0x00
+ #define UCB_IO_DIR 0x01
+
+@@ -126,6 +128,7 @@ struct ucb1x00 {
+ struct device dev;
+ struct list_head node;
+ struct list_head devs;
++ struct gpio_chip gpio;
+ };
+
+ struct ucb1x00_driver;
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch b/packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch
new file mode 100644
index 0000000000..c08c21a977
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch
@@ -0,0 +1,137 @@
+From c1bf0dcce68a5e01213e18c9ca1fd49efad4ddff Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 18:15:34 +0100
+Subject: [PATCH 17/23] collie: convert to gpiolib for ucb1x00
+
+Only the parts used for collie_battery are converted.
+The rest will be cleaned up later.
+
+Conflicts:
+
+ arch/arm/mach-sa1100/collie.c
+ arch/arm/mach-sa1100/include/mach/collie.h
+---
+ arch/arm/mach-sa1100/collie.c | 3 +-
+ arch/arm/mach-sa1100/include/mach/collie.h | 68 ++++++++++++++-------------
+ 2 files changed, 37 insertions(+), 34 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
+index ec673b8..4b52f30 100644
+--- a/arch/arm/mach-sa1100/collie.c
++++ b/arch/arm/mach-sa1100/collie.c
+@@ -87,6 +87,7 @@ static struct scoop_pcmcia_config collie_pcmcia_config = {
+ static struct mcp_plat_data collie_mcp_data = {
+ .mccr0 = MCCR0_ADM | MCCR0_ExtClk,
+ .sclk_rate = 9216000,
++ .gpio_base = COLLIE_TC35143_GPIO_BASE,
+ };
+
+ #ifdef CONFIG_SHARP_LOCOMO
+@@ -256,7 +257,7 @@ static void __init collie_init(void)
+ PPC_LDD6 | PPC_LDD7 | PPC_L_PCLK | PPC_L_LCLK | PPC_L_FCLK | PPC_L_BIAS |
+ PPC_TXD1 | PPC_TXD2 | PPC_TXD3 | PPC_TXD4 | PPC_SCLK | PPC_SFRM;
+
+- PWER = COLLIE_GPIO_AC_IN | COLLIE_GPIO_CO | COLLIE_GPIO_ON_KEY |
++ PWER = COLLIE_GPIO_AC_IN_ | COLLIE_GPIO_CO_ | COLLIE_GPIO_ON_KEY |
+ COLLIE_GPIO_WAKEUP | COLLIE_GPIO_nREMOCON_INT | PWER_RTC;
+
+ PGSR = COLLIE_GPIO_nREMOCON_ON;
+diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h
+index 799c930..bba8978 100644
+--- a/arch/arm/mach-sa1100/include/mach/collie.h
++++ b/arch/arm/mach-sa1100/include/mach/collie.h
+@@ -15,7 +15,7 @@
+
+
+ #define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1)
+-#define COLLIE_SCP_CHARGE_ON SCOOP_GPCR_PA11
++#define COLLIE_GPIO_CHARGE_ON (COLLIE_SCOOP_GPIO_BASE)
+ #define COLLIE_SCP_DIAG_BOOT1 SCOOP_GPCR_PA12
+ #define COLLIE_SCP_DIAG_BOOT2 SCOOP_GPCR_PA13
+ #define COLLIE_SCP_MUTE_L SCOOP_GPCR_PA14
+@@ -25,28 +25,29 @@
+ #define COLLIE_GPIO_VPEN (COLLIE_SCOOP_GPIO_BASE + 7)
+ #define COLLIE_GPIO_LB_VOL_CHG (COLLIE_SCOOP_GPIO_BASE + 8)
+
+-#define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
++#define COLLIE_SCOOP_IO_DIR (COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
+ COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON )
+-#define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
+- COLLIE_SCP_CHARGE_ON )
++#define COLLIE_SCOOP_IO_OUT (COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R)
+
+ /* GPIOs for which the generic definition doesn't say much */
+
+-#define COLLIE_GPIO_ON_KEY GPIO_GPIO (0)
+-#define COLLIE_GPIO_AC_IN GPIO_GPIO (1)
+-#define COLLIE_GPIO_SDIO_INT GPIO_GPIO (11)
+-#define COLLIE_GPIO_CF_IRQ GPIO_GPIO (14)
+-#define COLLIE_GPIO_nREMOCON_INT GPIO_GPIO (15)
+-#define COLLIE_GPIO_UCB1x00_RESET GPIO_GPIO (16)
+-#define COLLIE_GPIO_nMIC_ON GPIO_GPIO (17)
+-#define COLLIE_GPIO_nREMOCON_ON GPIO_GPIO (18)
+-#define COLLIE_GPIO_CO GPIO_GPIO (20)
+-#define COLLIE_GPIO_MCP_CLK GPIO_GPIO (21)
+-#define COLLIE_GPIO_CF_CD GPIO_GPIO (22)
+-#define COLLIE_GPIO_UCB1x00_IRQ GPIO_GPIO (23)
+-#define COLLIE_GPIO_WAKEUP GPIO_GPIO (24)
+-#define COLLIE_GPIO_GA_INT GPIO_GPIO (25)
+-#define COLLIE_GPIO_MAIN_BAT_LOW GPIO_GPIO (26)
++#define COLLIE_GPIO_ON_KEY GPIO_GPIO(0)
++#define COLLIE_GPIO_AC_IN (1)
++#define COLLIE_GPIO_AC_IN_ GPIO_GPIO(1)
++#define COLLIE_GPIO_SDIO_INT GPIO_GPIO(11)
++#define COLLIE_GPIO_CF_IRQ GPIO_GPIO(14)
++#define COLLIE_GPIO_nREMOCON_INT GPIO_GPIO(15)
++#define COLLIE_GPIO_UCB1x00_RESET GPIO_GPIO(16)
++#define COLLIE_GPIO_nMIC_ON GPIO_GPIO(17)
++#define COLLIE_GPIO_nREMOCON_ON GPIO_GPIO(18)
++#define COLLIE_GPIO_CO (20)
++#define COLLIE_GPIO_CO_ GPIO_GPIO(20)
++#define COLLIE_GPIO_MCP_CLK GPIO_GPIO(21)
++#define COLLIE_GPIO_CF_CD GPIO_GPIO(22)
++#define COLLIE_GPIO_UCB1x00_IRQ GPIO_GPIO(23)
++#define COLLIE_GPIO_WAKEUP GPIO_GPIO(24)
++#define COLLIE_GPIO_GA_INT GPIO_GPIO(25)
++#define COLLIE_GPIO_MAIN_BAT_LOW (26)
+
+ /* Interrupts */
+
+@@ -70,19 +71,20 @@
+ #define COLLIE_LCM_IRQ_GPIO_nSD_WP IRQ_LOCOMO_GPIO14
+
+ /* GPIO's on the TC35143AF (Toshiba Analog Frontend) */
+-#define COLLIE_TC35143_GPIO_VERSION0 UCB_IO_0 /* GPIO0=Version */
+-#define COLLIE_TC35143_GPIO_TBL_CHK UCB_IO_1 /* GPIO1=TBL_CHK */
+-#define COLLIE_TC35143_GPIO_VPEN_ON UCB_IO_2 /* GPIO2=VPNE_ON */
+-#define COLLIE_TC35143_GPIO_IR_ON UCB_IO_3 /* GPIO3=IR_ON */
+-#define COLLIE_TC35143_GPIO_AMP_ON UCB_IO_4 /* GPIO4=AMP_ON */
+-#define COLLIE_TC35143_GPIO_VERSION1 UCB_IO_5 /* GPIO5=Version */
+-#define COLLIE_TC35143_GPIO_FS8KLPF UCB_IO_5 /* GPIO5=fs 8k LPF */
+-#define COLLIE_TC35143_GPIO_BUZZER_BIAS UCB_IO_6 /* GPIO6=BUZZER BIAS */
+-#define COLLIE_TC35143_GPIO_MBAT_ON UCB_IO_7 /* GPIO7=MBAT_ON */
+-#define COLLIE_TC35143_GPIO_BBAT_ON UCB_IO_8 /* GPIO8=BBAT_ON */
+-#define COLLIE_TC35143_GPIO_TMP_ON UCB_IO_9 /* GPIO9=TMP_ON */
+-#define COLLIE_TC35143_GPIO_IN ( UCB_IO_0 | UCB_IO_2 | UCB_IO_5 )
+-#define COLLIE_TC35143_GPIO_OUT ( UCB_IO_1 | UCB_IO_3 | UCB_IO_4 | UCB_IO_6 | \
+- UCB_IO_7 | UCB_IO_8 | UCB_IO_9 )
++#define COLLIE_TC35143_GPIO_BASE (GPIO_MAX + 13)
++#define COLLIE_TC35143_GPIO_VERSION0 UCB_IO_0
++#define COLLIE_TC35143_GPIO_TBL_CHK UCB_IO_1
++#define COLLIE_TC35143_GPIO_VPEN_ON UCB_IO_2
++#define COLLIE_TC35143_GPIO_IR_ON UCB_IO_3
++#define COLLIE_TC35143_GPIO_AMP_ON UCB_IO_4
++#define COLLIE_TC35143_GPIO_VERSION1 UCB_IO_5
++#define COLLIE_TC35143_GPIO_FS8KLPF UCB_IO_5
++#define COLLIE_TC35143_GPIO_BUZZER_BIAS UCB_IO_6
++#define COLLIE_GPIO_MBAT_ON (COLLIE_TC35143_GPIO_BASE + 7)
++#define COLLIE_GPIO_BBAT_ON (COLLIE_TC35143_GPIO_BASE + 8)
++#define COLLIE_GPIO_TMP_ON (COLLIE_TC35143_GPIO_BASE + 9)
++#define COLLIE_TC35143_GPIO_IN (UCB_IO_0 | UCB_IO_2 | UCB_IO_5)
++#define COLLIE_TC35143_GPIO_OUT (UCB_IO_1 | UCB_IO_3 | UCB_IO_4 \
++ | UCB_IO_6)
+
+ #endif
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch b/packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch
new file mode 100644
index 0000000000..b28db63d87
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch
@@ -0,0 +1,473 @@
+From a2cf77eaf64b201a00b9682c25596ef0bcda8dc4 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 18:16:03 +0100
+Subject: [PATCH 18/23] collie: add battery driver
+
+This driver is based on tosa_battery.c.
+
+Conflicts:
+
+ drivers/power/Makefile
+---
+ drivers/power/Kconfig | 7 +
+ drivers/power/Makefile | 1 +
+ drivers/power/collie_battery.c | 418 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 426 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/power/collie_battery.c
+
+diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
+index 8e0c2b4..a945046 100644
+--- a/drivers/power/Kconfig
++++ b/drivers/power/Kconfig
+@@ -56,6 +56,13 @@ config BATTERY_TOSA
+ Say Y to enable support for the battery on the Sharp Zaurus
+ SL-6000 (tosa) models.
+
++config BATTERY_COLLIE
++ tristate "Sharp SL-5500 (collie) battery"
++ depends on SA1100_COLLIE && MCP_UCB1200
++ help
++ Say Y to enable support for the battery on the Sharp Zaurus
++ SL-5500 (collie) models.
++
+ config BATTERY_WM97XX
+ bool "WM97xx generic battery driver"
+ depends on TOUCHSCREEN_WM97XX=y
+diff --git a/drivers/power/Makefile b/drivers/power/Makefile
+index e8f1ece..51a7263 100644
+--- a/drivers/power/Makefile
++++ b/drivers/power/Makefile
+@@ -21,5 +21,6 @@ obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
+ obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
+ obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
+ obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o
++obj-$(CONFIG_BATTERY_COLLIE) += collie_battery.o
+ obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o
+ obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o
+diff --git a/drivers/power/collie_battery.c b/drivers/power/collie_battery.c
+new file mode 100644
+index 0000000..039f41a
+--- /dev/null
++++ b/drivers/power/collie_battery.c
+@@ -0,0 +1,418 @@
++/*
++ * Battery and Power Management code for the Sharp SL-5x00
++ *
++ * Copyright (C) 2009 Thomas Kunze
++ *
++ * based on tosa_battery.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/kernel.h>
++#include <linux/module.h>
++#include <linux/power_supply.h>
++#include <linux/delay.h>
++#include <linux/spinlock.h>
++#include <linux/interrupt.h>
++#include <linux/gpio.h>
++#include <linux/mfd/ucb1x00.h>
++
++#include <asm/mach/sharpsl_param.h>
++#include <asm/mach-types.h>
++#include <mach/collie.h>
++
++static DEFINE_MUTEX(bat_lock); /* protects gpio pins */
++static struct work_struct bat_work;
++static struct ucb1x00 *ucb;
++
++struct collie_bat {
++ int status;
++ struct power_supply psy;
++ int full_chrg;
++
++ struct mutex work_lock; /* protects data */
++
++ bool (*is_present)(struct collie_bat *bat);
++ int gpio_full;
++ int gpio_charge_on;
++
++ int technology;
++
++ int gpio_bat;
++ int adc_bat;
++ int adc_bat_divider;
++ int bat_max;
++ int bat_min;
++
++ int gpio_temp;
++ int adc_temp;
++ int adc_temp_divider;
++};
++
++static struct collie_bat collie_bat_main;
++
++static unsigned long collie_read_bat(struct collie_bat *bat)
++{
++ unsigned long value = 0;
++
++ if (bat->gpio_bat < 0 || bat->adc_bat < 0)
++ return 0;
++ mutex_lock(&bat_lock);
++ gpio_set_value(bat->gpio_bat, 1);
++ msleep(5);
++ ucb1x00_adc_enable(ucb);
++ value = ucb1x00_adc_read(ucb, bat->adc_bat, UCB_SYNC);
++ ucb1x00_adc_disable(ucb);
++ gpio_set_value(bat->gpio_bat, 0);
++ mutex_unlock(&bat_lock);
++ value = value * 1000000 / bat->adc_bat_divider;
++
++ return value;
++}
++
++static unsigned long collie_read_temp(struct collie_bat *bat)
++{
++ unsigned long value = 0;
++ if (bat->gpio_temp < 0 || bat->adc_temp < 0)
++ return 0;
++
++ mutex_lock(&bat_lock);
++ gpio_set_value(bat->gpio_temp, 1);
++ msleep(5);
++ ucb1x00_adc_enable(ucb);
++ value = ucb1x00_adc_read(ucb, bat->adc_temp, UCB_SYNC);
++ ucb1x00_adc_disable(ucb);
++ gpio_set_value(bat->gpio_temp, 0);
++ mutex_unlock(&bat_lock);
++
++ value = value * 10000 / bat->adc_temp_divider;
++
++ return value;
++}
++
++static int collie_bat_get_property(struct power_supply *psy,
++ enum power_supply_property psp,
++ union power_supply_propval *val)
++{
++ int ret = 0;
++ struct collie_bat *bat = container_of(psy, struct collie_bat, psy);
++
++ if (bat->is_present && !bat->is_present(bat)
++ && psp != POWER_SUPPLY_PROP_PRESENT) {
++ return -ENODEV;
++ }
++
++ switch (psp) {
++ case POWER_SUPPLY_PROP_STATUS:
++ val->intval = bat->status;
++ break;
++ case POWER_SUPPLY_PROP_TECHNOLOGY:
++ val->intval = bat->technology;
++ break;
++ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
++ val->intval = collie_read_bat(bat);
++ break;
++ case POWER_SUPPLY_PROP_VOLTAGE_MAX:
++ if (bat->full_chrg == -1)
++ val->intval = bat->bat_max;
++ else
++ val->intval = bat->full_chrg;
++ break;
++ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
++ val->intval = bat->bat_max;
++ break;
++ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
++ val->intval = bat->bat_min;
++ break;
++ case POWER_SUPPLY_PROP_TEMP:
++ val->intval = collie_read_temp(bat);
++ break;
++ case POWER_SUPPLY_PROP_PRESENT:
++ val->intval = bat->is_present ? bat->is_present(bat) : 1;
++ break;
++ default:
++ ret = -EINVAL;
++ break;
++ }
++ return ret;
++}
++
++static void collie_bat_external_power_changed(struct power_supply *psy)
++{
++ schedule_work(&bat_work);
++}
++
++static irqreturn_t collie_bat_gpio_isr(int irq, void *data)
++{
++ pr_info("collie_bat_gpio irq: %d\n", gpio_get_value(irq_to_gpio(irq)));
++ schedule_work(&bat_work);
++ return IRQ_HANDLED;
++}
++
++static void collie_bat_update(struct collie_bat *bat)
++{
++ int old;
++ struct power_supply *psy = &bat->psy;
++
++ mutex_lock(&bat->work_lock);
++
++ old = bat->status;
++
++ if (bat->is_present && !bat->is_present(bat)) {
++ printk(KERN_NOTICE "%s not present\n", psy->name);
++ bat->status = POWER_SUPPLY_STATUS_UNKNOWN;
++ bat->full_chrg = -1;
++ } else if (power_supply_am_i_supplied(psy)) {
++ if (bat->status == POWER_SUPPLY_STATUS_DISCHARGING) {
++ gpio_set_value(bat->gpio_charge_on, 1);
++ mdelay(15);
++ }
++
++ if (gpio_get_value(bat->gpio_full)) {
++ if (old == POWER_SUPPLY_STATUS_CHARGING ||
++ bat->full_chrg == -1)
++ bat->full_chrg = collie_read_bat(bat);
++
++ gpio_set_value(bat->gpio_charge_on, 0);
++ bat->status = POWER_SUPPLY_STATUS_FULL;
++ } else {
++ gpio_set_value(bat->gpio_charge_on, 1);
++ bat->status = POWER_SUPPLY_STATUS_CHARGING;
++ }
++ } else {
++ gpio_set_value(bat->gpio_charge_on, 0);
++ bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
++ }
++
++ if (old != bat->status)
++ power_supply_changed(psy);
++
++ mutex_unlock(&bat->work_lock);
++}
++
++static void collie_bat_work(struct work_struct *work)
++{
++ collie_bat_update(&collie_bat_main);
++}
++
++
++static enum power_supply_property collie_bat_main_props[] = {
++ POWER_SUPPLY_PROP_STATUS,
++ POWER_SUPPLY_PROP_TECHNOLOGY,
++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
++ POWER_SUPPLY_PROP_VOLTAGE_NOW,
++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
++ POWER_SUPPLY_PROP_VOLTAGE_MAX,
++ POWER_SUPPLY_PROP_PRESENT,
++ POWER_SUPPLY_PROP_TEMP,
++};
++
++static enum power_supply_property collie_bat_bu_props[] = {
++ POWER_SUPPLY_PROP_STATUS,
++ POWER_SUPPLY_PROP_TECHNOLOGY,
++ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
++ POWER_SUPPLY_PROP_VOLTAGE_NOW,
++ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
++ POWER_SUPPLY_PROP_VOLTAGE_MAX,
++ POWER_SUPPLY_PROP_PRESENT,
++};
++
++static struct collie_bat collie_bat_main = {
++ .status = POWER_SUPPLY_STATUS_DISCHARGING,
++ .full_chrg = -1,
++ .psy = {
++ .name = "main-battery",
++ .type = POWER_SUPPLY_TYPE_BATTERY,
++ .properties = collie_bat_main_props,
++ .num_properties = ARRAY_SIZE(collie_bat_main_props),
++ .get_property = collie_bat_get_property,
++ .external_power_changed = collie_bat_external_power_changed,
++ .use_for_apm = 1,
++ },
++
++ .gpio_full = COLLIE_GPIO_CO,
++ .gpio_charge_on = COLLIE_GPIO_CHARGE_ON,
++
++ .technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
++
++ .gpio_bat = COLLIE_GPIO_MBAT_ON,
++ .adc_bat = UCB_ADC_INP_AD1,
++ .adc_bat_divider = 155,
++ .bat_max = 4310000,
++ .bat_min = 1551 * 1000000 / 414,
++
++ .gpio_temp = COLLIE_GPIO_TMP_ON,
++ .adc_temp = UCB_ADC_INP_AD0,
++ .adc_temp_divider = 10000,
++};
++
++static struct collie_bat collie_bat_bu = {
++ .status = POWER_SUPPLY_STATUS_UNKNOWN,
++ .full_chrg = -1,
++
++ .psy = {
++ .name = "backup-battery",
++ .type = POWER_SUPPLY_TYPE_BATTERY,
++ .properties = collie_bat_bu_props,
++ .num_properties = ARRAY_SIZE(collie_bat_bu_props),
++ .get_property = collie_bat_get_property,
++ .external_power_changed = collie_bat_external_power_changed,
++ },
++
++ .gpio_full = -1,
++ .gpio_charge_on = -1,
++
++ .technology = POWER_SUPPLY_TECHNOLOGY_LiMn,
++
++ .gpio_bat = COLLIE_GPIO_BBAT_ON,
++ .adc_bat = UCB_ADC_INP_AD1,
++ .adc_bat_divider = 155,
++ .bat_max = 3000000,
++ .bat_min = 1900000,
++
++ .gpio_temp = -1,
++ .adc_temp = -1,
++ .adc_temp_divider = -1,
++};
++
++static struct {
++ int gpio;
++ char *name;
++ bool output;
++ int value;
++} gpios[] = {
++ { COLLIE_GPIO_CO, "main battery full", 0, 0 },
++ { COLLIE_GPIO_MAIN_BAT_LOW, "main battery low", 0, 0 },
++ { COLLIE_GPIO_CHARGE_ON, "main charge on", 1, 0 },
++ { COLLIE_GPIO_MBAT_ON, "main battery", 1, 0 },
++ { COLLIE_GPIO_TMP_ON, "main battery temp", 1, 0 },
++ { COLLIE_GPIO_BBAT_ON, "backup battery", 1, 0 },
++};
++
++#ifdef CONFIG_PM
++static int collie_bat_suspend(struct ucb1x00_dev *dev, pm_message_t state)
++{
++ /* flush all pending status updates */
++ flush_scheduled_work();
++ return 0;
++}
++
++static int collie_bat_resume(struct ucb1x00_dev *dev)
++{
++ /* things may have changed while we were away */
++ schedule_work(&bat_work);
++ return 0;
++}
++#else
++#define collie_bat_suspend NULL
++#define collie_bat_resume NULL
++#endif
++
++static int __devinit collie_bat_probe(struct ucb1x00_dev *dev)
++{
++ int ret;
++ int i;
++
++ if (!machine_is_collie())
++ return -ENODEV;
++
++ ucb = dev->ucb;
++
++ for (i = 0; i < ARRAY_SIZE(gpios); i++) {
++ ret = gpio_request(gpios[i].gpio, gpios[i].name);
++ if (ret) {
++ i--;
++ goto err_gpio;
++ }
++
++ if (gpios[i].output)
++ ret = gpio_direction_output(gpios[i].gpio,
++ gpios[i].value);
++ else
++ ret = gpio_direction_input(gpios[i].gpio);
++
++ if (ret)
++ goto err_gpio;
++ }
++
++ mutex_init(&collie_bat_main.work_lock);
++
++ INIT_WORK(&bat_work, collie_bat_work);
++
++ ret = power_supply_register(&dev->ucb->dev, &collie_bat_main.psy);
++ if (ret)
++ goto err_psy_reg_main;
++ ret = power_supply_register(&dev->ucb->dev, &collie_bat_bu.psy);
++ if (ret)
++ goto err_psy_reg_bu;
++
++ ret = request_irq(gpio_to_irq(COLLIE_GPIO_CO),
++ collie_bat_gpio_isr,
++ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
++ "main full", &collie_bat_main);
++ if (!ret) {
++ schedule_work(&bat_work);
++ return 0;
++ }
++ power_supply_unregister(&collie_bat_bu.psy);
++err_psy_reg_bu:
++ power_supply_unregister(&collie_bat_main.psy);
++err_psy_reg_main:
++
++ /* see comment in collie_bat_remove */
++ flush_scheduled_work();
++
++ i--;
++err_gpio:
++ for (; i >= 0; i--)
++ gpio_free(gpios[i].gpio);
++
++ return ret;
++}
++
++static void __devexit collie_bat_remove(struct ucb1x00_dev *dev)
++{
++ int i;
++
++ free_irq(gpio_to_irq(COLLIE_GPIO_CO), &collie_bat_main);
++
++ power_supply_unregister(&collie_bat_bu.psy);
++ power_supply_unregister(&collie_bat_main.psy);
++
++ /*
++ * now flush all pending work.
++ * we won't get any more schedules, since all
++ * sources (isr and external_power_changed)
++ * are unregistered now.
++ */
++ flush_scheduled_work();
++
++ for (i = ARRAY_SIZE(gpios) - 1; i >= 0; i--)
++ gpio_free(gpios[i].gpio);
++}
++
++static struct ucb1x00_driver collie_bat_driver = {
++ .add = collie_bat_probe,
++ .remove = __devexit_p(collie_bat_remove),
++ .suspend = collie_bat_suspend,
++ .resume = collie_bat_resume,
++};
++
++static int __init collie_bat_init(void)
++{
++ return ucb1x00_register_driver(&collie_bat_driver);
++}
++
++static void __exit collie_bat_exit(void)
++{
++ ucb1x00_unregister_driver(&collie_bat_driver);
++}
++
++module_init(collie_bat_init);
++module_exit(collie_bat_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Thomas Kunze");
++MODULE_DESCRIPTION("Collie battery driver");
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch b/packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch
new file mode 100644
index 0000000000..7d74cb72af
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch
@@ -0,0 +1,103 @@
+From c1a769bcd789ef7284ee4ece4324274278ee6401 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 13:48:32 +0100
+Subject: [PATCH 19/23] collie: support pda_power driver
+
+This add the pda-power platform device to collie.
+---
+ arch/arm/mach-sa1100/collie.c | 65 +++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 65 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
+index 4b52f30..7da2f28 100644
+--- a/arch/arm/mach-sa1100/collie.c
++++ b/arch/arm/mach-sa1100/collie.c
+@@ -26,6 +26,7 @@
+ #include <linux/mtd/partitions.h>
+ #include <linux/timer.h>
+ #include <linux/gpio.h>
++#include <linux/pda_power.h>
+
+ #include <mach/hardware.h>
+ #include <asm/mach-types.h>
+@@ -90,6 +91,69 @@ static struct mcp_plat_data collie_mcp_data = {
+ .gpio_base = COLLIE_TC35143_GPIO_BASE,
+ };
+
++/*
++ * Collie AC IN
++ */
++static int collie_power_init(struct device *dev)
++{
++ int ret = gpio_request(COLLIE_GPIO_AC_IN, "ac in");
++ if (ret)
++ goto err_gpio_req;
++
++ ret = gpio_direction_input(COLLIE_GPIO_AC_IN);
++ if (ret)
++ goto err_gpio_in;
++
++ return 0;
++
++err_gpio_in:
++ gpio_free(COLLIE_GPIO_AC_IN);
++err_gpio_req:
++ return ret;
++}
++
++static void collie_power_exit(struct device *dev)
++{
++ gpio_free(COLLIE_GPIO_AC_IN);
++}
++
++static int collie_power_ac_online(void)
++{
++ return gpio_get_value(COLLIE_GPIO_AC_IN) == 2;
++}
++
++static char *collie_ac_supplied_to[] = {
++ "main-battery",
++ "backup-battery",
++};
++
++static struct pda_power_pdata collie_power_data = {
++ .init = collie_power_init,
++ .is_ac_online = collie_power_ac_online,
++ .exit = collie_power_exit,
++ .supplied_to = collie_ac_supplied_to,
++ .num_supplicants = ARRAY_SIZE(collie_ac_supplied_to),
++};
++
++static struct resource collie_power_resource[] = {
++ {
++ .name = "ac",
++ .start = gpio_to_irq(COLLIE_GPIO_AC_IN),
++ .end = gpio_to_irq(COLLIE_GPIO_AC_IN),
++ .flags = IORESOURCE_IRQ |
++ IORESOURCE_IRQ_HIGHEDGE |
++ IORESOURCE_IRQ_LOWEDGE,
++ },
++};
++
++static struct platform_device collie_power_device = {
++ .name = "pda-power",
++ .id = -1,
++ .dev.platform_data = &collie_power_data,
++ .resource = collie_power_resource,
++ .num_resources = ARRAY_SIZE(collie_power_resource),
++};
++
+ #ifdef CONFIG_SHARP_LOCOMO
+ /*
+ * low-level UART features.
+@@ -180,6 +244,7 @@ struct platform_device collie_locomo_device = {
+ static struct platform_device *devices[] __initdata = {
+ &collie_locomo_device,
+ &colliescoop_device,
++ &collie_power_device,
+ };
+
+ static struct mtd_partition collie_partitions[] = {
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch b/packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch
new file mode 100644
index 0000000000..490e333976
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch
@@ -0,0 +1,323 @@
+From 702663223fdc1e3f73e9adbcb1415713b2c92652 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Tue, 10 Feb 2009 18:16:57 +0100
+Subject: [PATCH 20/23] remove collie_pm.c
+
+This file was unused. The new battery driver makes it
+obsolete. So remove it
+
+Conflicts:
+
+ arch/arm/mach-sa1100/collie_pm.c
+---
+ arch/arm/mach-sa1100/collie_pm.c | 298 --------------------------------------
+ 1 files changed, 0 insertions(+), 298 deletions(-)
+ delete mode 100644 arch/arm/mach-sa1100/collie_pm.c
+
+diff --git a/arch/arm/mach-sa1100/collie_pm.c b/arch/arm/mach-sa1100/collie_pm.c
+deleted file mode 100644
+index 65b8b31..0000000
+--- a/arch/arm/mach-sa1100/collie_pm.c
++++ /dev/null
+@@ -1,298 +0,0 @@
+-/*
+- * Based on spitz_pm.c and sharp code.
+- *
+- * Copyright (C) 2001 SHARP
+- * Copyright 2005 Pavel Machek <pavel@suse.cz>
+- *
+- * Distribute under GPLv2.
+- *
+- * Li-ion batteries are angry beasts, and they like to explode. This driver is not finished,
+- * and sometimes charges them when it should not. If it makes angry lithium to come your way...
+- * ...well, you have been warned.
+- *
+- * Actually, this should be quite safe, it seems sharp leaves charger enabled by default,
+- * and my collie did not explode (yet).
+- */
+-
+-#include <linux/module.h>
+-#include <linux/stat.h>
+-#include <linux/init.h>
+-#include <linux/kernel.h>
+-#include <linux/delay.h>
+-#include <linux/interrupt.h>
+-#include <linux/device.h>
+-#include <linux/platform_device.h>
+-#include <linux/mfd/ucb1x00.h>
+-
+-#include <asm/irq.h>
+-#include <mach/hardware.h>
+-#include <asm/hardware/scoop.h>
+-#include <asm/dma.h>
+-#include <mach/collie.h>
+-#include <asm/mach/sharpsl_param.h>
+-#include <asm/hardware/sharpsl_pm.h>
+-
+-
+-static struct ucb1x00 *ucb;
+-static int ad_revise;
+-
+-#define ADCtoPower(x) ((330 * x * 2) / 1024)
+-
+-static void collie_charger_init(void)
+-{
+- int err;
+-
+- if (sharpsl_param.adadj != -1)
+- ad_revise = sharpsl_param.adadj;
+-
+- /* Register interrupt handler. */
+- if ((err = request_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr, IRQF_DISABLED,
+- "ACIN", sharpsl_ac_isr))) {
+- printk("Could not get irq %d.\n", COLLIE_IRQ_GPIO_AC_IN);
+- return;
+- }
+- if ((err = request_irq(COLLIE_IRQ_GPIO_CO, sharpsl_chrg_full_isr, IRQF_DISABLED,
+- "CO", sharpsl_chrg_full_isr))) {
+- free_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr);
+- printk("Could not get irq %d.\n", COLLIE_IRQ_GPIO_CO);
+- return;
+- }
+-
+- ucb1x00_io_set_dir(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON | COLLIE_TC35143_GPIO_TMP_ON |
+- COLLIE_TC35143_GPIO_BBAT_ON);
+- return;
+-}
+-
+-static void collie_measure_temp(int on)
+-{
+- if (on)
+- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_TMP_ON, 0);
+- else
+- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_TMP_ON);
+-}
+-
+-static void collie_charge(int on)
+-{
+- extern struct platform_device colliescoop_device;
+-
+- /* Zaurus seems to contain LTC1731; it should know when to
+- * stop charging itself, so setting charge on should be
+- * relatively harmless (as long as it is not done too often).
+- */
+- if (on) {
+- set_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
+- } else {
+- reset_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
+- }
+-}
+-
+-static void collie_discharge(int on)
+-{
+-}
+-
+-static void collie_discharge1(int on)
+-{
+-}
+-
+-static void collie_presuspend(void)
+-{
+-}
+-
+-static void collie_postsuspend(void)
+-{
+-}
+-
+-static int collie_should_wakeup(unsigned int resume_on_alarm)
+-{
+- return 0;
+-}
+-
+-static unsigned long collie_charger_wakeup(void)
+-{
+- return 0;
+-}
+-
+-int collie_read_backup_battery(void)
+-{
+- int voltage;
+-
+- ucb1x00_adc_enable(ucb);
+-
+- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_BBAT_ON, 0);
+- voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
+-
+- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON);
+- ucb1x00_adc_disable(ucb);
+-
+- printk("Backup battery = %d(%d)\n", ADCtoPower(voltage), voltage);
+-
+- return ADCtoPower(voltage);
+-}
+-
+-int collie_read_main_battery(void)
+-{
+- int voltage, voltage_rev, voltage_volts;
+-
+- ucb1x00_adc_enable(ucb);
+- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON);
+- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_MBAT_ON, 0);
+-
+- mdelay(1);
+- voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
+-
+- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON);
+- ucb1x00_adc_disable(ucb);
+-
+- voltage_rev = voltage + ((ad_revise * voltage) / 652);
+- voltage_volts = ADCtoPower(voltage_rev);
+-
+- printk("Main battery = %d(%d)\n", voltage_volts, voltage);
+-
+- if (voltage != -1)
+- return voltage_volts;
+- else
+- return voltage;
+-}
+-
+-int collie_read_temp(void)
+-{
+- int voltage;
+-
+- /* According to Sharp, temp must be > 973, main battery must be < 465,
+- FIXME: sharpsl_pm.c has both conditions negated? FIXME: values
+- are way out of range? */
+-
+- ucb1x00_adc_enable(ucb);
+- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_TMP_ON, 0);
+- /* >1010 = battery removed, 460 = 22C ?, higher = lower temp ? */
+- voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD0, UCB_SYNC);
+- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_TMP_ON);
+- ucb1x00_adc_disable(ucb);
+-
+- printk("Battery temp = %d\n", voltage);
+- return voltage;
+-}
+-
+-static unsigned long read_devdata(int which)
+-{
+- switch (which) {
+- case SHARPSL_BATT_VOLT:
+- return collie_read_main_battery();
+- case SHARPSL_BATT_TEMP:
+- return collie_read_temp();
+- case SHARPSL_ACIN_VOLT:
+- return 500;
+- case SHARPSL_STATUS_ACIN: {
+- int ret = GPLR & COLLIE_GPIO_AC_IN;
+- printk("AC status = %d\n", ret);
+- return ret;
+- }
+- case SHARPSL_STATUS_FATAL: {
+- int ret = GPLR & COLLIE_GPIO_MAIN_BAT_LOW;
+- printk("Fatal bat = %d\n", ret);
+- return ret;
+- }
+- default:
+- return ~0;
+- }
+-}
+-
+-struct battery_thresh collie_battery_levels_acin[] = {
+- { 420, 100},
+- { 417, 95},
+- { 415, 90},
+- { 413, 80},
+- { 411, 75},
+- { 408, 70},
+- { 406, 60},
+- { 403, 50},
+- { 398, 40},
+- { 391, 25},
+- { 10, 5},
+- { 0, 0},
+-};
+-
+-struct battery_thresh collie_battery_levels[] = {
+- { 394, 100},
+- { 390, 95},
+- { 380, 90},
+- { 370, 80},
+- { 368, 75}, /* From sharp code: battery high with frontlight */
+- { 366, 70}, /* 60..90 -- fake values invented by me for testing */
+- { 364, 60},
+- { 362, 50},
+- { 360, 40},
+- { 358, 25}, /* From sharp code: battery low with frontlight */
+- { 356, 5}, /* From sharp code: battery verylow with frontlight */
+- { 0, 0},
+-};
+-
+-struct sharpsl_charger_machinfo collie_pm_machinfo = {
+- .init = collie_charger_init,
+- .read_devdata = read_devdata,
+- .discharge = collie_discharge,
+- .discharge1 = collie_discharge1,
+- .charge = collie_charge,
+- .measure_temp = collie_measure_temp,
+- .presuspend = collie_presuspend,
+- .postsuspend = collie_postsuspend,
+- .charger_wakeup = collie_charger_wakeup,
+- .should_wakeup = collie_should_wakeup,
+- .bat_levels = 12,
+- .bat_levels_noac = collie_battery_levels,
+- .bat_levels_acin = collie_battery_levels_acin,
+- .status_high_acin = 368,
+- .status_low_acin = 358,
+- .status_high_noac = 368,
+- .status_low_noac = 358,
+- .charge_on_volt = 350, /* spitz uses 2.90V, but lets play it safe. */
+- .charge_on_temp = 550,
+- .charge_acin_high = 550, /* collie does not seem to have sensor for this, anyway */
+- .charge_acin_low = 450, /* ignored, too */
+- .fatal_acin_volt = 356,
+- .fatal_noacin_volt = 356,
+-
+- .batfull_irq = 1, /* We do not want periodical charge restarts */
+-};
+-
+-static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
+-{
+- sharpsl_pm.machinfo = &collie_pm_machinfo;
+- ucb = pdev->ucb;
+- return 0;
+-}
+-
+-static struct ucb1x00_driver collie_pm_ucb_driver = {
+- .add = collie_pm_ucb_add,
+-};
+-
+-static struct platform_device *collie_pm_device;
+-
+-static int __init collie_pm_init(void)
+-{
+- int ret;
+-
+- collie_pm_device = platform_device_alloc("sharpsl-pm", -1);
+- if (!collie_pm_device)
+- return -ENOMEM;
+-
+- collie_pm_device->dev.platform_data = &collie_pm_machinfo;
+- ret = platform_device_add(collie_pm_device);
+-
+- if (ret)
+- platform_device_put(collie_pm_device);
+-
+- if (!ret)
+- ret = ucb1x00_register_driver(&collie_pm_ucb_driver);
+-
+- return ret;
+-}
+-
+-static void __exit collie_pm_exit(void)
+-{
+- ucb1x00_unregister_driver(&collie_pm_ucb_driver);
+- platform_device_unregister(collie_pm_device);
+-}
+-
+-module_init(collie_pm_init);
+-module_exit(collie_pm_exit);
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch b/packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch
new file mode 100644
index 0000000000..c40be53d9b
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch
@@ -0,0 +1,40 @@
+From 0057c3469772d6cddcaa486abe46a2957bc62a2c Mon Sep 17 00:00:00 2001
+From: Harvey Harrison <harvey.harrison@gmail.com>
+Date: Wed, 22 Oct 2008 17:09:00 -0700
+Subject: [PATCH 21/23] mmc: trivial annotation of 'blocks'
+
+sg_init_one is reading a be32, annotate as such.
+
+Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+---
+ drivers/mmc/card/block.c | 6 ++----
+ 1 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index 3d067c3..903c8aa 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -145,7 +145,7 @@ struct mmc_blk_request {
+ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
+ {
+ int err;
+- u32 blocks;
++ __be32 blocks;
+
+ struct mmc_request mrq;
+ struct mmc_command cmd;
+@@ -204,9 +204,7 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
+ if (cmd.error || data.error)
+ return (u32)-1;
+
+- blocks = ntohl(blocks);
+-
+- return blocks;
++ return ntohl(blocks);
+ }
+
+ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch b/packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch
new file mode 100644
index 0000000000..b6cef07c19
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch
@@ -0,0 +1,93 @@
+From d71af40a7a15a2ee7040fa0d5c8ac1bc19873c7d Mon Sep 17 00:00:00 2001
+From: Adrian Hunter <ext-adrian.hunter@nokia.com>
+Date: Thu, 16 Oct 2008 12:55:25 +0300
+Subject: [PATCH 22/23] mmc_block: print better error messages
+
+Add command response and card status to error
+messages.
+
+Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+---
+ drivers/mmc/card/block.c | 44 +++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 37 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index 903c8aa..cc9b3ab 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -207,6 +207,23 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
+ return ntohl(blocks);
+ }
+
++static u32 get_card_status(struct mmc_card *card, struct request *req)
++{
++ struct mmc_command cmd;
++ int err;
++
++ memset(&cmd, 0, sizeof(struct mmc_command));
++ cmd.opcode = MMC_SEND_STATUS;
++ if (!mmc_host_is_spi(card->host))
++ cmd.arg = card->rca << 16;
++ cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_AC;
++ err = mmc_wait_for_cmd(card->host, &cmd, 0);
++ if (err)
++ printk(KERN_ERR "%s: error %d sending status comand",
++ req->rq_disk->disk_name, err);
++ return cmd.resp[0];
++}
++
+ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ {
+ struct mmc_blk_data *md = mq->data;
+@@ -218,7 +235,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+
+ do {
+ struct mmc_command cmd;
+- u32 readcmd, writecmd;
++ u32 readcmd, writecmd, status = 0;
+
+ memset(&brq, 0, sizeof(struct mmc_blk_request));
+ brq.mrq.cmd = &brq.cmd;
+@@ -273,19 +290,32 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ * until later as we need to wait for the card to leave
+ * programming mode even when things go wrong.
+ */
++ if (brq.cmd.error || brq.data.error || brq.stop.error)
++ status = get_card_status(card, req);
++
+ if (brq.cmd.error) {
+- printk(KERN_ERR "%s: error %d sending read/write command\n",
+- req->rq_disk->disk_name, brq.cmd.error);
++ printk(KERN_ERR "%s: error %d sending read/write "
++ "command, response %#x, card status %#x\n",
++ req->rq_disk->disk_name, brq.cmd.error,
++ brq.cmd.resp[0], status);
+ }
+
+ if (brq.data.error) {
+- printk(KERN_ERR "%s: error %d transferring data\n",
+- req->rq_disk->disk_name, brq.data.error);
++ if (brq.data.error == -ETIMEDOUT && brq.mrq.stop)
++ /* 'Stop' response contains card status */
++ status = brq.mrq.stop->resp[0];
++ printk(KERN_ERR "%s: error %d transferring data,"
++ " sector %u, nr %u, card status %#x\n",
++ req->rq_disk->disk_name, brq.data.error,
++ (unsigned)req->sector,
++ (unsigned)req->nr_sectors, status);
+ }
+
+ if (brq.stop.error) {
+- printk(KERN_ERR "%s: error %d sending stop command\n",
+- req->rq_disk->disk_name, brq.stop.error);
++ printk(KERN_ERR "%s: error %d sending stop command, "
++ "response %#x, card status %#x\n",
++ req->rq_disk->disk_name, brq.stop.error,
++ brq.stop.resp[0], status);
+ }
+
+ if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) {
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch b/packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch
new file mode 100644
index 0000000000..3ff32b0a94
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch
@@ -0,0 +1,148 @@
+From fba35a4bb8f9cabcd374e19a2a34ee5496d971d2 Mon Sep 17 00:00:00 2001
+From: Adrian Hunter <ext-adrian.hunter@nokia.com>
+Date: Wed, 31 Dec 2008 18:21:17 +0100
+Subject: [PATCH 23/23] mmc_block: ensure all sectors that do not have errors are read
+
+If a card encounters an ECC error while reading a sector it will
+timeout. Instead of reporting the entire I/O request as having
+an error, redo the I/O one sector at a time so that all readable
+sectors are provided to the upper layers.
+
+Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+---
+ drivers/mmc/card/block.c | 76 +++++++++++++++++++++++++++++++++++----------
+ 1 files changed, 59 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index cc9b3ab..45b1f43 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -229,7 +229,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ struct mmc_blk_data *md = mq->data;
+ struct mmc_card *card = md->queue.card;
+ struct mmc_blk_request brq;
+- int ret = 1;
++ int ret = 1, disable_multi = 0;
+
+ mmc_claim_host(card->host);
+
+@@ -251,6 +251,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
+ brq.data.blocks = req->nr_sectors;
+
++ /*
++ * After a read error, we redo the request one sector at a time
++ * in order to accurately determine which sectors can be read
++ * successfully.
++ */
++ if (disable_multi && brq.data.blocks > 1)
++ brq.data.blocks = 1;
++
+ if (brq.data.blocks > 1) {
+ /* SPI multiblock writes terminate using a special
+ * token, not a STOP_TRANSMISSION request.
+@@ -279,6 +287,25 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ brq.data.sg = mq->sg;
+ brq.data.sg_len = mmc_queue_map_sg(mq);
+
++ /*
++ * Adjust the sg list so it is the same size as the
++ * request.
++ */
++ if (brq.data.blocks != req->nr_sectors) {
++ int i, data_size = brq.data.blocks << 9;
++ struct scatterlist *sg;
++
++ for_each_sg(brq.data.sg, sg, brq.data.sg_len, i) {
++ data_size -= sg->length;
++ if (data_size <= 0) {
++ sg->length += data_size;
++ i++;
++ break;
++ }
++ }
++ brq.data.sg_len = i;
++ }
++
+ mmc_queue_bounce_pre(mq);
+
+ mmc_wait_for_req(card->host, &brq.mrq);
+@@ -290,8 +317,16 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ * until later as we need to wait for the card to leave
+ * programming mode even when things go wrong.
+ */
+- if (brq.cmd.error || brq.data.error || brq.stop.error)
++ if (brq.cmd.error || brq.data.error || brq.stop.error) {
++ if (brq.data.blocks > 1 && rq_data_dir(req) == READ) {
++ /* Redo read one sector at a time */
++ printk(KERN_WARNING "%s: retrying using single "
++ "block read\n", req->rq_disk->disk_name);
++ disable_multi = 1;
++ continue;
++ }
+ status = get_card_status(card, req);
++ }
+
+ if (brq.cmd.error) {
+ printk(KERN_ERR "%s: error %d sending read/write "
+@@ -348,8 +383,20 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ #endif
+ }
+
+- if (brq.cmd.error || brq.data.error || brq.stop.error)
++ if (brq.cmd.error || brq.stop.error || brq.data.error) {
++ if (rq_data_dir(req) == READ) {
++ /*
++ * After an error, we redo I/O one sector at a
++ * time, so we only reach here after trying to
++ * read a single sector.
++ */
++ spin_lock_irq(&md->lock);
++ ret = __blk_end_request(req, -EIO, brq.data.blksz);
++ spin_unlock_irq(&md->lock);
++ continue;
++ }
+ goto cmd_err;
++ }
+
+ /*
+ * A block was successfully transferred.
+@@ -371,25 +418,20 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
+ * If the card is not SD, we can still ok written sectors
+ * as reported by the controller (which might be less than
+ * the real number of written sectors, but never more).
+- *
+- * For reads we just fail the entire chunk as that should
+- * be safe in all cases.
+ */
+- if (rq_data_dir(req) != READ) {
+- if (mmc_card_sd(card)) {
+- u32 blocks;
++ if (mmc_card_sd(card)) {
++ u32 blocks;
+
+- blocks = mmc_sd_num_wr_blocks(card);
+- if (blocks != (u32)-1) {
+- spin_lock_irq(&md->lock);
+- ret = __blk_end_request(req, 0, blocks << 9);
+- spin_unlock_irq(&md->lock);
+- }
+- } else {
++ blocks = mmc_sd_num_wr_blocks(card);
++ if (blocks != (u32)-1) {
+ spin_lock_irq(&md->lock);
+- ret = __blk_end_request(req, 0, brq.data.bytes_xfered);
++ ret = __blk_end_request(req, 0, blocks << 9);
+ spin_unlock_irq(&md->lock);
+ }
++ } else {
++ spin_lock_irq(&md->lock);
++ ret = __blk_end_request(req, 0, brq.data.bytes_xfered);
++ spin_unlock_irq(&md->lock);
+ }
+
+ mmc_release_host(card->host);
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-2.6.28/collie/defconfig b/packages/linux/linux-2.6.28/collie/defconfig
new file mode 100644
index 0000000000..e815c97e42
--- /dev/null
+++ b/packages/linux/linux-2.6.28/collie/defconfig
@@ -0,0 +1,1677 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28
+# Fri Feb 13 10:42:04 2009
+#
+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_HAVE_LATENCYTOP_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_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_USER_SCHED is not set
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_COMPAT_BRK=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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+CONFIG_CLASSIC_RCU=y
+CONFIG_FREEZER=y
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM 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
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_PABRT_NOIFAR=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
+CONFIG_SHARP_LOCOMO=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+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_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 root=/dev/mmcblk0p1 rootfstype=ext2 rootdelay=3 mem=64M fbcon=rotate:1 debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE 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_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+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_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_ASK_IP_FIB_HASH is not set
+# CONFIG_IP_FIB_TRIE 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=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO 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_BIC is not set
+# CONFIG_DEFAULT_CUBIC is not set
+# CONFIG_DEFAULT_HTCP is not set
+# CONFIG_DEFAULT_VEGAS is not set
+# CONFIG_DEFAULT_WESTWOOD is not set
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE 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_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT 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
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_NF_DEFRAG_IPV4 is not set
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+# CONFIG_SCTP_HMAC_MD5 is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA 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
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_SA1100_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_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL 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=m
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_MAC80211=y
+
+#
+# Rate control algorithm selection
+#
+# CONFIG_MAC80211_RC_PID is not set
+CONFIG_MAC80211_RC_MINSTREL=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU 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_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# 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
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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_SHARP=y
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+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
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=m
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+# CONFIG_PNP is not set
+CONFIG_BLK_DEV=y
+# 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=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_XIP 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_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI 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_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=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=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
+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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_ADVANSYS 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_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+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_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+# CONFIG_NETDEV_1000 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_PCMCIA_RAYCS=m
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_LIBERTAS_THINFIRM=m
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_MAC80211_HWSIM=m
+CONFIG_P54_COMMON=m
+# CONFIG_IWLWIFI_LEDS is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_B43=m
+# CONFIG_B43_PCMCIA is not set
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43LEGACY=m
+# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_RT2X00=m
+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_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_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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=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_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_APMPOWER=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_KEYBOARD_GPIO 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 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_HTCPEN is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1200_TS is not set
+CONFIG_TOUCHSCREEN_COLLIE_TS=y
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+CONFIG_INPUT_MISC=y
+# 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_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# 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_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
+# CONFIG_IPMI_HANDLER 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C 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=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 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_BATTERY_COLLIE=y
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+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_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=m
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+# CONFIG_SSB_PCMCIAHOST is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_MCP=y
+CONFIG_MCP_SA11X0=y
+CONFIG_MCP_UCB1200=y
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_SA1100=y
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_LOCOMO=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT 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_DETECT_PRIMARY is not set
+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
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+CONFIG_HID=m
+CONFIG_USB_SUPPORT=y
+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
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=500
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU 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 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_PRINTER=m
+CONFIG_USB_CDC_COMPOSITE=m
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
+CONFIG_SDIO_UART=m
+CONFIG_MMC_TEST=m
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SPI=y
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_LOCOMO=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+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
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_SA1100 is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+CONFIG_UIO=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
+CONFIG_UIO_SMX=m
+CONFIG_UIO_SERCOS3=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 is not set
+CONFIG_EXT4_FS=m
+# CONFIG_EXT4DEV_COMPAT is not set
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_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=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_FILE_LOCKING=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_STATS=y
+CONFIG_OCFS2_DEBUG_MASKLOG=y
+# CONFIG_OCFS2_DEBUG_FS is not set
+# CONFIG_OCFS2_COMPAT_JBD is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# 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 is not set
+# CONFIG_ZISOFS is not set
+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_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+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_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# 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_UBIFS_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+CONFIG_RPCSEC_GSS_KRB5=y
+# 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
+
+#
+# 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
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=m
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2 b/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2
index 7069c54dd4..7069c54dd4 100644
--- a/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2
+++ b/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2
Binary files differ
diff --git a/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-exp.patch.bz2 b/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2
index 9417b3aab6..9417b3aab6 100644
--- a/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-exp.patch.bz2
+++ b/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2
Binary files differ
diff --git a/packages/linux/linux-2.6.28/ronetix-pm9263/defconfig b/packages/linux/linux-2.6.28/ronetix-pm9263/defconfig
new file mode 100644
index 0000000000..ec5bf7a39a
--- /dev/null
+++ b/packages/linux/linux-2.6.28/ronetix-pm9263/defconfig
@@ -0,0 +1,1438 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28
+# Tue Dec 30 15:28:55 2008
+#
+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_HAVE_LATENCYTOP_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_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-pm9263"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS 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_COMPAT_BRK=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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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_MSM is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# 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
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91SAM9G20 is not set
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9263 Board Type
+#
+# CONFIG_MACH_AT91SAM9263EK is not set
+# CONFIG_MACH_USB_A9263 is not set
+# CONFIG_MACH_CSB737 is not set
+# CONFIG_MACH_TOTEMNOVA is not set
+# CONFIG_MACH_NEOCORE926 is not set
+CONFIG_MACH_PM9263=y
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_NOIFAR=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_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+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_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+# 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
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_IDLE 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_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=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_ARCH_SUSPEND_POSSIBLE=y
+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 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_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# 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
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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 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
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x10000000
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
+# CONFIG_MTD_DATAFLASH_OTP 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
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_ATMEL=y
+# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
+CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
+# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=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 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_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+CONFIG_ATMEL_PWM=y
+# CONFIG_ATMEL_TCLIB is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI 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_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=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 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
+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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_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_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 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
+# CONFIG_IWLWIFI_LEDS 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_NET_PCMCIA is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_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 is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV 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_KEYBOARD_GPIO=y
+# 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_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO 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_WM97XX is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 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_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=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_ATMEL_PDC=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_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+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
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS1WM is not set
+CONFIG_W1_MASTER_GPIO=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+CONFIG_W1_SLAVE_SMEM=y
+# CONFIG_W1_SLAVE_DS2433 is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_W1_SLAVE_BQ27000 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91SAM9X_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+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
+CONFIG_SND_VMASTER=y
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
+# 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_AC97_POWER_SAVE is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_AT91_AC97=y
+CONFIG_SND_SPI=y
+# CONFIG_SND_AT73C213 is not set
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+CONFIG_SND_PCMCIA=y
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_BRIGHT=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DELL=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_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_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# 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_SEVSEG 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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU 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
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_AT91=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ATMEL_PWM=y
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+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
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA 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=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_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE 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_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# 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 is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+# 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
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# 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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS 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_LOCK_STAT 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_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE 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
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch b/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
new file mode 100644
index 0000000000..fbd0c90a23
--- /dev/null
+++ b/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
@@ -0,0 +1,1751 @@
+diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/at91sam9263_devices.c.rej linux-2.6.28-at91-ronetix/arch/arm/mach-at91/at91sam9263_devices.c.rej
+--- linux-2.6.28-at91/arch/arm/mach-at91/at91sam9263_devices.c.rej 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/at91sam9263_devices.c.rej 2009-01-12 16:00:42.000000000 +0100
+@@ -0,0 +1,17 @@
++***************
++*** 645,651 ****
++ if (data->reset_pin)
++ at91_set_gpio_output(data->reset_pin, 0);
++
++- ac97_data = *ek_data;
++ platform_device_register(&at91sam9263_ac97_device);
++ }
++ #else
++--- 645,651 ----
++ if (data->reset_pin)
++ at91_set_gpio_output(data->reset_pin, 0);
++
+++ ac97_data = *data;
++ platform_device_register(&at91sam9263_ac97_device);
++ }
++ #else
+diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/board-pm9263.c linux-2.6.28-at91-ronetix/arch/arm/mach-at91/board-pm9263.c
+--- linux-2.6.28-at91/arch/arm/mach-at91/board-pm9263.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/board-pm9263.c 2009-01-12 16:00:42.000000000 +0100
+@@ -0,0 +1,528 @@
++/*
++ * linux/arch/arm/mach-at91/board-pm9263.c
++ *
++ * Copyright (C) 2008 Ronetix
++ *
++ * This program is free software; you can redistribute 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/spi/ads7846.h>
++#include <linux/i2c/at24.h>
++#include <linux/fb.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <linux/w1-gpio.h>
++
++#include <video/atmel_lcdc.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 <mach/hardware.h>
++#include <mach/board.h>
++#include <mach/gpio.h>
++#include <mach/at91sam9_smc.h>
++#include <mach/at91_shdwc.h>
++#include <mach/at91sam9263_matrix.h>
++
++#include "sam9_smc.h"
++#include "generic.h"
++
++
++static void __init pm9263_map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91sam9263_initialize(18432000);
++
++ /* DGBU on ttyS0. (Rx & Tx only) */
++ at91_register_uart(0, 0, 0);
++
++ /* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */
++ at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++ /* set serial console to ttyS0 (ie, DBGU) */
++ at91_set_serial_console(0);
++}
++
++static void __init pm9263_init_irq(void)
++{
++ at91sam9263_init_interrupts(NULL);
++}
++
++
++/*
++ * USB Host port
++ */
++static struct at91_usbh_data __initdata pm9263_usbh_data = {
++ .ports = 2,
++ .vbus_pin = { 0, 0 },
++};
++
++/*
++ * USB Device port
++ */
++static struct at91_udc_data __initdata pm9263_udc_data = {
++ .vbus_pin = AT91_PIN_PA25,
++ .pullup_pin = 0, /* pull-up driven by UDC */
++};
++
++
++/*
++ * ADS7846 Touchscreen
++ */
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++static int ads7843_pendown_state(void)
++{
++ return !at91_get_gpio_value(AT91_PIN_PA15); /* Touchscreen PENIRQ */
++}
++
++static struct ads7846_platform_data ads_info = {
++ .model = 7843,
++ .x_min = 150,
++ .x_max = 3830,
++ .y_min = 190,
++ .y_max = 3830,
++ .vref_delay_usecs = 100,
++ .x_plate_ohms = 450,
++ .y_plate_ohms = 250,
++ .pressure_max = 15000,
++ .debounce_max = 1,
++ .debounce_rep = 0,
++ .debounce_tol = (~0),
++ .get_pendown_state = ads7843_pendown_state,
++};
++
++static void __init pm9263_add_device_ts(void)
++{
++ at91_set_B_periph(AT91_PIN_PA15, 1); /* External IRQ1, with pullup */
++ at91_set_gpio_input(AT91_PIN_PA31, 1); /* Touchscreen BUSY signal */
++}
++#else
++static void __init pm9263_add_device_ts(void) {}
++#endif
++
++/*
++ * SPI devices.
++ */
++static struct spi_board_info pm9263_spi_devices[] = {
++#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
++ { /* DataFlash card */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ .bus_num = 0,
++ },
++#endif
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++ {
++ .modalias = "ads7846",
++ .chip_select = 0,
++ .max_speed_hz = 125000 * 16, /* max sample rate * clocks per sample */
++ .bus_num = 1,
++ .platform_data = &ads_info,
++ .irq = AT91SAM9263_ID_IRQ1,
++ },
++#endif
++};
++
++
++/*
++ * MCI (SD/MMC)
++ */
++static struct at91_mmc_data __initdata pm9263_mmc_data = {
++ .wire4 = 1,
++ .det_pin = AT91_PIN_PA21,
++ .wp_pin = AT91_PIN_PA16,
++// .vcc_pin = ... not connected
++};
++
++
++/*
++ * MACB Ethernet device
++ */
++static struct at91_eth_data __initdata pm9263_macb_data = {
++ .phy_irq_pin = AT91_PIN_PE31,
++ .is_rmii = 1,
++};
++
++
++/*
++ * NAND flash
++ */
++static struct mtd_partition __initdata pm9263_nand_partition[] = {
++ {
++ .name = "Partition 1",
++ .offset = 0,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
++{
++ *num_partitions = ARRAY_SIZE(pm9263_nand_partition);
++ return pm9263_nand_partition;
++}
++
++static struct atmel_nand_data __initdata pm9263_nand_data = {
++ .ale = 21,
++ .cle = 22,
++// .det_pin = ... not connected
++ .rdy_pin = AT91_PIN_PB30,
++ .enable_pin = AT91_PIN_PD15,
++ .partition_info = nand_partitions,
++#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
++ .bus_width_16 = 1,
++#else
++ .bus_width_16 = 0,
++#endif
++};
++
++static struct sam9_smc_config __initdata pm9263_nand_smc_config = {
++ .ncs_read_setup = 0,
++ .nrd_setup = 1,
++ .ncs_write_setup = 0,
++ .nwe_setup = 1,
++
++ .ncs_read_pulse = 3,
++ .nrd_pulse = 3,
++ .ncs_write_pulse = 3,
++ .nwe_pulse = 3,
++
++ .read_cycle = 5,
++ .write_cycle = 5,
++
++ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
++ .tdf_cycles = 2,
++};
++
++static void __init pm9263_add_device_nand(void)
++{
++ /* setup bus-width (8 or 16) */
++ if (pm9263_nand_data.bus_width_16)
++ pm9263_nand_smc_config.mode |= AT91_SMC_DBW_16;
++ else
++ pm9263_nand_smc_config.mode |= AT91_SMC_DBW_8;
++
++ /* configure chip-select 3 (NAND) */
++ sam9_smc_configure(3, &pm9263_nand_smc_config);
++
++ at91_add_device_nand(&pm9263_nand_data);
++}
++
++
++/*
++ * LCD Controller
++ */
++#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
++static struct fb_videomode at91_tft_vga_modes[] = {
++ {
++ .name = "TX09D50VM1CCA @ 60",
++ .refresh = 60,
++ .xres = 240, .yres = 320,
++ .pixclock = KHZ2PICOS(4965),
++
++ .left_margin = 1, .right_margin = 33,
++ .upper_margin = 1, .lower_margin = 0,
++ .hsync_len = 5, .vsync_len = 1,
++
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++
++static struct fb_monspecs at91fb_default_monspecs = {
++ .manufacturer = "HIT",
++ .monitor = "TX09D70VM1CCA",
++
++ .modedb = at91_tft_vga_modes,
++ .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
++ .hfmin = 15000,
++ .hfmax = 64000,
++ .vfmin = 50,
++ .vfmax = 150,
++};
++
++#define AT91SAM9263_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
++ | ATMEL_LCDC_DISTYPE_TFT \
++ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
++
++static void at91_lcdc_power_control(int on)
++{
++ at91_set_gpio_value(AT91_PIN_PA22, on);
++}
++
++/* Driver datas */
++static struct atmel_lcdfb_info __initdata pm9263_lcdc_data = {
++ .lcdcon_is_backlight = true,
++ .default_bpp = 16,
++ .default_dmacon = ATMEL_LCDC_DMAEN,
++ .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2,
++ .default_monspecs = &at91fb_default_monspecs,
++ .atmel_lcdfb_power_control = at91_lcdc_power_control,
++ .guard_time = 1,
++};
++
++#else
++static struct atmel_lcdfb_info __initdata pm9263_lcdc_data;
++#endif
++
++
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button pm9263_buttons[] = {
++ { /* SW3 */
++ .code = BTN_LEFT,
++ .gpio = AT91_PIN_PC5,
++ .active_low = 1,
++ .desc = "SW3",
++ .wakeup = 1,
++ },
++ { /* SW4 */
++ .code = BTN_RIGHT,
++ .gpio = AT91_PIN_PC4,
++ .active_low = 1,
++ .desc = "SW4",
++ .wakeup = 1,
++ }
++};
++
++static struct gpio_keys_platform_data pm9263_button_data = {
++ .buttons = pm9263_buttons,
++ .nbuttons = ARRAY_SIZE(pm9263_buttons),
++};
++
++static struct platform_device pm9263_button_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .num_resources = 0,
++ .dev = {
++ .platform_data = &pm9263_button_data,
++ }
++};
++
++static void __init pm9263_add_device_buttons(void)
++{
++ int i;
++
++ for (i = 0; i < pm9263_button_data.nbuttons; i ++) {
++ at91_set_gpio_input(pm9263_buttons[i].gpio, 1);
++ at91_set_deglitch(pm9263_buttons[i].gpio, 1);
++ }
++
++// platform_device_register(&pm9263_button_device);
++}
++#else
++static void __init pm9263_add_device_buttons(void) {}
++#endif
++
++
++/*
++ * AC97
++ */
++static struct atmel_ac97_data pm9263_ac97_data = {
++ .reset_pin = 0,
++};
++
++
++/*
++ * LEDs ... these could all be PWM-driven, for variable brightness
++ */
++static struct gpio_led pm9263_leds[] = {
++ { /* "right" led, green, userled2 (could be driven by pwm2) */
++ .name = "led0",
++ .gpio = AT91_PIN_PB7,
++ .active_low = 1,
++ .default_trigger = "nand-disk",
++ },
++ { /* "power" led, yellow (could be driven by pwm0) */
++ .name = "led1",
++ .gpio = AT91_PIN_PB8,
++ .active_low = 1,
++ .default_trigger = "heartbeat",
++ }
++};
++
++#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
++struct w1_gpio_platform_data pm926x_w1_platdata = {
++ .pin = AT91_PIN_PB31,
++ .is_open_drain = 0,
++};
++
++static struct platform_device pm926x_w1_device = {
++ .name = "w1-gpio",
++ .id = 0,
++ .dev = {
++ .platform_data = &pm926x_w1_platdata,
++ },
++};
++#endif
++
++#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)
++static struct at91_cf_data pm9263_cf_data = {
++ .det_pin = AT91_PIN_PA30,
++ .rst_pin = AT91_PIN_PA23,
++ .irq_pin = AT91_PIN_PA24,
++ // .vcc_pin = ... always powered
++ .chipselect = 4,
++};
++
++static struct resource pm9263_cf_resources[] = {
++ [0] = {
++ .start = AT91_CHIPSELECT_4,
++ .end = AT91_CHIPSELECT_4 + (0x10000000 - 1),
++ .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
++ },
++};
++
++static struct platform_device pm9263_cf_device = {
++ .name = "at91_cf",
++ .id = -1,
++ .dev = {
++ .platform_data = &pm9263_cf_data,
++ },
++ .resource = pm9263_cf_resources,
++ .num_resources = ARRAY_SIZE(pm9263_cf_resources),
++};
++
++#define CF_NWE_SETUP (9 << 0)
++#define CF_NCS_WR_SETUP (2 << 8)
++#define CF_NRD_SETUP (9 << 16)
++#define CF_NCS_RD_SETUP (2 << 24)
++
++#define CF_NWE_PULSE (17 << 0)
++#define CF_NCS_WR_PULSE (27 << 8)
++#define CF_NRD_PULSE (17 << 16)
++#define CF_NCS_RD_PULSE (27 << 24)
++
++#define CF_NWE_CYCLE (40 << 0)
++#define CF_NRD_CYCLE (40 << 16)
++
++#define CF_TDF (1 << 16)
++
++static void __init pm9263_add_device_cf(void) {
++struct at91_cf_data *data = & pm9263_cf_data;
++unsigned int csa;
++
++ // Setup Compact flash, first enable the address range of
++ // CS4 in HMATRIX user interface
++ csa = at91_sys_read(AT91_MATRIX_EBI0CSA);
++ at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS4A_SMC_CF1);
++
++ /* Configure SMC CS4 */
++ at91_sys_write(AT91_SMC_SETUP(4),
++ (CF_NWE_SETUP |
++ CF_NCS_WR_SETUP |
++ CF_NRD_SETUP |
++ CF_NCS_RD_SETUP));
++
++ at91_sys_write(AT91_SMC_PULSE(4), (CF_NWE_PULSE |
++ CF_NCS_WR_PULSE |
++ CF_NRD_PULSE |
++ CF_NCS_RD_PULSE));
++ at91_sys_write(AT91_SMC_CYCLE(4), (CF_NWE_CYCLE | CF_NRD_CYCLE));
++ // 16 bit
++ at91_sys_write (AT91_SMC_MODE(4), (AT91_SMC_READMODE |
++ AT91_SMC_WRITEMODE |
++ AT91_SMC_EXNWMODE_DISABLE |
++ AT91_SMC_DBW_16 |
++ CF_TDF));
++
++ /* input/irq */
++ if (data->irq_pin) {
++ at91_set_gpio_input(data->irq_pin, 0);
++ at91_set_deglitch(data->irq_pin, 1);
++ }
++ at91_set_gpio_input(data->det_pin, 0);
++ at91_set_deglitch(data->det_pin, 1);
++
++ /* outputs, initially off */
++ if (data->vcc_pin)
++ at91_set_gpio_output(data->vcc_pin, 0);
++ if (data->rst_pin)
++ at91_set_gpio_output(data->rst_pin, 0);
++
++ /* force poweron defaults for these pins ... */
++ at91_set_A_periph(AT91_PIN_PD5, 0); /* PD5/CF_NWAIT */
++ at91_set_A_periph(AT91_PIN_PD14, 0); /* A25/CFRNW */
++ at91_set_A_periph(AT91_PIN_PD6, 0); /* NCS4/CFCS0 */
++ at91_set_A_periph(AT91_PIN_PD8, 0); /* PD8/CFCE1 */
++ at91_set_A_periph(AT91_PIN_PD9, 0); /* PD9/CFCE2 */
++
++ platform_device_register(&pm9263_cf_device);
++}
++#else
++void __init pm9263_add_device_cf(void) {}
++#endif
++
++static void __init pm9263_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* USB Host */
++ at91_add_device_usbh(&pm9263_usbh_data);
++ /* USB Device */
++ at91_add_device_udc(&pm9263_udc_data);
++ /* SPI */
++ at91_add_device_spi(pm9263_spi_devices, ARRAY_SIZE(pm9263_spi_devices));
++ /* Touchscreen */
++ pm9263_add_device_ts();
++ /* MMC */
++ at91_add_device_mmc(1, &pm9263_mmc_data);
++ /* Ethernet */
++ at91_add_device_eth(&pm9263_macb_data);
++ /* NAND */
++ pm9263_add_device_nand();
++ /* LCD Controller */
++ at91_add_device_lcdc(&pm9263_lcdc_data);
++ /* Push Buttons */
++ pm9263_add_device_buttons();
++ /* AC97 */
++ at91_add_device_ac97(&pm9263_ac97_data);
++#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
++ platform_device_register(&pm926x_w1_device);
++#endif
++ /* Compact flash */
++ pm9263_add_device_cf();
++ /* LEDs */
++ at91_gpio_leds(pm9263_leds, ARRAY_SIZE(pm9263_leds));
++ /* shutdown controller, wakeup button (5 msec low) */
++ at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
++ | AT91_SHDW_RTTWKEN);
++}
++
++MACHINE_START(PM9263, "Ronetix PM9263/BB9263")
++ /* Maintainer: Atmel */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91sam926x_timer,
++ .map_io = pm9263_map_io,
++ .init_irq = pm9263_init_irq,
++ .init_machine = pm9263_board_init,
++MACHINE_END
+diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/include/mach/at91_ac97c.h linux-2.6.28-at91-ronetix/arch/arm/mach-at91/include/mach/at91_ac97c.h
+--- linux-2.6.28-at91/arch/arm/mach-at91/include/mach/at91_ac97c.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/include/mach/at91_ac97c.h 2009-01-12 16:00:42.000000000 +0100
+@@ -0,0 +1,282 @@
++/* linux/include/asm-arm/arch-at91rm9200/ac97c.h
++ *
++ * Hardware definition for the ac97c peripheral in the ATMEL at91sam926x processor
++ *
++ * Generated 12/09/2005 (11:54:20) AT91 SW Application Group from AC97C_XXXX V1.3
++ *
++ * This program is free software; you can redistribute 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, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
++ * DISCLAIMED. IN NO EVENT SHALL ATMEL 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.
++ */
++
++
++#ifndef __AC97C_H
++#define __AC97C_H
++
++/* -------------------------------------------------------- */
++/* AC97C ID definitions for AT91SAM926x */
++/* -------------------------------------------------------- */
++#ifndef AT91C_ID_AC97C
++#define AT91C_ID_AC97C 18 /**< AC97 Controller id */
++#endif /* AT91C_ID_AC97C */
++
++/* -------------------------------------------------------- */
++/* AC97C Base Address definitions for AT91SAM926x */
++/* -------------------------------------------------------- */
++#define AT91C_BASE_AC97C 0xFFFA0000 /**< AC97C base address */
++
++/* -------------------------------------------------------- */
++/* PIO definition for AC97C hardware peripheral */
++/* -------------------------------------------------------- */
++#define AT91C_PB1_AC97CK (1 << 1) /**< */
++#define AT91C_PB0_AC97FS (1 << 0) /**< */
++#define AT91C_PB3_AC97RX (1 << 3) /**< */
++#define AT91C_PB2_AC97TX (1 << 2) /**< */
++
++
++/* -------------------------------------------------------- */
++/* Register offset definition for AC97C hardware peripheral */
++/* -------------------------------------------------------- */
++#define AC97C_MR (0x0008) /**< Mode Register */
++#define AC97C_ICA (0x0010) /**< Input Channel AssignementRegister */
++#define AC97C_OCA (0x0014) /**< Output Channel Assignement Register */
++#define AC97C_CARHR (0x0020) /**< Channel A Receive Holding Register */
++#define AC97C_CATHR (0x0024) /**< Channel A Transmit Holding Register */
++#define AC97C_CASR (0x0028) /**< Channel A Status Register */
++#define AC97C_CAMR (0x002C) /**< Channel A Mode Register */
++#define AC97C_CBRHR (0x0030) /**< Channel B Receive Holding Register (optional) */
++#define AC97C_CBTHR (0x0034) /**< Channel B Transmit Holding Register (optional) */
++#define AC97C_CBSR (0x0038) /**< Channel B Status Register */
++#define AC97C_CBMR (0x003C) /**< Channel B Mode Register */
++#define AC97C_CORHR (0x0040) /**< COdec Transmit Holding Register */
++#define AC97C_COTHR (0x0044) /**< COdec Transmit Holding Register */
++#define AC97C_COSR (0x0048) /**< CODEC Status Register */
++#define AC97C_COMR (0x004C) /**< CODEC Mask Status Register */
++#define AC97C_SR (0x0050) /**< Status Register */
++#define AC97C_IER (0x0054) /**< Interrupt Enable Register */
++#define AC97C_IDR (0x0058) /**< Interrupt Disable Register */
++#define AC97C_IMR (0x005C) /**< Interrupt Mask Register */
++#define AC97C_VERSION (0x00FC) /**< Version Register */
++
++/* -------------------------------------------------------- */
++/* Bitfields definition for AC97C hardware peripheral */
++/* -------------------------------------------------------- */
++/* --- Register AC97C_MR */
++#define AT91C_AC97C_ENA (0x1 << 0 ) /**< (AC97C) AC97 Controller Global Enable */
++#define AT91C_AC97C_WRST (0x1 << 1 ) /**< (AC97C) Warm Reset */
++#define AT91C_AC97C_VRA (0x1 << 2 ) /**< (AC97C) Variable RAte (for Data Slots) */
++/* --- Register AC97C_ICA */
++#define AT91C_AC97C_CHID3 (0x7 << 0 ) /**< (AC97C) Channel Id for the input slot 3 */
++#define AT91C_AC97C_CHID3_NONE 0x0 /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID3_CA 0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID3_CB 0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID3_CC 0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4 (0x7 << 3 ) /**< (AC97C) Channel Id for the input slot 4 */
++#define AT91C_AC97C_CHID4_NONE (0x0 << 3) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4_CA (0x1 << 3) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4_CB (0x2 << 3) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4_CC (0x3 << 3) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5 (0x7 << 6 ) /**< (AC97C) Channel Id for the input slot 5 */
++#define AT91C_AC97C_CHID5_NONE (0x0 << 6) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5_CA (0x1 << 6) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5_CB (0x2 << 6) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5_CC (0x3 << 6) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6 (0x7 << 9 ) /**< (AC97C) Channel Id for the input slot 6 */
++#define AT91C_AC97C_CHID6_NONE (0x0 << 9) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6_CA (0x1 << 9) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6_CB (0x2 << 9) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6_CC (0x3 << 9) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7 (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
++#define AT91C_AC97C_CHID7_NONE (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7_CA (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7_CB (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7_CC (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8 (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
++#define AT91C_AC97C_CHID8_NONE (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8_CA (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8_CB (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8_CC (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9 (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
++#define AT91C_AC97C_CHID9_NONE (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9_CA (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9_CB (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9_CC (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10 (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
++#define AT91C_AC97C_CHID10_NONE (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10_CA (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10_CB (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10_CC (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11 (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
++#define AT91C_AC97C_CHID11_NONE (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11_CA (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11_CB (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11_CC (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12 (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
++#define AT91C_AC97C_CHID12_NONE (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12_CA (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12_CB (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12_CC (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
++/* --- Register AC97C_OCA */
++#define AT91C_AC97C_CHID3 (0x7 << 0 ) /**< (AC97C) Channel Id for the input slot 3 */
++#define AT91C_AC97C_CHID3_NONE 0x0 /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID3_CA 0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID3_CB 0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID3_CC 0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4 (0x7 << 3 ) /**< (AC97C) Channel Id for the input slot 4 */
++#define AT91C_AC97C_CHID4_NONE (0x0 << 3) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4_CA (0x1 << 3) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4_CB (0x2 << 3) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4_CC (0x3 << 3) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5 (0x7 << 6 ) /**< (AC97C) Channel Id for the input slot 5 */
++#define AT91C_AC97C_CHID5_NONE (0x0 << 6) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5_CA (0x1 << 6) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5_CB (0x2 << 6) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5_CC (0x3 << 6) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6 (0x7 << 9 ) /**< (AC97C) Channel Id for the input slot 6 */
++#define AT91C_AC97C_CHID6_NONE (0x0 << 9) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6_CA (0x1 << 9) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6_CB (0x2 << 9) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6_CC (0x3 << 9) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7 (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
++#define AT91C_AC97C_CHID7_NONE (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7_CA (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7_CB (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7_CC (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8 (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
++#define AT91C_AC97C_CHID8_NONE (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8_CA (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8_CB (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8_CC (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9 (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
++#define AT91C_AC97C_CHID9_NONE (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9_CA (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9_CB (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9_CC (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10 (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
++#define AT91C_AC97C_CHID10_NONE (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10_CA (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10_CB (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10_CC (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11 (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
++#define AT91C_AC97C_CHID11_NONE (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11_CA (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11_CB (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11_CC (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12 (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
++#define AT91C_AC97C_CHID12_NONE (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12_CA (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12_CB (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12_CC (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
++/* --- Register AC97C_CARHR */
++#define AT91C_AC97C_RDATA (0xFFFFF << 0 ) /**< (AC97C) Receive data */
++/* --- Register AC97C_CATHR */
++#define AT91C_AC97C_TDATA (0xFFFFF << 0 ) /**< (AC97C) Transmit data */
++/* --- Register AC97C_CASR */
++#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
++#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
++#define AT91C_AC97C_ENDTX (0x1 << 10) /**< (AC97C) */
++#define AT91C_AC97C_TXBUFE (0x1 << 11) /**< (AC97C) */
++#define AT91C_AC97C_ENDRX (0x1 << 14) /**< (AC97C) */
++#define AT91C_AC97C_RXBUFF (0x1 << 15) /**< (AC97C) */
++/* --- Register AC97C_CAMR */
++#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
++#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
++#define AT91C_AC97C_ENDTX (0x1 << 10) /**< (AC97C) */
++#define AT91C_AC97C_TXBUFE (0x1 << 11) /**< (AC97C) */
++#define AT91C_AC97C_ENDRX (0x1 << 14) /**< (AC97C) */
++#define AT91C_AC97C_RXBUFF (0x1 << 15) /**< (AC97C) */
++#define AT91C_AC97C_SIZE (0x3 << 16) /**< (AC97C) */
++#define AT91C_AC97C_SIZE_20_BITS (0x0 << 16) /**< (AC97C) Data size is 20 bits */
++#define AT91C_AC97C_SIZE_18_BITS (0x1 << 16) /**< (AC97C) Data size is 18 bits */
++#define AT91C_AC97C_SIZE_16_BITS (0x2 << 16) /**< (AC97C) Data size is 16 bits */
++#define AT91C_AC97C_SIZE_10_BITS (0x3 << 16) /**< (AC97C) Data size is 10 bits */
++#define AT91C_AC97C_CEM (0x1 << 18) /**< (AC97C) */
++#define AT91C_AC97C_CEN (0x1 << 21) /**< (AC97C) */
++#define AT91C_AC97C_PDCEN (0x1 << 22) /**< (AC97C) */
++/* --- Register AC97C_CBRHR */
++#define AT91C_AC97C_RDATA (0xFFFFF << 0 ) /**< (AC97C) Receive data */
++/* --- Register AC97C_CBTHR */
++#define AT91C_AC97C_TDATA (0xFFFFF << 0 ) /**< (AC97C) Transmit data */
++/* --- Register AC97C_CBSR */
++#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
++#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
++/* --- Register AC97C_CBMR */
++#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
++#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
++#define AT91C_AC97C_SIZE (0x3 << 16) /**< (AC97C) */
++#define AT91C_AC97C_SIZE_20_BITS (0x0 << 16) /**< (AC97C) Data size is 20 bits */
++#define AT91C_AC97C_SIZE_18_BITS (0x1 << 16) /**< (AC97C) Data size is 18 bits */
++#define AT91C_AC97C_SIZE_16_BITS (0x2 << 16) /**< (AC97C) Data size is 16 bits */
++#define AT91C_AC97C_SIZE_10_BITS (0x3 << 16) /**< (AC97C) Data size is 10 bits */
++#define AT91C_AC97C_CEM (0x1 << 18) /**< (AC97C) */
++#define AT91C_AC97C_CEN (0x1 << 21) /**< (AC97C) */
++/* --- Register AC97C_CORHR */
++#define AT91C_AC97C_SDATA (0xFFFF << 0 ) /**< (AC97C) Status Data */
++/* --- Register AC97C_COTHR */
++#define AT91C_AC97C_CDATA (0xFFFF << 0 ) /**< (AC97C) Command Data */
++#define AT91C_AC97C_CADDR (0x7F << 16) /**< (AC97C) COdec control register index */
++#define AT91C_AC97C_READ (0x1 << 23) /**< (AC97C) Read/Write command */
++/* --- Register AC97C_COSR */
++#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
++/* --- Register AC97C_COMR */
++#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
++/* --- Register AC97C_SR */
++#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
++#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
++/* --- Register AC97C_IER */
++#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
++#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
++/* --- Register AC97C_IDR */
++#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
++#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
++/* --- Register AC97C_IMR */
++#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
++#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
++#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
++#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
++#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
++
++#endif /* __AC97C_H */
+diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/Kconfig linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Kconfig
+--- linux-2.6.28-at91/arch/arm/mach-at91/Kconfig 2009-01-12 15:59:27.000000000 +0100
++++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Kconfig 2009-01-12 16:00:41.000000000 +0100
+@@ -280,6 +280,13 @@ config MACH_NEOCORE926
+ help
+ Select this if you are using the Adeneo Neocore 926 board.
+
++config MACH_PM9263
++ bool "Ronetix PM9263 Evaluation Kit"
++ depends on ARCH_AT91SAM9263
++ help
++ Select this if you are using Ronetix's PM9263 board.
++ <http://ronetix.at/starter_kit_9263.html>
++
+ endif
+
+ # ----------------------------------------------------------
+@@ -347,13 +354,13 @@ comment "AT91 Board Options"
+
+ config MTD_AT91_DATAFLASH_CARD
+ bool "Enable DataFlash Card support"
+- depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926)
++ depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926 || MACH_PM9263)
+ help
+ Enable support for the DataFlash card.
+
+ config MTD_NAND_ATMEL_BUSWIDTH_16
+ bool "Enable 16-bit data bus interface to NAND flash"
+- depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK)
++ depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK || MACH_PM9263)
+ help
+ On AT91SAM926x boards both types of NAND flash can be present
+ (8 and 16 bit data bus width).
+diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/Makefile linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Makefile
+--- linux-2.6.28-at91/arch/arm/mach-at91/Makefile 2009-01-12 15:59:27.000000000 +0100
++++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Makefile 2009-01-12 16:00:41.000000000 +0100
+@@ -54,6 +54,7 @@ obj-$(CONFIG_MACH_USB_A9263) += board-us
+ obj-$(CONFIG_MACH_CSB737) += board-csb737.o
+ obj-$(CONFIG_MACH_TOTEMNOVA) += board-totemnova.o
+ obj-$(CONFIG_MACH_NEOCORE926) += board-neocore926.o
++obj-$(CONFIG_MACH_PM9263) += board-pm9263.o
+
+ # AT91SAM9RL board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
+diff -urNp linux-2.6.28-at91/drivers/pcmcia/at91_cf.c linux-2.6.28-at91-ronetix/drivers/pcmcia/at91_cf.c
+--- linux-2.6.28-at91/drivers/pcmcia/at91_cf.c 2009-01-12 15:59:27.000000000 +0100
++++ linux-2.6.28-at91-ronetix/drivers/pcmcia/at91_cf.c 2009-01-12 16:00:42.000000000 +0100
+@@ -27,7 +27,7 @@
+
+ #if defined(CONFIG_ARCH_AT91RM9200)
+ #include <mach/at91rm9200_mc.h>
+-#elif defined(CONFIG_ARCH_AT91SAM9260)
++#elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263)
+ #include <mach/at91sam9_smc.h>
+ #else
+ #error "Unsupported AT91 processor"
+@@ -138,7 +138,8 @@ at91_cf_set_socket(struct pcmcia_socket
+ }
+
+ /* toggle reset if needed */
+- gpio_set_value(cf->board->rst_pin, s->flags & SS_RESET);
++ if (cf->board->rst_pin)
++ gpio_set_value(cf->board->rst_pin, s->flags & SS_RESET);
+
+ pr_debug("%s: Vcc %d, io_irq %d, flags %04x csc %04x\n",
+ driver_name, s->Vcc, s->io_irq, s->flags, s->csc_mask);
+diff -urNp linux-2.6.28-at91/drivers/pcmcia/Kconfig linux-2.6.28-at91-ronetix/drivers/pcmcia/Kconfig
+--- linux-2.6.28-at91/drivers/pcmcia/Kconfig 2009-01-12 15:59:27.000000000 +0100
++++ linux-2.6.28-at91-ronetix/drivers/pcmcia/Kconfig 2009-01-12 16:00:42.000000000 +0100
+@@ -270,7 +270,7 @@ config BFIN_CFPCMCIA
+
+ config AT91_CF
+ tristate "AT91 CompactFlash Controller"
+- depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260)
++ depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263)
+ help
+ Say Y here to support the CompactFlash controller on AT91 chips.
+ Or choose M to compile the driver as a module named "at91_cf".
+diff -urNp linux-2.6.28-at91/sound/arm/at91-ac97.c.rej linux-2.6.28-at91-ronetix/sound/arm/at91-ac97.c.rej
+--- linux-2.6.28-at91/sound/arm/at91-ac97.c.rej 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/sound/arm/at91-ac97.c.rej 2009-01-12 16:00:43.000000000 +0100
+@@ -0,0 +1,702 @@
++***************
++*** 0 ****
++--- 1,699 ----
+++ /* drivers/sound/arm/at91-ac97c.c
+++ *
+++ * Driver for the Atmel AC97 Controller
+++ *
+++ * Copyright (C) 2005 Atmel Norway
+++ */
+++
+++ #define CAPTURE 0
+++
+++ #define EXTRA_DEBUG 0
+++
+++ #undef DEBUG
+++ #include <linux/platform_device.h>
+++ #include <linux/module.h>
+++ #include <linux/init.h>
+++ #include <linux/interrupt.h>
+++ #include <linux/delay.h>
+++ #include <linux/clk.h>
+++ #include <linux/atmel_pdc.h>
+++
+++ //#include <sound/driver.h>
+++ #include <sound/core.h>
+++ #include <sound/initval.h>
+++ #include <sound/pcm.h>
+++ #include <sound/ac97_codec.h>
+++
+++ #include <asm/io.h>
+++ #include <mach/hardware.h>
+++ #include <asm/cacheflush.h>
+++
+++ #include <mach/gpio.h>
+++ #include <mach/at91_ac97c.h>
+++ #include <mach/board.h>
+++
+++ #define platform_num_resources(dev) ((dev)->num_resources)
+++ #define platform_resource_start(dev, i) ((dev)->resource[(i)].start)
+++ #define platform_resource_end(dev, i) ((dev)->resource[(i)].end)
+++ #define platform_resource_flags(dev, i) ((dev)->resource[(i)].flags)
+++ #define platform_resource_len(dev, i) \
+++ (platform_resource_end((dev), (i)) - \
+++ platform_resource_start((dev), (i)) + 1)
+++
+++
+++ /* module parameters */
+++ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
+++ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
+++ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
+++
+++ module_param_array(index, int, NULL, 0444);
+++ MODULE_PARM_DESC(index, "Index value for AC97 controller");
+++ module_param_array(id, charp, NULL, 0444);
+++ MODULE_PARM_DESC(id, "ID string for AC97 controller");
+++ module_param_array(enable, bool, NULL, 0444);
+++ MODULE_PARM_DESC(enable, "Enable AC97 controller");
+++
+++ typedef struct at91_ac97 {
+++ spinlock_t lock;
+++ void *regs;
+++ int period;
+++ struct clk *ac97_clk;
+++ struct snd_pcm_substream *playback_substream;
+++ struct snd_card *card;
+++ struct snd_pcm *pcm;
+++ struct snd_ac97 *ac97;
+++ struct snd_ac97_bus *ac97_bus;
+++ int irq;
+++ struct platform_device *pdev;
+++ u8 reset_pin;
+++ } at91_ac97_t;
+++
+++ #define get_chip(card) ((at91_ac97_t *)(card)->private_data)
+++
+++ #define ac97c_writel(chip, reg, val) \
+++ writel((val), (chip)->regs + AC97C_##reg)
+++
+++ #define ac97c_readl(chip, reg) \
+++ readl((chip)->regs + AC97C_##reg)
+++
+++ // PIO management functions
+++ void at91_ac97c_drive_reset(at91_ac97_t *chip, unsigned int value)
+++ {
+++ if (chip->reset_pin)
+++ at91_set_gpio_value(chip->reset_pin, value);
+++ }
+++
+++
+++ static const char driver_name[] = "at91-ac97";
+++
+++ /* PCM part */
+++
+++ static struct snd_pcm_hardware snd_at91_ac97_hw = {
+++ .info = (SNDRV_PCM_INFO_INTERLEAVED
+++ | SNDRV_PCM_INFO_MMAP
+++ | SNDRV_PCM_INFO_MMAP_VALID
+++ | SNDRV_PCM_INFO_BLOCK_TRANSFER),
+++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
+++ .rates = SNDRV_PCM_RATE_CONTINUOUS,
+++ .rate_min = 8000,
+++ .rate_max = 48000,
+++ .channels_min = 2,
+++ .channels_max = 2,
+++ .buffer_bytes_max = 256*1024,
+++ .period_bytes_min = 1024,
+++ .period_bytes_max = 4*1024,
+++ .periods_min = 1,
+++ .periods_max = 64,
+++ };
+++
+++ static int snd_at91_ac97_playback_open(struct snd_pcm_substream *substream)
+++ {
+++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
+++ struct snd_pcm_runtime *runtime = substream->runtime;
+++
+++ runtime->hw = snd_at91_ac97_hw;
+++ chip->playback_substream = substream;
+++ chip->period = 0;
+++
+++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_playback_open\n\r", driver_name);
+++
+++ return 0;
+++ }
+++
+++ static int snd_at91_ac97_playback_close(struct snd_pcm_substream *substream)
+++ {
+++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
+++
+++ chip->playback_substream = NULL;
+++ return 0;
+++ }
+++
+++ static int snd_at91_ac97_hw_params(struct snd_pcm_substream *substream,
+++ struct snd_pcm_hw_params *hw_params)
+++ {
+++ int err;
+++
+++ err = snd_pcm_lib_malloc_pages(substream,
+++ params_buffer_bytes(hw_params));
+++ return err;
+++ }
+++
+++ static int snd_at91_ac97_hw_free(struct snd_pcm_substream *substream)
+++ {
+++
+++ snd_pcm_lib_free_pages(substream);
+++
+++ return 0;
+++ }
+++
+++ static int snd_at91_ac97_playback_prepare(struct snd_pcm_substream *substream)
+++ {
+++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
+++ struct snd_pcm_runtime *runtime = substream->runtime;
+++ int block_size = frames_to_bytes(runtime, runtime->period_size);
+++ unsigned long word = 0;
+++
+++ //clean_dcache_region(runtime->dma_area, block_size * 2);
+++ snd_printd(KERN_DEBUG "%s : block_size = %d\n\r", driver_name, block_size);
+++
+++ /* Assign slots to channels */
+++ switch (substream->runtime->channels) {
+++ /* TODO: Support more than two channels */
+++ case 1:
+++ word |= AT91C_AC97C_CHID3_CA;
+++ break;
+++ case 2:
+++ default:
+++ /* Assign Left and Right slots (3,4) to Channel A */
+++ word |= AT91C_AC97C_CHID3_CA | AT91C_AC97C_CHID4_CA;
+++ break;
+++ }
+++
+++ ac97c_writel(chip, OCA, word);
+++
+++ /*
+++ * Configure sample format and size.
+++ * FIXME: Avoid conflicts with capture channel.
+++ */
+++ word = AT91C_AC97C_PDCEN | AT91C_AC97C_SIZE_16_BITS;
+++
+++ switch (runtime->format){
+++ case SNDRV_PCM_FORMAT_S16_BE:
+++ word |= AT91C_AC97C_CEM;
+++ break;
+++ case SNDRV_PCM_FORMAT_S16_LE:
+++ default:
+++ break;
+++ }
+++
+++ ac97c_writel(chip, CAMR, word);
+++
+++ /* Set variable rate if needed */
+++ if ( runtime->rate != 48000 ){
+++ word = ac97c_readl(chip, MR);
+++ word |= AT91C_AC97C_VRA;
+++ ac97c_writel(chip, MR, word);
+++ } else {
+++ /* Clear Variable Rate Bit */
+++ word = ac97c_readl(chip, MR);
+++ word &= ~AT91C_AC97C_VRA;
+++ ac97c_writel(chip, MR, word);
+++ }
+++
+++ /* Set rate */
+++ snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate);
+++
+++ snd_printd(KERN_DEBUG
+++ "%s : dma_addr = %x\n\r"
+++ " : dma_area = %p\n\r"
+++ " : dma_bytes = %d\n\r",
+++ driver_name, runtime->dma_addr,
+++ runtime->dma_area, runtime->dma_bytes);
+++
+++ /* Initialize and start the PDC */
+++ writel(runtime->dma_addr, chip->regs + ATMEL_PDC_TPR);
+++ writel(block_size / 2, chip->regs + ATMEL_PDC_TCR);
+++ writel(runtime->dma_addr + block_size, chip->regs + ATMEL_PDC_TNPR);
+++ writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
+++
+++ /* Enable Channel A interrupts */
+++ ac97c_writel(chip, IER, AT91C_AC97C_CAEVT);
+++
+++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_playback_prepare\n\r", driver_name);
+++
+++ return 0;
+++ }
+++
+++ static int at91_ac97_trigger(struct snd_pcm_substream *substream, int cmd)
+++ {
+++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
+++ unsigned long camr, ptcr = 0, flags;
+++ int err = 0;
+++
+++ spin_lock_irqsave(&chip->lock, flags);
+++ camr = ac97c_readl(chip, CAMR);
+++
+++ switch (cmd) {
+++ case SNDRV_PCM_TRIGGER_START:
+++ camr |= (AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
+++ ptcr = ATMEL_PDC_TXTEN;
+++ break;
+++ case SNDRV_PCM_TRIGGER_STOP:
+++ camr &= ~(AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
+++ ptcr = ATMEL_PDC_TXTDIS;
+++ break;
+++ default:
+++ err = -EINVAL;
+++ break;
+++ }
+++
+++ ac97c_writel(chip, CAMR, camr);
+++ writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
+++
+++ spin_unlock_irqrestore(&chip->lock, flags);
+++
+++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_trigger\n\r", driver_name);
+++
+++ return err;
+++ }
+++
+++ static snd_pcm_uframes_t snd_at91_ac97_pointer(struct snd_pcm_substream *substream)
+++ {
+++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
+++ struct snd_pcm_runtime *runtime = substream->runtime;
+++ snd_pcm_uframes_t pos;
+++ unsigned long bytes;
+++
+++ bytes = readl(chip->regs + ATMEL_PDC_TPR) - runtime->dma_addr;
+++
+++ pos = bytes_to_frames(runtime, bytes);
+++ if (pos >= runtime->buffer_size)
+++ pos -= runtime->buffer_size;
+++
+++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_pointer\n\r", driver_name);
+++
+++ return pos;
+++ }
+++
+++ static struct snd_pcm_ops at91_ac97_playback_ops = {
+++ .open = snd_at91_ac97_playback_open,
+++ .close = snd_at91_ac97_playback_close,
+++ .ioctl = snd_pcm_lib_ioctl,
+++ .hw_params = snd_at91_ac97_hw_params,
+++ .hw_free = snd_at91_ac97_hw_free,
+++ .prepare = snd_at91_ac97_playback_prepare,
+++ .trigger = at91_ac97_trigger,
+++ .pointer = snd_at91_ac97_pointer,
+++ };
+++
+++ #if CAPTURE
+++ static struct snd_pcm_ops at91_ac97_capture_ops = {
+++ .open = snd_at91_ac97_playback_open,
+++ .close = snd_at91_ac97_playback_close,
+++ .ioctl = snd_pcm_lib_ioctl,
+++ .hw_params = snd_at91_ac97_hw_params,
+++ .hw_free = snd_at91_ac97_hw_free,
+++ .prepare = snd_at91_ac97_playback_prepare,
+++ .trigger = at91_ac97_trigger,
+++ .pointer = snd_at91_ac97_pointer,
+++ };
+++ #endif
+++
+++ static struct ac97_pcm at91_ac97_pcm_defs[] __devinitdata = {
+++ /* Playback */
+++ {
+++ .exclusive = 1,
+++ .r = { {
+++ .slots = ((1 << AC97_SLOT_PCM_LEFT)
+++ | (1 << AC97_SLOT_PCM_RIGHT)),
+++ } },
+++ },
+++ #if CAPTURE
+++ { /* Mic in */
+++ .stream = 1,
+++ .exclusive = 1,
+++ .r = {
+++ [0] = {
+++ .slots = (1 << AC97_SLOT_MIC),
+++ },
+++ },
+++ }
+++ #endif
+++ };
+++
+++ static int __devinit snd_at91_ac97_pcm_new(at91_ac97_t *chip)
+++ {
+++ struct snd_pcm *pcm;
+++ int err;
+++
+++ err = snd_ac97_pcm_assign(chip->ac97_bus, 1, at91_ac97_pcm_defs);
+++ if (err)
+++ return err;
+++
+++ err = snd_pcm_new(chip->card, "Atmel AC97", 0, 1, 0, &pcm);
+++ if (err)
+++ return err;
+++
+++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
+++ &chip->pdev->dev,
+++ 128 * 1024, 256 * 1024);
+++
+++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &at91_ac97_playback_ops);
+++ #if CAPTURE
+++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &at91_ac97_capture_ops);
+++ #endif
+++ pcm->private_data = chip;
+++ pcm->info_flags = 0;
+++ strcpy(pcm->name, "Atmel AC97");
+++ chip->pcm = pcm;
+++
+++ return 0;
+++ }
+++
+++ /* Mixer part */
+++ static int snd_at91_ac97_mixer_new(at91_ac97_t *chip)
+++ {
+++ int err;
+++ struct snd_ac97_template template;
+++
+++ memset(&template, 0, sizeof(template));
+++ template.private_data = chip;
+++ template.num = 0;
+++ template.addr = 0;
+++ err = snd_ac97_mixer(chip->ac97_bus, &template, &chip->ac97);
+++
+++ return err;
+++ }
+++
+++
+++ static irqreturn_t snd_at91_ac97_interrupt(int irq, void *dev_id)
+++ {
+++ at91_ac97_t *chip = dev_id;
+++ unsigned long status;
+++ unsigned long dummy;
+++
+++ status = ac97c_readl(chip, SR);
+++
+++ if (status & AT91C_AC97C_CAEVT) {
+++ struct snd_pcm_runtime *runtime;
+++ int offset, next_period, block_size;
+++ unsigned long casr;
+++
+++ runtime = chip->playback_substream->runtime;
+++ block_size = frames_to_bytes(runtime, runtime->period_size);
+++
+++ casr = ac97c_readl(chip, CASR);
+++
+++ if (casr & AT91C_AC97C_ENDTX) {
+++ chip->period++;
+++ if (chip->period == runtime->periods)
+++ chip->period = 0;
+++ next_period = chip->period + 1;
+++ if (next_period == runtime->periods)
+++ next_period = 0;
+++
+++ offset = block_size * next_period;
+++
+++ writel(runtime->dma_addr + offset, chip->regs + ATMEL_PDC_TNPR);
+++ writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
+++
+++ snd_pcm_period_elapsed(chip->playback_substream);
+++ } else {
+++ printk(KERN_WARNING
+++ "Spurious AC97A interrupt, status = 0x%08lx\n",
+++ (unsigned long)casr);
+++ }
+++ } else {
+++ printk(KERN_WARNING
+++ "Spurious AC97 interrupt, status = 0x%08lx\n",
+++ status);
+++ }
+++
+++ dummy = ac97c_readl(chip, SR);
+++
+++ return IRQ_HANDLED;
+++ }
+++
+++
+++ /* CODEC part */
+++
+++ static void snd_at91_ac97_hard_reset(at91_ac97_t *chip)
+++ {
+++ // Enable AC97 Controller.
+++ // Perform a cold (hard) reset of the AC97 codec.
+++ ac97c_writel(chip, MR, 0);
+++ ac97c_writel(chip, MR, AT91C_AC97C_ENA);
+++
+++ at91_ac97c_drive_reset(chip, 0);
+++ udelay(1);
+++ at91_ac97c_drive_reset(chip, 1);
+++ udelay(1);
+++ }
+++
+++
+++ static void snd_at91_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
+++ unsigned short val)
+++ {
+++ at91_ac97_t *chip = ac97->private_data;
+++ unsigned long word;
+++ int timeout = 0x100;
+++
+++ snd_printd(KERN_DEBUG "%s : Writing codec register 0x%x = 0x%x\n\r", driver_name, reg, val);
+++
+++ word = (reg & 0x7f) << 16 | val;
+++
+++ do {
+++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY) {
+++ ac97c_writel(chip, COTHR, word);
+++ return;
+++ }
+++ udelay(1);
+++ } while (--timeout);
+++
+++ snd_printk(KERN_WARNING "at91-ac97: codec write timeout\n\r");
+++ }
+++
+++ static unsigned short snd_at91_ac97_read(struct snd_ac97 *ac97,
+++ unsigned short reg)
+++ {
+++ at91_ac97_t *chip = ac97->private_data;
+++ unsigned long word;
+++ int timeout = 0x100;
+++
+++
+++ word = (0x80 | (reg & 0x7f)) << 16;
+++
+++ do {
+++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY){
+++ ac97c_writel(chip, COTHR, word);
+++ break;
+++ }
+++ udelay(1);
+++ } while (--timeout);
+++
+++ if (!timeout)
+++ goto timed_out;
+++
+++ timeout = 0x100;
+++
+++ do {
+++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_RXRDY){
+++ unsigned short val = (unsigned short) ac97c_readl(chip, CORHR);
+++ return val;
+++ }
+++ udelay(1);
+++ } while (--timeout);
+++
+++ if (!timeout)
+++ goto timed_out1;
+++
+++ timed_out:
+++ snd_printk(KERN_WARNING "at91-ac97: codec read timeout\n\r");
+++ return 0xffff;
+++
+++ timed_out1:
+++ #if EXTRA_DEBUG
+++ snd_printk(KERN_WARNING "at91-ac97: codec read timeout 1\n\r");
+++ #endif
+++ return 0xffff;
+++ }
+++
+++ static void snd_at91_ac97_warm_reset(struct snd_ac97 *ac97)
+++ {
+++ at91_ac97_t *chip = ac97->private_data;
+++ volatile unsigned int mr = ac97c_readl(chip, MR);
+++
+++ mr |= AT91C_AC97C_WRST;
+++
+++ ac97c_writel(chip, MR, mr);
+++ udelay(1);
+++
+++ mr &= ~AT91C_AC97C_WRST;
+++ ac97c_writel(chip, MR, mr);
+++ }
+++
+++ static void snd_at91_ac97_destroy(struct snd_card *card)
+++ {
+++ at91_ac97_t *chip = get_chip(card);
+++
+++ #if 0
+++ // Disable AC97 Controller
+++ ac97c_writel(chip, MR, 0);
+++
+++ // Disable AC97 Controller clock
+++ if (chip->ac97_clk) clk_disable(chip->ac97_clk);
+++ #endif
+++ if (chip->irq != -1) {
+++ free_irq(chip->irq, chip);
+++ chip->irq = -1;
+++ }
+++ if (chip->regs) {
+++ iounmap(chip->regs);
+++ chip->regs = NULL;
+++ }
+++ }
+++
+++ static int __devinit snd_at91_ac97_create(struct snd_card *card,
+++ struct platform_device *pdev)
+++ {
+++ static struct snd_ac97_bus_ops ops = {
+++ .write = snd_at91_ac97_write,
+++ .read = snd_at91_ac97_read,
+++ .reset = snd_at91_ac97_warm_reset,
+++ };
+++
+++ at91_ac97_t *chip = get_chip(card);
+++ int irq, err = 0;
+++
+++ card->private_free = snd_at91_ac97_destroy;
+++
+++ spin_lock_init(&chip->lock);
+++ chip->card = card;
+++ chip->pdev = pdev;
+++ chip->irq = -1;
+++
+++ if (!(platform_resource_flags(pdev, 0) & IORESOURCE_MEM)
+++ || !(platform_resource_flags(pdev, 1) & IORESOURCE_IRQ))
+++ return -ENODEV;
+++
+++ irq = platform_resource_start(pdev, 1);
+++
+++ err = request_irq(irq, snd_at91_ac97_interrupt, 0, "ac97", chip);
+++ if (err) {
+++ snd_printk(KERN_WARNING "unable to request IRQ%d\n", irq);
+++ return err;
+++ }
+++
+++ chip->irq = irq;
+++ #if EXTRA_DEBUG
+++ snd_printk(KERN_INFO "AC97C regs = %08X \n", platform_resource_start(pdev, 0));
+++ snd_printk(KERN_INFO "AC97C irq = %d \n",irq);
+++ #endif
+++
+++ chip->regs = ioremap(platform_resource_start(pdev, 0),
+++ platform_resource_len(pdev, 0));
+++ if (!chip->regs) {
+++ snd_printk(KERN_WARNING "unable to remap AC97C io memory\n");
+++ return -ENOMEM;
+++ }
+++
+++ snd_card_set_dev(card, &pdev->dev);
+++
+++ err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus);
+++
+++ return err;
+++ }
+++
+++ static int __devinit snd_at91_ac97_probe(struct platform_device *pdev)
+++ {
+++ static int dev;
+++ struct atmel_ac97_data *pdata = pdev->dev.platform_data;
+++ struct snd_card *card;
+++ at91_ac97_t *chip;
+++ int err;
+++
+++ if (dev >= SNDRV_CARDS)
+++ return -ENODEV;
+++ if (!enable[dev]) {
+++ dev++;
+++ return -ENOENT;
+++ }
+++ card = snd_card_new(index[dev], id[dev], THIS_MODULE,
+++ sizeof(at91_ac97_t));
+++ if (!card)
+++ return -ENOMEM;
+++ chip = get_chip(card);
+++
+++ err = snd_at91_ac97_create(card, pdev);
+++ if (err)
+++ goto out_free_card;
+++
+++ // Enable AC97 Controller clock
+++ chip->reset_pin = pdata->reset_pin;
+++ chip->ac97_clk = clk_get(NULL, "ac97_clk");
+++ if(!chip->ac97_clk)
+++ goto out_free_card;
+++
+++ clk_enable(chip->ac97_clk);
+++
+++ // Perform a codec hard reset.
+++ // This also enables the AC97 Controller.
+++ snd_at91_ac97_hard_reset(chip);
+++
+++ err = snd_at91_ac97_mixer_new(chip);
+++ if (err)
+++ goto out_free_card;
+++
+++ err = snd_at91_ac97_pcm_new(chip);
+++ if (err)
+++ goto out_free_card;
+++
+++
+++ strcpy(card->driver, "ac97c");
+++ strcpy(card->shortname, "Atmel AC97");
+++ sprintf(card->longname, "Atmel AC97 Controller at %#lx, irq %i",
+++ (unsigned long) platform_resource_start(pdev, 0), (int) chip->irq);
+++
+++ err = snd_card_register(card);
+++ if (err)
+++ goto out_free_card;
+++
+++ dev_set_drvdata(&pdev->dev, card);
+++ dev++;
+++ return 0;
+++
+++ out_free_card:
+++ snd_card_free(card);
+++ return err;
+++ }
+++
+++ static int __devexit snd_at91_ac97_remove(struct platform_device *pdev)
+++ {
+++ struct snd_card *card = dev_get_drvdata(&pdev->dev);
+++ at91_ac97_t *chip;
+++
+++
+++ if (! card) return 0;
+++
+++ chip = get_chip(card);
+++
+++ snd_card_free(card);
+++
+++ // Disable AC97 Controller
+++ ac97c_writel(chip, MR, 0);
+++
+++ // Disable AC97 Controller clock
+++ clk_disable(chip->ac97_clk);
+++
+++ dev_set_drvdata(&pdev->dev, NULL);
+++
+++ return 0;
+++ }
+++
+++ static struct platform_driver at91_ac97_driver =
+++ {
+++ .probe = snd_at91_ac97_probe,
+++ .remove = __devexit_p(snd_at91_ac97_remove),
+++ .driver =
+++ {
+++ .name = "ac97c",
+++ }
+++ ,
+++ };
+++
+++ static int __init at91_ac97_init(void)
+++ {
+++ return platform_driver_register(&at91_ac97_driver);
+++ }
+++
+++ static void __exit at91_ac97_exit(void)
+++ {
+++ platform_driver_unregister(&at91_ac97_driver);
+++ }
+++
+++ module_init(at91_ac97_init);
+++ module_exit(at91_ac97_exit);
+++
+++ MODULE_LICENSE("GPL");
+++ MODULE_DESCRIPTION("Driver for Atmel AC97 Controller");
+++ MODULE_AUTHOR("Atmel");
+diff -urNp linux-2.6.28-at91/sound/arm/Kconfig linux-2.6.28-at91-ronetix/sound/arm/Kconfig
+--- linux-2.6.28-at91/sound/arm/Kconfig 2009-01-12 15:59:32.000000000 +0100
++++ linux-2.6.28-at91-ronetix/sound/arm/Kconfig 2009-01-12 16:00:42.000000000 +0100
+@@ -59,5 +59,14 @@ config SND_AT91_AC97
+ Say Y or M if you want to support any AC97 codec attached to
+ the SAM926X AC97 Controller.
+
++config SND_AT91_AC97
++ tristate "AC97 Controller driver for SAM926X familly from ATMEL"
++ depends on SND && ARCH_AT91SAM9263
++ select SND_PCM
++ select SND_AC97_CODEC
++ help
++ Say Y or M if you want to support any AC97 codec attached to
++ the SAM926X AC97 Controller.
++
+ endif # SND_ARM
+
+diff -urNp linux-2.6.28-at91/sound/arm/Kconfig.orig linux-2.6.28-at91-ronetix/sound/arm/Kconfig.orig
+--- linux-2.6.28-at91/sound/arm/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/sound/arm/Kconfig.orig 2009-01-12 16:00:31.000000000 +0100
+@@ -0,0 +1,63 @@
++# ALSA ARM drivers
++
++menuconfig SND_ARM
++ bool "ARM sound devices"
++ depends on ARM
++ default y
++ help
++ Support for sound devices specific to ARM architectures.
++ Drivers that are implemented on ASoC can be found in
++ "ALSA for SoC audio support" section.
++
++if SND_ARM
++
++config SND_SA11XX_UDA1341
++ tristate "SA11xx UDA1341TS driver (iPaq H3600)"
++ depends on ARCH_SA1100 && L3
++ select SND_PCM
++ help
++ Say Y here if you have a Compaq iPaq H3x00 handheld computer
++ and want to use its Philips UDA 1341 audio chip.
++
++ To compile this driver as a module, choose M here: the module
++ will be called snd-sa11xx-uda1341.
++
++config SND_ARMAACI
++ tristate "ARM PrimeCell PL041 AC Link support"
++ depends on ARM_AMBA
++ select SND_PCM
++ select SND_AC97_CODEC
++
++config SND_PXA2XX_PCM
++ tristate
++ select SND_PCM
++
++config SND_PXA2XX_LIB
++ tristate
++ select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97
++
++config SND_PXA2XX_LIB_AC97
++ bool
++
++config SND_PXA2XX_AC97
++ tristate "AC97 driver for the Intel PXA2xx chip"
++ depends on ARCH_PXA
++ select SND_PXA2XX_PCM
++ select SND_AC97_CODEC
++ select SND_PXA2XX_LIB
++ select SND_PXA2XX_LIB_AC97
++ help
++ Say Y or M if you want to support any AC97 codec attached to
++ the PXA2xx AC97 interface.
++
++config SND_AT91_AC97
++ tristate "AC97 Controller driver for SAM926X familly from ATMEL"
++ depends on SND && ARCH_AT91
++ select SND_PCM
++ select SND_AC97_CODEC
++ help
++ Say Y or M if you want to support any AC97 codec attached to
++ the SAM926X AC97 Controller.
++
++endif # SND_ARM
++
+diff -urNp linux-2.6.28-at91/sound/arm/Makefile.orig linux-2.6.28-at91-ronetix/sound/arm/Makefile.orig
+--- linux-2.6.28-at91/sound/arm/Makefile.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/sound/arm/Makefile.orig 2009-01-12 16:00:31.000000000 +0100
+@@ -0,0 +1,23 @@
++#
++# Makefile for ALSA
++#
++
++obj-$(CONFIG_SND_SA11XX_UDA1341) += snd-sa11xx-uda1341.o
++snd-sa11xx-uda1341-objs := sa11xx-uda1341.o
++
++obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o
++snd-aaci-objs := aaci.o devdma.o
++
++obj-$(CONFIG_SND_PXA2XX_PCM) += snd-pxa2xx-pcm.o
++snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
++
++obj-$(CONFIG_SND_PXA2XX_LIB) += snd-pxa2xx-lib.o
++snd-pxa2xx-lib-y := pxa2xx-pcm-lib.o
++snd-pxa2xx-lib-$(CONFIG_SND_PXA2XX_LIB_AC97) += pxa2xx-ac97-lib.o
++
++obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
++snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
++
++obj-$(CONFIG_SND_AT91_AC97) += snd-at91-ac97.o
++snd-at91-ac97-objs := at91-ac97.o
++
+diff -urNp linux-2.6.28-at91/sound/arm/Makefile.rej linux-2.6.28-at91-ronetix/sound/arm/Makefile.rej
+--- linux-2.6.28-at91/sound/arm/Makefile.rej 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.28-at91-ronetix/sound/arm/Makefile.rej 2009-01-12 16:00:42.000000000 +0100
+@@ -0,0 +1,12 @@
++***************
++*** 17,19 ****
++
++ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
++ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
++--- 17,22 ----
++
++ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
++ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
+++
+++ obj-$(CONFIG_SND_AT91_AC97) += snd-at91-ac97.o
+++ snd-at91-ac97-objs := at91-ac97.o
diff --git a/packages/linux/linux-2.6.28/stb225/uImage.patch b/packages/linux/linux-2.6.28/stb225/uImage.patch
new file mode 100644
index 0000000000..f43a221e62
--- /dev/null
+++ b/packages/linux/linux-2.6.28/stb225/uImage.patch
@@ -0,0 +1,23 @@
+diff -urN linux-2.6.28.orig/arch/mips/Makefile linux-2.6.28/arch/mips/Makefile
+--- linux-2.6.28.orig/arch/mips/Makefile 2009-01-28 16:12:23.000000000 +0200
++++ linux-2.6.28/arch/mips/Makefile 2009-01-28 16:13:54.000000000 +0200
+@@ -682,6 +682,19 @@
+
+ all: $(all-y)
+
++# Support for U-Boot image creation (from U-Boot README)
++uImage: vmlinux
++ $(OBJCOPY) -O binary -R .note -R .comment -S vmlinux vmlinux.bin
++ rm -f vmlinux.bin.gz
++ gzip -9 vmlinux.bin
++ LA=`$(OBJDUMP) -p vmlinux | sed -n 's/LOAD.*vaddr \([^ ]*\).*/\1/p'`; \
++ EN=`$(OBJDUMP) -f vmlinux | sed -n 's/.*start address \([^ ]*\).*/\1/p'`; \
++ echo $$LA; \
++ echo $$EN; \
++ mkimage -A mips -O linux -T kernel -C gzip \
++ -a $$LA -e $$EN -n "Linux Kernel Image" \
++ -d vmlinux.bin.gz uImage
++
+ vmlinux.bin: $(vmlinux-32)
+ +@$(call makeboot,$@)
+
diff --git a/packages/linux/linux-2.6.28/tosa/commit-31c9b28 b/packages/linux/linux-2.6.28/tosa/commit-31c9b28
new file mode 100644
index 0000000000..0ae09c91ce
--- /dev/null
+++ b/packages/linux/linux-2.6.28/tosa/commit-31c9b28
@@ -0,0 +1,67 @@
+commit 31c9b284ae49093fdd9d1e9a347e458c7ebc37a9
+Author: Dmitry Baryshkov <dbaryshkov@gmail.com>
+Date: Tue Oct 28 18:40:37 2008 +0300
+
+ [ARM] pxa/tosa: support tc6393xb/tmiofb.
+
+ Add platform data necessary to support tmiofb on tosa.
+
+ Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
+ Signed-off-by: Eric Miao <eric.miao@marvell.com>
+
+diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
+index 224897a..366a533 100644
+--- a/arch/arm/mach-pxa/tosa.c
++++ b/arch/arm/mach-pxa/tosa.c
+@@ -733,6 +733,43 @@ static void tosa_tc6393xb_teardown(struct platform_device *dev)
+ gpio_free(TOSA_GPIO_CARD_VCC_ON);
+ }
+
++static struct fb_videomode tosa_tc6393xb_lcd_mode[] = {
++ {
++ .xres = 480,
++ .yres = 640,
++ .pixclock = 0x002cdf00,/* PLL divisor */
++ .left_margin = 0x004c,
++ .right_margin = 0x005b,
++ .upper_margin = 0x0001,
++ .lower_margin = 0x000d,
++ .hsync_len = 0x0002,
++ .vsync_len = 0x0001,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },{
++ .xres = 240,
++ .yres = 320,
++ .pixclock = 0x00e7f203,/* PLL divisor */
++ .left_margin = 0x0024,
++ .right_margin = 0x002f,
++ .upper_margin = 0x0001,
++ .lower_margin = 0x000d,
++ .hsync_len = 0x0002,
++ .vsync_len = 0x0001,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++ .vmode = FB_VMODE_NONINTERLACED,
++ }
++};
++
++static struct tmio_fb_data tosa_tc6393xb_fb_config = {
++ .lcd_set_power = tc6393xb_lcd_set_power,
++ .lcd_mode = tc6393xb_lcd_mode,
++ .num_modes = ARRAY_SIZE(tosa_tc6393xb_lcd_mode),
++ .modes = &tosa_tc6393xb_lcd_mode[0],
++ .height = 82,
++ .width = 60,
++};
++
+ static struct tc6393xb_platform_data tosa_tc6393xb_data = {
+ .scr_pll2cr = 0x0cc1,
+ .scr_gper = 0x3300,
+@@ -748,6 +785,7 @@ static struct tc6393xb_platform_data tosa_tc6393xb_data = {
+ .resume = tosa_tc6393xb_resume,
+
+ .nand_data = &tosa_tc6393xb_nand_config,
++ .fb_data = &tosa_tc6393xb_fb_config,
+
+ .resume_restore = 1,
+ };
diff --git a/packages/linux/linux-2.6.28/tosa/commit-ddfb33c b/packages/linux/linux-2.6.28/tosa/commit-ddfb33c
new file mode 100644
index 0000000000..4f3278afe3
--- /dev/null
+++ b/packages/linux/linux-2.6.28/tosa/commit-ddfb33c
@@ -0,0 +1,39 @@
+commit ddfb33c0ffbd8b8f5984de5a8f9513b88cd28b67
+Author: Dmitry Baryshkov <dbaryshkov@gmail.com>
+Date: Thu Nov 27 01:25:09 2008 +0300
+
+ [ARM] pxa/tosa: fix building w/o TC6393XB driver
+
+ Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
+ Signed-off-by: Eric Miao <eric.miao@marvell.com>
+
+diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
+index 366a533..c46b640 100644
+--- a/arch/arm/mach-pxa/tosa.c
++++ b/arch/arm/mach-pxa/tosa.c
+@@ -733,6 +733,7 @@ static void tosa_tc6393xb_teardown(struct platform_device *dev)
+ gpio_free(TOSA_GPIO_CARD_VCC_ON);
+ }
+
++#ifdef CONFIG_MFD_TC6393XB
+ static struct fb_videomode tosa_tc6393xb_lcd_mode[] = {
+ {
+ .xres = 480,
+@@ -769,6 +770,7 @@ static struct tmio_fb_data tosa_tc6393xb_fb_config = {
+ .height = 82,
+ .width = 60,
+ };
++#endif
+
+ static struct tc6393xb_platform_data tosa_tc6393xb_data = {
+ .scr_pll2cr = 0x0cc1,
+@@ -785,7 +787,9 @@ static struct tc6393xb_platform_data tosa_tc6393xb_data = {
+ .resume = tosa_tc6393xb_resume,
+
+ .nand_data = &tosa_tc6393xb_nand_config,
++#ifdef CONFIG_MFD_TC6393XB
+ .fb_data = &tosa_tc6393xb_fb_config,
++#endif
+
+ .resume_restore = 1,
+ };
diff --git a/packages/linux/linux-2.6.28/tosa/commit-f34ee79 b/packages/linux/linux-2.6.28/tosa/commit-f34ee79
new file mode 100644
index 0000000000..37522d8aa2
--- /dev/null
+++ b/packages/linux/linux-2.6.28/tosa/commit-f34ee79
@@ -0,0 +1,68 @@
+commit f34ee79a5307e9a4c68c978840cf7e7e10236362
+Author: Dmitry Baryshkov <dbaryshkov@gmail.com>
+Date: Tue Nov 25 00:57:27 2008 +0300
+
+ [ARM] pxa/tosa: add physmap mapping for ROM
+
+ Add mapping for system ROM using physmap-flash mapping.
+
+ Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
+ Signed-off-by: Eric Miao <eric.miao@marvell.com>
+
+diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
+index c46b640..3332e5d 100644
+--- a/arch/arm/mach-pxa/tosa.c
++++ b/arch/arm/mach-pxa/tosa.c
+@@ -25,6 +25,7 @@
+ #include <linux/mfd/tmio.h>
+ #include <linux/mtd/nand.h>
+ #include <linux/mtd/partitions.h>
++#include <linux/mtd/physmap.h>
+ #include <linux/pm.h>
+ #include <linux/gpio_keys.h>
+ #include <linux/input.h>
+@@ -831,6 +832,36 @@ static struct spi_board_info spi_board_info[] __initdata = {
+ },
+ };
+
++static struct mtd_partition sharpsl_rom_parts[] = {
++ {
++ .name ="Boot PROM Filesystem",
++ .offset = 0x00160000,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct physmap_flash_data sharpsl_rom_data = {
++ .width = 2,
++ .nr_parts = ARRAY_SIZE(sharpsl_rom_parts),
++ .parts = sharpsl_rom_parts,
++};
++
++static struct resource sharpsl_rom_resources[] = {
++ {
++ .start = 0x00000000,
++ .end = 0x007fffff,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device sharpsl_rom_device = {
++ .name = "physmap-flash",
++ .id = -1,
++ .resource = sharpsl_rom_resources,
++ .num_resources = ARRAY_SIZE(sharpsl_rom_resources),
++ .dev.platform_data = &sharpsl_rom_data,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &tosascoop_device,
+ &tosascoop_jc_device,
+@@ -840,6 +871,7 @@ static struct platform_device *devices[] __initdata = {
+ &tosa_gpio_keys_device,
+ &tosaled_device,
+ &tosa_bt_device,
++ &sharpsl_rom_device,
+ };
+
+ static void tosa_poweroff(void)
diff --git a/packages/linux/linux-davinci/8250_davinci.patch b/packages/linux/linux-davinci-2.6.25/8250_davinci.patch
index 3625ded357..3625ded357 100644
--- a/packages/linux/linux-davinci/8250_davinci.patch
+++ b/packages/linux/linux-davinci-2.6.25/8250_davinci.patch
diff --git a/packages/linux/linux-davinci/davinci-dvevm/defconfig b/packages/linux/linux-davinci-2.6.25/davinci-dvevm/defconfig
index 0e6dc3324c..0e6dc3324c 100644
--- a/packages/linux/linux-davinci/davinci-dvevm/defconfig
+++ b/packages/linux/linux-davinci-2.6.25/davinci-dvevm/defconfig
diff --git a/packages/linux/linux-davinci/davinci-dvevm/defconfig.eabi b/packages/linux/linux-davinci-2.6.25/davinci-dvevm/defconfig.eabi
index 02df8e79d9..02df8e79d9 100644
--- a/packages/linux/linux-davinci/davinci-dvevm/defconfig.eabi
+++ b/packages/linux/linux-davinci-2.6.25/davinci-dvevm/defconfig.eabi
diff --git a/packages/linux/linux-davinci-2.6.25/davinci-sffsdr/defconfig b/packages/linux/linux-davinci-2.6.25/davinci-sffsdr/defconfig
new file mode 100644
index 0000000000..8f53af1a17
--- /dev/null
+++ b/packages/linux/linux-davinci-2.6.25/davinci-sffsdr/defconfig
@@ -0,0 +1,1441 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.26-rc5-davinci1
+# Sun Jun 22 19:30:45 2008
+#
+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_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# 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_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_SYSCTL_SYSCALL_CHECK=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_COMPAT_BRK=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_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG 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"
+CONFIG_CLASSIC_RCU=y
+
+#
+# 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_MXC is not set
+# CONFIG_ARCH_ORION5X 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=y
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM7X00A is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# TI DaVinci Implementations
+#
+
+#
+# DaVinci Core Type
+#
+CONFIG_ARCH_DAVINCI644x=y
+
+#
+# DaVinci Board Type
+#
+# CONFIG_MACH_DAVINCI_EVM is not set
+CONFIG_MACH_SFFSDR=y
+CONFIG_DAVINCI_I2C_EXPANDER=y
+# CONFIG_DAVINCI_MCBSP is not set
+# CONFIG_DAVINCI_RESET_CLOCKS is not set
+# CONFIG_DAVINCI_BOOT_TAG is not set
+
+#
+# DaVinci Options
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_NOIFAR=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_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_PREEMPT is not set
+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_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_LEDS=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=" debug "
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# 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_ARCH_SUSPEND_POSSIBLE=y
+
+#
+# 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_XFRM_STATISTICS 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 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=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO 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_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 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_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# 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_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES 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
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# 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
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+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
+# 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 is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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
+
+#
+# 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
+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_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+CONFIG_MTD_NAND_DAVINCI=y
+# CONFIG_NAND_FLASH_HW_ECC is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# 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=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=32768
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=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 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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+CONFIG_TI_DAVINCI_EMAC=y
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 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
+# CONFIG_IWLWIFI_LEDS 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_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=m
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+CONFIG_NETCONSOLE=y
+# CONFIG_NETCONSOLE_DYNAMIC is not set
+CONFIG_NETPOLL=y
+CONFIG_NETPOLL_TRAP=y
+CONFIG_NET_POLL_CONTROLLER=y
+# 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=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_EVDEV=m
+CONFIG_INPUT_EVBUG=m
+
+#
+# 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=m
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_FUJITSU 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_TSC2005 is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# 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 is not set
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# 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_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_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_DAVINCI=y
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_SENSORS_TLV320AIC23=m
+CONFIG_SENSORS_TLV320AIC33=m
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_LP5521 is not set
+CONFIG_GPIOEXPANDER_DAVINCI=y
+# 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_SPI is not set
+CONFIG_HAVE_GPIO_LIB=y
+
+#
+# GPIO Support
+#
+# CONFIG_DEBUG_GPIO is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_PCA953X is not set
+CONFIG_GPIO_PCF857X=m
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID 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_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S 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_LM93 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_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 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_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_DAVINCI_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW 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_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_MUSB_HDRC=m
+CONFIG_USB_MUSB_SOC=y
+
+#
+# DaVinci 644x USB support
+#
+# 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_MUSB_PIO_ONLY=y
+CONFIG_USB_MUSB_LOGLEVEL=0
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM 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_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB 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
+#
+# 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
+# CONFIG_USB_ISIGHTFW is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+CONFIG_USB_GADGET_DEBUG_FILES=y
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 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_S3C2410 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 is not set
+CONFIG_USB_G_PRINTER=m
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_DAVINCI=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON 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=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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_UIO 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_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# 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_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_FS_WBUF_VERIFY is not set
+# 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 is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 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_BIND34 is not set
+# 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
+
+#
+# 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
+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=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=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# 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_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS 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_LOCK_STAT 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_WRITECOUNT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_STACK_USAGE 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
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/sffsdr.patch b/packages/linux/linux-davinci-2.6.25/davinci-sffsdr/sffsdr.patch
index 123334f8ba..123334f8ba 100644
--- a/packages/linux/linux-davinci/davinci-sffsdr/sffsdr.patch
+++ b/packages/linux/linux-davinci-2.6.25/davinci-sffsdr/sffsdr.patch
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0001-USB-musb-cppi-bugfixes.patch b/packages/linux/linux-davinci/davinci-sffsdr/0001-USB-musb-cppi-bugfixes.patch
new file mode 100644
index 0000000000..ad6a19b3d6
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0001-USB-musb-cppi-bugfixes.patch
@@ -0,0 +1,72 @@
+From 901b05b33b8ca924bab3fa63ef3fd6dcb123e318 Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Sat, 24 Jan 2009 17:57:30 -0800
+Subject: [PATCH 01/12] USB: musb cppi bugfixes
+
+These compilation errors are related to incorrect
+debugging macro and variable names and generated the
+following errors:
+
+ drivers/usb/musb/cppi_dma.c:437:5: warning: "MUSB_DEBUG" is not defined
+ drivers/usb/musb/cppi_dma.c: In function 'cppi_next_rx_segment':
+ drivers/usb/musb/cppi_dma.c:884: error: 'debug' undeclared (first use in this function)
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ drivers/usb/musb/cppi_dma.c | 9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c
+index 5ad6d08..d8d5345 100644
+--- a/drivers/usb/musb/cppi_dma.c
++++ b/drivers/usb/musb/cppi_dma.c
+@@ -9,6 +9,7 @@
+ #include <linux/usb.h>
+
+ #include "musb_core.h"
++#include "musb_debug.h"
+ #include "cppi_dma.h"
+
+
+@@ -423,6 +424,7 @@ cppi_rndis_update(struct cppi_channel *c, int is_rx,
+ }
+ }
+
++#ifdef CONFIG_USB_MUSB_DEBUG
+ static void cppi_dump_rxbd(const char *tag, struct cppi_descriptor *bd)
+ {
+ pr_debug("RXBD/%s %08x: "
+@@ -431,10 +433,11 @@ static void cppi_dump_rxbd(const char *tag, struct cppi_descriptor *bd)
+ bd->hw_next, bd->hw_bufp, bd->hw_off_len,
+ bd->hw_options);
+ }
++#endif
+
+ static void cppi_dump_rxq(int level, const char *tag, struct cppi_channel *rx)
+ {
+-#if MUSB_DEBUG > 0
++#ifdef CONFIG_USB_MUSB_DEBUG
+ struct cppi_descriptor *bd;
+
+ if (!_dbg_level(level))
+@@ -881,12 +884,14 @@ cppi_next_rx_segment(struct musb *musb, struct cppi_channel *rx, int onepacket)
+ bd->hw_options |= CPPI_SOP_SET;
+ tail->hw_options |= CPPI_EOP_SET;
+
+- if (debug >= 5) {
++#ifdef CONFIG_USB_MUSB_DEBUG
++ if (_dbg_level(5)) {
+ struct cppi_descriptor *d;
+
+ for (d = rx->head; d; d = d->next)
+ cppi_dump_rxbd("S", d);
+ }
++#endif
+
+ /* in case the preceding transfer left some state... */
+ tail = rx->last_processed;
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0002-ARM-Mark-unsupported-syscalls-as-IGNORE.patch b/packages/linux/linux-davinci/davinci-sffsdr/0002-ARM-Mark-unsupported-syscalls-as-IGNORE.patch
new file mode 100644
index 0000000000..b569d5d535
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0002-ARM-Mark-unsupported-syscalls-as-IGNORE.patch
@@ -0,0 +1,31 @@
+From f090919d8c0d1ecb0df6148ff34b6c20d4fb4ba3 Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 14:35:56 -0500
+Subject: [PATCH 02/12] ARM: Mark unsupported syscalls as IGNORE
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ scripts/checksyscalls.sh | 7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+diff --git a/scripts/checksyscalls.sh b/scripts/checksyscalls.sh
+index 60d00d1..2a75819 100755
+--- a/scripts/checksyscalls.sh
++++ b/scripts/checksyscalls.sh
+@@ -109,6 +109,13 @@ cat << EOF
+ #define __IGNORE_getpmsg
+ #define __IGNORE_putpmsg
+ #define __IGNORE_vserver
++
++/* Remove some warnings for ARM target. */
++#define __IGNORE_fadvise64
++#define __IGNORE_migrate_pages
++#define __IGNORE_pselect6
++#define __IGNORE_ppoll
++#define __IGNORE_epoll_pwait
+ EOF
+ }
+
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0003-Add-macros-for-enabling-a-UART.patch b/packages/linux/linux-davinci/davinci-sffsdr/0003-Add-macros-for-enabling-a-UART.patch
new file mode 100644
index 0000000000..9ca9f020e9
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0003-Add-macros-for-enabling-a-UART.patch
@@ -0,0 +1,29 @@
+From 33beaeec0dfec8cc5bf7a88f524a2a1f41fa30ba Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 14:45:19 -0500
+Subject: [PATCH 03/12] Add macros for enabling a UART
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ arch/arm/mach-davinci/include/mach/serial.h | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-davinci/include/mach/serial.h b/arch/arm/mach-davinci/include/mach/serial.h
+index de7c667..d77d25b 100644
+--- a/arch/arm/mach-davinci/include/mach/serial.h
++++ b/arch/arm/mach-davinci/include/mach/serial.h
+@@ -30,6 +30,11 @@ struct davinci_uart_config {
+ unsigned int enabled_uarts;
+ };
+
++/* Use these macros in board setup code to enable a specific UART. */
++#define DAVINCI_UART0_ENA (1 << 0)
++#define DAVINCI_UART1_ENA (1 << 1)
++#define DAVINCI_UART2_ENA (1 << 2)
++
+ extern void davinci_serial_init(struct davinci_uart_config *);
+
+ #endif /* __ASM_ARCH_SERIAL_H */
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0004-Davinci-Enable-MAC-address-to-be-specified-on-kerne.patch b/packages/linux/linux-davinci/davinci-sffsdr/0004-Davinci-Enable-MAC-address-to-be-specified-on-kerne.patch
new file mode 100644
index 0000000000..d1721914c6
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0004-Davinci-Enable-MAC-address-to-be-specified-on-kerne.patch
@@ -0,0 +1,54 @@
+From 2e852db8367da3d3f60230419bd36bab2535c0ff Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 17:11:05 -0500
+Subject: [PATCH 04/12] Davinci: Enable MAC address to be specified on kernel cmd line
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ arch/arm/mach-davinci/devices.c | 23 +++++++++++++++++++++++
+ 1 files changed, 23 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
+index a0f5a60..db433be 100644
+--- a/arch/arm/mach-davinci/devices.c
++++ b/arch/arm/mach-davinci/devices.c
+@@ -353,6 +353,27 @@ static struct platform_device dm646x_emac_device = {
+ }
+ };
+
++/* Get Ethernet address from kernel boot params */
++static u8 davinci_bootloader_mac_addr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
++
++static int /*__init */ davinci_bootloader_mac_setup(char *str)
++{
++ int i;
++
++ if (str == NULL)
++ return 0;
++
++ /* Conversion of a MAC address from a string (AA:BB:CC:DD:EE:FF)
++ * to a 6 bytes array. */
++ for (i = 0; i < 6; i++)
++ davinci_bootloader_mac_addr[i] =
++ simple_strtol(&str[i*3], (char **)NULL, 16);
++
++ return 1;
++}
++/* Get MAC address from kernel boot parameter eth=AA:BB:CC:DD:EE:FF */
++__setup("eth=", davinci_bootloader_mac_setup);
++
+ void davinci_init_emac(char *mac_addr)
+ {
+ DECLARE_MAC_BUF(buf);
+@@ -366,6 +387,8 @@ void davinci_init_emac(char *mac_addr)
+
+ if (mac_addr && is_valid_ether_addr(mac_addr))
+ memcpy(emac_pdata.mac_addr, mac_addr, 6);
++ else if (is_valid_ether_addr(davinci_bootloader_mac_addr))
++ memcpy(emac_pdata.mac_addr, davinci_bootloader_mac_addr, 6);
+ else {
+ /* Use random MAC if none passed */
+ random_ether_addr(emac_pdata.mac_addr);
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0005-Add-DAS-Mini-DAS-and-AFE-USB-machine-types.patch b/packages/linux/linux-davinci/davinci-sffsdr/0005-Add-DAS-Mini-DAS-and-AFE-USB-machine-types.patch
new file mode 100644
index 0000000000..4522059d30
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0005-Add-DAS-Mini-DAS-and-AFE-USB-machine-types.patch
@@ -0,0 +1,135 @@
+From 138af04718e9d80ed75bf3aeb7fb89fee2f97c12 Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 14:17:52 -0500
+Subject: [PATCH 05/12] Add DAS, Mini-DAS and AFE-USB machine types
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ arch/arm/tools/mach-types | 100 ++++++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 98 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
+index 017ceba..f8c2e34 100644
+--- a/arch/arm/tools/mach-types
++++ b/arch/arm/tools/mach-types
+@@ -12,7 +12,7 @@
+ #
+ # http://www.arm.linux.org.uk/developer/machines/?action=new
+ #
+-# Last update: Thu Sep 25 10:10:50 2008
++# Last update: Sun Nov 30 16:39:36 2008
+ #
+ # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
+ #
+@@ -1771,7 +1771,7 @@ axs_ultrax MACH_AXS_ULTRAX AXS_ULTRAX 1779
+ at572d940deb MACH_AT572D940DEB AT572D940DEB 1780
+ davinci_da8xx_evm MACH_DAVINCI_DA8XX_EVM DAVINCI_DA8XX_EVM 1781
+ ep9302 MACH_EP9302 EP9302 1782
+-at572d940hfeb MACH_AT572D940HFEB AT572D940HFEB 1783
++at572d940hfek MACH_AT572D940HFEB AT572D940HFEB 1783
+ cybook3 MACH_CYBOOK3 CYBOOK3 1784
+ wdg002 MACH_WDG002 WDG002 1785
+ sg560adsl MACH_SG560ADSL SG560ADSL 1786
+@@ -1899,3 +1899,99 @@ rut100 MACH_RUT100 RUT100 1908
+ asusp535 MACH_ASUSP535 ASUSP535 1909
+ htcraphael MACH_HTCRAPHAEL HTCRAPHAEL 1910
+ sygdg1 MACH_SYGDG1 SYGDG1 1911
++sygdg2 MACH_SYGDG2 SYGDG2 1912
++seoul MACH_SEOUL SEOUL 1913
++salerno MACH_SALERNO SALERNO 1914
++ucn_s3c64xx MACH_UCN_S3C64XX UCN_S3C64XX 1915
++msm7201a MACH_MSM7201A MSM7201A 1916
++lpr1 MACH_LPR1 LPR1 1917
++armadillo500fx MACH_ARMADILLO500FX ARMADILLO500FX 1918
++g3evm MACH_G3EVM G3EVM 1919
++z3_dm355 MACH_Z3_DM355 Z3_DM355 1920
++w90p910evb MACH_W90P910EVB W90P910EVB 1921
++w90p920evb MACH_W90P920EVB W90P920EVB 1922
++w90p950evb MACH_W90P950EVB W90P950EVB 1923
++w90n960evb MACH_W90N960EVB W90N960EVB 1924
++camhd MACH_CAMHD CAMHD 1925
++mvc100 MACH_MVC100 MVC100 1926
++electrum_200 MACH_ELECTRUM_200 ELECTRUM_200 1927
++htcjade MACH_HTCJADE HTCJADE 1928
++memphis MACH_MEMPHIS MEMPHIS 1929
++imx27sbc MACH_IMX27SBC IMX27SBC 1930
++lextar MACH_LEXTAR LEXTAR 1931
++mv88f6281gtw_ge MACH_MV88F6281GTW_GE MV88F6281GTW_GE 1932
++ncp MACH_NCP NCP 1933
++z32an_series MACH_Z32AN Z32AN 1934
++tmq_capd MACH_TMQ_CAPD TMQ_CAPD 1935
++omap3_wl MACH_OMAP3_WL OMAP3_WL 1936
++chumby MACH_CHUMBY CHUMBY 1937
++atsarm9 MACH_ATSARM9 ATSARM9 1938
++davinci_dm365_evm MACH_DAVINCI_DM365_EVM DAVINCI_DM365_EVM 1939
++bahamas MACH_BAHAMAS BAHAMAS 1940
++das MACH_DAS DAS 1941
++minidas MACH_MINIDAS MINIDAS 1942
++vk1000 MACH_VK1000 VK1000 1943
++centro MACH_CENTRO CENTRO 1944
++ctera_2bay MACH_CTERA_2BAY CTERA_2BAY 1945
++edgeconnect MACH_EDGECONNECT EDGECONNECT 1946
++nd27000 MACH_ND27000 ND27000 1947
++cobra MACH_GEMALTO_COBRA GEMALTO_COBRA 1948
++ingelabs_comet MACH_INGELABS_COMET INGELABS_COMET 1949
++pollux_wiz MACH_POLLUX_WIZ POLLUX_WIZ 1950
++blackstone MACH_BLACKSTONE BLACKSTONE 1951
++topaz MACH_TOPAZ TOPAZ 1952
++aixle MACH_AIXLE AIXLE 1953
++mw998 MACH_MW998 MW998 1954
++nokia_rx51 MACH_NOKIA_RX51 NOKIA_RX51 1955
++vsc5605ev MACH_VSC5605EV VSC5605EV 1956
++nt98700dk MACH_NT98700DK NT98700DK 1957
++icontact MACH_ICONTACT ICONTACT 1958
++swarco_frcpu MACH_SWARCO_FRCPU SWARCO_FRCPU 1959
++swarco_scpu MACH_SWARCO_SCPU SWARCO_SCPU 1960
++bbox_p16 MACH_BBOX_P16 BBOX_P16 1961
++bstd MACH_BSTD BSTD 1962
++sbc2440ii MACH_SBC2440II SBC2440II 1963
++pcm034 MACH_PCM034 PCM034 1964
++neso MACH_NESO NESO 1965
++wlnx_9g20 MACH_WLNX_9G20 WLNX_9G20 1966
++omap_zoom2 MACH_OMAP_ZOOM2 OMAP_ZOOM2 1967
++totemnova MACH_TOTEMNOVA TOTEMNOVA 1968
++c5000 MACH_C5000 C5000 1969
++unipo_at91sam9263 MACH_UNIPO_AT91SAM9263 UNIPO_AT91SAM9263 1970
++ethernut5 MACH_ETHERNUT5 ETHERNUT5 1971
++arm11 MACH_ARM11 ARM11 1972
++cpuat9260 MACH_CPUAT9260 CPUAT9260 1973
++cpupxa255 MACH_CPUPXA255 CPUPXA255 1974
++cpuimx27 MACH_CPUIMX27 CPUIMX27 1975
++cheflux MACH_CHEFLUX CHEFLUX 1976
++eb_cpux9k2 MACH_EB_CPUX9K2 EB_CPUX9K2 1977
++opcotec MACH_OPCOTEC OPCOTEC 1978
++yt MACH_YT YT 1979
++motoq MACH_MOTOQ MOTOQ 1980
++bsb1 MACH_BSB1 BSB1 1981
++acs5k MACH_ACS5K ACS5K 1982
++milan MACH_MILAN MILAN 1983
++quartzv2 MACH_QUARTZV2 QUARTZV2 1984
++rsvp MACH_RSVP RSVP 1985
++rmp200 MACH_RMP200 RMP200 1986
++snapper_9260 MACH_SNAPPER_9260 SNAPPER_9260 1987
++dsm320 MACH_DSM320 DSM320 1988
++adsgcm MACH_ADSGCM ADSGCM 1989
++ase2_400 MACH_ASE2_400 ASE2_400 1990
++pizza MACH_PIZZA PIZZA 1991
++spot_ngpl MACH_SPOT_NGPL SPOT_NGPL 1992
++armata MACH_ARMATA ARMATA 1993
++exeda MACH_EXEDA EXEDA 1994
++mx31sf005 MACH_MX31SF005 MX31SF005 1995
++f5d8231_4_v2 MACH_F5D8231_4_V2 F5D8231_4_V2 1996
++q2440 MACH_Q2440 Q2440 1997
++qq2440 MACH_QQ2440 QQ2440 1998
++mini2440 MACH_MINI2440 MINI2440 1999
++colibri300 MACH_COLIBRI300 COLIBRI300 2000
++jades MACH_JADES JADES 2001
++spark MACH_SPARK SPARK 2002
++benzina MACH_BENZINA BENZINA 2003
++blaze MACH_BLAZE BLAZE 2004
++linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
++htcvenus MACH_HTCVENUS HTCVENUS 2006
++afeusb MACH_AFEUSB AFEUSB 2117
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0006-ALSA-ASoC-DaVinci-Fix-SFFSDR-compilation-error.patch b/packages/linux/linux-davinci/davinci-sffsdr/0006-ALSA-ASoC-DaVinci-Fix-SFFSDR-compilation-error.patch
new file mode 100644
index 0000000000..bb03490c38
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0006-ALSA-ASoC-DaVinci-Fix-SFFSDR-compilation-error.patch
@@ -0,0 +1,65 @@
+From 590c788288e545ef74b77129bc8f747b5365f5d3 Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 15 Jan 2009 15:40:35 -0500
+Subject: [PATCH 06/12] ALSA: ASoC: DaVinci: Fix SFFSDR compilation error.
+
+Remove dependency on sffsdr_fpga_set_codec_fs() when the
+SFFSDR FPGA module is not selected.
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ sound/soc/davinci/davinci-sffsdr.c | 20 +++++++++++++++++---
+ 1 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/sound/soc/davinci/davinci-sffsdr.c b/sound/soc/davinci/davinci-sffsdr.c
+index 1bbde3e..afb61bf 100644
+--- a/sound/soc/davinci/davinci-sffsdr.c
++++ b/sound/soc/davinci/davinci-sffsdr.c
+@@ -25,7 +25,9 @@
+ #include <asm/gpio.h>
+ #include <asm/dma.h>
+ #include <asm/mach-types.h>
++#ifdef CONFIG_SFFSDR_FPGA
+ #include <asm/plat-sffsdr/sffsdr-fpga.h>
++#endif
+
+ #include <mach/asp.h>
+ #include <mach/edma.h>
+@@ -42,6 +44,17 @@ static int sffsdr_hw_params(struct snd_pcm_substream *substream,
+ int fs;
+ int ret = 0;
+
++ /* Fsref can be 32000, 44100 or 48000. */
++ fs = params_rate(params);
++
++#ifndef CONFIG_SFFSDR_FPGA
++ /* Without the FPGA module, the Fs is fixed at 44100 Hz */
++ if (fs != 44100) {
++ pr_debug("warning: only 44.1 kHz is supported without SFFSDR FPGA module\n");
++ return -EINVAL;
++ }
++#endif
++
+ /* Set cpu DAI configuration:
+ * CLKX and CLKR are the inputs for the Sample Rate Generator.
+ * FSX and FSR are outputs, driven by the sample Rate Generator. */
+@@ -52,12 +65,13 @@ static int sffsdr_hw_params(struct snd_pcm_substream *substream,
+ if (ret < 0)
+ return ret;
+
+- /* Fsref can be 32000, 44100 or 48000. */
+- fs = params_rate(params);
+-
+ pr_debug("sffsdr_hw_params: rate = %d Hz\n", fs);
+
++#ifndef CONFIG_SFFSDR_FPGA
++ return 0;
++#else
+ return sffsdr_fpga_set_codec_fs(fs);
++#endif
+ }
+
+ static struct snd_soc_ops sffsdr_ops = {
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0007-ALSA-ASoC-Davinci-Fix-SFFSDR-FPGA-module-codec-FS.patch b/packages/linux/linux-davinci/davinci-sffsdr/0007-ALSA-ASoC-Davinci-Fix-SFFSDR-FPGA-module-codec-FS.patch
new file mode 100644
index 0000000000..e4a5537b6e
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0007-ALSA-ASoC-Davinci-Fix-SFFSDR-FPGA-module-codec-FS.patch
@@ -0,0 +1,57 @@
+From ca4b0f980f8b03374f48cbb4937d3ed3150c0c3e Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 17:04:41 -0500
+Subject: [PATCH 07/12] ALSA: ASoC: Davinci: Fix SFFSDR FPGA module codec FS bug.
+
+This prevented the FPGA from properly configuring the codec FS when
+the SFFSDR FPGA was compiled as a module.
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ sound/soc/davinci/davinci-sffsdr.c | 14 +++++++-------
+ 1 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/sound/soc/davinci/davinci-sffsdr.c b/sound/soc/davinci/davinci-sffsdr.c
+index afb61bf..b20e36c 100644
+--- a/sound/soc/davinci/davinci-sffsdr.c
++++ b/sound/soc/davinci/davinci-sffsdr.c
+@@ -25,10 +25,10 @@
+ #include <asm/gpio.h>
+ #include <asm/dma.h>
+ #include <asm/mach-types.h>
+-#ifdef CONFIG_SFFSDR_FPGA
+-#include <asm/plat-sffsdr/sffsdr-fpga.h>
+-#endif
+
++#if defined(CONFIG_SFFSDR_FPGA) || defined(CONFIG_SFFSDR_FPGA_MODULE)
++#include <mach/sffsdr-fpga.h>
++#endif
+ #include <mach/asp.h>
+ #include <mach/edma.h>
+
+@@ -47,7 +47,7 @@ static int sffsdr_hw_params(struct snd_pcm_substream *substream,
+ /* Fsref can be 32000, 44100 or 48000. */
+ fs = params_rate(params);
+
+-#ifndef CONFIG_SFFSDR_FPGA
++#if !defined(CONFIG_SFFSDR_FPGA) && !defined(CONFIG_SFFSDR_FPGA_MODULE)
+ /* Without the FPGA module, the Fs is fixed at 44100 Hz */
+ if (fs != 44100) {
+ pr_debug("warning: only 44.1 kHz is supported without SFFSDR FPGA module\n");
+@@ -67,10 +67,10 @@ static int sffsdr_hw_params(struct snd_pcm_substream *substream,
+
+ pr_debug("sffsdr_hw_params: rate = %d Hz\n", fs);
+
+-#ifndef CONFIG_SFFSDR_FPGA
+- return 0;
+-#else
++#if defined(CONFIG_SFFSDR_FPGA) || defined(CONFIG_SFFSDR_FPGA_MODULE)
+ return sffsdr_fpga_set_codec_fs(fs);
++#else
++ return 0;
+ #endif
+ }
+
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0008-ALSA-ASoC-Davinci-Fix-incorrect-machine-type-for.patch b/packages/linux/linux-davinci/davinci-sffsdr/0008-ALSA-ASoC-Davinci-Fix-incorrect-machine-type-for.patch
new file mode 100644
index 0000000000..800f089d51
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0008-ALSA-ASoC-Davinci-Fix-incorrect-machine-type-for.patch
@@ -0,0 +1,26 @@
+From 867883ee8c226ce2c3a43c9d815a2ad706b1c19e Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 15:43:16 -0500
+Subject: [PATCH 08/12] ALSA: ASoC: Davinci: Fix incorrect machine type for SFFSDR board
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ sound/soc/davinci/Kconfig | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/sound/soc/davinci/Kconfig b/sound/soc/davinci/Kconfig
+index 7d3a85d..411a710 100644
+--- a/sound/soc/davinci/Kconfig
++++ b/sound/soc/davinci/Kconfig
+@@ -21,7 +21,7 @@ config SND_DAVINCI_SOC_EVM
+
+ config SND_DAVINCI_SOC_SFFSDR
+ tristate "SoC Audio support for SFFSDR"
+- depends on SND_DAVINCI_SOC && MACH_DAVINCI_SFFSDR
++ depends on SND_DAVINCI_SOC && MACH_SFFSDR
+ select SND_DAVINCI_SOC_I2S
+ select SND_SOC_PCM3008
+ select SFFSDR_FPGA
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0009-sound-ASoC-Fix-DaVinci-module-unload-error.patch b/packages/linux/linux-davinci/davinci-sffsdr/0009-sound-ASoC-Fix-DaVinci-module-unload-error.patch
new file mode 100644
index 0000000000..79a89bfa44
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0009-sound-ASoC-Fix-DaVinci-module-unload-error.patch
@@ -0,0 +1,54 @@
+From 8d9e736833e9e765098353117e022b96ccc72ab1 Mon Sep 17 00:00:00 2001
+From: Kevin Hilman <khilman@deeprootsystems.com>
+Date: Fri, 13 Feb 2009 19:36:37 -0800
+Subject: [PATCH 09/12] sound: ASoC: Fix DaVinci module unload error
+
+sound: ASoC: Fix DaVinci module unload error
+
+Fix for the error when the audio module is unloaded. On unregistering
+the platform_device, platform_device_release will free the platform
+data.If platform data is static the kernel panics when it is freed.
+Instead use the platform device helper function to add data.
+
+This change has been tested on DM644x EVM, DM644x SFFSDR and DM355 EVM.
+
+Signed-off-by: Chaithrika U S <chaithrika@ti.com>
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+---
+ sound/soc/davinci/davinci-evm.c | 3 ++-
+ sound/soc/davinci/davinci-sffsdr.c | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
+index 9420c96..0297703 100644
+--- a/sound/soc/davinci/davinci-evm.c
++++ b/sound/soc/davinci/davinci-evm.c
+@@ -225,7 +225,8 @@ static int __init evm_init(void)
+
+ platform_set_drvdata(evm_snd_device, &evm_snd_devdata);
+ evm_snd_devdata.dev = &evm_snd_device->dev;
+- evm_snd_device->dev.platform_data = data;
++ platform_device_add_data(evm_snd_device, &evm_snd_data,
++ sizeof(evm_snd_data));
+
+ ret = platform_device_add_resources(evm_snd_device, resources, 1);
+ if (ret) {
+diff --git a/sound/soc/davinci/davinci-sffsdr.c b/sound/soc/davinci/davinci-sffsdr.c
+index b20e36c..f3c3185 100644
+--- a/sound/soc/davinci/davinci-sffsdr.c
++++ b/sound/soc/davinci/davinci-sffsdr.c
+@@ -140,7 +140,8 @@ static int __init sffsdr_init(void)
+
+ platform_set_drvdata(sffsdr_snd_device, &sffsdr_snd_devdata);
+ sffsdr_snd_devdata.dev = &sffsdr_snd_device->dev;
+- sffsdr_snd_device->dev.platform_data = &sffsdr_snd_data;
++ platform_device_add_data(sffsdr_snd_device, &sffsdr_snd_data,
++ sizeof(sffsdr_snd_data));
+
+ ret = platform_device_add_resources(sffsdr_snd_device,
+ sffsdr_snd_resources,
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0010-Add-generic-FPGA-bitstream-loader-driver.patch b/packages/linux/linux-davinci/davinci-sffsdr/0010-Add-generic-FPGA-bitstream-loader-driver.patch
new file mode 100644
index 0000000000..0e034f609a
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0010-Add-generic-FPGA-bitstream-loader-driver.patch
@@ -0,0 +1,1512 @@
+From 500b0887632165f77f2604b07df746b4a3a16d2c Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Fri, 6 Mar 2009 10:23:44 -0500
+Subject: [PATCH 10/12] Add generic FPGA bitstream loader driver
+
+This driver is a generic interface for programming a
+bitstream into a FPGA. It can work with serial or
+parallel programming interfaces and support multiple
+devices and partial reconfiguration. Currently Xilinx
+XC3S and XC4V FPGAs are implemented, but other
+manufacturers like Altera could be easily added.
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ drivers/misc/Kconfig | 31 ++
+ drivers/misc/Makefile | 3 +
+ drivers/misc/fpgadl.c | 806 +++++++++++++++++++++++++++++++++++++++++++++
+ drivers/misc/fpgadl_par.c | 258 +++++++++++++++
+ drivers/misc/fpgadl_ser.c | 244 ++++++++++++++
+ include/linux/fpgadl.h | 96 ++++++
+ 6 files changed, 1438 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/misc/fpgadl.c
+ create mode 100644 drivers/misc/fpgadl_par.c
+ create mode 100644 drivers/misc/fpgadl_ser.c
+ create mode 100644 include/linux/fpgadl.h
+
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index a11e2a0..bdc0517 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -510,6 +510,37 @@ config SGI_GRU_DEBUG
+ This option enables addition debugging code for the SGI GRU driver. If
+ you are unsure, say N.
+
++config FPGADL
++ tristate "FPGA bitstream loader support"
++ help
++ This option enables support for the FPGA bitstream loader.
++
++ To compile this driver as a module, choose M here: the
++ module will be called fpgadl.
++
++ If unsure, say N.
++
++config FPGADL_SER
++ tristate "FPGA serial programming driver"
++ depends on SPI_MASTER && FPGADL
++ help
++ Say Y here if your FPGA bitstream is loaded using a serial
++ interface (SPI).
++
++ To compile this driver as a module, choose M here: the
++ module will be called fpgadl_ser.
++
++config FPGADL_PAR
++ tristate "FPGA parallel programming driver"
++ depends on FPGADL
++ select BITREVERSE
++ help
++ Say Y here if your FPGA bitstream is loaded using a parallel
++ interface.
++
++ To compile this driver as a module, choose M here: the
++ module will be called fpgadl_par.
++
+ source "drivers/misc/c2port/Kconfig"
+
+ endif # MISC_DEVICES
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index 78be134..4fb6dfc 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -32,5 +32,8 @@ obj-$(CONFIG_ENCLOSURE_SERVICES) += enclosure.o
+ obj-$(CONFIG_KGDB_TESTS) += kgdbts.o
+ obj-$(CONFIG_SGI_XP) += sgi-xp/
+ obj-$(CONFIG_SGI_GRU) += sgi-gru/
++obj-$(CONFIG_FPGADL) += fpgadl.o
++obj-$(CONFIG_FPGADL_SER) += fpgadl_ser.o
++obj-$(CONFIG_FPGADL_PAR) += fpgadl_par.o
+ obj-$(CONFIG_HP_ILO) += hpilo.o
+ obj-$(CONFIG_C2PORT) += c2port/
+diff --git a/drivers/misc/fpgadl.c b/drivers/misc/fpgadl.c
+new file mode 100644
+index 0000000..2f03d9b
+--- /dev/null
++++ b/drivers/misc/fpgadl.c
+@@ -0,0 +1,806 @@
++/*
++ * fpgadl core driver
++ *
++ * Copyright (C) 2008 Lyrtech <www.lyrtech.com>
++ *
++ * Based on code found in book "Linux Device Drivers" by
++ * Alessandro Rubini and Jonathan Corbet, published by O'Reilly & Associates.
++ *
++ * This program is free software; you can redistribute 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/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/miscdevice.h>
++#include <linux/string.h>
++#include <linux/err.h>
++#include <linux/fs.h>
++#include <linux/firmware.h>
++#include <linux/delay.h>
++#include <linux/fpgadl.h>
++
++#include <asm/gpio.h>
++#include <asm/uaccess.h>
++
++#define MODULE_NAME "fpgadl"
++
++/* Define this to enable verbose debug messages */
++#define FPGADL_DEBUG 1
++
++static const char fpgadl_driver_version[] = "v1.0";
++
++/* Module parameters */
++static unsigned int fpgadl_debug;
++EXPORT_SYMBOL_GPL(fpgadl_debug);
++module_param_named(debug, fpgadl_debug, int, 0644);
++
++#ifdef FPGADL_DEBUG
++#define INFOMSG(fmt, args...) \
++ do { \
++ printk(KERN_INFO "%s: "fmt"\n", MODULE_NAME, ## args); \
++ } while (0)
++#define DBGMSG(fmt, args...) \
++ do { \
++ if (fpgadl_debug > 0) \
++ printk(KERN_DEBUG "%s: "fmt"\n", \
++ MODULE_NAME, ## args); \
++ } while (0)
++#define DBGMSG_ENTER() \
++ DBGMSG("%s() enter", __func__);
++#define DBGMSG_LEAVE() \
++ DBGMSG("%s() leave", __func__);
++#else
++#define INFOMSG(fmt, args...) do {} while (0)
++#define DBGMSG(fmt, args...) do {} while (0)
++#define DBGMSG_ENTER() do {} while (0)
++#define DBGMSG_LEAVE() do {} while (0)
++#endif
++
++#define FAILMSG(fmt, args...) \
++ do { \
++ printk(KERN_ERR "%s: "fmt"\n", MODULE_NAME, ## args); \
++ } while (0)
++
++#define FPGA_WAIT_TIMEOUT 100000
++#define XFER_SIZE 100 /* Transfer size when writing bytes to
++ * device. */
++
++#define BITSTREAM_MAX_SIZE_OVERHEAD 10240
++
++#define XC3S_WORD_SIZE 2
++#define XC4V_WORD_SIZE 4
++
++#define BITSTREAM_SYNC_BYTE1 0xAA
++#define BITSTREAM_SYNC_BYTE2 0x99
++#define BITSTREAM_SYNC_BYTE3 0x55
++#define BITSTREAM_SYNC_BYTE4 0x66
++
++#define BITSTREAM_PACKET_HEADER_TYPE1 1
++#define BITSTREAM_PACKET_HEADER_TYPE2 2
++#define BITSTREAM_TYPE1_OPCODE_WRITE 2
++#define BITSTREAM_TYPE1_REG_ADDR_FDRI 2
++
++/* Structure of a TYPE1 packet. */
++struct t1_pkt_xc4v_t {
++ u32 word_count:11;
++ u32 reserved2:2;
++ u32 address:5;
++ u32 reserved1:9;
++ u32 opcode:2;
++ u32 header:3;
++};
++
++struct t1_pkt_xc3s_t {
++ u16 word_count:5;
++ u16 address:6;
++ u16 opcode:2;
++ u16 header:3; /* type */
++};
++
++/* Structure of a TYPE2 packet. */
++struct t2_pkt_xc4v_t {
++ u32 word_count:27;
++ u32 opcode:2; /* Reserved. */
++ u32 header:3;
++};
++
++struct t2_pkt_xc3s_t {
++ u16 word_count:11;
++ u16 opcode:2; /* Reserved. */
++ u16 header:3;
++};
++
++#define MAX_FPGADL_DEV 4
++
++static int fpgadl_dev_count;
++static struct fpgadl_device *fpgadl_dev_array[MAX_FPGADL_DEV];
++
++int fpgadl_is_bitstream_loaded(const char *name)
++{
++ int k;
++ struct fpgadl_device *fpgadl_dev;
++
++ DBGMSG_ENTER();
++
++ for (k = 0; k < MAX_FPGADL_DEV; k++) {
++ fpgadl_dev = fpgadl_dev_array[k];
++ if (fpgadl_dev)
++ if (strncmp(fpgadl_dev->name, name, strlen(name)) == 0)
++ return fpgadl_dev->bitstream_loaded;
++ }
++
++ FAILMSG(" Device <%s> not found", name);
++ return -ENOMEM;
++}
++EXPORT_SYMBOL(fpgadl_is_bitstream_loaded);
++
++/* Respond to hotplug events. */
++static int fpgadl_uevent(struct device *dev, struct kobj_uevent_env *env)
++{
++ DBGMSG_ENTER();
++
++ if (add_uevent_var(env, "FPGADL_BUS_VERSION=%s", fpgadl_driver_version))
++ return -ENOMEM;
++ return 0;
++};
++
++/*
++ * Toggles the CCLK line on the board-specific interface the number of times
++ * specified by <cycles>.
++ */
++static int bitstr_load_make_clock(struct fpgadl_device *fpgadl_dev,
++ int cycles)
++{
++ int retval;
++ int k;
++ u8 dummy = 0;
++
++ for (k = 0; k < cycles; k++) {
++ retval = fpgadl_dev->write_byte(fpgadl_dev, &dummy, 1);
++ if (retval < 0)
++ return retval;
++ }
++
++ return 0;
++}
++
++/* Search for bitstream sync word. */
++static int bitstr_search_sync_word(const u8 *buffer, size_t length,
++ const u8 *sync_word, ssize_t sync_word_size)
++{
++ int k;
++
++ for (k = 0; k < length; k++, buffer++) {
++ if (memcmp(buffer, sync_word, sync_word_size) == 0) {
++ DBGMSG(" Synchronization word found at offset 0x%02X",
++ k);
++ return k;
++ }
++ }
++
++ return 0;
++}
++
++static int bitstr_get_payload_size(int fpga_family, int sws,
++ const u8 *buffer, ssize_t length)
++{
++ int index = 0;
++
++ /* Find the payload size. */
++ while (index < length) {
++ switch (fpga_family) {
++ case FPGA_FAMILY_XILINX_XC4V:
++ {
++ u32 tmp = ntohl(*((u32 *) &buffer[index]));
++ struct t1_pkt_xc4v_t *t1 =
++ (struct t1_pkt_xc4v_t *) &tmp;
++
++ /* Search for type 1 packet header. */
++ if ((t1->header == BITSTREAM_PACKET_HEADER_TYPE1) &&
++ (t1->opcode == BITSTREAM_TYPE1_OPCODE_WRITE) &&
++ (t1->address == BITSTREAM_TYPE1_REG_ADDR_FDRI)) {
++ if (t1->word_count != 0)
++ return t1->word_count;
++ else {
++ struct t2_pkt_xc4v_t *t2;
++
++ tmp = ntohl(*((u32 *)
++ &buffer[index + sws]));
++ t2 = (struct t2_pkt_xc4v_t *) &tmp;
++
++ /* Search for type 2 packet header just
++ * after type1 packet. */
++ if ((t2->header ==
++ BITSTREAM_PACKET_HEADER_TYPE2))
++ return t2->word_count;
++ }
++ }
++ }
++ break;
++ case FPGA_FAMILY_XILINX_XC3S:
++ {
++ u16 tmp = ntohs(*((u16 *) &buffer[index]));
++ struct t2_pkt_xc3s_t *t2 =
++ (struct t2_pkt_xc3s_t *) &tmp;
++
++ /* Search for type 2 packet header just after
++ * type1 packet. */
++ if ((t2->header == BITSTREAM_PACKET_HEADER_TYPE2)) {
++ DBGMSG(" Type 2 packet found at offset $%02X",
++ index);
++ return ntohl(*((u32 *) &buffer[index + sws]));
++ }
++ /* Word-size aligned when sync word has been found. */
++ index += sws;
++ }
++ break;
++ }
++
++ /* Word-size aligned when sync word has been found. */
++ index += sws;
++ }
++
++ return 0; /* Not found */
++}
++
++/*
++ * Return value:
++ * 0: Error
++ * 1: Full bitstream
++ * 2: Partial bitstream
++ */
++static int bitstream_parse_header(const u8 *buffer, size_t length,
++ int fpga_family, size_t payload_full_size)
++{
++ int index = 0;
++ size_t payload_size = 0;
++ u8 sync_word[] = {
++ BITSTREAM_SYNC_BYTE1,
++ BITSTREAM_SYNC_BYTE2,
++ BITSTREAM_SYNC_BYTE3,
++ BITSTREAM_SYNC_BYTE4,
++ };
++ int sync_word_size; /* Size in bytes */
++
++ switch (fpga_family) {
++ case FPGA_FAMILY_XILINX_XC3S:
++ sync_word_size = XC3S_WORD_SIZE;
++ break;
++ case FPGA_FAMILY_XILINX_XC4V:
++ sync_word_size = XC4V_WORD_SIZE;
++ break;
++ default:
++ FAILMSG("Error, invalid FPGA family number");
++ return BITSTREAM_MODE_UNKNOWN;
++ }
++
++ /* Search for bitstream sync word. */
++ index = bitstr_search_sync_word(buffer, length,
++ sync_word, sync_word_size);
++ if (index == 0) {
++ FAILMSG("Error: Synchronization word not found");
++ return BITSTREAM_MODE_UNKNOWN;
++ }
++
++ /* Get payload size. */
++ payload_size = bitstr_get_payload_size(fpga_family, sync_word_size,
++ &buffer[index], length - index);
++ payload_size *= sync_word_size; /* Length in bytes. */
++
++ if (payload_size == 0) {
++ /* Warning only, assuming FULL bitstream. */
++ DBGMSG(" Warning: payload size not found");
++ return BITSTREAM_MODE_FULL;
++ } else {
++ DBGMSG(" Payload size: %d kb", payload_size / 1024);
++
++ /* Is it a full or a partial bitstream? */
++ if (payload_size == payload_full_size)
++ return BITSTREAM_MODE_FULL;
++ else
++ return BITSTREAM_MODE_PARTIAL;
++ }
++}
++
++/*
++ * Bitstreams supported: Full or Partial.
++ * Note: Full bitstream that supports partial bitstream must be generated with
++ * option "Persist = true" in ISE.
++ */
++static int fpgadl_bitstream_load(struct fpgadl_device *fpgadl_dev,
++ const u8 *data, size_t size)
++{
++ int k;
++ int retval;
++ int timeout_counter;
++
++ fpgadl_dev->bitstream_loaded = 0;
++
++ fpgadl_dev->bitstream_mode =
++ bitstream_parse_header(data, size,
++ fpgadl_dev->pdata->fpga_family,
++ fpgadl_dev->pdata->payload_full_size);
++ switch (fpgadl_dev->bitstream_mode) {
++ case BITSTREAM_MODE_FULL:
++ DBGMSG(" Bitstream type: FULL");
++ /* Toggle PROG_B Pin and wait 300nS before proceeding. */
++ gpio_set_value(fpgadl_dev->pdata->program_b, 0);
++ udelay(1);
++
++ /* Confirm that INIT_B is low */
++ if (gpio_get_value(fpgadl_dev->pdata->init_b) != 0) {
++ FAILMSG("Error: INIT_B not LOW when PROG is LOW");
++ return -EIO;
++ }
++
++ break;
++ case BITSTREAM_MODE_PARTIAL:
++ DBGMSG(" Bitstream type: PARTIAL");
++ break;
++ case BITSTREAM_MODE_UNKNOWN:
++ default:
++ FAILMSG(" Bitstream type: UNKNOWN");
++ return -EINVAL;
++ break;
++ }
++
++ /* For partial bitstream, PROGRAM_B is already high. */
++ retval = bitstr_load_make_clock(fpgadl_dev, 3);
++ if (retval < 0)
++ return retval;
++
++ gpio_set_value(fpgadl_dev->pdata->program_b, 1);
++
++ /* Wait for INIT_B pin to go high. */
++ timeout_counter = 0;
++ while ((gpio_get_value(fpgadl_dev->pdata->init_b) == 0) &&
++ (timeout_counter < FPGA_WAIT_TIMEOUT)) {
++ retval = bitstr_load_make_clock(fpgadl_dev, 3);
++ if (retval < 0)
++ return retval;
++
++ timeout_counter++;
++ }
++
++ if (timeout_counter == FPGA_WAIT_TIMEOUT) {
++ /* Timeout error. */
++ FAILMSG("Error: timeout while waiting for INIT_B to go HIGH");
++ return -EIO;
++ }
++
++ /* Send actual bitstream data to FPGA one byte at a time. */
++ for (k = 0; k < size; k += XFER_SIZE) {
++ retval = fpgadl_dev->write_byte(fpgadl_dev,
++ (u8 *) &data[k], XFER_SIZE);
++ if (retval < 0)
++ return retval;
++
++ if (fpgadl_dev->pdata->check_init_low) {
++ if (gpio_get_value(fpgadl_dev->pdata->init_b) == 0) {
++ /* Error if INIT_B goes low here. */
++ FAILMSG("Error: INIT_B LOW during programming");
++ return -EIO;
++ }
++ }
++ }
++
++ /* Pulse the clock line ten times at the end. */
++ retval = bitstr_load_make_clock(fpgadl_dev, 10);
++ if (retval < 0)
++ return retval;
++
++ /* FPGA DONE pin must go high. */
++ timeout_counter = 0;
++ while ((gpio_get_value(fpgadl_dev->pdata->done) == 0) &&
++ (timeout_counter < FPGA_WAIT_TIMEOUT))
++ timeout_counter++;
++
++ if (gpio_get_value(fpgadl_dev->pdata->done) == 0) {
++ /* Timeout error. */
++ FAILMSG("Error: timeout while waiting for DONE to go HIGH");
++ return -EIO;
++ }
++
++ INFOMSG("Bitstream loaded");
++ fpgadl_dev->bitstream_loaded = 1;
++
++ return 0;
++}
++
++/* Open method. */
++static int fpgadl_open(struct inode *inode, struct file *filp)
++{
++ int k;
++ int found = 0;
++ struct fpgadl_device *fpgadl_dev;
++
++ DBGMSG_ENTER();
++ DBGMSG(" Opening device minor %d", MINOR(inode->i_rdev));
++
++ for (k = 0; k < fpgadl_dev_count; k++) {
++ fpgadl_dev = fpgadl_dev_array[k];
++ if (fpgadl_dev) {
++ if (fpgadl_dev->miscdev.minor == MINOR(inode->i_rdev)) {
++ found = 1;
++ break;
++ }
++ }
++ }
++
++ if (!found) {
++ FAILMSG(" Invalid minor device");
++ return -ENOMEM;
++ }
++
++ filp->private_data = fpgadl_dev;
++
++ fpgadl_dev->bitstream_length = 0;
++ fpgadl_dev->bitstream_data = kmalloc(fpgadl_dev->bitstream_max_size,
++ GFP_KERNEL);
++ if (!fpgadl_dev->bitstream_data) {
++ FAILMSG("Failed to allocate memory for bitstream");
++ return -ENOMEM;
++ }
++
++ fpgadl_dev->bitstream_buffer_allocated = 1;
++
++ return 0;
++}
++
++/* Write method. Fill buffer with bitstream data. */
++static ssize_t fpgadl_write(struct file *filp, const char __user *buff,
++ size_t count, loff_t *offp)
++{
++ struct fpgadl_device *fpgadl_dev = filp->private_data;
++
++ if ((fpgadl_dev->bitstream_length + count) >=
++ fpgadl_dev->bitstream_max_size) {
++ FAILMSG("Bitstream buffer size exceeded");
++ return -EFBIG;
++ }
++
++ if (copy_from_user(fpgadl_dev->bitstream_data +
++ fpgadl_dev->bitstream_length,
++ (void __user *) buff, count))
++ return -EFAULT;
++
++ fpgadl_dev->bitstream_length += count;
++
++ return count;
++}
++
++/* Release method. This will initiate the FPGA programming. */
++static int fpgadl_release(struct inode *inode, struct file *filp)
++{
++ int retval;
++ struct fpgadl_device *fpgadl_dev = filp->private_data;
++
++ if (!fpgadl_dev->bitstream_data)
++ return -EFAULT;
++
++ retval = fpgadl_bitstream_load(fpgadl_dev,
++ fpgadl_dev->bitstream_data,
++ fpgadl_dev->bitstream_length);
++ kfree(fpgadl_dev->bitstream_data);
++ fpgadl_dev->bitstream_buffer_allocated = 0;
++
++ return retval;
++}
++
++static struct file_operations fops_fpgadl = {
++ .owner = THIS_MODULE,
++ .open = fpgadl_open,
++ .write = fpgadl_write,
++ .release = fpgadl_release
++};
++
++/* Match fpgadl devices to drivers. Just do a simple name test. */
++static int fpgadl_device_match(struct device *dev,
++ struct device_driver *drv)
++{
++ DBGMSG_ENTER();
++ return !strncmp(dev->bus_id, drv->name, strlen(drv->name));
++}
++
++static ssize_t show_version(struct device_driver *driver, char *buf)
++{
++ struct fpgadl_driver *fpgadldriver = to_fpgadl_driver(driver);
++
++ sprintf(buf, "%s\n", fpgadldriver->version);
++ return strlen(buf);
++}
++
++int fpgadl_register_driver(struct fpgadl_driver *drv)
++{
++ int res;
++
++ DBGMSG_ENTER();
++
++ /* Initialize common driver fields */
++ drv->driver.bus = &fpgadl_bus_type;
++
++ /* Register with core */
++ res = driver_register(&drv->driver);
++ if (res)
++ FAILMSG(" driver_register() failed");
++
++ drv->version_attr.attr.name = "version";
++ drv->version_attr.attr.owner = drv->module;
++ drv->version_attr.attr.mode = S_IRUGO;
++ drv->version_attr.show = show_version;
++ drv->version_attr.store = NULL;
++ res = driver_create_file(&drv->driver, &drv->version_attr);
++
++ return res;
++}
++EXPORT_SYMBOL(fpgadl_register_driver);
++
++void fpgadl_unregister_driver(struct fpgadl_driver *drv)
++{
++ DBGMSG_ENTER();
++ driver_unregister(&drv->driver);
++}
++EXPORT_SYMBOL(fpgadl_unregister_driver);
++
++/* The fpgadl bus device. */
++static void fpgadl_bus_release(struct device *dev)
++{
++ DBGMSG_ENTER();
++}
++
++struct device fpgadl_bus = {
++ .bus_id = "fpgadl0",
++ .release = fpgadl_bus_release
++};
++
++struct bus_type fpgadl_bus_type = {
++ .name = "fpgadl",
++ .match = fpgadl_device_match,
++ .uevent = fpgadl_uevent,
++};
++EXPORT_SYMBOL(fpgadl_bus_type);
++
++/* Export a simple sysfs attribute. */
++static ssize_t show_bus_version(struct bus_type *bus, char *buf)
++{
++ return snprintf(buf, PAGE_SIZE, "%s\n", fpgadl_driver_version);
++}
++
++static BUS_ATTR(version, S_IRUGO, show_bus_version, NULL);
++
++/*
++ * fpgadl devices.
++ * For now, no references to fpgadlbus devices go out which are not
++ * tracked via the module reference count, so we use a no-op
++ * release function.
++ */
++static void fpgadl_dev_release(struct device *dev)
++{
++ DBGMSG_ENTER();
++}
++
++/* Release DaVinci GPIO to FPGA control pins. */
++static void fpgadl_release_gpio(struct fpgadl_pdata_t *pdata)
++{
++ gpio_free(pdata->done);
++ gpio_free(pdata->init_b);
++ gpio_free(pdata->program_b);
++}
++
++static int fpgadl_setup_gpio(struct fpgadl_pdata_t *pdata)
++{
++ int retval;
++
++ /* Configure FPGA PROGRAM_B GPIO. */
++ retval = gpio_request(pdata->program_b, "fpga_program_b");
++ if (retval == 0) /* FPGA_PROGRAM_B must be initially HIGH. */
++ retval = gpio_direction_output(pdata->program_b, 1);
++ if (retval != 0)
++ goto gpio_error;
++
++ /* Configure FPGA INIT_B GPIO. */
++ retval = gpio_request(pdata->init_b, "fpga_init_b");
++ if (retval == 0)
++ retval = gpio_direction_input(pdata->init_b);
++ if (retval != 0)
++ goto gpio_error;
++
++ /* Configure FPGA DONE GPIO. */
++ retval = gpio_request(pdata->done, "fpga_done");
++ if (retval == 0)
++ retval = gpio_direction_input(pdata->done);
++ if (retval != 0)
++ goto gpio_error;
++
++ return 0;
++
++gpio_error:
++ fpgadl_release_gpio(pdata);
++ return retval;
++}
++
++static void fpgadl_cleanup(struct fpgadl_device *fpgadl_dev)
++{
++ DBGMSG_ENTER();
++
++ if (!fpgadl_dev)
++ return;
++
++ fpgadl_dev_array[fpgadl_dev->id] = NULL;
++
++ /* Get rid of any allocated buffer, not freed */
++ if (fpgadl_dev->bitstream_buffer_allocated)
++ kfree(fpgadl_dev->bitstream_data);
++
++ switch (fpgadl_dev->state) {
++ case FPGADL_DEV_STATE_CHAR_DEV_REGISTERED:
++ misc_deregister(&fpgadl_dev->miscdev);
++ case FPGADL_DEV_STATE_GPIO_REGISTERED:
++ fpgadl_release_gpio(fpgadl_dev->pdata);
++ case FPGADL_DEV_STATE_DEVICE_REGISTERED:
++ device_unregister(&fpgadl_dev->dev);
++ case FPGADL_DEV_STATE_START:
++ break;
++ }
++}
++
++int fpgadl_register_device(struct fpgadl_device *fpgadl_dev)
++{
++ int res;
++ const struct firmware *fw_entry;
++
++ DBGMSG_ENTER();
++
++ fpgadl_dev->state = FPGADL_DEV_STATE_START;
++
++ /* Sanity checks. */
++ if (!fpgadl_dev->name) {
++ FAILMSG(" Error, missing device name");
++ res = -EFAULT;
++ goto error;
++ }
++
++ if (!fpgadl_dev->write_byte) {
++ FAILMSG(" Error, missing write_byte() callback");
++ res = -ENOMEM;
++ goto error;
++ }
++
++ if (fpgadl_dev_count == MAX_FPGADL_DEV) {
++ FAILMSG("Maximum number of devices reached (%d)",
++ fpgadl_dev_count);
++ res = -ENODEV;
++ goto error;
++ }
++
++ DBGMSG(" device %d", fpgadl_dev_count);
++
++ /* Set some default values. */
++ fpgadl_dev->bitstream_loaded = 0;
++ fpgadl_dev->bitstream_buffer_allocated = 0;
++ fpgadl_dev->bitstream_max_size =
++ fpgadl_dev->pdata->payload_full_size +
++ BITSTREAM_MAX_SIZE_OVERHEAD;
++
++ fpgadl_dev->dev.bus = &fpgadl_bus_type;
++ fpgadl_dev->dev.parent = &fpgadl_bus;
++ fpgadl_dev->dev.release = fpgadl_dev_release;
++ strncpy(fpgadl_dev->dev.bus_id, fpgadl_dev->name, BUS_ID_SIZE);
++ res = device_register(&fpgadl_dev->dev);
++ if (res) {
++ FAILMSG(" device_register() failed");
++ goto error;
++ }
++ fpgadl_dev->state = FPGADL_DEV_STATE_DEVICE_REGISTERED;
++
++ res = fpgadl_setup_gpio(fpgadl_dev->pdata);
++ if (res < 0) {
++ FAILMSG("Error registering GPIOs");
++ goto error;
++ }
++ fpgadl_dev->state = FPGADL_DEV_STATE_GPIO_REGISTERED;
++
++ fpgadl_dev->miscdev.name = fpgadl_dev->name;
++ fpgadl_dev->miscdev.minor = MISC_DYNAMIC_MINOR;
++ fpgadl_dev->miscdev.fops = &fops_fpgadl;
++ res = misc_register(&fpgadl_dev->miscdev);
++ if (res < 0) {
++ FAILMSG("Error registering misc driver");
++ goto error;
++ }
++ DBGMSG(" MINOR = %d", fpgadl_dev->miscdev.minor);
++ fpgadl_dev->state = FPGADL_DEV_STATE_CHAR_DEV_REGISTERED;
++
++ /* Try to load firmware through hotplug if available. */
++ res = request_firmware(&fw_entry, fpgadl_dev->pdata->bitstream_name,
++ &fpgadl_dev->dev);
++ if (res < 0) {
++ /* Not an error preventing the driver from being loaded. */
++ res = 0;
++ DBGMSG("Info: firmware not available");
++ } else {
++ res = fpgadl_bitstream_load(fpgadl_dev, fw_entry->data,
++ fw_entry->size);
++ release_firmware(fw_entry);
++ }
++
++ fpgadl_dev->id = fpgadl_dev_count;
++ fpgadl_dev_array[fpgadl_dev_count] = fpgadl_dev;
++ fpgadl_dev_count++;
++
++ return 0;
++
++error:
++ fpgadl_cleanup(fpgadl_dev);
++ return res;
++}
++EXPORT_SYMBOL(fpgadl_register_device);
++
++void fpgadl_unregister_device(struct fpgadl_device *fpgadl_dev)
++{
++ DBGMSG_ENTER();
++ fpgadl_cleanup(fpgadl_dev);
++}
++EXPORT_SYMBOL(fpgadl_unregister_device);
++
++static int __init fpgadl_init(void)
++{
++ int res;
++
++ DBGMSG_ENTER();
++ INFOMSG("FPGA bitstream loader %s", fpgadl_driver_version);
++
++ res = bus_register(&fpgadl_bus_type);
++ if (res) {
++ FAILMSG(" bus_register() failed");
++ goto fail_bus;
++ }
++
++ if (bus_create_file(&fpgadl_bus_type, &bus_attr_version)) {
++ FAILMSG("Unable to create version attribute");
++ goto fail_create_file;
++ }
++
++ res = device_register(&fpgadl_bus);
++ if (res) {
++ FAILMSG(" failed registering %s", fpgadl_bus.bus_id);
++ goto fail_dev_reg;
++ }
++
++ return 0;
++
++fail_dev_reg:
++fail_create_file:
++ bus_unregister(&fpgadl_bus_type);
++fail_bus:
++ return res;
++}
++module_init(fpgadl_init);
++
++static void __exit fpgadl_exit(void)
++{
++ DBGMSG_ENTER();
++ device_unregister(&fpgadl_bus);
++ bus_unregister(&fpgadl_bus_type);
++}
++module_exit(fpgadl_exit);
++
++MODULE_AUTHOR("Hugo Villeneuve <hvilleneuve@lyrtech.com>");
++MODULE_DESCRIPTION("FPGA bitstream loader");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/misc/fpgadl_par.c b/drivers/misc/fpgadl_par.c
+new file mode 100644
+index 0000000..66f8eba
+--- /dev/null
++++ b/drivers/misc/fpgadl_par.c
+@@ -0,0 +1,258 @@
++/*
++ * fpgadl_par.c - FPGA parallel programming driver
++ *
++ * Copyright (C) 2008 Lyrtech <www.lyrtech.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/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/string.h>
++#include <linux/err.h>
++#include <linux/fs.h>
++#include <linux/delay.h>
++#include <linux/bitrev.h>
++#include <linux/fpgadl.h>
++
++#include <asm/gpio.h> /* For ioremap() */
++
++#define MODULE_NAME "fpgadl_par"
++#define MODULE_VERSION_STR "v1.0"
++
++/* Define this to enable verbose debug messages */
++#define FPGADL_PAR_DEBUG 1
++
++/* Module parameters */
++static unsigned int fpgadl_par_debug;
++EXPORT_SYMBOL_GPL(fpgadl_par_debug);
++module_param_named(debug, fpgadl_par_debug, int, 0644);
++
++#ifdef FPGADL_PAR_DEBUG
++#define INFOMSG(fmt, args...) \
++do { \
++ printk(KERN_INFO "%s: "fmt"\n", MODULE_NAME, ## args); } while (0)
++#define DBGMSG(fmt, args...) \
++do { if (fpgadl_par_debug > 0) \
++ printk(KERN_DEBUG "%s: "fmt"\n", MODULE_NAME, ## args); } while (0)
++#define DBGMSG_ENTER() \
++ DBGMSG("%s() enter", __func__);
++#define DBGMSG_LEAVE() \
++ DBGMSG("%s() leave", __func__);
++#else
++#define INFOMSG(fmt, args...) do {} while (0)
++#define DBGMSG(fmt, args...) do {} while (0)
++#define DBGMSG_ENTER() do {} while (0)
++#define DBGMSG_LEAVE() do {} while (0)
++#endif
++
++#define FAILMSG(fmt, args...) \
++do { \
++ printk(KERN_ERR "%s: "fmt"\n", MODULE_NAME, ## args); } while (0)
++
++struct fpgadl_par_dev_t {
++ char devname[32];
++ enum {
++ FPGADL_PAR_DEV_STATE_STRUCT_ALLOCATED,
++ FPGADL_PAR_DEV_STATE_HAVE_IOREMAP,
++ FPGADL_PAR_DEV_STATE_FPGADL_DEV_REGISTERED,
++ } state;
++ u8 *selectmap;
++ struct fpgadl_device fpgadl_dev;
++};
++
++#define MAX_FPGADL_PAR_DEV 5
++
++static int fpgadl_par_dev_count;
++
++/*
++ * Writes a byte of data to the FPGA using the SelectMAP
++ * interface. The FPGA_SELECT_MAP_REG address is within
++ * the FPGA address space (CS3), and when we write a byte
++ * to that address, the CCLK line will be toggled.
++ */
++static int selectmap_write_byte(struct fpgadl_device *fpgadl_dev,
++ u8 *data, int size)
++{
++ int k;
++ struct fpgadl_par_dev_t *fpgadl_par_dev;
++
++ fpgadl_par_dev = (struct fpgadl_par_dev_t *) fpgadl_dev->devdata;
++
++ for (k = 0; k < size; k++)
++ fpgadl_par_dev->selectmap[0] = bitrev8(data[k]);
++
++ return 0;
++}
++
++static void fpgadl_par_cleanup(struct fpgadl_par_dev_t *dev)
++{
++ DBGMSG("fpgadl_par_cleanup");
++
++ if (!dev)
++ return;
++
++ switch (dev->state) {
++ case FPGADL_PAR_DEV_STATE_FPGADL_DEV_REGISTERED:
++ fpgadl_unregister_device(&dev->fpgadl_dev);
++ case FPGADL_PAR_DEV_STATE_HAVE_IOREMAP:
++ iounmap(dev->selectmap);
++ case FPGADL_PAR_DEV_STATE_STRUCT_ALLOCATED:
++ kfree(dev);
++ break;
++ }
++}
++
++static int __devinit fpgadl_par_probe(struct platform_device *pdev)
++{
++ int len;
++ int res;
++ struct fpgadl_par_dev_t *dev = NULL;
++ const struct resource *selectmap_res;
++
++ DBGMSG("fpgadl_par_probe()");
++
++ if (fpgadl_par_dev_count == MAX_FPGADL_PAR_DEV) {
++ FAILMSG("Maximum number of devices reached (%d)",
++ fpgadl_par_dev_count);
++ res = -ENODEV;
++ goto error;
++ }
++
++ DBGMSG(" device %d", fpgadl_par_dev_count);
++
++ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
++ if (!dev) {
++ FAILMSG("Failed to allocate device structure");
++ res = -ENOMEM;
++ goto error;
++ }
++ /* Set some default values. */
++ dev->state = FPGADL_PAR_DEV_STATE_STRUCT_ALLOCATED;
++
++ if (!pdev->dev.platform_data) {
++ FAILMSG("Error getting platform data");
++ res = -ENODEV;
++ goto error;
++ }
++ dev->fpgadl_dev.pdata = pdev->dev.platform_data;
++ pdev->dev.driver_data = dev; /* Private driver data */
++
++ /* Assign virtual addresses to SELECTMAP I/O memory regions. */
++ selectmap_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
++ "selectmap");
++ if (!selectmap_res) {
++ FAILMSG("Error getting selectmap ressource");
++ res = -ENODEV;
++ goto error;
++ }
++ len = selectmap_res->end - selectmap_res->start;
++ dev->selectmap = ioremap(selectmap_res->start, len);
++ if (!dev->selectmap) {
++ FAILMSG("Can't remap selectmap register");
++ res = -ENXIO;
++ goto error;
++ }
++ dev->state = FPGADL_PAR_DEV_STATE_HAVE_IOREMAP;
++
++ dev->fpgadl_dev.write_byte = selectmap_write_byte;
++ sprintf(dev->devname, "fpgadl_par%d", fpgadl_par_dev_count);
++ DBGMSG(" NAME = %s", dev->devname);
++ dev->fpgadl_dev.name = dev->devname;
++ dev->fpgadl_dev.devdata = dev; /* For our write_byte() callback */
++ res = fpgadl_register_device(&dev->fpgadl_dev);
++ if (res < 0) {
++ FAILMSG("Error registering fpgadl_par device");
++ goto error;
++ }
++ dev->state = FPGADL_PAR_DEV_STATE_FPGADL_DEV_REGISTERED;
++
++ fpgadl_par_dev_count++;
++
++ return 0;
++
++error:
++ fpgadl_par_cleanup(dev);
++ return res;
++}
++
++static int __devexit fpgadl_par_remove(struct platform_device *pdev)
++{
++ struct fpgadl_par_dev_t *dev = platform_get_drvdata(pdev);
++
++ DBGMSG("fpgadl_par_remove()");
++
++ fpgadl_par_cleanup(dev);
++
++ return 0;
++}
++
++static struct fpgadl_driver fpgadl_par_driver = {
++ .version = MODULE_VERSION_STR,
++ .module = THIS_MODULE,
++ .driver = {
++ .name = "fpgadl_par",
++ },
++};
++
++static struct platform_driver fpgadl_platform_driver = {
++ .driver = {
++ .name = MODULE_NAME,
++ .owner = THIS_MODULE,
++ },
++ .remove = fpgadl_par_remove,
++};
++
++static int __init fpgadl_par_init(void)
++{
++ int res;
++
++ DBGMSG("fpgadl_par_init()");
++
++ /* Register with the driver core. */
++ res = fpgadl_register_driver(&fpgadl_par_driver);
++ if (res) {
++ FAILMSG("Can't register fpgadl parallel driver");
++ return res;
++ }
++
++ /* The probe function will be called for each platform device declared
++ * in board setup code. */
++ res = platform_driver_probe(&fpgadl_platform_driver,
++ fpgadl_par_probe);
++ if (res) {
++ FAILMSG("platform_driver_probe() failed");
++ return res;
++ }
++
++ return 0;
++}
++module_init(fpgadl_par_init);
++
++static void __exit fpgadl_par_exit(void)
++{
++ DBGMSG("fpgadl_par_exit()");
++ platform_driver_unregister(&fpgadl_platform_driver);
++ fpgadl_unregister_driver(&fpgadl_par_driver);
++}
++module_exit(fpgadl_par_exit);
++
++MODULE_AUTHOR("Hugo Villeneuve <hvilleneuve@lyrtech.com>");
++MODULE_DESCRIPTION("FPGA parallel programming driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/misc/fpgadl_ser.c b/drivers/misc/fpgadl_ser.c
+new file mode 100644
+index 0000000..01ca5e0
+--- /dev/null
++++ b/drivers/misc/fpgadl_ser.c
+@@ -0,0 +1,244 @@
++/*
++ * fpgadl_ser.c - FPGA serial programming driver
++ *
++ * Copyright (C) 2008 Lyrtech <www.lyrtech.com>
++ *
++ * Based on SH SCI SPI interface
++ * Copyright (c) 2008 Magnus Damm
++ *
++ * This program is free software; you can redistribute 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/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/fpgadl.h>
++
++#define MODULE_NAME "fpgadl_ser"
++#define MODULE_VERSION_STR "v1.0"
++
++/* Define this to enable verbose debug messages */
++#define FPGADL_SER_DEBUG 1
++
++/* Module parameters */
++static unsigned int fpgadl_ser_debug;
++EXPORT_SYMBOL_GPL(fpgadl_ser_debug);
++module_param_named(debug, fpgadl_ser_debug, int, 0644);
++
++#ifdef FPGADL_SER_DEBUG
++#define INFOMSG(fmt, args...) \
++do { \
++ printk(KERN_INFO "%s: "fmt"\n", MODULE_NAME, ## args); } while (0)
++#define DBGMSG(fmt, args...) \
++do { if (fpgadl_ser_debug > 0) \
++ printk(KERN_DEBUG "%s: "fmt"\n", MODULE_NAME, ## args); } while (0)
++#define DBGMSG_ENTER() \
++ DBGMSG("%s() enter", __func__);
++#define DBGMSG_LEAVE() \
++ DBGMSG("%s() leave", __func__);
++#else
++#define INFOMSG(fmt, args...) do {} while (0)
++#define DBGMSG(fmt, args...) do {} while (0)
++#define DBGMSG_ENTER() do {} while (0)
++#define DBGMSG_LEAVE() do {} while (0)
++#endif
++
++#define FAILMSG(fmt, args...) \
++do { \
++ printk(KERN_ERR "%s: "fmt"\n", MODULE_NAME, ## args); } while (0)
++
++struct fpgadl_ser_dev_t {
++ char devname[32];
++ enum {
++ FPGADL_SER_DEV_STATE_STRUCT_ALLOCATED,
++ FPGADL_SER_DEV_STATE_SPI_SETUP,
++ FPGADL_SER_DEV_STATE_FPGADL_DEV_REGISTERED,
++ } state;
++ struct spi_transfer t;
++ struct spi_message m;
++ struct spi_device *spi;
++ struct fpgadl_device fpgadl_dev;
++};
++
++#define MAX_FPGADL_SER_DEV 5
++
++static int fpgadl_ser_dev_count;
++
++static int fpgadl_ser_write_byte(struct fpgadl_device *fpgadl_dev,
++ u8 *data, int size)
++{
++ int status;
++ struct fpgadl_ser_dev_t *fpgadl_ser_dev;
++
++ fpgadl_ser_dev = (struct fpgadl_ser_dev_t *) fpgadl_dev->devdata;
++
++ if (!data) {
++ FAILMSG("NULL data pointer");
++ return -EFAULT;
++ }
++
++ spi_message_init(&fpgadl_ser_dev->m);
++ fpgadl_ser_dev->t.tx_buf = data;
++ fpgadl_ser_dev->t.len = size;
++ spi_message_add_tail(&fpgadl_ser_dev->t, &fpgadl_ser_dev->m);
++
++ status = spi_sync(fpgadl_ser_dev->spi, &fpgadl_ser_dev->m);
++ if (status < 0)
++ FAILMSG("spi_sync() failed (%d)", status);
++
++ return status;
++}
++
++static void fpgadl_ser_cleanup(struct fpgadl_ser_dev_t *dev)
++{
++ DBGMSG_ENTER();
++
++ if (!dev)
++ return;
++
++ switch (dev->state) {
++ case FPGADL_SER_DEV_STATE_FPGADL_DEV_REGISTERED:
++ fpgadl_unregister_device(&dev->fpgadl_dev);
++ case FPGADL_SER_DEV_STATE_SPI_SETUP:
++ case FPGADL_SER_DEV_STATE_STRUCT_ALLOCATED:
++ kfree(dev);
++ break;
++ }
++}
++
++static int __devinit fpgadl_ser_probe(struct spi_device *spi)
++{
++ int res;
++ struct fpgadl_ser_dev_t *dev = NULL;
++
++ DBGMSG_ENTER();
++
++ if (fpgadl_ser_dev_count == MAX_FPGADL_SER_DEV) {
++ FAILMSG("Maximum number of devices reached (%d)",
++ fpgadl_ser_dev_count);
++ res = -ENODEV;
++ goto error;
++ }
++
++ DBGMSG(" device %d", fpgadl_ser_dev_count);
++
++ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
++ if (!dev) {
++ FAILMSG("Failed to allocate device structure");
++ res = -ENOMEM;
++ goto error;
++ }
++ /* Set some default values. */
++ dev->state = FPGADL_SER_DEV_STATE_STRUCT_ALLOCATED;
++
++ DBGMSG(" SPI mode = %d", spi->mode);
++
++ if (!spi->dev.platform_data) {
++ FAILMSG("Error getting platform data");
++ res = -ENODEV;
++ goto error;
++ }
++ dev->fpgadl_dev.pdata = spi->dev.platform_data;
++ spi->dev.driver_data = dev; /* Private driver data */
++
++ spi->bits_per_word = 8; /* Size of Tx and Rx transfers. */
++ res = spi_setup(spi);
++ if (res < 0) {
++ FAILMSG("Error setting-up SPI");
++ goto error;
++ }
++ dev->spi = spi;
++ dev->state = FPGADL_SER_DEV_STATE_SPI_SETUP;
++
++ dev->fpgadl_dev.write_byte = fpgadl_ser_write_byte;
++ sprintf(dev->devname, "fpgadl_ser%d", fpgadl_ser_dev_count);
++ DBGMSG(" NAME = %s", dev->devname);
++ dev->fpgadl_dev.name = dev->devname;
++ dev->fpgadl_dev.devdata = dev; /* For our write_byte() callback */
++ res = fpgadl_register_device(&dev->fpgadl_dev);
++ if (res < 0) {
++ FAILMSG("Error registering fpgadl_ser device");
++ goto error;
++ }
++ dev->state = FPGADL_SER_DEV_STATE_FPGADL_DEV_REGISTERED;
++
++ fpgadl_ser_dev_count++;
++
++ return 0;
++
++error:
++ fpgadl_ser_cleanup(dev);
++ return res;
++}
++
++static int __devexit fpgadl_ser_remove(struct spi_device *spi)
++{
++ struct fpgadl_ser_dev_t *dev = spi_get_drvdata(spi);
++
++ DBGMSG_ENTER();
++ fpgadl_ser_cleanup(dev);
++ return 0;
++}
++
++static struct spi_driver fpgadl_ser_spi_driver = {
++ .driver = {
++ .name = MODULE_NAME,
++ .bus = &spi_bus_type,
++ .owner = THIS_MODULE,
++ },
++ .probe = fpgadl_ser_probe,
++ .remove = fpgadl_ser_remove,
++};
++
++static struct fpgadl_driver fpgadl_ser_driver = {
++ .version = MODULE_VERSION_STR,
++ .module = THIS_MODULE,
++ .driver = {
++ .name = "fpgadl_ser",
++ },
++};
++
++static int __init fpgadl_ser_init(void)
++{
++ int res;
++
++ DBGMSG_ENTER();
++
++ /* Register with the driver core. */
++ res = fpgadl_register_driver(&fpgadl_ser_driver);
++ if (res) {
++ FAILMSG("Can't register fpgadl serial driver");
++ return res;
++ }
++
++ return spi_register_driver(&fpgadl_ser_spi_driver);
++}
++module_init(fpgadl_ser_init);
++
++static void __exit fpgadl_ser_exit(void)
++{
++ DBGMSG_ENTER();
++ spi_unregister_driver(&fpgadl_ser_spi_driver);
++ fpgadl_unregister_driver(&fpgadl_ser_driver);
++}
++module_exit(fpgadl_ser_exit);
++
++MODULE_DESCRIPTION("FPGA serial programming driver");
++MODULE_AUTHOR("Hugo Villeneuve");
++MODULE_LICENSE("GPL");
+diff --git a/include/linux/fpgadl.h b/include/linux/fpgadl.h
+new file mode 100644
+index 0000000..27d83f1
+--- /dev/null
++++ b/include/linux/fpgadl.h
+@@ -0,0 +1,96 @@
++/*
++ * FPGA bitstream load header file.
++ *
++ * Copyright (C) 2008 Lyrtech <www.lyrtech.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.
++ */
++
++#ifndef FPGADL_H
++#define FPGADL_H 1
++
++#include <linux/miscdevice.h>
++
++/* FPGA device-specific informations and functions. */
++struct fpgadl_pdata_t {
++ enum {
++ FPGA_VENDOR_XILINX,
++ FPGA_VENDOR_ALTERA,
++ } fpga_vendor;
++ enum {
++ FPGA_FAMILY_XILINX_XC3S,
++ FPGA_FAMILY_XILINX_XC4V,
++ } fpga_family;
++ ssize_t payload_full_size;
++ u8 program_b;
++ u8 init_b;
++ u8 done;
++ char *bitstream_name;
++ int check_init_low; /* Set to 1 to check that the INIT pin is low during
++ * programming. Normally, we should check if INIT_B
++ * is low during configuration, indicating a
++ * configuration error. But this may cause problems
++ * for bitstreams where the INIT_B pin is used as a
++ * GPIO after configuration. */
++};
++
++struct fpgadl_driver {
++ char *version;
++ struct module *module;
++ struct device_driver driver;
++ struct driver_attribute version_attr;
++};
++
++struct fpgadl_device {
++ int id;
++ char *name;
++ enum {
++ FPGADL_DEV_STATE_START,
++ FPGADL_DEV_STATE_DEVICE_REGISTERED,
++ FPGADL_DEV_STATE_GPIO_REGISTERED,
++ FPGADL_DEV_STATE_CHAR_DEV_REGISTERED,
++ } state;
++ int bitstream_buffer_allocated;
++ u8 *bitstream_data;
++ size_t bitstream_length;
++ size_t bitstream_max_size;
++ int bitstream_mode;
++ int bitstream_loaded;
++ int (*write_byte)(struct fpgadl_device *, u8 *, int);
++ void *devdata; /* Pointer to interface-specific (SPI/PAR) device */
++ struct miscdevice miscdev;
++ struct fpgadl_driver *driver;
++ struct fpgadl_pdata_t *pdata;
++ struct device dev;
++};
++
++/* Bitstream types. */
++#define BITSTREAM_MODE_UNKNOWN 0
++#define BITSTREAM_MODE_FULL 1
++#define BITSTREAM_MODE_PARTIAL 2
++
++extern struct bus_type fpgadl_bus_type;
++
++#define to_fpgadl_driver(drv) container_of(drv, struct fpgadl_driver, driver);
++
++extern int fpgadl_register_driver(struct fpgadl_driver *drv);
++extern void fpgadl_unregister_driver(struct fpgadl_driver *drv);
++
++extern int fpgadl_register_device(struct fpgadl_device *fpgadldev);
++extern void fpgadl_unregister_device(struct fpgadl_device *fpgadldev);
++
++int fpgadl_is_bitstream_loaded(const char *name);
++
++#endif /* FPGADL_H */
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0011-Add-lyrvpss-example-driver-for-the-SFFSDR-board.patch b/packages/linux/linux-davinci/davinci-sffsdr/0011-Add-lyrvpss-example-driver-for-the-SFFSDR-board.patch
new file mode 100644
index 0000000000..893cbd3d22
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0011-Add-lyrvpss-example-driver-for-the-SFFSDR-board.patch
@@ -0,0 +1,919 @@
+From 25a91bba1bcc8d9f120e8b85b0ec53a18ccec244 Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Thu, 5 Mar 2009 16:04:23 -0500
+Subject: [PATCH 11/12] Add lyrvpss example driver for the SFFSDR board
+
+Currently there is only a VPFE driver in lyrvpss, and it is called luyrvpfe.
+It works with a FPGA bitstream that generates a ramp and sends it over the
+VPFE interface. The lyrvpfe driver receives an interrupt each time the HSYNC
+line is pulsed (even if the VDINT0 interrupt line is used), and stores and
+checks the data to make sure that it is valid. The driver will request a new
+frame from the FPGA each time there is a read from /proc/lyrvpfe. For example,
+to receive a new frame, issue the following:
+
+ $> cat /proc/lyrvpfe
+
+This will send a request to the FPGA (using the GPIO line) to send a new frame,
+wait one second then display the contents of the PING and PONG reception buffers.
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ .../arm/mach-davinci/include/mach/sffsdr-lyrvpfe.h | 32 +
+ drivers/char/Kconfig | 2 +
+ drivers/char/Makefile | 2 +
+ drivers/char/lyrvpss/Kconfig | 42 ++
+ drivers/char/lyrvpss/Makefile | 8 +
+ drivers/char/lyrvpss/vpfe.c | 753 ++++++++++++++++++++
+ 6 files changed, 839 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/mach-davinci/include/mach/sffsdr-lyrvpfe.h
+ create mode 100644 drivers/char/lyrvpss/Kconfig
+ create mode 100644 drivers/char/lyrvpss/Makefile
+ create mode 100644 drivers/char/lyrvpss/vpfe.c
+
+diff --git a/arch/arm/mach-davinci/include/mach/sffsdr-lyrvpfe.h b/arch/arm/mach-davinci/include/mach/sffsdr-lyrvpfe.h
+new file mode 100644
+index 0000000..fb47851
+--- /dev/null
++++ b/arch/arm/mach-davinci/include/mach/sffsdr-lyrvpfe.h
+@@ -0,0 +1,32 @@
++/*
++ * lyrvpfe.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.
++ *
++ * 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.
++ */
++
++#ifndef __LYRVPFE_H
++#define __LYRVPFE_H
++
++struct lyrvpfe_platform_data {
++ unsigned ready_gpio;
++};
++
++#endif /* __LYRVPFE_H */
+diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
+index 43d6ba8..b98a8e2 100644
+--- a/drivers/char/Kconfig
++++ b/drivers/char/Kconfig
+@@ -1073,5 +1073,7 @@ config DEVPORT
+
+ source "drivers/s390/char/Kconfig"
+
++source "drivers/char/lyrvpss/Kconfig"
++
+ endmenu
+
+diff --git a/drivers/char/Makefile b/drivers/char/Makefile
+index 438f713..8800b3f 100644
+--- a/drivers/char/Makefile
++++ b/drivers/char/Makefile
+@@ -109,6 +109,8 @@ obj-$(CONFIG_PS3_FLASH) += ps3flash.o
+ obj-$(CONFIG_JS_RTC) += js-rtc.o
+ js-rtc-y = rtc.o
+
++obj-$(CONFIG_LYRTECH_VPSS) += lyrvpss/
++
+ # Files generated that shall be removed upon make clean
+ clean-files := consolemap_deftbl.c defkeymap.c
+
+diff --git a/drivers/char/lyrvpss/Kconfig b/drivers/char/lyrvpss/Kconfig
+new file mode 100644
+index 0000000..80b1487
+--- /dev/null
++++ b/drivers/char/lyrvpss/Kconfig
+@@ -0,0 +1,42 @@
++#
++# Lyrtech VPSS drivers
++#
++
++menuconfig LYRTECH_VPSS
++ bool 'Lyrtech SFFSDR VPSS drivers'
++ depends on ARCH_DAVINCI && MACH_SFFSDR
++ help
++ This enables support for Lyrtech SFFSDR VPSS drivers.
++
++ If unsure, say N.
++
++if LYRTECH_VPSS
++
++config LYRTECH_VPFE
++ tristate "Lyrtech VPFE Driver Support"
++ help
++ This option enables support for the Lyrtech VPFE driver
++ for FPGA to DaVinci data transfers.
++
++ To compile this driver as a module, choose M here: the
++ module will be called lyrvpfe.
++
++ If unsure, say N.
++
++config LYRTECH_VPBE
++ tristate "Lyrtech VPBE Driver Support"
++ help
++ This option enables support for the Lyrtech VPBE driver
++ for DaVinci to FPGA data transfers.
++
++ To compile this driver as a module, choose M here: the
++ module will be called lyrvpbe.
++
++ If unsure, say N.
++
++config LYRVPSS_DEBUG
++ boolean "Debug support for LYRVPSSS drivers"
++ help
++ Say "yes" to enable verbose debug messaging.
++
++endif # LYRTECH_VPSS
+diff --git a/drivers/char/lyrvpss/Makefile b/drivers/char/lyrvpss/Makefile
+new file mode 100644
+index 0000000..ac36807
+--- /dev/null
++++ b/drivers/char/lyrvpss/Makefile
+@@ -0,0 +1,8 @@
++#
++# Makefile for the Lyrtech SFFSDR VPSS driver
++#
++
++obj-$(CONFIG_LYRTECH_VPFE) += lyrvpfe.o
++obj-$(CONFIG_LYRTECH_VPBE) += lyrvpbe.o
++lyrvpfe-objs := vpfe.o
++lyrvpbe-objs := vpbe.o
+diff --git a/drivers/char/lyrvpss/vpfe.c b/drivers/char/lyrvpss/vpfe.c
+new file mode 100644
+index 0000000..45e2853
+--- /dev/null
++++ b/drivers/char/lyrvpss/vpfe.c
+@@ -0,0 +1,753 @@
++/*
++ * lyrvpfe driver
++ *
++ * Copyright (C) 2008 Lyrtech <www.lyrtech.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/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/string.h>
++#include <linux/delay.h>
++#include <linux/firmware.h>
++#include <linux/interrupt.h>
++#include <linux/jiffies.h>
++#include <linux/err.h>
++#include <linux/fs.h>
++#include <linux/io.h>
++#include <linux/irq.h>
++
++#ifdef CONFIG_PROC_FS
++#include <linux/proc_fs.h>
++#include <linux/seq_file.h>
++#include <asm/uaccess.h>
++#endif /* CONFIG_PROC_FS */
++
++#include <asm/gpio.h>
++
++#include <mach/sffsdr-fpga.h>
++#include <mach/sffsdr-lyrvpfe.h>
++#include <mach/mux.h>
++#include <mach/irqs.h>
++
++#define MODULE_NAME "lyrvpfe"
++
++#ifdef CONFIG_LYRVPSS_DEBUG
++#define DBGMSG(fmt, args...) \
++ printk(KERN_INFO "%s: "fmt"\n" , MODULE_NAME, ## args)
++#else
++#define DBGMSG(fmt, args...)
++#endif
++
++#define FAILMSG(fmt, args...) \
++ printk(KERN_ERR "%s: "fmt"\n" , MODULE_NAME, ## args)
++
++#define DAVINCI_CCDC_REGS_OFFSET 0x400
++
++/* This word is written at index 0 to mark a buffer as invalid. */
++#define INVALIDATE_BUFFER_CODE 0x11222211
++
++/* Default values for our driver. */
++#define LYRVPFE_LINES_PER_FRAME 2
++#define LYRVPFE_WORDS_PER_LINE 8 /* Minimum is 8 words */
++
++/* SFFSDR VPSS limits */
++#define LYRVPFE_MAX_WORDS_PER_LINE 1024
++#define LYRVPFE_MAX_LINES_PER_FRAME 10
++#define LYRVPFE_MAX_BUFFER_SIZE 65536
++
++#define BUFFER_PING 0
++#define BUFFER_PONG 1
++
++struct ccdc_regs {
++ u32 pid;
++ u32 pcr;
++ u32 syn_mode;
++ u32 hd_vd_wid;
++ u32 pix_lines;
++ u32 horz_info;
++ u32 vert_start;
++ u32 vert_lines;
++ u32 culling;
++ u32 hsize_off;
++ u32 sdofst;
++ u32 sdr_addr;
++ u32 clamp;
++ u32 dcsub;
++ u32 colptn;
++ u32 blkcmp;
++ u32 fpc;
++ u32 fpc_addr;
++ u32 vdint;
++ u32 alaw;
++ u32 rec656if;
++ u32 ccdcfg;
++ u32 fmtcfg;
++ u32 fmt_horz;
++ u32 fmt_vert;
++ u32 unused[48];
++ u32 vp_out;
++};
++
++#define CCDC_REGS_COUNT 38
++
++#define CCDC_WEN_BIT (1 << 17)
++#define CCDC_VDHDEN_BIT (1 << 16)
++#define CCDC_VDPOL_NEG (1 << 2)
++
++/* Structure containing driver informations. */
++struct lyrvpfe_private {
++ enum {
++ LYRVPFE_INIT_START,
++ LYRVPFE_INIT_HAVE_REGS,
++ LYRVPFE_INIT_HAVE_IRQ,
++ LYRVPFE_INIT_HAVE_GPIO,
++ LYRVPFE_INIT_VPFE,
++ LYRVPFE_INIT_HAVE_PING_BUFFER,
++ LYRVPFE_INIT_HAVE_PONG_BUFFER,
++ LYRVPFE_INIT_HAVE_PROC
++ } init_state;
++ u32 id;
++ unsigned ready_gpio;
++ unsigned int irq;
++ void *regs;
++ volatile struct ccdc_regs *ccdc_regs;
++ u32 ramp_index;
++ u32 lines_per_frame;
++ u32 words_per_line;
++ int line_size;
++ int bufsize;
++ int wrid; /* 0 (ping) or 1 (pong) */
++ u32 *data_buffers[2];
++ struct device dev;
++};
++
++static struct lyrvpfe_private lyrvpfe;
++
++/* Informs the FPGA that the DaVinci can receive a new frame. */
++static void lyrvpfe_set_ready(void)
++{
++ int value;
++
++ /* Read current pin state */
++ value = gpio_get_value(lyrvpfe.ready_gpio);
++
++ /* Toggle state. */
++ value ^= 1;
++
++ /* Toggle pin. */
++ gpio_set_value(lyrvpfe.ready_gpio, value);
++}
++
++#ifdef CONFIG_PROC_FS
++
++#define LYRVPFE_PROC_NAME "lyrvpfe"
++
++static void *lyrvpfe_start(struct seq_file *m, loff_t *pos)
++{
++ return *pos < 1 ? (void *)1 : NULL;
++}
++
++static void *lyrvpfe_next(struct seq_file *m, void *v, loff_t *pos)
++{
++ ++*pos;
++ return NULL;
++}
++
++static void lyrvpfe_stop(struct seq_file *m, void *v)
++{
++}
++
++static void lyrvpfe_display_regs(char *msg, u32 *regs, int size,
++ struct seq_file *m)
++{
++ int k;
++
++ seq_printf(m, "%s:", msg);
++ for (k = 0; k < size; k++) {
++ if ((k % 4) == 0)
++ seq_printf(m, "\n");
++
++ seq_printf(m, " [$%02X] $%08X", k * 4, regs[k]);
++ }
++ seq_printf(m, "\n");
++}
++
++static int lyrvpfe_show(struct seq_file *m, void *v)
++{
++ u32 *regs;
++ unsigned long jtarget, jcurrent;
++
++ /* Toggle pin to receive next frame */
++ lyrvpfe_set_ready();
++
++ jtarget = jiffies + (1 * HZ);
++
++ /* Wait 1 second for data to arrive. */
++ do {
++ jcurrent = jiffies;
++ cpu_relax();
++ } while (time_before(jcurrent, jtarget));
++
++ regs = (u32 *) lyrvpfe.ccdc_regs;
++ lyrvpfe_display_regs("CCDC registers", regs, CCDC_REGS_COUNT, m);
++
++ seq_printf(m, "FPGA registers:\n");
++
++ seq_printf(m, " [$%04X] $%04X [$%04X] $%04X" \
++ " [$%04X] $%04X [$%04X] $%04X\n",
++ SFFSDR_FPGA_REVISION,
++ sffsdr_fpga_regread(SFFSDR_FPGA_REVISION),
++ SFFSDR_FPGA_VPSS_CONTROL,
++ sffsdr_fpga_regread(SFFSDR_FPGA_VPSS_CONTROL),
++ SFFSDR_FPGA_VPSS_TO_DSP_FIFO,
++ sffsdr_fpga_regread(SFFSDR_FPGA_VPSS_TO_DSP_FIFO),
++ SFFSDR_FPGA_VPSS_LINES_PER_FRAME,
++ sffsdr_fpga_regread(SFFSDR_FPGA_VPSS_LINES_PER_FRAME));
++
++ regs = lyrvpfe.data_buffers[BUFFER_PING];
++ lyrvpfe_display_regs("PING buffer", regs, 64, m);
++
++ regs = lyrvpfe.data_buffers[BUFFER_PONG];
++ lyrvpfe_display_regs("PONG buffer", regs, 64, m);
++
++ return 0;
++}
++
++static const struct seq_operations lyrvpfe_op = {
++ .start = lyrvpfe_start,
++ .next = lyrvpfe_next,
++ .stop = lyrvpfe_stop,
++ .show = lyrvpfe_show
++};
++
++static int lyrvpfe_open(struct inode *inode, struct file *file)
++{
++ struct seq_file *m;
++ int ret;
++
++ DBGMSG("lyrvpfe_open");
++
++ ret = seq_open(file, &lyrvpfe_op);
++ if (ret < 0)
++ return ret;
++
++ m = file->private_data;
++
++ return 0;
++}
++
++static const struct file_operations proc_lyrvpfe_operations = {
++ .open = lyrvpfe_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = seq_release,
++ .owner = THIS_MODULE,
++};
++
++static int lyrvpfe_proc_init(void)
++{
++ struct proc_dir_entry *entry;
++
++ entry = create_proc_entry(LYRVPFE_PROC_NAME, 0, NULL);
++ if (!entry) {
++ FAILMSG("Error creating proc entry");
++ return -EFAULT;
++ }
++
++ entry->proc_fops = &proc_lyrvpfe_operations;
++ entry->data = &lyrvpfe;
++
++ return 0;
++}
++
++#endif /* CONFIG_PROC_FS */
++
++static int lyrvpfe_validate_buffer(u32 *buffer)
++{
++ u8 xor, xnor;
++ u8 *cksum_data = (u8 *) buffer;
++
++ /* Compute XOR of bytes 4 and 5 */
++ xnor = ~(cksum_data[4] ^ cksum_data[5]);
++ xor = cksum_data[4] ^ cksum_data[5];
++
++ if ((xor != cksum_data[1]) || (xnor != cksum_data[0]))
++ return -1;
++ else
++ return 0;
++}
++
++static inline void lyrvpfe_invalidate_buffer(u32 *buffer)
++{
++ int line;
++ int offset;
++
++ for (line = 0; line < lyrvpfe.lines_per_frame; line++) {
++ /* Get offset of next line. */
++ offset = (line * lyrvpfe.ccdc_regs->hsize_off) / 4;
++
++ /* Mark buffer as invalid. */
++ buffer[offset] = INVALIDATE_BUFFER_CODE;
++ }
++}
++
++/*
++ * Lyrtech SFFSDR custom VPFE format:
++ *
++ * Length is in u32 units
++ *
++ * Format for each line:
++ *
++ * | u32 | bits |
++ * |offset| 31..24 | 23..16 | 15..08 | 07..00 |
++ * ============================================
++ * 0 | dummy dummy dummy dummy
++ * 1 | dummy dummy dummy dummy
++ * 2 | length length cksum cksum
++ * 3 | data0 data0 data0 data0
++ * 4 | data1 data1 data1 data1
++ * ... ...
++ */
++static int vpfe_check_buffer(u32 *buffer)
++{
++ int k;
++ int line;
++ u16 length;
++ int offset;
++ int ret;
++
++ for (line = 0; line < lyrvpfe.lines_per_frame; line++) {
++ /* Get offset of next line. */
++ offset = (line * lyrvpfe.ccdc_regs->hsize_off) / 4;
++
++ if (buffer[offset] == INVALIDATE_BUFFER_CODE) {
++ /* No error. Means that HD pulses generated the VDINT0
++ * interruption, but VD was not asserted. */
++ return -1;
++ }
++
++ /* First two words contain empty/dummy data. */
++ offset += 2;
++
++ if (line == 0) {
++ if (lyrvpfe.wrid == BUFFER_PING)
++ DBGMSG("VDINT: PING buffer");
++ else
++ DBGMSG("VDINT: PONG buffer");
++ }
++
++ ret = lyrvpfe_validate_buffer(&buffer[offset]);
++ if (ret < 0) {
++ /* This may mean a checksum error, or that
++ * the FPGA sent fewer lines than the maximum
++ * configured. */
++ FAILMSG(" Checksum error line %d", line);
++ return -1;
++ }
++
++ length = buffer[offset] >> 16;
++
++ /* Points to first data word. */
++ offset++;
++
++ for (k = 0; k < length; k++) {
++ if (buffer[offset + k] != (lyrvpfe.ramp_index + k)) {
++ FAILMSG(" Ramp error at index %d, line %d",
++ lyrvpfe.ramp_index, line);
++ FAILMSG(" read: $%08X",
++ buffer[offset + k]);
++ FAILMSG(" expected: $%08X",
++ lyrvpfe.ramp_index + k);
++
++ lyrvpfe_invalidate_buffer(buffer);
++ return -1;
++ }
++ }
++
++ lyrvpfe.ramp_index += length;
++ }
++
++ return 0;
++}
++
++static void lyrvpfe_set_ccdc_buffer(u32 *virt_address)
++{
++ lyrvpfe.ccdc_regs->sdr_addr = (u32) virt_to_phys(virt_address);
++}
++
++/*
++ * The CCDC VDINT0 and VDINT1 HD counters begin counting HD pulses from the
++ * rising edge of the external VD. The Lyrtech FPGA VPFE design only drives VD
++ * when the ARM request data by toggling the SET_VPFE_READY GPIO. Unfortunately,
++ * the FPGA never disable the HD line, and the ISR will be called all the time
++ * with invalid data when VD is not driven. This is why we need to invalidate a
++ * buffer once it has been read.
++ */
++static irqreturn_t lyrvpfe_isr(int irq, void *dev_id)
++{
++ int ret;
++ int buffer_read_id;
++
++ /* Buffer index for reading data */
++ buffer_read_id = lyrvpfe.wrid;
++
++ ret = vpfe_check_buffer(lyrvpfe.data_buffers[buffer_read_id]);
++ if (ret) {
++ /* This could mean a real error or simply that we received a
++ * dummy HD interrupt. */
++ lyrvpfe_invalidate_buffer(lyrvpfe.data_buffers[buffer_read_id]);
++ } else {
++ /* Valid data was received. We can now switch the pong-pong
++ * buffers. */
++
++ /* Switch ping-pong buffers for writing. */
++ lyrvpfe.wrid ^= 1;
++ lyrvpfe_set_ccdc_buffer(lyrvpfe.data_buffers[lyrvpfe.wrid]);
++
++ /* Make sure to invalidate the new buffer */
++ lyrvpfe_invalidate_buffer(lyrvpfe.data_buffers[lyrvpfe.wrid]);
++ }
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * Configures the VPFE interface to receive data from the FPGA.
++ *
++ * lines_per_frame: Lines per frame (within the VSYNC period).
++ * words_per_line: 32-bits data words per line (within the HSYNC period).
++ */
++static int lyrvpfe_init_vpfe(u16 lines_per_frame, u16 words_per_line)
++{
++ int bytes_per_buffer;
++
++ lyrvpfe.ramp_index = 0;
++ lyrvpfe.wrid = BUFFER_PING;
++
++ if (words_per_line > LYRVPFE_MAX_WORDS_PER_LINE) {
++ FAILMSG("VPFE init: invalid words_per_line (%d)",
++ words_per_line);
++ return -1;
++ }
++
++ if (lines_per_frame > LYRVPFE_MAX_LINES_PER_FRAME) {
++ FAILMSG("VPFE init: invalid lines_per_frame (%d)",
++ lines_per_frame);
++ return -1;
++ }
++
++ bytes_per_buffer = (words_per_line + 3) * 4 * lines_per_frame;
++ if (bytes_per_buffer > LYRVPFE_MAX_BUFFER_SIZE) {
++ FAILMSG("VPFE init: wrong bytes_per_buffer (%d)",
++ bytes_per_buffer);
++ return -1;
++ }
++
++ DBGMSG(" words_per_line = $%04X", words_per_line);
++ DBGMSG(" lines_per_frame = $%04X", lines_per_frame);
++
++ /* Setup FPGA parameters */
++ sffsdr_fpga_regwrite(SFFSDR_FPGA_VPSS_TO_DSP_FIFO,
++ (words_per_line & 0x3ff) |
++ (lines_per_frame << 10));
++
++ /* 2 additional for blanking and 1 for header (length and checksum). */
++ words_per_line = words_per_line + 3;
++
++ lyrvpfe.words_per_line = words_per_line;
++ lyrvpfe.lines_per_frame = lines_per_frame;
++
++ /************************************************/
++ /* Setup Fix VPFE parameter */
++ /************************************************/
++ /* Setup VPFE Hardware */
++ lyrvpfe.ccdc_regs->syn_mode = CCDC_WEN_BIT | CCDC_VDHDEN_BIT |
++ CCDC_VDPOL_NEG;
++
++ /* Start at Line 0 */
++ lyrvpfe.ccdc_regs->vert_start = 0;
++
++ /* Disable culling */
++ lyrvpfe.ccdc_regs->culling = 0xFFFF00FF;
++
++ lyrvpfe.ccdc_regs->sdofst = 0;
++ lyrvpfe.ccdc_regs->clamp = 0;
++ lyrvpfe.ccdc_regs->dcsub = 0;
++ lyrvpfe.ccdc_regs->colptn = 0;
++ lyrvpfe.ccdc_regs->blkcmp = 0;
++ lyrvpfe.ccdc_regs->fpc = 0;
++ lyrvpfe.ccdc_regs->vdint = 0;
++ lyrvpfe.ccdc_regs->alaw = 0;
++ lyrvpfe.ccdc_regs->rec656if = 0;
++
++ /* Disable shadowing as recommended in silicon errata. Very important,
++ * if not set, a lot of problems may occur. */
++ /* VDLC: Not latched on VSYNC. */
++ lyrvpfe.ccdc_regs->ccdcfg = (1 << 15);
++
++ /************************************************/
++ /* Setup variable VPFE parameter */
++ /************************************************/
++ /* Max. length of a line */
++ lyrvpfe.ccdc_regs->horz_info = words_per_line * 4;
++
++ /* Max. number of lines per frame - 1 */
++ lyrvpfe.ccdc_regs->vert_lines = lines_per_frame - 1;
++
++ /* Offset of a line in memory (in bytes).
++ * Must be on 32 bytes boundary */
++ lyrvpfe.line_size = ((words_per_line * sizeof(u32)) + 31) & ~31;
++ lyrvpfe.ccdc_regs->hsize_off = lyrvpfe.line_size;
++
++ /* Enable CCDC */
++ lyrvpfe.ccdc_regs->pcr = 0x1;
++
++ return 0;
++}
++
++static void lyrvpfe_disable_vpfe(void)
++{
++ /* Disable CCDC */
++ lyrvpfe.ccdc_regs->pcr = 0;
++}
++
++static void lyrvpfe_dev_cleanup(void)
++{
++ DBGMSG("lyrvpfe_dev_cleanup()");
++
++ switch (lyrvpfe.init_state) {
++ case LYRVPFE_INIT_HAVE_PROC:
++#ifdef CONFIG_PROC_FS
++ remove_proc_entry(LYRVPFE_PROC_NAME, NULL);
++#endif
++ case LYRVPFE_INIT_HAVE_IRQ:
++ free_irq(lyrvpfe.irq, &lyrvpfe);
++ case LYRVPFE_INIT_HAVE_PONG_BUFFER:
++ kfree(lyrvpfe.data_buffers[BUFFER_PONG]);
++ case LYRVPFE_INIT_HAVE_PING_BUFFER:
++ kfree(lyrvpfe.data_buffers[BUFFER_PING]);
++ case LYRVPFE_INIT_VPFE:
++ lyrvpfe_disable_vpfe();
++ case LYRVPFE_INIT_HAVE_GPIO:
++ gpio_free(lyrvpfe.ready_gpio);
++ case LYRVPFE_INIT_HAVE_REGS:
++ iounmap(lyrvpfe.regs);
++ case LYRVPFE_INIT_START:
++ break;
++ }
++}
++
++struct bus_type lyrvpfe_bus_type = {
++ .name = "lyrvpfe",
++};
++EXPORT_SYMBOL(lyrvpfe_bus_type);
++
++static int lyrvpfe_probe(struct platform_device *pdev)
++{
++ struct lyrvpfe_platform_data *pdata;
++ struct resource *regs_res;
++ struct resource *irq_res;
++ int result;
++ void *buf;
++
++ DBGMSG("lyrvpfe_probe()");
++
++ /* We Should enable the VPFE with the PSC controller and PINMUX0. */
++
++ lyrvpfe.id = pdev->id;
++ lyrvpfe.dev.bus = &lyrvpfe_bus_type;
++ lyrvpfe.dev.parent = &pdev->dev;
++ snprintf(lyrvpfe.dev.bus_id, BUS_ID_SIZE, "lyrvpfe%d", lyrvpfe.id);
++ lyrvpfe.dev.bus_id[BUS_ID_SIZE - 1] = 0;
++ lyrvpfe.init_state = LYRVPFE_INIT_START;
++
++ regs_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs");
++ if (!regs_res) {
++ FAILMSG("Error getting REGS ressource");
++ result = -ENODEV;
++ goto error;
++ }
++
++ lyrvpfe.regs = ioremap(regs_res->start,
++ regs_res->end - regs_res->start);
++ if (!lyrvpfe.regs) {
++ FAILMSG("Can't remap CCDC registers");
++ result = -ENXIO;
++ goto error;
++ }
++ lyrvpfe.ccdc_regs = (struct ccdc_regs *)
++ (lyrvpfe.regs + DAVINCI_CCDC_REGS_OFFSET);
++
++ lyrvpfe.init_state = LYRVPFE_INIT_HAVE_REGS;
++
++ pdata = pdev->dev.platform_data;
++ if (!pdata) {
++ FAILMSG("Error getting platform data");
++ result = -ENODEV;
++ goto error;
++ }
++ lyrvpfe.dev.platform_data = pdata;
++
++ /* Configure VPFE SET READY GPIO. */
++ lyrvpfe.ready_gpio = pdata->ready_gpio;
++
++ result = gpio_request(lyrvpfe.ready_gpio, "vpfe_ready");
++ if (result == 0) {
++ /* Must start at 1, if not gives errors. */
++ result = gpio_direction_output(lyrvpfe.ready_gpio, 1);
++ }
++ if (result != 0)
++ goto error;
++
++ lyrvpfe.init_state = LYRVPFE_INIT_HAVE_GPIO;
++
++ result = lyrvpfe_init_vpfe(LYRVPFE_LINES_PER_FRAME,
++ LYRVPFE_WORDS_PER_LINE);
++ if (result < 0) {
++ FAILMSG("lyrvpfe_init_vpfe() failed (%d)", result);
++ goto error;
++ }
++ lyrvpfe.init_state = LYRVPFE_INIT_VPFE;
++
++ /* Adding 256 to compensate for 256 bytes alignment */
++ lyrvpfe.bufsize = lyrvpfe.line_size * lyrvpfe.lines_per_frame + 256;
++
++ buf = kmalloc(lyrvpfe.bufsize /*LYRVPFE_BUFFER_SIZE*/, GFP_KERNEL);
++ if (!buf) {
++ result = -ENOMEM;
++ goto error;
++ }
++ /* Buffer must be 32 bytes aligned for the hardware but must be
++ * 256 bytes aligned to cope with cache line size. */
++ lyrvpfe.data_buffers[BUFFER_PING] =
++ (u32 *) (((u32) buf + 255) & 0xFFFFFF00);
++ lyrvpfe.data_buffers[BUFFER_PING][0] = 0x11111111;
++ lyrvpfe.data_buffers[BUFFER_PING][1] = 0x22222222;
++ lyrvpfe_invalidate_buffer(lyrvpfe.data_buffers[BUFFER_PING]);
++ lyrvpfe.init_state = LYRVPFE_INIT_HAVE_PING_BUFFER;
++
++ buf = kmalloc(lyrvpfe.bufsize /*LYRVPFE_BUFFER_SIZE*/, GFP_KERNEL);
++ if (!buf) {
++ result = -ENOMEM;
++ goto error;
++ }
++ /* Buffer must be 32 bytes aligned for the hardware but must be
++ * 256 bytes aligned to cope with cache line size. */
++ lyrvpfe.data_buffers[BUFFER_PONG] =
++ (u32 *) (((u32) buf + 255) & 0xFFFFFF00);
++ lyrvpfe.data_buffers[BUFFER_PONG][0] = 0x33333333;
++ lyrvpfe.data_buffers[BUFFER_PONG][1] = 0x44444444;
++ lyrvpfe_invalidate_buffer(lyrvpfe.data_buffers[BUFFER_PONG]);
++ lyrvpfe.init_state = LYRVPFE_INIT_HAVE_PONG_BUFFER;
++
++ lyrvpfe_set_ccdc_buffer(lyrvpfe.data_buffers[lyrvpfe.wrid]);
++
++ /* setup interrupt handling */
++ irq_res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "irq");
++ if (!irq_res) {
++ FAILMSG("Error getting IRQ ressource");
++ result = -ENODEV;
++ goto error;
++ }
++
++ lyrvpfe.irq = irq_res->start;
++ result = request_irq(lyrvpfe.irq, lyrvpfe_isr,
++ IRQF_SHARED /*IRQF_DISABLED*/,
++ MODULE_NAME, &lyrvpfe);
++ if (result) {
++ FAILMSG("Error requesting IRQ ressource");
++ result = -ENODEV; /* To check */
++ goto error;
++ }
++
++ lyrvpfe.init_state = LYRVPFE_INIT_HAVE_IRQ;
++
++#ifdef CONFIG_PROC_FS
++ result = lyrvpfe_proc_init();
++ if (result < 0) {
++ FAILMSG("Error creating proc entry");
++ goto error;
++ }
++#endif
++
++ lyrvpfe.init_state = LYRVPFE_INIT_HAVE_PROC;
++
++ return 0;
++
++error:
++ lyrvpfe_dev_cleanup();
++ return result;
++}
++
++static int __devexit lyrvpfe_remove(struct platform_device *pdev)
++{
++ DBGMSG("lyrvpfe_remove()");
++
++ lyrvpfe_dev_cleanup();
++ return 0;
++}
++
++static struct platform_driver lyrvpfe_pdriver = {
++ .driver = {
++ .name = MODULE_NAME,
++ .owner = THIS_MODULE,
++ },
++ .remove = lyrvpfe_remove,
++};
++
++static int __init lyrvpfe_init(void)
++{
++ int res = 0;
++
++ DBGMSG("lyrvpfe_init()");
++
++ res = bus_register(&lyrvpfe_bus_type);
++ if (res) {
++ FAILMSG("bus_register() failed");
++ goto fail_bus;
++ }
++
++ res = platform_driver_probe(&lyrvpfe_pdriver, lyrvpfe_probe);
++ if (res) {
++ FAILMSG("platform_driver_probe() failed");
++ goto fail_platform;
++ }
++
++ return 0;
++
++fail_platform:
++ bus_unregister(&lyrvpfe_bus_type);
++fail_bus:
++ return res;
++}
++module_init(lyrvpfe_init);
++
++static void __exit lyrvpfe_exit(void)
++{
++ DBGMSG("lyrvpfe_exit()");
++
++ platform_driver_unregister(&lyrvpfe_pdriver);
++ bus_unregister(&lyrvpfe_bus_type);
++}
++module_exit(lyrvpfe_exit);
++
++MODULE_AUTHOR("Hugo Villeneuve <hvilleneuve@lyrtech.com>");
++MODULE_DESCRIPTION("Lyrtech SFFSDR VPFE driver");
++MODULE_LICENSE("GPL");
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/0012-Update-SFFSDR-to-support-FPGA-and-lyrvpss-drivers.patch b/packages/linux/linux-davinci/davinci-sffsdr/0012-Update-SFFSDR-to-support-FPGA-and-lyrvpss-drivers.patch
new file mode 100644
index 0000000000..cdeed89e15
--- /dev/null
+++ b/packages/linux/linux-davinci/davinci-sffsdr/0012-Update-SFFSDR-to-support-FPGA-and-lyrvpss-drivers.patch
@@ -0,0 +1,934 @@
+From 97e062a70c0b1ccc5b3f8236966c13b7b79e7c13 Mon Sep 17 00:00:00 2001
+From: Hugo Villeneuve <hugo@hugovil.com>
+Date: Fri, 6 Mar 2009 12:31:34 -0500
+Subject: [PATCH 12/12] Update SFFSDR to support FPGA and lyrvpss drivers
+
+Signed-off-by: Hugo Villeneuve <hugo@hugovil.com>
+---
+ arch/arm/configs/davinci_sffsdr_defconfig | 157 +++++++++----
+ arch/arm/mach-davinci/Kconfig | 15 ++
+ arch/arm/mach-davinci/Makefile | 1 +
+ arch/arm/mach-davinci/board-sffsdr-fpga.c | 283 ++++++++++++++++++++++
+ arch/arm/mach-davinci/board-sffsdr.c | 195 ++++++++++++---
+ arch/arm/mach-davinci/include/mach/sffsdr-fpga.h | 54 ++++
+ 6 files changed, 628 insertions(+), 77 deletions(-)
+ create mode 100644 arch/arm/mach-davinci/board-sffsdr-fpga.c
+ create mode 100644 arch/arm/mach-davinci/include/mach/sffsdr-fpga.h
+
+diff --git a/arch/arm/configs/davinci_sffsdr_defconfig b/arch/arm/configs/davinci_sffsdr_defconfig
+index 8c17858..91c01f9 100644
+--- a/arch/arm/configs/davinci_sffsdr_defconfig
++++ b/arch/arm/configs/davinci_sffsdr_defconfig
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+ # Linux kernel version: 2.6.28-davinci1
+-# Fri Jan 16 12:33:07 2009
++# Fri Mar 6 12:29:19 2009
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+@@ -179,15 +179,11 @@ CONFIG_ARCH_DAVINCI_DM644x=y
+ #
+ # CONFIG_MACH_DAVINCI_EVM is not set
+ CONFIG_MACH_SFFSDR=y
++CONFIG_SFFSDR_FPGA=m
+ CONFIG_DAVINCI_MUX=y
+ # CONFIG_DAVINCI_MUX_DEBUG is not set
+ # CONFIG_DAVINCI_MUX_WARNINGS is not set
+ # CONFIG_DAVINCI_RESET_CLOCKS is not set
+-CONFIG_DAVINCI_BOOT_TAG=y
+-
+-#
+-# DaVinci Options
+-#
+
+ #
+ # Processor Type
+@@ -206,7 +202,7 @@ CONFIG_CPU_CP15_MMU=y
+ #
+ # Processor Features
+ #
+-CONFIG_ARM_THUMB=y
++# 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
+@@ -378,7 +374,84 @@ CONFIG_EXTRA_FIRMWARE=""
+ # CONFIG_DEBUG_DEVRES is not set
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+-# CONFIG_MTD 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 is not set
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_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
++# CONFIG_MTD_OOPS 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
++
++#
++# 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
++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_GPIO 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_PLATFORM is not set
++CONFIG_MTD_NAND_DAVINCI=y
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
+ # CONFIG_PARPORT is not set
+ CONFIG_BLK_DEV=y
+ # CONFIG_BLK_DEV_COW_COMMON is not set
+@@ -387,7 +460,13 @@ CONFIG_BLK_DEV=y
+ # CONFIG_BLK_DEV_RAM is not set
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+-# CONFIG_MISC_DEVICES is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_ICS932S401 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++CONFIG_FPGADL=m
++CONFIG_FPGADL_PAR=m
++# CONFIG_C2PORT is not set
+ CONFIG_HAVE_IDE=y
+ # CONFIG_IDE is not set
+
+@@ -499,6 +578,10 @@ CONFIG_UNIX98_PTYS=y
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
++CONFIG_LYRTECH_VPSS=y
++CONFIG_LYRTECH_VPFE=m
++# CONFIG_LYRTECH_VPBE is not set
++CONFIG_LYRVPSS_DEBUG=y
+ CONFIG_I2C=y
+ CONFIG_I2C_BOARDINFO=y
+ CONFIG_I2C_CHARDEV=y
+@@ -628,11 +711,11 @@ CONFIG_SSB_POSSIBLE=y
+ # Display device support
+ #
+ # CONFIG_DISPLAY_SUPPORT is not set
+-CONFIG_SOUND=y
++CONFIG_SOUND=m
+ # CONFIG_SOUND_OSS_CORE is not set
+-CONFIG_SND=y
+-CONFIG_SND_TIMER=y
+-CONFIG_SND_PCM=y
++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
+@@ -643,38 +726,14 @@ CONFIG_SND_DYNAMIC_MINORS=y
+ # CONFIG_SND_DEBUG is not set
+ # CONFIG_SND_DRIVERS is not set
+ # CONFIG_SND_ARM is not set
+-CONFIG_SND_SOC=y
++CONFIG_SND_SOC=m
+ CONFIG_SND_DAVINCI_SOC=m
+-# CONFIG_SND_DAVINCI_SOC_SFFSDR is not set
++CONFIG_SND_DAVINCI_SOC_I2S=m
++CONFIG_SND_DAVINCI_SOC_SFFSDR=m
+ # CONFIG_SND_SOC_ALL_CODECS is not set
++CONFIG_SND_SOC_PCM3008=m
+ # CONFIG_SOUND_PRIME is not set
+ # CONFIG_USB_SUPPORT is not set
+-# CONFIG_USB_MUSB_HOST is not set
+-# CONFIG_USB_MUSB_PERIPHERAL is not set
+-# CONFIG_USB_MUSB_OTG is not set
+-# CONFIG_USB_GADGET_MUSB_HDRC is not set
+-# CONFIG_USB_GADGET_AT91 is not set
+-# CONFIG_USB_GADGET_ATMEL_USBA is not set
+-# CONFIG_USB_GADGET_FSL_USB2 is not set
+-# CONFIG_USB_GADGET_LH7A40X is not set
+-# CONFIG_USB_GADGET_OMAP is not set
+-# CONFIG_USB_GADGET_PXA25X is not set
+-# CONFIG_USB_GADGET_PXA27X is not set
+-# CONFIG_USB_GADGET_S3C2410 is not set
+-# CONFIG_USB_GADGET_M66592 is not set
+-# CONFIG_USB_GADGET_AMD5536UDC is not set
+-# CONFIG_USB_GADGET_FSL_QE is not set
+-# CONFIG_USB_GADGET_NET2280 is not set
+-# CONFIG_USB_GADGET_GOKU is not set
+-# CONFIG_USB_GADGET_DUMMY_HCD is not set
+-# CONFIG_USB_ZERO is not set
+-# 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_PRINTER is not set
+-# CONFIG_USB_CDC_COMPOSITE is not set
+ CONFIG_MMC=m
+ # CONFIG_MMC_DEBUG is not set
+ # CONFIG_MMC_UNSAFE_RESUME is not set
+@@ -766,6 +825,17 @@ CONFIG_TMPFS=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_FS_WBUF_VERIFY is not set
++# 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 is not set
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
+ # CONFIG_CRAMFS is not set
+ # CONFIG_VXFS_FS is not set
+ # CONFIG_MINIX_FS is not set
+@@ -1020,13 +1090,16 @@ CONFIG_CRYPTO=y
+ #
+ # Library routines
+ #
++CONFIG_BITREVERSE=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+ # CONFIG_CRC_T10DIF is not set
+ # CONFIG_CRC_ITU_T is not set
+-# CONFIG_CRC32 is not set
++CONFIG_CRC32=y
+ # CONFIG_CRC7 is not set
+ # CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
+ CONFIG_PLIST=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
+index 0010f2d..769cd6c 100644
+--- a/arch/arm/mach-davinci/Kconfig
++++ b/arch/arm/mach-davinci/Kconfig
+@@ -50,6 +50,21 @@ config MACH_SFFSDR
+ Say Y here to select the Lyrtech Small Form Factor
+ Software Defined Radio (SFFSDR) board.
+
++config SFFSDR_FPGA
++ tristate "SFFSDR SX-35 FPGA support"
++ default n
++ depends on MACH_SFFSDR
++ select FPGADL
++ select FW_LOADER
++ help
++ This driver supports the SX-35 FPGA on the Lyrtech SFFSDR board.
++ The FPGA is mainly used to generate the clocks for the audio
++ codec and for transferring data to/from the other stacked boards
++ (using the EMIF or VPSS ports).
++
++ To compile this driver as a module, choose M here: the
++ module will be called sffsdr-fpga.
++
+ config DAVINCI_MUX
+ bool "DAVINCI multiplexing support"
+ depends on ARCH_DAVINCI
+diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
+index 6783681..8a7b3c2 100644
+--- a/arch/arm/mach-davinci/Makefile
++++ b/arch/arm/mach-davinci/Makefile
+@@ -19,3 +19,4 @@ obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o
+ obj-$(CONFIG_MACH_DAVINCI_DM646X_EVM) += board-dm646x-evm.o
+ obj-$(CONFIG_MACH_DAVINCI_DM355_EVM) += board-dm355-evm.o
+ obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o
++obj-$(CONFIG_SFFSDR_FPGA) += board-sffsdr-fpga.o
+diff --git a/arch/arm/mach-davinci/board-sffsdr-fpga.c b/arch/arm/mach-davinci/board-sffsdr-fpga.c
+new file mode 100644
+index 0000000..b6a64dd
+--- /dev/null
++++ b/arch/arm/mach-davinci/board-sffsdr-fpga.c
+@@ -0,0 +1,283 @@
++/*
++ * SFFSDR-board specific FPGA driver
++ *
++ * Copyright (C) 2008 Lyrtech <www.lyrtech.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/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/string.h>
++#include <linux/platform_device.h>
++#include <linux/err.h>
++#include <linux/io.h>
++#include <linux/cdev.h>
++#include <linux/fs.h>
++#include <linux/fpgadl.h>
++
++#include <asm/gpio.h>
++
++#include <mach/sffsdr-fpga.h>
++
++#define MODULE_NAME "sffsdr_fpga"
++
++/* Used to determine if the bitstream is loaded. */
++#define FPGA_DEVICE_NAME "fpgadl_par0"
++
++/* Define this to have verbose debug messages. */
++#define SFFSDR_FPGA_DEBUG 1
++
++#ifdef SFFSDR_FPGA_DEBUG
++#define DBGMSG(fmt, args...) \
++ printk(KERN_INFO "%s: "fmt"\n" , MODULE_NAME, ## args)
++#define FAILMSG(fmt, args...) \
++ printk(KERN_ERR "%s: "fmt"\n" , MODULE_NAME, ## args)
++#else
++#define DBGMSG(fmt, args...)
++#define FAILMSG(fmt, args...)
++#endif
++
++#define FPGA_FULL_RESET_VAL 3
++#define FPGA_PARTIAL_RESET_VAL 2
++
++#define FPGA_DS2_ON (1<<0)
++#define FPGA_DS3_ON (1<<1)
++#define FPGA_DS4_ON (1<<2)
++#define FPGA_DS5_ON (1<<3)
++#define FPGA_DS6_ON (1<<4)
++
++/* Sampling frequency divider, bits 5:4 */
++#define FPGA_FS_DIV_BY_1 (0<<4)
++#define FPGA_FS_DIV_BY_2 (1<<4)
++#define FPGA_FS_DIV_BY_4 (2<<4)
++#define FPGA_FS_DIV_RSV (3<<4)
++
++/* Sampling rate selection, bit 2 */
++#define FPGA_SR_STANDARD (0<<2) /* Standard sampling rate, default */
++#define FPGA_SR_DOUBLE (1<<2) /* Double sampling rate */
++
++/* Sampling frequency selection, bits 1:0 */
++#define FPGA_FS_48000 (0<<0) /* 48.0 kHz (PLL 12.288 MHz) */
++#define FPGA_FS_44100 (1<<0) /* 44.1 kHz (PLL 11.2896 MHz) */
++#define FPGA_FS_32000 (2<<0) /* 32.0 kHz (PLL 8.192 MHz) */
++#define FPGA_FS_RSV (3<<0) /* Reserved */
++
++struct sffsdr_fpga_dev_t {
++ int bitstream_mode;
++ u16 *regs;
++};
++
++static enum {
++ SFFSDR_FPGA_STATE_START,
++ SFFSDR_FPGA_STATE_DRV_STRUCT_ALLOCATED,
++ SFFSDR_FPGA_STATE_REGS_MAPPED,
++} sffsdr_fpga_state;
++
++struct sffsdr_fpga_dev_t *sffsdr_fpga_dev;
++
++/* The EMIF address lines A0 to A2 are not routed to the
++ * FPGA. Therefore, the upper 16 bits are never valid. */
++u16 sffsdr_fpga_regread(int offset)
++{
++ return sffsdr_fpga_dev->regs[offset / 2];
++}
++EXPORT_SYMBOL(sffsdr_fpga_regread);
++
++void sffsdr_fpga_regwrite(int offset, u16 value)
++{
++ sffsdr_fpga_dev->regs[offset / 2] = value;
++}
++EXPORT_SYMBOL(sffsdr_fpga_regwrite);
++
++/* Reset the inside logic of the FPGA according to the
++ * bitstream mode. This is done when the bitstream has
++ * been programmed and is Lyrtech SFF-SDR specific. */
++static void sffsdr_fpga_reset(int bitstream_mode)
++{
++ u32 value;
++
++ if (bitstream_mode == BITSTREAM_MODE_FULL)
++ value = FPGA_FULL_RESET_VAL;
++ else
++ value = FPGA_PARTIAL_RESET_VAL;
++
++ sffsdr_fpga_regwrite(SFFSDR_FPGA_GLOBAL_CTRL, value);
++ sffsdr_fpga_regwrite(SFFSDR_FPGA_GLOBAL_CTRL, 0);
++}
++
++static int sffsdr_fpga_post_load(int bitstream_mode)
++{
++ DBGMSG("sffsdr_fpga_post_load()");
++
++ if (fpgadl_is_bitstream_loaded(FPGA_DEVICE_NAME) < 1) {
++ FAILMSG(" FPGA is not programmed");
++ return -ENODEV;
++ }
++
++ sffsdr_fpga_reset(bitstream_mode);
++
++ DBGMSG("FPGA Revision: %d",
++ sffsdr_fpga_regread(SFFSDR_FPGA_REVISION));
++
++ /* Light some LEDs to indicate success. */
++ sffsdr_fpga_regwrite(SFFSDR_FPGA_LED_CONTROL, FPGA_DS2_ON |
++ FPGA_DS3_ON | FPGA_DS4_ON | FPGA_DS5_ON |
++ FPGA_DS6_ON);
++
++ /* Set default CODEC clock values. */
++ sffsdr_fpga_regwrite(SFFSDR_FPGA_PLL_CODEC, FPGA_FS_DIV_BY_1 |
++ FPGA_FS_44100 | FPGA_SR_STANDARD);
++
++ return 0;
++}
++
++int sffsdr_fpga_set_codec_fs(int fs)
++{
++ u16 fs_mask;
++
++ if (fpgadl_is_bitstream_loaded(FPGA_DEVICE_NAME) < 1) {
++ FAILMSG("FPGA is not programmed");
++ return -ENODEV;
++ }
++
++ switch (fs) {
++ case 32000:
++ fs_mask = FPGA_FS_32000;
++ break;
++ case 44100:
++ fs_mask = FPGA_FS_44100;
++ break;
++ case 48000:
++ fs_mask = FPGA_FS_48000;
++ break;
++ default:
++ FAILMSG("Unsupported sampling frequency");
++ return -EFAULT;
++ break;
++ }
++
++ sffsdr_fpga_regwrite(SFFSDR_FPGA_PLL_CODEC, FPGA_FS_DIV_BY_1 |
++ fs_mask | FPGA_SR_STANDARD);
++
++ return 0;
++}
++EXPORT_SYMBOL(sffsdr_fpga_set_codec_fs);
++
++static void sffsdr_fpga_cleanup(void)
++{
++ switch (sffsdr_fpga_state) {
++ case SFFSDR_FPGA_STATE_REGS_MAPPED:
++ iounmap(sffsdr_fpga_dev->regs);
++ case SFFSDR_FPGA_STATE_DRV_STRUCT_ALLOCATED:
++ kfree(sffsdr_fpga_dev);
++ case SFFSDR_FPGA_STATE_START:
++ /* Nothing to do. */
++ break;
++ }
++}
++
++static int __devinit sffsdr_fpga_probe(struct platform_device *pdev)
++{
++ struct resource *fpgaregs_res;
++ int len;
++ int result;
++
++ DBGMSG("sffsdr_fpga_probe()");
++
++ sffsdr_fpga_state = SFFSDR_FPGA_STATE_START;
++
++ sffsdr_fpga_dev = kzalloc(sizeof(*sffsdr_fpga_dev), GFP_KERNEL);
++ if (!sffsdr_fpga_dev) {
++ FAILMSG("Failed to allocate device structure");
++ result = -ENOMEM;
++ goto error;
++ }
++ sffsdr_fpga_state = SFFSDR_FPGA_STATE_DRV_STRUCT_ALLOCATED;
++
++ pdev->dev.driver_data = sffsdr_fpga_dev; /* Private driver data */
++
++ /* Assign virtual addresses to FPGAREGS I/O memory regions. */
++ fpgaregs_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
++ "sffsdr_regs");
++ if (!fpgaregs_res) {
++ FAILMSG("Error getting fpgaregs ressource");
++ result = -ENODEV;
++ goto error;
++ }
++ len = fpgaregs_res->end - fpgaregs_res->start;
++ sffsdr_fpga_dev->regs = ioremap(fpgaregs_res->start, len);
++ if (!sffsdr_fpga_dev->regs) {
++ FAILMSG("Can't remap fpgaregs registers");
++ result = -ENXIO;
++ goto error;
++ }
++ sffsdr_fpga_state = SFFSDR_FPGA_STATE_REGS_MAPPED;
++
++ /* Temporary... */
++ sffsdr_fpga_post_load(BITSTREAM_MODE_FULL);
++
++ return 0;
++
++error:
++ sffsdr_fpga_cleanup();
++ return result;
++}
++
++static int __devexit sffsdr_fpga_remove(struct platform_device *pdev)
++{
++ DBGMSG("sffsdr_fpga_remove()");
++ sffsdr_fpga_cleanup();
++
++ return 0;
++}
++
++static struct platform_driver sffsdr_fpga_platform_driver = {
++ .driver = {
++ .name = MODULE_NAME,
++ .owner = THIS_MODULE,
++ },
++ .remove = sffsdr_fpga_remove,
++};
++
++static int __init sffsdr_fpga_init(void)
++{
++ int res;
++
++ DBGMSG("sffsdr_fpga_init()");
++
++ res = platform_driver_probe(&sffsdr_fpga_platform_driver,
++ sffsdr_fpga_probe);
++ if (res) {
++ DBGMSG("platform_driver_probe() failed");
++ return res;
++ }
++
++ return 0;
++}
++module_init(sffsdr_fpga_init);
++
++static void __exit sffsdr_fpga_exit(void)
++{
++ DBGMSG("sffsdr_fpga_exit()");
++ platform_driver_unregister(&sffsdr_fpga_platform_driver);
++}
++module_exit(sffsdr_fpga_exit);
++
++MODULE_AUTHOR("Hugo Villeneuve <hvilleneuve@lyrtech.com>");
++MODULE_DESCRIPTION("Lyrtech SFFSDR SX-35 FPGA driver");
++MODULE_LICENSE("GPL");
+diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c
+index 0d83cb0..aee4472 100644
+--- a/arch/arm/mach-davinci/board-sffsdr.c
++++ b/arch/arm/mach-davinci/board-sffsdr.c
+@@ -5,8 +5,7 @@
+ * Copyright (C) 2008 Lyrtech <www.lyrtech.com>
+ *
+ * Based on DV-EVM platform, original copyright follows:
+- *
+- * Copyright (C) 2007 MontaVista Software, Inc.
++ * Copyright (C) 2007 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
+@@ -29,7 +28,6 @@
+ #include <linux/dma-mapping.h>
+ #include <linux/platform_device.h>
+ #include <linux/gpio.h>
+-
+ #include <linux/i2c.h>
+ #include <linux/i2c/at24.h>
+ #include <linux/etherdevice.h>
+@@ -38,10 +36,10 @@
+ #include <linux/mtd/partitions.h>
+ #include <linux/mtd/physmap.h>
+ #include <linux/io.h>
++#include <linux/fpgadl.h>
+
+ #include <asm/setup.h>
+ #include <asm/mach-types.h>
+-
+ #include <asm/mach/arch.h>
+ #include <asm/mach/map.h>
+ #include <asm/mach/flash.h>
+@@ -51,11 +49,28 @@
+ #include <mach/emac.h>
+ #include <mach/i2c.h>
+ #include <mach/serial.h>
++#include <mach/mmc.h>
+ #include <mach/psc.h>
+ #include <mach/mux.h>
++#include <mach/nand.h>
++#include <mach/mmc.h>
++#include <mach/sffsdr-lyrvpfe.h>
++
++#define XC4VSX35_PAYLOAD_SIZE (1707240)
++
++#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e00000
++#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
++
++#define DAVINCI_VPSS_REGS_BASE 0x01C70000
++
++#define FPGA_SELECTMAP_BASE 0x04000000
++#define FPGA_SFFSDR_REGS_BASE 0x04008000
++
++/* DDR2 memory is 256 Mbytes */
++#define DDR2_BASE 0x80000000
+
+-#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e00000
+-#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
++#define SFFSDR_MMC_CD_PIN GPIO(51)
++#define SFFSDR_MMC_RO_PIN GPIO(50)
+
+ struct mtd_partition davinci_sffsdr_nandflash_partition[] = {
+ /* U-Boot Environment: Block 0
+@@ -78,9 +93,10 @@ struct mtd_partition davinci_sffsdr_nandflash_partition[] = {
+ },
+ };
+
+-static struct flash_platform_data davinci_sffsdr_nandflash_data = {
++static struct davinci_nand_pdata davinci_sffsdr_nandflash_data = {
+ .parts = davinci_sffsdr_nandflash_partition,
+ .nr_parts = ARRAY_SIZE(davinci_sffsdr_nandflash_partition),
++ .ecc_mode = NAND_ECC_HW,
+ };
+
+ static struct resource davinci_sffsdr_nandflash_resource[] = {
+@@ -105,9 +121,6 @@ static struct platform_device davinci_sffsdr_nandflash_device = {
+ .resource = davinci_sffsdr_nandflash_resource,
+ };
+
+-/* Get Ethernet address from kernel boot params */
+-static u8 davinci_sffsdr_mac_addr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+-
+ static struct at24_platform_data eeprom_info = {
+ .byte_len = (64*1024) / 8,
+ .page_size = 32,
+@@ -137,12 +150,126 @@ static void __init sffsdr_init_i2c(void)
+ i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
+ }
+
++static int sffsdr_mmc_get_cd(int module)
++{
++ return gpio_get_value(SFFSDR_MMC_CD_PIN);
++}
++
++static int sffsdr_mmc_get_ro(int module)
++{
++ return gpio_get_value(SFFSDR_MMC_RO_PIN);
++}
++
++static struct davinci_mmc_config sffsdr_mmc_config = {
++ .get_cd = sffsdr_mmc_get_cd,
++ .get_ro = sffsdr_mmc_get_ro,
++ .wires = 4
++};
++
++/*
++ * The FPGA is loaded using the SelectMAP mode through
++ * the EMIF interface and some dedicated control signals:
++ *
++ * FPGA DM6446
++ * --------------------
++ * PROGRAM_B GPIO37
++ * DONE GPIO39
++ * INIT GPIO40
++ * DOUT_BUSY GPIO42 (Not used)
++ * CS_B EMIF_A13 OR CS3n
++ */
++static struct fpgadl_pdata_t fpgadl_par_pdata = {
++ .fpga_family = FPGA_FAMILY_XILINX_XC4V,
++ .payload_full_size = XC4VSX35_PAYLOAD_SIZE,
++ .program_b = GPIO(37),
++ .done = GPIO(39),
++ .init_b = GPIO(40),
++ .bitstream_name = "fpga.bit",
++ .check_init_low = 0,
++};
++
++/* FPGA physical EMIF register resources. */
++static struct resource davinci_fpgadl_par_resources[] = {
++ {
++ .name = "selectmap",
++ .start = FPGA_SELECTMAP_BASE,
++ .end = FPGA_SELECTMAP_BASE + 4 - 1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device davinci_fpgadl_par_device = {
++ .name = "fpgadl_par", /* Name of driver */
++ .id = 0,
++ .dev = {
++ .platform_data = &fpgadl_par_pdata,
++ },
++ .num_resources = ARRAY_SIZE(davinci_fpgadl_par_resources),
++ .resource = davinci_fpgadl_par_resources,
++};
++
++/* SFFSDR specific FPGA registers. */
++static struct resource davinci_sffsdr_fpga_resources[] = {
++ {
++ .name = "sffsdr_regs",
++ .start = FPGA_SFFSDR_REGS_BASE,
++ .end = FPGA_SFFSDR_REGS_BASE + SZ_1K - 1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device davinci_sffsdr_fpga_device = {
++ .name = "sffsdr_fpga", /* Name of driver */
++ .id = -1, /* Only one instance = -1 */
++ .num_resources = ARRAY_SIZE(davinci_sffsdr_fpga_resources),
++ .resource = davinci_sffsdr_fpga_resources,
++};
++
++static struct lyrvpfe_platform_data lyrvpfe_pdata = {
++ /*
++ * GPIO(1) for DSP to FPGA (VPBE)
++ * GPIO(0) for FPGA to DSP (VPFE)
++ */
++ .ready_gpio = GPIO(0), /* DSP to FPGA (VPFE) */
++};
++
++static struct resource lyrvpfe_resources[] = {
++ {
++ .name = "regs",
++ .start = DAVINCI_VPSS_REGS_BASE,
++ .end = DAVINCI_VPSS_REGS_BASE + SZ_16K - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ {
++ .name = "irq",
++ .start = IRQ_VDINT0,
++ .end = IRQ_VDINT0,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device lyrvpfe_pdev = {
++ .name = "lyrvpfe",
++ .id = 0,
++ .dev = {
++ .platform_data = &lyrvpfe_pdata,
++ },
++ .resource = lyrvpfe_resources,
++ .num_resources = ARRAY_SIZE(lyrvpfe_resources),
++};
++
+ static struct platform_device *davinci_sffsdr_devices[] __initdata = {
+- &davinci_sffsdr_nandflash_device,
++ &davinci_fpgadl_par_device, /* Bitstream loading - parallel */
++ &davinci_sffsdr_fpga_device, /* Application functionality */
++ &lyrvpfe_pdev,
+ };
+
++/*
++ * UART0: console
++ * UART1: FPGA
++ */
+ static struct davinci_uart_config uart_config __initdata = {
+- .enabled_uarts = (1 << 0),
++ .enabled_uarts = DAVINCI_UART0_ENA | DAVINCI_UART1_ENA,
+ };
+
+ static void __init davinci_sffsdr_map_io(void)
+@@ -151,39 +278,37 @@ static void __init davinci_sffsdr_map_io(void)
+ dm644x_init();
+ }
+
+-static __init void davinci_sffsdr_init(void)
++static void __init davinci_sffsdr_init(void)
+ {
++ gpio_request(SFFSDR_MMC_CD_PIN, "MMC CD");
++ gpio_direction_input(SFFSDR_MMC_CD_PIN);
++ gpio_request(SFFSDR_MMC_RO_PIN, "MMC RO");
++ gpio_direction_input(SFFSDR_MMC_RO_PIN);
++
++ /* Turn UART1 MUX ON. */
++ davinci_cfg_reg(DM644X_UART1);
++
+ platform_add_devices(davinci_sffsdr_devices,
+ ARRAY_SIZE(davinci_sffsdr_devices));
+ sffsdr_init_i2c();
+- davinci_serial_init(&uart_config);
+- davinci_init_emac(davinci_sffsdr_mac_addr);
+- setup_usb(0, 0); /* We support only peripheral mode. */
+
+- /* mux VLYNQ pins */
+- davinci_cfg_reg(DM644X_VLYNQEN);
+- davinci_cfg_reg(DM644X_VLYNQWD);
+-}
++ davinci_serial_init(&uart_config);
+
+-static int davinci_cpmac_eth_setup(char *str)
+-{
+- int i;
++#if defined(CONFIG_MTD_NAND_DAVINCI) || \
++ defined(CONFIG_MTD_NAND_DAVINCI_MODULE)
++ davinci_cfg_reg(DM644X_HPIEN_DISABLE);
++ davinci_cfg_reg(DM644X_ATAEN_DISABLE);
++ platform_device_register(&davinci_sffsdr_nandflash_device);
++#endif
+
+- if (str == NULL)
+- return 0;
++ davinci_setup_mmc(0, &sffsdr_mmc_config);
+
+- /* Conversion of a MAC address from a string (AA:BB:CC:DD:EE:FF)
+- * to a 6 bytes array. */
+- for (i = 0; i < 6; i++)
+- davinci_sffsdr_mac_addr[i] = simple_strtol(&str[i*3],
+- (char **)NULL, 16);
++ davinci_init_emac(NULL);
+
+- return 1;
++ setup_usb(0, 0); /* We support only peripheral mode. */
+ }
+-/* Get MAC address from kernel boot parameter eth=AA:BB:CC:DD:EE:FF */
+-__setup("eth=", davinci_cpmac_eth_setup);
+
+-static __init void davinci_sffsdr_irq_init(void)
++static void __init davinci_sffsdr_irq_init(void)
+ {
+ davinci_irq_init();
+ }
+@@ -195,6 +320,6 @@ MACHINE_START(SFFSDR, "Lyrtech SFFSDR")
+ .boot_params = (DAVINCI_DDR_BASE + 0x100),
+ .map_io = davinci_sffsdr_map_io,
+ .init_irq = davinci_sffsdr_irq_init,
+- .timer = &davinci_timer,
+ .init_machine = davinci_sffsdr_init,
++ .timer = &davinci_timer,
+ MACHINE_END
+diff --git a/arch/arm/mach-davinci/include/mach/sffsdr-fpga.h b/arch/arm/mach-davinci/include/mach/sffsdr-fpga.h
+new file mode 100644
+index 0000000..6607ac0
+--- /dev/null
++++ b/arch/arm/mach-davinci/include/mach/sffsdr-fpga.h
+@@ -0,0 +1,54 @@
++/*
++ * sffsdr_fpga.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.
++ *
++ * 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.
++ */
++
++#ifndef __SFFSDR_FPGA_H
++#define __SFFSDR_FPGA_H
++
++#define SFFSDR_FPGA_REVISION 0x000
++#define SFFSDR_FPGA_GLOBAL_CTRL 0x040
++#define SFFSDR_FPGA_LED_CONTROL 0x300
++#define SFFSDR_FPGA_PLL_CODEC 0x800
++
++/* VPSS configuration register */
++#define SFFSDR_FPGA_VPSS_CONTROL 0xA00
++
++/* VPSS, VPBE packet size configuration register */
++#define SFFSDR_FPGA_VPSS_FROM_DSP_FIFO 0xA40
++
++/* VPSS, VPFE packet size configuration register */
++#define SFFSDR_FPGA_VPSS_TO_DSP_FIFO 0xA80
++
++/* VPSS, VPFE number of lines configuration register */
++#define SFFSDR_FPGA_VPSS_LINES_PER_FRAME 0xAC0
++
++#define SFFSDR_FPGA_CUSTOM_REG0_LSB 0xC00
++#define SFFSDR_FPGA_CUSTOM_REG0_MSB 0xC20
++
++u16 sffsdr_fpga_regread(int offset);
++
++void sffsdr_fpga_regwrite(int offset, u16 value);
++
++int sffsdr_fpga_set_codec_fs(int fs);
++
++#endif /* __SFFSDR_FPGA_H */
+--
+1.5.4.5
+
diff --git a/packages/linux/linux-davinci/davinci-sffsdr/defconfig b/packages/linux/linux-davinci/davinci-sffsdr/defconfig
index 8f53af1a17..91c01f9ade 100644
--- a/packages/linux/linux-davinci/davinci-sffsdr/defconfig
+++ b/packages/linux/linux-davinci/davinci-sffsdr/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.26-rc5-davinci1
-# Sun Jun 22 19:30:45 2008
+# Linux kernel version: 2.6.28-davinci1
+# Fri Mar 6 12:29:19 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -12,6 +12,7 @@ CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -21,8 +22,8 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -41,35 +42,25 @@ CONFIG_POSIX_MQUEUE=y
# 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_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
-CONFIG_GROUP_SCHED=y
-CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_RT_GROUP_SCHED is not set
-CONFIG_USER_SCHED=y
-# CONFIG_CGROUP_SCHED is not set
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
# CONFIG_RELAY is not set
# CONFIG_NAMESPACES is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
+# 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_SYSCTL_SYSCALL_CHECK=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
+# CONFIG_UID16 is not set
+# 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_COMPAT_BRK=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_COMPAT_BRK is not set
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
@@ -77,28 +68,28 @@ CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SHMEM is not set
+CONFIG_AIO=y
+# CONFIG_VM_EVENT_COUNTERS is not set
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
-# CONFIG_HAVE_DMA_ATTRS is not set
-CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
+CONFIG_TINY_SHMEM=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-CONFIG_MODULE_FORCE_LOAD=y
+# CONFIG_MODULE_FORCE_LOAD is not set
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
CONFIG_BLOCK=y
@@ -106,20 +97,22 @@ CONFIG_BLOCK=y
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set
# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
# CONFIG_IOSCHED_CFQ is not set
-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"
CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
#
# System Type
@@ -131,7 +124,6 @@ CONFIG_CLASSIC_RCU=y
# 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
@@ -145,8 +137,11 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
@@ -158,7 +153,7 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_LH7A40X is not set
CONFIG_ARCH_DAVINCI=y
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM7X00A is not set
+# CONFIG_ARCH_MSM is not set
#
# Boot options
@@ -175,21 +170,20 @@ CONFIG_ARCH_DAVINCI=y
#
# DaVinci Core Type
#
-CONFIG_ARCH_DAVINCI644x=y
+CONFIG_ARCH_DAVINCI_DM644x=y
+# CONFIG_ARCH_DAVINCI_DM646x is not set
+# CONFIG_ARCH_DAVINCI_DM355 is not set
#
# DaVinci Board Type
#
# CONFIG_MACH_DAVINCI_EVM is not set
CONFIG_MACH_SFFSDR=y
-CONFIG_DAVINCI_I2C_EXPANDER=y
-# CONFIG_DAVINCI_MCBSP is not set
+CONFIG_SFFSDR_FPGA=m
+CONFIG_DAVINCI_MUX=y
+# CONFIG_DAVINCI_MUX_DEBUG is not set
+# CONFIG_DAVINCI_MUX_WARNINGS is not set
# CONFIG_DAVINCI_RESET_CLOCKS is not set
-# CONFIG_DAVINCI_BOOT_TAG is not set
-
-#
-# DaVinci Options
-#
#
# Processor Type
@@ -208,7 +202,7 @@ CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
-CONFIG_ARM_THUMB=y
+# 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
@@ -225,31 +219,35 @@ CONFIG_ARM_THUMB=y
#
# Kernel Features
#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
# CONFIG_PREEMPT is not set
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_SPARSEMEM_VMEMMAP_ENABLE is not set
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
-CONFIG_LEDS=y
-# CONFIG_LEDS_CPU is not set
+CONFIG_UNEVICTABLE_LRU=y
+# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y
#
@@ -257,11 +255,16 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=" debug "
+CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
# CONFIG_KEXEC is not set
#
+# CPU Power Management
+#
+# CONFIG_CPU_IDLE is not set
+
+#
# Floating point emulation
#
@@ -274,6 +277,8 @@ CONFIG_CMDLINE=" debug "
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
@@ -282,10 +287,6 @@ CONFIG_BINFMT_ELF=y
#
# CONFIG_PM is not set
CONFIG_ARCH_SUSPEND_POSSIBLE=y
-
-#
-# Networking
-#
CONFIG_NET=y
#
@@ -294,11 +295,6 @@ CONFIG_NET=y
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_XFRM_STATISTICS is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -316,10 +312,10 @@ CONFIG_IP_PNP_DHCP=y
# 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_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_LRO is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
@@ -327,56 +323,15 @@ CONFIG_INET_TCP_DIAG=y
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 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_NDISC_NODETYPE=y
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
+# CONFIG_IPV6 is not set
# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# 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_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES 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_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
@@ -397,14 +352,8 @@ CONFIG_NETFILTER_ADVANCED=y
# 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_PHONET is not set
+# CONFIG_WIRELESS is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
@@ -418,7 +367,9 @@ CONFIG_NETFILTER_ADVANCED=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=m
+# CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -436,8 +387,9 @@ CONFIG_MTD_PARTITIONS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=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
@@ -488,13 +440,12 @@ 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_GPIO 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_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
CONFIG_MTD_NAND_DAVINCI=y
-# CONFIG_NAND_FLASH_HW_ECC is not set
# CONFIG_MTD_ONENAND is not set
#
@@ -504,17 +455,18 @@ CONFIG_MTD_NAND_DAVINCI=y
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# 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=y
-CONFIG_BLK_DEV_RAM_COUNT=1
-CONFIG_BLK_DEV_RAM_SIZE=32768
-# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_MISC_DEVICES is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_FPGADL=m
+CONFIG_FPGADL_PAR=m
+# CONFIG_C2PORT is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -522,63 +474,50 @@ CONFIG_HAVE_IDE=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA 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
-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_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
# CONFIG_ATA is not set
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
+# CONFIG_TUN is not set
# CONFIG_VETH is not set
-# CONFIG_PHYLIB is not set
+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=y
+# 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_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
CONFIG_NET_ETHERNET=y
-# CONFIG_MII is not set
+CONFIG_MII=y
# CONFIG_AX88796 is not set
# CONFIG_SMC91X is not set
CONFIG_TI_DAVINCI_EMAC=y
# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
# CONFIG_B44 is not set
# CONFIG_NETDEV_1000 is not set
# CONFIG_NETDEV_10000 is not set
@@ -589,99 +528,32 @@ CONFIG_TI_DAVINCI_EMAC=y
# CONFIG_WLAN_PRE80211 is not set
# CONFIG_WLAN_80211 is not set
# CONFIG_IWLWIFI_LEDS 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_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=m
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
+# CONFIG_PPP is not set
# CONFIG_SLIP is not set
-CONFIG_SLHC=m
CONFIG_NETCONSOLE=y
# CONFIG_NETCONSOLE_DYNAMIC is not set
CONFIG_NETPOLL=y
-CONFIG_NETPOLL_TRAP=y
+# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
# 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=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_EVDEV=m
-CONFIG_INPUT_EVBUG=m
-
-#
-# 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=m
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_LM8323 is not set
-CONFIG_KEYBOARD_GPIO=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_FUJITSU 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_TSC2005 is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_INPUT_MISC is not set
+# CONFIG_INPUT 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_SERIO is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
-CONFIG_VT=y
-# CONFIG_VT_CONSOLE is not set
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
+# CONFIG_VT is not set
+# CONFIG_DEVKMEM is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -699,147 +571,117 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
+# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
+CONFIG_LYRTECH_VPSS=y
+CONFIG_LYRTECH_VPFE=m
+# CONFIG_LYRTECH_VPBE is not set
+CONFIG_LYRVPSS_DEBUG=y
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
#
# I2C Hardware Bus support
#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
CONFIG_I2C_DAVINCI=y
# CONFIG_I2C_GPIO is not set
# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_TPS65010 is not set
-CONFIG_SENSORS_TLV320AIC23=m
-CONFIG_SENSORS_TLV320AIC33=m
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_LP5521 is not set
-CONFIG_GPIOEXPANDER_DAVINCI=y
# 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_SPI is not set
-CONFIG_HAVE_GPIO_LIB=y
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
#
-# GPIO Support
+# Memory mapped GPIO expanders:
#
-# CONFIG_DEBUG_GPIO is not set
#
# I2C GPIO expanders:
#
+# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
-CONFIG_GPIO_PCF857X=m
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
#
# SPI GPIO expanders:
#
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID 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_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S 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_LM93 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_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 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_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_DAVINCI_WATCHDOG=m
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#
-CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
#
# Multifunction device drivers
#
+# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
#
# Multimedia devices
@@ -869,183 +711,35 @@ CONFIG_SSB_POSSIBLE=y
# Display device support
#
# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-
-#
-# Sound
-#
CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
+# CONFIG_SOUND_OSS_CORE is not set
+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=y
+# 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
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+CONFIG_SND_SOC=m
+CONFIG_SND_DAVINCI_SOC=m
+CONFIG_SND_DAVINCI_SOC_I2S=m
+CONFIG_SND_DAVINCI_SOC_SFFSDR=m
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_PCM3008=m
# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-CONFIG_USB_MUSB_HDRC=m
-CONFIG_USB_MUSB_SOC=y
-
-#
-# DaVinci 644x USB support
-#
-# 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_MUSB_PIO_ONLY=y
-CONFIG_USB_MUSB_LOGLEVEL=0
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM 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_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB 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
-#
-# 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
-# CONFIG_USB_ISIGHTFW is not set
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
-CONFIG_USB_GADGET_DEBUG_FILES=y
-# CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_M66592 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_S3C2410 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 is not set
-CONFIG_USB_G_PRINTER=m
+# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
#
-# MMC/SD Card Drivers
+# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_BOUNCE=y
@@ -1053,73 +747,17 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_TEST is not set
#
-# MMC/SD Host Controller Drivers
+# MMC/SD/SDIO Host Controller Drivers
#
+# CONFIG_MMC_SDHCI is not set
CONFIG_MMC_DAVINCI=m
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_GPIO=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_NEW_LEDS 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=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 is not set
-# CONFIG_RTC_DRV_DS1374 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
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
# CONFIG_UIO is not set
#
@@ -1132,21 +770,21 @@ 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_EXT4_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_FILE_LOCKING=y
# CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set
-CONFIG_DNOTIFY=y
+# CONFIG_DNOTIFY is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
+# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
@@ -1159,7 +797,7 @@ CONFIG_AUTOFS4_FS=m
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
+# CONFIG_MSDOS_FS is not set
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
@@ -1170,6 +808,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
#
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
@@ -1200,6 +839,7 @@ CONFIG_JFFS2_RTIME=y
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
@@ -1210,21 +850,16 @@ CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_SUNRPC_REGISTER_V4 is not set
# 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
@@ -1290,7 +925,7 @@ CONFIG_NLS_ISO8859_1=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=m
+# CONFIG_NLS_UTF8 is not set
# CONFIG_DLM is not set
#
@@ -1302,14 +937,16 @@ CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
+# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_SCHED_DEBUG=y
# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
@@ -1322,36 +959,56 @@ CONFIG_TIMER_STATS=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_BUGVERBOSE is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_DEBUG_LL is not set
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_CRYPTO=y
#
# Crypto core or helper
#
+# CONFIG_CRYPTO_FIPS is not set
# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_CRYPTD is not set
@@ -1389,6 +1046,10 @@ CONFIG_CRYPTO=y
# CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
# CONFIG_CRYPTO_SHA1 is not set
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
@@ -1419,16 +1080,20 @@ CONFIG_CRYPTO=y
#
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_HW is not set
#
# Library routines
#
CONFIG_BITREVERSE=y
-# CONFIG_GENERIC_FIND_FIRST_BIT is not set
-# CONFIG_GENERIC_FIND_NEXT_BIT is not set
-CONFIG_CRC_CCITT=m
+# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
diff --git a/packages/linux/linux-davinci_2.6.25.bb b/packages/linux/linux-davinci_2.6.25.bb
index 6560fc9fbb..97fd0d5210 100644
--- a/packages/linux/linux-davinci_2.6.25.bb
+++ b/packages/linux/linux-davinci_2.6.25.bb
@@ -1,18 +1,13 @@
require linux-omap.inc
-# uncomment the below to get the latest and greatest and avoid a full reparse
-# or override in it local.conf like this: DAVINCI_SRCREV_pn-linux-davinci = "${@bb.fetch.get_srcrev(d)}"
-#DAVINCI_SRCREV = "${@bb.fetch.get_srcrev(d)}"
-DAVINCI_SRCREV ?= "f5691bc8f65a08a6cb9900a5c7099a36b2b9b7a7"
-SRCREV = "${DAVINCI_SRCREV}"
+SRCREV = "f5691bc8f65a08a6cb9900a5c7099a36b2b9b7a7"
PV = "2.6.25"
-#PV = "2.6.25+2.6.26-rc0+git${SRCREV}"
-PR = "r2"
+PR = "r3"
COMPATIBLE_MACHINE = "(davinci-dvevm|davinci-sffsdr)"
-SRC_URI = "git://source.mvista.com/git/linux-davinci-2.6.git;protocol=git \
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git;protocol=git \
file://8250_davinci.patch;patch=1 \
file://defconfig"
diff --git a/packages/linux/linux-davinci_2.6.27.bb b/packages/linux/linux-davinci_2.6.27.bb
index 1d2cbf539d..9e50f982db 100644
--- a/packages/linux/linux-davinci_2.6.27.bb
+++ b/packages/linux/linux-davinci_2.6.27.bb
@@ -1,5 +1,7 @@
require linux-omap.inc
+DEFAULT_PREFERENCE = "-1"
+
# uncomment the below to get the latest and greatest and avoid a full reparse
# or override in it local.conf like this: DAVINCI_SRCREV_pn-linux-davinci = "${@bb.fetch.get_srcrev(d)}"
#DAVINCI_SRCREV = "${@bb.fetch.get_srcrev(d)}"
diff --git a/packages/linux/linux-davinci_2.6.x+git-davinci.bb b/packages/linux/linux-davinci_2.6.x+git-davinci.bb
deleted file mode 100644
index db85e4f647..0000000000
--- a/packages/linux/linux-davinci_2.6.x+git-davinci.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require linux-omap.inc
-
-# uncomment the below to get the latest and greatest and avoid a full reparse
-# or override in it local.conf like this: DAVINCI_SRCREV_pn-linux-davinci = "${@bb.fetch.get_srcrev(d)}"
-#DAVINCI_SRCREV = "${@bb.fetch.get_srcrev(d)}"
-DAVINCI_SRCREV ?= "f5691bc8f65a08a6cb9900a5c7099a36b2b9b7a7"
-SRCREV = "${DAVINCI_SRCREV}"
-
-DEFAULT_PREFERENCE = "-1"
-
-PV = "2.6.27+2.6.28-rc6+gitr${SRCREV}"
-
-COMPATIBLE_MACHINE = "(davinci-dvevm|davinci-sffsdr)"
-
-SRC_URI = "git://source.mvista.com/git/linux-davinci-2.6.git;protocol=git \
- file://defconfig"
-
-S = "${WORKDIR}/git"
diff --git a/packages/linux/linux-davinci_git.bb b/packages/linux/linux-davinci_git.bb
new file mode 100644
index 0000000000..ef72b038c9
--- /dev/null
+++ b/packages/linux/linux-davinci_git.bb
@@ -0,0 +1,32 @@
+require linux.inc
+
+DESCRIPTION = "Linux kernel for Davinci processors"
+KERNEL_IMAGETYPE = "uImage"
+
+COMPATIBLE_MACHINE = "(davinci-dvevm|davinci-sffsdr)"
+
+#DEFAULT_PREFERENCE = "-1"
+
+SRCREV = "0fc192ac07c977ad6f14333651b53096a6027bc6"
+
+PV = "2.6.27+2.6.28-rc6+gitr${SRCREV}"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git;protocol=git \
+ file://defconfig"
+
+SRC_URI_append_davinci-sffsdr = " \
+ file://0001-USB-musb-cppi-bugfixes.patch;patch=1 \
+ file://0002-ARM-Mark-unsupported-syscalls-as-IGNORE.patch;patch=1 \
+ file://0003-Add-macros-for-enabling-a-UART.patch;patch=1 \
+ file://0004-Davinci-Enable-MAC-address-to-be-specified-on-kerne.patch;patch=1 \
+ file://0005-Add-DAS-Mini-DAS-and-AFE-USB-machine-types.patch;patch=1 \
+ file://0006-ALSA-ASoC-DaVinci-Fix-SFFSDR-compilation-error.patch;patch=1 \
+ file://0007-ALSA-ASoC-Davinci-Fix-SFFSDR-FPGA-module-codec-FS.patch;patch=1 \
+ file://0008-ALSA-ASoC-Davinci-Fix-incorrect-machine-type-for.patch;patch=1 \
+ file://0009-sound-ASoC-Fix-DaVinci-module-unload-error.patch;patch=1 \
+ file://0010-Add-generic-FPGA-bitstream-loader-driver.patch;patch=1 \
+ file://0011-Add-lyrvpss-example-driver-for-the-SFFSDR-board.patch;patch=1 \
+ file://0012-Update-SFFSDR-to-support-FPGA-and-lyrvpss-drivers.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/git"
diff --git a/packages/linux/linux-ezx-2.6.21/a1200/defconfig b/packages/linux/linux-ezx-2.6.21/a1200/defconfig
deleted file mode 100755
index 074d70244b..0000000000
--- a/packages/linux/linux-ezx-2.6.21/a1200/defconfig
+++ /dev/null
@@ -1,1586 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Sat Sep 15 18:27: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_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION="-ezxdev"
-# 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_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 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_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=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=y
-
-#
-# 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=y
-CONFIG_EZX_PCAP=y
-CONFIG_EZX_EOC=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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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_A120 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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=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_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=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_EZX=N
-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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=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=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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.21/a780/defconfig b/packages/linux/linux-ezx-2.6.21/a780/defconfig
deleted file mode 100755
index 30f9f72174..0000000000
--- a/packages/linux/linux-ezx-2.6.21/a780/defconfig
+++ /dev/null
@@ -1,1590 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Fri Sep 21 18:10:00 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=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_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 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_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=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=y
-
-#
-# 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_EOC is not set
-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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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 is not set
-CONFIG_MTD_EZX_A780_ALTERNATE=y
-# CONFIG_MTD_EZX_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=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=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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.21/e680/defconfig b/packages/linux/linux-ezx-2.6.21/e680/defconfig
deleted file mode 100755
index 9a30ce673f..0000000000
--- a/packages/linux/linux-ezx-2.6.21/e680/defconfig
+++ /dev/null
@@ -1,1584 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Sun Sep 9 16:51:47 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=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_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 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_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=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=y
-
-#
-# 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_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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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 is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=n
-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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX
deleted file mode 100755
index c6d90c61b9..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX
+++ /dev/null
@@ -1,77 +0,0 @@
-# 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 e6 e2
-
-CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi-
-QUILT_PATCHES ?= patches
-
-LV ?= ezxdev # replace LOCALVERSION string
-J ?= 2 # simultaneous jobs
-SIG ?= 0 # BOOL sign md5sums file
-
-DATE = $(shell date +%Y%m%d)
-DEPLOY_SERVER ?= people.openezx.org
-DEPLOY_DIR ?= public_html/images/$(DATE)/
-
-all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz)
-
-zImages: $(foreach p, $(PHONES), zImage-$(p))
-
-modules: $(foreach p, $(PHONES), modules-$(p).tar.gz)
-
-config: $(foreach p, $(PHONES), config-$(p))
-
-config-%: $(QUILT_PATCHES)/defconfig-%
- cp $< .config
- make ARCH=arm oldconfig
- cp .config $<
-
-deploy: release
- ssh $(DEPLOY_SERVER) \
- mkdir -p $(DEPLOY_DIR)
- scp ezxrelease-$(DATE).tar $(DEPLOY_SERVER):$(DEPLOY_DIR)
- ssh $(DEPLOY_SERVER) \
- cd $(DEPLOY_DIR)\; \
- tar -xf ezxrelease-$(DATE).tar\; \
- rm -f ezxrelease-$(DATE).tar
-
-release: $(foreach p, $(PHONES), tag-$(p))
- cp md5sums.tmp md5sums
- test "$(SIG)" = "1" && \
- cat md5sums.tmp | gpg --clearsign > md5sums \
- ; echo
- 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) && \
- mv zImage-$$p zImage-$$tag-$$p && \
- mv 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-%
- cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
- make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage
- mv arch/arm/boot/zImage $@
-
-modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-%
- cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
- -find . -name "*.ko" -print0 | xargs -r0 rm
- mkdir -p Makefile.OpenEZX-tmp/$@
- make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
- make -j1 ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \
- INSTALL_MOD_PATH=Makefile.OpenEZX-tmp/$@ modules_install
- tar -C Makefile.OpenEZX-tmp/$@ -czf $@ .
- rm -rf Makefile.OpenEZX-tmp/
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a1200-eoc.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-eoc.patch
deleted file mode 100644
index 77aec1c629..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a1200-eoc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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-09-24 20:14:54.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-24 20:15:18.000000000 -0300
-@@ -203,8 +203,15 @@
- },
- };
-
-+
-+struct platform_device a1200_eoc_device = {
-+ .name = "ezx-eoc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
-+ &a1200_eoc_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a1200-flip.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-flip.patch
deleted file mode 100644
index fc51773205..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a1200-flip.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-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-09-25 02:00:53.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:01:06.000000000 -0300
-@@ -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>
-@@ -292,11 +293,34 @@
- .num_resources = ARRAY_SIZE(pcap_ts_resources),
- .resource = pcap_ts_resources,
- };
-+/* Flip */
-+#undef GPIO_FLIP_PIN
-+#define GPIO_FLIP_PIN 15 /* FIXME */
-+static struct gpio_keys_button a1200flip_buttons[] = {
-+ [0] = {
-+ .keycode = KEY_SLEEP,
-+ .gpio = GPIO_FLIP_PIN,
-+ .desc = "A1200 flip",
-+ },
-+};
-+
-+static struct gpio_keys_platform_data a1200flip_platform_data = {
-+ .buttons = a1200flip_buttons,
-+ .nbuttons = 1,
-+};
-+static struct platform_device a1200flip_device = {
-+ .name = "gpio-keys",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &a1200flip_platform_data,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
- &pcap_ts_device,
-+ &a1200flip_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a1200-kbd.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-kbd.patch
deleted file mode 100644
index 5771f6d359..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a1200-kbd.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-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-09-25 00:03:01.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:40.000000000 -0300
-@@ -15,6 +15,7 @@
- #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>
-@@ -23,11 +24,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -209,6 +212,63 @@
- .id = -1,
- };
-
-+/* Keypad */
-+static unsigned char a1200_keycode[] = {
-+ /* row 0 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 1 */
-+ KEY_RIGHT, KEY_DOWN, KEY_KPENTER, KEY_UP, KEY_LEFT,
-+ /* row 2 */
-+ KEY_PAGEDOWN, KEY_CAMERA, KEY_RECORD, KEY_HOME, KEY_PAGEUP,
-+ /* row 3 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 4 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 5 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_MENU, KEY_RESERVED, KEY_RESERVED,
-+};
-+/*
-+static unsigned char a1200_direct_keycode[] = {
-+ KEY_CAMERA,
-+};
-+*/
-+
-+static int a1200_kbd_init(void)
-+{
-+ 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(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
-+ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
-+ 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> */
-+ pxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<5> */
-+
-+ PKWR = 0xEC000;
-+ PGSR3 |= 0x1F80;
-+ return 0;
-+}
-+
-+static struct pxakbd_platform_data a1200_kbd_platform_data = {
-+ .init = &a1200_kbd_init,
-+ .scan_interval = HZ/40,
-+ .matrix = {
-+ .keycode = a1200_keycode,
-+ .cols = 6,
-+ .rows = 5,
-+ },
-+/*
-+ .direct = {
-+ .keycode = a1200_direct_keycode,
-+ .num = 1,
-+ },
-+*/
-+};
-+
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
-@@ -218,6 +278,7 @@
- {
- set_pxa_fb_info(&a1200_fb_info);
- pxa_set_mci_info(&a1200_mci_platform_data);
-+ pxa_set_kbd_info(&a1200_kbd_platform_data);
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
- }
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
deleted file mode 100755
index 042254b115..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-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-09-07 11:51:55.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-07 11:54:52.000000000 -0300
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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,
-@@ -118,6 +210,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-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-pcap.patch
deleted file mode 100644
index 8aa1e46d73..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a1200-pcap.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-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-09-07 11:32:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-07 11:51:55.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,70 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init a1200_pcap_init(void)
-+{
-+ /*
-+ * FIXME: this is the PCAP INITIAL STATE.
-+ * most of these writes should NOT be done here
-+ * * voltage regulators, voltage enablers should be set by the
-+ * driver which uses the connected hardware. Otherwise you
-+ * drain power unnecessarily.
-+ * * interrupt related registers should be set by the irq functions
-+ * only. I think that the INT_SEL register selects on which irq
-+ * pin the (ap/bp) the irq goes. This should go on ezx-pcap.c, but
-+ * only if it actually makes any difference.
-+ * * Only power state automatic changes should be done here.
-+ * (*LOWPWR, *STBY, LOWPWR*)
-+ * * I removed some writes which i consider extremelly wrong. And
-+ * which i think will not break anything (they were overwritten
-+ * later anyway).
-+ *
-+ * --WM
-+ */
-+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
-+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
-+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
-+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
-+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data a1200_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_CS_AH | PCAP_MCI_TF,
-+ .clk = 1,
-+ .init = a1200_pcap_init,
-+};
-+
-+static struct resource a1200_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device a1200_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(a1200_pcap_resources),
-+ .resource = a1200_pcap_resources,
-+ .dev = {
-+ .platform_data = &a1200_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &a1200_pcap_device,
- };
-
- static void __init a1200_init(void)
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
deleted file mode 100755
index bf328cd931..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-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-09-25 02:00:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:53.000000000 -0300
-@@ -269,9 +269,34 @@
- };
-
-
-+/* PCAP_TS */
-+struct resource pcap_ts_resources[] = {
-+ [0] = {
-+ .start = EZX_IRQ_ADCDONE,
-+ .end = EZX_IRQ_ADCDONE,
-+ .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,
-+ .dev = {
-+ .parent = &a1200_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
-+ &pcap_ts_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch
deleted file mode 100644
index f6121c6e7f..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-emu.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-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-08-31 23:02:13.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:03:16.000000000 -0300
-@@ -211,8 +211,33 @@
- },
- };
-
-+/* EMU */
-+static struct resource a780_emu_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 a780_emu_device = {
-+ .name = "ezx-emu",
-+ .id = -1,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(a780_emu_resources),
-+ .resource = a780_emu_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
-+ &a780_emu_device,
- };
-
- static void __init a780_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
deleted file mode 100755
index 88f15041db..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-flip.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-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-08-31 23:58:17.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:59:03.000000000 -0300
-@@ -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>
-@@ -311,10 +312,33 @@
- .resource = pcap_ts_resources,
- };
-
-+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 = {
- &a780_pcap_device,
- &a780_emu_device,
- &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
deleted file mode 100755
index d7d114cfed..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-kbd.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-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-08-31 23:03:16.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:05:18.000000000 -0300
-@@ -16,6 +16,7 @@
- #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>
-@@ -24,11 +25,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -235,6 +238,55 @@
- .resource = a780_emu_resources,
- };
-
-+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 = {
- &a780_pcap_device,
- &a780_emu_device,
-@@ -255,6 +307,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
deleted file mode 100755
index e8336d8855..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-leds.patch
+++ /dev/null
@@ -1,187 +0,0 @@
-
-#
-# 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-08-31 22:27:41.000000000 -0300
-+++ linux-2.6.21/drivers/leds/Kconfig 2007-08-31 23:59:27.000000000 -0300
-@@ -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-08-31 22:27:41.000000000 -0300
-+++ linux-2.6.21/drivers/leds/Makefile 2007-08-31 23:59:27.000000000 -0300
-@@ -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-08-31 23:59:27.000000000 -0300
-@@ -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(PCAP_BIT_PERIPH_BL_CTRL0, value & 0x01);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL1, value & 0x02);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL2, value & 0x04);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL3, value & 0x08);
-+ ezx_pcap_bit_set(PCAP_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(PCAP_BIT_PERIPH_BL2_CTRL0, value & 0x01);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL1, value & 0x02);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL2, value & 0x04);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL3, value & 0x08);
-+ ezx_pcap_bit_set(PCAP_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-08-31 23:59:03.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:59:27.000000000 -0300
-@@ -333,12 +333,20 @@
- },
- };
-
-+static struct platform_device a780led_device = {
-+ .name = "a780-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
- &a780_emu_device,
- &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
deleted file mode 100755
index 1238c1cf71..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-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-08-31 23:01:54.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:02:13.000000000 -0300
-@@ -14,6 +14,8 @@
- #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>
-@@ -21,12 +23,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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,
-@@ -137,6 +229,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);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch
deleted file mode 100644
index afb5d9c005..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-pcap.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-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-08-31 22:33:03.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:01:17.000000000 -0300
-@@ -20,6 +20,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -49,7 +50,77 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init a780_pcap_init(void)
-+{
-+ /* initialize PCAP registers */
-+ /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
-+
-+ /* SW1 active in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
-+
-+ /* at SW1 -core voltage to 1.30V */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
-+
-+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
-+
-+ /*
-+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+ * camera for e680
-+ */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
-+
-+ /* set Vc to low power mode when AP sleep */
-+// SSP_PCAP_bit_set(PCAP_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+ /* set VAUX2 to low power mode when AP sleep */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data a780_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_MCI_TF,
-+ .clk = 1,
-+ .init = a780_pcap_init,
-+};
-+
-+static struct resource a780_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device a780_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(a780_pcap_resources),
-+ .resource = a780_pcap_resources,
-+ .dev = {
-+ .platform_data = &a780_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &a780_pcap_device,
- };
-
- static void __init a780_init(void)
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
deleted file mode 100755
index e7ca3c106a..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-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-08-31 23:05:18.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:06:53.000000000 -0300
-@@ -287,9 +287,34 @@
- },
- };
-
-+/* 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,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
- &a780_emu_device,
-+ &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
deleted file mode 100755
index aa903feea7..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/a780-vibrator.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Index: linux-2.6.21/drivers/leds/leds-a780.c
-===================================================================
---- linux-2.6.21.orig/drivers/leds/leds-a780.c 2007-09-01 00:15:03.000000000 -0300
-+++ linux-2.6.21/drivers/leds/leds-a780.c 2007-09-01 00:23:39.000000000 -0300
-@@ -40,6 +40,17 @@
- ezx_pcap_bit_set(PCAP_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 );
-+ ezx_pcap_vibrator_level(value-1);
-+ if (value == 0)
-+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 0);
-+ else
-+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 1);
-+}
-+
- static struct led_classdev a780_main_led = {
- .name = "a780:main",
- .default_trigger = "none",
-@@ -52,11 +63,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 +82,7 @@
- {
- led_classdev_resume(&a780_main_led);
- led_classdev_resume(&a780_aux_led);
-+ led_classdev_resume(&a780_vibrator);
- return 0;
- }
- #endif
-@@ -77,8 +96,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 +114,7 @@
- {
- led_classdev_unregister(&a780_main_led);
- led_classdev_unregister(&a780_aux_led);
-+ led_classdev_unregister(&a780_vibrator);
- return 0;
- }
-
-@@ -111,6 +139,7 @@
- {
- 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-09-01 00:15:03.000000000 -0300
-+++ linux-2.6.21/drivers/leds/Kconfig 2007-09-01 00:15:08.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-fix-loopback.patch b/packages/linux/linux-ezx-2.6.21/patches/asoc-fix-loopback.patch
deleted file mode 100644
index feea138984..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/asoc-fix-loopback.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c
-===================================================================
---- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:30:56.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:36:26.000000000 -0300
-@@ -153,7 +153,8 @@
- static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
- {
- struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
--
-+ /* no dma if on loopback */
-+ if (!prtd->params) return 0;
- DCSR(prtd->dma_ch) &= ~DCSR_RUN;
- DCSR(prtd->dma_ch) = 0;
- DCMD(prtd->dma_ch) = 0;
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
deleted file mode 100755
index dd5b71a512..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/asoc-pxa-ssp.patch
+++ /dev/null
@@ -1,755 +0,0 @@
-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-09-02 22:50:31.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 0
-+
-+/*
-+ * 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-09-02 22:48:59.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-09-02 22:48:51.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/Kconfig 2007-09-02 22:50:18.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-09-02 22:48:51.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/Makefile 2007-09-02 22:50:18.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/dmesg-a780.log b/packages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log
deleted file mode 100755
index 6b15077676..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log
+++ /dev/null
@@ -1,299 +0,0 @@
-<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/e6-eoc.patch b/packages/linux/linux-ezx-2.6.21/patches/e6-eoc.patch
deleted file mode 100644
index 3824079c15..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e6-eoc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-24 20:14:54.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-24 20:15:18.000000000 -0300
-@@ -203,8 +203,15 @@
- },
- };
-
-+
-+struct platform_device e6_eoc_device = {
-+ .name = "ezx-eoc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e6_pcap_device,
-+ &e6_eoc_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e6-mci.patch b/packages/linux/linux-ezx-2.6.21/patches/e6-mci.patch
deleted file mode 100644
index 08a6f97820..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e6-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:51:55.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:54:52.000000000 -0300
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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 e6_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 e6_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);
-+
-+ e6_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 e6_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 e6_mci_exit(struct device *dev, void *data)
-+{
-+ ezx_pcap_mmcsd_power(0);
-+ free_irq(0x49, data);
-+}
-+
-+static struct pxamci_platform_data e6_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 = e6_mci_init,
-+ .setpower = e6_mci_setpower,
-+ .exit = e6_mci_exit,
-+};
-+
- static struct pxafb_mode_info mode_e6 = {
- .pixclock = 192308,
- .xres = 240,
-@@ -118,6 +210,7 @@
- static void __init e6_init(void)
- {
- set_pxa_fb_info(&e6_fb_info);
-+ pxa_set_mci_info(&e6_mci_platform_data);
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
- }
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e6-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/e6-pcap.patch
deleted file mode 100644
index a11adbc02e..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e6-pcap.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:32:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:51:55.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,70 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init e6_pcap_init(void)
-+{
-+ /*
-+ * FIXME: this is the PCAP INITIAL STATE.
-+ * most of these writes should NOT be done here
-+ * * voltage regulators, voltage enablers should be set by the
-+ * driver which uses the connected hardware. Otherwise you
-+ * drain power unnecessarily.
-+ * * interrupt related registers should be set by the irq functions
-+ * only. I think that the INT_SEL register selects on which irq
-+ * pin the (ap/bp) the irq goes. This should go on ezx-pcap.c, but
-+ * only if it actually makes any difference.
-+ * * Only power state automatic changes should be done here.
-+ * (*LOWPWR, *STBY, LOWPWR*)
-+ * * I removed some writes which i consider extremelly wrong. And
-+ * which i think will not break anything (they were overwritten
-+ * later anyway).
-+ *
-+ * --WM
-+ */
-+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
-+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
-+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
-+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
-+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data e6_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_CS_AH | PCAP_MCI_SD,
-+ .clk = 1,
-+ .init = e6_pcap_init,
-+};
-+
-+static struct resource e6_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device e6_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(e6_pcap_resources),
-+ .resource = e6_pcap_resources,
-+ .dev = {
-+ .platform_data = &e6_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &e6_pcap_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e6-ts.patch b/packages/linux/linux-ezx-2.6.21/patches/e6-ts.patch
deleted file mode 100644
index ad4a52eeec..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e6-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-25 00:03:01.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-25 02:00:58.000000000 -0300
-@@ -209,9 +209,34 @@
- .id = -1,
- };
-
-+/* PCAP_TS */
-+struct resource pcap_ts_resources[] = {
-+ [0] = {
-+ .start = EZX_IRQ_ADCDONE,
-+ .end = EZX_IRQ_ADCDONE,
-+ .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,
-+ .dev = {
-+ .parent = &e6_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e6_pcap_device,
- &e6_eoc_device,
-+ &pcap_ts_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch
deleted file mode 100644
index 3645aef040..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-emu.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-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-09-06 00:47:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:48:06.000000000 -0300
-@@ -214,8 +214,33 @@
- },
- };
-
-+/* EMU */
-+static struct resource e680_emu_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 e680_emu_device = {
-+ .name = "ezx-emu",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(e680_emu_resources),
-+ .resource = e680_emu_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
-+ &e680_emu_device,
- };
-
- static void __init e680_init(void)
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
deleted file mode 100755
index ffd8bbb754..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-kbd.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-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-09-07 11:07:33.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-07 11:10:47.000000000 -0300
-@@ -15,6 +15,7 @@
- #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>
-@@ -23,11 +24,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -238,6 +241,58 @@
- .resource = e680_emu_resources,
- };
-
-+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 = {
- &e680_pcap_device,
- &e680_emu_device,
-@@ -258,6 +313,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
deleted file mode 100755
index 72ba219a44..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-leds.patch
+++ /dev/null
@@ -1,300 +0,0 @@
-
-#
-# 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-09-06 00:49:29.000000000 -0300
-+++ linux-2.6.21/drivers/leds/Kconfig 2007-09-06 00:51:36.000000000 -0300
-@@ -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-09-06 00:49:29.000000000 -0300
-+++ linux-2.6.21/drivers/leds/Makefile 2007-09-06 00:49:30.000000000 -0300
-@@ -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-09-06 00:51:22.000000000 -0300
-@@ -0,0 +1,235 @@
-+/*
-+ * 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);
-+
-+typedef struct {
-+ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */
-+ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */
-+ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
-+ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
-+ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
-+ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
-+ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
-+ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
-+// u_int8_t 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[]=
-+{
-+ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */
-+
-+ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */
-+ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */
-+ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */
-+ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */
-+ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */
-+ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */
-+ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */
-+};
-+
-+static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ unsigned int tempValue;
-+ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl,
-+ ledg_ctrl, ledr_i, ledg_i, skip, t, color;
-+ unsigned char t_mask[2] = { 0xc, 0xc };
-+
-+ skip = 0;
-+ if (value & 128) {
-+ value &= (~128);
-+ skip = 1;
-+ }
-+
-+ /* 7 colors - simple on */
-+ if (value <= 7)
-+ color = value;
-+ /* 4 colors - 11 timed on */
-+ else if (value <= 51) {
-+ value -= 7;
-+ color = ((value-1)%4)+1;
-+ t = ((value-1)/4)+1;
-+ t_mask[0] = t;
-+ t_mask[1] = t;
-+ }
-+ /* 3 colors - 22 change color */
-+ else if (value <= 84) {
-+ value -= 51;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[1] = t;
-+ }
-+ else if (value <= 117) {
-+ value -= 84;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[0] = t;
-+ }
-+ /* 3 colors - alternate with blue */
-+ else if (value <= 120) {
-+ color = value-113;
-+ t_mask[0] = 0xa;
-+ t_mask[1] = 0xb;
-+ }
-+ /* invalid value */
-+ else
-+ color = 1;
-+
-+ gpio_red = led_register_value[color].ind_GPIO_red;
-+ gpio_green = led_register_value[color].ind_GPIO_green;
-+ ledr_en = led_register_value[color].pcap_LEDR_en;
-+ ledg_en = led_register_value[color].pcap_LEDG_en;
-+ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0];
-+ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1];
-+ ledr_i = led_register_value[color].pcap_LEDR_I;
-+ ledg_i = led_register_value[color].pcap_LEDG_I;
-+
-+ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue);
-+
-+ tempValue &= (~SSP_PCAP_LED_MASK);
-+
-+ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red);
-+ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green);
-+
-+ /* Write PCAP LED Peripheral Control Register*/
-+ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) |
-+ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) |
-+ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT;
-+
-+ ezx_pcap_write(PCAP_REG_PERIPH,tempValue);
-+}
-+
-+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_led = {
-+ .name = "e680:led",
-+ .default_trigger = "none",
-+ .brightness_set = e680led_set,
-+};
-+
-+static struct led_classdev e680_keypad = {
-+ .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_led);
-+ led_classdev_suspend(&e680_keypad);
-+ return 0;
-+}
-+
-+static int e680led_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&e680_led);
-+ led_classdev_resume(&e680_keypad);
-+ return 0;
-+}
-+#endif
-+
-+static int e680led_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ /* configure GPIOs as output */
-+ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
-+ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_keypad);
-+ if (ret < 0) {
-+ led_classdev_unregister(&e680_led);
-+ }
-+ return ret;
-+}
-+
-+static int e680led_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&e680_led);
-+ led_classdev_unregister(&e680_keypad);
-+ 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)
-+{
-+ 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-09-06 00:49:23.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:49:30.000000000 -0300
-@@ -339,11 +339,20 @@
- },
- };
-
-+static struct platform_device e680led_device = {
-+ .name = "e680-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
- &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
deleted file mode 100755
index e669a51957..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-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-09-06 00:48:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:49:23.000000000 -0300
-@@ -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>
-@@ -317,10 +318,32 @@
- .resource = pcap_ts_resources,
- };
-
-+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 = {
- &e680_pcap_device,
- &e680_emu_device,
- &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
deleted file mode 100755
index 7f0826163d..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-mci.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-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-09-07 11:32:30.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-07 11:54:44.000000000 -0300
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,106 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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,
-@@ -136,6 +232,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);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch
deleted file mode 100644
index 12ce023749..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-pcap.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-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-09-06 00:41:38.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:44:56.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,77 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init e680_pcap_init(void)
-+{
-+ /* initialize PCAP registers */
-+ /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
-+
-+ /* SW1 active in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
-+
-+ /* at SW1 -core voltage to 1.30V */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
-+
-+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
-+
-+ /*
-+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+ * camera for e680
-+ */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
-+
-+ /* set Vc to low power mode when AP sleep */
-+// SSP_PCAP_bit_set( PCAP_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+ /* set VAUX2 to low power mode when AP sleep */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data e680_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_MCI_SD,
-+ .clk = 1,
-+ .init = e680_pcap_init,
-+};
-+
-+static struct resource e680_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device e680_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(e680_pcap_resources),
-+ .resource = e680_pcap_resources,
-+ .dev = {
-+ .platform_data = &e680_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &e680_pcap_device,
- };
-
- static void __init e680_init(void)
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
deleted file mode 100755
index 109623c68c..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/e680-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-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-09-07 11:10:47.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-07 11:11:01.000000000 -0300
-@@ -293,9 +293,34 @@
- },
- };
-
-+/* 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,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
-+ &pcap_ts_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch
deleted file mode 100644
index 1dda2e544c..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-asoc.patch
+++ /dev/null
@@ -1,1302 +0,0 @@
-Index: linux-2.6.21/sound/soc/codecs/pcap2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/sound/soc/codecs/pcap2.c 2007-09-07 14:28:32.000000000 -0300
-@@ -0,0 +1,796 @@
-+/*
-+ * pcap2.c - PCAP2 ASIC Audio driver
-+ *
-+ * 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/delay.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/ezx.h>
-+#include <asm/arch/hardware.h>
-+
-+#include "pcap2.h"
-+
-+#define AUDIO_NAME "pcap2-codec"
-+#define PCAP2_VERSION "0.1"
-+
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+static struct snd_soc_device *pcap2_codec_socdev;
-+
-+/*
-+ * Debug
-+ */
-+
-+//#define PCAP2_DEBUG
-+
-+#ifdef PCAP2_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+#define dump_registers() pcap2_codec_read(NULL, 13); \
-+ pcap2_codec_read(NULL, 12); \
-+ pcap2_codec_read(NULL, 11); \
-+ pcap2_codec_read(NULL, 26);
-+
-+
-+
-+
-+/*
-+ * ASoC limits register value to 16 bits and pcap uses 32 bit registers
-+ * to work around this, we get 16 bits from low, mid or high positions.
-+ * ASoC limits register number to 8 bits we use 0x1f for register
-+ * number and 0xe0 for register offset. -WM
-+ */
-+static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ unsigned int tmp;
-+
-+ ezx_pcap_read((reg & 0x1f), &tmp);
-+
-+ if (reg & SL) {
-+ tmp &= 0xffff0000;
-+ tmp |= (value & 0xffff);
-+ }
-+ else if (reg & SM) {
-+ tmp &= 0xff0000ff;
-+ tmp |= ((value << 8) & 0x00ffff00);
-+ }
-+ else if (reg & SH) {
-+ tmp &= 0xffff;
-+ tmp |= ((value << 16) & 0xffff0000);
-+ }
-+ else
-+ tmp = value;
-+
-+ dbg("codec_write reg=%x, rval=%08x, fval=%08x", reg, tmp, value);
-+ ezx_pcap_write((reg & 0x1f), tmp);
-+ return 0;
-+
-+}
-+
-+static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg)
-+{
-+ unsigned int tmp, ret;
-+
-+ ezx_pcap_read((reg & 0x1f), &tmp);
-+ ret = tmp;
-+ if (reg & SL)
-+ ret = (tmp & 0xffff);
-+ else if (reg & SM)
-+ ret = ((tmp >> 8) & 0xffff);
-+ else if (reg & SH)
-+ ret = ((tmp >> 16) & 0xffff);
-+
-+ dbg("codec_read reg=%x, rval=%08x, fval=%08x", reg, tmp, ret);
-+ return(ret);
-+
-+}
-+
-+static const char *pcap2_output_select[] = {"2ch", "2->1ch", "2->1ch -3db", "2->1ch -6db"};
-+
-+static const struct soc_enum pcap2_enum[] = {
-+SOC_ENUM_SINGLE((PCAP2_OUTPUT_AMP|SH), 3, 4, pcap2_output_select),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_input_mixer_controls[] = {
-+SOC_DAPM_SINGLE("A3 Switch", (PCAP2_INPUT_AMP|SL), 6, 1, 0),
-+SOC_DAPM_SINGLE("A5 Switch", (PCAP2_INPUT_AMP|SL), 8, 1, 0),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_output_mixer_controls[] = {
-+SOC_DAPM_SINGLE("A1 Switch", (PCAP2_OUTPUT_AMP|SL), 0, 1, 0),
-+SOC_DAPM_SINGLE("A2 Switch", (PCAP2_OUTPUT_AMP|SL), 1, 1, 0),
-+SOC_DAPM_SINGLE("AR Switch", (PCAP2_OUTPUT_AMP|SL), 5, 1, 0),
-+SOC_DAPM_SINGLE("AL Switch", (PCAP2_OUTPUT_AMP|SL), 6, 1, 0),
-+};
-+
-+/* pcap2 codec non DAPM controls */
-+static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = {
-+SOC_SINGLE("Output gain", (PCAP2_OUTPUT_AMP|SM), 5, 15, 0),
-+SOC_SINGLE("Input gain", (PCAP2_INPUT_AMP|SL), 0, 31, 0),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_codec_dm_mux_control[] = {
-+ SOC_DAPM_ENUM("Output Mode", pcap2_enum[0]),
-+};
-+
-+/* add non dapm controls */
-+static int pcap2_codec_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(pcap2_codec_snd_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&pcap2_codec_snd_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* pcap2 codec DAPM controls */
-+static const struct snd_soc_dapm_widget pcap2_codec_dapm_widgets[] = {
-+ SND_SOC_DAPM_DAC("ST_DAC", "ST_DAC playback", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_DAC("CDC_DAC", "CDC_DAC playback", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_ADC("CDC_ADC", "CDC_DAC capture", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_PGA("PGA_ST", (PCAP2_OUTPUT_AMP|SL), 9, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_CDC", (PCAP2_OUTPUT_AMP|SL), 8, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_R", (PCAP2_OUTPUT_AMP|SL), 11, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_L", (PCAP2_OUTPUT_AMP|SL), 12, 0, NULL, 0),
-+ SND_SOC_DAPM_MUX("Downmixer", SND_SOC_NOPM, 0, 0, pcap2_codec_dm_mux_control),
-+ SND_SOC_DAPM_PGA("PGA_A1CTRL", (PCAP2_OUTPUT_AMP|SH), 1, 1, NULL, 0),
-+ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &pcap2_output_mixer_controls[0], ARRAY_SIZE(pcap2_output_mixer_controls)),
-+ SND_SOC_DAPM_OUTPUT("A1"), /* Earpiece */
-+ SND_SOC_DAPM_OUTPUT("A2"), /* LoudSpeaker */
-+ SND_SOC_DAPM_OUTPUT("AR"), /* headset right */
-+ SND_SOC_DAPM_OUTPUT("AL"), /* headset left */
-+
-+ SND_SOC_DAPM_MICBIAS("BIAS1", (PCAP2_INPUT_AMP|SL), 10, 0),
-+ SND_SOC_DAPM_MICBIAS("BIAS2", (PCAP2_INPUT_AMP|SL), 11, 0),
-+ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &pcap2_input_mixer_controls[0], ARRAY_SIZE(pcap2_input_mixer_controls)),
-+ SND_SOC_DAPM_INPUT("A3"), /* Headset Mic */
-+ SND_SOC_DAPM_INPUT("A5"), /* Builtin Mic */
-+};
-+
-+static const char *audio_map[][3] = {
-+ { "A1", NULL, "Output Mixer" },
-+ { "A2", NULL, "Output Mixer" },
-+ { "AR", NULL, "Output Mixer" },
-+ { "AL", NULL, "Output Mixer" },
-+
-+ { "Output Mixer", "A1 Switch", "PGA_A1CTRL" },
-+ { "Output Mixer", "A2 Switch", "Downmixer" },
-+ { "Output Mixer", "AR Switch", "PGA_R" },
-+ { "Output Mixer", "AL Switch", "PGA_L" },
-+
-+ { "PGA_A1CTRL", NULL, "Downmixer" },
-+
-+ { "Downmixer", "2->1ch", "PGA_L" },
-+ { "Downmixer", "2->1ch", "PGA_R" },
-+ { "Downmixer", "2->1ch -3db", "PGA_L" },
-+ { "Downmixer", "2->1ch -3db", "PGA_R" },
-+ { "Downmixer", "2->1ch -6db", "PGA_L" },
-+ { "Downmixer", "2->1ch -6db", "PGA_R" },
-+ { "Downmixer", "2ch", "PGA_R" },
-+
-+ { "PGA_R", NULL, "PGA_ST" },
-+ { "PGA_L", NULL, "PGA_ST" },
-+ { "PGA_R", NULL, "PGA_CDC" },
-+
-+ { "PGA_ST", NULL, "ST_DAC" },
-+ { "PGA_CDC", NULL, "CDC_DAC" },
-+
-+ /* input path */
-+ { "BIAS1", NULL, "A3" },
-+ { "BIAS2", NULL, "A5" },
-+
-+ { "Input Mixer", "A3 Switch", "BIAS1" },
-+ { "Input Mixer", "A5 Switch", "BIAS2" },
-+
-+ { "PGA_R", NULL, "Input Mixer" },
-+
-+ { "PGA_CDC", NULL, "PGA_R" },
-+ { "CDC_ADC", NULL, "PGA_CDC" },
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int pcap2_codec_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(pcap2_codec_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &pcap2_codec_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path interconnects */
-+ 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_new_widgets(codec);
-+ return 0;
-+}
-+
-+static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ unsigned int input = pcap2_codec_read(codec, PCAP2_INPUT_AMP);
-+
-+ input &= ~PCAP2_INPUT_AMP_LOWPWR;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0:
-+ case SNDRV_CTL_POWER_D1:
-+ case SNDRV_CTL_POWER_D2:
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ dbg("dapm: ON\n");
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ input |= PCAP2_INPUT_AMP_LOWPWR;
-+ dbg("dapm: OFF\n");
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ pcap2_codec_write(codec, PCAP2_INPUT_AMP, input);
-+ return 0;
-+}
-+
-+static int pcap2_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_codec *codec = codec_dai->codec;
-+ unsigned int tmp;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+
-+ tmp &= ~PCAP2_ST_DAC_RATE_MASK;
-+ switch(params_rate(params)) {
-+ case 8000:
-+ break;
-+ case 11025:
-+ tmp |= PCAP2_ST_DAC_RATE_11025;
-+ break;
-+ case 12000:
-+ tmp |= PCAP2_ST_DAC_RATE_12000;
-+ break;
-+ case 16000:
-+ tmp |= PCAP2_ST_DAC_RATE_16000;
-+ break;
-+ case 22050:
-+ tmp |= PCAP2_ST_DAC_RATE_22050;
-+ break;
-+ case 24000:
-+ tmp |= PCAP2_ST_DAC_RATE_24000;
-+ break;
-+ case 32000:
-+ tmp |= PCAP2_ST_DAC_RATE_32000;
-+ break;
-+ case 44100:
-+ tmp |= PCAP2_ST_DAC_RATE_44100;
-+ break;
-+ case 48000:
-+ tmp |= PCAP2_ST_DAC_RATE_48000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ tmp |= PCAP2_ST_DAC_RESET_DF;
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+
-+ tmp &= ~PCAP2_CODEC_RATE_MASK;
-+ switch(params_rate(params)) {
-+ case 8000:
-+ break;
-+ case 16000:
-+ tmp |= PCAP2_CODEC_RATE_16000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ tmp |= PCAP2_CODEC_RESET_DF;
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcap2_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;
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ struct snd_soc_dapm_widget *w;
-+ unsigned int tmp;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+ tmp &= ~(PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+ if ((!strcmp(w->name, "CDC_DAC") || !strcmp(w->name, "CDC_ADC")) && w->connected)
-+ goto in_use;
-+ }
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+ tmp &= ~(PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+in_use:
-+ snd_soc_dapm_sync_endpoints(codec);
-+
-+ return 0;
-+}
-+
-+static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai,
-+ int clk_id, unsigned int freq, int dir)
-+{
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+
-+ unsigned int tmp;
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* ST_DAC */
-+
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+
-+ tmp &= ~PCAP2_ST_DAC_CLKSEL_MASK;
-+ switch (clk_id) {
-+ case PCAP2_CLK_AP:
-+ tmp |= PCAP2_ST_DAC_CLKSEL_AP;
-+ break;
-+ case PCAP2_CLK_BP:
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
-+ tmp &= ~PCAP2_ST_DAC_CLK_MASK;
-+ switch (freq) {
-+ case 13000000:
-+ break;
-+/* case 15M36:
-+ tmp |= PCAP2_ST_DAC_CLK_15M36;
-+ break;
-+ case 16M8:
-+ tmp |= PCAP2_ST_DAC_CLK_16M8;
-+ break;
-+ case 19M44:
-+ tmp |= PCAP2_ST_DAC_CLK_19M44;
-+ break;
-+*/ case 26000000:
-+ tmp |= PCAP2_ST_DAC_CLK_26M;
-+ break;
-+/* case EXT_MCLK:
-+ tmp |= PCAP2_ST_DAC_CLK_MCLK;
-+ break;
-+ case FSYNC:
-+ tmp |= PCAP2_ST_DAC_CLK_FSYNC;
-+ break;
-+ case BITCLK:
-+ tmp |= PCAP2_ST_DAC_CLK_BITCLK;
-+ break;
-+*/ default:
-+ return -EINVAL;
-+ }
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ /* MONO_DAC */
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+
-+ tmp &= ~PCAP2_CODEC_CLKSEL_MASK;
-+ switch (clk_id) {
-+ case PCAP2_CLK_AP:
-+ tmp |= PCAP2_CODEC_CLKSEL_AP;
-+ break;
-+ case PCAP2_CLK_BP:
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
-+ tmp &= ~PCAP2_CODEC_CLK_MASK;
-+ switch (freq) {
-+ case 13000000:
-+ break;
-+/* case 15M36:
-+ tmp |= PCAP2_CODEC_CLK_15M36;
-+ break;
-+ case 16M8:
-+ tmp |= PCAP2_CODEC_CLK_16M8;
-+ break;
-+ case 19M44:
-+ tmp |= PCAP2_CODEC_CLK_19M44;
-+ break;
-+*/ case 26000000:
-+ tmp |= PCAP2_CODEC_CLK_26M;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ return 0;
-+}
-+
-+static int pcap2_set_dai_fmt(struct snd_soc_codec_dai *codec_dai,
-+ unsigned int fmt)
-+{
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ unsigned int tmp = 0;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* ST_DAC */
-+
-+ /* disable CODEC */
-+ pcap2_codec_write(codec, PCAP2_CODEC, 0);
-+
-+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ tmp |= 0x1;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ tmp |= 0x4000;
-+ break;
-+/* case SND_SOC_NET:
-+ tmp |= 0x2000;
-+ break;
-+*/ case SND_SOC_DAIFMT_DSP_B:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ break;
-+ case SND_SOC_DAIFMT_NB_NF:
-+ tmp |= 0x60000;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ tmp |= 0x40000;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ tmp |= 0x20000;
-+ break;
-+ }
-+ /* set dai to AP */
-+ tmp |= 0x1000;
-+
-+ /* set BCLK */
-+ tmp |= 0x18000;
-+
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ /* MONO_DAC */
-+
-+ /* disable ST_DAC */
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, 0);
-+
-+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ tmp |= 0x2;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_DSP_B:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ break;
-+ case SND_SOC_DAIFMT_NB_NF:
-+ tmp |= 0x600;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ tmp |= 0x400;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ tmp |= 0x200;
-+ break;
-+ }
-+ if (codec_dai->id == PCAP2_MONO_DAI)
-+ /* set dai to AP */
-+ tmp |= 0x8000;
-+
-+ tmp |= 0x5; /* IHF / OHF */
-+
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ return 0;
-+}
-+
-+static int pcap2_prepare(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;
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ unsigned int tmp;
-+ /* FIXME enable clock only if codec is master */
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 1);
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+ tmp |= (PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 1);
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+ tmp |= (PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ snd_soc_dapm_sync_endpoints(codec);
-+ mdelay(1);
-+#ifdef PCAP2_DEBUG
-+ dump_registers();
-+#endif
-+ return 0;
-+}
-+
-+/*
-+ * Define codec DAI.
-+ */
-+struct snd_soc_codec_dai pcap2_dai[] = {
-+{
-+ .name = "PCAP2 MONO",
-+ .id = 0,
-+ .playback = {
-+ .stream_name = "CDC_DAC playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .capture = {
-+ .stream_name = "CDC_DAC capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+{
-+ .name = "PCAP2 STEREO",
-+ .id = 1,
-+ .playback = {
-+ .stream_name = "ST_DAC playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ .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),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .capture = { /* FIXME: PCAP support this?? */
-+ .stream_name = "ST_DAC capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .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),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+{
-+ .name = "PCAP2 BP",
-+ .id = 2,
-+ .playback = {
-+ .stream_name = "BP playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = SNDRV_PCM_RATE_8000,
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+};
-+EXPORT_SYMBOL_GPL(pcap2_dai);
-+
-+static int pcap2_codec_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ dbg("pcap2_codec_suspend");
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int pcap2_codec_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ dbg("pcap2_codec_resume");
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ pcap2_codec_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the PCAP2 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int pcap2_codec_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ dbg("pcap2_codec_init");
-+ codec->name = "PCAP2 Audio";
-+ codec->owner = THIS_MODULE;
-+ codec->read = pcap2_codec_read;
-+ codec->write = pcap2_codec_write;
-+ codec->dapm_event = pcap2_codec_dapm_event;
-+ codec->dai = pcap2_dai;
-+ codec->num_dai = ARRAY_SIZE(pcap2_dai);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ return ret;
-+ }
-+ /* power on device */
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ /* set the update bits */
-+
-+ pcap2_codec_add_controls(codec);
-+ pcap2_codec_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static int pcap2_codec_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct pcap2_codec_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+ info("PCAP2 Audio Codec %s", PCAP2_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ pcap2_codec_socdev = socdev;
-+
-+ ret = pcap2_codec_init(socdev);
-+ return ret;
-+}
-+
-+/* power down chip and remove */
-+static int pcap2_codec_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ if (codec->control_data)
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+/* codec device ops */
-+struct snd_soc_codec_device soc_codec_dev_pcap2 = {
-+ .probe = pcap2_codec_probe,
-+ .remove = pcap2_codec_remove,
-+ .suspend = pcap2_codec_suspend,
-+ .resume = pcap2_codec_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_pcap2);
-+
-+MODULE_DESCRIPTION("ASoC PCAP2 codec");
-+MODULE_AUTHOR("Daniel Ribeiro");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.21/sound/soc/codecs/pcap2.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/sound/soc/codecs/pcap2.h 2007-09-07 12:13:49.000000000 -0300
-@@ -0,0 +1,81 @@
-+/*
-+ * 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 _PCAP2_H
-+#define _PCAP2_H
-+
-+/* 16 bit reads/writes on pcap registers (ugly workaround) */
-+#define SL (1 << 5) /* lower 16 bits */
-+#define SM (1 << 6) /* mid 16 bits */
-+#define SH (1 << 7) /* higher 16 bits */
-+
-+/* PCAP2 register space */
-+#define PCAP2_CODEC 0x0b
-+#define PCAP2_OUTPUT_AMP 0x0c
-+#define PCAP2_ST_DAC 0x0d
-+#define PCAP2_INPUT_AMP 0x1a
-+
-+#define PCAP2_MONO_DAI 0
-+#define PCAP2_STEREO_DAI 1
-+#define PCAP2_BP_DAI 2
-+
-+#define PCAP2_CLK_BP 0
-+#define PCAP2_CLK_AP 1
-+
-+#define PCAP2_CODEC_EN 0x2000
-+#define PCAP2_CODEC_CLK_EN 0x1000
-+#define PCAP2_CODEC_RESET_DF 0x800
-+#define PCAP2_CODEC_RATE_MASK 0x4000
-+#define PCAP2_CODEC_RATE_8000 0x0
-+#define PCAP2_CODEC_RATE_16000 0x4000
-+#define PCAP2_CODEC_CLKSEL_MASK 0x10000
-+#define PCAP2_CODEC_CLKSEL_AP 0x10000
-+#define PCAP2_CODEC_CLKSEL_BP 0x0
-+#define PCAP2_CODEC_CLK_MASK 0x1c0
-+#define PCAP2_CODEC_CLK_13M 0x0
-+#define PCAP2_CODEC_CLK_15M36 0x40
-+#define PCAP2_CODEC_CLK_16M8 0x80
-+#define PCAP2_CODEC_CLK_19M44 0xc0
-+#define PCAP2_CODEC_CLK_26M 0x100
-+
-+#define PCAP2_ST_DAC_EN 0x80
-+#define PCAP2_ST_DAC_CLK_EN 0x20
-+#define PCAP2_ST_DAC_RESET_DF 0x40
-+#define PCAP2_ST_DAC_RATE_MASK 0xf00
-+#define PCAP2_ST_DAC_RATE_8000 0x0
-+#define PCAP2_ST_DAC_RATE_11025 0x100
-+#define PCAP2_ST_DAC_RATE_12000 0x200
-+#define PCAP2_ST_DAC_RATE_16000 0x300
-+#define PCAP2_ST_DAC_RATE_22050 0x400
-+#define PCAP2_ST_DAC_RATE_24000 0x500
-+#define PCAP2_ST_DAC_RATE_32000 0x600
-+#define PCAP2_ST_DAC_RATE_44100 0x700
-+#define PCAP2_ST_DAC_RATE_48000 0x800
-+#define PCAP2_ST_DAC_CLKSEL_MASK 0x80000
-+#define PCAP2_ST_DAC_CLKSEL_AP 0x80000
-+#define PCAP2_ST_DAC_CLKSEL_BP 0x0
-+#define PCAP2_ST_DAC_CLK_MASK 0x1c
-+#define PCAP2_ST_DAC_CLK_13M 0x0
-+#define PCAP2_ST_DAC_CLK_15M36 0x4
-+#define PCAP2_ST_DAC_CLK_16M8 0x8
-+#define PCAP2_ST_DAC_CLK_19M44 0xc
-+#define PCAP2_ST_DAC_CLK_26M 0x10
-+#define PCAP2_ST_DAC_CLK_MCLK 0x14
-+#define PCAP2_ST_DAC_CLK_FSYNC 0x18
-+#define PCAP2_ST_DAC_CLK_BITCLK 0x1c
-+
-+#define PCAP2_INPUT_AMP_LOWPWR 0x80000
-+#define PCAP2_INPUT_AMP_V2EN2 0x200000
-+
-+#define PCAP2_OUTPUT_AMP_PGAR_EN 0x800
-+#define PCAP2_OUTPUT_AMP_PGAL_EN 0x1000
-+#define PCAP2_OUTPUT_AMP_CDC_SW 0x100
-+#define PCAP2_OUTPUT_AMP_ST_DAC_SW 0x200
-+
-+extern struct snd_soc_codec_dai pcap2_dai[];
-+extern struct snd_soc_codec_device soc_codec_dev_pcap2;
-+
-+#endif
-Index: linux-2.6.21/sound/soc/pxa/Kconfig
-===================================================================
---- linux-2.6.21.orig/sound/soc/pxa/Kconfig 2007-09-07 12:13:43.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/Kconfig 2007-09-07 12:13:49.000000000 -0300
-@@ -60,4 +60,13 @@
- Say Y if you want to add support for SoC audio on Sharp
- Zaurus SL-C6000x models (Tosa).
-
-+config SND_PXA2XX_SOC_EZX
-+ tristate "SoC Audio support for EZX"
-+ depends on SND_PXA2XX_SOC && PXA_EZX
-+ select SND_PXA2XX_SOC_SSP
-+ select SND_SOC_PCAP2
-+ help
-+ Say Y if you want to add support for SoC audio on
-+ Motorola EZX Phones (a780/e680).
-+
- endmenu
-Index: linux-2.6.21/sound/soc/pxa/ezx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/sound/soc/pxa/ezx.c 2007-09-07 13:12:24.000000000 -0300
-@@ -0,0 +1,349 @@
-+/*
-+ * ezx.c - Machine specific code for 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 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/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/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+
-+#include <asm/arch/ezx-pcap.h>
-+
-+#include "../codecs/pcap2.h"
-+#include "pxa2xx-pcm.h"
-+#include "pxa2xx-ssp.h"
-+
-+#define GPIO_HW_ATTENUATE_A780 96
-+
-+static struct snd_soc_codec *control_codec;
-+
-+static void ezx_ext_control(struct snd_soc_codec *codec)
-+{
-+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_A1)))
-+ snd_soc_dapm_set_endpoint(codec, "Headset", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "Headset", 0);
-+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_MB2)))
-+ snd_soc_dapm_set_endpoint(codec, "External Mic", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "External Mic", 0);
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static irqreturn_t jack_irq(int irq, void *data)
-+{
-+ ezx_ext_control(control_codec);
-+ return IRQ_HANDLED;
-+}
-+
-+
-+/*
-+ * Alsa operations
-+ * Only implement the required operations for your platform.
-+ * These operations are specific to the machine only.
-+ */
-+
-+ /*
-+ * Called by ALSA when a PCM substream is opened, private data can be allocated.
-+ */
-+static int ezx_machine_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ ezx_ext_control(codec);
-+ return 0;
-+}
-+
-+/*
-+ * Called by ALSA when the hardware params are set by application. This
-+ * function can also be called multiple times and can allocate buffers
-+ * (using snd_pcm_lib_* ). It's non-atomic.
-+ */
-+static int ezx_machine_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;
-+ int ret;
-+
-+ /* set codec DAI configuration */
-+ if (codec_dai->id == PCAP2_STEREO_DAI)
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_CBM_CFM);
-+ else
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* Turn on clock output on CLK_PIO */
-+ OSCC |= 0x8;
-+
-+ /* set clock source */
-+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_AP,
-+ 13000000, SND_SOC_CLOCK_IN);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* set cpu DAI configuration */
-+ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = cpu_dai->dai_ops.set_tristate(cpu_dai, 0);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai,PXA2XX_SSP_CLK_EXT,
-+ 0, SND_SOC_CLOCK_IN);
-+ if (ret < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+/*
-+ * Free's resources allocated by hw_params, can be called multiple times
-+ */
-+static int ezx_machine_hw_free(struct snd_pcm_substream *substream)
-+{
-+ OSCC &= ~0x8; /* turn off clock output on CLK_PIO */
-+
-+ return 0;
-+}
-+
-+static int ezx_machine_prepare(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;
-+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* override pxa2xx-ssp sample size for stereo/network mode */
-+ SSCR0_P(cpu_dai->id+1) &= ~(SSCR0_DSS | SSCR0_EDSS);
-+ SSCR0_P(cpu_dai->id+1) |= (SSCR0_EDSS | SSCR0_DataSize(16));
-+ }
-+ return 0;
-+}
-+
-+/* machine Alsa PCM operations */
-+static struct snd_soc_ops ezx_ops = {
-+ .startup = ezx_machine_startup,
-+ .prepare = ezx_machine_prepare,
-+ .hw_free = ezx_machine_hw_free,
-+ .hw_params = ezx_machine_hw_params,
-+};
-+
-+static int bp_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;
-+ int ret = 0;
-+ /* set codec DAI configuration */
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* set clock source */
-+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_BP,
-+ 13000000, SND_SOC_CLOCK_IN);
-+
-+ return ret;
-+}
-+
-+
-+
-+/* machine dapm widgets */
-+static const struct snd_soc_dapm_widget ezx_dapm_widgets[] = {
-+ SND_SOC_DAPM_HP("Headset", NULL),
-+ SND_SOC_DAPM_SPK("Earpiece", NULL),
-+ SND_SOC_DAPM_SPK("Loudspeaker", NULL),
-+ SND_SOC_DAPM_MIC("Built-in Mic", NULL),
-+ SND_SOC_DAPM_MIC("External Mic", NULL),
-+};
-+
-+/* machine audio map (connections to the codec pins) */
-+static const char *audio_map[][3] = {
-+ { "Headset", NULL, "AR" },
-+ { "Headset", NULL, "AL" },
-+ { "Earpiece", NULL, "A1" },
-+ { "Loudspeaker", NULL, "A2" },
-+
-+ { "Built-in Mic", NULL, "A5" },
-+ { "External Mic", NULL, "A3" },
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * Initialise the machine audio subsystem.
-+ */
-+static int ezx_machine_init(struct snd_soc_codec *codec)
-+{
-+ int i;
-+ /* mark unused codec pins as NC */
-+// snd_soc_dapm_set_endpoint(codec, "FIXME", 0);
-+ control_codec = codec;
-+
-+ /* Add ezx specific controls */
-+// for (i = 0; i < ARRAY_SIZE(ezx_controls); i++) {
-+// if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&ezx_controls[i], codec, NULL))) < 0)
-+// return err;
-+// }
-+
-+ /* Add ezx specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(ezx_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &ezx_dapm_widgets[i]);
-+ }
-+ /* Set up ezx specific audio path interconnects */
-+ 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]);
-+ }
-+
-+ /* synchronise subsystem */
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_cpu_dai bp_dai =
-+{
-+ .name = "Baseband",
-+ .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,
-+ },
-+ .ops = {
-+// .startup = bp_startup,
-+// .shutdown = bp_shutdown,
-+ .hw_params = bp_hw_params,
-+// .hw_free = bp_hw_free,
-+ },
-+};
-+
-+/* template digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link ezx_dai[] = {
-+{
-+ .name = "PCAP2 STEREO",
-+ .stream_name = "stereo playback",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
-+ .codec_dai = &pcap2_dai[PCAP2_STEREO_DAI],
-+ .init = ezx_machine_init,
-+ .ops = &ezx_ops,
-+},
-+{
-+ .name = "PCAP2 MONO",
-+ .stream_name = "mono playback",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
-+ .codec_dai = &pcap2_dai[PCAP2_MONO_DAI],
-+// .init = ezx_machine_init, /* the stereo call already registered our controls */
-+ .ops = &ezx_ops,
-+},
-+{
-+ .name = "PCAP2 BP",
-+ .stream_name = "BP Audio",
-+ .cpu_dai = &bp_dai,
-+ .codec_dai = &pcap2_dai[PCAP2_BP_DAI],
-+},
-+};
-+
-+/* template audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_ezx = {
-+ .name = "Motorola EZX",
-+// .probe
-+// .remove
-+// .suspend_pre
-+// .resume_post
-+ .dai_link = ezx_dai,
-+ .num_links = ARRAY_SIZE(ezx_dai),
-+};
-+
-+/* template audio subsystem */
-+static struct snd_soc_device ezx_snd_devdata = {
-+ .machine = &snd_soc_machine_ezx,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_pcap2,
-+};
-+
-+static struct platform_device *ezx_snd_device;
-+
-+static int __init ezx_init(void)
-+{
-+ int ret;
-+ ezx_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!ezx_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(ezx_snd_device, &ezx_snd_devdata);
-+ ezx_snd_devdata.dev = &ezx_snd_device->dev;
-+ ret = platform_device_add(ezx_snd_device);
-+
-+ if (ret)
-+ platform_device_put(ezx_snd_device);
-+ /* configure gpio for ssp3 */
-+ pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */
-+ pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD */
-+ pxa_gpio_mode(GPIO52_SCLK3_MD); /* SCLK */
-+ pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD */
-+
-+ /* configure gpio for ssp2 */
-+ pxa_gpio_mode(37 | GPIO_IN); /* SFRM */
-+ pxa_gpio_mode(38 | GPIO_IN); /* TXD */
-+ pxa_gpio_mode(22 | GPIO_IN); /* SCLK */
-+ pxa_gpio_mode(88 | GPIO_IN); /* RXD */
-+
-+ pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT);
-+ pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1);
-+
-+ /* request jack irq */
-+ request_irq(EZX_IRQ_HEADJACK, &jack_irq, SA_INTERRUPT, "headphone jack", NULL);
-+ request_irq(EZX_IRQ_MIC, &jack_irq, SA_INTERRUPT, "mic jack", NULL);
-+
-+ return ret;
-+}
-+
-+static void __exit ezx_exit(void)
-+{
-+ free_irq(EZX_IRQ_HEADJACK, NULL);
-+ free_irq(EZX_IRQ_MIC, NULL);
-+ platform_device_unregister(ezx_snd_device);
-+}
-+
-+module_init(ezx_init);
-+module_exit(ezx_exit);
-+
-Index: linux-2.6.21/sound/soc/codecs/Makefile
-===================================================================
---- linux-2.6.21.orig/sound/soc/codecs/Makefile 2007-09-07 12:13:43.000000000 -0300
-+++ linux-2.6.21/sound/soc/codecs/Makefile 2007-09-07 12:13:49.000000000 -0300
-@@ -2,8 +2,10 @@
- snd-soc-wm8731-objs := wm8731.o
- snd-soc-wm8750-objs := wm8750.o
- snd-soc-wm9712-objs := wm9712.o
-+snd-soc-pcap2-objs := pcap2.o
-
- obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
- obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o
- obj-$(CONFIG_SND_SOC_WM8750) += snd-soc-wm8750.o
- obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o
-+obj-$(CONFIG_SND_SOC_PCAP2) += snd-soc-pcap2.o
-Index: linux-2.6.21/sound/soc/codecs/Kconfig
-===================================================================
---- linux-2.6.21.orig/sound/soc/codecs/Kconfig 2007-09-07 12:13:43.000000000 -0300
-+++ linux-2.6.21/sound/soc/codecs/Kconfig 2007-09-07 12:13:49.000000000 -0300
-@@ -13,3 +13,7 @@
- config SND_SOC_WM9712
- tristate
- depends on SND_SOC
-+
-+config SND_SOC_PCAP2
-+ tristate
-+ depends on SND_SOC && EZX_PCAP
-Index: linux-2.6.21/sound/soc/pxa/Makefile
-===================================================================
---- linux-2.6.21.orig/sound/soc/pxa/Makefile 2007-09-07 12:13:43.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/Makefile 2007-09-07 12:13:49.000000000 -0300
-@@ -14,9 +14,10 @@
- snd-soc-poodle-objs := poodle.o
- snd-soc-tosa-objs := tosa.o
- snd-soc-spitz-objs := spitz.o
-+snd-soc-ezx-objs := ezx.o
-
- obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o
- obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o
- obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o
- obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o
--
-+obj-$(CONFIG_SND_PXA2XX_SOC_EZX) += snd-soc-ezx.o
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
deleted file mode 100755
index c0284e3a1f..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-backlight.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-
-#
-# 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-08-01 19:38:48.000000000 -0300
-+++ linux-2.6.21/drivers/video/backlight/Kconfig 2007-08-01 20:00:56.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-08-01 19:38:48.000000000 -0300
-+++ linux-2.6.21/drivers/video/backlight/Makefile 2007-08-01 20:00:56.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-08-01 20:00:56.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-08-01 19:39:02.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-08-01 20:00:56.000000000 -0300
-@@ -65,6 +65,12 @@
- #endif
- EXPORT_SYMBOL(ezx_backlight_power);
-
-+/* EZX LCD Backlight */
-+static struct platform_device ezxbacklight_device = {
-+ .name = "ezx-bl",
-+ .id = -1,
-+};
-+
- /* OHCI Controller */
- static int ezx_ohci_init(struct device *dev)
- {
-@@ -121,6 +127,7 @@
-
- static struct platform_device *devices[] __initdata = {
- &ezxbp_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
deleted file mode 100755
index 8e8abcb738..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-bp.patch
+++ /dev/null
@@ -1,338 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c 2007-06-29 01:07:18.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-08-16 15:52:21.000000000 -0300
-@@ -86,8 +86,40 @@
- .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 = {
-+ &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-29 01:07:18.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-08-16 15:52:20.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-08-16 15:52:43.000000000 -0300
-@@ -0,0 +1,262 @@
-+/*
-+ * 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");
-+ /*
-+ * It is correct to power off here, the following line is
-+ * commented out because e680 lowers WDI2 when BP is in
-+ * flash mode, otherwise WDI2 is used to detect low
-+ * battery. You can safely uncomment this line if you are
-+ * using this kernel with BP in normal mode.
-+ */
-+#ifndef CONFIG_PXA_EZX_E680
-+ pm_power_off();
-+#endif
-+ }
-+}
-+
-+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()) {
-+ /* FIXME: (test) try to not disable irq_wdi2 and drain battery */
-+ 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");
-+ /* same case as check_power_off() */
-+#ifndef CONFIG_PXA_EZX_E680
-+ pm_power_off();
-+#endif
-+ 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-29 01:07:18.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-08-16 15:52:20.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
deleted file mode 100755
index 711a8a467b..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-core.patch
+++ /dev/null
@@ -1,1016 +0,0 @@
-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-09-23 13:27:06.000000000 -0300
-+++ linux-2.6.21/arch/arm/boot/compressed/head-xscale.S 2007-09-23 13:27:19.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-09-23 13:27:06.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-09-23 13:27:19.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-09-23 13:27:06.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-09-23 13:27:19.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
-+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-09-23 13:27:19.000000000 -0300
-@@ -0,0 +1,118 @@
-+/*
-+ * 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 <asm/arch/ezx.h>
-+
-+#include "generic.h"
-+
-+/* 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);
-+
-+/* 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 = {
-+};
-+
-+static int __init ezx_init(void)
-+{
-+ CKEN = CKEN9_OSTIMER | CKEN22_MEMC;
-+
-+ 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-09-23 13:27:19.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-09-23 13:27:13.000000000 -0300
-+++ linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h 2007-09-23 13:27:19.000000000 -0300
-@@ -856,6 +856,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 */
-@@ -1259,6 +1261,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 */
-@@ -1372,6 +1375,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)
-@@ -1382,23 +1386,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)
-@@ -1423,13 +1437,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)
-@@ -1465,13 +1483,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)
-@@ -1483,6 +1507,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)
-
-@@ -1498,6 +1523,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-09-23 13:27:06.000000000 -0300
-+++ linux-2.6.21/arch/arm/boot/compressed/head.S 2007-09-23 13:27:19.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-09-23 13:27:06.000000000 -0300
-+++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-09-23 13:27:19.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/mm/init.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mm/init.c 2007-09-23 13:27:07.000000000 -0300
-+++ linux-2.6.21/arch/arm/mm/init.c 2007-09-23 13:27:19.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-09-23 13:27:19.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 <asm/arch/ezx.h>
-+
-+#include "generic.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-09-23 13:27:19.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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .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-09-23 13:27:19.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 <asm/arch/ezx.h>
-+
-+#include "generic.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-09-23 13:27:19.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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .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-09-23 13:27:19.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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .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
deleted file mode 100755
index 01ab60d9ec..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-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-09-07 15:27:23.000000000 -0300
-@@ -0,0 +1,219 @@
-+/*
-+ * 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);
-+static int emu_irq_usb4v;
-+static int emu_irq_usb1v;
-+
-+
-+#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)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to USB\n");
-+ 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(PCAP_BIT_BUSCTRL_RS232ENB, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_FSENB, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 1);
-+ clr_GPIO(GPIO_EMU_MUX1);
-+ clr_GPIO(GPIO_EMU_MUX2);
-+}
-+
-+void emu_switch_to_uart(void)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to UART\n");
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN,0);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 0);
-+ ezx_pcap_bit_set(PCAP_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)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to audio(%s)\n", (stereo ? "stereo" : "mono"));
-+ 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)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to disconnected\n");
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 0);
-+ ezx_pcap_bit_set(PCAP_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(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
-+ emu_switch_to_default();
-+ break;
-+ case EZX_IRQ_USB1V:
-+ if(!ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB1V)))
-+ 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);
-+
-+ emu_irq_usb4v = platform_get_irq(dev, 0);
-+ if(emu_irq_usb4v < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for USB4V!\n");
-+ return emu_irq_usb4v;
-+ }
-+ emu_irq_usb1v = platform_get_irq(dev, 1);
-+ if(emu_irq_usb1v < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for USB1V!\n");
-+ return emu_irq_usb1v;
-+ }
-+
-+ request_irq(emu_irq_usb4v, &emu_irq, SA_INTERRUPT, "usb 4v", NULL);
-+ request_irq(emu_irq_usb1v, &emu_irq, SA_INTERRUPT, "usb 1v", NULL);
-+
-+ pxa_set_udc_info(&ezx_udc_info);
-+
-+ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
-+ emu_switch_to_default();
-+ else
-+ emu_switch_to_nothing();
-+
-+ return 0;
-+}
-+
-+static int ezx_emu_remove(struct platform_device *dev)
-+{
-+ free_irq(emu_irq_usb4v, NULL);
-+ free_irq(emu_irq_usb1v, NULL);
-+
-+ 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(PCAP_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(PCAP_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,
-+ .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-09-07 11:32:26.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-09-07 15:34:08.000000000 -0300
-@@ -108,6 +108,28 @@
- config EZX_PCAP
- bool "PCAP Support"
-
-+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/Makefile
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-09-07 11:32:26.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-09-07 15:34:08.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
deleted file mode 100755
index 6f1a2c1ba4..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-enable-stuart.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-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-eoc.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-eoc.patch
deleted file mode 100644
index bf93ebc854..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-eoc.patch
+++ /dev/null
@@ -1,294 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-eoc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-eoc.c 2007-09-24 23:40:45.000000000 -0300
-@@ -0,0 +1,260 @@
-+/*
-+ * EZX EOC Driver for Motorola EZX phones
-+ *
-+ * Copyright (C) 2007 Alex Zhang <celeber2@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/init.h>
-+#include <linux/i2c.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/udc.h>
-+
-+#if 1
-+#define EOC_DBG printk
-+#else
-+#define EOC_DBG(x, args...)
-+#endif
-+
-+#define REG_INT_STATUS 32
-+#define REG_INT_MASK 33
-+#define REG_INT_SENSE 34
-+#define REG_POWER_CONTROL_0 35
-+#define REG_POWER_CONTROL_1 36
-+#define REG_CONN_CONTROL 37
-+
-+#define EOC_REG_ADDR_SIZE 1
-+#define EOC_REG_DATA_SIZE 3
-+#define EOC_FUNC_NOTHING 0
-+#define EOC_FUNC_USB_NET 1
-+
-+static const char eoc_i2c_driver_name[] = "ezx-eoc";
-+static int eoc_func = EOC_FUNC_USB_NET;
-+static struct pxa2xx_udc_mach_info ezx_udc_info;
-+
-+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter);
-+static int ezx_eoc_detach_client(struct i2c_client *client);
-+
-+static struct i2c_client *eoc_i2c_client = NULL;
-+
-+static struct i2c_driver eoc_i2c_driver = {
-+ .driver = {
-+ .name = (char *)eoc_i2c_driver_name,
-+ },
-+ .attach_adapter = ezx_eoc_attach_adapter,
-+ .detach_client = ezx_eoc_detach_client,
-+};
-+
-+int eoc_reg_read(int reg, unsigned int *reg_value)
-+{
-+ unsigned char reg_num = reg;
-+ unsigned char value[EOC_REG_DATA_SIZE];
-+ int retval;
-+
-+ struct i2c_msg msgs[2] =
-+ {
-+ { eoc_i2c_client->addr, 0, EOC_REG_ADDR_SIZE, &reg_num },
-+ { eoc_i2c_client->addr, I2C_M_RD, EOC_REG_DATA_SIZE, value }
-+ };
-+
-+ /* transfer message to client */
-+ retval = i2c_transfer(eoc_i2c_client->adapter, msgs, 2);
-+ if (retval < 0)
-+ return retval;
-+
-+ *reg_value = (value[2] << 0);
-+ *reg_value |= (value[1] << 8);
-+ *reg_value |= (value[0] << 16);
-+ return 0;
-+}
-+
-+int eoc_reg_write(int reg, unsigned int reg_value)
-+{
-+ unsigned char value[EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE];
-+ int retval;
-+
-+ /* Copy the data into a buffer into the correct format */
-+ value[0] = reg;
-+ value[1] = (reg_value >> 16) & 0xFF;
-+ value[2] = (reg_value >> 8) & 0xFF;
-+ value[3] = (reg_value >> 0) & 0xFF;
-+
-+ /* Write the data to the EOC */
-+ retval = i2c_master_send (eoc_i2c_client, value, EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE);
-+ if (retval < 0)
-+ return retval;
-+ return 0;
-+}
-+
-+static void eoc_switch_to_usb(void)
-+{
-+ EOC_DBG("EOC: Switching to USB\n");
-+ 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;
-+ /* FIXME change eoc bits to USB */
-+
-+}
-+
-+static void eoc_switch_to_nothing(void)
-+{
-+ EOC_DBG("EOC: Switching do disconnected\n");
-+ 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);
-+ /* FIXME disconnect mini usb port */
-+}
-+
-+static void eoc_switch_to_default(void)
-+{
-+ switch (eoc_func) {
-+ case EOC_FUNC_USB_NET:
-+ eoc_switch_to_usb();
-+ break;
-+ case EOC_FUNC_NOTHING:
-+ eoc_switch_to_nothing();
-+ break;
-+ }
-+}
-+
-+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter)
-+{
-+ int err = 0;
-+ EOC_DBG(">>>>attach adapter enter\n");
-+
-+ if (eoc_i2c_client != NULL) {
-+ EOC_DBG(">>>>already loaded!!!\n");
-+ return 0;
-+ }
-+
-+ if (!(eoc_i2c_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL)))
-+ return -ENOMEM;
-+
-+ eoc_i2c_client->addr = 0x17;
-+ eoc_i2c_client->adapter = adapter;
-+ eoc_i2c_client->driver = &eoc_i2c_driver;
-+ eoc_i2c_client->flags = 0;
-+ strlcpy(eoc_i2c_client->name, eoc_i2c_driver_name, I2C_NAME_SIZE);
-+
-+ if ((err = i2c_attach_client(eoc_i2c_client))) {
-+ kfree(eoc_i2c_client);
-+ eoc_i2c_client = NULL;
-+ return err;
-+ }
-+ eoc_reg_write(REG_INT_MASK, 0x0000FEF);
-+ eoc_reg_write(REG_POWER_CONTROL_0, 0x0000C00);
-+ eoc_reg_write(REG_POWER_CONTROL_1, 0x000000C);
-+ eoc_reg_write(REG_CONN_CONTROL,0x0021044);
-+
-+ eoc_switch_to_default();
-+ EOC_DBG(">>>>attach adapter exit\n");
-+ return 0;
-+
-+}
-+
-+static int ezx_eoc_detach_client(struct i2c_client *client)
-+{
-+ return i2c_detach_client(client);
-+}
-+
-+static int __init ezx_eoc_probe(struct platform_device *dev)
-+{
-+ int ret;
-+
-+ ret = i2c_add_driver(&eoc_i2c_driver);
-+ if (ret != 0)
-+ return -EINVAL;
-+
-+ pxa_set_udc_info(&ezx_udc_info);
-+
-+ return 0;
-+}
-+
-+static int ezx_eoc_remove(struct platform_device *dev)
-+{
-+ return i2c_del_driver(&eoc_i2c_driver);
-+}
-+
-+static int ezx_eoc_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ eoc_switch_to_nothing();
-+ return 0;
-+}
-+
-+static int ezx_eoc_resume(struct platform_device *dev)
-+{
-+ eoc_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(PCAP_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(PCAP_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 ezx_eoc_driver = {
-+ .probe = ezx_eoc_probe,
-+ .remove = ezx_eoc_remove,
-+ .suspend = ezx_eoc_suspend,
-+ .resume = ezx_eoc_resume,
-+ .driver = {
-+ .name = "ezx-eoc",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+int __init ezx_eoc_init(void)
-+{
-+ return platform_driver_register(&ezx_eoc_driver);
-+}
-+
-+void ezx_eoc_exit(void)
-+{
-+ return platform_driver_unregister(&ezx_eoc_driver);
-+}
-+
-+MODULE_AUTHOR("Alex Zhang <celeber2@gmail.com>");
-+MODULE_DESCRIPTION("EZX EOC I2C driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(ezx_eoc_init);
-+module_exit(ezx_eoc_exit);
-Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-09-24 20:15:00.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-09-24 20:15:16.000000000 -0300
-@@ -108,6 +108,12 @@
- config EZX_PCAP
- bool "PCAP Support"
-
-+config EZX_EOC
-+ tristate "EOC i2c driver of Motorola EZX phones"
-+ depends on I2C && EXPERIMENTAL
-+ help
-+ EOC i2c driver of Motorola EZX phones
-+
- config EZX_EMU
- bool "Motorola Enchanced Mini Usb"
- depends on EZX_PCAP
-Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-09-24 20:15:00.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-09-24 20:15:16.000000000 -0300
-@@ -27,6 +27,7 @@
- obj-$(CONFIG_EZX_BP) += ezx-bp.o
- obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
- obj-$(CONFIG_EZX_EMU) += ezx-emu.o
-+obj-$(CONFIG_EZX_EOC) += ezx-eoc.o
-
- # Support for blinky lights
- led-y := leds.o
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
deleted file mode 100755
index c291f1aadf..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-mtd-map.patch
+++ /dev/null
@@ -1,280 +0,0 @@
-Index: linux-2.6.21/drivers/mtd/maps/Kconfig
-===================================================================
---- linux-2.6.21.orig/drivers/mtd/maps/Kconfig 2007-08-31 22:27:53.000000000 -0300
-+++ linux-2.6.21/drivers/mtd/maps/Kconfig 2007-08-31 23:04:18.000000000 -0300
-@@ -595,6 +595,34 @@
- 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_A1200
-+ bool "A1200 Original Mapping"
-+
-+config MTD_EZX_E2
-+ bool "E2 Original Mapping"
-+
-+config MTD_EZX_E6
-+ bool "E6 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-08-31 22:27:53.000000000 -0300
-+++ linux-2.6.21/drivers/mtd/maps/Makefile 2007-08-31 23:04:18.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-08-21 17:03:43.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 = "Moto Kernel",
-+ .size = 0x000e0000, // 896KB
-+ .offset = 0x00040000,
-+ } , {
-+ .name = "rootfs",
-+ .size = 0x01760000,
-+ .offset = 0x00120000,
-+ } , {
-+ .name = "OpenEZX Kernel",
-+ .size = 0x00180000, // 1.5MB
-+ .offset = 0x01880000,
-+ } , {
-+ .name = "ezxlocal",
-+ .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
deleted file mode 100755
index 604f8eb59b..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch
+++ /dev/null
@@ -1,848 +0,0 @@
-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-08-31 22:48:16.000000000 -0300
-@@ -0,0 +1,513 @@
-+/* 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/ezx.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>
-+
-+#if 0
-+#define DEBUGP(x, args...) printk(x, ## args)
-+#else
-+#define DEBUGP(x, args...)
-+#endif
-+
-+static DEFINE_SPINLOCK(ezx_ssp_lock);
-+static struct ssp_dev ezx_ssp_dev;
-+static struct ssp_state ezx_ssp_state;
-+static struct pcap_platform_data *pcap_data;
-+static int pcap_irq;
-+
-+static unsigned long ezx_ssp_pcap_putget(ulong data)
-+{
-+ unsigned long flag;
-+ u32 ret = 0;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH)
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ else
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+
-+ ssp_write_word(&ezx_ssp_dev,data);
-+ ssp_read_word(&ezx_ssp_dev, &ret);
-+
-+ if (pcap_data->cs >= 0) {
-+ if(pcap_data->flags & PCAP_CS_AH)
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ else
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+
-+ return ret;
-+}
-+
-+int ezx_pcap_write(u_int8_t reg_num, u_int32_t value)
-+{
-+ value &= PCAP_REGISTER_VALUE_MASK;
-+ value |= PCAP_REGISTER_WRITE_OP_BIT
-+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
-+
-+ ezx_ssp_pcap_putget(value);
-+
-+ 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 = PCAP_REGISTER_READ_OP_BIT
-+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
-+
-+ *value = ezx_ssp_pcap_putget(frame);
-+
-+ 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 & PCAP_REGISTER_VALUE_MASK);
-+ u_int8_t reg_num = (sspPcapBit & PCAP_REGISTER_ADDRESS_MASK)
-+ >> 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 & PCAP_REGISTER_ADDRESS_MASK)
-+ >> PCAP_REGISTER_ADDRESS_SHIFT;
-+
-+ ret = ezx_pcap_read(reg_num, &tmp);
-+ if (ret < 0)
-+ return ret;
-+
-+ return tmp & (bit & 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", "INT_SEL\t", "SWCTRL\t", "VREG1\t",
-+ "VREG2\t", "VREG\t", "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC",
-+ "RX_AUD_AMPS", "ST_DAC\t", "RTC_TOD\t", "RTC_TODA", "RTC_DAY\t",
-+ "RTC_DAYA", "MTRTMR\t", "PWRCTRL\t", "BUSCTRL\t", "PERIPH\t",
-+ "AUXVREG_MASK", "VENDOR_REV", "LOWPWR_CTRL", "PERIPH_MASK",
-+ "TX_AUD_AMPS", "GP\t",
-+ 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(PCAP_REG_AUXVREG, &tmp);
-+
-+ tmp &= ~PCAP_AUXVREG_V_VIB_MASK;
-+ tmp |= ((value << PCAP_AUXVREG_V_VIB_SHIFT) & PCAP_AUXVREG_V_VIB_MASK);
-+
-+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
-+}
-+EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level);
-+
-+/* MMC/SD specific functions */
-+
-+void ezx_pcap_mmcsd_voltage(u_int32_t bits)
-+{
-+ unsigned int tmp;
-+ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp);
-+ if (pcap_data->flags & PCAP_MCI_SD) {
-+ tmp &= ~PCAP_AUXVREG_VAUX2_MASK;
-+ tmp |= ((bits << PCAP_AUXVREG_VAUX2_SHIFT) &
-+ PCAP_AUXVREG_VAUX2_MASK);
-+ }
-+ else if (pcap_data->flags & PCAP_MCI_TF) {
-+ tmp &= ~PCAP_AUXVREG_VAUX3_MASK;
-+ tmp |= ((bits << PCAP_AUXVREG_VAUX3_SHIFT) &
-+ PCAP_AUXVREG_VAUX3_MASK);
-+ }
-+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
-+}
-+EXPORT_SYMBOL(ezx_pcap_mmcsd_voltage);
-+
-+int ezx_pcap_mmcsd_power(int on)
-+{
-+ if (on > 0) on = 1;
-+ else on = 0;
-+
-+ if (pcap_data->flags & PCAP_MCI_SD)
-+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX2_EN, on);
-+ else if (pcap_data->flags & PCAP_MCI_TF)
-+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX3_EN, on);
-+ else
-+ return -ENODEV;
-+}
-+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] = EZX_IRQ_1HZ, /* 1HZ */
-+ [3] = EZX_IRQ_WH, /* WH */
-+ [4] = EZX_IRQ_WL, /* WL */
-+ [5] = EZX_IRQ_TODA, /* TODA */
-+ [6] = EZX_IRQ_USB4V,
-+ [7] = EZX_IRQ_ONOFF, /* ONOFF */
-+ [8] = EZX_IRQ_ONOFF2, /* ONOFF2 */
-+ [9] = EZX_IRQ_USB1V,
-+ [10] = EZX_IRQ_MOBPORT, /* MOBPORT */
-+ [11] = EZX_IRQ_MIC,
-+ [12] = EZX_IRQ_HEADJACK,
-+ [13] = EZX_IRQ_ST, /* ST */
-+ [14] = EZX_IRQ_PC, /* PC */
-+ [15] = EZX_IRQ_WARM, /* WARM */
-+ [16] = EZX_IRQ_EOL, /* EOL */
-+ [17] = EZX_IRQ_CLK, /* CLK */
-+ [18] = EZX_IRQ_SYSRST, /* SYSRST */
-+ [19] = 0,
-+ [20] = EZX_IRQ_ADCDONE2,
-+ [21] = EZX_IRQ_SOFTRESET, /* SOFTRESET */
-+ [22] = EZX_IRQ_MNEXB, /* MNEXB */
-+};
-+
-+/* Array indexed by IRQ NUMBER, returns PCAP absolute value */
-+static unsigned int irq2pcap[] = {
-+ [EZX_IRQ_MNEXB] = PCAP_IRQ_MNEXB,
-+ [EZX_IRQ_SOFTRESET] = PCAP_IRQ_SOFTRESET,
-+ [EZX_IRQ_SYSRST] = PCAP_IRQ_SYSRST,
-+ [EZX_IRQ_CLK] = PCAP_IRQ_CLK,
-+ [EZX_IRQ_EOL] = PCAP_IRQ_EOL,
-+ [EZX_IRQ_WARM] = PCAP_IRQ_WARM,
-+ [EZX_IRQ_PC] = PCAP_IRQ_PC,
-+ [EZX_IRQ_ST] = PCAP_IRQ_ST,
-+ [EZX_IRQ_MOBPORT] = PCAP_IRQ_MOBPORT,
-+ [EZX_IRQ_ONOFF2] = PCAP_IRQ_ONOFF2,
-+ [EZX_IRQ_ONOFF] = PCAP_IRQ_ONOFF,
-+ [EZX_IRQ_TODA] = PCAP_IRQ_TODA,
-+ [EZX_IRQ_WL] = PCAP_IRQ_WL,
-+ [EZX_IRQ_WH] = PCAP_IRQ_WH,
-+ [EZX_IRQ_1HZ] = PCAP_IRQ_1HZ,
-+ [EZX_IRQ_USB4V] = PCAP_IRQ_USB4V,
-+ [EZX_IRQ_USB1V] = PCAP_IRQ_USB1V,
-+ [EZX_IRQ_HEADJACK] = PCAP_IRQ_A1,
-+ [EZX_IRQ_MIC] = PCAP_IRQ_MB2,
-+ [EZX_IRQ_TS] = PCAP_IRQ_TS,
-+ [EZX_IRQ_ADCDONE] = PCAP_IRQ_ADCDONE,
-+ [EZX_IRQ_ADCDONE2] = PCAP_IRQ_ADCDONE2,
-+};
-+
-+static void pcap_ack_irq(unsigned int irq)
-+{
-+ DEBUGP("pcap_ack_irq: %u\n", irq);
-+ ezx_pcap_write(PCAP_REG_ISR, irq2pcap[irq]);
-+}
-+
-+static void pcap_mask_irq(unsigned int irq)
-+{
-+ u_int32_t reg;
-+ unsigned long flag;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ DEBUGP("pcap_mask_irq: %u\n", irq);
-+ ezx_pcap_read(PCAP_REG_MSR, &reg);
-+ reg |= irq2pcap[irq];
-+ ezx_pcap_write(PCAP_REG_MSR, reg);
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+}
-+
-+static void pcap_unmask_irq(unsigned int irq)
-+{
-+ u_int32_t tmp;
-+ unsigned long flag;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ DEBUGP("pcap_unmask_irq: %u\n", irq);
-+ ezx_pcap_read(PCAP_REG_MSR, &tmp);
-+ tmp &= ~irq2pcap[irq];
-+ ezx_pcap_write(PCAP_REG_MSR, tmp);
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+}
-+
-+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)
-+{
-+ const unsigned int cpu = smp_processor_id();
-+ int i;
-+ u_int32_t isr, msr;
-+
-+ spin_lock(&desc->lock);
-+ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
-+ if (unlikely(desc->status & (IRQ_INPROGRESS | IRQ_DISABLED))) {
-+ 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))) {
-+ desc->chip->unmask(irq);
-+ desc->status &= ~IRQ_MASKED;
-+ }
-+ desc->status &= ~IRQ_PENDING;
-+
-+ ezx_pcap_read(PCAP_REG_ISR, &isr);
-+ ezx_pcap_read(PCAP_REG_MSR, &msr);
-+ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) {
-+ unsigned int pirq = pcap2irq[i];
-+ struct irq_desc *subdesc;
-+ if (pirq == 0 || !(isr & irq2pcap[pirq]))
-+ continue;
-+ subdesc = irq_desc + pirq;
-+ if (msr & irq2pcap[pirq])
-+ continue;
-+ DEBUGP("found irq %u\n", pirq);
-+ spin_unlock(&desc->lock);
-+ desc_handle_irq(pirq, subdesc);
-+ 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(pcap_irq, NULL);
-+
-+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
-+ set_irq_chip(irq, NULL);
-+ set_irq_handler(irq, NULL);
-+ set_irq_flags(irq, 0);
-+ }
-+
-+ ssp_exit(&ezx_ssp_dev);
-+
-+ return 0;
-+}
-+
-+static int __init ezx_pcap_probe(struct platform_device *pdev)
-+{
-+ unsigned int ret, irq;
-+ DEBUGP("ezx_pcap_probe entered\n");
-+
-+ pcap_data = pdev->dev.platform_data;
-+
-+ /* configure ssp port */
-+ 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);
-+
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH)
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
-+ else
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT
-+ | GPIO_DFLT_HIGH);
-+ }
-+ pcap_irq = platform_get_irq(pdev, 0);
-+ if(pcap_irq < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for pcap!\n");
-+ return pcap_irq;
-+ }
-+
-+ ret = ssp_init(&ezx_ssp_dev, pcap_data->port, 0);
-+ if (ret) {
-+ printk(KERN_ERR "Unable to register SSP handler!\n");
-+ return ret;
-+ }
-+
-+ 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(pcap_data->clk));
-+ ssp_enable(&ezx_ssp_dev);
-+
-+ /* mask/ack all PCAP interrupts */
-+ ezx_pcap_write(PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT);
-+ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER);
-+
-+ if (pcap_data->init)
-+ pcap_data->init();
-+
-+ /* set up interrupt demultiplexing code for PCAP2 irqs */
-+ set_irq_type(pcap_irq, IRQT_RISING);
-+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
-+ set_irq_chip(irq, &pcap_chip);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID);
-+ }
-+ set_irq_chained_handler(pcap_irq, pcap_irq_demux_handler);
-+ set_irq_wake(pcap_irq, 1);
-+
-+ printk("ezx-pcap: ssp driver registered\n");
-+ return ret;
-+}
-+
-+static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ DEBUGP("pcap suspend!\n");
-+ ssp_flush(&ezx_ssp_dev);
-+ ssp_save_state(&ezx_ssp_dev, &ezx_ssp_state);
-+ if (pcap_data->cs >= 0)
-+ pxa_gpio_mode(pcap_data->cs | GPIO_IN);
-+ return 0;
-+}
-+
-+static int ezx_pcap_resume(struct platform_device *dev)
-+{
-+ DEBUGP("pcap resume!\n");
-+
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH) {
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+ else {
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT | GPIO_DFLT_HIGH);
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+ }
-+ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
-+ ssp_enable(&ezx_ssp_dev);
-+
-+ ezx_pcap_write(PCAP_REG_ISR, 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-09-04 23:34:19.000000000 -0300
-@@ -0,0 +1,247 @@
-+/*
-+ * Copyright 2007 Daniel Ribeiro <drwyrm@gmail.com>
-+ */
-+
-+#ifndef EZX_PCAP_H
-+#define EZX_PCAP_H
-+
-+struct pcap_platform_data {
-+ int port; /* SSP port */
-+ int cs; /* CS gpio */
-+ int clk;
-+ int flags; /* driver flags */
-+ int (*init)(void); /* board specific driver init */
-+};
-+
-+/* driver configuration */
-+#define PCAP_CS_AH (1 << 0) /* CS pin is active high */
-+#define PCAP_MCI_SD (1 << 1) /* SD card slot */
-+#define PCAP_MCI_TF (1 << 2) /* TF card slot */
-+
-+#define PCAP_REGISTER_WRITE_OP_BIT 0x80000000
-+#define PCAP_REGISTER_READ_OP_BIT 0x00000000
-+
-+#define PCAP_REGISTER_VALUE_MASK 0x01ffffff
-+#define PCAP_REGISTER_ADDRESS_MASK 0x7c000000
-+#define PCAP_REGISTER_ADDRESS_SHIFT 26
-+#define PCAP_REGISTER_NUMBER 32
-+#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff
-+#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff
-+
-+
-+#define pbit(reg, bit) ((reg << PCAP_REGISTER_ADDRESS_SHIFT) | bit)
-+
-+/* registers acessible by both pcap ports */
-+#define PCAP_REG_ISR 0x0 /* Interrupt Status */
-+#define PCAP_REG_MSR 0x1 /* Interrupt Mask */
-+#define PCAP_REG_PSTAT 0x2 /* Processor Status */
-+#define PCAP_REG_VREG2 0x6 /* Regulator Bank 2 Control */
-+#define PCAP_REG_AUXVREG 0x7 /* Auxiliary Regulator Control */
-+#define PCAP_REG_BATT 0x8 /* Battery Control */
-+#define PCAP_REG_ADC1 0x9 /* AD Control */
-+#define PCAP_REG_ADC2 0xa /* AD Result */
-+#define PCAP_REG_CODEC 0xb /* Audio Codec Control */
-+#define PCAP_REG_RX_AMPS 0xc /* RX Audio Amplifiers Control */
-+#define PCAP_REG_ST_DAC 0xd /* Stereo DAC Control */
-+#define PCAP_REG_BUSCTRL 0x14 /* Connectivity Control */
-+#define PCAP_REG_PERIPH 0x15 /* Peripheral Control */
-+#define PCAP_REG_LOWPWR 0x18 /* Regulator Low Power Control */
-+#define PCAP_REG_TX_AMPS 0x1a /* TX Audio Amplifiers Control */
-+#define PCAP_REG_GP 0x1b /* General Purpose */
-+
-+/* registers acessible by pcap port 1 only (a1200, e2 & e6) */
-+#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */
-+#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */
-+#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */
-+#define PCAP_REG_RTC_TOD 0xe /* RTC Time of Day */
-+#define PCAP_REG_RTC_TODA 0xf /* RTC Time of Day Alarm */
-+#define PCAP_REG_RTC_DAY 0x10 /* RTC Day */
-+#define PCAP_REG_RTC_DAYA 0x11 /* RTC Day Alarm */
-+#define PCAP_REG_MTRTMR 0x12 /* AD Monitor Timer */
-+#define PCAP_REG_PWR 0x13 /* Power Control */
-+#define PCAP_REG_AUXVREG_MASK 0x16 /* Auxiliary Regulator Mask */
-+#define PCAP_REG_VENDOR_REV 0x17
-+#define PCAP_REG_PERIPH_MASK 0x19 /* Peripheral Mask */
-+
-+/* interrupts - registers 0, 1, 2, 3 */
-+#define PCAP_IRQ_ADCDONE (1 << 0) /* AD Conversion Done Port 1 */
-+#define PCAP_IRQ_TS (1 << 1) /* Touch Screen */
-+#define PCAP_IRQ_1HZ (1 << 2) /* 1HZ Timer */
-+#define PCAP_IRQ_WH (1 << 3)
-+#define PCAP_IRQ_WL (1 << 4)
-+#define PCAP_IRQ_TODA (1 << 5)
-+#define PCAP_IRQ_USB4V (1 << 6)
-+#define PCAP_IRQ_ONOFF (1 << 7)
-+#define PCAP_IRQ_ONOFF2 (1 << 8)
-+#define PCAP_IRQ_USB1V (1 << 9)
-+#define PCAP_IRQ_MOBPORT (1 << 10)
-+#define PCAP_IRQ_MB2 (1 << 11) /* Mic */
-+#define PCAP_IRQ_A1 (1 << 12) /* Audio jack */
-+#define PCAP_IRQ_ST (1 << 13)
-+#define PCAP_IRQ_PC (1 << 14)
-+#define PCAP_IRQ_WARM (1 << 15)
-+#define PCAP_IRQ_EOL (1 << 16)
-+#define PCAP_IRQ_CLK (1 << 17)
-+#define PCAP_IRQ_SYSRST (1 << 18)
-+#define PCAP_IRQ_ADCDONE2 (1 << 20) /* AD Conversion Done Port 2 */
-+#define PCAP_IRQ_SOFTRESET (1 << 21)
-+#define PCAP_IRQ_MNEXB (1 << 22)
-+
-+#define PCAP_BIT_VREG2_V1_STBY pbit(PCAP_REG_VREG2, (1 << 0))
-+#define PCAP_BIT_VREG2_V2_STBY pbit(PCAP_REG_VREG2, (1 << 1))
-+#define PCAP_BIT_VREG2_V3_STBY pbit(PCAP_REG_VREG2, (1 << 2))
-+#define PCAP_BIT_VREG2_V4_STBY pbit(PCAP_REG_VREG2, (1 << 3))
-+#define PCAP_BIT_VREG2_V5_STBY pbit(PCAP_REG_VREG2, (1 << 4))
-+#define PCAP_BIT_VREG2_V6_STBY pbit(PCAP_REG_VREG2, (1 << 5))
-+#define PCAP_BIT_VREG2_V7_STBY pbit(PCAP_REG_VREG2, (1 << 6))
-+#define PCAP_BIT_VREG2_V8_STBY pbit(PCAP_REG_VREG2, (1 << 7))
-+#define PCAP_BIT_VREG2_V9_STBY pbit(PCAP_REG_VREG2, (1 << 8))
-+#define PCAP_BIT_VREG2_V10_STBY pbit(PCAP_REG_VREG2, (1 << 9))
-+#define PCAP_BIT_VREG2_V1_LOWPWR pbit(PCAP_REG_VREG2, (1 << 10))
-+#define PCAP_BIT_VREG2_V2_LOWPWR pbit(PCAP_REG_VREG2, (1 << 11))
-+#define PCAP_BIT_VREG2_V3_LOWPWR pbit(PCAP_REG_VREG2, (1 << 12))
-+#define PCAP_BIT_VREG2_V4_LOWPWR pbit(PCAP_REG_VREG2, (1 << 13))
-+#define PCAP_BIT_VREG2_V5_LOWPWR pbit(PCAP_REG_VREG2, (1 << 14))
-+#define PCAP_BIT_VREG2_V6_LOWPWR pbit(PCAP_REG_VREG2, (1 << 15))
-+#define PCAP_BIT_VREG2_V7_LOWPWR pbit(PCAP_REG_VREG2, (1 << 16))
-+#define PCAP_BIT_VREG2_V8_LOWPWR pbit(PCAP_REG_VREG2, (1 << 17))
-+#define PCAP_BIT_VREG2_V9_LOWPWR pbit(PCAP_REG_VREG2, (1 << 18))
-+#define PCAP_BIT_VREG2_V10_LOWPWR pbit(PCAP_REG_VREG2, (1 << 19))
-+
-+#define PCAP_BIT_AUXVREG_VAUX1_EN pbit(PCAP_REG_AUXVREG, (1 << 1))
-+#define PCAP_AUXVREG_VAUX1_MASK 0x0000000c
-+#define PCAP_AUXVREG_VAUX1_SHIFT 2
-+#define PCAP_BIT_AUXVREG_VAUX2_EN pbit(PCAP_REG_AUXVREG, (1 << 4))
-+#define PCAP_AUXVREG_VAUX2_MASK 0x00000060
-+#define PCAP_AUXVREG_VAUX2_SHIFT 5
-+#define PCAP_BIT_AUXVREG_VAUX3_EN pbit(PCAP_REG_AUXVREG, (1 << 7))
-+#define PCAP_AUXVREG_VAUX3_MASK 0x00000f00
-+#define PCAP_AUXVREG_VAUX3_SHIFT 8
-+#define PCAP_BIT_AUXVREG_VAUX4_EN pbit(PCAP_REG_AUXVREG, (1 << 12))
-+#define PCAP_AUXVREG_VAUX4_MASK 0x00006000
-+#define PCAP_AUXVREG_VAUX4_SHIFT 13
-+#define PCAP_BIT_AUXVREG_VSIM2_EN pbit(PCAP_REG_AUXVREG, (1 << 16))
-+#define PCAP_BIT_AUXVREG_VSIM_EN pbit(PCAP_REG_AUXVREG, (1 << 17))
-+#define PCAP_BIT_AUXVREG_VSIM_0 pbit(PCAP_REG_AUXVREG, (1 << 18))
-+#define PCAP_BIT_AUXVREG_V_VIB_EN pbit(PCAP_REG_AUXVREG, (1 << 19))
-+#define PCAP_AUXVREG_V_VIB_MASK 0x00300000
-+#define PCAP_AUXVREG_V_VIB_SHIFT 20
-+#define PCAP_BIT_AUXVREG_VAUX1_STBY pbit(PCAP_REG_AUXVREG, (1 << 22))
-+#define PCAP_BIT_AUXVREG_VAUX1_LOWPWR pbit(PCAP_REG_AUXVREG, (1 << 23))
-+#define PCAP_BIT_AUXVREG_SW3_STBY pbit(PCAP_REG_AUXVREG, (1 << 24))
-+
-+#define PCAP_BATT_DAC_MASK 0x000000ff
-+#define PCAP_BATT_DAC_SHIFT 0
-+#define PCAP_BIT_BATT_B_FDBK pbit(PCAP_REG_BATT, (1 << 8))
-+#define PCAP_BIT_BATT_EXT_ISENSE pbit(PCAP_REG_BATT, (1 << 9))
-+#define PCAP_BATT_V_COIN_MASK 0x00003c00
-+#define PCAP_BATT_V_COIN_SHIFT 10
-+#define PCAP_BIT_BATT_I_COIN pbit(PCAP_REG_BATT, (1 << 14))
-+#define PCAP_BIT_BATT_COIN_CH_EN pbit(PCAP_REG_BATT, (1 << 15))
-+#define PCAP_BATT_EOL_SEL_MASK 0x000e0000
-+#define PCAP_BATT_EOL_SEL_SHIFT 17
-+#define PCAP_BIT_BATT_EOL_CMP_EN pbit(PCAP_REG_BATT, (1 << 20))
-+#define PCAP_BIT_BATT_BATT_DET_EN pbit(PCAP_REG_BATT, (1 << 21))
-+#define PCAP_BIT_BATT_THERMBIAS_CTRL pbit(PCAP_REG_BATT, (1 << 22))
-+
-+#define PCAP_BIT_ADC1_ADEN pbit(PCAP_REG_ADC1, (1 << 0))
-+#define PCAP_BIT_ADC1_RAND pbit(PCAP_REG_ADC1, (1 << 1))
-+#define PCAP_BIT_ADC1_AD_SEL1 pbit(PCAP_REG_ADC1, (1 << 2))
-+#define PCAP_BIT_ADC1_AD_SEL2 pbit(PCAP_REG_ADC1, (1 << 3))
-+#define PCAP_ADC1_ADA1_MASK 0x00000070
-+#define PCAP_ADC1_ADA1_SHIFT 4
-+#define PCAP_ADC1_ADA2_MASK 0x00000380
-+#define PCAP_ADC1_ADA2_SHIFT 7
-+#define PCAP_ADC1_ATO_MASK 0x00003c00
-+#define PCAP_ADC1_ATO_SHIFT 10
-+#define PCAP_BIT_ADC1_ATOX pbit(PCAP_REG_ADC1, (1 << 14))
-+#define PCAP_BIT_ADC1_MTR1 pbit(PCAP_REG_ADC1, (1 << 15))
-+#define PCAP_BIT_ADC1_MTR2 pbit(PCAP_REG_ADC1, (1 << 16))
-+#define PCAP_ADC1_TS_M_MASK 0x000e0000
-+#define PCAP_ADC1_TS_M_SHIFT 17
-+#define PCAP_BIT_ADC1_TS_REF_LOWPWR pbit(PCAP_REG_ADC1, (1 << 20))
-+#define PCAP_BIT_ADC1_TS_REFENB pbit(PCAP_REG_ADC1, (1 << 21))
-+#define PCAP_BIT_ADC1_BATT_I_POLARITY pbit(PCAP_REG_ADC1, (1 << 22))
-+#define PCAP_BIT_ADC1_BATT_I_ADC pbit(PCAP_REG_ADC1, (1 << 23))
-+
-+#define PCAP_ADC2_ADD1_MASK 0x000003ff
-+#define PCAP_ADC2_ADD1_SHIFT 0
-+#define PCAP_ADC2_ADD2_MASK 0x000ffc00
-+#define PCAP_ADC2_ADD2_SHIFT 10
-+#define PCAP_BIT_ADC2_ADINC1 pbit(PCAP_REG_ADC2, (1 << 20))
-+#define PCAP_BIT_ADC2_ADINC2 pbit(PCAP_REG_ADC2, (1 << 21))
-+#define PCAP_BIT_ADC2_ASC pbit(PCAP_REG_ADC2, (1 << 22))
-+
-+#define PCAP_BIT_BUSCTRL_FSENB 0x50000001
-+#define PCAP_BIT_BUSCTRL_USB_SUSPEND 0x50000002
-+#define PCAP_BIT_BUSCTRL_USB_PU 0x50000004
-+#define PCAP_BIT_BUSCTRL_USB_PD 0x50000008
-+#define PCAP_BIT_BUSCTRL_VUSB_EN 0x50000010
-+#define PCAP_BIT_BUSCTRL_USB_PS 0x50000020
-+#define PCAP_BIT_BUSCTRL_VUSB_MSTR_EN 0x50000040
-+#define PCAP_BIT_BUSCTRL_VBUS_PD_ENB 0x50000080
-+#define PCAP_BIT_BUSCTRL_CURRLIM 0x50000100
-+#define PCAP_BIT_BUSCTRL_RS232ENB 0x50000200
-+#define PCAP_BIT_BUSCTRL_RS232_DIR 0x50000400
-+#define PCAP_BIT_BUSCTRL_SE0_CONN 0x50000800
-+#define PCAP_BIT_BUSCTRL_USB_PDM 0x50001000
-+#define PCAP_BIT_BUSCTRL_BUS_PRI_ADJ 0x51000000
-+
-+#define PCAP_BIT_PERIPH_BL_CTRL0 0x54000001
-+#define PCAP_BIT_PERIPH_BL_CTRL1 0x54000002
-+#define PCAP_BIT_PERIPH_BL_CTRL2 0x54000004
-+#define PCAP_BIT_PERIPH_BL_CTRL3 0x54000008
-+#define PCAP_BIT_PERIPH_BL_CTRL4 0x54000010
-+#define PCAP_BIT_PERIPH_LEDR_EN 0x54000020
-+#define PCAP_BIT_PERIPH_LEDG_EN 0x54000040
-+#define PCAP_BIT_PERIPH_LEDR_CTRL0 0x54000080
-+#define PCAP_BIT_PERIPH_LEDR_CTRL1 0x54000100
-+#define PCAP_BIT_PERIPH_LEDR_CTRL2 0x54000200
-+#define PCAP_BIT_PERIPH_LEDR_CTRL3 0x54000400
-+#define PCAP_BIT_PERIPH_LEDG_CTRL0 0x54000800
-+#define PCAP_BIT_PERIPH_LEDG_CTRL1 0x54001000
-+#define PCAP_BIT_PERIPH_LEDG_CTRL2 0x54002000
-+#define PCAP_BIT_PERIPH_LEDG_CTRL3 0x54004000
-+#define PCAP_BIT_PERIPH_LEDR_I0 0x54008000
-+#define PCAP_BIT_PERIPH_LEDR_I1 0x54010000
-+#define PCAP_BIT_PERIPH_LEDG_I0 0x54020000
-+#define PCAP_BIT_PERIPH_LEDG_I1 0x54040000
-+#define PCAP_BIT_PERIPH_SKIP 0x54080000
-+#define PCAP_BIT_PERIPH_BL2_CTRL0 0x54100000
-+#define PCAP_BIT_PERIPH_BL2_CTRL1 0x54200000
-+#define PCAP_BIT_PERIPH_BL2_CTRL2 0x54400000
-+#define PCAP_BIT_PERIPH_BL2_CTRL3 0x54800000
-+#define PCAP_BIT_PERIPH_BL2_CTRL4 0x55000000
-+
-+#define PCAP_BIT_LOWPWR_VAUX2_STBY 0x60000001
-+#define PCAP_BIT_LOWPWR_VAUX2_LOWPWR 0x60000002
-+#define PCAP_BIT_LOWPWR_VAUX3_STBY 0x60000004
-+#define PCAP_BIT_LOWPWR_VAUX3_LOWPWR 0x60000008
-+#define PCAP_BIT_LOWPWR_VAUX4_STBY 0x60000010
-+#define PCAP_BIT_LOWPWR_VAUX4_LOWPWR 0x60000020
-+#define PCAP_BIT_LOWPWR_VSIM_LOWPWR 0x60000040
-+#define PCAP_BIT_LOWPWR_VSIM2_LOWPWR 0x60000080
-+#define PCAP_BIT_LOWPWR_SW1_MODE00 0x60000100
-+#define PCAP_BIT_LOWPWR_SW1_MODE01 0x60000200
-+#define PCAP_BIT_LOWPWR_SW1_MODE10 0x60000400
-+#define PCAP_BIT_LOWPWR_SW1_MODE11 0x60000800
-+#define PCAP_BIT_LOWPWR_SW10_DVS 0x60001000
-+#define PCAP_BIT_LOWPWR_SW11_DVS 0x60002000
-+#define PCAP_BIT_LOWPWR_SW12_DVS 0x60004000
-+#define PCAP_BIT_LOWPWR_SW13_DVS 0x60008000
-+#define PCAP_BIT_LOWPWR_SW2_MODE00 0x60010000
-+#define PCAP_BIT_LOWPWR_SW2_MODE01 0x60020000
-+#define PCAP_BIT_LOWPWR_SW2_MODE10 0x60040000
-+#define PCAP_BIT_LOWPWR_SW2_MODE11 0x60080000
-+#define PCAP_BIT_LOWPWR_SW20_DVS 0x60100000
-+#define PCAP_BIT_LOWPWR_SW21_DVS 0x60200000
-+#define PCAP_BIT_LOWPWR_SW22_DVS 0x60400000
-+#define PCAP_BIT_LOWPWR_SW23_DVS 0x60800000
-+#define PCAP_BIT_LOWPWR_VC_STBY 0x61000000
-+
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
-+extern int ezx_pcap_bit_get(u_int32_t);
-+extern void ezx_pcap_vibrator_level(u_int32_t);
-+#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-08-31 22:28:17.000000000 -0300
-+++ linux-2.6.21/include/asm-arm/arch-pxa/irqs.h 2007-08-31 22:34:36.000000000 -0300
-@@ -85,7 +85,7 @@
- * within sensible limits.
- */
- #define IRQ_BOARD_START (IRQ_GPIO(PXA_LAST_GPIO) + 1)
--#define IRQ_BOARD_END (IRQ_BOARD_START + 16)
-+#define IRQ_BOARD_END (IRQ_BOARD_START + 22)
-
- #define IRQ_SA1111_START (IRQ_BOARD_END)
- #define IRQ_GPAIN0 (IRQ_BOARD_END + 0)
-@@ -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,28 @@
- #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 */
-+#define EZX_IRQ_WH EZX_IRQ(7)
-+#define EZX_IRQ_WL EZX_IRQ(8)
-+#define EZX_IRQ_ONOFF EZX_IRQ(9)
-+#define EZX_IRQ_ONOFF2 EZX_IRQ(10)
-+#define EZX_IRQ_MOBPORT EZX_IRQ(11)
-+#define EZX_IRQ_TODA EZX_IRQ(12)
-+#define EZX_IRQ_1HZ EZX_IRQ(13)
-+#define EZX_IRQ_MNEXB EZX_IRQ(14)
-+#define EZX_IRQ_ST EZX_IRQ(15)
-+#define EZX_IRQ_PC EZX_IRQ(16)
-+#define EZX_IRQ_SYSRST EZX_IRQ(17)
-+#define EZX_IRQ_SOFTRESET EZX_IRQ(18)
-+#define EZX_IRQ_EOL EZX_IRQ(19)
-+#define EZX_IRQ_CLK EZX_IRQ(20)
-+#define EZX_IRQ_WARM EZX_IRQ(21)
-Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-08-31 22:33:05.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-09-07 11:06:01.000000000 -0300
-@@ -105,6 +105,9 @@
- config EZX_BP
- bool "BP Control code for EZX Platform"
-
-+config EZX_PCAP
-+ bool "PCAP Support"
-+
- endif
-
- endmenu
-Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-08-31 22:33:05.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-09-07 11:06:01.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
deleted file mode 100755
index 05748e681c..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/pxa27x.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/pxa27x.c 2007-09-21 23:57:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/pxa27x.c 2007-09-21 23:57:49.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-09-21 23:57:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/pm.c 2007-09-21 23:57:49.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-09-21 23:57:48.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-09-22 00:07:34.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/ohci.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/system.h>
-
- #include "generic.h"
-
-@@ -122,8 +123,53 @@
- &ezxbp_device,
- };
-
-+/* PM */
-+extern int bp_handshake_passed(void);
-+
-+static void ezx_reboot_poweroff(char mode)
-+{
-+ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG;
-+ cpu_proc_fin();
-+
-+#ifdef CONFIG_EZX_BP
-+ 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');
-+ 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;
-
- pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
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
deleted file mode 100755
index 9f30cc35fe..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/ezx-serial-bug-workaround.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-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/i2c-core-fix-a1200.patch b/packages/linux/linux-ezx-2.6.21/patches/i2c-core-fix-a1200.patch
deleted file mode 100644
index bd69e38bd7..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/i2c-core-fix-a1200.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: linux-2.6.21/drivers/i2c/i2c-core.c
-===================================================================
---- linux-2.6.21.orig/drivers/i2c/i2c-core.c 2007-08-20 21:59:45.000000000 +0800
-+++ linux-2.6.21/drivers/i2c/i2c-core.c 2007-08-20 22:03:12.000000000 +0800
-@@ -365,8 +365,10 @@
- list_for_each(item,&adapters) {
- adapter = list_entry(item, struct i2c_adapter, list);
- driver->attach_adapter(adapter);
-+ goto out; // Alex added for fix the bug otherwise system will be crashed. FIXME
- }
- }
-+out:
-
- mutex_unlock(&core_lists);
- return 0;
diff --git a/packages/linux/linux-ezx-2.6.21/patches/index.html b/packages/linux/linux-ezx-2.6.21/patches/index.html
deleted file mode 100644
index 6cd7a62548..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/index.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<html><head><title>Revision 2064: /trunk/src/kernel-2.6/patches</title></head>
-<body>
- <h2>Revision 2064: /trunk/src/kernel-2.6/patches</h2>
- <ul>
- <li><a href="../">..</a></li>
- <li><a href="Makefile.OpenEZX">Makefile.OpenEZX</a></li>
- <li><a href="a1200-eoc.patch">a1200-eoc.patch</a></li>
- <li><a href="a1200-flip.patch">a1200-flip.patch</a></li>
- <li><a href="a1200-kbd.patch">a1200-kbd.patch</a></li>
- <li><a href="a1200-mci.patch">a1200-mci.patch</a></li>
- <li><a href="a1200-pcap.patch">a1200-pcap.patch</a></li>
- <li><a href="a1200-ts.patch">a1200-ts.patch</a></li>
- <li><a href="a780-emu.patch">a780-emu.patch</a></li>
- <li><a href="a780-flip.patch">a780-flip.patch</a></li>
- <li><a href="a780-kbd.patch">a780-kbd.patch</a></li>
- <li><a href="a780-leds.patch">a780-leds.patch</a></li>
- <li><a href="a780-mci.patch">a780-mci.patch</a></li>
- <li><a href="a780-pcap.patch">a780-pcap.patch</a></li>
- <li><a href="a780-ts.patch">a780-ts.patch</a></li>
- <li><a href="a780-vibrator.patch">a780-vibrator.patch</a></li>
- <li><a href="asoc-fix-loopback.patch">asoc-fix-loopback.patch</a></li>
- <li><a href="asoc-pxa-ssp.patch">asoc-pxa-ssp.patch</a></li>
- <li><a href="defconfig-a1200">defconfig-a1200</a></li>
- <li><a href="defconfig-a780">defconfig-a780</a></li>
- <li><a href="defconfig-e2">defconfig-e2</a></li>
- <li><a href="defconfig-e6">defconfig-e6</a></li>
- <li><a href="defconfig-e680">defconfig-e680</a></li>
- <li><a href="dmesg-a780.log">dmesg-a780.log</a></li>
- <li><a href="e6-eoc.patch">e6-eoc.patch</a></li>
- <li><a href="e6-mci.patch">e6-mci.patch</a></li>
- <li><a href="e6-pcap.patch">e6-pcap.patch</a></li>
- <li><a href="e6-ts.patch">e6-ts.patch</a></li>
- <li><a href="e680-emu.patch">e680-emu.patch</a></li>
- <li><a href="e680-kbd.patch">e680-kbd.patch</a></li>
- <li><a href="e680-leds.patch">e680-leds.patch</a></li>
- <li><a href="e680-locksw.patch">e680-locksw.patch</a></li>
- <li><a href="e680-mci.patch">e680-mci.patch</a></li>
- <li><a href="e680-pcap.patch">e680-pcap.patch</a></li>
- <li><a href="e680-ts.patch">e680-ts.patch</a></li>
- <li><a href="ezx-asoc.patch">ezx-asoc.patch</a></li>
- <li><a href="ezx-backlight.patch">ezx-backlight.patch</a></li>
- <li><a href="ezx-bp.patch">ezx-bp.patch</a></li>
- <li><a href="ezx-core.patch">ezx-core.patch</a></li>
- <li><a href="ezx-emu.patch">ezx-emu.patch</a></li>
- <li><a href="ezx-enable-stuart.patch">ezx-enable-stuart.patch</a></li>
- <li><a href="ezx-eoc.patch">ezx-eoc.patch</a></li>
- <li><a href="ezx-mtd-map.patch">ezx-mtd-map.patch</a></li>
- <li><a href="ezx-pcap.patch">ezx-pcap.patch</a></li>
- <li><a href="ezx-pm.patch">ezx-pm.patch</a></li>
- <li><a href="ezx-serial-bug-workaround.patch">ezx-serial-bug-workaround.patch</a></li>
- <li><a href="mtdfix.patch">mtdfix.patch</a></li>
- <li><a href="mux-fix-init-errorpath.patch">mux-fix-init-errorpath.patch</a></li>
- <li><a href="mux-fix-makefile.patch">mux-fix-makefile.patch</a></li>
- <li><a href="mux-fix-tty-driver.patch">mux-fix-tty-driver.patch</a></li>
- <li><a href="mux-fix.patch">mux-fix.patch</a></li>
- <li><a href="mux-ifdef-ezx-features.patch">mux-ifdef-ezx-features.patch</a></li>
- <li><a href="mux-linux-2.6.21-fix.patch">mux-linux-2.6.21-fix.patch</a></li>
- <li><a href="mux-remove-flipbuffers.patch">mux-remove-flipbuffers.patch</a></li>
- <li><a href="mux-remove-get_halted_bit.patch">mux-remove-get_halted_bit.patch</a></li>
- <li><a href="mux-remove-usbh_finished_resume.patch">mux-remove-usbh_finished_resume.patch</a></li>
- <li><a href="mux_cli.patch">mux_cli.patch</a></li>
- <li><a href="mux_debug.patch">mux_debug.patch</a></li>
- <li><a href="patch-2.6.21.4">patch-2.6.21.4</a></li>
- <li><a href="pcap-ts.patch">pcap-ts.patch</a></li>
- <li><a href="pxa-kbd.patch">pxa-kbd.patch</a></li>
- <li><a href="pxa27x-udc-fix-a1200.patch">pxa27x-udc-fix-a1200.patch</a></li>
- <li><a href="pxa27x-udc-support.2.patch">pxa27x-udc-support.2.patch</a></li>
- <li><a href="pxa27x_overlay-r5.patch">pxa27x_overlay-r5.patch</a></li>
- <li><a href="series">series</a></li>
- </ul>
- <hr noshade><em>Powered by <a href="http://subversion.tigris.org/">Subversion</a> version 1.1.4 (r13838).</em>
-</body></html> \ No newline at end of file
diff --git a/packages/linux/linux-ezx-2.6.21/patches/lcd_18BPP_support.diff b/packages/linux/linux-ezx-2.6.21/patches/lcd_18BPP_support.diff
deleted file mode 100644
index a0d89bfee5..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/lcd_18BPP_support.diff
+++ /dev/null
@@ -1,270 +0,0 @@
-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-08-18 18:35:12.000000000 +0800
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-08-18 18:36:38.000000000 +0800
-@@ -122,7 +122,7 @@
- .pixclock = 192308,
- .xres = 240,
- .yres = 320,
-- .bpp = 8,
-+ .bpp = 18,
- .hsync_len = 10,
- .left_margin = 20,
- .right_margin = 10,
-@@ -135,8 +135,8 @@
- static struct pxafb_mach_info a1200_fb_info = {
- .modes = &mode_a1200,
- .num_modes = 1,
-- .lccr0 = 0x022008B8,
-- .lccr3 = 0xC130FF13,
-+ .lccr0 = 0x002008b8,
-+ .lccr3 = 0xC630FF13,
- .pxafb_backlight_power = ezx_backlight_power,
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-Index: linux-2.6.21/drivers/video/cfbfillrect.c
-===================================================================
---- linux-2.6.21.orig/drivers/video/cfbfillrect.c 2007-08-18 18:38:36.000000000 +0800
-+++ linux-2.6.21/drivers/video/cfbfillrect.c 2007-08-18 18:39:03.000000000 +0800
-@@ -87,7 +87,10 @@
- return 0x00001001ul*pixel;
- case 16:
- return 0x00010001ul*pixel;
-+ case 18:
-+ case 19:
- case 24:
-+ case 25:
- return 0x00000001ul*pixel;
- case 32:
- return 0x00000001ul*pixel;
-Index: linux-2.6.21/drivers/video/pxafb.c
-===================================================================
---- linux-2.6.21.orig/drivers/video/pxafb.c 2007-08-18 17:58:11.000000000 +0800
-+++ linux-2.6.21/drivers/video/pxafb.c 2007-08-18 18:46:50.000000000 +0800
-@@ -9,6 +9,8 @@
- * which in turn is
- * Based on acornfb.c Copyright (C) Russell King.
- *
-+ * Added 18,19,24,25 BPP support by Alex Zhang <celeber2@gmail.com>
-+ *
- * 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.
-@@ -190,6 +192,10 @@
- case 4: ret = LCCR3_4BPP; break;
- case 8: ret = LCCR3_8BPP; break;
- case 16: ret = LCCR3_16BPP; break;
-+ case 18: ret = LCCR3_18BPP; break;
-+ case 19: ret = LCCR3_19BPP; break;
-+ case 24: ret = LCCR3_24BPP; break;
-+ case 25: ret = LCCR3_25BPP; break;
- }
- return ret;
- }
-@@ -274,6 +280,8 @@
- if (var->yres < MIN_YRES)
- var->yres = MIN_YRES;
-
-+ if (var->bits_per_pixel == 32) var->bits_per_pixel = 18; // ALEX cheats Xserver
-+
- if (inf->fixed_modes) {
- struct pxafb_mode_info *mode;
-
-@@ -306,6 +314,26 @@
- var->green.offset = 5; var->green.length = 6;
- var->blue.offset = 0; var->blue.length = 5;
- var->transp.offset = var->transp.length = 0;
-+ } else if (var->bits_per_pixel == 18) {
-+ var->red.offset = 12; var->red.length = 6;
-+ var->green.offset = 6; var->green.length = 6;
-+ var->blue.offset = 0; var->blue.length = 6;
-+ var->transp.offset = var->transp.length = 0;
-+ } else if (var->bits_per_pixel == 19) {
-+ var->red.offset = 12; var->red.length = 6;
-+ var->green.offset = 6; var->green.length = 6;
-+ var->blue.offset = 0; var->blue.length = 6;
-+ var->transp.offset= 18; var->transp.length = 1;
-+ } else if (var->bits_per_pixel == 24) {
-+ var->red.offset = 16; var->red.length = 8;
-+ var->green.offset = 8; var->green.length = 8;
-+ var->blue.offset = 0; var->blue.length = 8;
-+ var->transp.offset = var->transp.length = 0;
-+ } else if (var->bits_per_pixel == 25) {
-+ var->red.offset = 16; var->red.length = 8;
-+ var->green.offset = 8; var->green.length = 8;
-+ var->blue.offset = 0; var->blue.length = 8;
-+ var->transp.offset= 24; var->transp.length = 1;
- } else {
- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0;
- var->red.length = 8;
-@@ -341,7 +369,12 @@
-
- pr_debug("pxafb: set_par\n");
-
-- if (var->bits_per_pixel == 16)
-+ if (var->bits_per_pixel == 16
-+ || var->bits_per_pixel == 18
-+ || var->bits_per_pixel == 19
-+ || var->bits_per_pixel == 24
-+ || var->bits_per_pixel == 25
-+ )
- fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR;
- else if (!fbi->cmap_static)
- fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-@@ -354,12 +387,25 @@
- fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
- }
-
-- fbi->fb.fix.line_length = var->xres_virtual *
-- var->bits_per_pixel / 8;
-- if (var->bits_per_pixel == 16)
-- fbi->palette_size = 0;
-- else
-- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ fbi->fb.fix.line_length = var->xres_virtual * 2;
-+ fbi->palette_size = 0;
-+ break;
-+ case 18:
-+ case 19:
-+ fbi->fb.fix.line_length = var->xres_virtual * 3;
-+ fbi->palette_size = 0;
-+ break;
-+ case 24:
-+ case 25:
-+ fbi->fb.fix.line_length = var->xres_virtual * 4;
-+ fbi->palette_size = 0;
-+ break;
-+ default:
-+ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
-+ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
-+ }
-
- palette_mem_size = fbi->palette_size * sizeof(u16);
-
-@@ -373,8 +419,13 @@
- */
- pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR);
-
-- if (fbi->fb.var.bits_per_pixel == 16)
-- fb_dealloc_cmap(&fbi->fb.cmap);
-+ if (fbi->fb.var.bits_per_pixel == 16
-+ || fbi->fb.var.bits_per_pixel == 18
-+ || fbi->fb.var.bits_per_pixel == 19
-+ || fbi->fb.var.bits_per_pixel == 24
-+ || fbi->fb.var.bits_per_pixel == 25
-+ )
-+ fb_dealloc_cmap(&fbi->fb.cmap);
- else
- fb_alloc_cmap(&fbi->fb.cmap, 1<<fbi->fb.var.bits_per_pixel, 0);
-
-@@ -582,6 +633,9 @@
- case 4:
- case 8:
- case 16:
-+ case 18:
-+ case 24:
-+ case 25:
- break;
- default:
- printk(KERN_ERR "%s: invalid bit depth %d\n",
-@@ -678,7 +732,12 @@
- fbi->dmadesc_palette_cpu->fidr = 0;
- fbi->dmadesc_palette_cpu->ldcmd = (fbi->palette_size * 2) | LDCMD_PAL;
-
-- if (var->bits_per_pixel == 16) {
-+ if (var->bits_per_pixel == 16
-+ || var->bits_per_pixel == 18
-+ || var->bits_per_pixel == 19
-+ || var->bits_per_pixel == 24
-+ || var->bits_per_pixel == 25
-+ ) {
- /* palette shouldn't be loaded in true-color mode */
- fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma;
- fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */
-@@ -786,6 +845,11 @@
-
- for (gpio = 58; ldd_bits; gpio++, ldd_bits--)
- pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT);
-+ if (fbi->fb.var.bits_per_pixel == 18) {
-+ pxa_gpio_mode(GPIO86_LDD_16_MD);
-+ pxa_gpio_mode(GPIO87_LDD_17_MD);
-+ }
-+
- pxa_gpio_mode(GPIO74_LCD_FCLK_MD);
- pxa_gpio_mode(GPIO75_LCD_LCLK_MD);
- pxa_gpio_mode(GPIO76_LCD_PCLK_MD);
-@@ -1154,9 +1218,17 @@
- fbi->task_state = (u_char)-1;
-
- for (i = 0; i < inf->num_modes; i++) {
-- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
-+ if (mode[i].bpp <= 16) /* 8, 16 bpp */
-+ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
-+ else if (mode[i].bpp > 19) /* 24, 25 bpp */
-+ smemlen = mode[i].xres * mode[i].yres * 4;
-+ else /* 18, 19 bpp */
-+ /* packed format */
-+ smemlen = mode[i].xres * mode[i].yres * 3;
-+
- if (smemlen > fbi->fb.fix.smem_len)
- fbi->fb.fix.smem_len = smemlen;
-+ dev_dbg("ALEX::bpp=%d, smemlen=%d, fbi->fb.fix.smem_len=%d\n", mode[i].bpp, smemlen, fbi->fb.fix.smem_len);
- }
-
- init_waitqueue_head(&fbi->ctrlr_wait);
-@@ -1225,6 +1297,10 @@
- case 4:
- case 8:
- case 16:
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
- inf->modes[0].bpp = bpp;
- dev_info(dev, "overriding bit depth: %d\n", bpp);
- break;
-@@ -1423,6 +1499,9 @@
- */
- set_ctrlr_state(fbi, C_ENABLE);
-
-+ LCCR4 |= (1 << 31);
-+ LCCR4 |= (5 << 17);
-+
- return 0;
-
- failed:
-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-08-18 18:26:01.000000000 +0800
-+++ linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h 2007-08-18 18:32:29.000000000 +0800
-@@ -1485,6 +1485,8 @@
- #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 GPIO86_LDD_16_MD (86 | GPIO_ALT_FN_2_OUT)
-+#define GPIO87_LDD_17_MD (87 | GPIO_ALT_FN_2_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)
-@@ -1869,6 +1871,7 @@
- #define LCCR1 __REG(0x44000004) /* LCD Controller Control Register 1 */
- #define LCCR2 __REG(0x44000008) /* LCD Controller Control Register 2 */
- #define LCCR3 __REG(0x4400000C) /* LCD Controller Control Register 3 */
-+#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */
- #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
- #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
- #define LCSR __REG(0x44000038) /* LCD Controller Status Register */
-@@ -1881,6 +1884,11 @@
- #define LCCR3_4BPP (2 << 24)
- #define LCCR3_8BPP (3 << 24)
- #define LCCR3_16BPP (4 << 24)
-+#define LCCR3_18BPP_UNPACKED (5 << 24)
-+#define LCCR3_18BPP (6 << 24)
-+#define LCCR3_19BPP (8 << 24)
-+#define LCCR3_24BPP (9 << 24)
-+#define LCCR3_25BPP (10<< 24)
-
- #define FDADR0 __REG(0x44000200) /* DMA Channel 0 Frame Descriptor Address Register */
- #define FSADR0 __REG(0x44000204) /* DMA Channel 0 Frame Source Address Register */
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mtdfix.patch b/packages/linux/linux-ezx-2.6.21/patches/mtdfix.patch
deleted file mode 100644
index 89a8402681..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mtdfix.patch
+++ /dev/null
@@ -1,41 +0,0 @@
---- /tmp/cacheflush.h 2007-09-10 15:22:58.188856413 +0200
-+++ linux-2.6.21/include/asm-arm/cacheflush.h 2007-09-10 15:23:14.009757994 +0200
-@@ -418,6 +418,14 @@
- */
- #define flush_icache_page(vma,page) do { } while (0)
-
-+inline static void flush_ioremap_region(unsigned long phys, void __iomem *virt,
-+ unsigned offset, size_t size)
-+{
-+ const void *start = virt + offset;
-+ dmac_inv_range(start, start + size);
-+}
-+
-+
- #define __cacheid_present(val) (val != read_cpuid(CPUID_ID))
- #define __cacheid_vivt(val) ((val & (15 << 25)) != (14 << 25))
- #define __cacheid_vipt(val) ((val & (15 << 25)) == (14 << 25))
---- /tmp/ezx-flash.c 2007-09-10 15:22:58.192856640 +0200
-+++ linux-2.6.21/drivers/mtd/maps/ezx-flash.c 2007-09-10 15:23:24.878377362 +0200
-@@ -21,6 +21,8 @@
- #include <linux/dma-mapping.h>
- #include <linux/slab.h>
-
-+#include <asm/cacheflush.h>
-+
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/map.h>
- #include <linux/mtd/partitions.h>
-@@ -51,11 +53,10 @@
- "sub pc, pc #4"
- :"=r"(j));
- #else
-- consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE);
-+ flush_ioremap_region(map->phys, map->cached, from, len);
- #endif
- }
-
--
- struct map_info pxa27x_map = {
- .name = "PXA27x flash",
- .size = WINDOW_SIZE,
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
deleted file mode 100755
index 716ef86fd1..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-fix-init-errorpath.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100755
index 31452da847..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-fix-makefile.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-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
deleted file mode 100755
index 2e1aabd952..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-fix-tty-driver.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-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
deleted file mode 100755
index b820762f41..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-fix.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-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
deleted file mode 100755
index e7935a2598..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-ifdef-ezx-features.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-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
deleted file mode 100755
index 8d5299e3bd..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-linux-2.6.21-fix.patch
+++ /dev/null
@@ -1,297 +0,0 @@
-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
deleted file mode 100755
index d4781f9fc7..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-remove-flipbuffers.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-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
deleted file mode 100755
index 0ebe27d03b..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-remove-get_halted_bit.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100755
index c415ded428..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux-remove-usbh_finished_resume.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100755
index b3974a5996..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux_cli.patch
+++ /dev/null
@@ -1,5396 +0,0 @@
-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
deleted file mode 100755
index 58cb25a0b6..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/mux_debug.patch
+++ /dev/null
@@ -1,551 +0,0 @@
-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
deleted file mode 100644
index 2c2ed60433..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/patch-2.6.21.4
+++ /dev/null
@@ -1,2816 +0,0 @@
-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
deleted file mode 100755
index 40ed7f4605..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/pcap-ts.patch
+++ /dev/null
@@ -1,363 +0,0 @@
-Index: linux-2.6.21/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.21.orig/drivers/input/touchscreen/Kconfig 2007-08-31 22:27:48.000000000 -0300
-+++ linux-2.6.21/drivers/input/touchscreen/Kconfig 2007-08-31 23:06:39.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-08-31 23:57:56.000000000 -0300
-@@ -0,0 +1,331 @@
-+/*
-+ * 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 POSITION_X_MEASUREMENT 0
-+#define POSITION_XY_MEASUREMENT 1
-+#define PRESSURE_MEASUREMENT 2
-+#define PLATE_X_MEASUREMENT 3
-+#define PLATE_Y_MEASUREMENT 4
-+#define STANDBY_MODE 5
-+#define NONTS_MODE 6
-+
-+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(struct pcap_ts *pcap_ts, u_int32_t mode)
-+{
-+ u_int32_t tmp;
-+
-+ pcap_ts->read_state = mode;
-+ ezx_pcap_read(PCAP_REG_ADC1, &tmp);
-+ tmp &= ~PCAP_ADC1_TS_M_MASK;
-+ tmp |= ((mode << PCAP_ADC1_TS_M_SHIFT) & PCAP_ADC1_TS_M_MASK);
-+ ezx_pcap_write(PCAP_REG_ADC1, tmp);
-+}
-+
-+/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE 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(PCAP_REG_ADC1, &tmp);
-+ tmp &= ~(PCAP_BIT_ADC1_RAND | PCAP_ADC1_ADA1_MASK |
-+ PCAP_ADC1_ADA2_MASK);
-+ tmp |= (PCAP_BIT_ADC1_ADEN | PCAP_BIT_ADC1_AD_SEL1 |
-+ PCAP_BIT_ADC1_AD_SEL2 | (5 << PCAP_ADC1_ADA1_SHIFT) |
-+ (3 << PCAP_ADC1_ADA2_SHIFT));
-+ ezx_pcap_write(PCAP_REG_ADC1, tmp);
-+ ezx_pcap_bit_set(PCAP_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(PCAP_REG_ADC2, &tmp);
-+
-+ if (pcap_ts->read_state == POSITION_XY_MEASUREMENT) {
-+ pcap_ts->x = (tmp & PCAP_ADC2_ADD1_MASK) >>
-+ PCAP_ADC2_ADD1_SHIFT;
-+ pcap_ts->y = (tmp & PCAP_ADC2_ADD2_MASK) >>
-+ PCAP_ADC2_ADD2_SHIFT;
-+ } else {
-+ pcap_ts->pressure = (tmp & PCAP_ADC2_ADD2_MASK) >>
-+ PCAP_ADC2_ADD2_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 == POSITION_XY_MEASUREMENT ? "COORD" :
-+ "PRESS", pcap_ts->x, pcap_ts->y, pcap_ts->pressure);
-+ switch (pcap_ts->read_state) {
-+ case PRESSURE_MEASUREMENT:
-+ 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_mode(pcap_ts, POSITION_XY_MEASUREMENT);
-+ pcap_ts_start_xy_read(pcap_ts);
-+ break;
-+ case POSITION_XY_MEASUREMENT:
-+ 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_mode(pcap_ts, STANDBY_MODE);
-+ enable_irq(pcap_ts->irq_touch);
-+ } 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_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 */
-+ disable_irq(pcap_ts->irq_touch);
-+
-+ DEBUGP("touched!!\n");
-+ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT);
-+ 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)
-+{
-+ 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;
-+ }
-+
-+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REFENB, 0);
-+ pcap_ts_mode(pcap_ts, STANDBY_MODE);
-+
-+ 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);
-+
-+ 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(PCAP_BIT_ADC1_TS_REF_LOWPWR, 1);
-+ return 0;
-+}
-+
-+static int ezxts_resume(struct platform_device *dev)
-+{
-+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 0);
-+ /* just in case we suspend with TSI masked. */
-+// ezx_pcap_bit_set(PCAP_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-08-31 22:27:48.000000000 -0300
-+++ linux-2.6.21/drivers/input/touchscreen/Makefile 2007-08-31 23:06:39.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
deleted file mode 100755
index 425a5b984c..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/pxa-kbd.patch
+++ /dev/null
@@ -1,534 +0,0 @@
-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-fix-a1200.patch b/packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-fix-a1200.patch
deleted file mode 100644
index 1dd6edd7c3..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-fix-a1200.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-This hack hardcodes pxa27x-udc to ether_gadget. This is just a temp workaround.
-Index: linux-2.6.21/drivers/usb/gadget/ether.c
-===================================================================
---- linux-2.6.21.orig/drivers/usb/gadget/ether.c 2007-09-23 09:32:51.000000000 -0300
-+++ linux-2.6.21/drivers/usb/gadget/ether.c 2007-09-23 09:32:52.000000000 -0300
-@@ -2697,10 +2697,16 @@
- MODULE_LICENSE ("GPL");
-
-
--static int __init init (void)
-+// Alex add FIXME
-+int usb_ether_init (void)
- {
- return usb_gadget_register_driver (&eth_driver);
- }
-+
-+static int __init init (void)
-+{
-+// return usb_gadget_register_driver (&eth_driver);
-+}
- module_init (init);
-
- static void __exit cleanup (void)
-Index: linux-2.6.21/drivers/usb/gadget/pxa27x_udc.c
-===================================================================
---- linux-2.6.21.orig/drivers/usb/gadget/pxa27x_udc.c 2007-09-23 09:32:51.000000000 -0300
-+++ linux-2.6.21/drivers/usb/gadget/pxa27x_udc.c 2007-09-23 09:32:52.000000000 -0300
-@@ -2227,6 +2227,8 @@
- udc_init_ep(udc);
- udc_reinit(udc);
-
-+ usb_ether_init(); // Alex add FIXME
-+
- /* irq setup after old hardware state is cleaned up */
- retval = request_irq(IRQ_USB, pxa27x_udc_irq,
- SA_INTERRUPT, driver_name, udc);
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
deleted file mode 100755
index d35e40f046..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-support.2.patch
+++ /dev/null
@@ -1,3037 +0,0 @@
-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
deleted file mode 100755
index 99f95a6c07..0000000000
--- a/packages/linux/linux-ezx-2.6.21/patches/series
+++ /dev/null
@@ -1,106 +0,0 @@
-patch-2.6.21.4
-mtdfix.patch
-pxa27x_overlay-r5.patch
-
-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:
-# move vibrator level function to the vibrator driver
-
-a780-pcap.patch
-e680-pcap.patch
-a1200-pcap.patch
-e6-pcap.patch
-
-a780-mci.patch
-e680-mci.patch
-a1200-mci.patch
-e6-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
-a780-emu.patch
-e680-emu.patch
-
-pxa27x-udc-fix-a1200.patch #(see ezx-a1200.c)
-ezx-eoc.patch
-a1200-eoc.patch
-e6-eoc.patch
-
-ezx-mtd-map.patch
-
-ezx-serial-bug-workaround.patch
-
-pxa-kbd.patch
-a780-kbd.patch
-e680-kbd.patch
-a1200-kbd.patch
-
-pcap-ts.patch
-a780-ts.patch
-e680-ts.patch
-a1200-ts.patch
-e6-ts.patch
-
-ezx-backlight.patch
-
-a780-flip.patch
-e680-locksw.patch
-a1200-flip.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
-
-asoc-pxa-ssp.patch
-asoc-fix-loopback.patch
-ezx-asoc.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
-
-# the folowing break too much stuff on other phones.
-
-# incomplete
-
diff --git a/packages/linux/linux-ezx-2.6.21/rokre2/defconfig b/packages/linux/linux-ezx-2.6.21/rokre2/defconfig
deleted file mode 100755
index 7e22a3c371..0000000000
--- a/packages/linux/linux-ezx-2.6.21/rokre2/defconfig
+++ /dev/null
@@ -1,1583 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Sun Sep 9 16:52:11 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=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_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 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_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=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=y
-
-#
-# 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=y
-CONFIG_EZX_PCAP=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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=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=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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.21/rokre6/defconfig b/packages/linux/linux-ezx-2.6.21/rokre6/defconfig
deleted file mode 100755
index 8201825d75..0000000000
--- a/packages/linux/linux-ezx-2.6.21/rokre6/defconfig
+++ /dev/null
@@ -1,1586 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Sat Sep 15 19:35:32 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=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_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 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_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=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=y
-
-#
-# 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=y
-CONFIG_EZX_PCAP=y
-CONFIG_EZX_EOC=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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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=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_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=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_EZX=N
-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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=n
-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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.21/update_patches.sh b/packages/linux/linux-ezx-2.6.21/update_patches.sh
deleted file mode 100644
index d63a1e8e7d..0000000000
--- a/packages/linux/linux-ezx-2.6.21/update_patches.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/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-2.6.23/a1200/defconfig b/packages/linux/linux-ezx-2.6.23/a1200/defconfig
deleted file mode 100755
index 4649d7ba96..0000000000
--- a/packages/linux/linux-ezx-2.6.23/a1200/defconfig
+++ /dev/null
@@ -1,1208 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:03:17 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-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 is not set
-# CONFIG_MTD_EZX_A780_ALTERNATE is not set
-CONFIG_MTD_EZX_A1200=y
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/a780/defconfig b/packages/linux/linux-ezx-2.6.23/a780/defconfig
deleted file mode 100755
index c59efc8906..0000000000
--- a/packages/linux/linux-ezx-2.6.23/a780/defconfig
+++ /dev/null
@@ -1,1502 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 31 09:05:11 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-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=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_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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC is not set
-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
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# 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 is not set
-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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# 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=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_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 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_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=m
-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=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=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_CT_PROTO_UDPLITE=m
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NETFILTER_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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_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 is not set
-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_U32=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=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=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 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=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
-CONFIG_NET_SCH_FIFO=y
-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=y
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=y
-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=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_HCIVHCI is not set
-# CONFIG_AF_RXRPC is not set
-CONFIG_FIB_RULES=y
-
-#
-# Wireless
-#
-CONFIG_CFG80211=m
-CONFIG_WIRELESS_EXT=y
-CONFIG_MAC80211=m
-CONFIG_MAC80211_LEDS=y
-# CONFIG_MAC80211_DEBUG 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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-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 is not set
-CONFIG_MTD_EZX_A780_ALTERNATE=y
-# CONFIG_MTD_EZX_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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_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 is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# 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_TUNER_TEA5761 is not set
-# CONFIG_V4L_USB_DRIVERS is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-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=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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-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 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
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# 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_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=m
-
-#
-# DMA Engine support
-#
-CONFIG_DMA_ENGINE=y
-
-#
-# DMA Clients
-#
-CONFIG_NET_DMA=y
-
-#
-# 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=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 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=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=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=m
-
-#
-# 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=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=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 is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_ABLKCIPHER=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 is not set
-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_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 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=m
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-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
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/e680/defconfig b/packages/linux/linux-ezx-2.6.23/e680/defconfig
deleted file mode 100755
index 9a30ce673f..0000000000
--- a/packages/linux/linux-ezx-2.6.23/e680/defconfig
+++ /dev/null
@@ -1,1584 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Sun Sep 9 16:51:47 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=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_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 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_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=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=y
-
-#
-# 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_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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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 is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=n
-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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX
deleted file mode 100644
index e7e9115e3c..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/Makefile.OpenEZX
+++ /dev/null
@@ -1,77 +0,0 @@
-# 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 e6 e2
-
-CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi-
-QUILT_PATCHES ?= patches
-
-LV ?= ezxdev# replace LOCALVERSION string
-J ?= 2 # simultaneous jobs
-SIG ?= 0 # BOOL sign md5sums file
-
-DATE = $(shell date +%Y%m%d)
-DEPLOY_SERVER ?= people.openezx.org
-DEPLOY_DIR ?= public_html/images/$(DATE)/
-
-all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz)
-
-zImages: $(foreach p, $(PHONES), zImage-$(p))
-
-modules: $(foreach p, $(PHONES), modules-$(p).tar.gz)
-
-config: $(foreach p, $(PHONES), config-$(p))
-
-config-%: $(QUILT_PATCHES)/defconfig-%
- cp $< .config
- make ARCH=arm oldconfig
- cp .config $<
-
-deploy: release
- ssh $(DEPLOY_SERVER) \
- mkdir -p $(DEPLOY_DIR)
- scp ezxrelease-$(DATE).tar $(DEPLOY_SERVER):$(DEPLOY_DIR)
- ssh $(DEPLOY_SERVER) \
- cd $(DEPLOY_DIR)\; \
- tar -xf ezxrelease-$(DATE).tar\; \
- rm -f ezxrelease-$(DATE).tar
-
-release: $(foreach p, $(PHONES), tag-$(p))
- cp md5sums.tmp md5sums
- test "$(SIG)" = "1" && \
- cat md5sums.tmp | gpg --clearsign > md5sums \
- ; echo
- 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) && \
- mv zImage-$$p zImage-$$tag-$$p && \
- mv 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-%
- cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
- make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage
- mv arch/arm/boot/zImage $@
-
-modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-%
- cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
- -find . -name "*.ko" -print0 | xargs -r0 rm
- mkdir -p Makefile.OpenEZX-tmp/$@
- make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
- make -j1 ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \
- INSTALL_MOD_PATH=Makefile.OpenEZX-tmp/$@ modules_install
- tar -C Makefile.OpenEZX-tmp/$@ -czf $@ .
- rm -rf Makefile.OpenEZX-tmp/
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch
deleted file mode 100644
index 77aec1c629..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a1200-eoc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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-09-24 20:14:54.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-24 20:15:18.000000000 -0300
-@@ -203,8 +203,15 @@
- },
- };
-
-+
-+struct platform_device a1200_eoc_device = {
-+ .name = "ezx-eoc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
-+ &a1200_eoc_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch
deleted file mode 100644
index d932ca1605..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a1200-flip.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 19:37:28.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 19:40:22.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>
-@@ -292,11 +293,34 @@
- .num_resources = ARRAY_SIZE(pcap_ts_resources),
- .resource = pcap_ts_resources,
- };
-+/* Flip */
-+#undef GPIO_FLIP_PIN
-+#define GPIO_FLIP_PIN 15 /* FIXME */
-+static struct gpio_keys_button a1200flip_buttons[] = {
-+ [0] = {
-+ .code = KEY_SLEEP,
-+ .gpio = GPIO_FLIP_PIN,
-+ .desc = "A1200 flip",
-+ },
-+};
-+
-+static struct gpio_keys_platform_data a1200flip_platform_data = {
-+ .buttons = a1200flip_buttons,
-+ .nbuttons = 1,
-+};
-+static struct platform_device a1200flip_device = {
-+ .name = "gpio-keys",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &a1200flip_platform_data,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
- &pcap_ts_device,
-+ &a1200flip_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch
deleted file mode 100644
index 5771f6d359..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a1200-kbd.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-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-09-25 00:03:01.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:40.000000000 -0300
-@@ -15,6 +15,7 @@
- #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>
-@@ -23,11 +24,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -209,6 +212,63 @@
- .id = -1,
- };
-
-+/* Keypad */
-+static unsigned char a1200_keycode[] = {
-+ /* row 0 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 1 */
-+ KEY_RIGHT, KEY_DOWN, KEY_KPENTER, KEY_UP, KEY_LEFT,
-+ /* row 2 */
-+ KEY_PAGEDOWN, KEY_CAMERA, KEY_RECORD, KEY_HOME, KEY_PAGEUP,
-+ /* row 3 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 4 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 5 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_MENU, KEY_RESERVED, KEY_RESERVED,
-+};
-+/*
-+static unsigned char a1200_direct_keycode[] = {
-+ KEY_CAMERA,
-+};
-+*/
-+
-+static int a1200_kbd_init(void)
-+{
-+ 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(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
-+ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
-+ 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> */
-+ pxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<5> */
-+
-+ PKWR = 0xEC000;
-+ PGSR3 |= 0x1F80;
-+ return 0;
-+}
-+
-+static struct pxakbd_platform_data a1200_kbd_platform_data = {
-+ .init = &a1200_kbd_init,
-+ .scan_interval = HZ/40,
-+ .matrix = {
-+ .keycode = a1200_keycode,
-+ .cols = 6,
-+ .rows = 5,
-+ },
-+/*
-+ .direct = {
-+ .keycode = a1200_direct_keycode,
-+ .num = 1,
-+ },
-+*/
-+};
-+
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
-@@ -218,6 +278,7 @@
- {
- set_pxa_fb_info(&a1200_fb_info);
- pxa_set_mci_info(&a1200_mci_platform_data);
-+ pxa_set_kbd_info(&a1200_kbd_platform_data);
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
- }
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch
deleted file mode 100644
index e5f3257d11..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a1200-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 18:58:55.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 19:37:21.000000000 +0200
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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[] = {
-+ [ilog2(MMC_VDD_165_195)] = 6,
-+ [ilog2(MMC_VDD_20_21)] = 7,
-+ [ilog2(MMC_VDD_21_22)] = 8,
-+ [ilog2(MMC_VDD_22_23)] = 8,
-+ [ilog2(MMC_VDD_23_24)] = 9,
-+ [ilog2(MMC_VDD_24_25)] = 9,
-+ [ilog2(MMC_VDD_25_26)] = 10,
-+ [ilog2(MMC_VDD_26_27)] = 10,
-+ [ilog2(MMC_VDD_27_28)] = 11,
-+ [ilog2(MMC_VDD_28_29)] = 11,
-+ [ilog2(MMC_VDD_29_30)] = 12,
-+ [ilog2(MMC_VDD_30_31)] = 12,
-+ [ilog2(MMC_VDD_31_32)] = 13,
-+ [ilog2(MMC_VDD_32_33)] = 13,
-+ [ilog2(MMC_VDD_33_34)] = 14,
-+ [ilog2(MMC_VDD_34_35)] = 14,
-+ [ilog2(MMC_VDD_35_36)] = 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, IRQF_DISABLED,
-+ "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)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ 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_165_195|MMC_VDD_20_21|MMC_VDD_21_22
-+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
-+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
-+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
-+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
-+ |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,
-@@ -118,6 +210,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.23/patches/a1200-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-pcap.patch
deleted file mode 100644
index 8aa1e46d73..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a1200-pcap.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-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-09-07 11:32:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-07 11:51:55.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,70 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init a1200_pcap_init(void)
-+{
-+ /*
-+ * FIXME: this is the PCAP INITIAL STATE.
-+ * most of these writes should NOT be done here
-+ * * voltage regulators, voltage enablers should be set by the
-+ * driver which uses the connected hardware. Otherwise you
-+ * drain power unnecessarily.
-+ * * interrupt related registers should be set by the irq functions
-+ * only. I think that the INT_SEL register selects on which irq
-+ * pin the (ap/bp) the irq goes. This should go on ezx-pcap.c, but
-+ * only if it actually makes any difference.
-+ * * Only power state automatic changes should be done here.
-+ * (*LOWPWR, *STBY, LOWPWR*)
-+ * * I removed some writes which i consider extremelly wrong. And
-+ * which i think will not break anything (they were overwritten
-+ * later anyway).
-+ *
-+ * --WM
-+ */
-+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
-+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
-+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
-+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
-+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data a1200_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_CS_AH | PCAP_MCI_TF,
-+ .clk = 1,
-+ .init = a1200_pcap_init,
-+};
-+
-+static struct resource a1200_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device a1200_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(a1200_pcap_resources),
-+ .resource = a1200_pcap_resources,
-+ .dev = {
-+ .platform_data = &a1200_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &a1200_pcap_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch
deleted file mode 100644
index bf328cd931..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a1200-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-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-09-25 02:00:40.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-09-25 02:00:53.000000000 -0300
-@@ -269,9 +269,34 @@
- };
-
-
-+/* PCAP_TS */
-+struct resource pcap_ts_resources[] = {
-+ [0] = {
-+ .start = EZX_IRQ_ADCDONE,
-+ .end = EZX_IRQ_ADCDONE,
-+ .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,
-+ .dev = {
-+ .parent = &a1200_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
-+ &pcap_ts_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch
deleted file mode 100644
index ae9237394d..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-emu.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:03:48.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:04:03.000000000 +0200
-@@ -212,8 +212,33 @@
- },
- };
-
-+/* EMU */
-+static struct resource a780_emu_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 a780_emu_device = {
-+ .name = "ezx-emu",
-+ .id = -1,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(a780_emu_resources),
-+ .resource = a780_emu_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
-+ &a780_emu_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch
deleted file mode 100644
index 44b97880ca..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-flip.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200
-@@ -18,6 +18,7 @@
- #include <linux/irq.h>
- #include <linux/log2.h>
- #include <linux/input.h>
-+#include <linux/gpio_keys.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -312,10 +313,33 @@
- .resource = pcap_ts_resources,
- };
-
-+static struct gpio_keys_button a780flip_buttons[] = {
-+ [0] = {
-+ .code = 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 = {
- &a780_pcap_device,
- &a780_emu_device,
- &pcap_ts_device,
-+ &a780flip_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch
deleted file mode 100644
index df60384b9c..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-kbd.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:36:54.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200
-@@ -17,6 +17,7 @@
- #include <linux/mmc/host.h>
- #include <linux/irq.h>
- #include <linux/log2.h>
-+#include <linux/input.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -25,11 +26,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -236,6 +239,55 @@
- .resource = a780_emu_resources,
- };
-
-+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 = {
- &a780_pcap_device,
- &a780_emu_device,
-@@ -256,6 +308,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.23/patches/a780-leds.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-leds.patch
deleted file mode 100644
index 94aae070ae..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-leds.patch
+++ /dev/null
@@ -1,187 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.23/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-23 19:35:34.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Kconfig 2007-10-23 19:38:13.000000000 +0200
-@@ -110,6 +110,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.23/drivers/leds/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/leds/Makefile 2007-10-23 19:35:34.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Makefile 2007-10-23 19:38:13.000000000 +0200
-@@ -17,6 +17,7 @@
- obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
- obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
- obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
-+obj-$(CONFIG_LEDS_A780) += leds-a780.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
-Index: linux-2.6.23/drivers/leds/leds-a780.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/leds/leds-a780.c 2007-10-23 19:38:09.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(PCAP_BIT_PERIPH_BL_CTRL0, value & 0x01);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL1, value & 0x02);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL2, value & 0x04);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL3, value & 0x08);
-+ ezx_pcap_bit_set(PCAP_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(PCAP_BIT_PERIPH_BL2_CTRL0, value & 0x01);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL1, value & 0x02);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL2, value & 0x04);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL3, value & 0x08);
-+ ezx_pcap_bit_set(PCAP_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.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:09.000000000 +0200
-@@ -334,12 +334,20 @@
- },
- };
-
-+static struct platform_device a780led_device = {
-+ .name = "a780-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
- &a780_emu_device,
- &pcap_ts_device,
- &a780flip_device,
-+ &a780led_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch
deleted file mode 100644
index 1e427b33f9..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-mci.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 12:38:08.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 12:44:42.000000000 +0200
-@@ -14,6 +14,9 @@
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/fb.h>
-+#include <linux/mmc/host.h>
-+#include <linux/irq.h>
-+#include <linux/log2.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -21,12 +24,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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[] = {
-+ [ilog2(MMC_VDD_165_195)] = 6,
-+ [ilog2(MMC_VDD_20_21)] = 7,
-+ [ilog2(MMC_VDD_21_22)] = 8,
-+ [ilog2(MMC_VDD_22_23)] = 8,
-+ [ilog2(MMC_VDD_23_24)] = 9,
-+ [ilog2(MMC_VDD_24_25)] = 9,
-+ [ilog2(MMC_VDD_25_26)] = 10,
-+ [ilog2(MMC_VDD_26_27)] = 10,
-+ [ilog2(MMC_VDD_27_28)] = 11,
-+ [ilog2(MMC_VDD_28_29)] = 11,
-+ [ilog2(MMC_VDD_29_30)] = 12,
-+ [ilog2(MMC_VDD_30_31)] = 12,
-+ [ilog2(MMC_VDD_31_32)] = 13,
-+ [ilog2(MMC_VDD_32_33)] = 13,
-+ [ilog2(MMC_VDD_33_34)] = 14,
-+ [ilog2(MMC_VDD_34_35)] = 14,
-+ [ilog2(MMC_VDD_35_36)] = 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, IRQF_DISABLED,
-+ "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)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ 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_165_195|MMC_VDD_20_21|MMC_VDD_21_22
-+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
-+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
-+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
-+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
-+ |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,
-@@ -137,6 +230,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);
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch
deleted file mode 100644
index afb5d9c005..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-pcap.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-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-08-31 22:33:03.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-08-31 23:01:17.000000000 -0300
-@@ -20,6 +20,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -49,7 +50,77 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init a780_pcap_init(void)
-+{
-+ /* initialize PCAP registers */
-+ /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
-+
-+ /* SW1 active in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
-+
-+ /* at SW1 -core voltage to 1.30V */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
-+
-+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
-+
-+ /*
-+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+ * camera for e680
-+ */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
-+
-+ /* set Vc to low power mode when AP sleep */
-+// SSP_PCAP_bit_set(PCAP_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+ /* set VAUX2 to low power mode when AP sleep */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data a780_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_MCI_TF,
-+ .clk = 1,
-+ .init = a780_pcap_init,
-+};
-+
-+static struct resource a780_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device a780_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(a780_pcap_resources),
-+ .resource = a780_pcap_resources,
-+ .dev = {
-+ .platform_data = &a780_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &a780_pcap_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch
deleted file mode 100644
index e1dd6ca5c6..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200
-@@ -288,9 +288,34 @@
- },
- };
-
-+/* 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,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
- &a780_emu_device,
-+ &pcap_ts_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch
deleted file mode 100644
index f9fe614af6..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/a780-vibrator.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Index: linux-2.6.23/drivers/leds/leds-a780.c
-===================================================================
---- linux-2.6.23.orig/drivers/leds/leds-a780.c 2007-10-22 22:26:07.000000000 +0200
-+++ linux-2.6.23/drivers/leds/leds-a780.c 2007-10-22 22:26:46.000000000 +0200
-@@ -40,6 +40,17 @@
- ezx_pcap_bit_set(PCAP_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 );
-+ ezx_pcap_vibrator_level(value-1);
-+ if (value == 0)
-+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 0);
-+ else
-+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 1);
-+}
-+
- static struct led_classdev a780_main_led = {
- .name = "a780:main",
- .default_trigger = "none",
-@@ -52,11 +63,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 +82,7 @@
- {
- led_classdev_resume(&a780_main_led);
- led_classdev_resume(&a780_aux_led);
-+ led_classdev_resume(&a780_vibrator);
- return 0;
- }
- #endif
-@@ -77,8 +96,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 +114,7 @@
- {
- led_classdev_unregister(&a780_main_led);
- led_classdev_unregister(&a780_aux_led);
-+ led_classdev_unregister(&a780_vibrator);
- return 0;
- }
-
-@@ -111,6 +139,7 @@
- {
- 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.23/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-22 22:26:42.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Kconfig 2007-10-22 22:26:46.000000000 +0200
-@@ -111,11 +111,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.23/patches/asoc-fix-loopback.patch b/packages/linux/linux-ezx-2.6.23/patches/asoc-fix-loopback.patch
deleted file mode 100644
index feea138984..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/asoc-fix-loopback.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c
-===================================================================
---- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:30:56.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:36:26.000000000 -0300
-@@ -153,7 +153,8 @@
- static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
- {
- struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
--
-+ /* no dma if on loopback */
-+ if (!prtd->params) return 0;
- DCSR(prtd->dma_ch) &= ~DCSR_RUN;
- DCSR(prtd->dma_ch) = 0;
- DCMD(prtd->dma_ch) = 0;
diff --git a/packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch
deleted file mode 100644
index e53b61c352..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/asoc-pxa-ssp.patch
+++ /dev/null
@@ -1,755 +0,0 @@
-Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c 2007-10-22 22:27:11.000000000 +0200
-@@ -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 0
-+
-+/*
-+ * 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] = {CKEN_SSP1, CKEN_SSP2, CKEN_SSP3};
-+#else
-+static int cken[3] = {CKEN_SSP, CKEN_NSSP, CKEN_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.23/sound/soc/pxa/pxa2xx-ssp.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h 2007-10-22 22:27:11.000000000 +0200
-@@ -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.23/sound/soc/pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-10 09:38:42.000000000 +0200
-+++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200
-@@ -18,6 +18,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.23/sound/soc/pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-10 09:38:42.000000000 +0200
-+++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200
-@@ -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.23/patches/binutils-buildid-arm.patch b/packages/linux/linux-ezx-2.6.23/patches/binutils-buildid-arm.patch
deleted file mode 100644
index 68e35e89e1..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/binutils-buildid-arm.patch
+++ /dev/null
@@ -1,16 +0,0 @@
----
- arch/arm/kernel/vmlinux.lds.S | 1 +
- 1 file changed, 1 insertion(+)
-
-Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S
-===================================================================
---- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200
-+++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200
-@@ -94,6 +94,7 @@
- TEXT_TEXT
- SCHED_TEXT
- LOCK_TEXT
-+ *(.note.*)
- #ifdef CONFIG_MMU
- *(.fixup)
- #endif
diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a1200 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-a1200
deleted file mode 100644
index 4649d7ba96..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a1200
+++ /dev/null
@@ -1,1208 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:03:17 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-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 is not set
-# CONFIG_MTD_EZX_A780_ALTERNATE is not set
-CONFIG_MTD_EZX_A1200=y
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a780 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-a780
deleted file mode 100644
index 921fa94b69..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-a780
+++ /dev/null
@@ -1,1214 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:00:57 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC is not set
-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
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-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_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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
-# CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e2 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-e2
deleted file mode 100644
index 206ae45fc7..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e2
+++ /dev/null
@@ -1,1189 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:05:01 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_KEYBOARD_PXA27x 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_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e6 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-e6
deleted file mode 100644
index 733566adc6..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e6
+++ /dev/null
@@ -1,1203 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:07:51 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e680 b/packages/linux/linux-ezx-2.6.23/patches/defconfig-e680
deleted file mode 100644
index 738e10324c..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/defconfig-e680
+++ /dev/null
@@ -1,1214 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 17:55:27 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC is not set
-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
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-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_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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
-# CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log b/packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log
deleted file mode 100644
index 6b15077676..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/dmesg-a780.log
+++ /dev/null
@@ -1,299 +0,0 @@
-<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.23/patches/e6-eoc.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-eoc.patch
deleted file mode 100644
index 3824079c15..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e6-eoc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-24 20:14:54.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-24 20:15:18.000000000 -0300
-@@ -203,8 +203,15 @@
- },
- };
-
-+
-+struct platform_device e6_eoc_device = {
-+ .name = "ezx-eoc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e6_pcap_device,
-+ &e6_eoc_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch
deleted file mode 100644
index 09886f42d4..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e6-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-10-24 19:35:51.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-10-24 19:58:02.000000000 +0200
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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 e6_mci_platform_data;
-+
-+static u_int8_t mmc_voltage[] = {
-+ [ilog2(MMC_VDD_165_195)] = 6,
-+ [ilog2(MMC_VDD_20_21)] = 7,
-+ [ilog2(MMC_VDD_21_22)] = 8,
-+ [ilog2(MMC_VDD_22_23)] = 8,
-+ [ilog2(MMC_VDD_23_24)] = 9,
-+ [ilog2(MMC_VDD_24_25)] = 9,
-+ [ilog2(MMC_VDD_25_26)] = 10,
-+ [ilog2(MMC_VDD_26_27)] = 10,
-+ [ilog2(MMC_VDD_27_28)] = 11,
-+ [ilog2(MMC_VDD_28_29)] = 11,
-+ [ilog2(MMC_VDD_29_30)] = 12,
-+ [ilog2(MMC_VDD_30_31)] = 12,
-+ [ilog2(MMC_VDD_31_32)] = 13,
-+ [ilog2(MMC_VDD_32_33)] = 13,
-+ [ilog2(MMC_VDD_33_34)] = 14,
-+ [ilog2(MMC_VDD_34_35)] = 14,
-+ [ilog2(MMC_VDD_35_36)] = 15,
-+};
-+
-+static int e6_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);
-+
-+ e6_mci_platform_data.detect_delay = msecs_to_jiffies(250);
-+
-+ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED,
-+ "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 e6_mci_setpower(struct device *dev, unsigned int vdd)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
-+
-+ ezx_pcap_mmcsd_power(1);
-+}
-+
-+static void e6_mci_exit(struct device *dev, void *data)
-+{
-+ ezx_pcap_mmcsd_power(0);
-+ free_irq(0x49, data);
-+}
-+
-+static struct pxamci_platform_data e6_mci_platform_data = {
-+ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22
-+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
-+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
-+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
-+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
-+ |MMC_VDD_34_35|MMC_VDD_35_36,
-+ .init = e6_mci_init,
-+ .setpower = e6_mci_setpower,
-+ .exit = e6_mci_exit,
-+};
-+
- static struct pxafb_mode_info mode_e6 = {
- .pixclock = 192308,
- .xres = 240,
-@@ -118,6 +210,7 @@
- static void __init e6_init(void)
- {
- set_pxa_fb_info(&e6_fb_info);
-+ pxa_set_mci_info(&e6_mci_platform_data);
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
- }
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch
deleted file mode 100644
index a11adbc02e..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e6-pcap.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:32:32.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-07 11:51:55.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,70 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init e6_pcap_init(void)
-+{
-+ /*
-+ * FIXME: this is the PCAP INITIAL STATE.
-+ * most of these writes should NOT be done here
-+ * * voltage regulators, voltage enablers should be set by the
-+ * driver which uses the connected hardware. Otherwise you
-+ * drain power unnecessarily.
-+ * * interrupt related registers should be set by the irq functions
-+ * only. I think that the INT_SEL register selects on which irq
-+ * pin the (ap/bp) the irq goes. This should go on ezx-pcap.c, but
-+ * only if it actually makes any difference.
-+ * * Only power state automatic changes should be done here.
-+ * (*LOWPWR, *STBY, LOWPWR*)
-+ * * I removed some writes which i consider extremelly wrong. And
-+ * which i think will not break anything (they were overwritten
-+ * later anyway).
-+ *
-+ * --WM
-+ */
-+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
-+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
-+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
-+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
-+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data e6_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_CS_AH | PCAP_MCI_SD,
-+ .clk = 1,
-+ .init = e6_pcap_init,
-+};
-+
-+static struct resource e6_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device e6_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(e6_pcap_resources),
-+ .resource = e6_pcap_resources,
-+ .dev = {
-+ .platform_data = &e6_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &e6_pcap_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch
deleted file mode 100644
index ad4a52eeec..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e6-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e6.c 2007-09-25 00:03:01.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-09-25 02:00:58.000000000 -0300
-@@ -209,9 +209,34 @@
- .id = -1,
- };
-
-+/* PCAP_TS */
-+struct resource pcap_ts_resources[] = {
-+ [0] = {
-+ .start = EZX_IRQ_ADCDONE,
-+ .end = EZX_IRQ_ADCDONE,
-+ .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,
-+ .dev = {
-+ .parent = &e6_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e6_pcap_device,
- &e6_eoc_device,
-+ &pcap_ts_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch
deleted file mode 100644
index 6302bba8c7..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-emu.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:32.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200
-@@ -212,8 +212,33 @@
- },
- };
-
-+/* EMU */
-+static struct resource e680_emu_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 e680_emu_device = {
-+ .name = "ezx-emu",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(e680_emu_resources),
-+ .resource = e680_emu_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
-+ &e680_emu_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch
deleted file mode 100644
index 27e33a0641..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-kbd.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200
-@@ -15,6 +15,7 @@
- #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>
-@@ -23,11 +24,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -236,6 +239,58 @@
- .resource = e680_emu_resources,
- };
-
-+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 = {
- &e680_pcap_device,
- &e680_emu_device,
-@@ -256,6 +311,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.23/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-leds.patch
deleted file mode 100644
index 871f99be95..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-leds.patch
+++ /dev/null
@@ -1,300 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.23/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-24 20:02:07.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Kconfig 2007-10-24 20:02:07.000000000 +0200
-@@ -117,6 +117,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.23/drivers/leds/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/leds/Makefile 2007-10-24 20:02:07.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Makefile 2007-10-24 20:02:07.000000000 +0200
-@@ -18,6 +18,7 @@
- obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
- obj-$(CONFIG_LEDS_GPIO) += leds-gpio.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.23/drivers/leds/leds-e680.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/leds/leds-e680.c 2007-10-24 20:02:07.000000000 +0200
-@@ -0,0 +1,235 @@
-+/*
-+ * 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);
-+
-+typedef struct {
-+ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */
-+ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */
-+ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
-+ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
-+ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
-+ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
-+ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
-+ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
-+// u_int8_t 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[]=
-+{
-+ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */
-+
-+ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */
-+ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */
-+ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */
-+ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */
-+ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */
-+ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */
-+ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */
-+};
-+
-+static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ unsigned int tempValue;
-+ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl,
-+ ledg_ctrl, ledr_i, ledg_i, skip, t, color;
-+ unsigned char t_mask[2] = { 0xc, 0xc };
-+
-+ skip = 0;
-+ if (value & 128) {
-+ value &= (~128);
-+ skip = 1;
-+ }
-+
-+ /* 7 colors - simple on */
-+ if (value <= 7)
-+ color = value;
-+ /* 4 colors - 11 timed on */
-+ else if (value <= 51) {
-+ value -= 7;
-+ color = ((value-1)%4)+1;
-+ t = ((value-1)/4)+1;
-+ t_mask[0] = t;
-+ t_mask[1] = t;
-+ }
-+ /* 3 colors - 22 change color */
-+ else if (value <= 84) {
-+ value -= 51;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[1] = t;
-+ }
-+ else if (value <= 117) {
-+ value -= 84;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[0] = t;
-+ }
-+ /* 3 colors - alternate with blue */
-+ else if (value <= 120) {
-+ color = value-113;
-+ t_mask[0] = 0xa;
-+ t_mask[1] = 0xb;
-+ }
-+ /* invalid value */
-+ else
-+ color = 1;
-+
-+ gpio_red = led_register_value[color].ind_GPIO_red;
-+ gpio_green = led_register_value[color].ind_GPIO_green;
-+ ledr_en = led_register_value[color].pcap_LEDR_en;
-+ ledg_en = led_register_value[color].pcap_LEDG_en;
-+ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0];
-+ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1];
-+ ledr_i = led_register_value[color].pcap_LEDR_I;
-+ ledg_i = led_register_value[color].pcap_LEDG_I;
-+
-+ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue);
-+
-+ tempValue &= (~SSP_PCAP_LED_MASK);
-+
-+ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red);
-+ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green);
-+
-+ /* Write PCAP LED Peripheral Control Register*/
-+ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) |
-+ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) |
-+ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT;
-+
-+ ezx_pcap_write(PCAP_REG_PERIPH,tempValue);
-+}
-+
-+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_led = {
-+ .name = "e680:led",
-+ .default_trigger = "none",
-+ .brightness_set = e680led_set,
-+};
-+
-+static struct led_classdev e680_keypad = {
-+ .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_led);
-+ led_classdev_suspend(&e680_keypad);
-+ return 0;
-+}
-+
-+static int e680led_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&e680_led);
-+ led_classdev_resume(&e680_keypad);
-+ return 0;
-+}
-+#endif
-+
-+static int e680led_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ /* configure GPIOs as output */
-+ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
-+ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_keypad);
-+ if (ret < 0) {
-+ led_classdev_unregister(&e680_led);
-+ }
-+ return ret;
-+}
-+
-+static int e680led_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&e680_led);
-+ led_classdev_unregister(&e680_keypad);
-+ 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)
-+{
-+ 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.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:02:05.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:02:07.000000000 +0200
-@@ -337,11 +337,20 @@
- },
- };
-
-+static struct platform_device e680led_device = {
-+ .name = "e680-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
- &pcap_ts_device,
- &e680locksw_device,
-+ &e680led_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch
deleted file mode 100644
index 6bb6687400..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-locksw.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:58:55.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:59:23.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>
-@@ -315,10 +316,32 @@
- .resource = pcap_ts_resources,
- };
-
-+static struct gpio_keys_button e680locksw_buttons[] = {
-+ [0] = {
-+ .code = 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 = {
- &e680_pcap_device,
- &e680_emu_device,
- &pcap_ts_device,
-+ &e680locksw_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch
deleted file mode 100644
index 73981823cf..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-mci.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 13:03:06.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:54:35.000000000 +0200
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,104 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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[] = {
-+ [ilog2(MMC_VDD_165_195)] = 3,
-+ [ilog2(MMC_VDD_20_21)] = 3,
-+ [ilog2(MMC_VDD_21_22)] = 3,
-+ [ilog2(MMC_VDD_22_23)] = 3,
-+ [ilog2(MMC_VDD_23_24)] = 3,
-+ [ilog2(MMC_VDD_24_25)] = 3,
-+ [ilog2(MMC_VDD_25_26)] = 3,
-+ [ilog2(MMC_VDD_26_27)] = 3,
-+ [ilog2(MMC_VDD_27_28)] = 3,
-+ [ilog2(MMC_VDD_28_29)] = 3,
-+ [ilog2(MMC_VDD_29_30)] = 3,
-+ [ilog2(MMC_VDD_30_31)] = 3,
-+ [ilog2(MMC_VDD_31_32)] = 3,
-+ [ilog2(MMC_VDD_32_33)] = 3,
-+ [ilog2(MMC_VDD_33_34)] = 3,
-+ [ilog2(MMC_VDD_34_35)] = 3,
-+ [ilog2(MMC_VDD_35_36)] = 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, IRQF_DISABLED,
-+ "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)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ 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,
-@@ -136,6 +230,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);
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch
deleted file mode 100644
index 12ce023749..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-pcap.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-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-09-06 00:41:38.000000000 -0300
-+++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-09-06 00:44:56.000000000 -0300
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,77 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int __init e680_pcap_init(void)
-+{
-+ /* initialize PCAP registers */
-+ /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
-+
-+ /* SW1 active in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
-+
-+ /* at SW1 -core voltage to 1.30V */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
-+
-+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
-+
-+ /*
-+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+ * camera for e680
-+ */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
-+
-+ /* set Vc to low power mode when AP sleep */
-+// SSP_PCAP_bit_set( PCAP_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+ /* set VAUX2 to low power mode when AP sleep */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data e680_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_MCI_SD,
-+ .clk = 1,
-+ .init = e680_pcap_init,
-+};
-+
-+static struct resource e680_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device e680_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(e680_pcap_resources),
-+ .resource = e680_pcap_resources,
-+ .dev = {
-+ .platform_data = &e680_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &e680_pcap_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch
deleted file mode 100644
index 2350b2de82..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/e680-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:58.000000000 +0200
-@@ -291,9 +291,34 @@
- },
- };
-
-+/* 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,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
-+ &pcap_ts_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch
deleted file mode 100644
index 2226022a2c..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-asoc.patch
+++ /dev/null
@@ -1,1302 +0,0 @@
-Index: linux-2.6.23/sound/soc/codecs/pcap2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/codecs/pcap2.c 2007-10-22 22:28:06.000000000 +0200
-@@ -0,0 +1,796 @@
-+/*
-+ * pcap2.c - PCAP2 ASIC Audio driver
-+ *
-+ * 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/delay.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/ezx.h>
-+#include <asm/arch/hardware.h>
-+
-+#include "pcap2.h"
-+
-+#define AUDIO_NAME "pcap2-codec"
-+#define PCAP2_VERSION "0.1"
-+
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+static struct snd_soc_device *pcap2_codec_socdev;
-+
-+/*
-+ * Debug
-+ */
-+
-+//#define PCAP2_DEBUG
-+
-+#ifdef PCAP2_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+#define dump_registers() pcap2_codec_read(NULL, 13); \
-+ pcap2_codec_read(NULL, 12); \
-+ pcap2_codec_read(NULL, 11); \
-+ pcap2_codec_read(NULL, 26);
-+
-+
-+
-+
-+/*
-+ * ASoC limits register value to 16 bits and pcap uses 32 bit registers
-+ * to work around this, we get 16 bits from low, mid or high positions.
-+ * ASoC limits register number to 8 bits we use 0x1f for register
-+ * number and 0xe0 for register offset. -WM
-+ */
-+static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ unsigned int tmp;
-+
-+ ezx_pcap_read((reg & 0x1f), &tmp);
-+
-+ if (reg & SL) {
-+ tmp &= 0xffff0000;
-+ tmp |= (value & 0xffff);
-+ }
-+ else if (reg & SM) {
-+ tmp &= 0xff0000ff;
-+ tmp |= ((value << 8) & 0x00ffff00);
-+ }
-+ else if (reg & SH) {
-+ tmp &= 0xffff;
-+ tmp |= ((value << 16) & 0xffff0000);
-+ }
-+ else
-+ tmp = value;
-+
-+ dbg("codec_write reg=%x, rval=%08x, fval=%08x", reg, tmp, value);
-+ ezx_pcap_write((reg & 0x1f), tmp);
-+ return 0;
-+
-+}
-+
-+static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg)
-+{
-+ unsigned int tmp, ret;
-+
-+ ezx_pcap_read((reg & 0x1f), &tmp);
-+ ret = tmp;
-+ if (reg & SL)
-+ ret = (tmp & 0xffff);
-+ else if (reg & SM)
-+ ret = ((tmp >> 8) & 0xffff);
-+ else if (reg & SH)
-+ ret = ((tmp >> 16) & 0xffff);
-+
-+ dbg("codec_read reg=%x, rval=%08x, fval=%08x", reg, tmp, ret);
-+ return(ret);
-+
-+}
-+
-+static const char *pcap2_output_select[] = {"2ch", "2->1ch", "2->1ch -3db", "2->1ch -6db"};
-+
-+static const struct soc_enum pcap2_enum[] = {
-+SOC_ENUM_SINGLE((PCAP2_OUTPUT_AMP|SH), 3, 4, pcap2_output_select),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_input_mixer_controls[] = {
-+SOC_DAPM_SINGLE("A3 Switch", (PCAP2_INPUT_AMP|SL), 6, 1, 0),
-+SOC_DAPM_SINGLE("A5 Switch", (PCAP2_INPUT_AMP|SL), 8, 1, 0),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_output_mixer_controls[] = {
-+SOC_DAPM_SINGLE("A1 Switch", (PCAP2_OUTPUT_AMP|SL), 0, 1, 0),
-+SOC_DAPM_SINGLE("A2 Switch", (PCAP2_OUTPUT_AMP|SL), 1, 1, 0),
-+SOC_DAPM_SINGLE("AR Switch", (PCAP2_OUTPUT_AMP|SL), 5, 1, 0),
-+SOC_DAPM_SINGLE("AL Switch", (PCAP2_OUTPUT_AMP|SL), 6, 1, 0),
-+};
-+
-+/* pcap2 codec non DAPM controls */
-+static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = {
-+SOC_SINGLE("Output gain", (PCAP2_OUTPUT_AMP|SM), 5, 15, 0),
-+SOC_SINGLE("Input gain", (PCAP2_INPUT_AMP|SL), 0, 31, 0),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_codec_dm_mux_control[] = {
-+ SOC_DAPM_ENUM("Output Mode", pcap2_enum[0]),
-+};
-+
-+/* add non dapm controls */
-+static int pcap2_codec_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(pcap2_codec_snd_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&pcap2_codec_snd_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* pcap2 codec DAPM controls */
-+static const struct snd_soc_dapm_widget pcap2_codec_dapm_widgets[] = {
-+ SND_SOC_DAPM_DAC("ST_DAC", "ST_DAC playback", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_DAC("CDC_DAC", "CDC_DAC playback", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_ADC("CDC_ADC", "CDC_DAC capture", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_PGA("PGA_ST", (PCAP2_OUTPUT_AMP|SL), 9, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_CDC", (PCAP2_OUTPUT_AMP|SL), 8, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_R", (PCAP2_OUTPUT_AMP|SL), 11, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_L", (PCAP2_OUTPUT_AMP|SL), 12, 0, NULL, 0),
-+ SND_SOC_DAPM_MUX("Downmixer", SND_SOC_NOPM, 0, 0, pcap2_codec_dm_mux_control),
-+ SND_SOC_DAPM_PGA("PGA_A1CTRL", (PCAP2_OUTPUT_AMP|SH), 1, 1, NULL, 0),
-+ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &pcap2_output_mixer_controls[0], ARRAY_SIZE(pcap2_output_mixer_controls)),
-+ SND_SOC_DAPM_OUTPUT("A1"), /* Earpiece */
-+ SND_SOC_DAPM_OUTPUT("A2"), /* LoudSpeaker */
-+ SND_SOC_DAPM_OUTPUT("AR"), /* headset right */
-+ SND_SOC_DAPM_OUTPUT("AL"), /* headset left */
-+
-+ SND_SOC_DAPM_MICBIAS("BIAS1", (PCAP2_INPUT_AMP|SL), 10, 0),
-+ SND_SOC_DAPM_MICBIAS("BIAS2", (PCAP2_INPUT_AMP|SL), 11, 0),
-+ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &pcap2_input_mixer_controls[0], ARRAY_SIZE(pcap2_input_mixer_controls)),
-+ SND_SOC_DAPM_INPUT("A3"), /* Headset Mic */
-+ SND_SOC_DAPM_INPUT("A5"), /* Builtin Mic */
-+};
-+
-+static const char *audio_map[][3] = {
-+ { "A1", NULL, "Output Mixer" },
-+ { "A2", NULL, "Output Mixer" },
-+ { "AR", NULL, "Output Mixer" },
-+ { "AL", NULL, "Output Mixer" },
-+
-+ { "Output Mixer", "A1 Switch", "PGA_A1CTRL" },
-+ { "Output Mixer", "A2 Switch", "Downmixer" },
-+ { "Output Mixer", "AR Switch", "PGA_R" },
-+ { "Output Mixer", "AL Switch", "PGA_L" },
-+
-+ { "PGA_A1CTRL", NULL, "Downmixer" },
-+
-+ { "Downmixer", "2->1ch", "PGA_L" },
-+ { "Downmixer", "2->1ch", "PGA_R" },
-+ { "Downmixer", "2->1ch -3db", "PGA_L" },
-+ { "Downmixer", "2->1ch -3db", "PGA_R" },
-+ { "Downmixer", "2->1ch -6db", "PGA_L" },
-+ { "Downmixer", "2->1ch -6db", "PGA_R" },
-+ { "Downmixer", "2ch", "PGA_R" },
-+
-+ { "PGA_R", NULL, "PGA_ST" },
-+ { "PGA_L", NULL, "PGA_ST" },
-+ { "PGA_R", NULL, "PGA_CDC" },
-+
-+ { "PGA_ST", NULL, "ST_DAC" },
-+ { "PGA_CDC", NULL, "CDC_DAC" },
-+
-+ /* input path */
-+ { "BIAS1", NULL, "A3" },
-+ { "BIAS2", NULL, "A5" },
-+
-+ { "Input Mixer", "A3 Switch", "BIAS1" },
-+ { "Input Mixer", "A5 Switch", "BIAS2" },
-+
-+ { "PGA_R", NULL, "Input Mixer" },
-+
-+ { "PGA_CDC", NULL, "PGA_R" },
-+ { "CDC_ADC", NULL, "PGA_CDC" },
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int pcap2_codec_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(pcap2_codec_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &pcap2_codec_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path interconnects */
-+ 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_new_widgets(codec);
-+ return 0;
-+}
-+
-+static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ unsigned int input = pcap2_codec_read(codec, PCAP2_INPUT_AMP);
-+
-+ input &= ~PCAP2_INPUT_AMP_LOWPWR;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0:
-+ case SNDRV_CTL_POWER_D1:
-+ case SNDRV_CTL_POWER_D2:
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ dbg("dapm: ON\n");
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ input |= PCAP2_INPUT_AMP_LOWPWR;
-+ dbg("dapm: OFF\n");
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ pcap2_codec_write(codec, PCAP2_INPUT_AMP, input);
-+ return 0;
-+}
-+
-+static int pcap2_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_codec *codec = codec_dai->codec;
-+ unsigned int tmp;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+
-+ tmp &= ~PCAP2_ST_DAC_RATE_MASK;
-+ switch(params_rate(params)) {
-+ case 8000:
-+ break;
-+ case 11025:
-+ tmp |= PCAP2_ST_DAC_RATE_11025;
-+ break;
-+ case 12000:
-+ tmp |= PCAP2_ST_DAC_RATE_12000;
-+ break;
-+ case 16000:
-+ tmp |= PCAP2_ST_DAC_RATE_16000;
-+ break;
-+ case 22050:
-+ tmp |= PCAP2_ST_DAC_RATE_22050;
-+ break;
-+ case 24000:
-+ tmp |= PCAP2_ST_DAC_RATE_24000;
-+ break;
-+ case 32000:
-+ tmp |= PCAP2_ST_DAC_RATE_32000;
-+ break;
-+ case 44100:
-+ tmp |= PCAP2_ST_DAC_RATE_44100;
-+ break;
-+ case 48000:
-+ tmp |= PCAP2_ST_DAC_RATE_48000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ tmp |= PCAP2_ST_DAC_RESET_DF;
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+
-+ tmp &= ~PCAP2_CODEC_RATE_MASK;
-+ switch(params_rate(params)) {
-+ case 8000:
-+ break;
-+ case 16000:
-+ tmp |= PCAP2_CODEC_RATE_16000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ tmp |= PCAP2_CODEC_RESET_DF;
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcap2_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;
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ struct snd_soc_dapm_widget *w;
-+ unsigned int tmp;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+ tmp &= ~(PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+ if ((!strcmp(w->name, "CDC_DAC") || !strcmp(w->name, "CDC_ADC")) && w->connected)
-+ goto in_use;
-+ }
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+ tmp &= ~(PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+in_use:
-+ snd_soc_dapm_sync_endpoints(codec);
-+
-+ return 0;
-+}
-+
-+static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai,
-+ int clk_id, unsigned int freq, int dir)
-+{
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+
-+ unsigned int tmp;
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* ST_DAC */
-+
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+
-+ tmp &= ~PCAP2_ST_DAC_CLKSEL_MASK;
-+ switch (clk_id) {
-+ case PCAP2_CLK_AP:
-+ tmp |= PCAP2_ST_DAC_CLKSEL_AP;
-+ break;
-+ case PCAP2_CLK_BP:
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
-+ tmp &= ~PCAP2_ST_DAC_CLK_MASK;
-+ switch (freq) {
-+ case 13000000:
-+ break;
-+/* case 15M36:
-+ tmp |= PCAP2_ST_DAC_CLK_15M36;
-+ break;
-+ case 16M8:
-+ tmp |= PCAP2_ST_DAC_CLK_16M8;
-+ break;
-+ case 19M44:
-+ tmp |= PCAP2_ST_DAC_CLK_19M44;
-+ break;
-+*/ case 26000000:
-+ tmp |= PCAP2_ST_DAC_CLK_26M;
-+ break;
-+/* case EXT_MCLK:
-+ tmp |= PCAP2_ST_DAC_CLK_MCLK;
-+ break;
-+ case FSYNC:
-+ tmp |= PCAP2_ST_DAC_CLK_FSYNC;
-+ break;
-+ case BITCLK:
-+ tmp |= PCAP2_ST_DAC_CLK_BITCLK;
-+ break;
-+*/ default:
-+ return -EINVAL;
-+ }
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ /* MONO_DAC */
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+
-+ tmp &= ~PCAP2_CODEC_CLKSEL_MASK;
-+ switch (clk_id) {
-+ case PCAP2_CLK_AP:
-+ tmp |= PCAP2_CODEC_CLKSEL_AP;
-+ break;
-+ case PCAP2_CLK_BP:
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
-+ tmp &= ~PCAP2_CODEC_CLK_MASK;
-+ switch (freq) {
-+ case 13000000:
-+ break;
-+/* case 15M36:
-+ tmp |= PCAP2_CODEC_CLK_15M36;
-+ break;
-+ case 16M8:
-+ tmp |= PCAP2_CODEC_CLK_16M8;
-+ break;
-+ case 19M44:
-+ tmp |= PCAP2_CODEC_CLK_19M44;
-+ break;
-+*/ case 26000000:
-+ tmp |= PCAP2_CODEC_CLK_26M;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ return 0;
-+}
-+
-+static int pcap2_set_dai_fmt(struct snd_soc_codec_dai *codec_dai,
-+ unsigned int fmt)
-+{
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ unsigned int tmp = 0;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* ST_DAC */
-+
-+ /* disable CODEC */
-+ pcap2_codec_write(codec, PCAP2_CODEC, 0);
-+
-+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ tmp |= 0x1;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ tmp |= 0x4000;
-+ break;
-+/* case SND_SOC_NET:
-+ tmp |= 0x2000;
-+ break;
-+*/ case SND_SOC_DAIFMT_DSP_B:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ break;
-+ case SND_SOC_DAIFMT_NB_NF:
-+ tmp |= 0x60000;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ tmp |= 0x40000;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ tmp |= 0x20000;
-+ break;
-+ }
-+ /* set dai to AP */
-+ tmp |= 0x1000;
-+
-+ /* set BCLK */
-+ tmp |= 0x18000;
-+
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ /* MONO_DAC */
-+
-+ /* disable ST_DAC */
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, 0);
-+
-+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ tmp |= 0x2;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_DSP_B:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ break;
-+ case SND_SOC_DAIFMT_NB_NF:
-+ tmp |= 0x600;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ tmp |= 0x400;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ tmp |= 0x200;
-+ break;
-+ }
-+ if (codec_dai->id == PCAP2_MONO_DAI)
-+ /* set dai to AP */
-+ tmp |= 0x8000;
-+
-+ tmp |= 0x5; /* IHF / OHF */
-+
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ return 0;
-+}
-+
-+static int pcap2_prepare(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;
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ unsigned int tmp;
-+ /* FIXME enable clock only if codec is master */
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 1);
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+ tmp |= (PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 1);
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+ tmp |= (PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ snd_soc_dapm_sync_endpoints(codec);
-+ mdelay(1);
-+#ifdef PCAP2_DEBUG
-+ dump_registers();
-+#endif
-+ return 0;
-+}
-+
-+/*
-+ * Define codec DAI.
-+ */
-+struct snd_soc_codec_dai pcap2_dai[] = {
-+{
-+ .name = "PCAP2 MONO",
-+ .id = 0,
-+ .playback = {
-+ .stream_name = "CDC_DAC playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .capture = {
-+ .stream_name = "CDC_DAC capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+{
-+ .name = "PCAP2 STEREO",
-+ .id = 1,
-+ .playback = {
-+ .stream_name = "ST_DAC playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ .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),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .capture = { /* FIXME: PCAP support this?? */
-+ .stream_name = "ST_DAC capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .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),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+{
-+ .name = "PCAP2 BP",
-+ .id = 2,
-+ .playback = {
-+ .stream_name = "BP playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = SNDRV_PCM_RATE_8000,
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+};
-+EXPORT_SYMBOL_GPL(pcap2_dai);
-+
-+static int pcap2_codec_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ dbg("pcap2_codec_suspend");
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int pcap2_codec_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ dbg("pcap2_codec_resume");
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ pcap2_codec_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the PCAP2 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int pcap2_codec_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ dbg("pcap2_codec_init");
-+ codec->name = "PCAP2 Audio";
-+ codec->owner = THIS_MODULE;
-+ codec->read = pcap2_codec_read;
-+ codec->write = pcap2_codec_write;
-+ codec->dapm_event = pcap2_codec_dapm_event;
-+ codec->dai = pcap2_dai;
-+ codec->num_dai = ARRAY_SIZE(pcap2_dai);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ return ret;
-+ }
-+ /* power on device */
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ /* set the update bits */
-+
-+ pcap2_codec_add_controls(codec);
-+ pcap2_codec_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static int pcap2_codec_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct pcap2_codec_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+ info("PCAP2 Audio Codec %s", PCAP2_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ pcap2_codec_socdev = socdev;
-+
-+ ret = pcap2_codec_init(socdev);
-+ return ret;
-+}
-+
-+/* power down chip and remove */
-+static int pcap2_codec_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ if (codec->control_data)
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+/* codec device ops */
-+struct snd_soc_codec_device soc_codec_dev_pcap2 = {
-+ .probe = pcap2_codec_probe,
-+ .remove = pcap2_codec_remove,
-+ .suspend = pcap2_codec_suspend,
-+ .resume = pcap2_codec_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_pcap2);
-+
-+MODULE_DESCRIPTION("ASoC PCAP2 codec");
-+MODULE_AUTHOR("Daniel Ribeiro");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/sound/soc/codecs/pcap2.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/codecs/pcap2.h 2007-10-22 22:28:06.000000000 +0200
-@@ -0,0 +1,81 @@
-+/*
-+ * 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 _PCAP2_H
-+#define _PCAP2_H
-+
-+/* 16 bit reads/writes on pcap registers (ugly workaround) */
-+#define SL (1 << 5) /* lower 16 bits */
-+#define SM (1 << 6) /* mid 16 bits */
-+#define SH (1 << 7) /* higher 16 bits */
-+
-+/* PCAP2 register space */
-+#define PCAP2_CODEC 0x0b
-+#define PCAP2_OUTPUT_AMP 0x0c
-+#define PCAP2_ST_DAC 0x0d
-+#define PCAP2_INPUT_AMP 0x1a
-+
-+#define PCAP2_MONO_DAI 0
-+#define PCAP2_STEREO_DAI 1
-+#define PCAP2_BP_DAI 2
-+
-+#define PCAP2_CLK_BP 0
-+#define PCAP2_CLK_AP 1
-+
-+#define PCAP2_CODEC_EN 0x2000
-+#define PCAP2_CODEC_CLK_EN 0x1000
-+#define PCAP2_CODEC_RESET_DF 0x800
-+#define PCAP2_CODEC_RATE_MASK 0x4000
-+#define PCAP2_CODEC_RATE_8000 0x0
-+#define PCAP2_CODEC_RATE_16000 0x4000
-+#define PCAP2_CODEC_CLKSEL_MASK 0x10000
-+#define PCAP2_CODEC_CLKSEL_AP 0x10000
-+#define PCAP2_CODEC_CLKSEL_BP 0x0
-+#define PCAP2_CODEC_CLK_MASK 0x1c0
-+#define PCAP2_CODEC_CLK_13M 0x0
-+#define PCAP2_CODEC_CLK_15M36 0x40
-+#define PCAP2_CODEC_CLK_16M8 0x80
-+#define PCAP2_CODEC_CLK_19M44 0xc0
-+#define PCAP2_CODEC_CLK_26M 0x100
-+
-+#define PCAP2_ST_DAC_EN 0x80
-+#define PCAP2_ST_DAC_CLK_EN 0x20
-+#define PCAP2_ST_DAC_RESET_DF 0x40
-+#define PCAP2_ST_DAC_RATE_MASK 0xf00
-+#define PCAP2_ST_DAC_RATE_8000 0x0
-+#define PCAP2_ST_DAC_RATE_11025 0x100
-+#define PCAP2_ST_DAC_RATE_12000 0x200
-+#define PCAP2_ST_DAC_RATE_16000 0x300
-+#define PCAP2_ST_DAC_RATE_22050 0x400
-+#define PCAP2_ST_DAC_RATE_24000 0x500
-+#define PCAP2_ST_DAC_RATE_32000 0x600
-+#define PCAP2_ST_DAC_RATE_44100 0x700
-+#define PCAP2_ST_DAC_RATE_48000 0x800
-+#define PCAP2_ST_DAC_CLKSEL_MASK 0x80000
-+#define PCAP2_ST_DAC_CLKSEL_AP 0x80000
-+#define PCAP2_ST_DAC_CLKSEL_BP 0x0
-+#define PCAP2_ST_DAC_CLK_MASK 0x1c
-+#define PCAP2_ST_DAC_CLK_13M 0x0
-+#define PCAP2_ST_DAC_CLK_15M36 0x4
-+#define PCAP2_ST_DAC_CLK_16M8 0x8
-+#define PCAP2_ST_DAC_CLK_19M44 0xc
-+#define PCAP2_ST_DAC_CLK_26M 0x10
-+#define PCAP2_ST_DAC_CLK_MCLK 0x14
-+#define PCAP2_ST_DAC_CLK_FSYNC 0x18
-+#define PCAP2_ST_DAC_CLK_BITCLK 0x1c
-+
-+#define PCAP2_INPUT_AMP_LOWPWR 0x80000
-+#define PCAP2_INPUT_AMP_V2EN2 0x200000
-+
-+#define PCAP2_OUTPUT_AMP_PGAR_EN 0x800
-+#define PCAP2_OUTPUT_AMP_PGAL_EN 0x1000
-+#define PCAP2_OUTPUT_AMP_CDC_SW 0x100
-+#define PCAP2_OUTPUT_AMP_ST_DAC_SW 0x200
-+
-+extern struct snd_soc_codec_dai pcap2_dai[];
-+extern struct snd_soc_codec_device soc_codec_dev_pcap2;
-+
-+#endif
-Index: linux-2.6.23/sound/soc/pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200
-+++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:29:23.000000000 +0200
-@@ -57,3 +57,12 @@
- help
- Say Y if you want to add support for SoC audio on Sharp
- Zaurus SL-C6000x models (Tosa).
-+
-+config SND_PXA2XX_SOC_EZX
-+ tristate "SoC Audio support for EZX"
-+ depends on SND_PXA2XX_SOC && PXA_EZX
-+ select SND_PXA2XX_SOC_SSP
-+ select SND_SOC_PCAP2
-+ help
-+ Say Y if you want to add support for SoC audio on
-+ Motorola EZX Phones (a780/e680).
-Index: linux-2.6.23/sound/soc/pxa/ezx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/pxa/ezx.c 2007-10-22 22:28:06.000000000 +0200
-@@ -0,0 +1,349 @@
-+/*
-+ * ezx.c - Machine specific code for 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 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/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/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+
-+#include <asm/arch/ezx-pcap.h>
-+
-+#include "../codecs/pcap2.h"
-+#include "pxa2xx-pcm.h"
-+#include "pxa2xx-ssp.h"
-+
-+#define GPIO_HW_ATTENUATE_A780 96
-+
-+static struct snd_soc_codec *control_codec;
-+
-+static void ezx_ext_control(struct snd_soc_codec *codec)
-+{
-+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_A1)))
-+ snd_soc_dapm_set_endpoint(codec, "Headset", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "Headset", 0);
-+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_MB2)))
-+ snd_soc_dapm_set_endpoint(codec, "External Mic", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "External Mic", 0);
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static irqreturn_t jack_irq(int irq, void *data)
-+{
-+ ezx_ext_control(control_codec);
-+ return IRQ_HANDLED;
-+}
-+
-+
-+/*
-+ * Alsa operations
-+ * Only implement the required operations for your platform.
-+ * These operations are specific to the machine only.
-+ */
-+
-+ /*
-+ * Called by ALSA when a PCM substream is opened, private data can be allocated.
-+ */
-+static int ezx_machine_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ ezx_ext_control(codec);
-+ return 0;
-+}
-+
-+/*
-+ * Called by ALSA when the hardware params are set by application. This
-+ * function can also be called multiple times and can allocate buffers
-+ * (using snd_pcm_lib_* ). It's non-atomic.
-+ */
-+static int ezx_machine_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;
-+ int ret;
-+
-+ /* set codec DAI configuration */
-+ if (codec_dai->id == PCAP2_STEREO_DAI)
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_CBM_CFM);
-+ else
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* Turn on clock output on CLK_PIO */
-+ OSCC |= 0x8;
-+
-+ /* set clock source */
-+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_AP,
-+ 13000000, SND_SOC_CLOCK_IN);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* set cpu DAI configuration */
-+ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = cpu_dai->dai_ops.set_tristate(cpu_dai, 0);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai,PXA2XX_SSP_CLK_EXT,
-+ 0, SND_SOC_CLOCK_IN);
-+ if (ret < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+/*
-+ * Free's resources allocated by hw_params, can be called multiple times
-+ */
-+static int ezx_machine_hw_free(struct snd_pcm_substream *substream)
-+{
-+ OSCC &= ~0x8; /* turn off clock output on CLK_PIO */
-+
-+ return 0;
-+}
-+
-+static int ezx_machine_prepare(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;
-+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* override pxa2xx-ssp sample size for stereo/network mode */
-+ SSCR0_P(cpu_dai->id+1) &= ~(SSCR0_DSS | SSCR0_EDSS);
-+ SSCR0_P(cpu_dai->id+1) |= (SSCR0_EDSS | SSCR0_DataSize(16));
-+ }
-+ return 0;
-+}
-+
-+/* machine Alsa PCM operations */
-+static struct snd_soc_ops ezx_ops = {
-+ .startup = ezx_machine_startup,
-+ .prepare = ezx_machine_prepare,
-+ .hw_free = ezx_machine_hw_free,
-+ .hw_params = ezx_machine_hw_params,
-+};
-+
-+static int bp_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;
-+ int ret = 0;
-+ /* set codec DAI configuration */
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* set clock source */
-+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_BP,
-+ 13000000, SND_SOC_CLOCK_IN);
-+
-+ return ret;
-+}
-+
-+
-+
-+/* machine dapm widgets */
-+static const struct snd_soc_dapm_widget ezx_dapm_widgets[] = {
-+ SND_SOC_DAPM_HP("Headset", NULL),
-+ SND_SOC_DAPM_SPK("Earpiece", NULL),
-+ SND_SOC_DAPM_SPK("Loudspeaker", NULL),
-+ SND_SOC_DAPM_MIC("Built-in Mic", NULL),
-+ SND_SOC_DAPM_MIC("External Mic", NULL),
-+};
-+
-+/* machine audio map (connections to the codec pins) */
-+static const char *audio_map[][3] = {
-+ { "Headset", NULL, "AR" },
-+ { "Headset", NULL, "AL" },
-+ { "Earpiece", NULL, "A1" },
-+ { "Loudspeaker", NULL, "A2" },
-+
-+ { "Built-in Mic", NULL, "A5" },
-+ { "External Mic", NULL, "A3" },
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * Initialise the machine audio subsystem.
-+ */
-+static int ezx_machine_init(struct snd_soc_codec *codec)
-+{
-+ int i;
-+ /* mark unused codec pins as NC */
-+// snd_soc_dapm_set_endpoint(codec, "FIXME", 0);
-+ control_codec = codec;
-+
-+ /* Add ezx specific controls */
-+// for (i = 0; i < ARRAY_SIZE(ezx_controls); i++) {
-+// if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&ezx_controls[i], codec, NULL))) < 0)
-+// return err;
-+// }
-+
-+ /* Add ezx specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(ezx_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &ezx_dapm_widgets[i]);
-+ }
-+ /* Set up ezx specific audio path interconnects */
-+ 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]);
-+ }
-+
-+ /* synchronise subsystem */
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_cpu_dai bp_dai =
-+{
-+ .name = "Baseband",
-+ .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,
-+ },
-+ .ops = {
-+// .startup = bp_startup,
-+// .shutdown = bp_shutdown,
-+ .hw_params = bp_hw_params,
-+// .hw_free = bp_hw_free,
-+ },
-+};
-+
-+/* template digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link ezx_dai[] = {
-+{
-+ .name = "PCAP2 STEREO",
-+ .stream_name = "stereo playback",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
-+ .codec_dai = &pcap2_dai[PCAP2_STEREO_DAI],
-+ .init = ezx_machine_init,
-+ .ops = &ezx_ops,
-+},
-+{
-+ .name = "PCAP2 MONO",
-+ .stream_name = "mono playback",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
-+ .codec_dai = &pcap2_dai[PCAP2_MONO_DAI],
-+// .init = ezx_machine_init, /* the stereo call already registered our controls */
-+ .ops = &ezx_ops,
-+},
-+{
-+ .name = "PCAP2 BP",
-+ .stream_name = "BP Audio",
-+ .cpu_dai = &bp_dai,
-+ .codec_dai = &pcap2_dai[PCAP2_BP_DAI],
-+},
-+};
-+
-+/* template audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_ezx = {
-+ .name = "Motorola EZX",
-+// .probe
-+// .remove
-+// .suspend_pre
-+// .resume_post
-+ .dai_link = ezx_dai,
-+ .num_links = ARRAY_SIZE(ezx_dai),
-+};
-+
-+/* template audio subsystem */
-+static struct snd_soc_device ezx_snd_devdata = {
-+ .machine = &snd_soc_machine_ezx,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_pcap2,
-+};
-+
-+static struct platform_device *ezx_snd_device;
-+
-+static int __init ezx_init(void)
-+{
-+ int ret;
-+ ezx_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!ezx_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(ezx_snd_device, &ezx_snd_devdata);
-+ ezx_snd_devdata.dev = &ezx_snd_device->dev;
-+ ret = platform_device_add(ezx_snd_device);
-+
-+ if (ret)
-+ platform_device_put(ezx_snd_device);
-+ /* configure gpio for ssp3 */
-+ pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */
-+ pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD */
-+ pxa_gpio_mode(GPIO52_SCLK3_MD); /* SCLK */
-+ pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD */
-+
-+ /* configure gpio for ssp2 */
-+ pxa_gpio_mode(37 | GPIO_IN); /* SFRM */
-+ pxa_gpio_mode(38 | GPIO_IN); /* TXD */
-+ pxa_gpio_mode(22 | GPIO_IN); /* SCLK */
-+ pxa_gpio_mode(88 | GPIO_IN); /* RXD */
-+
-+ pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT);
-+ pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1);
-+
-+ /* request jack irq */
-+ request_irq(EZX_IRQ_HEADJACK, &jack_irq, IRQF_DISABLED, "headphone jack", NULL);
-+ request_irq(EZX_IRQ_MIC, &jack_irq, IRQF_DISABLED, "mic jack", NULL);
-+
-+ return ret;
-+}
-+
-+static void __exit ezx_exit(void)
-+{
-+ free_irq(EZX_IRQ_HEADJACK, NULL);
-+ free_irq(EZX_IRQ_MIC, NULL);
-+ platform_device_unregister(ezx_snd_device);
-+}
-+
-+module_init(ezx_init);
-+module_exit(ezx_exit);
-+
-Index: linux-2.6.23/sound/soc/codecs/Makefile
-===================================================================
---- linux-2.6.23.orig/sound/soc/codecs/Makefile 2007-10-10 09:38:42.000000000 +0200
-+++ linux-2.6.23/sound/soc/codecs/Makefile 2007-10-22 22:30:09.000000000 +0200
-@@ -3,9 +3,11 @@
- snd-soc-wm8750-objs := wm8750.o
- snd-soc-wm8753-objs := wm8753.o
- snd-soc-wm9712-objs := wm9712.o
-+snd-soc-pcap2-objs := pcap2.o
-
- obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
- obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o
- obj-$(CONFIG_SND_SOC_WM8750) += snd-soc-wm8750.o
- obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o
- obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o
-+obj-$(CONFIG_SND_SOC_PCAP2) += snd-soc-pcap2.o
-Index: linux-2.6.23/sound/soc/codecs/Kconfig
-===================================================================
---- linux-2.6.23.orig/sound/soc/codecs/Kconfig 2007-10-10 09:38:42.000000000 +0200
-+++ linux-2.6.23/sound/soc/codecs/Kconfig 2007-10-22 22:28:06.000000000 +0200
-@@ -17,3 +17,7 @@
- config SND_SOC_WM9712
- tristate
- depends on SND_SOC
-+
-+config SND_SOC_PCAP2
-+ tristate
-+ depends on SND_SOC && EZX_PCAP
-Index: linux-2.6.23/sound/soc/pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200
-+++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:28:06.000000000 +0200
-@@ -14,9 +14,10 @@
- snd-soc-poodle-objs := poodle.o
- snd-soc-tosa-objs := tosa.o
- snd-soc-spitz-objs := spitz.o
-+snd-soc-ezx-objs := ezx.o
-
- obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o
- obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o
- obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o
- obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o
--
-+obj-$(CONFIG_SND_PXA2XX_SOC_EZX) += snd-soc-ezx.o
diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch
deleted file mode 100644
index b6bd9ff4f0..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-backlight.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.23/drivers/video/backlight/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/video/backlight/Kconfig 2007-10-10 09:38:43.000000000 +0200
-+++ linux-2.6.23/drivers/video/backlight/Kconfig 2007-10-22 22:25:23.000000000 +0200
-@@ -77,3 +77,12 @@
- help
- If you have a Intel LE80578 (Carillo Ranch) 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.23/drivers/video/backlight/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/video/backlight/Makefile 2007-10-10 09:38:43.000000000 +0200
-+++ linux-2.6.23/drivers/video/backlight/Makefile 2007-10-22 22:25:50.000000000 +0200
-@@ -7,3 +7,4 @@
- obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
- obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
- obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
-+obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o
-Index: linux-2.6.23/drivers/video/backlight/ezx_bl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/video/backlight/ezx_bl.c 2007-10-22 22:25:23.000000000 +0200
-@@ -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(CKEN_PWM0, 1); /* clock enable */
-+ }
-+ else if ( last_intensity && !intensity ) {
-+ PWM_PWDUTY0 = 0;
-+ GAFR0_U &= 0xFFFFFFFC; /* ??? */
-+ pxa_set_cken(CKEN_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.23/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx.c 2007-10-22 22:03:08.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-22 22:25:23.000000000 +0200
-@@ -65,6 +65,12 @@
- #endif
- EXPORT_SYMBOL(ezx_backlight_power);
-
-+/* EZX LCD Backlight */
-+static struct platform_device ezxbacklight_device = {
-+ .name = "ezx-bl",
-+ .id = -1,
-+};
-+
- /* OHCI Controller */
- static int ezx_ohci_init(struct device *dev)
- {
-@@ -121,6 +127,7 @@
-
- static struct platform_device *devices[] __initdata = {
- &ezxbp_device,
-+ &ezxbacklight_device,
- };
-
- /* PM */
diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch
deleted file mode 100644
index a20adc464c..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-bp.patch
+++ /dev/null
@@ -1,340 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx.c 2007-10-23 12:03:55.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-23 13:21:24.000000000 +0200
-@@ -86,8 +86,40 @@
- .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 = {
-+ &ezxbp_device,
- };
-
- static int __init ezx_init(void)
-Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-23 12:03:55.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-23 13:21:23.000000000 +0200
-@@ -106,6 +106,9 @@
-
- endchoice
-
-+config EZX_BP
-+ bool "BP Control code for EZX Platform"
-+
- endif
-
- endmenu
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-bp.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-bp.c 2007-10-23 13:22:01.000000000 +0200
-@@ -0,0 +1,264 @@
-+/*
-+ * 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
-+
-+extern void usb_send_readurb(void);
-+
-+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");
-+ /*
-+ * It is correct to power off here, the following line is
-+ * commented out because e680 lowers WDI2 when BP is in
-+ * flash mode, otherwise WDI2 is used to detect low
-+ * battery. You can safely uncomment this line if you are
-+ * using this kernel with BP in normal mode.
-+ */
-+#ifndef CONFIG_PXA_EZX_E680
-+ pm_power_off();
-+#endif
-+ }
-+}
-+
-+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()) {
-+ /* FIXME: (test) try to not disable irq_wdi2 and drain battery */
-+ 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");
-+ /* same case as check_power_off() */
-+#ifndef CONFIG_PXA_EZX_E680
-+ pm_power_off();
-+#endif
-+ 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, IRQF_DISABLED,
-+ "bp wdi", bp);
-+
-+ set_irq_type(bp->irq_rdy, IRQT_BOTHEDGE);
-+ request_irq(bp->irq_rdy, bp_rdy_handler, IRQF_DISABLED,
-+ "bp rdy", bp);
-+
-+ set_irq_type(bp->irq_wdi2, IRQT_FALLING);
-+ request_irq(bp->irq_wdi2, bp_wdi2_handler, IRQF_DISABLED,
-+ "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.23/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-23 12:03:55.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-23 13:21:23.000000000 +0200
-@@ -25,6 +25,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.23/patches/ezx-core.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-core.patch
deleted file mode 100644
index af31bc5620..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-core.patch
+++ /dev/null
@@ -1,1016 +0,0 @@
-Index: linux-2.6.23/arch/arm/boot/compressed/head-xscale.S
-===================================================================
---- linux-2.6.23.orig/arch/arm/boot/compressed/head-xscale.S 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/boot/compressed/head-xscale.S 2007-10-24 13:03:04.000000000 +0200
-@@ -48,3 +48,6 @@
- str r1, [r0, #0x18]
- #endif
-
-+#ifdef CONFIG_ARCH_EZX
-+ mov r7, #MACH_TYPE_EZX
-+#endif
-Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-24 18:56:36.000000000 +0200
-@@ -41,6 +41,10 @@
- bool "CompuLab EM-x270 platform"
- select PXA27x
-
-+config PXA_EZX
-+ bool "Motorola EZX Platform"
-+ select PXA_SSP
-+
- endchoice
-
- if PXA_SHARPSL
-@@ -75,6 +79,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
-@@ -148,4 +181,5 @@
- tristate
- help
- Enable support for PXA2xx SSP ports
-+
- endif
-Index: linux-2.6.23/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-24 18:56:36.000000000 +0200
-@@ -19,6 +19,12 @@
- obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o
- obj-$(CONFIG_MACH_TOSA) += tosa.o
- obj-$(CONFIG_MACH_EM_X270) += em-x270.o
-+obj-$(CONFIG_PXA_EZX) += ezx.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.23/arch/arm/mach-pxa/ezx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-24 18:56:36.000000000 +0200
-@@ -0,0 +1,118 @@
-+/*
-+ * 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 <asm/arch/ezx.h>
-+
-+#include "generic.h"
-+
-+/* 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(CKEN_PWM0, 1);
-+ PWM_CTRL0 = 0;
-+ PWM_PWDUTY0 = 0x3ff;
-+ PWM_PERVAL0 = 0x3ff;
-+ } else {
-+ PWM_CTRL0 = 0;
-+ PWM_PWDUTY0 = 0x0;
-+ PWM_PERVAL0 = 0x3FF;
-+ pxa_set_cken(CKEN_PWM0, 0);
-+ }
-+}
-+#else
-+void ezx_backlight_power(int on){}
-+#endif
-+EXPORT_SYMBOL(ezx_backlight_power);
-+
-+/* 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 = {
-+};
-+
-+static int __init ezx_init(void)
-+{
-+ CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC);
-+
-+ 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.23/include/asm-arm/arch-pxa/ezx.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/ezx.h 2007-10-24 13:03:05.000000000 +0200
-@@ -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.23/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-24 13:03:04.000000000 +0200
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-24 18:56:34.000000000 +0200
-@@ -856,6 +856,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 */
-@@ -1259,6 +1261,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 */
-@@ -1372,6 +1375,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)
-@@ -1382,23 +1386,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)
-@@ -1423,13 +1437,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)
-@@ -1465,13 +1483,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)
-@@ -1483,6 +1507,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)
-
-@@ -1498,6 +1523,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.23/arch/arm/boot/compressed/head.S
-===================================================================
---- linux-2.6.23.orig/arch/arm/boot/compressed/head.S 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/boot/compressed/head.S 2007-10-24 13:03:05.000000000 +0200
-@@ -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.23/include/asm-arm/arch-pxa/uncompress.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/uncompress.h 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/include/asm-arm/arch-pxa/uncompress.h 2007-10-24 13:03:05.000000000 +0200
-@@ -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.23/arch/arm/mm/init.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mm/init.c 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/mm/init.c 2007-10-24 13:03:05.000000000 +0200
-@@ -240,6 +240,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.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-24 18:56:36.000000000 +0200
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = a780_init,
-+MACHINE_END
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e2.c 2007-10-24 18:57:44.000000000 +0200
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = e2_init,
-+MACHINE_END
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:57:19.000000000 +0200
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = e680_init,
-+MACHINE_END
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-10-24 18:58:15.000000000 +0200
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = a1200_init,
-+MACHINE_END
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-10-24 18:57:58.000000000 +0200
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = e6_init,
-+MACHINE_END
diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch
deleted file mode 100644
index 67075ec1fc..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-emu.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-emu.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-emu.c 2007-10-23 15:57:50.000000000 +0200
-@@ -0,0 +1,219 @@
-+/*
-+ * 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);
-+static int emu_irq_usb4v;
-+static int emu_irq_usb1v;
-+
-+
-+#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)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to USB\n");
-+ 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(PCAP_BIT_BUSCTRL_RS232ENB, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_FSENB, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 1);
-+ clr_GPIO(GPIO_EMU_MUX1);
-+ clr_GPIO(GPIO_EMU_MUX2);
-+}
-+
-+void emu_switch_to_uart(void)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to UART\n");
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN,0);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 0);
-+ ezx_pcap_bit_set(PCAP_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);
-+ pxa_set_cken(CKEN_FFUART, 1);
-+ clr_GPIO(GPIO_EMU_MUX1);
-+ clr_GPIO(GPIO_EMU_MUX2);
-+
-+}
-+
-+void emu_switch_to_audio(int stereo)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to audio(%s)\n", (stereo ? "stereo" : "mono"));
-+ 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)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to disconnected\n");
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 0);
-+ ezx_pcap_bit_set(PCAP_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(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
-+ emu_switch_to_default();
-+ break;
-+ case EZX_IRQ_USB1V:
-+ if(!ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB1V)))
-+ 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);
-+
-+ emu_irq_usb4v = platform_get_irq(dev, 0);
-+ if(emu_irq_usb4v < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for USB4V!\n");
-+ return emu_irq_usb4v;
-+ }
-+ emu_irq_usb1v = platform_get_irq(dev, 1);
-+ if(emu_irq_usb1v < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for USB1V!\n");
-+ return emu_irq_usb1v;
-+ }
-+
-+ request_irq(emu_irq_usb4v, &emu_irq, IRQF_DISABLED, "usb 4v", NULL);
-+ request_irq(emu_irq_usb1v, &emu_irq, IRQF_DISABLED, "usb 1v", NULL);
-+
-+ pxa_set_udc_info(&ezx_udc_info);
-+
-+ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
-+ emu_switch_to_default();
-+ else
-+ emu_switch_to_nothing();
-+
-+ return 0;
-+}
-+
-+static int ezx_emu_remove(struct platform_device *dev)
-+{
-+ free_irq(emu_irq_usb4v, NULL);
-+ free_irq(emu_irq_usb1v, NULL);
-+
-+ 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(PCAP_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(PCAP_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,
-+ .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.23/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-23 15:38:53.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-23 18:00:57.000000000 +0200
-@@ -112,6 +112,28 @@
- config EZX_PCAP
- bool "PCAP Support"
-
-+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.23/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-23 15:38:53.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-23 18:00:57.000000000 +0200
-@@ -27,6 +27,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.23/patches/ezx-enable-stuart.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-enable-stuart.patch
deleted file mode 100644
index 6f1a2c1ba4..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-enable-stuart.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-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.23/patches/ezx-eoc.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-eoc.patch
deleted file mode 100644
index c5597728c7..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-eoc.patch
+++ /dev/null
@@ -1,295 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-eoc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-eoc.c 2007-10-24 19:49:32.000000000 +0200
-@@ -0,0 +1,261 @@
-+/*
-+ * EZX EOC Driver for Motorola EZX phones
-+ *
-+ * Copyright (C) 2007 Alex Zhang <celeber2@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/init.h>
-+#include <linux/i2c.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/udc.h>
-+
-+#if 1
-+#define EOC_DBG printk
-+#else
-+#define EOC_DBG(x, args...)
-+#endif
-+
-+#define REG_INT_STATUS 32
-+#define REG_INT_MASK 33
-+#define REG_INT_SENSE 34
-+#define REG_POWER_CONTROL_0 35
-+#define REG_POWER_CONTROL_1 36
-+#define REG_CONN_CONTROL 37
-+
-+#define EOC_REG_ADDR_SIZE 1
-+#define EOC_REG_DATA_SIZE 3
-+#define EOC_FUNC_NOTHING 0
-+#define EOC_FUNC_USB_NET 1
-+
-+static const char eoc_i2c_driver_name[] = "ezx-eoc";
-+static int eoc_func = EOC_FUNC_USB_NET;
-+static struct pxa2xx_udc_mach_info ezx_udc_info;
-+
-+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter);
-+static int ezx_eoc_detach_client(struct i2c_client *client);
-+
-+static struct i2c_client *eoc_i2c_client = NULL;
-+
-+static struct i2c_driver eoc_i2c_driver = {
-+ .driver = {
-+ .name = (char *)eoc_i2c_driver_name,
-+ },
-+ .attach_adapter = ezx_eoc_attach_adapter,
-+ .detach_client = ezx_eoc_detach_client,
-+};
-+
-+int eoc_reg_read(int reg, unsigned int *reg_value)
-+{
-+ unsigned char reg_num = reg;
-+ unsigned char value[EOC_REG_DATA_SIZE];
-+ int retval;
-+
-+ struct i2c_msg msgs[2] =
-+ {
-+ { eoc_i2c_client->addr, 0, EOC_REG_ADDR_SIZE, &reg_num },
-+ { eoc_i2c_client->addr, I2C_M_RD, EOC_REG_DATA_SIZE, value }
-+ };
-+
-+ /* transfer message to client */
-+ retval = i2c_transfer(eoc_i2c_client->adapter, msgs, 2);
-+ if (retval < 0)
-+ return retval;
-+
-+ *reg_value = (value[2] << 0);
-+ *reg_value |= (value[1] << 8);
-+ *reg_value |= (value[0] << 16);
-+ return 0;
-+}
-+
-+int eoc_reg_write(int reg, unsigned int reg_value)
-+{
-+ unsigned char value[EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE];
-+ int retval;
-+
-+ /* Copy the data into a buffer into the correct format */
-+ value[0] = reg;
-+ value[1] = (reg_value >> 16) & 0xFF;
-+ value[2] = (reg_value >> 8) & 0xFF;
-+ value[3] = (reg_value >> 0) & 0xFF;
-+
-+ /* Write the data to the EOC */
-+ retval = i2c_master_send (eoc_i2c_client, value, EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE);
-+ if (retval < 0)
-+ return retval;
-+ return 0;
-+}
-+
-+static void eoc_switch_to_usb(void)
-+{
-+ EOC_DBG("EOC: Switching to USB\n");
-+ 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;
-+ /* FIXME change eoc bits to USB */
-+
-+}
-+
-+static void eoc_switch_to_nothing(void)
-+{
-+ EOC_DBG("EOC: Switching do disconnected\n");
-+ 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);
-+ /* FIXME disconnect mini usb port */
-+}
-+
-+static void eoc_switch_to_default(void)
-+{
-+ switch (eoc_func) {
-+ case EOC_FUNC_USB_NET:
-+ eoc_switch_to_usb();
-+ break;
-+ case EOC_FUNC_NOTHING:
-+ eoc_switch_to_nothing();
-+ break;
-+ }
-+}
-+
-+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter)
-+{
-+ int err = 0;
-+ EOC_DBG(">>>>attach adapter enter\n");
-+
-+ if (eoc_i2c_client != NULL) {
-+ EOC_DBG(">>>>already loaded!!!\n");
-+ return 0;
-+ }
-+
-+ if (!(eoc_i2c_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL)))
-+ return -ENOMEM;
-+
-+ eoc_i2c_client->addr = 0x17;
-+ eoc_i2c_client->adapter = adapter;
-+ eoc_i2c_client->driver = &eoc_i2c_driver;
-+ eoc_i2c_client->flags = 0;
-+ strlcpy(eoc_i2c_client->name, eoc_i2c_driver_name, I2C_NAME_SIZE);
-+
-+ if ((err = i2c_attach_client(eoc_i2c_client))) {
-+ kfree(eoc_i2c_client);
-+ eoc_i2c_client = NULL;
-+ return err;
-+ }
-+ eoc_reg_write(REG_INT_MASK, 0x0000FEF);
-+ eoc_reg_write(REG_POWER_CONTROL_0, 0x0000C00);
-+ eoc_reg_write(REG_POWER_CONTROL_1, 0x000000C);
-+ eoc_reg_write(REG_CONN_CONTROL,0x0021044);
-+
-+ eoc_switch_to_default();
-+ EOC_DBG(">>>>attach adapter exit\n");
-+ return 0;
-+
-+}
-+
-+static int ezx_eoc_detach_client(struct i2c_client *client)
-+{
-+ return i2c_detach_client(client);
-+}
-+
-+static int __init ezx_eoc_probe(struct platform_device *dev)
-+{
-+ int ret;
-+
-+ ret = i2c_add_driver(&eoc_i2c_driver);
-+ if (ret != 0)
-+ return -EINVAL;
-+
-+ pxa_set_udc_info(&ezx_udc_info);
-+
-+ return 0;
-+}
-+
-+static int ezx_eoc_remove(struct platform_device *dev)
-+{
-+ i2c_del_driver(&eoc_i2c_driver);
-+ return 0;
-+}
-+
-+static int ezx_eoc_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ eoc_switch_to_nothing();
-+ return 0;
-+}
-+
-+static int ezx_eoc_resume(struct platform_device *dev)
-+{
-+ eoc_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(PCAP_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(PCAP_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 ezx_eoc_driver = {
-+ .probe = ezx_eoc_probe,
-+ .remove = ezx_eoc_remove,
-+ .suspend = ezx_eoc_suspend,
-+ .resume = ezx_eoc_resume,
-+ .driver = {
-+ .name = "ezx-eoc",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+int __init ezx_eoc_init(void)
-+{
-+ return platform_driver_register(&ezx_eoc_driver);
-+}
-+
-+void ezx_eoc_exit(void)
-+{
-+ return platform_driver_unregister(&ezx_eoc_driver);
-+}
-+
-+MODULE_AUTHOR("Alex Zhang <celeber2@gmail.com>");
-+MODULE_DESCRIPTION("EZX EOC I2C driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(ezx_eoc_init);
-+module_exit(ezx_eoc_exit);
-Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-24 19:37:27.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-24 19:37:27.000000000 +0200
-@@ -112,6 +112,12 @@
- config EZX_PCAP
- bool "PCAP Support"
-
-+config EZX_EOC
-+ tristate "EOC i2c driver of Motorola EZX phones"
-+ depends on I2C && EXPERIMENTAL
-+ help
-+ EOC i2c driver of Motorola EZX phones
-+
- config EZX_EMU
- bool "Motorola Enchanced Mini Usb"
- depends on EZX_PCAP
-Index: linux-2.6.23/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-24 19:37:27.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-24 19:37:27.000000000 +0200
-@@ -28,6 +28,7 @@
- obj-$(CONFIG_EZX_BP) += ezx-bp.o
- obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
- obj-$(CONFIG_EZX_EMU) += ezx-emu.o
-+obj-$(CONFIG_EZX_EOC) += ezx-eoc.o
-
- # Support for blinky lights
- led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch
deleted file mode 100644
index 2dd45d2a17..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-mtd-map.patch
+++ /dev/null
@@ -1,309 +0,0 @@
-Index: linux-2.6.23/drivers/mtd/maps/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/mtd/maps/Kconfig 2007-10-10 09:38:44.000000000 +0200
-+++ linux-2.6.23/drivers/mtd/maps/Kconfig 2007-10-22 22:19:57.000000000 +0200
-@@ -605,6 +605,34 @@
- 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_A1200
-+ bool "A1200 Original Mapping"
-+
-+config MTD_EZX_E2
-+ bool "E2 Original Mapping"
-+
-+config MTD_EZX_E6
-+ bool "E6 Original Mapping"
-+
-+endchoice
-+
-+endif
-+
- config MTD_PLATRAM
- tristate "Map driver for platform device RAM (mtd-ram)"
- select MTD_RAM
-Index: linux-2.6.23/drivers/mtd/maps/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/mtd/maps/Makefile 2007-10-10 09:38:44.000000000 +0200
-+++ linux-2.6.23/drivers/mtd/maps/Makefile 2007-10-22 22:19:57.000000000 +0200
-@@ -71,3 +71,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.23/drivers/mtd/maps/ezx-flash.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/mtd/maps/ezx-flash.c 2007-10-22 22:19:57.000000000 +0200
-@@ -0,0 +1,256 @@
-+/*
-+ * 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.
-+ *
-+ */
-+
-+#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/cacheflush.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)
-+{
-+ flush_ioremap_region(map->phys, map->cached, from, len);
-+}
-+
-+
-+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 = "Moto Kernel",
-+ .size = 0x000e0000, // 896KB
-+ .offset = 0x00040000,
-+ } , {
-+ .name = "rootfs",
-+ .size = 0x01760000,
-+ .offset = 0x00120000,
-+ } , {
-+ .name = "OpenEZX Kernel",
-+ .size = 0x00180000, // 1.5MB
-+ .offset = 0x01880000,
-+ } , {
-+ .name = "ezxlocal",
-+ .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,
-+ },
-+};
-+#elif defined CONFIG_MTD_EZX_A1200
-+static struct mtd_partition pxa27x_partitions[] = {
-+ {
-+ .name = "Caddo 2",
-+ .size = 0x00008000,
-+ .offset = 0,
-+ }, {
-+ .name = "Itunes",
-+ .size = 0x00008000,
-+ .offset = 0x00008000,
-+ }, {
-+ .name = "Caddo 1",
-+ .size = 0x00008000,
-+ .offset = 0x00010000,
-+ }, {
-+ .name = "Fota rev",
-+ .size = 0x00008000,
-+ .offset = 0x00018000,
-+ }, {
-+ .name = "MBM",
-+ .size = 0x00040000,
-+ .offset = 0x00020000,
-+ .mask_flags = MTD_WRITEABLE,
-+ }, {
-+ .name = "Blob",
-+ .size = 0x00020000,
-+ .offset = 0x00080000,
-+ .mask_flags = MTD_WRITEABLE,
-+ }, {
-+ .name = "Kernel",
-+ .size = 0x00100000,
-+ .offset = 0x000A0000,
-+ } , {
-+ .name = "UserFS DB",
-+ .size = 0x00600000,
-+ .offset = 0x00AA0000,
-+ }, {
-+ .name = "UserFS",
-+ .size = 0x007E0000,
-+ .offset = 0x010A0000,
-+ }, {
-+ .name = "Test cmd",
-+ .size = 0x00020000,
-+ .offset = 0x018C0000,
-+ } , {
-+ .name = "Logo",
-+ .size = 0x00020000,
-+ .offset = 0x018E0000,
-+ } , {
-+ .name = "Fota",
-+ .size = 0x000c0000,
-+ .offset = 0x01900000,
-+ }, {
-+ .name = "Reserve",
-+ .size = 0x00020000,
-+ .offset = 0x019c0000,
-+ }
-+};
-+#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;
-+
-+ 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);
-+ }
-+ 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.23/patches/ezx-pcap.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-pcap.patch
deleted file mode 100644
index c917d4aa9e..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-pcap.patch
+++ /dev/null
@@ -1,849 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-pcap.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-pcap.c 2007-10-23 15:41:22.000000000 +0200
-@@ -0,0 +1,513 @@
-+/* 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/ezx.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>
-+
-+#if 0
-+#define DEBUGP(x, args...) printk(x, ## args)
-+#else
-+#define DEBUGP(x, args...)
-+#endif
-+
-+static DEFINE_SPINLOCK(ezx_ssp_lock);
-+static struct ssp_dev ezx_ssp_dev;
-+static struct ssp_state ezx_ssp_state;
-+static struct pcap_platform_data *pcap_data;
-+static int pcap_irq;
-+
-+static unsigned long ezx_ssp_pcap_putget(ulong data)
-+{
-+ unsigned long flag;
-+ u32 ret = 0;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH)
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ else
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+
-+ ssp_write_word(&ezx_ssp_dev,data);
-+ ssp_read_word(&ezx_ssp_dev, &ret);
-+
-+ if (pcap_data->cs >= 0) {
-+ if(pcap_data->flags & PCAP_CS_AH)
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ else
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+
-+ return ret;
-+}
-+
-+int ezx_pcap_write(u_int8_t reg_num, u_int32_t value)
-+{
-+ value &= PCAP_REGISTER_VALUE_MASK;
-+ value |= PCAP_REGISTER_WRITE_OP_BIT
-+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
-+
-+ ezx_ssp_pcap_putget(value);
-+
-+ 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 = PCAP_REGISTER_READ_OP_BIT
-+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
-+
-+ *value = ezx_ssp_pcap_putget(frame);
-+
-+ 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 & PCAP_REGISTER_VALUE_MASK);
-+ u_int8_t reg_num = (sspPcapBit & PCAP_REGISTER_ADDRESS_MASK)
-+ >> 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 & PCAP_REGISTER_ADDRESS_MASK)
-+ >> PCAP_REGISTER_ADDRESS_SHIFT;
-+
-+ ret = ezx_pcap_read(reg_num, &tmp);
-+ if (ret < 0)
-+ return ret;
-+
-+ return tmp & (bit & 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", "INT_SEL\t", "SWCTRL\t", "VREG1\t",
-+ "VREG2\t", "VREG\t", "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC",
-+ "RX_AUD_AMPS", "ST_DAC\t", "RTC_TOD\t", "RTC_TODA", "RTC_DAY\t",
-+ "RTC_DAYA", "MTRTMR\t", "PWRCTRL\t", "BUSCTRL\t", "PERIPH\t",
-+ "AUXVREG_MASK", "VENDOR_REV", "LOWPWR_CTRL", "PERIPH_MASK",
-+ "TX_AUD_AMPS", "GP\t",
-+ 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(PCAP_REG_AUXVREG, &tmp);
-+
-+ tmp &= ~PCAP_AUXVREG_V_VIB_MASK;
-+ tmp |= ((value << PCAP_AUXVREG_V_VIB_SHIFT) & PCAP_AUXVREG_V_VIB_MASK);
-+
-+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
-+}
-+EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level);
-+
-+/* MMC/SD specific functions */
-+
-+void ezx_pcap_mmcsd_voltage(u_int32_t bits)
-+{
-+ unsigned int tmp;
-+ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp);
-+ if (pcap_data->flags & PCAP_MCI_SD) {
-+ tmp &= ~PCAP_AUXVREG_VAUX2_MASK;
-+ tmp |= ((bits << PCAP_AUXVREG_VAUX2_SHIFT) &
-+ PCAP_AUXVREG_VAUX2_MASK);
-+ }
-+ else if (pcap_data->flags & PCAP_MCI_TF) {
-+ tmp &= ~PCAP_AUXVREG_VAUX3_MASK;
-+ tmp |= ((bits << PCAP_AUXVREG_VAUX3_SHIFT) &
-+ PCAP_AUXVREG_VAUX3_MASK);
-+ }
-+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
-+}
-+EXPORT_SYMBOL(ezx_pcap_mmcsd_voltage);
-+
-+int ezx_pcap_mmcsd_power(int on)
-+{
-+ if (on > 0) on = 1;
-+ else on = 0;
-+
-+ if (pcap_data->flags & PCAP_MCI_SD)
-+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX2_EN, on);
-+ else if (pcap_data->flags & PCAP_MCI_TF)
-+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX3_EN, on);
-+ else
-+ return -ENODEV;
-+}
-+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] = EZX_IRQ_1HZ, /* 1HZ */
-+ [3] = EZX_IRQ_WH, /* WH */
-+ [4] = EZX_IRQ_WL, /* WL */
-+ [5] = EZX_IRQ_TODA, /* TODA */
-+ [6] = EZX_IRQ_USB4V,
-+ [7] = EZX_IRQ_ONOFF, /* ONOFF */
-+ [8] = EZX_IRQ_ONOFF2, /* ONOFF2 */
-+ [9] = EZX_IRQ_USB1V,
-+ [10] = EZX_IRQ_MOBPORT, /* MOBPORT */
-+ [11] = EZX_IRQ_MIC,
-+ [12] = EZX_IRQ_HEADJACK,
-+ [13] = EZX_IRQ_ST, /* ST */
-+ [14] = EZX_IRQ_PC, /* PC */
-+ [15] = EZX_IRQ_WARM, /* WARM */
-+ [16] = EZX_IRQ_EOL, /* EOL */
-+ [17] = EZX_IRQ_CLK, /* CLK */
-+ [18] = EZX_IRQ_SYSRST, /* SYSRST */
-+ [19] = 0,
-+ [20] = EZX_IRQ_ADCDONE2,
-+ [21] = EZX_IRQ_SOFTRESET, /* SOFTRESET */
-+ [22] = EZX_IRQ_MNEXB, /* MNEXB */
-+};
-+
-+/* Array indexed by IRQ NUMBER, returns PCAP absolute value */
-+static unsigned int irq2pcap[] = {
-+ [EZX_IRQ_MNEXB] = PCAP_IRQ_MNEXB,
-+ [EZX_IRQ_SOFTRESET] = PCAP_IRQ_SOFTRESET,
-+ [EZX_IRQ_SYSRST] = PCAP_IRQ_SYSRST,
-+ [EZX_IRQ_CLK] = PCAP_IRQ_CLK,
-+ [EZX_IRQ_EOL] = PCAP_IRQ_EOL,
-+ [EZX_IRQ_WARM] = PCAP_IRQ_WARM,
-+ [EZX_IRQ_PC] = PCAP_IRQ_PC,
-+ [EZX_IRQ_ST] = PCAP_IRQ_ST,
-+ [EZX_IRQ_MOBPORT] = PCAP_IRQ_MOBPORT,
-+ [EZX_IRQ_ONOFF2] = PCAP_IRQ_ONOFF2,
-+ [EZX_IRQ_ONOFF] = PCAP_IRQ_ONOFF,
-+ [EZX_IRQ_TODA] = PCAP_IRQ_TODA,
-+ [EZX_IRQ_WL] = PCAP_IRQ_WL,
-+ [EZX_IRQ_WH] = PCAP_IRQ_WH,
-+ [EZX_IRQ_1HZ] = PCAP_IRQ_1HZ,
-+ [EZX_IRQ_USB4V] = PCAP_IRQ_USB4V,
-+ [EZX_IRQ_USB1V] = PCAP_IRQ_USB1V,
-+ [EZX_IRQ_HEADJACK] = PCAP_IRQ_A1,
-+ [EZX_IRQ_MIC] = PCAP_IRQ_MB2,
-+ [EZX_IRQ_TS] = PCAP_IRQ_TS,
-+ [EZX_IRQ_ADCDONE] = PCAP_IRQ_ADCDONE,
-+ [EZX_IRQ_ADCDONE2] = PCAP_IRQ_ADCDONE2,
-+};
-+
-+static void pcap_ack_irq(unsigned int irq)
-+{
-+ DEBUGP("pcap_ack_irq: %u\n", irq);
-+ ezx_pcap_write(PCAP_REG_ISR, irq2pcap[irq]);
-+}
-+
-+static void pcap_mask_irq(unsigned int irq)
-+{
-+ u_int32_t reg;
-+ unsigned long flag;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ DEBUGP("pcap_mask_irq: %u\n", irq);
-+ ezx_pcap_read(PCAP_REG_MSR, &reg);
-+ reg |= irq2pcap[irq];
-+ ezx_pcap_write(PCAP_REG_MSR, reg);
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+}
-+
-+static void pcap_unmask_irq(unsigned int irq)
-+{
-+ u_int32_t tmp;
-+ unsigned long flag;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ DEBUGP("pcap_unmask_irq: %u\n", irq);
-+ ezx_pcap_read(PCAP_REG_MSR, &tmp);
-+ tmp &= ~irq2pcap[irq];
-+ ezx_pcap_write(PCAP_REG_MSR, tmp);
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+}
-+
-+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)
-+{
-+ const unsigned int cpu = smp_processor_id();
-+ int i;
-+ u_int32_t isr, msr;
-+
-+ spin_lock(&desc->lock);
-+ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
-+ if (unlikely(desc->status & (IRQ_INPROGRESS | IRQ_DISABLED))) {
-+ 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))) {
-+ desc->chip->unmask(irq);
-+ desc->status &= ~IRQ_MASKED;
-+ }
-+ desc->status &= ~IRQ_PENDING;
-+
-+ ezx_pcap_read(PCAP_REG_ISR, &isr);
-+ ezx_pcap_read(PCAP_REG_MSR, &msr);
-+ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) {
-+ unsigned int pirq = pcap2irq[i];
-+ struct irq_desc *subdesc;
-+ if (pirq == 0 || !(isr & irq2pcap[pirq]))
-+ continue;
-+ subdesc = irq_desc + pirq;
-+ if (msr & irq2pcap[pirq])
-+ continue;
-+ DEBUGP("found irq %u\n", pirq);
-+ spin_unlock(&desc->lock);
-+ desc_handle_irq(pirq, subdesc);
-+ 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(pcap_irq, NULL);
-+
-+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
-+ set_irq_chip(irq, NULL);
-+ set_irq_handler(irq, NULL);
-+ set_irq_flags(irq, 0);
-+ }
-+
-+ ssp_exit(&ezx_ssp_dev);
-+
-+ return 0;
-+}
-+
-+static int __init ezx_pcap_probe(struct platform_device *pdev)
-+{
-+ unsigned int ret, irq;
-+ DEBUGP("ezx_pcap_probe entered\n");
-+
-+ pcap_data = pdev->dev.platform_data;
-+
-+ /* configure ssp port */
-+ 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);
-+
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH)
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
-+ else
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT
-+ | GPIO_DFLT_HIGH);
-+ }
-+ pcap_irq = platform_get_irq(pdev, 0);
-+ if(pcap_irq < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for pcap!\n");
-+ return pcap_irq;
-+ }
-+
-+ ret = ssp_init(&ezx_ssp_dev, pcap_data->port, 0);
-+ if (ret) {
-+ printk(KERN_ERR "Unable to register SSP handler!\n");
-+ return ret;
-+ }
-+
-+ 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(pcap_data->clk));
-+ ssp_enable(&ezx_ssp_dev);
-+
-+ /* mask/ack all PCAP interrupts */
-+ ezx_pcap_write(PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT);
-+ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER);
-+
-+ if (pcap_data->init)
-+ pcap_data->init();
-+
-+ /* set up interrupt demultiplexing code for PCAP2 irqs */
-+ set_irq_type(pcap_irq, IRQT_RISING);
-+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
-+ set_irq_chip(irq, &pcap_chip);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID);
-+ }
-+ set_irq_chained_handler(pcap_irq, pcap_irq_demux_handler);
-+ set_irq_wake(pcap_irq, 1);
-+
-+ printk("ezx-pcap: ssp driver registered\n");
-+ return ret;
-+}
-+
-+static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ DEBUGP("pcap suspend!\n");
-+ ssp_flush(&ezx_ssp_dev);
-+ ssp_save_state(&ezx_ssp_dev, &ezx_ssp_state);
-+ if (pcap_data->cs >= 0)
-+ pxa_gpio_mode(pcap_data->cs | GPIO_IN);
-+ return 0;
-+}
-+
-+static int ezx_pcap_resume(struct platform_device *dev)
-+{
-+ DEBUGP("pcap resume!\n");
-+
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH) {
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+ else {
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT | GPIO_DFLT_HIGH);
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+ }
-+ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
-+ ssp_enable(&ezx_ssp_dev);
-+
-+ ezx_pcap_write(PCAP_REG_ISR, 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.23/include/asm-arm/arch-pxa/ezx-pcap.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/ezx-pcap.h 2007-10-23 15:41:20.000000000 +0200
-@@ -0,0 +1,248 @@
-+/*
-+ * Copyright 2007 Daniel Ribeiro <drwyrm@gmail.com>
-+ */
-+
-+#ifndef EZX_PCAP_H
-+#define EZX_PCAP_H
-+
-+struct pcap_platform_data {
-+ int port; /* SSP port */
-+ int cs; /* CS gpio */
-+ int clk;
-+ int flags; /* driver flags */
-+ int (*init)(void); /* board specific driver init */
-+};
-+
-+/* driver configuration */
-+#define PCAP_CS_AH (1 << 0) /* CS pin is active high */
-+#define PCAP_MCI_SD (1 << 1) /* SD card slot */
-+#define PCAP_MCI_TF (1 << 2) /* TF card slot */
-+
-+#define PCAP_REGISTER_WRITE_OP_BIT 0x80000000
-+#define PCAP_REGISTER_READ_OP_BIT 0x00000000
-+
-+#define PCAP_REGISTER_VALUE_MASK 0x01ffffff
-+#define PCAP_REGISTER_ADDRESS_MASK 0x7c000000
-+#define PCAP_REGISTER_ADDRESS_SHIFT 26
-+#define PCAP_REGISTER_NUMBER 32
-+#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff
-+#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff
-+
-+
-+#define pbit(reg, bit) ((reg << PCAP_REGISTER_ADDRESS_SHIFT) | bit)
-+
-+/* registers acessible by both pcap ports */
-+#define PCAP_REG_ISR 0x0 /* Interrupt Status */
-+#define PCAP_REG_MSR 0x1 /* Interrupt Mask */
-+#define PCAP_REG_PSTAT 0x2 /* Processor Status */
-+#define PCAP_REG_VREG2 0x6 /* Regulator Bank 2 Control */
-+#define PCAP_REG_AUXVREG 0x7 /* Auxiliary Regulator Control */
-+#define PCAP_REG_BATT 0x8 /* Battery Control */
-+#define PCAP_REG_ADC1 0x9 /* AD Control */
-+#define PCAP_REG_ADC2 0xa /* AD Result */
-+#define PCAP_REG_CODEC 0xb /* Audio Codec Control */
-+#define PCAP_REG_RX_AMPS 0xc /* RX Audio Amplifiers Control */
-+#define PCAP_REG_ST_DAC 0xd /* Stereo DAC Control */
-+#define PCAP_REG_BUSCTRL 0x14 /* Connectivity Control */
-+#define PCAP_REG_PERIPH 0x15 /* Peripheral Control */
-+#define PCAP_REG_LOWPWR 0x18 /* Regulator Low Power Control */
-+#define PCAP_REG_TX_AMPS 0x1a /* TX Audio Amplifiers Control */
-+#define PCAP_REG_GP 0x1b /* General Purpose */
-+
-+/* registers acessible by pcap port 1 only (a1200, e2 & e6) */
-+#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */
-+#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */
-+#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */
-+#define PCAP_REG_RTC_TOD 0xe /* RTC Time of Day */
-+#define PCAP_REG_RTC_TODA 0xf /* RTC Time of Day Alarm */
-+#define PCAP_REG_RTC_DAY 0x10 /* RTC Day */
-+#define PCAP_REG_RTC_DAYA 0x11 /* RTC Day Alarm */
-+#define PCAP_REG_MTRTMR 0x12 /* AD Monitor Timer */
-+#define PCAP_REG_PWR 0x13 /* Power Control */
-+#define PCAP_REG_AUXVREG_MASK 0x16 /* Auxiliary Regulator Mask */
-+#define PCAP_REG_VENDOR_REV 0x17
-+#define PCAP_REG_PERIPH_MASK 0x19 /* Peripheral Mask */
-+
-+/* interrupts - registers 0, 1, 2, 3 */
-+#define PCAP_IRQ_ADCDONE (1 << 0) /* AD Conversion Done Port 1 */
-+#define PCAP_IRQ_TS (1 << 1) /* Touch Screen */
-+#define PCAP_IRQ_1HZ (1 << 2) /* 1HZ Timer */
-+#define PCAP_IRQ_WH (1 << 3)
-+#define PCAP_IRQ_WL (1 << 4)
-+#define PCAP_IRQ_TODA (1 << 5)
-+#define PCAP_IRQ_USB4V (1 << 6)
-+#define PCAP_IRQ_ONOFF (1 << 7)
-+#define PCAP_IRQ_ONOFF2 (1 << 8)
-+#define PCAP_IRQ_USB1V (1 << 9)
-+#define PCAP_IRQ_MOBPORT (1 << 10)
-+#define PCAP_IRQ_MB2 (1 << 11) /* Mic */
-+#define PCAP_IRQ_A1 (1 << 12) /* Audio jack */
-+#define PCAP_IRQ_ST (1 << 13)
-+#define PCAP_IRQ_PC (1 << 14)
-+#define PCAP_IRQ_WARM (1 << 15)
-+#define PCAP_IRQ_EOL (1 << 16)
-+#define PCAP_IRQ_CLK (1 << 17)
-+#define PCAP_IRQ_SYSRST (1 << 18)
-+#define PCAP_IRQ_ADCDONE2 (1 << 20) /* AD Conversion Done Port 2 */
-+#define PCAP_IRQ_SOFTRESET (1 << 21)
-+#define PCAP_IRQ_MNEXB (1 << 22)
-+
-+#define PCAP_BIT_VREG2_V1_STBY pbit(PCAP_REG_VREG2, (1 << 0))
-+#define PCAP_BIT_VREG2_V2_STBY pbit(PCAP_REG_VREG2, (1 << 1))
-+#define PCAP_BIT_VREG2_V3_STBY pbit(PCAP_REG_VREG2, (1 << 2))
-+#define PCAP_BIT_VREG2_V4_STBY pbit(PCAP_REG_VREG2, (1 << 3))
-+#define PCAP_BIT_VREG2_V5_STBY pbit(PCAP_REG_VREG2, (1 << 4))
-+#define PCAP_BIT_VREG2_V6_STBY pbit(PCAP_REG_VREG2, (1 << 5))
-+#define PCAP_BIT_VREG2_V7_STBY pbit(PCAP_REG_VREG2, (1 << 6))
-+#define PCAP_BIT_VREG2_V8_STBY pbit(PCAP_REG_VREG2, (1 << 7))
-+#define PCAP_BIT_VREG2_V9_STBY pbit(PCAP_REG_VREG2, (1 << 8))
-+#define PCAP_BIT_VREG2_V10_STBY pbit(PCAP_REG_VREG2, (1 << 9))
-+#define PCAP_BIT_VREG2_V1_LOWPWR pbit(PCAP_REG_VREG2, (1 << 10))
-+#define PCAP_BIT_VREG2_V2_LOWPWR pbit(PCAP_REG_VREG2, (1 << 11))
-+#define PCAP_BIT_VREG2_V3_LOWPWR pbit(PCAP_REG_VREG2, (1 << 12))
-+#define PCAP_BIT_VREG2_V4_LOWPWR pbit(PCAP_REG_VREG2, (1 << 13))
-+#define PCAP_BIT_VREG2_V5_LOWPWR pbit(PCAP_REG_VREG2, (1 << 14))
-+#define PCAP_BIT_VREG2_V6_LOWPWR pbit(PCAP_REG_VREG2, (1 << 15))
-+#define PCAP_BIT_VREG2_V7_LOWPWR pbit(PCAP_REG_VREG2, (1 << 16))
-+#define PCAP_BIT_VREG2_V8_LOWPWR pbit(PCAP_REG_VREG2, (1 << 17))
-+#define PCAP_BIT_VREG2_V9_LOWPWR pbit(PCAP_REG_VREG2, (1 << 18))
-+#define PCAP_BIT_VREG2_V10_LOWPWR pbit(PCAP_REG_VREG2, (1 << 19))
-+
-+#define PCAP_BIT_AUXVREG_VAUX1_EN pbit(PCAP_REG_AUXVREG, (1 << 1))
-+#define PCAP_AUXVREG_VAUX1_MASK 0x0000000c
-+#define PCAP_AUXVREG_VAUX1_SHIFT 2
-+#define PCAP_BIT_AUXVREG_VAUX2_EN pbit(PCAP_REG_AUXVREG, (1 << 4))
-+#define PCAP_AUXVREG_VAUX2_MASK 0x00000060
-+#define PCAP_AUXVREG_VAUX2_SHIFT 5
-+#define PCAP_BIT_AUXVREG_VAUX3_EN pbit(PCAP_REG_AUXVREG, (1 << 7))
-+#define PCAP_AUXVREG_VAUX3_MASK 0x00000f00
-+#define PCAP_AUXVREG_VAUX3_SHIFT 8
-+#define PCAP_BIT_AUXVREG_VAUX4_EN pbit(PCAP_REG_AUXVREG, (1 << 12))
-+#define PCAP_AUXVREG_VAUX4_MASK 0x00006000
-+#define PCAP_AUXVREG_VAUX4_SHIFT 13
-+#define PCAP_BIT_AUXVREG_VSIM2_EN pbit(PCAP_REG_AUXVREG, (1 << 16))
-+#define PCAP_BIT_AUXVREG_VSIM_EN pbit(PCAP_REG_AUXVREG, (1 << 17))
-+#define PCAP_BIT_AUXVREG_VSIM_0 pbit(PCAP_REG_AUXVREG, (1 << 18))
-+#define PCAP_BIT_AUXVREG_V_VIB_EN pbit(PCAP_REG_AUXVREG, (1 << 19))
-+#define PCAP_AUXVREG_V_VIB_MASK 0x00300000
-+#define PCAP_AUXVREG_V_VIB_SHIFT 20
-+#define PCAP_BIT_AUXVREG_VAUX1_STBY pbit(PCAP_REG_AUXVREG, (1 << 22))
-+#define PCAP_BIT_AUXVREG_VAUX1_LOWPWR pbit(PCAP_REG_AUXVREG, (1 << 23))
-+#define PCAP_BIT_AUXVREG_SW3_STBY pbit(PCAP_REG_AUXVREG, (1 << 24))
-+
-+#define PCAP_BATT_DAC_MASK 0x000000ff
-+#define PCAP_BATT_DAC_SHIFT 0
-+#define PCAP_BIT_BATT_B_FDBK pbit(PCAP_REG_BATT, (1 << 8))
-+#define PCAP_BIT_BATT_EXT_ISENSE pbit(PCAP_REG_BATT, (1 << 9))
-+#define PCAP_BATT_V_COIN_MASK 0x00003c00
-+#define PCAP_BATT_V_COIN_SHIFT 10
-+#define PCAP_BIT_BATT_I_COIN pbit(PCAP_REG_BATT, (1 << 14))
-+#define PCAP_BIT_BATT_COIN_CH_EN pbit(PCAP_REG_BATT, (1 << 15))
-+#define PCAP_BATT_EOL_SEL_MASK 0x000e0000
-+#define PCAP_BATT_EOL_SEL_SHIFT 17
-+#define PCAP_BIT_BATT_EOL_CMP_EN pbit(PCAP_REG_BATT, (1 << 20))
-+#define PCAP_BIT_BATT_BATT_DET_EN pbit(PCAP_REG_BATT, (1 << 21))
-+#define PCAP_BIT_BATT_THERMBIAS_CTRL pbit(PCAP_REG_BATT, (1 << 22))
-+
-+#define PCAP_BIT_ADC1_ADEN pbit(PCAP_REG_ADC1, (1 << 0))
-+#define PCAP_BIT_ADC1_RAND pbit(PCAP_REG_ADC1, (1 << 1))
-+#define PCAP_BIT_ADC1_AD_SEL1 pbit(PCAP_REG_ADC1, (1 << 2))
-+#define PCAP_BIT_ADC1_AD_SEL2 pbit(PCAP_REG_ADC1, (1 << 3))
-+#define PCAP_ADC1_ADA1_MASK 0x00000070
-+#define PCAP_ADC1_ADA1_SHIFT 4
-+#define PCAP_ADC1_ADA2_MASK 0x00000380
-+#define PCAP_ADC1_ADA2_SHIFT 7
-+#define PCAP_ADC1_ATO_MASK 0x00003c00
-+#define PCAP_ADC1_ATO_SHIFT 10
-+#define PCAP_BIT_ADC1_ATOX pbit(PCAP_REG_ADC1, (1 << 14))
-+#define PCAP_BIT_ADC1_MTR1 pbit(PCAP_REG_ADC1, (1 << 15))
-+#define PCAP_BIT_ADC1_MTR2 pbit(PCAP_REG_ADC1, (1 << 16))
-+#define PCAP_ADC1_TS_M_MASK 0x000e0000
-+#define PCAP_ADC1_TS_M_SHIFT 17
-+#define PCAP_BIT_ADC1_TS_REF_LOWPWR pbit(PCAP_REG_ADC1, (1 << 20))
-+#define PCAP_BIT_ADC1_TS_REFENB pbit(PCAP_REG_ADC1, (1 << 21))
-+#define PCAP_BIT_ADC1_BATT_I_POLARITY pbit(PCAP_REG_ADC1, (1 << 22))
-+#define PCAP_BIT_ADC1_BATT_I_ADC pbit(PCAP_REG_ADC1, (1 << 23))
-+
-+#define PCAP_ADC2_ADD1_MASK 0x000003ff
-+#define PCAP_ADC2_ADD1_SHIFT 0
-+#define PCAP_ADC2_ADD2_MASK 0x000ffc00
-+#define PCAP_ADC2_ADD2_SHIFT 10
-+#define PCAP_BIT_ADC2_ADINC1 pbit(PCAP_REG_ADC2, (1 << 20))
-+#define PCAP_BIT_ADC2_ADINC2 pbit(PCAP_REG_ADC2, (1 << 21))
-+#define PCAP_BIT_ADC2_ASC pbit(PCAP_REG_ADC2, (1 << 22))
-+
-+#define PCAP_BIT_BUSCTRL_FSENB 0x50000001
-+#define PCAP_BIT_BUSCTRL_USB_SUSPEND 0x50000002
-+#define PCAP_BIT_BUSCTRL_USB_PU 0x50000004
-+#define PCAP_BIT_BUSCTRL_USB_PD 0x50000008
-+#define PCAP_BIT_BUSCTRL_VUSB_EN 0x50000010
-+#define PCAP_BIT_BUSCTRL_USB_PS 0x50000020
-+#define PCAP_BIT_BUSCTRL_VUSB_MSTR_EN 0x50000040
-+#define PCAP_BIT_BUSCTRL_VBUS_PD_ENB 0x50000080
-+#define PCAP_BIT_BUSCTRL_CURRLIM 0x50000100
-+#define PCAP_BIT_BUSCTRL_RS232ENB 0x50000200
-+#define PCAP_BIT_BUSCTRL_RS232_DIR 0x50000400
-+#define PCAP_BIT_BUSCTRL_SE0_CONN 0x50000800
-+#define PCAP_BIT_BUSCTRL_USB_PDM 0x50001000
-+#define PCAP_BIT_BUSCTRL_BUS_PRI_ADJ 0x51000000
-+
-+#define PCAP_BIT_PERIPH_BL_CTRL0 0x54000001
-+#define PCAP_BIT_PERIPH_BL_CTRL1 0x54000002
-+#define PCAP_BIT_PERIPH_BL_CTRL2 0x54000004
-+#define PCAP_BIT_PERIPH_BL_CTRL3 0x54000008
-+#define PCAP_BIT_PERIPH_BL_CTRL4 0x54000010
-+#define PCAP_BIT_PERIPH_LEDR_EN 0x54000020
-+#define PCAP_BIT_PERIPH_LEDG_EN 0x54000040
-+#define PCAP_BIT_PERIPH_LEDR_CTRL0 0x54000080
-+#define PCAP_BIT_PERIPH_LEDR_CTRL1 0x54000100
-+#define PCAP_BIT_PERIPH_LEDR_CTRL2 0x54000200
-+#define PCAP_BIT_PERIPH_LEDR_CTRL3 0x54000400
-+#define PCAP_BIT_PERIPH_LEDG_CTRL0 0x54000800
-+#define PCAP_BIT_PERIPH_LEDG_CTRL1 0x54001000
-+#define PCAP_BIT_PERIPH_LEDG_CTRL2 0x54002000
-+#define PCAP_BIT_PERIPH_LEDG_CTRL3 0x54004000
-+#define PCAP_BIT_PERIPH_LEDR_I0 0x54008000
-+#define PCAP_BIT_PERIPH_LEDR_I1 0x54010000
-+#define PCAP_BIT_PERIPH_LEDG_I0 0x54020000
-+#define PCAP_BIT_PERIPH_LEDG_I1 0x54040000
-+#define PCAP_BIT_PERIPH_SKIP 0x54080000
-+#define PCAP_BIT_PERIPH_BL2_CTRL0 0x54100000
-+#define PCAP_BIT_PERIPH_BL2_CTRL1 0x54200000
-+#define PCAP_BIT_PERIPH_BL2_CTRL2 0x54400000
-+#define PCAP_BIT_PERIPH_BL2_CTRL3 0x54800000
-+#define PCAP_BIT_PERIPH_BL2_CTRL4 0x55000000
-+
-+#define PCAP_BIT_LOWPWR_VAUX2_STBY 0x60000001
-+#define PCAP_BIT_LOWPWR_VAUX2_LOWPWR 0x60000002
-+#define PCAP_BIT_LOWPWR_VAUX3_STBY 0x60000004
-+#define PCAP_BIT_LOWPWR_VAUX3_LOWPWR 0x60000008
-+#define PCAP_BIT_LOWPWR_VAUX4_STBY 0x60000010
-+#define PCAP_BIT_LOWPWR_VAUX4_LOWPWR 0x60000020
-+#define PCAP_BIT_LOWPWR_VSIM_LOWPWR 0x60000040
-+#define PCAP_BIT_LOWPWR_VSIM2_LOWPWR 0x60000080
-+#define PCAP_BIT_LOWPWR_SW1_MODE00 0x60000100
-+#define PCAP_BIT_LOWPWR_SW1_MODE01 0x60000200
-+#define PCAP_BIT_LOWPWR_SW1_MODE10 0x60000400
-+#define PCAP_BIT_LOWPWR_SW1_MODE11 0x60000800
-+#define PCAP_BIT_LOWPWR_SW10_DVS 0x60001000
-+#define PCAP_BIT_LOWPWR_SW11_DVS 0x60002000
-+#define PCAP_BIT_LOWPWR_SW12_DVS 0x60004000
-+#define PCAP_BIT_LOWPWR_SW13_DVS 0x60008000
-+#define PCAP_BIT_LOWPWR_SW2_MODE00 0x60010000
-+#define PCAP_BIT_LOWPWR_SW2_MODE01 0x60020000
-+#define PCAP_BIT_LOWPWR_SW2_MODE10 0x60040000
-+#define PCAP_BIT_LOWPWR_SW2_MODE11 0x60080000
-+#define PCAP_BIT_LOWPWR_SW20_DVS 0x60100000
-+#define PCAP_BIT_LOWPWR_SW21_DVS 0x60200000
-+#define PCAP_BIT_LOWPWR_SW22_DVS 0x60400000
-+#define PCAP_BIT_LOWPWR_SW23_DVS 0x60800000
-+#define PCAP_BIT_LOWPWR_VC_STBY 0x61000000
-+
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
-+extern int ezx_pcap_bit_get(u_int32_t);
-+extern int ezx_pcap_read_bit(u_int32_t);
-+extern void ezx_pcap_vibrator_level(u_int32_t);
-+#endif
-Index: linux-2.6.23/include/asm-arm/arch-pxa/irqs.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h 2007-10-23 15:18:28.000000000 +0200
-@@ -79,7 +79,7 @@
- * within sensible limits.
- */
- #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM)
--#define IRQ_BOARD_END (IRQ_BOARD_START + 16)
-+#define IRQ_BOARD_END (IRQ_BOARD_START + 22)
-
- #define IRQ_SA1111_START (IRQ_BOARD_END)
- #define IRQ_GPAIN0 (IRQ_BOARD_END + 0)
-@@ -170,7 +170,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)
-@@ -216,3 +217,28 @@
- #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 */
-+#define EZX_IRQ_WH EZX_IRQ(7)
-+#define EZX_IRQ_WL EZX_IRQ(8)
-+#define EZX_IRQ_ONOFF EZX_IRQ(9)
-+#define EZX_IRQ_ONOFF2 EZX_IRQ(10)
-+#define EZX_IRQ_MOBPORT EZX_IRQ(11)
-+#define EZX_IRQ_TODA EZX_IRQ(12)
-+#define EZX_IRQ_1HZ EZX_IRQ(13)
-+#define EZX_IRQ_MNEXB EZX_IRQ(14)
-+#define EZX_IRQ_ST EZX_IRQ(15)
-+#define EZX_IRQ_PC EZX_IRQ(16)
-+#define EZX_IRQ_SYSRST EZX_IRQ(17)
-+#define EZX_IRQ_SOFTRESET EZX_IRQ(18)
-+#define EZX_IRQ_EOL EZX_IRQ(19)
-+#define EZX_IRQ_CLK EZX_IRQ(20)
-+#define EZX_IRQ_WARM EZX_IRQ(21)
-Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2007-10-23 15:18:28.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2007-10-23 15:38:53.000000000 +0200
-@@ -109,6 +109,9 @@
- config EZX_BP
- bool "BP Control code for EZX Platform"
-
-+config EZX_PCAP
-+ bool "PCAP Support"
-+
- endif
-
- endmenu
-Index: linux-2.6.23/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2007-10-23 15:18:28.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2007-10-23 15:38:53.000000000 +0200
-@@ -26,6 +26,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.23/patches/ezx-pm.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-pm.patch
deleted file mode 100644
index aa2d83b24e..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-pm.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/pxa27x.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa27x.c 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa27x.c 2007-10-23 12:25:34.000000000 +0200
-@@ -25,6 +25,10 @@
- #include <asm/arch/pm.h>
- #include <asm/arch/dma.h>
-
-+#ifdef CONFIG_PXA_EZX
-+#include <asm/arch/ezx.h>
-+#endif
-+
- #include "generic.h"
- #include "devices.h"
-
-@@ -192,7 +196,12 @@
- void pxa27x_cpu_pm_restore(unsigned long *sleep_save)
- {
- /* 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);
-@@ -242,7 +251,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
- pxa27x_cpu_suspend(PWRMODE_SLEEP);
- break;
- }
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx.c 2007-10-23 12:23:34.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx.c 2007-10-23 12:27:30.000000000 +0200
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/ohci.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/system.h>
-
- #include "generic.h"
-
-@@ -122,8 +123,53 @@
- &ezxbp_device,
- };
-
-+/* PM */
-+extern int bp_handshake_passed(void);
-+
-+static void ezx_reboot_poweroff(char mode)
-+{
-+ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG;
-+ cpu_proc_fin();
-+
-+#ifdef CONFIG_EZX_BP
-+ 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');
-+ 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 = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC);
-
- pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
diff --git a/packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch b/packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch
deleted file mode 100644
index 9f30cc35fe..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/ezx-serial-bug-workaround.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-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.23/patches/mux-fix-init-errorpath.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix-init-errorpath.patch
deleted file mode 100644
index 716ef86fd1..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-init-errorpath.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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.23/patches/mux-fix-makefile.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix-makefile.patch
deleted file mode 100644
index 9e5ae18263..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-makefile.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-2.6.23/drivers/char/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200
-+++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:59.000000000 +0200
-@@ -111,7 +111,8 @@
- obj-$(CONFIG_JS_RTC) += js-rtc.o
- js-rtc-y = rtc.o
-
--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.23/patches/mux-fix-tty-driver.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix-tty-driver.patch
deleted file mode 100644
index 2e1aabd952..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix-tty-driver.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-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.23/patches/mux-fix.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-fix.patch
deleted file mode 100644
index b820762f41..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-fix.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-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.23/patches/mux-ifdef-ezx-features.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-ifdef-ezx-features.patch
deleted file mode 100644
index a3a6a8249a..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-ifdef-ezx-features.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c
-===================================================================
---- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:33.000000000 +0200
-+++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:45.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();
-
-@@ -735,7 +749,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);
-Index: linux-2.6.21/drivers/char/Kconfig
-===================================================================
---- linux-2.6.21.orig/drivers/char/Kconfig 2007-09-29 10:52:18.000000000 +0200
-+++ linux-2.6.21/drivers/char/Kconfig 2007-09-29 10:52:30.000000000 +0200
-@@ -1073,7 +1073,7 @@
-
- config TS0710_MUX
- tristate "GSM TS 07.10 Multiplex driver"
-- depends on EZX_BP
-+ depends on EZX_BP || X86
- help
- This implements the GSM 07.10 multiplex.
-
diff --git a/packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch
deleted file mode 100644
index 8d5299e3bd..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-linux-2.6.21-fix.patch
+++ /dev/null
@@ -1,297 +0,0 @@
-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.23/patches/mux-remove-flipbuffers.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-remove-flipbuffers.patch
deleted file mode 100644
index d4781f9fc7..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-flipbuffers.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-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.23/patches/mux-remove-get_halted_bit.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-remove-get_halted_bit.patch
deleted file mode 100644
index 0ebe27d03b..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-get_halted_bit.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-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.23/patches/mux-remove-usbh_finished_resume.patch b/packages/linux/linux-ezx-2.6.23/patches/mux-remove-usbh_finished_resume.patch
deleted file mode 100644
index c415ded428..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux-remove-usbh_finished_resume.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-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.23/patches/mux_cli.patch b/packages/linux/linux-ezx-2.6.23/patches/mux_cli.patch
deleted file mode 100644
index 4938371d51..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux_cli.patch
+++ /dev/null
@@ -1,5396 +0,0 @@
-Index: linux-2.6.23/drivers/char/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/char/Kconfig 2007-10-10 09:38:43.000000000 +0200
-+++ linux-2.6.23/drivers/char/Kconfig 2007-10-22 22:26:50.000000000 +0200
-@@ -1064,5 +1064,18 @@
-
- source "drivers/s390/char/Kconfig"
-
-+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.23/drivers/char/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/char/Makefile 2007-10-10 09:38:43.000000000 +0200
-+++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200
-@@ -111,6 +111,9 @@
- obj-$(CONFIG_JS_RTC) += js-rtc.o
- js-rtc-y = rtc.o
-
-+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.23/drivers/char/ts0710.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/char/ts0710.h 2007-10-22 22:26:50.000000000 +0200
-@@ -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.23/drivers/char/ts0710_mux.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/char/ts0710_mux.c 2007-10-22 22:26:50.000000000 +0200
-@@ -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.23/drivers/char/ts0710_mux.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/char/ts0710_mux.h 2007-10-22 22:26:50.000000000 +0200
-@@ -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.23/drivers/char/ts0710_mux_usb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/char/ts0710_mux_usb.c 2007-10-22 22:26:50.000000000 +0200
-@@ -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.23/drivers/char/ts0710_mux_usb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/char/ts0710_mux_usb.h 2007-10-22 22:26:50.000000000 +0200
-@@ -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.23/patches/mux_debug.patch b/packages/linux/linux-ezx-2.6.23/patches/mux_debug.patch
deleted file mode 100644
index 58cb25a0b6..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/mux_debug.patch
+++ /dev/null
@@ -1,551 +0,0 @@
-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.23/patches/patch-2.6.23.1 b/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1
deleted file mode 100644
index 5027b85ad4..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1
+++ /dev/null
@@ -1,108 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 4635a64..c244a02 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,7 +1,7 @@
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 23
--EXTRAVERSION =
-+EXTRAVERSION = .1
- NAME = Arr Matey! A Hairy Bilge Rat!
-
- # *DOCUMENTATION*
-diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
-index cb7dec9..d9832e2 100644
---- a/drivers/ata/sata_mv.c
-+++ b/drivers/ata/sata_mv.c
-@@ -69,10 +69,11 @@
- #include <linux/device.h>
- #include <scsi/scsi_host.h>
- #include <scsi/scsi_cmnd.h>
-+#include <scsi/scsi_device.h>
- #include <linux/libata.h>
-
- #define DRV_NAME "sata_mv"
--#define DRV_VERSION "1.0"
-+#define DRV_VERSION "1.01"
-
- enum {
- /* BAR's are enumerated in terms of pci_resource_start() terms */
-@@ -420,6 +421,7 @@ static void mv_error_handler(struct ata_port *ap);
- static void mv_post_int_cmd(struct ata_queued_cmd *qc);
- static void mv_eh_freeze(struct ata_port *ap);
- static void mv_eh_thaw(struct ata_port *ap);
-+static int mv_slave_config(struct scsi_device *sdev);
- static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
-
- static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
-@@ -457,7 +459,7 @@ static struct scsi_host_template mv5_sht = {
- .use_clustering = 1,
- .proc_name = DRV_NAME,
- .dma_boundary = MV_DMA_BOUNDARY,
-- .slave_configure = ata_scsi_slave_config,
-+ .slave_configure = mv_slave_config,
- .slave_destroy = ata_scsi_slave_destroy,
- .bios_param = ata_std_bios_param,
- };
-@@ -475,7 +477,7 @@ static struct scsi_host_template mv6_sht = {
- .use_clustering = 1,
- .proc_name = DRV_NAME,
- .dma_boundary = MV_DMA_BOUNDARY,
-- .slave_configure = ata_scsi_slave_config,
-+ .slave_configure = mv_slave_config,
- .slave_destroy = ata_scsi_slave_destroy,
- .bios_param = ata_std_bios_param,
- };
-@@ -763,6 +765,17 @@ static void mv_irq_clear(struct ata_port *ap)
- {
- }
-
-+static int mv_slave_config(struct scsi_device *sdev)
-+{
-+ int rc = ata_scsi_slave_config(sdev);
-+ if (rc)
-+ return rc;
-+
-+ blk_queue_max_phys_segments(sdev->request_queue, MV_MAX_SG_CT / 2);
-+
-+ return 0; /* scsi layer doesn't check return value, sigh */
-+}
-+
- static void mv_set_edma_ptrs(void __iomem *port_mmio,
- struct mv_host_priv *hpriv,
- struct mv_port_priv *pp)
-@@ -1130,10 +1143,9 @@ static void mv_port_stop(struct ata_port *ap)
- * LOCKING:
- * Inherited from caller.
- */
--static unsigned int mv_fill_sg(struct ata_queued_cmd *qc)
-+static void mv_fill_sg(struct ata_queued_cmd *qc)
- {
- struct mv_port_priv *pp = qc->ap->private_data;
-- unsigned int n_sg = 0;
- struct scatterlist *sg;
- struct mv_sg *mv_sg;
-
-@@ -1151,7 +1163,7 @@ static unsigned int mv_fill_sg(struct ata_queued_cmd *qc)
-
- mv_sg->addr = cpu_to_le32(addr & 0xffffffff);
- mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16);
-- mv_sg->flags_size = cpu_to_le32(len);
-+ mv_sg->flags_size = cpu_to_le32(len & 0xffff);
-
- sg_len -= len;
- addr += len;
-@@ -1160,12 +1172,9 @@ static unsigned int mv_fill_sg(struct ata_queued_cmd *qc)
- mv_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL);
-
- mv_sg++;
-- n_sg++;
- }
-
- }
--
-- return n_sg;
- }
-
- static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last)
diff --git a/packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch b/packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch
deleted file mode 100644
index 5891ccb837..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/pcap-ts.patch
+++ /dev/null
@@ -1,363 +0,0 @@
-Index: linux-2.6.23/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/input/touchscreen/Kconfig 2007-10-10 09:38:44.000000000 +0200
-+++ linux-2.6.23/drivers/input/touchscreen/Kconfig 2007-10-22 22:25:02.000000000 +0200
-@@ -238,4 +238,13 @@
- bool "IRTOUCHSYSTEMS/UNITOP device support" if EMBEDDED
- depends on TOUCHSCREEN_USB_COMPOSITE
-
-+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.23/drivers/input/touchscreen/pcap_ts.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/input/touchscreen/pcap_ts.c 2007-10-22 22:25:02.000000000 +0200
-@@ -0,0 +1,331 @@
-+/*
-+ * 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 POSITION_X_MEASUREMENT 0
-+#define POSITION_XY_MEASUREMENT 1
-+#define PRESSURE_MEASUREMENT 2
-+#define PLATE_X_MEASUREMENT 3
-+#define PLATE_Y_MEASUREMENT 4
-+#define STANDBY_MODE 5
-+#define NONTS_MODE 6
-+
-+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(struct pcap_ts *pcap_ts, u_int32_t mode)
-+{
-+ u_int32_t tmp;
-+
-+ pcap_ts->read_state = mode;
-+ ezx_pcap_read(PCAP_REG_ADC1, &tmp);
-+ tmp &= ~PCAP_ADC1_TS_M_MASK;
-+ tmp |= ((mode << PCAP_ADC1_TS_M_SHIFT) & PCAP_ADC1_TS_M_MASK);
-+ ezx_pcap_write(PCAP_REG_ADC1, tmp);
-+}
-+
-+/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE 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(PCAP_REG_ADC1, &tmp);
-+ tmp &= ~(PCAP_BIT_ADC1_RAND | PCAP_ADC1_ADA1_MASK |
-+ PCAP_ADC1_ADA2_MASK);
-+ tmp |= (PCAP_BIT_ADC1_ADEN | PCAP_BIT_ADC1_AD_SEL1 |
-+ PCAP_BIT_ADC1_AD_SEL2 | (5 << PCAP_ADC1_ADA1_SHIFT) |
-+ (3 << PCAP_ADC1_ADA2_SHIFT));
-+ ezx_pcap_write(PCAP_REG_ADC1, tmp);
-+ ezx_pcap_bit_set(PCAP_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(PCAP_REG_ADC2, &tmp);
-+
-+ if (pcap_ts->read_state == POSITION_XY_MEASUREMENT) {
-+ pcap_ts->x = (tmp & PCAP_ADC2_ADD1_MASK) >>
-+ PCAP_ADC2_ADD1_SHIFT;
-+ pcap_ts->y = (tmp & PCAP_ADC2_ADD2_MASK) >>
-+ PCAP_ADC2_ADD2_SHIFT;
-+ } else {
-+ pcap_ts->pressure = (tmp & PCAP_ADC2_ADD2_MASK) >>
-+ PCAP_ADC2_ADD2_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 == POSITION_XY_MEASUREMENT ? "COORD" :
-+ "PRESS", pcap_ts->x, pcap_ts->y, pcap_ts->pressure);
-+ switch (pcap_ts->read_state) {
-+ case PRESSURE_MEASUREMENT:
-+ 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_mode(pcap_ts, POSITION_XY_MEASUREMENT);
-+ pcap_ts_start_xy_read(pcap_ts);
-+ break;
-+ case POSITION_XY_MEASUREMENT:
-+ 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_mode(pcap_ts, STANDBY_MODE);
-+ enable_irq(pcap_ts->irq_touch);
-+ } 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_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 */
-+ disable_irq(pcap_ts->irq_touch);
-+
-+ DEBUGP("touched!!\n");
-+ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT);
-+ 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)
-+{
-+ 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;
-+ }
-+
-+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REFENB, 0);
-+ pcap_ts_mode(pcap_ts, STANDBY_MODE);
-+
-+ err = request_irq(pcap_ts->irq_xy, pcap_ts_irq_xy, IRQF_DISABLED,
-+ "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, IRQF_DISABLED,
-+ "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);
-+
-+ 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(PCAP_BIT_ADC1_TS_REF_LOWPWR, 1);
-+ return 0;
-+}
-+
-+static int ezxts_resume(struct platform_device *dev)
-+{
-+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 0);
-+ /* just in case we suspend with TSI masked. */
-+// ezx_pcap_bit_set(PCAP_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.23/drivers/input/touchscreen/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/input/touchscreen/Makefile 2007-10-10 09:38:44.000000000 +0200
-+++ linux-2.6.23/drivers/input/touchscreen/Makefile 2007-10-22 22:25:02.000000000 +0200
-@@ -18,3 +18,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.23/patches/pxa-kbd.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa-kbd.patch
deleted file mode 100644
index a824b87a19..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/pxa-kbd.patch
+++ /dev/null
@@ -1,545 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/generic.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2007-10-23 23:04:39.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2007-10-23 23:04:42.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 "devices.h"
- #include "generic.h"
-@@ -413,3 +414,28 @@
- .name = "sa1100-rtc",
- .id = -1,
- };
-+
-+static struct resource pxa_kbd_resources[] = {
-+ {
-+ .start = IRQ_KEYPAD,
-+ .end = IRQ_KEYPAD,
-+ .flags = IORESOURCE_IRQ,
-+ }, {
-+ .start = 0x41500000,
-+ .end = 0x4150004c,
-+ .flags = IORESOURCE_MEM,
-+ },
-+};
-+
-+struct platform_device pxa_device_kbd = {
-+ .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)
-+{
-+ pxa_device_kbd.dev.platform_data = info;
-+}
-+
-Index: linux-2.6.23/drivers/input/keyboard/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/input/keyboard/Kconfig 2007-10-23 23:04:39.000000000 +0200
-+++ linux-2.6.23/drivers/input/keyboard/Kconfig 2007-10-23 23:04:42.000000000 +0200
-@@ -253,4 +253,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.23/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/input/keyboard/Makefile 2007-10-23 23:04:39.000000000 +0200
-+++ linux-2.6.23/drivers/input/keyboard/Makefile 2007-10-23 23:04:42.000000000 +0200
-@@ -21,4 +21,4 @@
- obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keyboard.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.23/include/asm-arm/arch-pxa/kbd.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/kbd.h 2007-10-23 23:04:42.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.23/drivers/input/keyboard/pxakbd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/input/keyboard/pxakbd.c 2007-10-23 23:04:42.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(CKEN_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.23/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-23 23:04:39.000000000 +0200
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-23 23:04:42.000000000 +0200
-@@ -2256,6 +2256,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
-Index: linux-2.6.23/arch/arm/mach-pxa/pxa27x.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa27x.c 2007-10-23 23:04:39.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa27x.c 2007-10-23 23:04:42.000000000 +0200
-@@ -349,6 +349,7 @@
- &pxa_device_rtc,
- &pxa27x_device_i2c_power,
- &pxa27x_device_ohci,
-+ &pxa_device_kbd,
- };
-
- void __init pxa27x_init_irq(void)
-Index: linux-2.6.23/arch/arm/mach-pxa/devices.h
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/devices.h 2007-10-23 23:04:39.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/devices.h 2007-10-23 23:04:42.000000000 +0200
-@@ -9,3 +9,4 @@
- extern struct platform_device pxa_device_i2s;
- extern struct platform_device pxa_device_ficp;
- extern struct platform_device pxa_device_rtc;
-+extern struct platform_device pxa_device_kbd;
diff --git a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch
deleted file mode 100644
index 7ea9f18d0a..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-fix-a1200.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-This hack hardcodes pxa27x-udc to ether_gadget. This is just a temp workaround.
-Index: linux-2.6.23/drivers/usb/gadget/ether.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/ether.c 2007-10-23 12:58:40.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/ether.c 2007-10-23 12:58:46.000000000 +0200
-@@ -2709,10 +2709,16 @@
- MODULE_LICENSE ("GPL");
-
-
--static int __init init (void)
-+// Alex add FIXME
-+int usb_ether_init (void)
- {
- return usb_gadget_register_driver (&eth_driver);
- }
-+
-+static int __init init (void)
-+{
-+// return usb_gadget_register_driver (&eth_driver);
-+}
- module_init (init);
-
- static void __exit cleanup (void)
-Index: linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/pxa27x_udc.c 2007-10-23 12:58:40.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c 2007-10-23 13:01:47.000000000 +0200
-@@ -65,6 +65,8 @@
- //#include <asm/arch/udc.h>
- #include <asm/mach/udc_pxa2xx.h>
-
-+extern int usb_ether_init(void);
-+
- /*
- * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x
- * series processors.
-@@ -2275,6 +2277,8 @@
- udc_init_ep(udc);
- udc_reinit(udc);
-
-+ usb_ether_init(); // Alex add FIXME
-+
- /* irq setup after old hardware state is cleaned up */
- retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc);
- if (retval != 0) {
diff --git a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch
deleted file mode 100644
index 21482fdc8f..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/pxa27x-udc-support.3.patch
+++ /dev/null
@@ -1,3113 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/generic.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2007-10-23 12:48:34.000000000 +0200
-@@ -283,7 +283,11 @@
- static u64 udc_dma_mask = ~(u32)0;
-
- struct platform_device pxa_device_udc = {
-+#ifdef CONFIG_PXA27x
-+ .name = "pxa27x-udc",
-+#else
- .name = "pxa2xx-udc",
-+#endif
- .id = -1,
- .resource = pxa2xx_udc_resources,
- .num_resources = ARRAY_SIZE(pxa2xx_udc_resources),
-Index: linux-2.6.23/drivers/usb/gadget/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/Kconfig 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/Kconfig 2007-10-23 12:48:34.000000000 +0200
-@@ -167,6 +167,24 @@
- 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
-Index: linux-2.6.23/drivers/usb/gadget/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/Makefile 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/Makefile 2007-10-23 12:48:34.000000000 +0200
-@@ -9,6 +9,7 @@
- obj-$(CONFIG_USB_NET2280) += net2280.o
- obj-$(CONFIG_USB_AMD5536UDC) += amd5536udc.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
-Index: linux-2.6.23/drivers/usb/gadget/epautoconf.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/epautoconf.c 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/epautoconf.c 2007-10-23 12:48:34.000000000 +0200
-@@ -230,7 +230,8 @@
- */
- 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 @@
-
- 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 ...
- */
-Index: linux-2.6.23/drivers/usb/gadget/ether.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/ether.c 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/ether.c 2007-10-23 12:48:34.000000000 +0200
-@@ -257,10 +257,6 @@
- #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
-@@ -292,6 +288,10 @@
- #define DEV_CONFIG_SUBSET
- #endif
-
-+#ifdef CONFIG_USB_GADGET_PXA27X
-+#define DEV_CONFIG_SUBSET
-+#endif
-+
- #ifdef CONFIG_USB_GADGET_SUPERH
- #define DEV_CONFIG_SUBSET
- #endif
-@@ -1042,13 +1042,12 @@
- static int
- set_ether_config (struct eth_dev *dev, gfp_t gfp_flags)
- {
-- int result = 0;
-- struct usb_gadget *gadget = dev->gadget;
-+ int result = 0;
-
- #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS)
- /* status endpoint used for RNDIS and (optionally) CDC */
- if (!subset_active(dev) && dev->status_ep) {
-- dev->status = ep_desc (gadget, &hs_status_desc,
-+ dev->status = ep_desc (dev->gadget, &hs_status_desc,
- &fs_status_desc);
- dev->status_ep->driver_data = dev;
-
-@@ -1061,10 +1060,10 @@
- }
- #endif
-
-- dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc);
-+ dev->in = ep_desc(dev->gadget, &hs_source_desc, &fs_source_desc);
- dev->in_ep->driver_data = dev;
-
-- dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc);
-+ dev->out = ep_desc(dev->gadget, &hs_sink_desc, &fs_sink_desc);
- dev->out_ep->driver_data = dev;
-
- /* With CDC, the host isn't allowed to use these two data
-@@ -2320,6 +2319,9 @@
- * 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);
-@@ -2386,7 +2388,22 @@
-
- /* 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,
-@@ -2395,8 +2412,24 @@
- return -ENODEV;
- }
- in_ep->driver_data = in_ep; /* claim */
-+
-+#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 */
-
-- out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc);
- if (!out_ep)
- goto autoconf_fail;
- out_ep->driver_data = out_ep; /* claim */
-@@ -2406,7 +2439,18 @@
- * 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) {
-@@ -2414,13 +2458,14 @@
- "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) {
-+ /* pxa25x only does CDC subset; often used with RNDIS */
-+ else if (cdc) {
- control_intf.bNumEndpoints = 0;
- /* FIXME remove endpoint from descriptor list */
--#endif
- }
-+#endif
- }
- #endif
-
-Index: linux-2.6.23/drivers/usb/gadget/file_storage.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/file_storage.c 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/file_storage.c 2007-10-23 12:48:34.000000000 +0200
-@@ -3912,20 +3912,20 @@
-
- /* 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
-Index: linux-2.6.23/drivers/usb/gadget/gmidi.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/gmidi.c 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/gmidi.c 2007-10-23 12:48:34.000000000 +0200
-@@ -1204,7 +1204,7 @@
- * 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 @@
- 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;
- }
-Index: linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/usb/gadget/pxa27x_udc.c 2007-10-23 12:48:34.000000000 +0200
-@@ -0,0 +1,2408 @@
-+/*
-+ * 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/gpio.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>
-+#include <asm/mach/udc_pxa2xx.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 "28-Jun-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);
-+
-+/* one GPIO should control a D+ pullup, so host sees this device (or not) */
-+static void pullup_off(void)
-+{
-+ struct pxa2xx_udc_mach_info *mach = the_controller->mach;
-+
-+ if (mach->gpio_pullup)
-+ gpio_set_value(mach->gpio_pullup, 0);
-+ else if (mach->udc_command)
-+ mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
-+}
-+
-+static void pullup_on(void)
-+{
-+ struct pxa2xx_udc_mach_info *mach = the_controller->mach;
-+
-+ if (mach->gpio_pullup)
-+ gpio_set_value(mach->gpio_pullup, 1);
-+ else if (mach->udc_command)
-+ mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
-+}
-+
-+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)
-+#ifdef USE_DMA
-+ *dma = virt_to_bus(retval);
-+#else
-+ *dma = (dma_addr_t) ~0;
-+#endif
-+ 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);
-+
-+#if 0
-+ dump_regs(ep->ep_num );
-+#endif
-+ 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,
-+
-+#warning "CHECK comemnts here"
-+ //.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;
-+#if 0
-+ tmp |= UDCCONR_EE;
-+#endif
-+
-+ *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 = 0x00000000;
-+ UDCICR1 = 0x00000000;
-+
-+ udc_clear_mask_UDCCR(UDCCR_UDE);
-+
-+ /* Disable clock for USB device */
-+ pxa_set_cken(CKEN_USB, 0);
-+
-+ ep0_idle(dev);
-+ dev->gadget.speed = USB_SPEED_UNKNOWN;
-+
-+ pullup_off();
-+}
-+
-+/*
-+ * 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(CKEN_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
-+
-+ pullup_on();
-+}
-+
-+/* 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;
-+
-+ retval = device_add(&dev->gadget.dev);
-+ if (retval) {
-+ DMSG("unable to add device for %s --> error %d\n",
-+ driver->driver.name, retval);
-+ goto device_add_error;
-+ }
-+ retval = driver->bind(&dev->gadget);
-+ if (retval) {
-+ DMSG("bind to driver %s --> error %d\n",
-+ driver->driver.name, retval);
-+ goto device_bind_error;
-+ }
-+ retval = device_create_file(dev->dev, &dev_attr_function);
-+ if (retval) {
-+ DMSG("unable to create file for %s --> error %d\n",
-+ driver->driver.name, retval);
-+ goto create_file_error;
-+ }
-+
-+ /* ... 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;
-+
-+ create_file_error:
-+ driver->unbind(&dev->gadget);
-+
-+ device_bind_error:
-+ device_del(&dev->gadget.dev);
-+
-+ device_add_error:
-+ dev->driver = 0;
-+ dev->gadget.dev.driver = 0;
-+
-+ return retval;
-+}
-+
-+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;
-+
-+#if 0
-+ udccsr = *ep->reg_udccsr;
-+#endif
-+ 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 __init pxa27x_udc_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct pxa27x_udc *udc = &memory;
-+ int irq, 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;
-+ }
-+
-+ irq = platform_get_irq(pdev, 0);
-+ if (irq < 0)
-+ return -ENODEV;
-+ pr_debug("%s: IRQ %d\n", driver_name, irq);
-+
-+ /* other non-static parts of init */
-+ udc->dev = dev;
-+ udc->mach = dev->platform_data;
-+
-+ /* Disable irq, erase old events and disable the pull up on the bus */
-+ UDCICR0 = 0x00000000;
-+ UDCICR1 = 0x00000000;
-+ UDCISR0 = 0xffffffff;
-+ UDCISR1 = 0xffffffff;
-+ if (udc->mach->gpio_pullup) {
-+ if ((retval = gpio_request(udc->mach->gpio_pullup,
-+ "pca2xx_udc GPIO PULLUP"))) {
-+ dev_dbg(&pdev->dev,
-+ "can't get pullup gpio %d, err: %d\n",
-+ udc->mach->gpio_pullup, retval);
-+ if (udc->mach->gpio_vbus)
-+ gpio_free(udc->mach->gpio_vbus);
-+ return -EBUSY;
-+ }
-+ gpio_direction_output(udc->mach->gpio_pullup, 0);
-+ }
-+
-+ 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, pxa27x_udc_irq, 0, driver_name, udc);
-+ if (retval != 0) {
-+ printk(KERN_ERR "%s: can't get irq %i, err %d\n",
-+ driver_name, irq, retval);
-+ return -EBUSY;
-+ }
-+ udc->got_irq = 1;
-+
-+ create_proc_files();
-+
-+ return 0;
-+}
-+
-+static void pxa27x_udc_shutdown(struct platform_device *_dev)
-+{
-+ pullup_off();
-+}
-+
-+static int __exit 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(platform_get_irq(pdev, 0), 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(CKEN_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 = {
-+ .shutdown = pxa27x_udc_shutdown,
-+ .remove = __exit_p(pxa27x_udc_remove),
-+ .suspend = pxa27x_udc_suspend,
-+ .resume = pxa27x_udc_resume,
-+ .driver = {
-+ .owner = THIS_MODULE,
-+ .name = "pxa27x-udc",
-+ },
-+};
-+
-+static int __init udc_init(void)
-+{
-+ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
-+ return platform_driver_probe(&pxa27x_udc_driver, pxa27x_udc_probe);
-+}
-+
-+static void __exit udc_exit(void)
-+{
-+ platform_driver_unregister(&pxa27x_udc_driver);
-+}
-+
-+module_init(udc_init);
-+module_exit(udc_exit);
-+
-+MODULE_DESCRIPTION(DRIVER_DESC);
-+MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell, Rodolfo Giometti");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/drivers/usb/gadget/pxa27x_udc.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/usb/gadget/pxa27x_udc.h 2007-10-23 12:48:34.000000000 +0200
-@@ -0,0 +1,304 @@
-+/*
-+ * 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;
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/*
-+ * 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 */
-Index: linux-2.6.23/drivers/usb/gadget/serial.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/serial.c 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/serial.c 2007-10-23 12:48:34.000000000 +0200
-@@ -1378,20 +1378,20 @@
-
- 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;
-Index: linux-2.6.23/drivers/usb/gadget/zero.c
-===================================================================
---- linux-2.6.23.orig/drivers/usb/gadget/zero.c 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/drivers/usb/gadget/zero.c 2007-10-23 12:48:34.000000000 +0200
-@@ -1154,7 +1154,7 @@
- * 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",
-@@ -1164,7 +1164,7 @@
- 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;
-Index: linux-2.6.23/include/asm-arm/arch-pxa/udc.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/udc.h 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/include/asm-arm/arch-pxa/udc.h 2007-10-23 12:48:34.000000000 +0200
-@@ -2,6 +2,7 @@
- * linux/include/asm-arm/arch-pxa/udc.h
- *
- */
-+#include <asm/arch/pxa-regs.h>
- #include <asm/mach/udc_pxa2xx.h>
-
- extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info);
-Index: linux-2.6.23/include/linux/usb_gadget.h
-===================================================================
---- linux-2.6.23.orig/include/linux/usb_gadget.h 2007-10-23 12:47:11.000000000 +0200
-+++ linux-2.6.23/include/linux/usb_gadget.h 2007-10-23 12:48:34.000000000 +0200
-@@ -397,10 +397,28 @@
-
- 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);
-@@ -824,7 +842,8 @@
- /* 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.23/patches/pxa27x_overlay-r7.patch b/packages/linux/linux-ezx-2.6.23/patches/pxa27x_overlay-r7.patch
deleted file mode 100644
index 7eca9301ac..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/pxa27x_overlay-r7.patch
+++ /dev/null
@@ -1,2436 +0,0 @@
- drivers/video/Kconfig | 18
- drivers/video/Makefile | 1
- drivers/video/pxafb.c | 305 +++++--
- drivers/video/pxafb.h | 65 +
- drivers/video/pxafb_overlay.c | 1525 ++++++++++++++++++++++++++++++++++++
- include/asm-arm/arch-pxa/pxa-regs.h | 111 ++
- 6 files changed, 1969 insertions(+), 56 deletions(-)
-
-Index: linux-2.6.23/drivers/video/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/video/Kconfig 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/drivers/video/Kconfig 2007-10-22 21:53:54.000000000 +0200
-@@ -1682,6 +1682,24 @@
-
- If unsure, say N.
-
-+choice
-+ prompt "PXA LCD type"
-+ depends on FB_PXA
-+
-+config FB_PXA_LCD_QVGA
-+ bool "QVGA(320x240)"
-+
-+config FB_PXA_LCD_VGA
-+ bool "VGA (640x480)"
-+
-+endchoice
-+
-+config FB_PXA_OVERLAY
-+ tristate "PXA LCD overlay support"
-+ depends on FB_PXA
-+ ---help---
-+ Frame buffer overlay driver for PXA27x
-+
- config FB_PXA_PARAMETERS
- bool "PXA LCD command line parameters"
- default n
-Index: linux-2.6.23/drivers/video/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/video/Makefile 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/drivers/video/Makefile 2007-10-22 21:53:54.000000000 +0200
-@@ -96,6 +96,7 @@
- obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o
- obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o
- obj-$(CONFIG_FB_PXA) += pxafb.o
-+obj-$(CONFIG_FB_PXA_OVERLAY) += pxafb_overlay.o
- obj-$(CONFIG_FB_W100) += w100fb.o
- obj-$(CONFIG_FB_AU1100) += au1100fb.o
- obj-$(CONFIG_FB_AU1200) += au1200fb.o
-Index: linux-2.6.23/drivers/video/pxafb.c
-===================================================================
---- linux-2.6.23.orig/drivers/video/pxafb.c 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/drivers/video/pxafb.c 2007-10-22 22:01:00.000000000 +0200
-@@ -58,17 +58,49 @@
- #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB)
- #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP)
-
-+wait_queue_head_t fcs_wait_eof;
-+int fcs_in_eof;
-+static DECLARE_MUTEX(fcs_lcd_sem);
-+
- static void (*pxafb_backlight_power)(int);
- static void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *);
-
- static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *);
--static void set_ctrlr_state(struct pxafb_info *fbi, u_int state);
-+void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state);
-
- #ifdef CONFIG_FB_PXA_PARAMETERS
- #define PXAFB_OPTIONS_SIZE 256
- static char g_options[PXAFB_OPTIONS_SIZE] __devinitdata = "";
- #endif
-
-+static struct pxafb_rgb def_rgb_8 = {
-+ red: { offset: 0, length: 8, },
-+ green: { offset: 0, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgb_16 = {
-+ red: { offset: 11, length: 5, },
-+ green: { offset: 5, length: 6, },
-+ blue: { offset: 0, length: 5, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgb_18 = {
-+ red: { offset: 12, length: 6, },
-+ green: { offset: 6, length: 6, },
-+ blue: { offset: 0, length: 6, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgb_24 = {
-+ red: { offset: 16, length: 8, },
-+ green: { offset: 8, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
- static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state)
- {
- unsigned long flags;
-@@ -190,6 +222,10 @@
- case 4: ret = LCCR3_4BPP; break;
- case 8: ret = LCCR3_8BPP; break;
- case 16: ret = LCCR3_16BPP; break;
-+ case 18: ret = LCCR3_18BPP; break;
-+ case 19: ret = LCCR3_19BPP; break;
-+ case 24: ret = LCCR3_24BPP; break;
-+ case 25: ret = LCCR3_25BPP; break;
- }
- return ret;
- }
-@@ -301,18 +337,34 @@
- * The pixel packing format is described on page 7-11 of the
- * PXA2XX Developer's Manual.
- */
-- if (var->bits_per_pixel == 16) {
-- var->red.offset = 11; var->red.length = 5;
-- var->green.offset = 5; var->green.length = 6;
-- var->blue.offset = 0; var->blue.length = 5;
-- var->transp.offset = var->transp.length = 0;
-- } else {
-- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0;
-- var->red.length = 8;
-- var->green.length = 8;
-- var->blue.length = 8;
-- var->transp.length = 0;
-- }
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ /* 2 pixels per line */
-+ var->red = def_rgb_16.red;
-+ var->green = def_rgb_16.green;
-+ var->blue = def_rgb_16.blue;
-+ var->transp = def_rgb_16.transp;
-+ break;
-+ case 18:
-+ case 19:
-+ var->red = def_rgb_18.red;
-+ var->green = def_rgb_18.green;
-+ var->blue = def_rgb_18.blue;
-+ var->transp = def_rgb_18.transp;
-+ break;
-+ case 24:
-+ case 25:
-+ var->red = def_rgb_24.red;
-+ var->green = def_rgb_24.green;
-+ var->blue = def_rgb_24.blue;
-+ var->transp = def_rgb_24.transp;
-+ break;
-+ default:
-+ var->red = def_rgb_8.red;
-+ var->green = def_rgb_8.green;
-+ var->blue = def_rgb_8.blue;
-+ var->transp = def_rgb_8.transp;
-+ }
-
- #ifdef CONFIG_CPU_FREQ
- pr_debug("pxafb: dma period = %d ps, clock = %d kHz\n",
-@@ -326,7 +378,7 @@
- static inline void pxafb_set_truecolor(u_int is_true_color)
- {
- pr_debug("pxafb: true_color = %d\n", is_true_color);
-- // do your machine-specific setup if needed
-+ /* do your machine-specific setup if needed */
- }
-
- /*
-@@ -341,7 +393,8 @@
-
- pr_debug("pxafb: set_par\n");
-
-- if (var->bits_per_pixel == 16)
-+ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19
-+ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25)
- fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR;
- else if (!fbi->cmap_static)
- fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-@@ -354,12 +407,25 @@
- fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
- }
-
-- fbi->fb.fix.line_length = var->xres_virtual *
-- var->bits_per_pixel / 8;
-- if (var->bits_per_pixel == 16)
-- fbi->palette_size = 0;
-- else
-- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ fbi->fb.fix.line_length = var->xres_virtual * 2;
-+ fbi->palette_size = 0;
-+ break;
-+ case 18:
-+ case 19:
-+ fbi->fb.fix.line_length = var->xres_virtual * 3;
-+ fbi->palette_size = 0;
-+ break;
-+ case 24:
-+ case 25:
-+ fbi->fb.fix.line_length = var->xres_virtual * 4;
-+ fbi->palette_size = 0;
-+ break;
-+ default:
-+ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
-+ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
-+ }
-
- palette_mem_size = fbi->palette_size * sizeof(u16);
-
-@@ -373,7 +439,8 @@
- */
- pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR);
-
-- if (fbi->fb.var.bits_per_pixel == 16)
-+ if (fbi->fb.var.bits_per_pixel == 16 || fbi->fb.var.bits_per_pixel == 18 ||fbi->fb.var.bits_per_pixel == 19
-+ || fbi->fb.var.bits_per_pixel == 24 || fbi->fb.var.bits_per_pixel == 25)
- fb_dealloc_cmap(&fbi->fb.cmap);
- else
- fb_alloc_cmap(&fbi->fb.cmap, 1<<fbi->fb.var.bits_per_pixel, 0);
-@@ -419,7 +486,7 @@
- * 16 bpp mode does not really use the palette, so this will not
- * blank the display in all modes.
- */
--static int pxafb_blank(int blank, struct fb_info *info)
-+int pxafb_blank(int blank, struct fb_info *info)
- {
- struct pxafb_info *fbi = (struct pxafb_info *)info;
- int i;
-@@ -436,19 +503,20 @@
- for (i = 0; i < fbi->palette_size; i++)
- pxafb_setpalettereg(i, 0, 0, 0, 0, info);
-
-- pxafb_schedule_work(fbi, C_DISABLE);
-- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
-+ pxafb_schedule_work(fbi, C_BLANK);
-+ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */
- break;
-
- case FB_BLANK_UNBLANK:
-- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
-+ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */
- if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR ||
- fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
- fb_set_cmap(&fbi->fb.cmap, info);
-- pxafb_schedule_work(fbi, C_ENABLE);
-+ pxafb_schedule_work(fbi, C_UNBLANK);
- }
- return 0;
- }
-+EXPORT_SYMBOL(pxafb_blank);
-
- static int pxafb_mmap(struct fb_info *info,
- struct vm_area_struct *vma)
-@@ -582,6 +650,10 @@
- case 4:
- case 8:
- case 16:
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
- break;
- default:
- printk(KERN_ERR "%s: invalid bit depth %d\n",
-@@ -613,7 +685,10 @@
-
- new_regs.lccr0 = fbi->lccr0 |
- (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |
-- LCCR0_QDM | LCCR0_BM | LCCR0_OUM);
-+#ifdef CONFIG_PXA27x /* Enable overlay for PXA27x */
-+ LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM |
-+#endif
-+ LCCR0_QDM | LCCR0_BM | LCCR0_OUM);
-
- new_regs.lccr1 =
- LCCR1_DisWdth(var->xres) +
-@@ -672,13 +747,14 @@
-
- fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma;
- fbi->dmadesc_fbhigh_cpu->fidr = 0;
-- fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL;
-+ fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL | LDCMD_EOFINT;
-
- fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma;
- fbi->dmadesc_palette_cpu->fidr = 0;
- fbi->dmadesc_palette_cpu->ldcmd = (fbi->palette_size * 2) | LDCMD_PAL;
-
-- if (var->bits_per_pixel == 16) {
-+ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19
-+ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) {
- /* palette shouldn't be loaded in true-color mode */
- fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma;
- fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */
-@@ -731,8 +807,8 @@
- }
-
- /*
-- * NOTE! The following functions are purely helpers for set_ctrlr_state.
-- * Do not call them directly; set_ctrlr_state does the correct serialisation
-+ * NOTE! The following functions are purely helpers for pxafb_set_ctrlr_state.
-+ * Do not call them directly; pxafb_set_ctrlr_state does the correct serialisation
- * to ensure that things happen in the right way 100% of time time.
- * -- rmk
- */
-@@ -754,7 +830,8 @@
-
- static void pxafb_setup_gpio(struct pxafb_info *fbi)
- {
-- int gpio, ldd_bits;
-+ int gpio;
-+ int ldd_bits = 0;
- unsigned int lccr0 = fbi->lccr0;
-
- /*
-@@ -764,28 +841,56 @@
- /* 4 bit interface */
- if ((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
- (lccr0 & LCCR0_SDS) == LCCR0_Sngl &&
-- (lccr0 & LCCR0_DPD) == LCCR0_4PixMono)
-+ (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) {
- ldd_bits = 4;
--
-+ }
- /* 8 bit interface */
- else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) ||
- ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
-- (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl))
-+ (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) {
- ldd_bits = 8;
--
-+ }
- /* 16 bit interface */
-- else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
-- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act))
-- ldd_bits = 16;
-+ else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
-+ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) {
-+ switch (fbi->fb.var.bits_per_pixel) {
-+ case 16:
-+#ifdef CONFIG_PXA27x
-+ /* bits 58-77 */
-+ GPDR1 |= (0x3f << 26);
-+ GPDR2 |= 0x00003fff;
-
-+ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
-+ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
-+#endif
-+ ldd_bits = 16;
-+ break;
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
-+#ifdef CONFIG_PXA27x
-+ /* bits 58-77 and 86, 87 */
-+ GPDR1 |= (0x3f << 26);
-+ GPDR2 |= 0x00c03fff;
-+
-+ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
-+ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
-+ GAFR2_U = (GAFR2_U & 0xffff0fff) | 0xa000;
-+#endif
-+ ldd_bits = 25;
-+ break;
-+ }
-+ }
- else {
- printk(KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n");
- return;
- }
-
-- for (gpio = 58; ldd_bits; gpio++, ldd_bits--)
-+ for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) {
- pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT);
-+ }
- pxa_gpio_mode(GPIO74_LCD_FCLK_MD);
- pxa_gpio_mode(GPIO75_LCD_LCLK_MD);
- pxa_gpio_mode(GPIO76_LCD_PCLK_MD);
-@@ -805,6 +910,7 @@
- /* enable LCD controller clock */
- pxa_set_cken(CKEN_LCD, 1);
-
-+ down(&fcs_lcd_sem);
- /* Sequence from 11.7.10 */
- LCCR3 = fbi->reg_lccr3;
- LCCR2 = fbi->reg_lccr2;
-@@ -815,6 +921,8 @@
- FDADR1 = fbi->fdadr1;
- LCCR0 |= LCCR0_ENB;
-
-+ up(&fcs_lcd_sem);
-+
- pr_debug("FDADR0 0x%08x\n", (unsigned int) FDADR0);
- pr_debug("FDADR1 0x%08x\n", (unsigned int) FDADR1);
- pr_debug("LCCR0 0x%08x\n", (unsigned int) LCCR0);
-@@ -829,6 +937,7 @@
-
- pr_debug("pxafb: disabling LCD controller\n");
-
-+ down(&fcs_lcd_sem);
- set_current_state(TASK_UNINTERRUPTIBLE);
- add_wait_queue(&fbi->ctrlr_wait, &wait);
-
-@@ -838,6 +947,7 @@
-
- schedule_timeout(200 * HZ / 1000);
- remove_wait_queue(&fbi->ctrlr_wait, &wait);
-+ up(&fcs_lcd_sem);
-
- /* disable LCD controller clock */
- pxa_set_cken(CKEN_LCD, 0);
-@@ -855,6 +965,11 @@
- LCCR0 |= LCCR0_LDM;
- wake_up(&fbi->ctrlr_wait);
- }
-+ if (lcsr & LCSR_EOF && fcs_in_eof) {
-+ LCCR0 |= LCCR0_EFM;
-+ fcs_in_eof = 0;
-+ wake_up(&fcs_wait_eof);
-+ }
-
- LCSR = lcsr;
- return IRQ_HANDLED;
-@@ -865,7 +980,7 @@
- * sleep when disabling the LCD controller, or if we get two contending
- * processes trying to alter state.
- */
--static void set_ctrlr_state(struct pxafb_info *fbi, u_int state)
-+void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state)
- {
- u_int old_state;
-
-@@ -887,7 +1002,9 @@
- */
- if (old_state != C_DISABLE && old_state != C_DISABLE_PM) {
- fbi->state = state;
-- //TODO __pxafb_lcd_power(fbi, 0);
-+ /* TODO __pxafb_lcd_power(fbi, 0); */
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
- pxafb_disable_controller(fbi);
- }
- break;
-@@ -901,6 +1018,8 @@
- fbi->state = state;
- __pxafb_backlight_power(fbi, 0);
- __pxafb_lcd_power(fbi, 0);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
- if (old_state != C_DISABLE_CLKCHANGE)
- pxafb_disable_controller(fbi);
- }
-@@ -914,7 +1033,9 @@
- if (old_state == C_DISABLE_CLKCHANGE) {
- fbi->state = C_ENABLE;
- pxafb_enable_controller(fbi);
-- //TODO __pxafb_lcd_power(fbi, 1);
-+ /* TODO __pxafb_lcd_power(fbi, 1); */
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
- }
- break;
-
-@@ -926,9 +1047,13 @@
- */
- if (old_state == C_ENABLE) {
- __pxafb_lcd_power(fbi, 0);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
- pxafb_disable_controller(fbi);
- pxafb_setup_gpio(fbi);
- pxafb_enable_controller(fbi);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
- __pxafb_lcd_power(fbi, 1);
- }
- break;
-@@ -954,11 +1079,46 @@
- pxafb_enable_controller(fbi);
- __pxafb_lcd_power(fbi, 1);
- __pxafb_backlight_power(fbi, 1);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
- }
- break;
-+
-+ case C_BLANK:
-+ /*
-+ * Disable controller, blank overlays if exist.
-+ */
-+ if ((old_state != C_DISABLE) && (old_state != C_BLANK)) {
-+ fbi->state = state;
-+ __pxafb_backlight_power(fbi, 0);
-+ __pxafb_lcd_power(fbi, 0);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_BLANK);
-+ if (old_state != C_DISABLE_CLKCHANGE)
-+ pxafb_disable_controller(fbi);
-+ }
-+ break;
-+
-+ case C_UNBLANK:
-+ /*
-+ * Power up the LCD screen, enable controller, and
-+ * turn on the backlight, unblank overlays if exist.
-+ */
-+ if ((old_state != C_ENABLE) && (old_state != C_UNBLANK)) {
-+ fbi->state = C_UNBLANK;
-+ pxafb_setup_gpio(fbi);
-+ pxafb_enable_controller(fbi);
-+ __pxafb_lcd_power(fbi, 1);
-+ __pxafb_backlight_power(fbi, 1);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_UNBLANK);
-+ }
-+ break;
-+
- }
- up(&fbi->ctrlr_sem);
- }
-+EXPORT_SYMBOL(pxafb_set_ctrlr_state);
-
- /*
- * Our LCD controller task (which is called when we blank or unblank)
-@@ -970,7 +1130,7 @@
- container_of(work, struct pxafb_info, task);
- u_int state = xchg(&fbi->task_state, -1);
-
-- set_ctrlr_state(fbi, state);
-+ pxafb_set_ctrlr_state(fbi, state);
- }
-
- #ifdef CONFIG_CPU_FREQ
-@@ -985,19 +1145,29 @@
- pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data)
- {
- struct pxafb_info *fbi = TO_INF(nb, freq_transition);
-- //TODO struct cpufreq_freqs *f = data;
-+ /* TODO struct cpufreq_freqs *f = data; */
-+ struct cpufreq_freqs *clkinfo;
- u_int pcd;
-+ u_int lccr3;
-
- switch (val) {
- case CPUFREQ_PRECHANGE:
-- set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
-+ pxafb_set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
- break;
-
- case CPUFREQ_POSTCHANGE:
-+ clkinfo = (struct cpufreq_freqs *)data;
-+ /* If leaving a 13kHz state with the LCD sustained */
-+ if ((clkinfo->old == 13000))
-+ break;
-+
- pcd = get_pcd(fbi->fb.var.pixclock);
-+ lccr3 = fbi->reg_lccr3;
- set_hsync_time(fbi, pcd);
- fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
-- set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
-+ pxafb_set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
-+ if (lccr3 != fbi->reg_lccr3 && !((LCCR0 & LCCR0_DIS) || !(LCCR0 & LCCR0_ENB)))
-+ LCCR3 = fbi->reg_lccr3;
- break;
- }
- return 0;
-@@ -1016,7 +1186,7 @@
- printk(KERN_DEBUG "min dma period: %d ps, "
- "new clock %d kHz\n", pxafb_display_dma_period(var),
- policy->max);
-- // TODO: fill in min/max values
-+ /* TODO: fill in min/max values */
- break;
- #if 0
- case CPUFREQ_NOTIFY:
-@@ -1042,7 +1212,7 @@
- {
- struct pxafb_info *fbi = platform_get_drvdata(dev);
-
-- set_ctrlr_state(fbi, C_DISABLE_PM);
-+ pxafb_set_ctrlr_state(fbi, C_DISABLE_PM);
- return 0;
- }
-
-@@ -1050,7 +1220,11 @@
- {
- struct pxafb_info *fbi = platform_get_drvdata(dev);
-
-- set_ctrlr_state(fbi, C_ENABLE_PM);
-+ pxafb_set_ctrlr_state(fbi, C_ENABLE_PM);
-+//RP#ifdef CONFIG_PXA27x
-+//RP LCCR4 |= (1 << 31); /* Disable the PCD Divisor, PCDDIV */
-+//RP LCCR4 |= (5 << 17); /* Undocumented feature */
-+//RP#endif
- return 0;
- }
- #else
-@@ -1154,11 +1328,21 @@
- fbi->task_state = (u_char)-1;
-
- for (i = 0; i < inf->num_modes; i++) {
-- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
-+ if (mode[i].bpp <= 16) { /* 8, 16 bpp */
-+ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
-+ } else if ( mode[i].bpp > 19 ) { /* 24, 25 bpp */
-+ smemlen = mode[i].xres * mode[i].yres * 4;
-+ } else { /* 18, 19 bpp */
-+ /* packed format */
-+ smemlen = mode[i].xres * mode[i].yres * 3;
-+ }
-+
- if (smemlen > fbi->fb.fix.smem_len)
- fbi->fb.fix.smem_len = smemlen;
- }
-
-+ fbi->set_overlay_ctrlr_state = NULL;
-+
- init_waitqueue_head(&fbi->ctrlr_wait);
- INIT_WORK(&fbi->task, pxafb_task);
- init_MUTEX(&fbi->ctrlr_sem);
-@@ -1225,6 +1409,10 @@
- case 4:
- case 8:
- case 16:
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
- inf->modes[0].bpp = bpp;
- dev_info(dev, "overriding bit depth: %d\n", bpp);
- break;
-@@ -1373,7 +1561,7 @@
- fbi = pxafb_init_fbinfo(&dev->dev);
- if (!fbi) {
- dev_err(&dev->dev, "Failed to initialize framebuffer device\n");
-- ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc
-+ ret = -ENOMEM; /* only reason for pxafb_init_fbinfo to fail is kmalloc */
- goto failed;
- }
-
-@@ -1408,7 +1596,7 @@
- }
-
- #ifdef CONFIG_PM
-- // TODO
-+ /* TODO */
- #endif
-
- #ifdef CONFIG_CPU_FREQ
-@@ -1421,7 +1609,12 @@
- /*
- * Ok, now enable the LCD controller
- */
-- set_ctrlr_state(fbi, C_ENABLE);
-+ pxafb_set_ctrlr_state(fbi, C_ENABLE);
-+//#ifdef CONFIG_PXA27x
-+// LCCR4 |= (1 << 31); /* Disabel the PCD Divisor, PCDDIV */
-+// LCCR4 |= (5 << 17); /* Undocumented feature */
-+//#endif
-+ init_waitqueue_head(&fcs_wait_eof);
-
- return 0;
-
-Index: linux-2.6.23/drivers/video/pxafb.h
-===================================================================
---- linux-2.6.23.orig/drivers/video/pxafb.h 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/drivers/video/pxafb.h 2007-10-22 21:53:54.000000000 +0200
-@@ -29,6 +29,60 @@
- unsigned int lccr3;
- };
-
-+struct pxafb_rgb {
-+ struct fb_bitfield red;
-+ struct fb_bitfield green;
-+ struct fb_bitfield blue;
-+ struct fb_bitfield transp;
-+};
-+
-+#ifdef CONFIG_PXA27x
-+/* PXA Overlay Framebuffer Support */
-+struct overlayfb_info
-+{
-+ struct fb_info fb;
-+
-+ struct fb_var_screeninfo old_var;
-+
-+ struct semaphore mutex;
-+ unsigned long refcount;
-+
-+ struct pxafb_info *basefb;
-+
-+ unsigned long map_cpu;
-+ unsigned long screen_cpu;
-+ unsigned long palette_cpu;
-+ unsigned long map_size;
-+ unsigned long palette_size;
-+
-+ dma_addr_t screen_dma;
-+ dma_addr_t map_dma;
-+ dma_addr_t palette_dma;
-+
-+ volatile u_char state;
-+
-+ /* overlay specific info */
-+ unsigned long xpos; /* screen position (x, y)*/
-+ unsigned long ypos;
-+ unsigned long format;
-+
-+ /* additional */
-+ union {
-+ struct pxafb_dma_descriptor *dma0;
-+ struct pxafb_dma_descriptor *dma1;
-+ struct {
-+ struct pxafb_dma_descriptor *dma2;
-+ struct pxafb_dma_descriptor *dma3;
-+ struct pxafb_dma_descriptor *dma4;
-+ };
-+ struct {
-+ struct pxafb_dma_descriptor *dma5_pal;
-+ struct pxafb_dma_descriptor *dma5_frame;
-+ };
-+ };
-+};
-+#endif
-+
- /* PXA LCD DMA descriptor */
- struct pxafb_dma_descriptor {
- unsigned int fdadr;
-@@ -87,6 +141,14 @@
- wait_queue_head_t ctrlr_wait;
- struct work_struct task;
-
-+#ifdef CONFIG_PXA27x
-+ /* PXA Overlay Framebuffer Support */
-+ struct overlayfb_info *overlay1fb;
-+ struct overlayfb_info *overlay2fb;
-+ struct overlayfb_info *cursorfb;
-+#endif
-+ void (*set_overlay_ctrlr_state)(struct pxafb_info *, u_int);
-+
- #ifdef CONFIG_CPU_FREQ
- struct notifier_block freq_transition;
- struct notifier_block freq_policy;
-@@ -106,6 +168,9 @@
- #define C_DISABLE_PM (5)
- #define C_ENABLE_PM (6)
- #define C_STARTUP (7)
-+#define C_BLANK (8)
-+#define C_UNBLANK (9)
-+
-
- #define PXA_NAME "PXA"
-
-Index: linux-2.6.23/drivers/video/pxafb_overlay.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/video/pxafb_overlay.c 2007-10-22 21:53:54.000000000 +0200
-@@ -0,0 +1,1525 @@
-+/*
-+ * linux/drivers/video/pxafb_overlay.c
-+ *
-+ * Copyright (c) 2004, Intel Corporation
-+ *
-+ * Code Status:
-+ * 2004/10/28: <yan.yin@intel.com>
-+ * - Ported to 2.6 kernel
-+ * - Made overlay driver a loadable module
-+ * - Merged overlay optimized patch
-+ * 2004/03/10: <stanley.cai@intel.com>
-+ * - Fixed Bugs
-+ * - Added workaround for overlay1&2
-+ * 2003/08/27: <yu.tang@intel.com>
-+ * - Added Overlay 1 & Overlay2 & Hardware Cursor support
-+ *
-+ *
-+ * This software program is licensed subject to the GNU Lesser General
-+ * Public License (LGPL). Version 2.1, February 1999, available at
-+ * http://www.gnu.org/copyleft/lesser.html
-+ *
-+ * Intel PXA27x LCD Controller Frame Buffer Overlay Driver
-+ *
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/interrupt.h>
-+#include <linux/slab.h>
-+#include <linux/fb.h>
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/cpufreq.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <linux/dma-mapping.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/uaccess.h>
-+#include <asm/arch/bitfield.h>
-+#include <asm/arch/pxafb.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+#include "pxafb.h"
-+
-+/* LCD enhancement : Overlay 1 & 2 & Hardware Cursor */
-+
-+/*
-+ * LCD enhancement : Overlay 1
-+ *
-+ * Features:
-+ * - support 16bpp (No palette)
-+ */
-+/*
-+ * debugging?
-+ */
-+#define DEBUG 0
-+
-+#ifdef DEBUG
-+#define dbg(fmt,arg...) printk(KERN_ALERT "%s(): " fmt "\n", __FUNCTION__, ##arg)
-+#else
-+#define dbg(fmt,arg...)
-+#endif
-+
-+static int overlay1fb_enable(struct fb_info *info);
-+static int overlay2fb_enable(struct fb_info *info);
-+static int cursorfb_enable(struct fb_info *info);
-+
-+static int overlay1fb_disable(struct fb_info *info);
-+static int overlay2fb_disable(struct fb_info *info);
-+static int cursorfb_disable(struct fb_info *info);
-+
-+static int overlay1fb_blank(int blank, struct fb_info *info);
-+static int overlay2fb_blank(int blank, struct fb_info *info);
-+static int cursorfb_blank(int blank, struct fb_info *info);
-+
-+extern void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state);
-+extern int pxafb_blank(int blank, struct fb_info *info);
-+
-+static struct pxafb_rgb def_rgb_18 = {
-+ red: { offset: 12, length: 6, },
-+ green: { offset: 6, length: 6, },
-+ blue: { offset: 0, length: 6, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_16 = {
-+ red: { offset: 10, length: 5, },
-+ green: { offset: 5, length: 5, },
-+ blue: { offset: 0, length: 5, },
-+ transp: { offset: 15, length: 1, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_19 = {
-+ red: { offset: 12, length: 6, },
-+ green: { offset: 6, length: 6, },
-+ blue: { offset: 0, length: 6, },
-+ transp: { offset: 18, length: 1, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_24 = {
-+ red: { offset: 16, length: 7, },
-+ green: { offset: 8, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_25 = {
-+ red: { offset: 16, length: 8, },
-+ green: { offset: 8, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 24, length: 1, },
-+};
-+
-+#define CLEAR_LCD_INTR(reg, intr) do { \
-+ reg = (intr); \
-+}while(0)
-+
-+#define WAIT_FOR_LCD_INTR(reg,intr,timeout) ({ \
-+ int __done =0; \
-+ int __t = timeout; \
-+ while (__t) { \
-+ __done = (reg) & (intr); \
-+ if (__done) break; \
-+ mdelay(10); \
-+ __t--; \
-+ } \
-+ if (!__t) dbg("wait " #intr " timeount");\
-+ __done; \
-+})
-+
-+#define DISABLE_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \
-+ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \
-+ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \
-+ cursorfb_disable((struct fb_info*)fbi->cursorfb); \
-+ } \
-+}while(0)
-+
-+#define ENABLE_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_DISABLE)) { \
-+ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_DISABLE)) { \
-+ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_DISABLE)) { \
-+ cursorfb_enable((struct fb_info*)fbi->cursorfb); \
-+ } \
-+}while(0)
-+
-+#define BLANK_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \
-+ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \
-+ fbi->overlay1fb->state = C_BLANK; \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \
-+ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \
-+ fbi->overlay2fb->state = C_BLANK; \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \
-+ cursorfb_disable((struct fb_info*)fbi->cursorfb); \
-+ fbi->cursorfb->state = C_BLANK; \
-+ } \
-+}while(0)
-+
-+#define UNBLANK_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_BLANK)) { \
-+ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \
-+ fbi->overlay1fb->state = C_ENABLE; \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_BLANK)) { \
-+ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \
-+ fbi->overlay2fb->state = C_ENABLE; \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_BLANK)) { \
-+ cursorfb_enable((struct fb_info*)fbi->cursorfb); \
-+ fbi->cursorfb->state = C_ENABLE; \
-+ } \
-+}while(0)
-+
-+static int overlay1fb_open(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int ret = 0;
-+
-+/* If basefb is disable, enable fb. */
-+ if (fbi->basefb && fbi->basefb->state != C_ENABLE)
-+ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb));
-+
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ ret = -EACCES;
-+ else
-+ fbi->refcount ++;
-+
-+ up(&fbi->mutex);
-+
-+ /* Initialize the variables in overlay1 framebuffer. */
-+ fbi->fb.var.xres = fbi->fb.var.yres = 0;
-+ fbi->fb.var.bits_per_pixel = 0;
-+
-+ return ret;
-+}
-+
-+static int overlay1fb_release(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ fbi->refcount --;
-+
-+ up(&fbi->mutex);
-+ /* disable overlay when released */
-+ overlay1fb_blank(1, info);
-+
-+ return 0;
-+}
-+
-+static int overlay1fb_map_video_memory(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+
-+ if (fbi->map_cpu)
-+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
-+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
-+
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+
-+ if (!fbi->map_cpu) return -ENOMEM;
-+
-+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
-+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
-+
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+
-+ /* setup dma descriptor */
-+ fbi->dma1 = (struct pxafb_dma_descriptor*)
-+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
-+
-+ fbi->dma1->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma1->fsadr = fbi->screen_dma;
-+ fbi->dma1->fidr = 0;
-+ fbi->dma1->ldcmd = fbi->fb.fix.smem_len;
-+
-+ return 0;
-+}
-+
-+static int overlay1fb_enable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ unsigned long bpp1;
-+
-+ if (!fbi->map_cpu) return -EINVAL;
-+
-+ switch (fbi->fb.var.bits_per_pixel) {
-+ case 16:
-+ bpp1 = 0x4;
-+ break;
-+ case 18:
-+ bpp1 = 0x6;
-+ break;
-+ case 19:
-+ bpp1 = 0x8;
-+ break;
-+ case 24:
-+ bpp1 = 0x9;
-+ break;
-+ case 25:
-+ bpp1 = 0xa;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ /* disable branch/start/end of frame interrupt */
-+ LCCR5 |= (LCCR5_IUM1 | LCCR5_BSM1 | LCCR5_EOFM1 | LCCR5_SOFM1);
-+
-+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK)
-+ FDADR1 = (fbi->dma1->fdadr);
-+ else
-+ FBR1 = fbi->dma1->fdadr | 0x1;
-+
-+ /* enable overlay 1 window */
-+ OVL1C2 = (fbi->ypos << 10) | fbi->xpos;
-+ OVL1C1 = OVL1C1_O1EN | (bpp1 << 20) | ((fbi->fb.var.yres-1)<<10) | (fbi->fb.var.xres-1);
-+
-+ fbi->state = C_ENABLE;
-+
-+ return 0;
-+}
-+
-+static int overlay1fb_disable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
-+ int done;
-+
-+ if ((fbi->state == C_DISABLE) || (fbi->state == C_BLANK))
-+ return 0;
-+
-+ fbi->state = C_DISABLE;
-+
-+ /* clear O1EN */
-+ OVL1C1 &= ~OVL1C1_O1EN;
-+
-+ CLEAR_LCD_INTR(LCSR1, LCSR1_BS1);
-+ FBR1 = 0x3;
-+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS1, 100);
-+
-+ if (!done) {
-+ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+static int overlay1fb_blank(int blank, struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int err=0;
-+
-+ switch (blank) {
-+ case 0:
-+ err = overlay1fb_enable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ case 1:
-+ err = overlay1fb_disable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+static int overlay1fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ int xpos, ypos;
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+
-+ /* must in base frame */
-+ xpos = (var->nonstd & 0x3ff);
-+ ypos = ((var->nonstd>>10) & 0x3ff);
-+
-+ if ( (xpos + var->xres) > fbi->basefb->fb.var.xres )
-+ return -EINVAL;
-+
-+ if ( (ypos + var->yres) > fbi->basefb->fb.var.yres )
-+ return -EINVAL;
-+
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ if ( var->xres & 0x1 ) {
-+ printk("xres should be a multiple of 2 pixels!\n");
-+ return -EINVAL;
-+ }
-+ break;
-+ case 18:
-+ case 19:
-+ if ( var->xres & 0x7 ) {
-+ printk("xres should be a multiple of 8 pixels!\n");
-+ return -EINVAL;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ fbi->old_var=*var;
-+
-+ var->activate=FB_ACTIVATE_NOW;
-+
-+ return 0;
-+}
-+
-+
-+static int overlay1fb_set_par(struct fb_info *info)
-+{
-+ int nbytes=0, err=0, pixels_per_line=0;
-+
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+
-+ info->flags &= ~FBINFO_MISC_USEREVENT;
-+
-+ if (fbi->state == C_BLANK)
-+ return 0;
-+
-+ if (fbi->state == C_DISABLE)
-+ goto out1;
-+
-+ /* only xpos & ypos change */
-+ if ( (var->xres == fbi->old_var.xres) &&
-+ (var->yres == fbi->old_var.yres) &&
-+ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) )
-+ goto out2;
-+
-+out1:
-+ switch(var->bits_per_pixel) {
-+ case 16:
-+ /* 2 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1);
-+ nbytes = 2;
-+
-+ var->red = def_rgbt_16.red;
-+ var->green = def_rgbt_16.green;
-+ var->blue = def_rgbt_16.blue;
-+ var->transp = def_rgbt_16.transp;
-+
-+ break;
-+ case 18:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgb_18.red;
-+ var->green = def_rgb_18.green;
-+ var->blue = def_rgb_18.blue;
-+ var->transp = def_rgb_18.transp;
-+
-+ break;
-+ case 19:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgbt_19.red;
-+ var->green = def_rgbt_19.green;
-+ var->blue = def_rgbt_19.blue;
-+ var->transp = def_rgbt_19.transp;
-+
-+ break;
-+ case 24:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_24.red;
-+ var->green = def_rgbt_24.green;
-+ var->blue = def_rgbt_24.blue;
-+ var->transp = def_rgbt_24.transp;
-+
-+ break;
-+ case 25:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_25.red;
-+ var->green = def_rgbt_25.green;
-+ var->blue = def_rgbt_25.blue;
-+ var->transp = def_rgbt_25.transp;
-+
-+ break;
-+ }
-+
-+ fbi->fb.fix.line_length = nbytes * pixels_per_line;
-+ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres;
-+
-+ err= overlay1fb_map_video_memory((struct fb_info*)fbi);
-+
-+ if (err)
-+ return err;
-+
-+out2:
-+ fbi->xpos = var->nonstd & 0x3ff;
-+ fbi->ypos = (var->nonstd>>10) & 0x3ff;
-+
-+ overlay1fb_enable(info);
-+
-+ return 0;
-+
-+}
-+
-+static struct fb_ops overlay1fb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = overlay1fb_open,
-+ .fb_release = overlay1fb_release,
-+ .fb_check_var = overlay1fb_check_var,
-+ .fb_set_par = overlay1fb_set_par,
-+ .fb_blank = overlay1fb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+};
-+
-+ /*
-+ * LCD enhancement : Overlay 2
-+ *
-+ * Features:
-+ * - support planar YCbCr420/YCbCr422/YCbCr444;
-+ */
-+static int overlay2fb_open(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int ret = 0;
-+
-+ /* if basefb is disable, enable fb. */
-+ if (fbi->basefb && fbi->basefb->state != C_ENABLE)
-+ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb));
-+
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ ret = -EACCES;
-+ else
-+ fbi->refcount ++;
-+
-+ up(&fbi->mutex);
-+ fbi->fb.var.xres = fbi->fb.var.yres = 0;
-+
-+ return ret;
-+}
-+
-+static int overlay2fb_release(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ fbi->refcount --;
-+
-+ up(&fbi->mutex);
-+
-+ /* disable overlay when released */
-+ overlay2fb_blank(1, info);
-+
-+ return 0;
-+}
-+
-+static int overlay2fb_map_YUV_memory( struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ unsigned int ylen, cblen, crlen, aylen, acblen, acrlen;
-+ unsigned int yoff, cboff, croff;
-+ unsigned int xres,yres;
-+ unsigned int nbytes;
-+
-+ ylen = cblen = crlen = aylen = acblen = acrlen = 0;
-+ yoff = cboff = croff = 0;
-+
-+ if (fbi->map_cpu)
-+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
-+
-+ yres = fbi->fb.var.yres;
-+
-+ switch(fbi->format) {
-+ case 0x4: /* YCbCr 4:2:0 planar */
-+ pr_debug("420 planar\n");
-+ /* 16 pixels per line */
-+ xres = (fbi->fb.var.xres + 0xf) & (~0xf);
-+ fbi->fb.fix.line_length = xres;
-+
-+ nbytes = xres * yres;
-+ ylen = nbytes;
-+ cblen = crlen = (nbytes/4);
-+
-+ break;
-+ case 0x3: /* YCbCr 4:2:2 planar */
-+ /* 8 pixles per line */
-+ pr_debug("422 planar\n");
-+ xres = (fbi->fb.var.xres + 0x7) & (~0x7);
-+ fbi->fb.fix.line_length = xres;
-+
-+ nbytes = xres * yres;
-+ ylen = nbytes;
-+ cblen = crlen = (nbytes/2);
-+
-+ break;
-+ case 0x2: /* YCbCr 4:4:4 planar */
-+ /* 4 pixels per line */
-+ pr_debug("444 planar\n");
-+ xres = (fbi->fb.var.xres + 0x3) & (~0x3);
-+ fbi->fb.fix.line_length = xres;
-+
-+ nbytes = xres * yres;
-+ ylen = cblen = crlen = nbytes;
-+ break;
-+ }
-+
-+ /* 16-bytes alignment for DMA */
-+ aylen = (ylen + 0xf) & (~0xf);
-+ acblen = (cblen + 0xf) & (~0xf);
-+ acrlen = (crlen + 0xf) & (~0xf);
-+
-+ fbi->fb.fix.smem_len = aylen + acblen + acrlen;
-+
-+ /* alloc memory */
-+
-+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+
-+ if (!fbi->map_cpu) return -ENOMEM;
-+
-+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
-+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
-+
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+
-+ /* setup dma for Planar format */
-+ fbi->dma2 = (struct pxafb_dma_descriptor*)
-+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma3 = fbi->dma2 - 1;
-+ fbi->dma4 = fbi->dma3 - 1;
-+
-+ /* offset */
-+ yoff = 0;
-+ cboff = aylen;
-+ croff = cboff + acblen;
-+
-+ /* Y vector */
-+ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma2->fsadr = fbi->screen_dma + yoff;
-+ fbi->dma2->fidr = 0;
-+ fbi->dma2->ldcmd = ylen;
-+
-+ /* Cb vector */
-+ fbi->dma3->fdadr = (fbi->dma2->fdadr - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma3->fsadr = (fbi->screen_dma + cboff);
-+ fbi->dma3->fidr = 0;
-+ fbi->dma3->ldcmd = cblen;
-+
-+ /* Cr vector */
-+
-+ fbi->dma4->fdadr = (fbi->dma3->fdadr - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma4->fsadr = (fbi->screen_dma + croff);
-+ fbi->dma4->fidr = 0;
-+ fbi->dma4->ldcmd = crlen;
-+
-+ /* adjust for user */
-+ fbi->fb.var.red.length = ylen;
-+ fbi->fb.var.red.offset = yoff;
-+ fbi->fb.var.green.length = cblen;
-+ fbi->fb.var.green.offset = cboff;
-+ fbi->fb.var.blue.length = crlen;
-+ fbi->fb.var.blue.offset = croff;
-+
-+ return 0;
-+};
-+
-+static int overlay2fb_map_RGB_memory( struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+ int pixels_per_line=0 , nbytes=0;
-+
-+ if (fbi->map_cpu)
-+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
-+
-+ switch(var->bits_per_pixel) {
-+ case 16:
-+ /* 2 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1);
-+ nbytes = 2;
-+
-+ var->red = def_rgbt_16.red;
-+ var->green = def_rgbt_16.green;
-+ var->blue = def_rgbt_16.blue;
-+ var->transp = def_rgbt_16.transp;
-+ break;
-+
-+ case 18:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgb_18.red;
-+ var->green = def_rgb_18.green;
-+ var->blue = def_rgb_18.blue;
-+ var->transp = def_rgb_18.transp;
-+
-+ break;
-+ case 19:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgbt_19.red;
-+ var->green = def_rgbt_19.green;
-+ var->blue = def_rgbt_19.blue;
-+ var->transp = def_rgbt_19.transp;
-+
-+ break;
-+ case 24:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_24.red;
-+ var->green = def_rgbt_24.green;
-+ var->blue = def_rgbt_24.blue;
-+ var->transp = def_rgbt_24.transp;
-+
-+ break;
-+
-+ case 25:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_25.red;
-+ var->green = def_rgbt_25.green;
-+ var->blue = def_rgbt_25.blue;
-+ var->transp = def_rgbt_25.transp;
-+
-+ break;
-+ }
-+
-+ fbi->fb.fix.line_length = nbytes * pixels_per_line;
-+ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres;
-+
-+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+
-+ if (!fbi->map_cpu) return -ENOMEM;
-+
-+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
-+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
-+
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+
-+ /* setup dma descriptor */
-+ fbi->dma2 = (struct pxafb_dma_descriptor*)
-+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
-+
-+ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma2->fsadr = fbi->screen_dma;
-+ fbi->dma2->fidr = 0;
-+ fbi->dma2->ldcmd = fbi->fb.fix.smem_len;
-+
-+ return 0;
-+}
-+
-+static int overlay2fb_enable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ unsigned long bpp2;
-+ unsigned int xres, yres;
-+
-+ if (!fbi->map_cpu) return -EINVAL;
-+
-+ switch(fbi->fb.var.bits_per_pixel) {
-+ case 16:
-+ bpp2 = 0x4;
-+ break;
-+ case 18:
-+ bpp2 = 0x6;
-+ break;
-+ case 19:
-+ bpp2 = 0x8;
-+ break;
-+ case 24:
-+ bpp2 = 0x9;
-+ break;
-+ case 25:
-+ bpp2 = 0xa;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ /* disable branch/start/end of frame interrupt */
-+ LCCR5 |= (LCCR5_IUM4 | LCCR5_IUM3 | LCCR5_IUM2 |
-+ LCCR5_BSM4 | LCCR5_BSM3 | LCCR5_BSM2 |
-+ LCCR5_EOFM4 | LCCR5_EOFM3 | LCCR5_EOFM2 |
-+ LCCR5_SOFM4 | LCCR5_SOFM3 | LCCR5_SOFM2);
-+
-+ if (fbi->format == 0) {
-+ /* overlay2 RGB resolution, RGB and YUV have different xres value*/
-+ xres = fbi->fb.var.xres;
-+ yres = fbi->fb.var.yres;
-+
-+ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos;
-+ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1);
-+ /* setup RGB DMA */
-+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK)
-+ FDADR2 = fbi->dma2->fdadr;
-+ else
-+ FBR2 = fbi->dma2->fdadr | 0x1;
-+ } else {
-+ /* overlay2 YUV resolution */
-+ xres = fbi->fb.fix.line_length;
-+ yres = fbi->fb.var.yres;
-+
-+ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos;
-+ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1);
-+
-+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) {
-+ FDADR2 = fbi->dma2->fdadr;
-+ FDADR3 = fbi->dma3->fdadr;
-+ FDADR4 = fbi->dma4->fdadr;
-+ } else {
-+ FBR2 = fbi->dma2->fdadr | 0x01;
-+ FBR3 = fbi->dma3->fdadr | 0x01;
-+ FBR4 = fbi->dma4->fdadr | 0x01;
-+ }
-+ }
-+
-+ fbi->state = C_ENABLE;
-+ return 0;
-+}
-+
-+static int overlay2fb_disable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
-+ int done;
-+
-+ if (fbi->state == C_DISABLE)
-+ return 0;
-+ if (fbi->state == C_BLANK) {
-+ fbi->state = C_DISABLE;
-+ return 0;
-+ }
-+
-+ fbi->state = C_DISABLE;
-+
-+ /* clear O2EN */
-+ OVL2C1 &= ~OVL2C1_O2EN;
-+
-+ /* Make overlay2 can't disable/enable
-+ * correctly sometimes.
-+ */
-+ CLEAR_LCD_INTR(LCSR1, LCSR1_BS2);
-+
-+ if (fbi->format == 0)
-+ FBR2 = 0x3;
-+ else {
-+ FBR2 = 0x3;
-+ FBR3 = 0x3;
-+ FBR4 = 0x3;
-+ }
-+
-+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS2, 100);
-+
-+ if (!done) {
-+ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+static int overlay2fb_blank(int blank, struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int err=0;
-+
-+ switch(blank)
-+ {
-+ case 0:
-+ err = overlay2fb_enable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ case 1:
-+ err = overlay2fb_disable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ default:
-+ /* reserved */
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+
-+static int overlay2fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ int xpos, ypos, xres, yres;
-+ int format;
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+
-+ xres=yres=0;
-+
-+ xpos = (var->nonstd & 0x3ff);
-+ ypos = (var->nonstd >> 10) & 0x3ff;
-+ format = (var->nonstd >>20) & 0x7;
-+
-+
-+ /* Palnar YCbCr444, YCbCr422, YCbCr420 */
-+ if ( (format != 0x4) && (format != 0x3) && (format != 0x2) && (format !=0x0))
-+ return -EINVAL;
-+
-+ /* dummy pixels */
-+ switch(format) {
-+ case 0x0: /* RGB */
-+ xres = var->xres;
-+ break;
-+ case 0x2: /* 444 */
-+ xres = (var->xres + 0x3) & ~(0x3);
-+ break;
-+ case 0x3: /* 422 */
-+ xres = (var->xres + 0x7) & ~(0x7);
-+ break;
-+ case 0x4: /* 420 */
-+ xres = (var->xres + 0xf) & ~(0xf);
-+ break;
-+ }
-+ yres = var->yres;
-+
-+ if ( (xpos + xres) > fbi->basefb->fb.var.xres )
-+ return -EINVAL;
-+
-+ if ( (ypos + yres) > fbi->basefb->fb.var.yres )
-+ return -EINVAL;
-+
-+ fbi->old_var=*var;
-+
-+ var->activate=FB_ACTIVATE_NOW;
-+
-+ return 0;
-+
-+}
-+
-+
-+/*
-+ * overlay2fb_set_var()
-+ *
-+ * var.nonstd is used as YCbCr format.
-+ * var.red/green/blue is used as (Y/Cb/Cr) vector
-+ */
-+
-+static int overlay2fb_set_par(struct fb_info *info)
-+{
-+ unsigned int xpos, ypos;
-+ int format, err;
-+
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+
-+ info->flags &= ~FBINFO_MISC_USEREVENT;
-+
-+ if (fbi->state == C_BLANK)
-+ return 0;
-+
-+ if (fbi->state == C_DISABLE)
-+ goto out1;
-+
-+ if ( (var->xres == fbi->old_var.xres) &&
-+ (var->yres == fbi->old_var.yres) &&
-+ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) &&
-+ (((var->nonstd>>20) & 0x7) == fbi->format) )
-+ goto out2;
-+
-+out1:
-+ xpos = var->nonstd & 0x3ff;
-+ ypos = (var->nonstd>>10) & 0x3ff;
-+ format = (var->nonstd>>20) & 0x7;
-+
-+
-+ fbi->format = format;
-+ if ( fbi->format==0 )
-+ err = overlay2fb_map_RGB_memory(info);
-+ else
-+ err = overlay2fb_map_YUV_memory(info);
-+
-+ if (err) return err;
-+
-+out2:
-+ /* position */
-+ fbi->xpos = var->nonstd & 0x3ff;
-+ fbi->ypos = (var->nonstd>>10) & 0x3ff;
-+
-+ overlay2fb_enable(info);
-+
-+ return 0;
-+}
-+
-+static struct fb_ops overlay2fb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = overlay2fb_open,
-+ .fb_release = overlay2fb_release,
-+ .fb_check_var = overlay2fb_check_var,
-+ .fb_set_par = overlay2fb_set_par,
-+ .fb_blank = overlay2fb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+};
-+
-+/* Hardware cursor */
-+
-+/* Bulverde Cursor Modes */
-+struct cursorfb_mode{
-+ int xres;
-+ int yres;
-+ int bpp;
-+};
-+
-+static struct cursorfb_mode cursorfb_modes[]={
-+ { 32, 32, 2},
-+ { 32, 32, 2},
-+ { 32, 32, 2},
-+ { 64, 64, 2},
-+ { 64, 64, 2},
-+ { 64, 64, 2},
-+ {128, 128, 1},
-+ {128, 128, 1}
-+};
-+
-+static int cursorfb_enable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+
-+ if (!fbi->map_cpu) return -EINVAL;
-+
-+ CCR &= ~CCR_CEN;
-+
-+ /* set palette format
-+ *
-+ * FIXME: if only cursor uses palette
-+ */
-+ LCCR4 = (LCCR4 & (~(0x3<<15))) | (0x1<<15);
-+
-+ /* disable branch/start/end of frame interrupt */
-+ LCCR5 |= (LCCR5_IUM5 | LCCR5_BSM5 | LCCR5_EOFM5 | LCCR5_SOFM5);
-+
-+ /* load palette and frame data */
-+ if (fbi->state == C_DISABLE) {
-+ FDADR5 = fbi->dma5_pal->fdadr;
-+ udelay(1);
-+ FDADR5 = fbi->dma5_frame->fdadr;
-+ udelay(1);
-+
-+ }
-+ else {
-+ FBR5 = fbi->dma5_pal->fdadr | 0x1;
-+ udelay(1);
-+ FBR5 = fbi->dma5_frame->fdadr | 0x1;
-+ udelay(1);
-+ }
-+
-+ CCR = CCR_CEN | (fbi->ypos << 15) | (fbi->xpos << 5) | (fbi->format);
-+
-+ fbi->state = C_ENABLE;
-+
-+ return 0;
-+}
-+
-+static int cursorfb_disable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
-+ int done, ret = 0;
-+
-+ fbi->state = C_DISABLE;
-+
-+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS5, 100);
-+ if (!done) ret = -1;
-+
-+ CCR &= ~CCR_CEN;
-+
-+ return ret;
-+}
-+
-+static int cursorfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-+ u_int trans, struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info *)info;
-+ u_int val, ret = 1;
-+ u_int *pal=(u_int*) fbi->palette_cpu;
-+
-+ /* 25bit with Transparcy for 16bpp format */
-+ if (regno < fbi->palette_size) {
-+ val = ((trans << 24) & 0x1000000);
-+ val |= ((red << 16) & 0x0ff0000);
-+ val |= ((green << 8 ) & 0x000ff00);
-+ val |= ((blue << 0) & 0x00000ff);
-+
-+ pal[regno] = val;
-+ ret = 0;
-+ }
-+ return ret;
-+}
-+
-+int cursorfb_blank(int blank, struct fb_info *info)
-+{
-+ switch(blank)
-+ {
-+ case 0:
-+ cursorfb_enable(info);
-+ break;
-+ case 1:
-+ cursorfb_disable(info);
-+ break;
-+ default:
-+ /* reserved */
-+ break;
-+ }
-+ return 0;
-+}
-+
-+static int cursorfb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ int xpos, ypos, xres, yres;
-+ int mode;
-+ struct cursorfb_mode *cursor;
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+
-+ mode = var->nonstd & 0x7;
-+ xpos = (var->nonstd>>5) & 0x3ff;
-+ ypos = (var->nonstd>>15) & 0x3ff;
-+
-+ if (mode>7 || mode <0 )
-+ return -EINVAL;
-+
-+ cursor = cursorfb_modes + mode;
-+
-+ xres = cursor->xres;
-+ yres = cursor->yres;
-+
-+ if ( (xpos + xres) > fbi->basefb->fb.var.xres )
-+ return -EINVAL;
-+
-+ if ( (ypos + yres) > fbi->basefb->fb.var.yres )
-+ return -EINVAL;
-+
-+ return 0;
-+
-+}
-+
-+static int cursorfb_set_par(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+ struct cursorfb_mode *cursor;
-+ int mode, xpos, ypos;
-+ int err;
-+
-+ info->flags &= ~FBINFO_MISC_USEREVENT;
-+
-+ mode = var->nonstd & 0x7;
-+ xpos = (var->nonstd>>5) & 0x3ff;
-+ ypos = (var->nonstd>>15) & 0x3ff;
-+
-+ if (mode != fbi->format) {
-+ cursor = cursorfb_modes + mode;
-+
-+ /* update "var" info */
-+ fbi->fb.var.xres = cursor->xres;
-+ fbi->fb.var.yres = cursor->yres;
-+ fbi->fb.var.bits_per_pixel = cursor->bpp;
-+
-+ /* alloc video memory
-+ *
-+ * 4k is engouh for 128x128x1 cursor,
-+ * - 2k for cursor pixels,
-+ * - 2k for palette data, plus 2 dma descriptor
-+ */
-+ if (!fbi->map_cpu) {
-+ fbi->map_size = PAGE_SIZE;
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+ if (!fbi->map_cpu) return -ENOMEM;
-+ }
-+
-+ cursor = cursorfb_modes + mode;
-+
-+ /* update overlay & fix "info" */
-+ fbi->screen_cpu = fbi->map_cpu;
-+ fbi->palette_cpu = fbi->map_cpu + (PAGE_SIZE/2);
-+ fbi->screen_dma = fbi->map_dma;
-+ fbi->palette_dma = fbi->map_dma + (PAGE_SIZE/2);
-+
-+ fbi->format = mode;
-+ fbi->palette_size = (1<<cursor->bpp);
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+ fbi->fb.fix.smem_len = cursor->xres * cursor->yres * cursor->bpp / 8;
-+ fbi->fb.fix.line_length = cursor->xres * cursor->bpp / 8;
-+
-+ fbi->dma5_pal = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 16 );
-+ fbi->dma5_pal->fdadr = (fbi->map_dma + PAGE_SIZE - 16);
-+ fbi->dma5_pal->fsadr = fbi->palette_dma;
-+ fbi->dma5_pal->fidr = 0;
-+ fbi->dma5_pal->ldcmd = (fbi->palette_size<<2) | LDCMD_PAL;
-+
-+ fbi->dma5_frame = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 32 );
-+ fbi->dma5_frame->fdadr = (fbi->map_dma + PAGE_SIZE - 32);
-+ fbi->dma5_frame->fsadr = fbi->screen_dma;
-+ fbi->dma5_frame->fidr = 0;
-+ fbi->dma5_frame->ldcmd = fbi->fb.fix.smem_len;
-+
-+ /* alloc & set default cmap */
-+ err = fb_alloc_cmap(&fbi->fb.cmap, fbi->palette_size, 0);
-+ if (err) return err;
-+ err = fb_set_cmap(&fbi->fb.cmap, info);
-+ if (err) return err;
-+ }
-+
-+ /* update overlay info */
-+ if ( (xpos != fbi->xpos) || (ypos != fbi->ypos) ) {
-+ fbi->xpos = xpos;
-+ fbi->ypos = ypos;
-+ }
-+
-+ cursorfb_enable(info);
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+
-+ return 0;
-+}
-+
-+static struct fb_ops cursorfb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_check_var = cursorfb_check_var,
-+ .fb_set_par = cursorfb_set_par,
-+ .fb_blank = cursorfb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_setcolreg = cursorfb_setcolreg,
-+};
-+
-+static struct overlayfb_info * __init overlay1fb_init_fbinfo(void)
-+{
-+ struct overlayfb_info *fbi;
-+
-+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
-+ if (!fbi)
-+ return NULL;
-+
-+ memset(fbi, 0, sizeof(struct overlayfb_info) );
-+
-+ fbi->refcount = 0;
-+ init_MUTEX(&fbi->mutex);
-+
-+ strcpy(fbi->fb.fix.id, "overlay1");
-+
-+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
-+ fbi->fb.fix.type_aux = 0;
-+ fbi->fb.fix.xpanstep = 0;
-+ fbi->fb.fix.ypanstep = 0;
-+ fbi->fb.fix.ywrapstep = 0;
-+ fbi->fb.fix.accel = FB_ACCEL_NONE;
-+
-+ fbi->fb.var.nonstd = 0;
-+ fbi->fb.var.activate = FB_ACTIVATE_NOW;
-+ fbi->fb.var.height = -1;
-+ fbi->fb.var.width = -1;
-+ fbi->fb.var.accel_flags = 0;
-+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
-+
-+
-+ fbi->fb.fbops = &overlay1fb_ops;
-+ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
-+ fbi->fb.node = -1;
-+ fbi->fb.pseudo_palette = NULL;
-+
-+ fbi->xpos = 0;
-+ fbi->ypos = 0;
-+ fbi->format = -1;
-+ fbi->state = C_DISABLE;
-+
-+ return fbi;
-+}
-+
-+static struct overlayfb_info * __init overlay2fb_init_fbinfo(void)
-+{
-+ struct overlayfb_info *fbi;
-+
-+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
-+ if (!fbi)
-+ return NULL;
-+
-+ memset(fbi, 0, sizeof(struct overlayfb_info) );
-+
-+ fbi->refcount = 0;
-+ init_MUTEX(&fbi->mutex);
-+
-+ strcpy(fbi->fb.fix.id, "overlay2");
-+
-+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
-+ fbi->fb.fix.type_aux = 0;
-+ fbi->fb.fix.xpanstep = 0;
-+ fbi->fb.fix.ypanstep = 0;
-+ fbi->fb.fix.ywrapstep = 0;
-+ fbi->fb.fix.accel = FB_ACCEL_NONE;
-+
-+ fbi->fb.var.nonstd = 0;
-+ fbi->fb.var.activate = FB_ACTIVATE_NOW;
-+ fbi->fb.var.height = -1;
-+ fbi->fb.var.width = -1;
-+ fbi->fb.var.accel_flags = 0;
-+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
-+
-+ fbi->fb.fbops = &overlay2fb_ops;
-+ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
-+ fbi->fb.node = -1;
-+ fbi->fb.pseudo_palette = NULL;
-+
-+ fbi->xpos = 0;
-+ fbi->ypos = 0;
-+ fbi->format = -1;
-+ fbi->state = C_DISABLE;
-+
-+ return fbi;
-+}
-+
-+static struct overlayfb_info * __init cursorfb_init_fbinfo(void)
-+{
-+ struct overlayfb_info *fbi;
-+
-+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
-+ if (!fbi)
-+ return NULL;
-+
-+ memset(fbi, 0, sizeof(struct overlayfb_info) );
-+
-+ fbi->refcount = 0;
-+ init_MUTEX(&fbi->mutex);
-+
-+ strcpy(fbi->fb.fix.id, "cursor");
-+
-+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
-+ fbi->fb.fix.type_aux = 0;
-+ fbi->fb.fix.xpanstep = 0;
-+ fbi->fb.fix.ypanstep = 0;
-+ fbi->fb.fix.ywrapstep = 0;
-+ fbi->fb.fix.accel = FB_ACCEL_NONE;
-+
-+ fbi->fb.var.nonstd = 0;
-+ fbi->fb.var.activate = FB_ACTIVATE_NOW;
-+ fbi->fb.var.height = -1;
-+ fbi->fb.var.width = -1;
-+ fbi->fb.var.accel_flags = 0;
-+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
-+
-+ fbi->fb.fbops = &cursorfb_ops;
-+ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
-+ fbi->fb.node = -1;
-+ fbi->fb.pseudo_palette = NULL;
-+
-+
-+ fbi->xpos = 0;
-+ fbi->ypos = 0;
-+ fbi->format = -1;
-+ fbi->state = C_DISABLE;
-+
-+ return fbi;
-+}
-+
-+
-+void pxa_set_overlay_ctrlr_state(struct pxafb_info *fbi, u_int state)
-+{
-+ switch (state) {
-+ case C_DISABLE:
-+ DISABLE_OVERLAYS(fbi);
-+ break;
-+ case C_ENABLE:
-+ ENABLE_OVERLAYS(fbi);
-+ break;
-+ case C_BLANK:
-+ BLANK_OVERLAYS(fbi);
-+ break;
-+ case C_UNBLANK:
-+ UNBLANK_OVERLAYS(fbi);
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+static int is_pxafb_device(struct device * dev, void * data)
-+{
-+ struct platform_device *pdev = container_of(dev, struct platform_device, dev);
-+
-+ return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0);
-+}
-+
-+static int __devinit pxafb_overlay_init(void)
-+{
-+ int ret;
-+ struct overlayfb_info *overlay1fb, *overlay2fb, *cursorfb;
-+ struct pxafb_info *fbi;
-+ struct device *dev;
-+
-+ ret = -1;
-+ overlay1fb = overlay2fb = cursorfb = NULL;
-+ fbi = NULL;
-+
-+ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
-+ if (!dev) {
-+ printk(KERN_INFO "Base framebuffer not exists, failed to load overlay driver!\n");
-+ return ret;
-+ }
-+
-+ fbi = dev_get_drvdata(dev);
-+ if (fbi == NULL) {
-+ printk(KERN_INFO "Base framebuffer not initialized, failed to load overlay driver!\n");
-+ return ret;
-+ }
-+
-+ /* Overlay 1 windows */
-+ overlay1fb = overlay1fb_init_fbinfo();
-+
-+ if (!overlay1fb) {
-+ ret = -ENOMEM;
-+ printk("overlay1fb_init_fbinfo failed\n");
-+ goto failed;
-+ }
-+
-+ ret = register_framebuffer(&overlay1fb->fb);
-+ if (ret < 0)
-+ goto failed;
-+
-+ /* Overlay 2 window */
-+ overlay2fb = overlay2fb_init_fbinfo();
-+
-+ if (!overlay2fb) {
-+ ret = -ENOMEM;
-+ printk("overlay2fb_init_fbinfo failed\n");
-+ goto failed;
-+ }
-+
-+ ret = register_framebuffer(&overlay2fb->fb);
-+ if (ret < 0) goto failed;
-+
-+ /* Hardware cursor window */
-+ cursorfb = cursorfb_init_fbinfo();
-+
-+ if (!cursorfb) {
-+ ret = -ENOMEM;
-+ printk("cursorfb_init_fbinfo failed\n");
-+ goto failed;
-+ }
-+
-+ ret = register_framebuffer(&cursorfb->fb);
-+ if (ret < 0) goto failed;
-+
-+
-+ /* set refernce to Overlays */
-+ fbi->overlay1fb = overlay1fb;
-+ fbi->overlay2fb = overlay2fb;
-+ fbi->cursorfb = cursorfb;
-+ fbi->set_overlay_ctrlr_state=pxa_set_overlay_ctrlr_state;
-+
-+ /* set refernce to BaseFrame */
-+ overlay1fb->basefb = fbi;
-+ overlay2fb->basefb = fbi;
-+ cursorfb->basefb = fbi;
-+
-+ printk(KERN_INFO "Load PXA Overlay driver successfully!\n");
-+
-+ return 0;
-+
-+failed:
-+ if (overlay1fb)
-+ kfree(overlay1fb);
-+ if (overlay2fb)
-+ kfree(overlay2fb);
-+ if (cursorfb)
-+ kfree(cursorfb);
-+ printk(KERN_INFO "Load PXA Overlay driver failed!\n");
-+ return ret;
-+}
-+
-+static void __exit pxafb_overlay_exit(void)
-+{
-+ struct pxafb_info *fbi;
-+ struct device *dev;
-+
-+ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
-+ if (!dev)
-+ return;
-+
-+ fbi = dev_get_drvdata(dev);
-+ if (!fbi)
-+ return;
-+
-+ if (fbi->overlay1fb) {
-+ unregister_framebuffer(&(fbi->overlay1fb->fb));
-+ kfree(fbi->overlay1fb);
-+ fbi->overlay1fb = NULL;
-+ }
-+
-+ if (fbi->overlay2fb) {
-+ unregister_framebuffer(&(fbi->overlay2fb->fb));
-+ kfree(fbi->overlay2fb);
-+ fbi->overlay2fb = NULL;
-+ }
-+
-+ if (fbi->cursorfb) {
-+ unregister_framebuffer(&(fbi->cursorfb->fb));
-+ kfree(fbi->cursorfb);
-+ fbi->cursorfb = NULL;
-+ }
-+
-+ fbi->set_overlay_ctrlr_state = NULL;
-+
-+ printk(KERN_INFO "Unload PXA Overlay driver successfully!\n");
-+ return;
-+}
-+
-+
-+module_init(pxafb_overlay_init);
-+module_exit(pxafb_overlay_exit);
-+
-+MODULE_DESCRIPTION("Loadable framebuffer overlay driver for PXA");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-10 09:38:46.000000000 +0200
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2007-10-22 21:53:54.000000000 +0200
-@@ -789,11 +789,18 @@
- #define UDC_INT_PACKETCMP (0x1)
-
- #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2))
-+/* Older defines, do not use. */
- #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */
- #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */
- #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */
- #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */
- #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */
-+/* New defines. */
-+#define UDCISR1_IRCC (1 << 31) /* IntEn - Configuration Change */
-+#define UDCISR1_IRSOF (1 << 30) /* IntEn - Start of Frame */
-+#define UDCISR1_IRRU (1 << 29) /* IntEn - Resume */
-+#define UDCISR1_IRSU (1 << 28) /* IntEn - Suspend */
-+#define UDCISR1_IRRS (1 << 27) /* IntEn - Reset */
-
- #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */
- #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */
-@@ -1826,6 +1833,8 @@
- #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
- #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
- #define LCSR __REG(0x44000038) /* LCD Controller Status Register */
-+#define LCSR0 __REG(0x44000038) /* LCD Controller Status Register */
-+#define LCSR1 __REG(0x44000034) /* LCD Controller Status Register */
- #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */
- #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */
- #define TMEDCR __REG(0x44000044) /* TMED Control Register */
-@@ -1835,6 +1844,10 @@
- #define LCCR3_4BPP (2 << 24)
- #define LCCR3_8BPP (3 << 24)
- #define LCCR3_16BPP (4 << 24)
-+#define LCCR3_18BPP (6 << 24)
-+#define LCCR3_19BPP (8 << 24)
-+#define LCCR3_24BPP (9 << 24)
-+#define LCCR3_25BPP (10<< 24)
-
- #define FDADR0 __REG(0x44000200) /* DMA Channel 0 Frame Descriptor Address Register */
- #define FSADR0 __REG(0x44000204) /* DMA Channel 0 Frame Source Address Register */
-@@ -1999,6 +2012,104 @@
-
- #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */
-
-+/* Overlay1 & Overlay2 & Hardware Cursor */
-+#define LCSR1_SOF1 (1 << 0)
-+#define LCSR1_SOF2 (1 << 1)
-+#define LCSR1_SOF3 (1 << 2)
-+#define LCSR1_SOF4 (1 << 3)
-+#define LCSR1_SOF5 (1 << 4)
-+#define LCSR1_SOF6 (1 << 5)
-+
-+#define LCSR1_EOF1 (1 << 8)
-+#define LCSR1_EOF2 (1 << 9)
-+#define LCSR1_EOF3 (1 << 10)
-+#define LCSR1_EOF4 (1 << 11)
-+#define LCSR1_EOF5 (1 << 12)
-+#define LCSR1_EOF6 (1 << 13)
-+
-+#define LCSR1_BS1 (1 << 16)
-+#define LCSR1_BS2 (1 << 17)
-+#define LCSR1_BS3 (1 << 18)
-+#define LCSR1_BS4 (1 << 19)
-+#define LCSR1_BS5 (1 << 20)
-+#define LCSR1_BS6 (1 << 21)
-+
-+#define LCSR1_IU2 (1 << 25)
-+#define LCSR1_IU3 (1 << 26)
-+#define LCSR1_IU4 (1 << 27)
-+#define LCSR1_IU5 (1 << 28)
-+#define LCSR1_IU6 (1 << 29)
-+
-+#define LDCMD_SOFINT (1 << 22)
-+#define LDCMD_EOFINT (1 << 21)
-+
-+
-+#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
-+#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
-+#define LCCR5_SOFM3 (1<<2) /* Start Of Frame Mask for Overlay 2 (channel 3) */
-+#define LCCR5_SOFM4 (1<<3) /* Start Of Frame Mask for Overlay 2 (channel 4) */
-+#define LCCR5_SOFM5 (1<<4) /* Start Of Frame Mask for cursor (channel 5) */
-+#define LCCR5_SOFM6 (1<<5) /* Start Of Frame Mask for command data (channel 6) */
-+
-+#define LCCR5_EOFM1 (1<<8) /* End Of Frame Mask for Overlay 1 (channel 1) */
-+#define LCCR5_EOFM2 (1<<9) /* End Of Frame Mask for Overlay 2 (channel 2) */
-+#define LCCR5_EOFM3 (1<<10) /* End Of Frame Mask for Overlay 2 (channel 3) */
-+#define LCCR5_EOFM4 (1<<11) /* End Of Frame Mask for Overlay 2 (channel 4) */
-+#define LCCR5_EOFM5 (1<<12) /* End Of Frame Mask for cursor (channel 5) */
-+#define LCCR5_EOFM6 (1<<13) /* End Of Frame Mask for command data (channel 6) */
-+
-+#define LCCR5_BSM1 (1<<16) /* Branch mask for Overlay 1 (channel 1) */
-+#define LCCR5_BSM2 (1<<17) /* Branch mask for Overlay 2 (channel 2) */
-+#define LCCR5_BSM3 (1<<18) /* Branch mask for Overlay 2 (channel 3) */
-+#define LCCR5_BSM4 (1<<19) /* Branch mask for Overlay 2 (channel 4) */
-+#define LCCR5_BSM5 (1<<20) /* Branch mask for cursor (channel 5) */
-+#define LCCR5_BSM6 (1<<21) /* Branch mask for data command (channel 6) */
-+
-+#define LCCR5_IUM1 (1<<24) /* Input FIFO Underrun Mask for Overlay 1 */
-+#define LCCR5_IUM2 (1<<25) /* Input FIFO Underrun Mask for Overlay 2 */
-+#define LCCR5_IUM3 (1<<26) /* Input FIFO Underrun Mask for Overlay 2 */
-+#define LCCR5_IUM4 (1<<27) /* Input FIFO Underrun Mask for Overlay 2 */
-+#define LCCR5_IUM5 (1<<28) /* Input FIFO Underrun Mask for cursor */
-+#define LCCR5_IUM6 (1<<29) /* Input FIFO Underrun Mask for data command */
-+
-+#define OVL1C1_O1EN (1<<31) /* Enable bit for Overlay 1 */
-+#define OVL2C1_O2EN (1<<31) /* Enable bit for Overlay 2 */
-+#define CCR_CEN (1<<31) /* Enable bit for Cursor */
-+
-+/* LCD registers */
-+#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */
-+#define LCCR5 __REG(0x44000014) /* LCD Controller Control Register 5 */
-+#define FBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
-+#define FBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
-+#define FBR2 __REG(0x44000028) /* DMA Channel 2 Frame Branch Register */
-+#define FBR3 __REG(0x4400002C) /* DMA Channel 3 Frame Branch Register */
-+#define FBR4 __REG(0x44000030) /* DMA Channel 4 Frame Branch Register */
-+#define FDADR2 __REG(0x44000220) /* DMA Channel 2 Frame Descriptor Address Register */
-+#define FSADR2 __REG(0x44000224) /* DMA Channel 2 Frame Source Address Register */
-+#define FIDR2 __REG(0x44000228) /* DMA Channel 2 Frame ID Register */
-+#define LDCMD2 __REG(0x4400022C) /* DMA Channel 2 Command Register */
-+#define FDADR3 __REG(0x44000230) /* DMA Channel 3 Frame Descriptor Address Register */
-+#define FSADR3 __REG(0x44000234) /* DMA Channel 3 Frame Source Address Register */
-+#define FIDR3 __REG(0x44000238) /* DMA Channel 3 Frame ID Register */
-+#define LDCMD3 __REG(0x4400023C) /* DMA Channel 3 Command Register */
-+#define FDADR4 __REG(0x44000240) /* DMA Channel 4 Frame Descriptor Address Register */
-+#define FSADR4 __REG(0x44000244) /* DMA Channel 4 Frame Source Address Register */
-+#define FIDR4 __REG(0x44000248) /* DMA Channel 4 Frame ID Register */
-+#define LDCMD4 __REG(0x4400024C) /* DMA Channel 4 Command Register */
-+#define FDADR5 __REG(0x44000250) /* DMA Channel 5 Frame Descriptor Address Register */
-+#define FSADR5 __REG(0x44000254) /* DMA Channel 5 Frame Source Address Register */
-+#define FIDR5 __REG(0x44000258) /* DMA Channel 5 Frame ID Register */
-+#define LDCMD5 __REG(0x4400025C) /* DMA Channel 5 Command Register */
-+
-+#define OVL1C1 __REG(0x44000050) /* Overlay 1 Control Register 1 */
-+#define OVL1C2 __REG(0x44000060) /* Overlay 1 Control Register 2 */
-+#define OVL2C1 __REG(0x44000070) /* Overlay 2 Control Register 1 */
-+#define OVL2C2 __REG(0x44000080) /* Overlay 2 Control Register 2 */
-+#define CCR __REG(0x44000090) /* Cursor Control Register */
-+
-+#define FBR5 __REG(0x44000110) /* DMA Channel 5 Frame Branch Register */
-+#define FBR6 __REG(0x44000114) /* DMA Channel 6 Frame Branch Register */
-+
- /*
- * Memory controller
- */
diff --git a/packages/linux/linux-ezx-2.6.23/patches/series b/packages/linux/linux-ezx-2.6.23/patches/series
deleted file mode 100644
index c7738e4b61..0000000000
--- a/packages/linux/linux-ezx-2.6.23/patches/series
+++ /dev/null
@@ -1,106 +0,0 @@
-binutils-buildid-arm.patch
-patch-2.6.23.1
-pxa27x_overlay-r7.patch
-
-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:
-# move vibrator level function to the vibrator driver
-
-a780-pcap.patch
-e680-pcap.patch
-a1200-pcap.patch
-e6-pcap.patch
-
-a780-mci.patch
-e680-mci.patch
-a1200-mci.patch
-e6-mci.patch
-
-pxa27x-udc-support.3.patch
-
-ezx-emu.patch
-# ezx-emu TODO:
-# userspace interface for controling emu
-# read adc to find which accessory is plugged
-a780-emu.patch
-e680-emu.patch
-
-pxa27x-udc-fix-a1200.patch #(see ezx-a1200.c)
-ezx-eoc.patch
-a1200-eoc.patch
-e6-eoc.patch
-
-ezx-mtd-map.patch
-
-ezx-serial-bug-workaround.patch
-
-pxa-kbd.patch
-a780-kbd.patch
-e680-kbd.patch
-a1200-kbd.patch
-
-pcap-ts.patch
-a780-ts.patch
-e680-ts.patch
-a1200-ts.patch
-e6-ts.patch
-
-ezx-backlight.patch
-
-a780-flip.patch
-e680-locksw.patch
-a1200-flip.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
-
-asoc-pxa-ssp.patch
-asoc-fix-loopback.patch
-ezx-asoc.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
-
-# the folowing break too much stuff on other phones.
-
-# incomplete
-
diff --git a/packages/linux/linux-ezx-2.6.23/rokre2/defconfig b/packages/linux/linux-ezx-2.6.23/rokre2/defconfig
deleted file mode 100755
index 206ae45fc7..0000000000
--- a/packages/linux/linux-ezx-2.6.23/rokre2/defconfig
+++ /dev/null
@@ -1,1189 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:05:01 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_KEYBOARD_PXA27x 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_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/rokre6/defconfig b/packages/linux/linux-ezx-2.6.23/rokre6/defconfig
deleted file mode 100755
index 733566adc6..0000000000
--- a/packages/linux/linux-ezx-2.6.23/rokre6/defconfig
+++ /dev/null
@@ -1,1203 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:07:51 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.23/update_patches.sh b/packages/linux/linux-ezx-2.6.23/update_patches.sh
deleted file mode 100644
index 9988e8926b..0000000000
--- a/packages/linux/linux-ezx-2.6.23/update_patches.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/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/branches/kernel-2.6.23.x-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-2.6.24/a1200/defconfig b/packages/linux/linux-ezx-2.6.24/a1200/defconfig
deleted file mode 100755
index 4649d7ba96..0000000000
--- a/packages/linux/linux-ezx-2.6.24/a1200/defconfig
+++ /dev/null
@@ -1,1208 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:03:17 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-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 is not set
-# CONFIG_MTD_EZX_A780_ALTERNATE is not set
-CONFIG_MTD_EZX_A1200=y
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/a780/defconfig b/packages/linux/linux-ezx-2.6.24/a780/defconfig
deleted file mode 100755
index b10c2e908d..0000000000
--- a/packages/linux/linux-ezx-2.6.24/a780/defconfig
+++ /dev/null
@@ -1,1502 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun Jan 27 15:19:17 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED 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=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_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE 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_EOC is not set
-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
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-# CONFIG_NO_HZ is not set
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# 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=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_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 is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_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=m
-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=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=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_CT_PROTO_UDPLITE=m
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NETFILTER_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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_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 is not set
-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_TIME=m
-CONFIG_NETFILTER_XT_MATCH_U32=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=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=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 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=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
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_SCH_FIFO=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=y
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=y
-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_HCIBTUSB is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL 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
-CONFIG_FIB_RULES=y
-
-#
-# Wireless
-#
-CONFIG_CFG80211=m
-CONFIG_NL80211=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_MAC80211=m
-CONFIG_MAC80211_RCSIMPLE=y
-CONFIG_MAC80211_LEDS=y
-# CONFIG_MAC80211_DEBUG 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
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=m
-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
-# CONFIG_MTD_OOPS 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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_PXA2XX is not set
-# 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_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 is not set
-# CONFIG_INPUT_JOYDEV 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_KEYBOARD_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-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 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_V4L_USB_DRIVERS is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_UVESA 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=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SPI devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_A780=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-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 is not set
-# CONFIG_RTC_DRV_DS1374 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
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# 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_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=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_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=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=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=m
-
-#
-# 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=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE 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_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
-CONFIG_NETWORK_FILESYSTEMS=y
-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 is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# 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
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-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
-# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# 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 is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_ABLKCIPHER=m
-CONFIG_CRYPTO_AEAD=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 is not set
-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_XTS=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_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 is not set
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-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
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/e680/defconfig b/packages/linux/linux-ezx-2.6.24/e680/defconfig
deleted file mode 100755
index 9a30ce673f..0000000000
--- a/packages/linux/linux-ezx-2.6.24/e680/defconfig
+++ /dev/null
@@ -1,1584 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21.4
-# Sun Sep 9 16:51:47 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=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_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 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_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=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=y
-
-#
-# 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_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=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=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# 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 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=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
-
-#
-# 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 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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-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_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=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=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=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
-
-#
-# 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
-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 is not set
-CONFIG_BT_HCIUART=m
-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=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=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=0x0
-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=m
-# 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
-
-#
-# 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
-#
-
-#
-# 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=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_ZD1211RW 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=m
-# 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=y
-CONFIG_INPUT_UINPUT=y
-
-#
-# 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 is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=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_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=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-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=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=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_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=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_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# 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 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=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_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
-#
-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=n
-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=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=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=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 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=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_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=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=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_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=m
-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
diff --git a/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX
deleted file mode 100644
index e7e9115e3c..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX
+++ /dev/null
@@ -1,77 +0,0 @@
-# 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 e6 e2
-
-CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi-
-QUILT_PATCHES ?= patches
-
-LV ?= ezxdev# replace LOCALVERSION string
-J ?= 2 # simultaneous jobs
-SIG ?= 0 # BOOL sign md5sums file
-
-DATE = $(shell date +%Y%m%d)
-DEPLOY_SERVER ?= people.openezx.org
-DEPLOY_DIR ?= public_html/images/$(DATE)/
-
-all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz)
-
-zImages: $(foreach p, $(PHONES), zImage-$(p))
-
-modules: $(foreach p, $(PHONES), modules-$(p).tar.gz)
-
-config: $(foreach p, $(PHONES), config-$(p))
-
-config-%: $(QUILT_PATCHES)/defconfig-%
- cp $< .config
- make ARCH=arm oldconfig
- cp .config $<
-
-deploy: release
- ssh $(DEPLOY_SERVER) \
- mkdir -p $(DEPLOY_DIR)
- scp ezxrelease-$(DATE).tar $(DEPLOY_SERVER):$(DEPLOY_DIR)
- ssh $(DEPLOY_SERVER) \
- cd $(DEPLOY_DIR)\; \
- tar -xf ezxrelease-$(DATE).tar\; \
- rm -f ezxrelease-$(DATE).tar
-
-release: $(foreach p, $(PHONES), tag-$(p))
- cp md5sums.tmp md5sums
- test "$(SIG)" = "1" && \
- cat md5sums.tmp | gpg --clearsign > md5sums \
- ; echo
- 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) && \
- mv zImage-$$p zImage-$$tag-$$p && \
- mv 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-%
- cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
- make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage
- mv arch/arm/boot/zImage $@
-
-modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-%
- cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
- -find . -name "*.ko" -print0 | xargs -r0 rm
- mkdir -p Makefile.OpenEZX-tmp/$@
- make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
- make -j1 ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \
- INSTALL_MOD_PATH=Makefile.OpenEZX-tmp/$@ modules_install
- tar -C Makefile.OpenEZX-tmp/$@ -czf $@ .
- rm -rf Makefile.OpenEZX-tmp/
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch
deleted file mode 100644
index d69c6ec75f..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:08.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:24.000000000 -0200
-@@ -186,8 +186,15 @@
- },
- };
-
-+
-+struct platform_device a1200_eoc_device = {
-+ .name = "ezx-eoc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
-+ &a1200_eoc_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch
deleted file mode 100644
index cc36d36c51..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:42.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:50.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>
-@@ -275,11 +276,34 @@
- .num_resources = ARRAY_SIZE(pcap_ts_resources),
- .resource = pcap_ts_resources,
- };
-+/* Flip */
-+#undef GPIO_FLIP_PIN
-+#define GPIO_FLIP_PIN 15 /* FIXME */
-+static struct gpio_keys_button a1200flip_buttons[] = {
-+ [0] = {
-+ .code = KEY_SLEEP,
-+ .gpio = GPIO_FLIP_PIN,
-+ .desc = "A1200 flip",
-+ },
-+};
-+
-+static struct gpio_keys_platform_data a1200flip_platform_data = {
-+ .buttons = a1200flip_buttons,
-+ .nbuttons = 1,
-+};
-+static struct platform_device a1200flip_device = {
-+ .name = "gpio-keys",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &a1200flip_platform_data,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
- &pcap_ts_device,
-+ &a1200flip_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch
deleted file mode 100644
index 1e1a68c5b8..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:24.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:35.000000000 -0200
-@@ -15,6 +15,7 @@
- #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>
-@@ -23,11 +24,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -192,6 +195,63 @@
- .id = -1,
- };
-
-+/* Keypad */
-+static unsigned char a1200_keycode[] = {
-+ /* row 0 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 1 */
-+ KEY_RIGHT, KEY_DOWN, KEY_KPENTER, KEY_UP, KEY_LEFT,
-+ /* row 2 */
-+ KEY_PAGEDOWN, KEY_CAMERA, KEY_RECORD, KEY_HOME, KEY_PAGEUP,
-+ /* row 3 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 4 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
-+ /* row 5 */
-+ KEY_RESERVED, KEY_RESERVED, KEY_MENU, KEY_RESERVED, KEY_RESERVED,
-+};
-+/*
-+static unsigned char a1200_direct_keycode[] = {
-+ KEY_CAMERA,
-+};
-+*/
-+
-+static int a1200_kbd_init(void)
-+{
-+ 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(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
-+ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
-+ 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> */
-+ pxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<5> */
-+
-+ PKWR = 0xEC000;
-+ PGSR3 |= 0x1F80;
-+ return 0;
-+}
-+
-+static struct pxakbd_platform_data a1200_kbd_platform_data = {
-+ .init = &a1200_kbd_init,
-+ .scan_interval = HZ/40,
-+ .matrix = {
-+ .keycode = a1200_keycode,
-+ .cols = 6,
-+ .rows = 5,
-+ },
-+/*
-+ .direct = {
-+ .keycode = a1200_direct_keycode,
-+ .num = 1,
-+ },
-+*/
-+};
-+
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
-@@ -201,6 +261,7 @@
- {
- set_pxa_fb_info(&a1200_fb_info);
- pxa_set_mci_info(&a1200_mci_platform_data);
-+ pxa_set_kbd_info(&a1200_kbd_platform_data);
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
- }
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch
deleted file mode 100644
index caa897eddf..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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[] = {
-+ [ilog2(MMC_VDD_165_195)] = 6,
-+ [ilog2(MMC_VDD_20_21)] = 7,
-+ [ilog2(MMC_VDD_21_22)] = 8,
-+ [ilog2(MMC_VDD_22_23)] = 8,
-+ [ilog2(MMC_VDD_23_24)] = 9,
-+ [ilog2(MMC_VDD_24_25)] = 9,
-+ [ilog2(MMC_VDD_25_26)] = 10,
-+ [ilog2(MMC_VDD_26_27)] = 10,
-+ [ilog2(MMC_VDD_27_28)] = 11,
-+ [ilog2(MMC_VDD_28_29)] = 11,
-+ [ilog2(MMC_VDD_29_30)] = 12,
-+ [ilog2(MMC_VDD_30_31)] = 12,
-+ [ilog2(MMC_VDD_31_32)] = 13,
-+ [ilog2(MMC_VDD_32_33)] = 13,
-+ [ilog2(MMC_VDD_33_34)] = 14,
-+ [ilog2(MMC_VDD_34_35)] = 14,
-+ [ilog2(MMC_VDD_35_36)] = 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, IRQF_DISABLED,
-+ "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)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ 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_165_195|MMC_VDD_20_21|MMC_VDD_21_22
-+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
-+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
-+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
-+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
-+ |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,
-@@ -101,6 +193,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.24/patches/a1200-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch
deleted file mode 100644
index c725886630..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,53 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int a1200_pcap_init(void)
-+{
-+ /* FIXME */
-+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
-+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
-+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
-+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
-+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data a1200_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_CS_AH | PCAP_MCI_TF,
-+ .clk = 1,
-+ .init = a1200_pcap_init,
-+};
-+
-+static struct resource a1200_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device a1200_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(a1200_pcap_resources),
-+ .resource = a1200_pcap_resources,
-+ .dev = {
-+ .platform_data = &a1200_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &a1200_pcap_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch
deleted file mode 100644
index 66409d12b0..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:35.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:42.000000000 -0200
-@@ -252,9 +252,34 @@
- };
-
-
-+/* PCAP_TS */
-+struct resource pcap_ts_resources[] = {
-+ [0] = {
-+ .start = EZX_IRQ_ADCDONE,
-+ .end = EZX_IRQ_ADCDONE,
-+ .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,
-+ .dev = {
-+ .parent = &a1200_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a1200_pcap_device,
- &a1200_eoc_device,
-+ &pcap_ts_device,
- };
-
- static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch
deleted file mode 100644
index ae9237394d..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:03:48.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:04:03.000000000 +0200
-@@ -212,8 +212,33 @@
- },
- };
-
-+/* EMU */
-+static struct resource a780_emu_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 a780_emu_device = {
-+ .name = "ezx-emu",
-+ .id = -1,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(a780_emu_resources),
-+ .resource = a780_emu_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
-+ &a780_emu_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch
deleted file mode 100644
index 44b97880ca..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200
-@@ -18,6 +18,7 @@
- #include <linux/irq.h>
- #include <linux/log2.h>
- #include <linux/input.h>
-+#include <linux/gpio_keys.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -312,10 +313,33 @@
- .resource = pcap_ts_resources,
- };
-
-+static struct gpio_keys_button a780flip_buttons[] = {
-+ [0] = {
-+ .code = 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 = {
- &a780_pcap_device,
- &a780_emu_device,
- &pcap_ts_device,
-+ &a780flip_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch
deleted file mode 100644
index fa22c72a6b..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-@@ -17,6 +17,7 @@
- #include <linux/mmc/host.h>
- #include <linux/irq.h>
- #include <linux/log2.h>
-+#include <linux/input.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -25,11 +26,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -236,6 +239,55 @@
- .resource = a780_emu_resources,
- };
-
-+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 = {
- &a780_pcap_device,
- &a780_emu_device,
-@@ -256,6 +308,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.24/patches/a780-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch
deleted file mode 100644
index edcc7136a1..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch
+++ /dev/null
@@ -1,187 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.24/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Kconfig
-+++ linux-2.6.24/drivers/leds/Kconfig
-@@ -123,6 +123,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 on 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.24/drivers/leds/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Makefile
-+++ linux-2.6.24/drivers/leds/Makefile
-@@ -19,6 +19,7 @@
- obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o
- obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
- obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o
-+obj-$(CONFIG_LEDS_A780) += leds-a780.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
-Index: linux-2.6.24/drivers/leds/leds-a780.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/leds/leds-a780.c
-@@ -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(PCAP_BIT_PERIPH_BL_CTRL0, value & 0x01);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL1, value & 0x02);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL2, value & 0x04);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL3, value & 0x08);
-+ ezx_pcap_bit_set(PCAP_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(PCAP_BIT_PERIPH_BL2_CTRL0, value & 0x01);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL1, value & 0x02);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL2, value & 0x04);
-+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL3, value & 0x08);
-+ ezx_pcap_bit_set(PCAP_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.24/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-a780.c
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c
-@@ -334,12 +334,20 @@
- },
- };
-
-+static struct platform_device a780led_device = {
-+ .name = "a780-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
- &a780_emu_device,
- &pcap_ts_device,
- &a780flip_device,
-+ &a780led_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch
deleted file mode 100644
index 591db70a26..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-@@ -14,6 +14,9 @@
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/fb.h>
-+#include <linux/mmc/host.h>
-+#include <linux/irq.h>
-+#include <linux/log2.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -21,12 +24,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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[] = {
-+ [ilog2(MMC_VDD_165_195)] = 6,
-+ [ilog2(MMC_VDD_20_21)] = 7,
-+ [ilog2(MMC_VDD_21_22)] = 8,
-+ [ilog2(MMC_VDD_22_23)] = 8,
-+ [ilog2(MMC_VDD_23_24)] = 9,
-+ [ilog2(MMC_VDD_24_25)] = 9,
-+ [ilog2(MMC_VDD_25_26)] = 10,
-+ [ilog2(MMC_VDD_26_27)] = 10,
-+ [ilog2(MMC_VDD_27_28)] = 11,
-+ [ilog2(MMC_VDD_28_29)] = 11,
-+ [ilog2(MMC_VDD_29_30)] = 12,
-+ [ilog2(MMC_VDD_30_31)] = 12,
-+ [ilog2(MMC_VDD_31_32)] = 13,
-+ [ilog2(MMC_VDD_32_33)] = 13,
-+ [ilog2(MMC_VDD_33_34)] = 14,
-+ [ilog2(MMC_VDD_34_35)] = 14,
-+ [ilog2(MMC_VDD_35_36)] = 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, IRQF_DISABLED,
-+ "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)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ 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_165_195|MMC_VDD_20_21|MMC_VDD_21_22
-+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
-+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
-+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
-+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
-+ |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,
-@@ -137,6 +230,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);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch
deleted file mode 100644
index 5533433dec..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-11-24 19:58:16.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-11-24 20:09:28.000000000 -0200
-@@ -20,6 +20,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -49,7 +50,77 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int a780_pcap_init(void)
-+{
-+ /* initialize PCAP registers */
-+ /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
-+
-+ /* SW1 active in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
-+
-+ /* at SW1 -core voltage to 1.30V */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
-+
-+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
-+
-+ /*
-+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+ * camera for e680
-+ */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
-+
-+ /* set Vc to low power mode when AP sleep */
-+// SSP_PCAP_bit_set(PCAP_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+ /* set VAUX2 to low power mode when AP sleep */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data a780_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_MCI_TF,
-+ .clk = 1,
-+ .init = a780_pcap_init,
-+};
-+
-+static struct resource a780_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device a780_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(a780_pcap_resources),
-+ .resource = a780_pcap_resources,
-+ .dev = {
-+ .platform_data = &a780_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &a780_pcap_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch
deleted file mode 100644
index e1dd6ca5c6..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200
-@@ -288,9 +288,34 @@
- },
- };
-
-+/* 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,
-+ .dev = {
-+ .parent = &a780_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &a780_pcap_device,
- &a780_emu_device,
-+ &pcap_ts_device,
- };
-
- static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch
deleted file mode 100644
index 8e431fbd6c..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Index: linux-2.6.24/drivers/leds/leds-a780.c
-===================================================================
---- linux-2.6.24.orig/drivers/leds/leds-a780.c
-+++ linux-2.6.24/drivers/leds/leds-a780.c
-@@ -40,6 +40,17 @@
- ezx_pcap_bit_set(PCAP_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 );
-+ ezx_pcap_vibrator_level(value-1);
-+ if (value == 0)
-+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 0);
-+ else
-+ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 1);
-+}
-+
- static struct led_classdev a780_main_led = {
- .name = "a780:main",
- .default_trigger = "none",
-@@ -52,11 +63,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 +82,7 @@
- {
- led_classdev_resume(&a780_main_led);
- led_classdev_resume(&a780_aux_led);
-+ led_classdev_resume(&a780_vibrator);
- return 0;
- }
- #endif
-@@ -77,8 +96,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 +114,7 @@
- {
- led_classdev_unregister(&a780_main_led);
- led_classdev_unregister(&a780_aux_led);
-+ led_classdev_unregister(&a780_vibrator);
- return 0;
- }
-
-@@ -111,6 +139,7 @@
- {
- 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.24/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Kconfig
-+++ linux-2.6.24/drivers/leds/Kconfig
-@@ -124,11 +124,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 on 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.24/patches/asoc-fix-loopback.patch b/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch
deleted file mode 100644
index feea138984..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c
-===================================================================
---- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:30:56.000000000 -0300
-+++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:36:26.000000000 -0300
-@@ -153,7 +153,8 @@
- static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
- {
- struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
--
-+ /* no dma if on loopback */
-+ if (!prtd->params) return 0;
- DCSR(prtd->dma_ch) &= ~DCSR_RUN;
- DCSR(prtd->dma_ch) = 0;
- DCMD(prtd->dma_ch) = 0;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch
deleted file mode 100644
index e53b61c352..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch
+++ /dev/null
@@ -1,755 +0,0 @@
-Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c 2007-10-22 22:27:11.000000000 +0200
-@@ -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 0
-+
-+/*
-+ * 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] = {CKEN_SSP1, CKEN_SSP2, CKEN_SSP3};
-+#else
-+static int cken[3] = {CKEN_SSP, CKEN_NSSP, CKEN_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.23/sound/soc/pxa/pxa2xx-ssp.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h 2007-10-22 22:27:11.000000000 +0200
-@@ -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.23/sound/soc/pxa/Kconfig
-===================================================================
---- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-10 09:38:42.000000000 +0200
-+++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200
-@@ -18,6 +18,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.23/sound/soc/pxa/Makefile
-===================================================================
---- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-10 09:38:42.000000000 +0200
-+++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200
-@@ -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.24/patches/binutils-buildid-arm.patch b/packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch
deleted file mode 100644
index 68e35e89e1..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch
+++ /dev/null
@@ -1,16 +0,0 @@
----
- arch/arm/kernel/vmlinux.lds.S | 1 +
- 1 file changed, 1 insertion(+)
-
-Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S
-===================================================================
---- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200
-+++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200
-@@ -94,6 +94,7 @@
- TEXT_TEXT
- SCHED_TEXT
- LOCK_TEXT
-+ *(.note.*)
- #ifdef CONFIG_MMU
- *(.fixup)
- #endif
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200
deleted file mode 100644
index b77950a96e..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200
+++ /dev/null
@@ -1,1205 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun Jan 27 16:09:08 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED 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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# 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_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_PREEMPT=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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_LRO is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_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
-# 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_HCIBTUSB is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL 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 is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=m
-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
-# CONFIG_MTD_OOPS 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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_PXA2XX is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-CONFIG_MTD_EZX=y
-# CONFIG_MTD_EZX_A780 is not set
-# CONFIG_MTD_EZX_A780_ALTERNATE is not set
-CONFIG_MTD_EZX_A1200=y
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 is not set
-# CONFIG_INPUT_JOYDEV 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_KEYBOARD_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB 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_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_UVESA 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=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SPI devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-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=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_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=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE 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_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
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-# CONFIG_NFS_V4 is not set
-CONFIG_NFS_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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-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
-# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# 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 is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780
deleted file mode 100644
index b10c2e908d..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780
+++ /dev/null
@@ -1,1502 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun Jan 27 15:19:17 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED 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=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_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE 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_EOC is not set
-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
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-# CONFIG_NO_HZ is not set
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# 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 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# 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=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_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 is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_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=m
-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=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=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_CT_PROTO_UDPLITE=m
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NETFILTER_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_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_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 is not set
-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_TIME=m
-CONFIG_NETFILTER_XT_MATCH_U32=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=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=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 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=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
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_SCH_FIFO=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=y
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=y
-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_HCIBTUSB is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL 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
-CONFIG_FIB_RULES=y
-
-#
-# Wireless
-#
-CONFIG_CFG80211=m
-CONFIG_NL80211=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_MAC80211=m
-CONFIG_MAC80211_RCSIMPLE=y
-CONFIG_MAC80211_LEDS=y
-# CONFIG_MAC80211_DEBUG 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
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=m
-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
-# CONFIG_MTD_OOPS 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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_PXA2XX is not set
-# 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_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 is not set
-# CONFIG_INPUT_JOYDEV 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_KEYBOARD_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-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 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_V4L_USB_DRIVERS is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_UVESA 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=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SPI devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_A780=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-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 is not set
-# CONFIG_RTC_DRV_DS1374 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
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# 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_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=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_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=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=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=m
-
-#
-# 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=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE 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_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
-CONFIG_NETWORK_FILESYSTEMS=y
-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 is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# 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
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-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
-# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# 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 is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_ABLKCIPHER=m
-CONFIG_CRYPTO_AEAD=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 is not set
-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_XTS=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_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 is not set
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-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
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2
deleted file mode 100644
index 8f870b8ff5..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2
+++ /dev/null
@@ -1,1188 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun Jan 27 16:13:35 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED 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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# 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_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_PREEMPT=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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_LRO is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_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
-# 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_HCIBTUSB is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL 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 is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=m
-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
-# CONFIG_MTD_OOPS 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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_PXA2XX is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 is not set
-# CONFIG_INPUT_JOYDEV 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_KEYBOARD_PXA27x 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_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB 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_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_UVESA 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=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SPI devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-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=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_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=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE 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_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
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-# CONFIG_NFS_V4 is not set
-CONFIG_NFS_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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-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
-# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# 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 is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6
deleted file mode 100644
index 7e89e529d9..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6
+++ /dev/null
@@ -1,1200 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun Jan 27 16:14:27 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED 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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# 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_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_PREEMPT=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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_LRO is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_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
-# 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_HCIBTUSB is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL 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 is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=m
-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
-# CONFIG_MTD_OOPS 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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_PXA2XX is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 is not set
-# CONFIG_INPUT_JOYDEV 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_KEYBOARD_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB 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_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_UVESA 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=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SPI devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-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=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_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=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE 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_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
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-# CONFIG_NFS_V4 is not set
-CONFIG_NFS_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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-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
-# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# 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 is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680
deleted file mode 100644
index cb31751393..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680
+++ /dev/null
@@ -1,1211 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun Jan 27 16:15:42 2008
-#
-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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED 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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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/PXA3xx 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_EM_X270 is not set
-# CONFIG_MACH_ZYLONITE is not set
-# CONFIG_MACH_ARMCORE 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_EOC is not set
-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
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# 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_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_PREEMPT=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_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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_LRO is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_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
-# 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_HCIBTUSB is not set
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL 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 is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=m
-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
-# CONFIG_MTD_OOPS 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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_PXA2XX is not set
-# 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_A1200 is not set
-# CONFIG_MTD_EZX_E2 is not set
-# CONFIG_MTD_EZX_E6 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 is not set
-# CONFIG_INPUT_JOYDEV 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_KEYBOARD_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB 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_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_UVESA 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=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SPI devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_E680=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-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=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_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=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE 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_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
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-# CONFIG_NFS_V4 is not set
-CONFIG_NFS_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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-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
-# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# 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 is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log b/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log
deleted file mode 100644
index 6b15077676..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log
+++ /dev/null
@@ -1,299 +0,0 @@
-<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.24/patches/e6-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch
deleted file mode 100644
index 80849bd261..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:15.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:27.000000000 -0200
-@@ -186,8 +186,15 @@
- },
- };
-
-+
-+struct platform_device e6_eoc_device = {
-+ .name = "ezx-eoc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e6_pcap_device,
-+ &e6_eoc_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch
deleted file mode 100644
index 62046802d8..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,102 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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 e6_mci_platform_data;
-+
-+static u_int8_t mmc_voltage[] = {
-+ [ilog2(MMC_VDD_165_195)] = 6,
-+ [ilog2(MMC_VDD_20_21)] = 7,
-+ [ilog2(MMC_VDD_21_22)] = 8,
-+ [ilog2(MMC_VDD_22_23)] = 8,
-+ [ilog2(MMC_VDD_23_24)] = 9,
-+ [ilog2(MMC_VDD_24_25)] = 9,
-+ [ilog2(MMC_VDD_25_26)] = 10,
-+ [ilog2(MMC_VDD_26_27)] = 10,
-+ [ilog2(MMC_VDD_27_28)] = 11,
-+ [ilog2(MMC_VDD_28_29)] = 11,
-+ [ilog2(MMC_VDD_29_30)] = 12,
-+ [ilog2(MMC_VDD_30_31)] = 12,
-+ [ilog2(MMC_VDD_31_32)] = 13,
-+ [ilog2(MMC_VDD_32_33)] = 13,
-+ [ilog2(MMC_VDD_33_34)] = 14,
-+ [ilog2(MMC_VDD_34_35)] = 14,
-+ [ilog2(MMC_VDD_35_36)] = 15,
-+};
-+
-+static int e6_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);
-+
-+ e6_mci_platform_data.detect_delay = msecs_to_jiffies(250);
-+
-+ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED,
-+ "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 e6_mci_setpower(struct device *dev, unsigned int vdd)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
-+
-+ ezx_pcap_mmcsd_power(1);
-+}
-+
-+static void e6_mci_exit(struct device *dev, void *data)
-+{
-+ ezx_pcap_mmcsd_power(0);
-+ free_irq(0x49, data);
-+}
-+
-+static struct pxamci_platform_data e6_mci_platform_data = {
-+ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22
-+ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
-+ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
-+ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
-+ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
-+ |MMC_VDD_34_35|MMC_VDD_35_36,
-+ .init = e6_mci_init,
-+ .setpower = e6_mci_setpower,
-+ .exit = e6_mci_exit,
-+};
-+
- static struct pxafb_mode_info mode_e6 = {
- .pixclock = 192308,
- .xres = 240,
-@@ -101,6 +193,7 @@
- static void __init e6_init(void)
- {
- set_pxa_fb_info(&e6_fb_info);
-+ pxa_set_mci_info(&e6_mci_platform_data);
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
- }
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch
deleted file mode 100644
index 656f5a33f3..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,53 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int e6_pcap_init(void)
-+{
-+ /* FIXME */
-+ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
-+ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
-+ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
-+ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
-+ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
-+ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
-+ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data e6_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_CS_AH | PCAP_MCI_SD,
-+ .clk = 1,
-+ .init = e6_pcap_init,
-+};
-+
-+static struct resource e6_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device e6_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(e6_pcap_resources),
-+ .resource = e6_pcap_resources,
-+ .dev = {
-+ .platform_data = &e6_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &e6_pcap_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch
deleted file mode 100644
index f79f8663c7..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:27.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:44.000000000 -0200
-@@ -192,9 +192,34 @@
- .id = -1,
- };
-
-+/* PCAP_TS */
-+struct resource pcap_ts_resources[] = {
-+ [0] = {
-+ .start = EZX_IRQ_ADCDONE,
-+ .end = EZX_IRQ_ADCDONE,
-+ .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,
-+ .dev = {
-+ .parent = &e6_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e6_pcap_device,
- &e6_eoc_device,
-+ &pcap_ts_device,
- };
-
- static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch
deleted file mode 100644
index 6302bba8c7..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:32.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200
-@@ -212,8 +212,33 @@
- },
- };
-
-+/* EMU */
-+static struct resource e680_emu_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 e680_emu_device = {
-+ .name = "ezx-emu",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(e680_emu_resources),
-+ .resource = e680_emu_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
-+ &e680_emu_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch
deleted file mode 100644
index c313ec1452..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-@@ -15,6 +15,7 @@
- #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>
-@@ -23,11 +24,13 @@
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
- #include <asm/arch/mmc.h>
-+#include <asm/arch/kbd.h>
-
- #include "generic.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);
-@@ -236,6 +239,58 @@
- .resource = e680_emu_resources,
- };
-
-+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 = {
- &e680_pcap_device,
- &e680_emu_device,
-@@ -256,6 +311,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.24/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
deleted file mode 100644
index 9de1f0fa8f..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
+++ /dev/null
@@ -1,300 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.24/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Kconfig
-+++ linux-2.6.24/drivers/leds/Kconfig
-@@ -130,6 +130,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 on 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.24/drivers/leds/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Makefile
-+++ linux-2.6.24/drivers/leds/Makefile
-@@ -20,6 +20,7 @@
- obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
- obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.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.24/drivers/leds/leds-e680.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/leds/leds-e680.c
-@@ -0,0 +1,235 @@
-+/*
-+ * 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);
-+
-+typedef struct {
-+ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */
-+ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */
-+ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
-+ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
-+ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
-+ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
-+ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
-+ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
-+// u_int8_t 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[]=
-+{
-+ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */
-+
-+ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */
-+ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */
-+ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */
-+ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */
-+ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */
-+ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */
-+ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */
-+};
-+
-+static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ unsigned int tempValue;
-+ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl,
-+ ledg_ctrl, ledr_i, ledg_i, skip, t, color;
-+ unsigned char t_mask[2] = { 0xc, 0xc };
-+
-+ skip = 0;
-+ if (value & 128) {
-+ value &= (~128);
-+ skip = 1;
-+ }
-+
-+ /* 7 colors - simple on */
-+ if (value <= 7)
-+ color = value;
-+ /* 4 colors - 11 timed on */
-+ else if (value <= 51) {
-+ value -= 7;
-+ color = ((value-1)%4)+1;
-+ t = ((value-1)/4)+1;
-+ t_mask[0] = t;
-+ t_mask[1] = t;
-+ }
-+ /* 3 colors - 22 change color */
-+ else if (value <= 84) {
-+ value -= 51;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[1] = t;
-+ }
-+ else if (value <= 117) {
-+ value -= 84;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[0] = t;
-+ }
-+ /* 3 colors - alternate with blue */
-+ else if (value <= 120) {
-+ color = value-113;
-+ t_mask[0] = 0xa;
-+ t_mask[1] = 0xb;
-+ }
-+ /* invalid value */
-+ else
-+ color = 1;
-+
-+ gpio_red = led_register_value[color].ind_GPIO_red;
-+ gpio_green = led_register_value[color].ind_GPIO_green;
-+ ledr_en = led_register_value[color].pcap_LEDR_en;
-+ ledg_en = led_register_value[color].pcap_LEDG_en;
-+ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0];
-+ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1];
-+ ledr_i = led_register_value[color].pcap_LEDR_I;
-+ ledg_i = led_register_value[color].pcap_LEDG_I;
-+
-+ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue);
-+
-+ tempValue &= (~SSP_PCAP_LED_MASK);
-+
-+ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red);
-+ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green);
-+
-+ /* Write PCAP LED Peripheral Control Register*/
-+ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) |
-+ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) |
-+ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT;
-+
-+ ezx_pcap_write(PCAP_REG_PERIPH,tempValue);
-+}
-+
-+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_led = {
-+ .name = "e680:led",
-+ .default_trigger = "none",
-+ .brightness_set = e680led_set,
-+};
-+
-+static struct led_classdev e680_keypad = {
-+ .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_led);
-+ led_classdev_suspend(&e680_keypad);
-+ return 0;
-+}
-+
-+static int e680led_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&e680_led);
-+ led_classdev_resume(&e680_keypad);
-+ return 0;
-+}
-+#endif
-+
-+static int e680led_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ /* configure GPIOs as output */
-+ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
-+ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_keypad);
-+ if (ret < 0) {
-+ led_classdev_unregister(&e680_led);
-+ }
-+ return ret;
-+}
-+
-+static int e680led_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&e680_led);
-+ led_classdev_unregister(&e680_keypad);
-+ 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)
-+{
-+ 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.24/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-e680.c
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
-@@ -337,11 +337,20 @@
- },
- };
-
-+static struct platform_device e680led_device = {
-+ .name = "e680-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
- &pcap_ts_device,
- &e680locksw_device,
-+ &e680led_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch
deleted file mode 100644
index 6bb6687400..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:58:55.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:59:23.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>
-@@ -315,10 +316,32 @@
- .resource = pcap_ts_resources,
- };
-
-+static struct gpio_keys_button e680locksw_buttons[] = {
-+ [0] = {
-+ .code = 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 = {
- &e680_pcap_device,
- &e680_emu_device,
- &pcap_ts_device,
-+ &e680locksw_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch
deleted file mode 100644
index 0cea75d2c6..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-@@ -13,6 +13,8 @@
- #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>
-@@ -20,12 +22,104 @@
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
- #include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/mmc.h>
-
- #include "generic.h"
-
- 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[] = {
-+ [ilog2(MMC_VDD_165_195)] = 3,
-+ [ilog2(MMC_VDD_20_21)] = 3,
-+ [ilog2(MMC_VDD_21_22)] = 3,
-+ [ilog2(MMC_VDD_22_23)] = 3,
-+ [ilog2(MMC_VDD_23_24)] = 3,
-+ [ilog2(MMC_VDD_24_25)] = 3,
-+ [ilog2(MMC_VDD_25_26)] = 3,
-+ [ilog2(MMC_VDD_26_27)] = 3,
-+ [ilog2(MMC_VDD_27_28)] = 3,
-+ [ilog2(MMC_VDD_28_29)] = 3,
-+ [ilog2(MMC_VDD_29_30)] = 3,
-+ [ilog2(MMC_VDD_30_31)] = 3,
-+ [ilog2(MMC_VDD_31_32)] = 3,
-+ [ilog2(MMC_VDD_32_33)] = 3,
-+ [ilog2(MMC_VDD_33_34)] = 3,
-+ [ilog2(MMC_VDD_34_35)] = 3,
-+ [ilog2(MMC_VDD_35_36)] = 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, IRQF_DISABLED,
-+ "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)
-+{
-+ struct pxamci_platform_data* p_d = dev->platform_data;
-+
-+ if (( 1 << vdd) & p_d->ocr_mask)
-+ 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,
-@@ -136,6 +230,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);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch
deleted file mode 100644
index a02ccb42c8..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-11-24 20:09:00.000000000 -0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-11-24 20:09:46.000000000 -0200
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/pxafb.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-pcap.h>
-
- #include "generic.h"
-
-@@ -48,7 +49,77 @@
- .pxafb_lcd_power = &ezx_lcd_power,
- };
-
-+/* PCAP */
-+static int e680_pcap_init(void)
-+{
-+ /* initialize PCAP registers */
-+ /* set SW1 sleep to keep SW1 1.3v in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
-+
-+ /* SW1 active in sync mode */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
-+
-+ /* at SW1 -core voltage to 1.30V */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
-+
-+ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
-+
-+ /*
-+ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
-+ * camera for e680
-+ */
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
-+
-+ /* set Vc to low power mode when AP sleep */
-+// SSP_PCAP_bit_set( PCAP_BIT_LOWPWR_CTRL_VC_STBY);
-+
-+ /* set VAUX2 to low power mode when AP sleep */
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
-+
-+ return 0;
-+}
-+
-+static struct pcap_platform_data e680_pcap_platform_data = {
-+ .port = 1,
-+ .cs = GPIO_SPI_CE,
-+ .flags = PCAP_MCI_SD,
-+ .clk = 1,
-+ .init = e680_pcap_init,
-+};
-+
-+static struct resource e680_pcap_resources[] = {
-+ [0] = {
-+ .start = IRQ_GPIO1,
-+ .end = IRQ_GPIO1,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device e680_pcap_device = {
-+ .name = "ezx-pcap",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(e680_pcap_resources),
-+ .resource = e680_pcap_resources,
-+ .dev = {
-+ .platform_data = &e680_pcap_platform_data,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
-+ &e680_pcap_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch
deleted file mode 100644
index 2350b2de82..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200
-+++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:58.000000000 +0200
-@@ -291,9 +291,34 @@
- },
- };
-
-+/* 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,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
-+ .resource = pcap_ts_resources,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
-+ &pcap_ts_device,
- };
-
- static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch
deleted file mode 100644
index 4ba0f4cddf..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch
+++ /dev/null
@@ -1,1302 +0,0 @@
-Index: linux-2.6.24/sound/soc/codecs/pcap2.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/sound/soc/codecs/pcap2.c
-@@ -0,0 +1,796 @@
-+/*
-+ * pcap2.c - PCAP2 ASIC Audio driver
-+ *
-+ * Copyright (C) 2007 Daniel Ribeiro <wyrm@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/module.h>
-+#include <linux/delay.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/ezx-pcap.h>
-+#include <asm/arch/ezx.h>
-+#include <asm/arch/hardware.h>
-+
-+#include "pcap2.h"
-+
-+#define AUDIO_NAME "pcap2-codec"
-+#define PCAP2_VERSION "0.1"
-+
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+static struct snd_soc_device *pcap2_codec_socdev;
-+
-+/*
-+ * Debug
-+ */
-+
-+//#define PCAP2_DEBUG
-+
-+#ifdef PCAP2_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+#define dump_registers() pcap2_codec_read(NULL, 13); \
-+ pcap2_codec_read(NULL, 12); \
-+ pcap2_codec_read(NULL, 11); \
-+ pcap2_codec_read(NULL, 26);
-+
-+
-+
-+
-+/*
-+ * ASoC limits register value to 16 bits and pcap uses 32 bit registers
-+ * to work around this, we get 16 bits from low, mid or high positions.
-+ * ASoC limits register number to 8 bits we use 0x1f for register
-+ * number and 0xe0 for register offset. -WM
-+ */
-+static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ unsigned int tmp;
-+
-+ ezx_pcap_read((reg & 0x1f), &tmp);
-+
-+ if (reg & SL) {
-+ tmp &= 0xffff0000;
-+ tmp |= (value & 0xffff);
-+ }
-+ else if (reg & SM) {
-+ tmp &= 0xff0000ff;
-+ tmp |= ((value << 8) & 0x00ffff00);
-+ }
-+ else if (reg & SH) {
-+ tmp &= 0xffff;
-+ tmp |= ((value << 16) & 0xffff0000);
-+ }
-+ else
-+ tmp = value;
-+
-+ dbg("codec_write reg=%x, rval=%08x, fval=%08x", reg, tmp, value);
-+ ezx_pcap_write((reg & 0x1f), tmp);
-+ return 0;
-+
-+}
-+
-+static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg)
-+{
-+ unsigned int tmp, ret;
-+
-+ ezx_pcap_read((reg & 0x1f), &tmp);
-+ ret = tmp;
-+ if (reg & SL)
-+ ret = (tmp & 0xffff);
-+ else if (reg & SM)
-+ ret = ((tmp >> 8) & 0xffff);
-+ else if (reg & SH)
-+ ret = ((tmp >> 16) & 0xffff);
-+
-+ dbg("codec_read reg=%x, rval=%08x, fval=%08x", reg, tmp, ret);
-+ return(ret);
-+
-+}
-+
-+static const char *pcap2_output_select[] = {"2ch", "2->1ch", "2->1ch -3db", "2->1ch -6db"};
-+
-+static const struct soc_enum pcap2_enum[] = {
-+SOC_ENUM_SINGLE((PCAP2_OUTPUT_AMP|SH), 3, 4, pcap2_output_select),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_input_mixer_controls[] = {
-+SOC_DAPM_SINGLE("A3 Switch", (PCAP2_INPUT_AMP|SL), 6, 1, 0),
-+SOC_DAPM_SINGLE("A5 Switch", (PCAP2_INPUT_AMP|SL), 8, 1, 0),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_output_mixer_controls[] = {
-+SOC_DAPM_SINGLE("A1 Switch", (PCAP2_OUTPUT_AMP|SL), 0, 1, 0),
-+SOC_DAPM_SINGLE("A2 Switch", (PCAP2_OUTPUT_AMP|SL), 1, 1, 0),
-+SOC_DAPM_SINGLE("AR Switch", (PCAP2_OUTPUT_AMP|SL), 5, 1, 0),
-+SOC_DAPM_SINGLE("AL Switch", (PCAP2_OUTPUT_AMP|SL), 6, 1, 0),
-+};
-+
-+/* pcap2 codec non DAPM controls */
-+static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = {
-+SOC_SINGLE("Output gain", (PCAP2_OUTPUT_AMP|SM), 5, 15, 0),
-+SOC_SINGLE("Input gain", (PCAP2_INPUT_AMP|SL), 0, 31, 0),
-+};
-+
-+static const struct snd_kcontrol_new pcap2_codec_dm_mux_control[] = {
-+ SOC_DAPM_ENUM("Output Mode", pcap2_enum[0]),
-+};
-+
-+/* add non dapm controls */
-+static int pcap2_codec_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(pcap2_codec_snd_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&pcap2_codec_snd_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* pcap2 codec DAPM controls */
-+static const struct snd_soc_dapm_widget pcap2_codec_dapm_widgets[] = {
-+ SND_SOC_DAPM_DAC("ST_DAC", "ST_DAC playback", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_DAC("CDC_DAC", "CDC_DAC playback", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_ADC("CDC_ADC", "CDC_DAC capture", SND_SOC_NOPM, 0, 0),
-+ SND_SOC_DAPM_PGA("PGA_ST", (PCAP2_OUTPUT_AMP|SL), 9, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_CDC", (PCAP2_OUTPUT_AMP|SL), 8, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_R", (PCAP2_OUTPUT_AMP|SL), 11, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("PGA_L", (PCAP2_OUTPUT_AMP|SL), 12, 0, NULL, 0),
-+ SND_SOC_DAPM_MUX("Downmixer", SND_SOC_NOPM, 0, 0, pcap2_codec_dm_mux_control),
-+ SND_SOC_DAPM_PGA("PGA_A1CTRL", (PCAP2_OUTPUT_AMP|SH), 1, 1, NULL, 0),
-+ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &pcap2_output_mixer_controls[0], ARRAY_SIZE(pcap2_output_mixer_controls)),
-+ SND_SOC_DAPM_OUTPUT("A1"), /* Earpiece */
-+ SND_SOC_DAPM_OUTPUT("A2"), /* LoudSpeaker */
-+ SND_SOC_DAPM_OUTPUT("AR"), /* headset right */
-+ SND_SOC_DAPM_OUTPUT("AL"), /* headset left */
-+
-+ SND_SOC_DAPM_MICBIAS("BIAS1", (PCAP2_INPUT_AMP|SL), 10, 0),
-+ SND_SOC_DAPM_MICBIAS("BIAS2", (PCAP2_INPUT_AMP|SL), 11, 0),
-+ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &pcap2_input_mixer_controls[0], ARRAY_SIZE(pcap2_input_mixer_controls)),
-+ SND_SOC_DAPM_INPUT("A3"), /* Headset Mic */
-+ SND_SOC_DAPM_INPUT("A5"), /* Builtin Mic */
-+};
-+
-+static const char *audio_map[][3] = {
-+ { "A1", NULL, "Output Mixer" },
-+ { "A2", NULL, "Output Mixer" },
-+ { "AR", NULL, "Output Mixer" },
-+ { "AL", NULL, "Output Mixer" },
-+
-+ { "Output Mixer", "A1 Switch", "PGA_A1CTRL" },
-+ { "Output Mixer", "A2 Switch", "Downmixer" },
-+ { "Output Mixer", "AR Switch", "PGA_R" },
-+ { "Output Mixer", "AL Switch", "PGA_L" },
-+
-+ { "PGA_A1CTRL", NULL, "Downmixer" },
-+
-+ { "Downmixer", "2->1ch", "PGA_L" },
-+ { "Downmixer", "2->1ch", "PGA_R" },
-+ { "Downmixer", "2->1ch -3db", "PGA_L" },
-+ { "Downmixer", "2->1ch -3db", "PGA_R" },
-+ { "Downmixer", "2->1ch -6db", "PGA_L" },
-+ { "Downmixer", "2->1ch -6db", "PGA_R" },
-+ { "Downmixer", "2ch", "PGA_R" },
-+
-+ { "PGA_R", NULL, "PGA_ST" },
-+ { "PGA_L", NULL, "PGA_ST" },
-+ { "PGA_R", NULL, "PGA_CDC" },
-+
-+ { "PGA_ST", NULL, "ST_DAC" },
-+ { "PGA_CDC", NULL, "CDC_DAC" },
-+
-+ /* input path */
-+ { "BIAS1", NULL, "A3" },
-+ { "BIAS2", NULL, "A5" },
-+
-+ { "Input Mixer", "A3 Switch", "BIAS1" },
-+ { "Input Mixer", "A5 Switch", "BIAS2" },
-+
-+ { "PGA_R", NULL, "Input Mixer" },
-+
-+ { "PGA_CDC", NULL, "PGA_R" },
-+ { "CDC_ADC", NULL, "PGA_CDC" },
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int pcap2_codec_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(pcap2_codec_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &pcap2_codec_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path interconnects */
-+ 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_new_widgets(codec);
-+ return 0;
-+}
-+
-+static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ unsigned int input = pcap2_codec_read(codec, PCAP2_INPUT_AMP);
-+
-+ input &= ~PCAP2_INPUT_AMP_LOWPWR;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0:
-+ case SNDRV_CTL_POWER_D1:
-+ case SNDRV_CTL_POWER_D2:
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ dbg("dapm: ON\n");
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ input |= PCAP2_INPUT_AMP_LOWPWR;
-+ dbg("dapm: OFF\n");
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ pcap2_codec_write(codec, PCAP2_INPUT_AMP, input);
-+ return 0;
-+}
-+
-+static int pcap2_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_codec *codec = codec_dai->codec;
-+ unsigned int tmp;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+
-+ tmp &= ~PCAP2_ST_DAC_RATE_MASK;
-+ switch(params_rate(params)) {
-+ case 8000:
-+ break;
-+ case 11025:
-+ tmp |= PCAP2_ST_DAC_RATE_11025;
-+ break;
-+ case 12000:
-+ tmp |= PCAP2_ST_DAC_RATE_12000;
-+ break;
-+ case 16000:
-+ tmp |= PCAP2_ST_DAC_RATE_16000;
-+ break;
-+ case 22050:
-+ tmp |= PCAP2_ST_DAC_RATE_22050;
-+ break;
-+ case 24000:
-+ tmp |= PCAP2_ST_DAC_RATE_24000;
-+ break;
-+ case 32000:
-+ tmp |= PCAP2_ST_DAC_RATE_32000;
-+ break;
-+ case 44100:
-+ tmp |= PCAP2_ST_DAC_RATE_44100;
-+ break;
-+ case 48000:
-+ tmp |= PCAP2_ST_DAC_RATE_48000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ tmp |= PCAP2_ST_DAC_RESET_DF;
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+
-+ tmp &= ~PCAP2_CODEC_RATE_MASK;
-+ switch(params_rate(params)) {
-+ case 8000:
-+ break;
-+ case 16000:
-+ tmp |= PCAP2_CODEC_RATE_16000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ tmp |= PCAP2_CODEC_RESET_DF;
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcap2_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;
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ struct snd_soc_dapm_widget *w;
-+ unsigned int tmp;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+ tmp &= ~(PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+ if ((!strcmp(w->name, "CDC_DAC") || !strcmp(w->name, "CDC_ADC")) && w->connected)
-+ goto in_use;
-+ }
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+ tmp &= ~(PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+in_use:
-+ snd_soc_dapm_sync_endpoints(codec);
-+
-+ return 0;
-+}
-+
-+static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai,
-+ int clk_id, unsigned int freq, int dir)
-+{
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+
-+ unsigned int tmp;
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* ST_DAC */
-+
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+
-+ tmp &= ~PCAP2_ST_DAC_CLKSEL_MASK;
-+ switch (clk_id) {
-+ case PCAP2_CLK_AP:
-+ tmp |= PCAP2_ST_DAC_CLKSEL_AP;
-+ break;
-+ case PCAP2_CLK_BP:
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
-+ tmp &= ~PCAP2_ST_DAC_CLK_MASK;
-+ switch (freq) {
-+ case 13000000:
-+ break;
-+/* case 15M36:
-+ tmp |= PCAP2_ST_DAC_CLK_15M36;
-+ break;
-+ case 16M8:
-+ tmp |= PCAP2_ST_DAC_CLK_16M8;
-+ break;
-+ case 19M44:
-+ tmp |= PCAP2_ST_DAC_CLK_19M44;
-+ break;
-+*/ case 26000000:
-+ tmp |= PCAP2_ST_DAC_CLK_26M;
-+ break;
-+/* case EXT_MCLK:
-+ tmp |= PCAP2_ST_DAC_CLK_MCLK;
-+ break;
-+ case FSYNC:
-+ tmp |= PCAP2_ST_DAC_CLK_FSYNC;
-+ break;
-+ case BITCLK:
-+ tmp |= PCAP2_ST_DAC_CLK_BITCLK;
-+ break;
-+*/ default:
-+ return -EINVAL;
-+ }
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ /* MONO_DAC */
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+
-+ tmp &= ~PCAP2_CODEC_CLKSEL_MASK;
-+ switch (clk_id) {
-+ case PCAP2_CLK_AP:
-+ tmp |= PCAP2_CODEC_CLKSEL_AP;
-+ break;
-+ case PCAP2_CLK_BP:
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
-+ tmp &= ~PCAP2_CODEC_CLK_MASK;
-+ switch (freq) {
-+ case 13000000:
-+ break;
-+/* case 15M36:
-+ tmp |= PCAP2_CODEC_CLK_15M36;
-+ break;
-+ case 16M8:
-+ tmp |= PCAP2_CODEC_CLK_16M8;
-+ break;
-+ case 19M44:
-+ tmp |= PCAP2_CODEC_CLK_19M44;
-+ break;
-+*/ case 26000000:
-+ tmp |= PCAP2_CODEC_CLK_26M;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ return 0;
-+}
-+
-+static int pcap2_set_dai_fmt(struct snd_soc_codec_dai *codec_dai,
-+ unsigned int fmt)
-+{
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ unsigned int tmp = 0;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* ST_DAC */
-+
-+ /* disable CODEC */
-+ pcap2_codec_write(codec, PCAP2_CODEC, 0);
-+
-+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ tmp |= 0x1;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ tmp |= 0x4000;
-+ break;
-+/* case SND_SOC_NET:
-+ tmp |= 0x2000;
-+ break;
-+*/ case SND_SOC_DAIFMT_DSP_B:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ break;
-+ case SND_SOC_DAIFMT_NB_NF:
-+ tmp |= 0x60000;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ tmp |= 0x40000;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ tmp |= 0x20000;
-+ break;
-+ }
-+ /* set dai to AP */
-+ tmp |= 0x1000;
-+
-+ /* set BCLK */
-+ tmp |= 0x18000;
-+
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ /* MONO_DAC */
-+
-+ /* disable ST_DAC */
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, 0);
-+
-+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ tmp |= 0x2;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_DSP_B:
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ break;
-+ case SND_SOC_DAIFMT_NB_NF:
-+ tmp |= 0x600;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ tmp |= 0x400;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ tmp |= 0x200;
-+ break;
-+ }
-+ if (codec_dai->id == PCAP2_MONO_DAI)
-+ /* set dai to AP */
-+ tmp |= 0x8000;
-+
-+ tmp |= 0x5; /* IHF / OHF */
-+
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ return 0;
-+}
-+
-+static int pcap2_prepare(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;
-+ struct snd_soc_codec *codec = codec_dai->codec;
-+ unsigned int tmp;
-+ /* FIXME enable clock only if codec is master */
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 1);
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
-+ tmp |= (PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
-+ }
-+ else {
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 1);
-+ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
-+ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
-+ tmp |= (PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
-+ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
-+ }
-+ snd_soc_dapm_sync_endpoints(codec);
-+ mdelay(1);
-+#ifdef PCAP2_DEBUG
-+ dump_registers();
-+#endif
-+ return 0;
-+}
-+
-+/*
-+ * Define codec DAI.
-+ */
-+struct snd_soc_codec_dai pcap2_dai[] = {
-+{
-+ .name = "PCAP2 MONO",
-+ .id = 0,
-+ .playback = {
-+ .stream_name = "CDC_DAC playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .capture = {
-+ .stream_name = "CDC_DAC capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+{
-+ .name = "PCAP2 STEREO",
-+ .id = 1,
-+ .playback = {
-+ .stream_name = "ST_DAC playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ .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),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .capture = { /* FIXME: PCAP support this?? */
-+ .stream_name = "ST_DAC capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .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),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+{
-+ .name = "PCAP2 BP",
-+ .id = 2,
-+ .playback = {
-+ .stream_name = "BP playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ .rates = SNDRV_PCM_RATE_8000,
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ },
-+ .ops = {
-+ .prepare = pcap2_prepare,
-+ .hw_params = pcap2_hw_params,
-+ .hw_free = pcap2_hw_free,
-+ },
-+ .dai_ops = {
-+// .digital_mute = pcap2_mute,
-+ .set_fmt = pcap2_set_dai_fmt,
-+ .set_sysclk = pcap2_set_dai_sysclk,
-+ },
-+},
-+};
-+EXPORT_SYMBOL_GPL(pcap2_dai);
-+
-+static int pcap2_codec_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ dbg("pcap2_codec_suspend");
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int pcap2_codec_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ dbg("pcap2_codec_resume");
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ pcap2_codec_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the PCAP2 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int pcap2_codec_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ dbg("pcap2_codec_init");
-+ codec->name = "PCAP2 Audio";
-+ codec->owner = THIS_MODULE;
-+ codec->read = pcap2_codec_read;
-+ codec->write = pcap2_codec_write;
-+ codec->dapm_event = pcap2_codec_dapm_event;
-+ codec->dai = pcap2_dai;
-+ codec->num_dai = ARRAY_SIZE(pcap2_dai);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ return ret;
-+ }
-+ /* power on device */
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ /* set the update bits */
-+
-+ pcap2_codec_add_controls(codec);
-+ pcap2_codec_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static int pcap2_codec_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct pcap2_codec_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+ info("PCAP2 Audio Codec %s", PCAP2_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ pcap2_codec_socdev = socdev;
-+
-+ ret = pcap2_codec_init(socdev);
-+ return ret;
-+}
-+
-+/* power down chip and remove */
-+static int pcap2_codec_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ if (codec->control_data)
-+ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+/* codec device ops */
-+struct snd_soc_codec_device soc_codec_dev_pcap2 = {
-+ .probe = pcap2_codec_probe,
-+ .remove = pcap2_codec_remove,
-+ .suspend = pcap2_codec_suspend,
-+ .resume = pcap2_codec_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_pcap2);
-+
-+MODULE_DESCRIPTION("ASoC PCAP2 codec");
-+MODULE_AUTHOR("Daniel Ribeiro");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.24/sound/soc/codecs/pcap2.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/sound/soc/codecs/pcap2.h
-@@ -0,0 +1,81 @@
-+/*
-+ * 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 _PCAP2_H
-+#define _PCAP2_H
-+
-+/* 16 bit reads/writes on pcap registers (ugly workaround) */
-+#define SL (1 << 5) /* lower 16 bits */
-+#define SM (1 << 6) /* mid 16 bits */
-+#define SH (1 << 7) /* higher 16 bits */
-+
-+/* PCAP2 register space */
-+#define PCAP2_CODEC 0x0b
-+#define PCAP2_OUTPUT_AMP 0x0c
-+#define PCAP2_ST_DAC 0x0d
-+#define PCAP2_INPUT_AMP 0x1a
-+
-+#define PCAP2_MONO_DAI 0
-+#define PCAP2_STEREO_DAI 1
-+#define PCAP2_BP_DAI 2
-+
-+#define PCAP2_CLK_BP 0
-+#define PCAP2_CLK_AP 1
-+
-+#define PCAP2_CODEC_EN 0x2000
-+#define PCAP2_CODEC_CLK_EN 0x1000
-+#define PCAP2_CODEC_RESET_DF 0x800
-+#define PCAP2_CODEC_RATE_MASK 0x4000
-+#define PCAP2_CODEC_RATE_8000 0x0
-+#define PCAP2_CODEC_RATE_16000 0x4000
-+#define PCAP2_CODEC_CLKSEL_MASK 0x10000
-+#define PCAP2_CODEC_CLKSEL_AP 0x10000
-+#define PCAP2_CODEC_CLKSEL_BP 0x0
-+#define PCAP2_CODEC_CLK_MASK 0x1c0
-+#define PCAP2_CODEC_CLK_13M 0x0
-+#define PCAP2_CODEC_CLK_15M36 0x40
-+#define PCAP2_CODEC_CLK_16M8 0x80
-+#define PCAP2_CODEC_CLK_19M44 0xc0
-+#define PCAP2_CODEC_CLK_26M 0x100
-+
-+#define PCAP2_ST_DAC_EN 0x80
-+#define PCAP2_ST_DAC_CLK_EN 0x20
-+#define PCAP2_ST_DAC_RESET_DF 0x40
-+#define PCAP2_ST_DAC_RATE_MASK 0xf00
-+#define PCAP2_ST_DAC_RATE_8000 0x0
-+#define PCAP2_ST_DAC_RATE_11025 0x100
-+#define PCAP2_ST_DAC_RATE_12000 0x200
-+#define PCAP2_ST_DAC_RATE_16000 0x300
-+#define PCAP2_ST_DAC_RATE_22050 0x400
-+#define PCAP2_ST_DAC_RATE_24000 0x500
-+#define PCAP2_ST_DAC_RATE_32000 0x600
-+#define PCAP2_ST_DAC_RATE_44100 0x700
-+#define PCAP2_ST_DAC_RATE_48000 0x800
-+#define PCAP2_ST_DAC_CLKSEL_MASK 0x80000
-+#define PCAP2_ST_DAC_CLKSEL_AP 0x80000
-+#define PCAP2_ST_DAC_CLKSEL_BP 0x0
-+#define PCAP2_ST_DAC_CLK_MASK 0x1c
-+#define PCAP2_ST_DAC_CLK_13M 0x0
-+#define PCAP2_ST_DAC_CLK_15M36 0x4
-+#define PCAP2_ST_DAC_CLK_16M8 0x8
-+#define PCAP2_ST_DAC_CLK_19M44 0xc
-+#define PCAP2_ST_DAC_CLK_26M 0x10
-+#define PCAP2_ST_DAC_CLK_MCLK 0x14
-+#define PCAP2_ST_DAC_CLK_FSYNC 0x18
-+#define PCAP2_ST_DAC_CLK_BITCLK 0x1c
-+
-+#define PCAP2_INPUT_AMP_LOWPWR 0x80000
-+#define PCAP2_INPUT_AMP_V2EN2 0x200000
-+
-+#define PCAP2_OUTPUT_AMP_PGAR_EN 0x800
-+#define PCAP2_OUTPUT_AMP_PGAL_EN 0x1000
-+#define PCAP2_OUTPUT_AMP_CDC_SW 0x100
-+#define PCAP2_OUTPUT_AMP_ST_DAC_SW 0x200
-+
-+extern struct snd_soc_codec_dai pcap2_dai[];
-+extern struct snd_soc_codec_device soc_codec_dev_pcap2;
-+
-+#endif
-Index: linux-2.6.24/sound/soc/pxa/Kconfig
-===================================================================
---- linux-2.6.24.orig/sound/soc/pxa/Kconfig
-+++ linux-2.6.24/sound/soc/pxa/Kconfig
-@@ -57,3 +57,12 @@
- help
- Say Y if you want to add support for SoC audio on Sharp
- Zaurus SL-C6000x models (Tosa).
-+
-+config SND_PXA2XX_SOC_EZX
-+ tristate "SoC Audio support for EZX"
-+ depends on SND_PXA2XX_SOC && PXA_EZX
-+ select SND_PXA2XX_SOC_SSP
-+ select SND_SOC_PCAP2
-+ help
-+ Say Y if you want to add support for SoC audio on
-+ Motorola EZX Phones (a780/e680).
-Index: linux-2.6.24/sound/soc/pxa/ezx.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/sound/soc/pxa/ezx.c
-@@ -0,0 +1,349 @@
-+/*
-+ * ezx.c - Machine specific code for EZX phones
-+ *
-+ * Copyright (C) 2007 Daniel Ribeiro <wyrm@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.
-+ *
-+ */
-+
-+#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/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+
-+#include <asm/arch/ezx-pcap.h>
-+
-+#include "../codecs/pcap2.h"
-+#include "pxa2xx-pcm.h"
-+#include "pxa2xx-ssp.h"
-+
-+#define GPIO_HW_ATTENUATE_A780 96
-+
-+static struct snd_soc_codec *control_codec;
-+
-+static void ezx_ext_control(struct snd_soc_codec *codec)
-+{
-+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_A1)))
-+ snd_soc_dapm_set_endpoint(codec, "Headset", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "Headset", 0);
-+ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_MB2)))
-+ snd_soc_dapm_set_endpoint(codec, "External Mic", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "External Mic", 0);
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static irqreturn_t jack_irq(int irq, void *data)
-+{
-+ ezx_ext_control(control_codec);
-+ return IRQ_HANDLED;
-+}
-+
-+
-+/*
-+ * Alsa operations
-+ * Only implement the required operations for your platform.
-+ * These operations are specific to the machine only.
-+ */
-+
-+ /*
-+ * Called by ALSA when a PCM substream is opened, private data can be allocated.
-+ */
-+static int ezx_machine_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ ezx_ext_control(codec);
-+ return 0;
-+}
-+
-+/*
-+ * Called by ALSA when the hardware params are set by application. This
-+ * function can also be called multiple times and can allocate buffers
-+ * (using snd_pcm_lib_* ). It's non-atomic.
-+ */
-+static int ezx_machine_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;
-+ int ret;
-+
-+ /* set codec DAI configuration */
-+ if (codec_dai->id == PCAP2_STEREO_DAI)
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_CBM_CFM);
-+ else
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* Turn on clock output on CLK_PIO */
-+ OSCC |= 0x8;
-+
-+ /* set clock source */
-+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_AP,
-+ 13000000, SND_SOC_CLOCK_IN);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* set cpu DAI configuration */
-+ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = cpu_dai->dai_ops.set_tristate(cpu_dai, 0);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai,PXA2XX_SSP_CLK_EXT,
-+ 0, SND_SOC_CLOCK_IN);
-+ if (ret < 0)
-+ return ret;
-+
-+ return 0;
-+}
-+
-+/*
-+ * Free's resources allocated by hw_params, can be called multiple times
-+ */
-+static int ezx_machine_hw_free(struct snd_pcm_substream *substream)
-+{
-+ OSCC &= ~0x8; /* turn off clock output on CLK_PIO */
-+
-+ return 0;
-+}
-+
-+static int ezx_machine_prepare(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;
-+ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
-+
-+ if (codec_dai->id == PCAP2_STEREO_DAI) {
-+ /* override pxa2xx-ssp sample size for stereo/network mode */
-+ SSCR0_P(cpu_dai->id+1) &= ~(SSCR0_DSS | SSCR0_EDSS);
-+ SSCR0_P(cpu_dai->id+1) |= (SSCR0_EDSS | SSCR0_DataSize(16));
-+ }
-+ return 0;
-+}
-+
-+/* machine Alsa PCM operations */
-+static struct snd_soc_ops ezx_ops = {
-+ .startup = ezx_machine_startup,
-+ .prepare = ezx_machine_prepare,
-+ .hw_free = ezx_machine_hw_free,
-+ .hw_params = ezx_machine_hw_params,
-+};
-+
-+static int bp_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;
-+ int ret = 0;
-+ /* set codec DAI configuration */
-+ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
-+ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
-+ if(ret < 0)
-+ return ret;
-+
-+ /* set clock source */
-+ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_BP,
-+ 13000000, SND_SOC_CLOCK_IN);
-+
-+ return ret;
-+}
-+
-+
-+
-+/* machine dapm widgets */
-+static const struct snd_soc_dapm_widget ezx_dapm_widgets[] = {
-+ SND_SOC_DAPM_HP("Headset", NULL),
-+ SND_SOC_DAPM_SPK("Earpiece", NULL),
-+ SND_SOC_DAPM_SPK("Loudspeaker", NULL),
-+ SND_SOC_DAPM_MIC("Built-in Mic", NULL),
-+ SND_SOC_DAPM_MIC("External Mic", NULL),
-+};
-+
-+/* machine audio map (connections to the codec pins) */
-+static const char *audio_map[][3] = {
-+ { "Headset", NULL, "AR" },
-+ { "Headset", NULL, "AL" },
-+ { "Earpiece", NULL, "A1" },
-+ { "Loudspeaker", NULL, "A2" },
-+
-+ { "Built-in Mic", NULL, "A5" },
-+ { "External Mic", NULL, "A3" },
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * Initialise the machine audio subsystem.
-+ */
-+static int ezx_machine_init(struct snd_soc_codec *codec)
-+{
-+ int i;
-+ /* mark unused codec pins as NC */
-+// snd_soc_dapm_set_endpoint(codec, "FIXME", 0);
-+ control_codec = codec;
-+
-+ /* Add ezx specific controls */
-+// for (i = 0; i < ARRAY_SIZE(ezx_controls); i++) {
-+// if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&ezx_controls[i], codec, NULL))) < 0)
-+// return err;
-+// }
-+
-+ /* Add ezx specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(ezx_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &ezx_dapm_widgets[i]);
-+ }
-+ /* Set up ezx specific audio path interconnects */
-+ 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]);
-+ }
-+
-+ /* synchronise subsystem */
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_cpu_dai bp_dai =
-+{
-+ .name = "Baseband",
-+ .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,
-+ },
-+ .ops = {
-+// .startup = bp_startup,
-+// .shutdown = bp_shutdown,
-+ .hw_params = bp_hw_params,
-+// .hw_free = bp_hw_free,
-+ },
-+};
-+
-+/* template digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link ezx_dai[] = {
-+{
-+ .name = "PCAP2 STEREO",
-+ .stream_name = "stereo playback",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
-+ .codec_dai = &pcap2_dai[PCAP2_STEREO_DAI],
-+ .init = ezx_machine_init,
-+ .ops = &ezx_ops,
-+},
-+{
-+ .name = "PCAP2 MONO",
-+ .stream_name = "mono playback",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
-+ .codec_dai = &pcap2_dai[PCAP2_MONO_DAI],
-+// .init = ezx_machine_init, /* the stereo call already registered our controls */
-+ .ops = &ezx_ops,
-+},
-+{
-+ .name = "PCAP2 BP",
-+ .stream_name = "BP Audio",
-+ .cpu_dai = &bp_dai,
-+ .codec_dai = &pcap2_dai[PCAP2_BP_DAI],
-+},
-+};
-+
-+/* template audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_ezx = {
-+ .name = "Motorola EZX",
-+// .probe
-+// .remove
-+// .suspend_pre
-+// .resume_post
-+ .dai_link = ezx_dai,
-+ .num_links = ARRAY_SIZE(ezx_dai),
-+};
-+
-+/* template audio subsystem */
-+static struct snd_soc_device ezx_snd_devdata = {
-+ .machine = &snd_soc_machine_ezx,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_pcap2,
-+};
-+
-+static struct platform_device *ezx_snd_device;
-+
-+static int __init ezx_init(void)
-+{
-+ int ret;
-+ ezx_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!ezx_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(ezx_snd_device, &ezx_snd_devdata);
-+ ezx_snd_devdata.dev = &ezx_snd_device->dev;
-+ ret = platform_device_add(ezx_snd_device);
-+
-+ if (ret)
-+ platform_device_put(ezx_snd_device);
-+ /* configure gpio for ssp3 */
-+ pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */
-+ pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD */
-+ pxa_gpio_mode(GPIO52_SCLK3_MD); /* SCLK */
-+ pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD */
-+
-+ /* configure gpio for ssp2 */
-+ pxa_gpio_mode(37 | GPIO_IN); /* SFRM */
-+ pxa_gpio_mode(38 | GPIO_IN); /* TXD */
-+ pxa_gpio_mode(22 | GPIO_IN); /* SCLK */
-+ pxa_gpio_mode(88 | GPIO_IN); /* RXD */
-+
-+ pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT);
-+ pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1);
-+
-+ /* request jack irq */
-+ request_irq(EZX_IRQ_HEADJACK, &jack_irq, IRQF_DISABLED, "headphone jack", NULL);
-+ request_irq(EZX_IRQ_MIC, &jack_irq, IRQF_DISABLED, "mic jack", NULL);
-+
-+ return ret;
-+}
-+
-+static void __exit ezx_exit(void)
-+{
-+ free_irq(EZX_IRQ_HEADJACK, NULL);
-+ free_irq(EZX_IRQ_MIC, NULL);
-+ platform_device_unregister(ezx_snd_device);
-+}
-+
-+module_init(ezx_init);
-+module_exit(ezx_exit);
-+
-Index: linux-2.6.24/sound/soc/codecs/Makefile
-===================================================================
---- linux-2.6.24.orig/sound/soc/codecs/Makefile
-+++ linux-2.6.24/sound/soc/codecs/Makefile
-@@ -4,6 +4,7 @@
- snd-soc-wm8753-objs := wm8753.o
- snd-soc-wm9712-objs := wm9712.o
- snd-soc-cs4270-objs := cs4270.o
-+snd-soc-pcap2-objs := pcap2.o
-
- obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
- obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o
-@@ -11,3 +12,4 @@
- obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o
- obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o
- obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o
-+obj-$(CONFIG_SND_SOC_PCAP2) += snd-soc-pcap2.o
-Index: linux-2.6.24/sound/soc/codecs/Kconfig
-===================================================================
---- linux-2.6.24.orig/sound/soc/codecs/Kconfig
-+++ linux-2.6.24/sound/soc/codecs/Kconfig
-@@ -37,3 +37,6 @@
- bool
- depends on SND_SOC_CS4270
-
-+config SND_SOC_PCAP2
-+ tristate
-+ depends on SND_SOC && EZX_PCAP
-Index: linux-2.6.24/sound/soc/pxa/Makefile
-===================================================================
---- linux-2.6.24.orig/sound/soc/pxa/Makefile
-+++ linux-2.6.24/sound/soc/pxa/Makefile
-@@ -14,9 +14,10 @@
- snd-soc-poodle-objs := poodle.o
- snd-soc-tosa-objs := tosa.o
- snd-soc-spitz-objs := spitz.o
-+snd-soc-ezx-objs := ezx.o
-
- obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o
- obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o
- obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o
- obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o
--
-+obj-$(CONFIG_SND_PXA2XX_SOC_EZX) += snd-soc-ezx.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
deleted file mode 100644
index a2a707014d..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.24/drivers/video/backlight/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/video/backlight/Kconfig
-+++ linux-2.6.24/drivers/video/backlight/Kconfig
-@@ -90,3 +90,12 @@
- help
- If you have a Intel LE80578 (Carillo Ranch) 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.24/drivers/video/backlight/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/video/backlight/Makefile
-+++ linux-2.6.24/drivers/video/backlight/Makefile
-@@ -9,3 +9,4 @@
- obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
- obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
- obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
-+obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o
-Index: linux-2.6.24/drivers/video/backlight/ezx_bl.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/video/backlight/ezx_bl.c
-@@ -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(CKEN_PWM0, 1); /* clock enable */
-+ }
-+ else if ( last_intensity && !intensity ) {
-+ PWM_PWDUTY0 = 0;
-+ GAFR0_U &= 0xFFFFFFFC; /* ??? */
-+ pxa_set_cken(CKEN_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.24/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
-@@ -66,6 +66,12 @@
- #endif
- EXPORT_SYMBOL_GPL(ezx_backlight_power);
-
-+/* EZX LCD Backlight */
-+static struct platform_device ezxbacklight_device = {
-+ .name = "ezx-bl",
-+ .id = -1,
-+};
-+
- /* OHCI Controller */
- static int ezx_ohci_init(struct device *dev)
- {
-@@ -107,6 +113,7 @@
-
- static struct platform_device *devices[] __initdata = {
- &ezxbp_device,
-+ &ezxbacklight_device,
- };
-
- /* PM */
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch
deleted file mode 100644
index e45cb4bd22..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch
+++ /dev/null
@@ -1,351 +0,0 @@
-This patch adds support for the handshake with the BP (baseband processor)
-of the Motorola EZX smartphones.
-
-Signed-off-by: Daniel Ribeiro <wyrm@openezx.org>
-
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
-@@ -19,6 +19,7 @@
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/ohci.h>
- #include <asm/arch/ezx.h>
-+#include <asm/arch/ezx-bp.h>
-
- #include "generic.h"
-
-@@ -86,8 +87,25 @@
- .init = ezx_ohci_init,
- };
-
-+/* BP */
-+static struct ezxbp_config ezxbp_data = {
-+ .gpio_reset = GPIO_BB_RESET,
-+ .gpio_wdi = GPIO_BB_WDI,
-+ .gpio_wdi2 = GPIO_BB_WDI2,
-+ .gpio_rdy = GPIO_BP_RDY,
-+ .gpio_mcu_int_sw = GPIO_MCU_INT_SW,
-+};
-+
-+static struct platform_device ezxbp_device = {
-+ .name = "ezx-bp",
-+ .dev = {
-+ .platform_data = &ezxbp_data,
-+ },
-+ .id = -1,
-+};
-
- static struct platform_device *devices[] __initdata = {
-+ &ezxbp_device,
- };
-
- static int __init ezx_init(void)
-Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
-@@ -133,6 +133,12 @@
-
- endchoice
-
-+config EZX_BP
-+ bool "Baseband Processor control for EZX platform"
-+ help
-+ This enables control code for the BP (baseband processor) found in
-+ Motorola's EZX smartphone platform.
-+
- endif
-
- endmenu
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-bp.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-bp.c
-@@ -0,0 +1,261 @@
-+/*
-+ * BP handshake code for Motorola EZX phones
-+ *
-+ * Copyright (c) 2007 Daniel Ribeiro <wyrm@openezx.org>
-+ *
-+ * 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>
-+#include <asm/arch/ezx-bp.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
-+
-+extern void usb_send_readurb(void);
-+
-+static struct ezxbp_config *bp;
-+
-+/* check power down condition */
-+static inline void check_power_off(void)
-+{
-+ if (pxa_gpio_get_value(bp->gpio_wdi2) == 0) {
-+ DEBUGP("BP request poweroff!\n");
-+ /*
-+ * It is correct to power off here, the following line is
-+ * commented out because e680 lowers WDI2 when BP is in
-+ * flash mode, otherwise WDI2 is used to detect low
-+ * battery. You can safely uncomment this line if you are
-+ * using this kernel with BP in normal mode.
-+ */
-+#if 0 /* some versions of BP firmware doesnt honor this */
-+ pm_power_off();
-+#endif
-+ }
-+}
-+
-+static int step = FIRST_STEP;
-+
-+inline int bp_handshake_passed(void)
-+{
-+ return (step > LAST_STEP);
-+}
-+EXPORT_SYMBOL_GPL(bp_handshake_passed);
-+
-+static 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(bp->gpio_mcu_int_sw | GPIO_IN);
-+ pxa_gpio_mode(bp->gpio_rdy | GPIO_IN);
-+
-+ while (timeout--) {
-+ if (pxa_gpio_get_value(bp->gpio_mcu_int_sw) == 0
-+ || pxa_gpio_get_value(bp->gpio_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(bp->gpio_rdy) == 0) {
-+ /* config MCU_INT_SW as output */
-+ pxa_gpio_mode(bp->gpio_mcu_int_sw | GPIO_OUT);
-+ pxa_gpio_set_value(bp->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(bp->gpio_rdy)) {
-+ step++;
-+ /* FIXME delay_bklight(); */
-+ pxa_gpio_set_value(bp->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()) {
-+ /* FIXME: (test) try to not disable irq_wdi2 and drain battery */
-+ disable_irq(IRQ_GPIO(bp->gpio_wdi2));
-+
-+ /* set bp_rdy handle for usb ipc */
-+ set_irq_type(IRQ_GPIO(bp->gpio_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");
-+ /* same case as check_power_off() */
-+#ifndef CONFIG_PXA_EZX_E680
-+ pm_power_off();
-+#endif
-+ return IRQ_HANDLED;
-+}
-+
-+static int __init ezxbp_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+ bp = pdev->dev.platform_data;
-+
-+// 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(IRQ_GPIO(bp->gpio_wdi), IRQT_FALLING);
-+ request_irq(IRQ_GPIO(bp->gpio_wdi), bp_wdi_handler, IRQF_DISABLED,
-+ "bp wdi", bp);
-+
-+ set_irq_type(IRQ_GPIO(bp->gpio_rdy), IRQT_BOTHEDGE);
-+ request_irq(IRQ_GPIO(bp->gpio_rdy), bp_rdy_handler, IRQF_DISABLED,
-+ "bp rdy", bp);
-+
-+ set_irq_type(IRQ_GPIO(bp->gpio_wdi2), IRQT_FALLING);
-+ request_irq(IRQ_GPIO(bp->gpio_wdi2), bp_wdi2_handler, IRQF_DISABLED,
-+ "bp wdi2", bp);
-+
-+ /* turn on BP */
-+ pxa_gpio_mode(bp->gpio_reset|GPIO_OUT);
-+ pxa_gpio_set_value(bp->gpio_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(IRQ_GPIO(bp->gpio_wdi), bp);
-+ free_irq(IRQ_GPIO(bp->gpio_wdi2), bp);
-+ free_irq(IRQ_GPIO(bp->gpio_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(bp->gpio_mcu_int_sw, 0); */
-+ return 0;
-+}
-+
-+static int ezxbp_resume(struct platform_device *dev)
-+{
-+ DEBUGP("bp resume!\n");
-+/* pxa_gpio_set_value(bp->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 <wyrm@openezx.org>");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.24/arch/arm/mach-pxa/Makefile
-@@ -36,6 +36,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
-Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx-bp.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/include/asm-arm/arch-pxa/ezx-bp.h
-@@ -0,0 +1,8 @@
-+struct ezxbp_config {
-+ /* gpios for handshake */
-+ int gpio_reset;
-+ int gpio_wdi;
-+ int gpio_wdi2;
-+ int gpio_rdy;
-+ int gpio_mcu_int_sw;
-+};
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch
deleted file mode 100644
index 6221a88794..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch
+++ /dev/null
@@ -1,1042 +0,0 @@
-This patch adds the core EZX support for the Motorola E680/A780/A1200/E6
-smartphones.
-
-Signed-off-by: Daniel Ribeiro <wyrm@openezx.org>
-Signed-off-by: Harald Welte <laforge@openezx.org>
-
-Index: linux-2.6.24/arch/arm/boot/compressed/head-xscale.S
-===================================================================
---- linux-2.6.24.orig/arch/arm/boot/compressed/head-xscale.S
-+++ linux-2.6.24/arch/arm/boot/compressed/head-xscale.S
-@@ -44,3 +44,6 @@
- str r1, [r0, #0x18]
- #endif
-
-+#ifdef CONFIG_ARCH_EZX
-+ mov r7, #MACH_TYPE_EZX
-+#endif
-Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
-@@ -68,6 +68,10 @@
- select PXA27x
- select IWMMXT
-
-+config PXA_EZX
-+ bool "Motorola EZX Platform"
-+ select PXA_SSP
-+
- endchoice
-
- if PXA_SHARPSL
-@@ -102,6 +106,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
-@@ -180,4 +213,5 @@
- tristate
- help
- Enable support for PXA2xx SSP ports
-+
- endif
-Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.24/arch/arm/mach-pxa/Makefile
-@@ -30,6 +30,12 @@
- endif
-
- obj-$(CONFIG_MACH_ARMCORE) += cm-x270.o
-+obj-$(CONFIG_PXA_EZX) += ezx.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.24/arch/arm/mach-pxa/ezx.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
-@@ -0,0 +1,118 @@
-+/*
-+ * 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 <asm/arch/ezx.h>
-+
-+#include "generic.h"
-+
-+/* EZX PXA Framebuffer */
-+void ezx_lcd_power(int on, struct fb_var_screeninfo *var)
-+{
-+ if (on) {
-+ msleep(1);
-+ GPSR3 = 0x00100000;
-+ msleep(10);
-+ GPCR3 = 0x00100000;
-+ GPDR3 |= 0x00100000;
-+ } else {
-+ GPSR3 = 0x00100000;
-+ PGSR3 |= 0x00100000;
-+ msleep(41);
-+ LCCR0 &= ~LCCR0_LDM; /* disable lcd disable done interrupt */
-+ LCCR0 |= LCCR0_DIS; /* normal disable lcd */
-+ msleep(18);
-+ }
-+}
-+EXPORT_SYMBOL_GPL(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(CKEN_PWM0, 1);
-+ PWM_CTRL0 = 0;
-+ PWM_PWDUTY0 = 0x3ff;
-+ PWM_PERVAL0 = 0x3ff;
-+ } else {
-+ PWM_CTRL0 = 0;
-+ PWM_PWDUTY0 = 0x0;
-+ PWM_PERVAL0 = 0x3FF;
-+ pxa_set_cken(CKEN_PWM0, 0);
-+ }
-+}
-+#else
-+void ezx_backlight_power(int on) {}
-+#endif
-+EXPORT_SYMBOL_GPL(ezx_backlight_power);
-+
-+/* 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 = {
-+};
-+
-+static int __init ezx_init(void)
-+{
-+ CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC);
-+
-+ 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.24/include/asm-arm/arch-pxa/ezx.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/include/asm-arm/arch-pxa/ezx.h
-@@ -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.24/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h
-+++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
-@@ -859,6 +859,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 */
-@@ -1262,6 +1264,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 */
-@@ -1375,6 +1378,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)
-@@ -1385,23 +1389,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)
-@@ -1426,13 +1440,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)
-@@ -1468,13 +1486,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)
-@@ -1486,6 +1510,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)
-
-@@ -1501,6 +1526,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.24/arch/arm/boot/compressed/head.S
-===================================================================
---- linux-2.6.24.orig/arch/arm/boot/compressed/head.S
-+++ linux-2.6.24/arch/arm/boot/compressed/head.S
-@@ -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.24/include/asm-arm/arch-pxa/uncompress.h
-===================================================================
---- linux-2.6.24.orig/include/asm-arm/arch-pxa/uncompress.h
-+++ linux-2.6.24/include/asm-arm/arch-pxa/uncompress.h
-@@ -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.24/arch/arm/mm/init.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mm/init.c
-+++ linux-2.6.24/arch/arm/mm/init.c
-@@ -240,6 +240,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.24/arch/arm/mach-pxa/ezx-a780.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = a780_init,
-+MACHINE_END
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e2.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-e2.c
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = e2_init,
-+MACHINE_END
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = e680_init,
-+MACHINE_END
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a1200.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-a1200.c
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = a1200_init,
-+MACHINE_END
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e6.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-e6.c
-@@ -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 <asm/arch/ezx.h>
-+
-+#include "generic.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 = 0xa0000200,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa27x_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = e6_init,
-+MACHINE_END
-Index: linux-2.6.24/MAINTAINERS
-===================================================================
---- linux-2.6.24.orig/MAINTAINERS
-+++ linux-2.6.24/MAINTAINERS
-@@ -2581,6 +2581,15 @@
- W: http://popies.net/meye/
- S: Maintained
-
-+MOTOROLA EZX SMARTPHONES (E680, A780, A1200, E2, E6)
-+P: Daniel Ribeiro
-+M: wyrm@openezx.org
-+P: Harald Welte
-+M: laforge@openezx.org
-+L: openezx-devel@lists.openezx.org
-+W: http://www.openezx.org/
-+S: Maintained
-+
- MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER
- P: Pavel Pisa
- M: ppisa@pikron.com
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch
deleted file mode 100644
index f7ae47751b..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-emu.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-emu.c
-@@ -0,0 +1,219 @@
-+/*
-+ * EMU Driver for Motorola EZX phones
-+ *
-+ * Copyright (c) 2007 Daniel Ribeiro <wyrm@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/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);
-+static int emu_irq_usb4v;
-+static int emu_irq_usb1v;
-+
-+
-+#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
-+
-+static void emu_switch_to_usb(void)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to USB\n");
-+ 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(PCAP_BIT_BUSCTRL_RS232ENB, 1);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_FSENB, 0);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 1);
-+ clr_GPIO(GPIO_EMU_MUX1);
-+ clr_GPIO(GPIO_EMU_MUX2);
-+}
-+
-+static void emu_switch_to_uart(void)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to UART\n");
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN,0);
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 0);
-+ ezx_pcap_bit_set(PCAP_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);
-+ pxa_set_cken(CKEN_FFUART, 1);
-+ clr_GPIO(GPIO_EMU_MUX1);
-+ clr_GPIO(GPIO_EMU_MUX2);
-+
-+}
-+
-+static void emu_switch_to_audio(int stereo)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to audio(%s)\n", (stereo ? "stereo" : "mono"));
-+ 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);
-+}
-+
-+static void emu_switch_to_nothing(void)
-+{
-+ printk(KERN_NOTICE "EMU: Switching to disconnected\n");
-+ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 0);
-+ ezx_pcap_bit_set(PCAP_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(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
-+ emu_switch_to_default();
-+ break;
-+ case EZX_IRQ_USB1V:
-+ if(!ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB1V)))
-+ 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);
-+
-+ emu_irq_usb4v = platform_get_irq(dev, 0);
-+ if(emu_irq_usb4v < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for USB4V!\n");
-+ return emu_irq_usb4v;
-+ }
-+ emu_irq_usb1v = platform_get_irq(dev, 1);
-+ if(emu_irq_usb1v < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for USB1V!\n");
-+ return emu_irq_usb1v;
-+ }
-+
-+ request_irq(emu_irq_usb4v, &emu_irq, IRQF_DISABLED, "usb 4v", NULL);
-+ request_irq(emu_irq_usb1v, &emu_irq, IRQF_DISABLED, "usb 1v", NULL);
-+
-+ pxa_set_udc_info(&ezx_udc_info);
-+
-+ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
-+ emu_switch_to_default();
-+ else
-+ emu_switch_to_nothing();
-+
-+ return 0;
-+}
-+
-+static int ezx_emu_remove(struct platform_device *dev)
-+{
-+ free_irq(emu_irq_usb4v, NULL);
-+ free_irq(emu_irq_usb1v, NULL);
-+
-+ 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(PCAP_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(PCAP_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,
-+ .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 <wyrm@openezx.org>");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
-@@ -142,6 +142,28 @@
- config EZX_PCAP
- bool "PCAP Support"
-
-+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.24/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.24/arch/arm/mach-pxa/Makefile
-@@ -38,6 +38,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.24/patches/ezx-enable-stuart.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch
deleted file mode 100644
index 6f1a2c1ba4..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-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.24/patches/ezx-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch
deleted file mode 100644
index b7247b881c..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch
+++ /dev/null
@@ -1,295 +0,0 @@
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-eoc.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-eoc.c
-@@ -0,0 +1,261 @@
-+/*
-+ * EZX EOC Driver for Motorola EZX phones
-+ *
-+ * Copyright (C) 2007 Alex Zhang <celeber2@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/init.h>
-+#include <linux/i2c.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/udc.h>
-+
-+#if 1
-+#define EOC_DBG printk
-+#else
-+#define EOC_DBG(x, args...)
-+#endif
-+
-+#define REG_INT_STATUS 32
-+#define REG_INT_MASK 33
-+#define REG_INT_SENSE 34
-+#define REG_POWER_CONTROL_0 35
-+#define REG_POWER_CONTROL_1 36
-+#define REG_CONN_CONTROL 37
-+
-+#define EOC_REG_ADDR_SIZE 1
-+#define EOC_REG_DATA_SIZE 3
-+#define EOC_FUNC_NOTHING 0
-+#define EOC_FUNC_USB_NET 1
-+
-+static const char eoc_i2c_driver_name[] = "ezx-eoc";
-+static int eoc_func = EOC_FUNC_USB_NET;
-+static struct pxa2xx_udc_mach_info ezx_udc_info;
-+
-+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter);
-+static int ezx_eoc_detach_client(struct i2c_client *client);
-+
-+static struct i2c_client *eoc_i2c_client = NULL;
-+
-+static struct i2c_driver eoc_i2c_driver = {
-+ .driver = {
-+ .name = (char *)eoc_i2c_driver_name,
-+ },
-+ .attach_adapter = ezx_eoc_attach_adapter,
-+ .detach_client = ezx_eoc_detach_client,
-+};
-+
-+int eoc_reg_read(int reg, unsigned int *reg_value)
-+{
-+ unsigned char reg_num = reg;
-+ unsigned char value[EOC_REG_DATA_SIZE];
-+ int retval;
-+
-+ struct i2c_msg msgs[2] =
-+ {
-+ { eoc_i2c_client->addr, 0, EOC_REG_ADDR_SIZE, &reg_num },
-+ { eoc_i2c_client->addr, I2C_M_RD, EOC_REG_DATA_SIZE, value }
-+ };
-+
-+ /* transfer message to client */
-+ retval = i2c_transfer(eoc_i2c_client->adapter, msgs, 2);
-+ if (retval < 0)
-+ return retval;
-+
-+ *reg_value = (value[2] << 0);
-+ *reg_value |= (value[1] << 8);
-+ *reg_value |= (value[0] << 16);
-+ return 0;
-+}
-+
-+int eoc_reg_write(int reg, unsigned int reg_value)
-+{
-+ unsigned char value[EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE];
-+ int retval;
-+
-+ /* Copy the data into a buffer into the correct format */
-+ value[0] = reg;
-+ value[1] = (reg_value >> 16) & 0xFF;
-+ value[2] = (reg_value >> 8) & 0xFF;
-+ value[3] = (reg_value >> 0) & 0xFF;
-+
-+ /* Write the data to the EOC */
-+ retval = i2c_master_send (eoc_i2c_client, value, EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE);
-+ if (retval < 0)
-+ return retval;
-+ return 0;
-+}
-+
-+static void eoc_switch_to_usb(void)
-+{
-+ EOC_DBG("EOC: Switching to USB\n");
-+ 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;
-+ /* FIXME change eoc bits to USB */
-+
-+}
-+
-+static void eoc_switch_to_nothing(void)
-+{
-+ EOC_DBG("EOC: Switching do disconnected\n");
-+ 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);
-+ /* FIXME disconnect mini usb port */
-+}
-+
-+static void eoc_switch_to_default(void)
-+{
-+ switch (eoc_func) {
-+ case EOC_FUNC_USB_NET:
-+ eoc_switch_to_usb();
-+ break;
-+ case EOC_FUNC_NOTHING:
-+ eoc_switch_to_nothing();
-+ break;
-+ }
-+}
-+
-+static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter)
-+{
-+ int err = 0;
-+ EOC_DBG(">>>>attach adapter enter\n");
-+
-+ if (eoc_i2c_client != NULL) {
-+ EOC_DBG(">>>>already loaded!!!\n");
-+ return 0;
-+ }
-+
-+ if (!(eoc_i2c_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL)))
-+ return -ENOMEM;
-+
-+ eoc_i2c_client->addr = 0x17;
-+ eoc_i2c_client->adapter = adapter;
-+ eoc_i2c_client->driver = &eoc_i2c_driver;
-+ eoc_i2c_client->flags = 0;
-+ strlcpy(eoc_i2c_client->name, eoc_i2c_driver_name, I2C_NAME_SIZE);
-+
-+ if ((err = i2c_attach_client(eoc_i2c_client))) {
-+ kfree(eoc_i2c_client);
-+ eoc_i2c_client = NULL;
-+ return err;
-+ }
-+ eoc_reg_write(REG_INT_MASK, 0x0000FEF);
-+ eoc_reg_write(REG_POWER_CONTROL_0, 0x0000C00);
-+ eoc_reg_write(REG_POWER_CONTROL_1, 0x000000C);
-+ eoc_reg_write(REG_CONN_CONTROL,0x0021044);
-+
-+ eoc_switch_to_default();
-+ EOC_DBG(">>>>attach adapter exit\n");
-+ return 0;
-+
-+}
-+
-+static int ezx_eoc_detach_client(struct i2c_client *client)
-+{
-+ return i2c_detach_client(client);
-+}
-+
-+static int __init ezx_eoc_probe(struct platform_device *dev)
-+{
-+ int ret;
-+
-+ ret = i2c_add_driver(&eoc_i2c_driver);
-+ if (ret != 0)
-+ return -EINVAL;
-+
-+ pxa_set_udc_info(&ezx_udc_info);
-+
-+ return 0;
-+}
-+
-+static int ezx_eoc_remove(struct platform_device *dev)
-+{
-+ i2c_del_driver(&eoc_i2c_driver);
-+ return 0;
-+}
-+
-+static int ezx_eoc_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ eoc_switch_to_nothing();
-+ return 0;
-+}
-+
-+static int ezx_eoc_resume(struct platform_device *dev)
-+{
-+ eoc_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(PCAP_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(PCAP_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 ezx_eoc_driver = {
-+ .probe = ezx_eoc_probe,
-+ .remove = ezx_eoc_remove,
-+ .suspend = ezx_eoc_suspend,
-+ .resume = ezx_eoc_resume,
-+ .driver = {
-+ .name = "ezx-eoc",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+int __init ezx_eoc_init(void)
-+{
-+ return platform_driver_register(&ezx_eoc_driver);
-+}
-+
-+void ezx_eoc_exit(void)
-+{
-+ return platform_driver_unregister(&ezx_eoc_driver);
-+}
-+
-+MODULE_AUTHOR("Alex Zhang <celeber2@gmail.com>");
-+MODULE_DESCRIPTION("EZX EOC I2C driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(ezx_eoc_init);
-+module_exit(ezx_eoc_exit);
-Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
-@@ -142,6 +142,12 @@
- config EZX_PCAP
- bool "PCAP Support"
-
-+config EZX_EOC
-+ tristate "EOC i2c driver of Motorola EZX phones"
-+ depends on I2C && EXPERIMENTAL
-+ help
-+ EOC i2c driver of Motorola EZX phones
-+
- config EZX_EMU
- bool "Motorola Enchanced Mini Usb"
- depends on EZX_PCAP
-Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.24/arch/arm/mach-pxa/Makefile
-@@ -39,6 +39,7 @@
- obj-$(CONFIG_EZX_BP) += ezx-bp.o
- obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
- obj-$(CONFIG_EZX_EMU) += ezx-emu.o
-+obj-$(CONFIG_EZX_EOC) += ezx-eoc.o
-
- # Support for blinky lights
- led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch
deleted file mode 100644
index 9ed4906d78..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch
+++ /dev/null
@@ -1,309 +0,0 @@
-Index: linux-2.6.24/drivers/mtd/maps/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/mtd/maps/Kconfig
-+++ linux-2.6.24/drivers/mtd/maps/Kconfig
-@@ -588,6 +588,34 @@
- Map driver for a NOR flash bank located on the Expansion Bus of the
- Intel Vermilion Range chipset.
-
-+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_A1200
-+ bool "A1200 Original Mapping"
-+
-+config MTD_EZX_E2
-+ bool "E2 Original Mapping"
-+
-+config MTD_EZX_E6
-+ bool "E6 Original Mapping"
-+
-+endchoice
-+
-+endif
-+
- config MTD_PLATRAM
- tristate "Map driver for platform device RAM (mtd-ram)"
- select MTD_RAM
-Index: linux-2.6.24/drivers/mtd/maps/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/mtd/maps/Makefile
-+++ linux-2.6.24/drivers/mtd/maps/Makefile
-@@ -69,3 +69,4 @@
- obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
- obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o
- obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
-+obj-$(CONFIG_MTD_EZX) += ezx-flash.o
-Index: linux-2.6.24/drivers/mtd/maps/ezx-flash.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/mtd/maps/ezx-flash.c
-@@ -0,0 +1,256 @@
-+/*
-+ * 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.
-+ *
-+ */
-+
-+#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/cacheflush.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)
-+{
-+ flush_ioremap_region(map->phys, map->cached, from, len);
-+}
-+
-+
-+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 = "Moto Kernel",
-+ .size = 0x000e0000, // 896KB
-+ .offset = 0x00040000,
-+ } , {
-+ .name = "rootfs",
-+ .size = 0x01760000,
-+ .offset = 0x00120000,
-+ } , {
-+ .name = "OpenEZX Kernel",
-+ .size = 0x00180000, // 1.5MB
-+ .offset = 0x01880000,
-+ } , {
-+ .name = "ezxlocal",
-+ .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,
-+ },
-+};
-+#elif defined CONFIG_MTD_EZX_A1200
-+static struct mtd_partition pxa27x_partitions[] = {
-+ {
-+ .name = "Caddo 2",
-+ .size = 0x00008000,
-+ .offset = 0,
-+ }, {
-+ .name = "Itunes",
-+ .size = 0x00008000,
-+ .offset = 0x00008000,
-+ }, {
-+ .name = "Caddo 1",
-+ .size = 0x00008000,
-+ .offset = 0x00010000,
-+ }, {
-+ .name = "Fota rev",
-+ .size = 0x00008000,
-+ .offset = 0x00018000,
-+ }, {
-+ .name = "MBM",
-+ .size = 0x00040000,
-+ .offset = 0x00020000,
-+ .mask_flags = MTD_WRITEABLE,
-+ }, {
-+ .name = "Blob",
-+ .size = 0x00020000,
-+ .offset = 0x00080000,
-+ .mask_flags = MTD_WRITEABLE,
-+ }, {
-+ .name = "Kernel",
-+ .size = 0x00100000,
-+ .offset = 0x000A0000,
-+ } , {
-+ .name = "UserFS DB",
-+ .size = 0x00600000,
-+ .offset = 0x00AA0000,
-+ }, {
-+ .name = "UserFS",
-+ .size = 0x007E0000,
-+ .offset = 0x010A0000,
-+ }, {
-+ .name = "Test cmd",
-+ .size = 0x00020000,
-+ .offset = 0x018C0000,
-+ } , {
-+ .name = "Logo",
-+ .size = 0x00020000,
-+ .offset = 0x018E0000,
-+ } , {
-+ .name = "Fota",
-+ .size = 0x000c0000,
-+ .offset = 0x01900000,
-+ }, {
-+ .name = "Reserve",
-+ .size = 0x00020000,
-+ .offset = 0x019c0000,
-+ }
-+};
-+#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;
-+
-+ 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);
-+ }
-+ 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.24/patches/ezx-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch
deleted file mode 100644
index f38a5e52da..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch
+++ /dev/null
@@ -1,852 +0,0 @@
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-pcap.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-pcap.c
-@@ -0,0 +1,513 @@
-+/* 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 <wyrm@openezx.org>
-+ *
-+ */
-+
-+#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/ezx.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>
-+
-+#if 0
-+#define DEBUGP(x, args...) printk(x, ## args)
-+#else
-+#define DEBUGP(x, args...)
-+#endif
-+
-+static DEFINE_SPINLOCK(ezx_ssp_lock);
-+static struct ssp_dev ezx_ssp_dev;
-+static struct ssp_state ezx_ssp_state;
-+static struct pcap_platform_data *pcap_data;
-+static int pcap_irq;
-+
-+static unsigned long ezx_ssp_pcap_putget(ulong data)
-+{
-+ unsigned long flag;
-+ u32 ret = 0;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH)
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ else
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+
-+ ssp_write_word(&ezx_ssp_dev,data);
-+ ssp_read_word(&ezx_ssp_dev, &ret);
-+
-+ if (pcap_data->cs >= 0) {
-+ if(pcap_data->flags & PCAP_CS_AH)
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ else
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+
-+ return ret;
-+}
-+
-+int ezx_pcap_write(u_int8_t reg_num, u_int32_t value)
-+{
-+ value &= PCAP_REGISTER_VALUE_MASK;
-+ value |= PCAP_REGISTER_WRITE_OP_BIT
-+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
-+
-+ ezx_ssp_pcap_putget(value);
-+
-+ 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 = PCAP_REGISTER_READ_OP_BIT
-+ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
-+
-+ *value = ezx_ssp_pcap_putget(frame);
-+
-+ 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 & PCAP_REGISTER_VALUE_MASK);
-+ u_int8_t reg_num = (sspPcapBit & PCAP_REGISTER_ADDRESS_MASK)
-+ >> 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 & PCAP_REGISTER_ADDRESS_MASK)
-+ >> PCAP_REGISTER_ADDRESS_SHIFT;
-+
-+ ret = ezx_pcap_read(reg_num, &tmp);
-+ if (ret < 0)
-+ return ret;
-+
-+ return tmp & (bit & 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", "INT_SEL\t", "SWCTRL\t", "VREG1\t",
-+ "VREG2\t", "VREG\t", "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC",
-+ "RX_AUD_AMPS", "ST_DAC\t", "RTC_TOD\t", "RTC_TODA", "RTC_DAY\t",
-+ "RTC_DAYA", "MTRTMR\t", "PWRCTRL\t", "BUSCTRL\t", "PERIPH\t",
-+ "AUXVREG_MASK", "VENDOR_REV", "LOWPWR_CTRL", "PERIPH_MASK",
-+ "TX_AUD_AMPS", "GP\t",
-+ 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(PCAP_REG_AUXVREG, &tmp);
-+
-+ tmp &= ~PCAP_AUXVREG_V_VIB_MASK;
-+ tmp |= ((value << PCAP_AUXVREG_V_VIB_SHIFT) & PCAP_AUXVREG_V_VIB_MASK);
-+
-+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
-+}
-+EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level);
-+
-+/* MMC/SD specific functions */
-+
-+void ezx_pcap_mmcsd_voltage(u_int32_t bits)
-+{
-+ unsigned int tmp;
-+ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp);
-+ if (pcap_data->flags & PCAP_MCI_SD) {
-+ tmp &= ~PCAP_AUXVREG_VAUX2_MASK;
-+ tmp |= ((bits << PCAP_AUXVREG_VAUX2_SHIFT) &
-+ PCAP_AUXVREG_VAUX2_MASK);
-+ }
-+ else if (pcap_data->flags & PCAP_MCI_TF) {
-+ tmp &= ~PCAP_AUXVREG_VAUX3_MASK;
-+ tmp |= ((bits << PCAP_AUXVREG_VAUX3_SHIFT) &
-+ PCAP_AUXVREG_VAUX3_MASK);
-+ }
-+ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
-+}
-+EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_voltage);
-+
-+int ezx_pcap_mmcsd_power(int on)
-+{
-+ if (on > 0) on = 1;
-+ else on = 0;
-+
-+ if (pcap_data->flags & PCAP_MCI_SD)
-+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX2_EN, on);
-+ else if (pcap_data->flags & PCAP_MCI_TF)
-+ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX3_EN, on);
-+ else
-+ return -ENODEV;
-+}
-+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] = EZX_IRQ_1HZ, /* 1HZ */
-+ [3] = EZX_IRQ_WH, /* WH */
-+ [4] = EZX_IRQ_WL, /* WL */
-+ [5] = EZX_IRQ_TODA, /* TODA */
-+ [6] = EZX_IRQ_USB4V,
-+ [7] = EZX_IRQ_ONOFF, /* ONOFF */
-+ [8] = EZX_IRQ_ONOFF2, /* ONOFF2 */
-+ [9] = EZX_IRQ_USB1V,
-+ [10] = EZX_IRQ_MOBPORT, /* MOBPORT */
-+ [11] = EZX_IRQ_MIC,
-+ [12] = EZX_IRQ_HEADJACK,
-+ [13] = EZX_IRQ_ST, /* ST */
-+ [14] = EZX_IRQ_PC, /* PC */
-+ [15] = EZX_IRQ_WARM, /* WARM */
-+ [16] = EZX_IRQ_EOL, /* EOL */
-+ [17] = EZX_IRQ_CLK, /* CLK */
-+ [18] = EZX_IRQ_SYSRST, /* SYSRST */
-+ [19] = 0,
-+ [20] = EZX_IRQ_ADCDONE2,
-+ [21] = EZX_IRQ_SOFTRESET, /* SOFTRESET */
-+ [22] = EZX_IRQ_MNEXB, /* MNEXB */
-+};
-+
-+/* Array indexed by IRQ NUMBER, returns PCAP absolute value */
-+static unsigned int irq2pcap[] = {
-+ [EZX_IRQ_MNEXB] = PCAP_IRQ_MNEXB,
-+ [EZX_IRQ_SOFTRESET] = PCAP_IRQ_SOFTRESET,
-+ [EZX_IRQ_SYSRST] = PCAP_IRQ_SYSRST,
-+ [EZX_IRQ_CLK] = PCAP_IRQ_CLK,
-+ [EZX_IRQ_EOL] = PCAP_IRQ_EOL,
-+ [EZX_IRQ_WARM] = PCAP_IRQ_WARM,
-+ [EZX_IRQ_PC] = PCAP_IRQ_PC,
-+ [EZX_IRQ_ST] = PCAP_IRQ_ST,
-+ [EZX_IRQ_MOBPORT] = PCAP_IRQ_MOBPORT,
-+ [EZX_IRQ_ONOFF2] = PCAP_IRQ_ONOFF2,
-+ [EZX_IRQ_ONOFF] = PCAP_IRQ_ONOFF,
-+ [EZX_IRQ_TODA] = PCAP_IRQ_TODA,
-+ [EZX_IRQ_WL] = PCAP_IRQ_WL,
-+ [EZX_IRQ_WH] = PCAP_IRQ_WH,
-+ [EZX_IRQ_1HZ] = PCAP_IRQ_1HZ,
-+ [EZX_IRQ_USB4V] = PCAP_IRQ_USB4V,
-+ [EZX_IRQ_USB1V] = PCAP_IRQ_USB1V,
-+ [EZX_IRQ_HEADJACK] = PCAP_IRQ_A1,
-+ [EZX_IRQ_MIC] = PCAP_IRQ_MB2,
-+ [EZX_IRQ_TS] = PCAP_IRQ_TS,
-+ [EZX_IRQ_ADCDONE] = PCAP_IRQ_ADCDONE,
-+ [EZX_IRQ_ADCDONE2] = PCAP_IRQ_ADCDONE2,
-+};
-+
-+static void pcap_ack_irq(unsigned int irq)
-+{
-+ DEBUGP("pcap_ack_irq: %u\n", irq);
-+ ezx_pcap_write(PCAP_REG_ISR, irq2pcap[irq]);
-+}
-+
-+static void pcap_mask_irq(unsigned int irq)
-+{
-+ u_int32_t reg;
-+ unsigned long flag;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ DEBUGP("pcap_mask_irq: %u\n", irq);
-+ ezx_pcap_read(PCAP_REG_MSR, &reg);
-+ reg |= irq2pcap[irq];
-+ ezx_pcap_write(PCAP_REG_MSR, reg);
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+}
-+
-+static void pcap_unmask_irq(unsigned int irq)
-+{
-+ u_int32_t tmp;
-+ unsigned long flag;
-+
-+ spin_lock_irqsave(&ezx_ssp_lock, flag);
-+ DEBUGP("pcap_unmask_irq: %u\n", irq);
-+ ezx_pcap_read(PCAP_REG_MSR, &tmp);
-+ tmp &= ~irq2pcap[irq];
-+ ezx_pcap_write(PCAP_REG_MSR, tmp);
-+ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
-+}
-+
-+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)
-+{
-+ const unsigned int cpu = smp_processor_id();
-+ int i;
-+ u_int32_t isr, msr;
-+
-+ spin_lock(&desc->lock);
-+ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
-+ if (unlikely(desc->status & (IRQ_INPROGRESS | IRQ_DISABLED))) {
-+ 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))) {
-+ desc->chip->unmask(irq);
-+ desc->status &= ~IRQ_MASKED;
-+ }
-+ desc->status &= ~IRQ_PENDING;
-+
-+ ezx_pcap_read(PCAP_REG_ISR, &isr);
-+ ezx_pcap_read(PCAP_REG_MSR, &msr);
-+ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) {
-+ unsigned int pirq = pcap2irq[i];
-+ struct irq_desc *subdesc;
-+ if (pirq == 0 || !(isr & irq2pcap[pirq]))
-+ continue;
-+ subdesc = irq_desc + pirq;
-+ if (msr & irq2pcap[pirq])
-+ continue;
-+ DEBUGP("found irq %u\n", pirq);
-+ spin_unlock(&desc->lock);
-+ desc_handle_irq(pirq, subdesc);
-+ 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(pcap_irq, NULL);
-+
-+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
-+ set_irq_chip(irq, NULL);
-+ set_irq_handler(irq, NULL);
-+ set_irq_flags(irq, 0);
-+ }
-+
-+ ssp_exit(&ezx_ssp_dev);
-+
-+ return 0;
-+}
-+
-+static int __init ezx_pcap_probe(struct platform_device *pdev)
-+{
-+ unsigned int ret, irq;
-+ DEBUGP("ezx_pcap_probe entered\n");
-+
-+ pcap_data = pdev->dev.platform_data;
-+
-+ /* configure ssp port */
-+ 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);
-+
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH)
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
-+ else
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT
-+ | GPIO_DFLT_HIGH);
-+ }
-+ pcap_irq = platform_get_irq(pdev, 0);
-+ if(pcap_irq < 0) {
-+ printk(KERN_ERR "Unable to get IRQ for pcap!\n");
-+ return pcap_irq;
-+ }
-+
-+ ret = ssp_init(&ezx_ssp_dev, pcap_data->port, 0);
-+ if (ret) {
-+ printk(KERN_ERR "Unable to register SSP handler!\n");
-+ return ret;
-+ }
-+
-+ 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(pcap_data->clk));
-+ ssp_enable(&ezx_ssp_dev);
-+
-+ /* mask/ack all PCAP interrupts */
-+ ezx_pcap_write(PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT);
-+ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER);
-+
-+ if (pcap_data->init)
-+ pcap_data->init();
-+
-+ /* set up interrupt demultiplexing code for PCAP2 irqs */
-+ set_irq_type(pcap_irq, IRQT_RISING);
-+ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
-+ set_irq_chip(irq, &pcap_chip);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID);
-+ }
-+ set_irq_chained_handler(pcap_irq, pcap_irq_demux_handler);
-+ set_irq_wake(pcap_irq, 1);
-+
-+ printk("ezx-pcap: ssp driver registered\n");
-+ return ret;
-+}
-+
-+static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ DEBUGP("pcap suspend!\n");
-+ ssp_flush(&ezx_ssp_dev);
-+ ssp_save_state(&ezx_ssp_dev, &ezx_ssp_state);
-+ if (pcap_data->cs >= 0)
-+ pxa_gpio_mode(pcap_data->cs | GPIO_IN);
-+ return 0;
-+}
-+
-+static int ezx_pcap_resume(struct platform_device *dev)
-+{
-+ DEBUGP("pcap resume!\n");
-+
-+ if (pcap_data->cs >= 0) {
-+ if (pcap_data->flags & PCAP_CS_AH) {
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
-+ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+ else {
-+ pxa_gpio_mode(pcap_data->cs | GPIO_OUT | GPIO_DFLT_HIGH);
-+ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
-+ }
-+ }
-+ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
-+ ssp_enable(&ezx_ssp_dev);
-+
-+ ezx_pcap_write(PCAP_REG_ISR, 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.24/include/asm-arm/arch-pxa/ezx-pcap.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/include/asm-arm/arch-pxa/ezx-pcap.h
-@@ -0,0 +1,248 @@
-+/*
-+ * Copyright 2007 Daniel Ribeiro <wyrm@openezx.org>
-+ */
-+
-+#ifndef EZX_PCAP_H
-+#define EZX_PCAP_H
-+
-+struct pcap_platform_data {
-+ int port; /* SSP port */
-+ int cs; /* CS gpio */
-+ int clk;
-+ int flags; /* driver flags */
-+ int (*init)(void); /* board specific driver init */
-+};
-+
-+/* driver configuration */
-+#define PCAP_CS_AH (1 << 0) /* CS pin is active high */
-+#define PCAP_MCI_SD (1 << 1) /* SD card slot */
-+#define PCAP_MCI_TF (1 << 2) /* TF card slot */
-+
-+#define PCAP_REGISTER_WRITE_OP_BIT 0x80000000
-+#define PCAP_REGISTER_READ_OP_BIT 0x00000000
-+
-+#define PCAP_REGISTER_VALUE_MASK 0x01ffffff
-+#define PCAP_REGISTER_ADDRESS_MASK 0x7c000000
-+#define PCAP_REGISTER_ADDRESS_SHIFT 26
-+#define PCAP_REGISTER_NUMBER 32
-+#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff
-+#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff
-+
-+
-+#define pbit(reg, bit) ((reg << PCAP_REGISTER_ADDRESS_SHIFT) | bit)
-+
-+/* registers acessible by both pcap ports */
-+#define PCAP_REG_ISR 0x0 /* Interrupt Status */
-+#define PCAP_REG_MSR 0x1 /* Interrupt Mask */
-+#define PCAP_REG_PSTAT 0x2 /* Processor Status */
-+#define PCAP_REG_VREG2 0x6 /* Regulator Bank 2 Control */
-+#define PCAP_REG_AUXVREG 0x7 /* Auxiliary Regulator Control */
-+#define PCAP_REG_BATT 0x8 /* Battery Control */
-+#define PCAP_REG_ADC1 0x9 /* AD Control */
-+#define PCAP_REG_ADC2 0xa /* AD Result */
-+#define PCAP_REG_CODEC 0xb /* Audio Codec Control */
-+#define PCAP_REG_RX_AMPS 0xc /* RX Audio Amplifiers Control */
-+#define PCAP_REG_ST_DAC 0xd /* Stereo DAC Control */
-+#define PCAP_REG_BUSCTRL 0x14 /* Connectivity Control */
-+#define PCAP_REG_PERIPH 0x15 /* Peripheral Control */
-+#define PCAP_REG_LOWPWR 0x18 /* Regulator Low Power Control */
-+#define PCAP_REG_TX_AMPS 0x1a /* TX Audio Amplifiers Control */
-+#define PCAP_REG_GP 0x1b /* General Purpose */
-+
-+/* registers acessible by pcap port 1 only (a1200, e2 & e6) */
-+#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */
-+#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */
-+#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */
-+#define PCAP_REG_RTC_TOD 0xe /* RTC Time of Day */
-+#define PCAP_REG_RTC_TODA 0xf /* RTC Time of Day Alarm */
-+#define PCAP_REG_RTC_DAY 0x10 /* RTC Day */
-+#define PCAP_REG_RTC_DAYA 0x11 /* RTC Day Alarm */
-+#define PCAP_REG_MTRTMR 0x12 /* AD Monitor Timer */
-+#define PCAP_REG_PWR 0x13 /* Power Control */
-+#define PCAP_REG_AUXVREG_MASK 0x16 /* Auxiliary Regulator Mask */
-+#define PCAP_REG_VENDOR_REV 0x17
-+#define PCAP_REG_PERIPH_MASK 0x19 /* Peripheral Mask */
-+
-+/* interrupts - registers 0, 1, 2, 3 */
-+#define PCAP_IRQ_ADCDONE (1 << 0) /* AD Conversion Done Port 1 */
-+#define PCAP_IRQ_TS (1 << 1) /* Touch Screen */
-+#define PCAP_IRQ_1HZ (1 << 2) /* 1HZ Timer */
-+#define PCAP_IRQ_WH (1 << 3)
-+#define PCAP_IRQ_WL (1 << 4)
-+#define PCAP_IRQ_TODA (1 << 5)
-+#define PCAP_IRQ_USB4V (1 << 6)
-+#define PCAP_IRQ_ONOFF (1 << 7)
-+#define PCAP_IRQ_ONOFF2 (1 << 8)
-+#define PCAP_IRQ_USB1V (1 << 9)
-+#define PCAP_IRQ_MOBPORT (1 << 10)
-+#define PCAP_IRQ_MB2 (1 << 11) /* Mic */
-+#define PCAP_IRQ_A1 (1 << 12) /* Audio jack */
-+#define PCAP_IRQ_ST (1 << 13)
-+#define PCAP_IRQ_PC (1 << 14)
-+#define PCAP_IRQ_WARM (1 << 15)
-+#define PCAP_IRQ_EOL (1 << 16)
-+#define PCAP_IRQ_CLK (1 << 17)
-+#define PCAP_IRQ_SYSRST (1 << 18)
-+#define PCAP_IRQ_ADCDONE2 (1 << 20) /* AD Conversion Done Port 2 */
-+#define PCAP_IRQ_SOFTRESET (1 << 21)
-+#define PCAP_IRQ_MNEXB (1 << 22)
-+
-+#define PCAP_BIT_VREG2_V1_STBY pbit(PCAP_REG_VREG2, (1 << 0))
-+#define PCAP_BIT_VREG2_V2_STBY pbit(PCAP_REG_VREG2, (1 << 1))
-+#define PCAP_BIT_VREG2_V3_STBY pbit(PCAP_REG_VREG2, (1 << 2))
-+#define PCAP_BIT_VREG2_V4_STBY pbit(PCAP_REG_VREG2, (1 << 3))
-+#define PCAP_BIT_VREG2_V5_STBY pbit(PCAP_REG_VREG2, (1 << 4))
-+#define PCAP_BIT_VREG2_V6_STBY pbit(PCAP_REG_VREG2, (1 << 5))
-+#define PCAP_BIT_VREG2_V7_STBY pbit(PCAP_REG_VREG2, (1 << 6))
-+#define PCAP_BIT_VREG2_V8_STBY pbit(PCAP_REG_VREG2, (1 << 7))
-+#define PCAP_BIT_VREG2_V9_STBY pbit(PCAP_REG_VREG2, (1 << 8))
-+#define PCAP_BIT_VREG2_V10_STBY pbit(PCAP_REG_VREG2, (1 << 9))
-+#define PCAP_BIT_VREG2_V1_LOWPWR pbit(PCAP_REG_VREG2, (1 << 10))
-+#define PCAP_BIT_VREG2_V2_LOWPWR pbit(PCAP_REG_VREG2, (1 << 11))
-+#define PCAP_BIT_VREG2_V3_LOWPWR pbit(PCAP_REG_VREG2, (1 << 12))
-+#define PCAP_BIT_VREG2_V4_LOWPWR pbit(PCAP_REG_VREG2, (1 << 13))
-+#define PCAP_BIT_VREG2_V5_LOWPWR pbit(PCAP_REG_VREG2, (1 << 14))
-+#define PCAP_BIT_VREG2_V6_LOWPWR pbit(PCAP_REG_VREG2, (1 << 15))
-+#define PCAP_BIT_VREG2_V7_LOWPWR pbit(PCAP_REG_VREG2, (1 << 16))
-+#define PCAP_BIT_VREG2_V8_LOWPWR pbit(PCAP_REG_VREG2, (1 << 17))
-+#define PCAP_BIT_VREG2_V9_LOWPWR pbit(PCAP_REG_VREG2, (1 << 18))
-+#define PCAP_BIT_VREG2_V10_LOWPWR pbit(PCAP_REG_VREG2, (1 << 19))
-+
-+#define PCAP_BIT_AUXVREG_VAUX1_EN pbit(PCAP_REG_AUXVREG, (1 << 1))
-+#define PCAP_AUXVREG_VAUX1_MASK 0x0000000c
-+#define PCAP_AUXVREG_VAUX1_SHIFT 2
-+#define PCAP_BIT_AUXVREG_VAUX2_EN pbit(PCAP_REG_AUXVREG, (1 << 4))
-+#define PCAP_AUXVREG_VAUX2_MASK 0x00000060
-+#define PCAP_AUXVREG_VAUX2_SHIFT 5
-+#define PCAP_BIT_AUXVREG_VAUX3_EN pbit(PCAP_REG_AUXVREG, (1 << 7))
-+#define PCAP_AUXVREG_VAUX3_MASK 0x00000f00
-+#define PCAP_AUXVREG_VAUX3_SHIFT 8
-+#define PCAP_BIT_AUXVREG_VAUX4_EN pbit(PCAP_REG_AUXVREG, (1 << 12))
-+#define PCAP_AUXVREG_VAUX4_MASK 0x00006000
-+#define PCAP_AUXVREG_VAUX4_SHIFT 13
-+#define PCAP_BIT_AUXVREG_VSIM2_EN pbit(PCAP_REG_AUXVREG, (1 << 16))
-+#define PCAP_BIT_AUXVREG_VSIM_EN pbit(PCAP_REG_AUXVREG, (1 << 17))
-+#define PCAP_BIT_AUXVREG_VSIM_0 pbit(PCAP_REG_AUXVREG, (1 << 18))
-+#define PCAP_BIT_AUXVREG_V_VIB_EN pbit(PCAP_REG_AUXVREG, (1 << 19))
-+#define PCAP_AUXVREG_V_VIB_MASK 0x00300000
-+#define PCAP_AUXVREG_V_VIB_SHIFT 20
-+#define PCAP_BIT_AUXVREG_VAUX1_STBY pbit(PCAP_REG_AUXVREG, (1 << 22))
-+#define PCAP_BIT_AUXVREG_VAUX1_LOWPWR pbit(PCAP_REG_AUXVREG, (1 << 23))
-+#define PCAP_BIT_AUXVREG_SW3_STBY pbit(PCAP_REG_AUXVREG, (1 << 24))
-+
-+#define PCAP_BATT_DAC_MASK 0x000000ff
-+#define PCAP_BATT_DAC_SHIFT 0
-+#define PCAP_BIT_BATT_B_FDBK pbit(PCAP_REG_BATT, (1 << 8))
-+#define PCAP_BIT_BATT_EXT_ISENSE pbit(PCAP_REG_BATT, (1 << 9))
-+#define PCAP_BATT_V_COIN_MASK 0x00003c00
-+#define PCAP_BATT_V_COIN_SHIFT 10
-+#define PCAP_BIT_BATT_I_COIN pbit(PCAP_REG_BATT, (1 << 14))
-+#define PCAP_BIT_BATT_COIN_CH_EN pbit(PCAP_REG_BATT, (1 << 15))
-+#define PCAP_BATT_EOL_SEL_MASK 0x000e0000
-+#define PCAP_BATT_EOL_SEL_SHIFT 17
-+#define PCAP_BIT_BATT_EOL_CMP_EN pbit(PCAP_REG_BATT, (1 << 20))
-+#define PCAP_BIT_BATT_BATT_DET_EN pbit(PCAP_REG_BATT, (1 << 21))
-+#define PCAP_BIT_BATT_THERMBIAS_CTRL pbit(PCAP_REG_BATT, (1 << 22))
-+
-+#define PCAP_BIT_ADC1_ADEN pbit(PCAP_REG_ADC1, (1 << 0))
-+#define PCAP_BIT_ADC1_RAND pbit(PCAP_REG_ADC1, (1 << 1))
-+#define PCAP_BIT_ADC1_AD_SEL1 pbit(PCAP_REG_ADC1, (1 << 2))
-+#define PCAP_BIT_ADC1_AD_SEL2 pbit(PCAP_REG_ADC1, (1 << 3))
-+#define PCAP_ADC1_ADA1_MASK 0x00000070
-+#define PCAP_ADC1_ADA1_SHIFT 4
-+#define PCAP_ADC1_ADA2_MASK 0x00000380
-+#define PCAP_ADC1_ADA2_SHIFT 7
-+#define PCAP_ADC1_ATO_MASK 0x00003c00
-+#define PCAP_ADC1_ATO_SHIFT 10
-+#define PCAP_BIT_ADC1_ATOX pbit(PCAP_REG_ADC1, (1 << 14))
-+#define PCAP_BIT_ADC1_MTR1 pbit(PCAP_REG_ADC1, (1 << 15))
-+#define PCAP_BIT_ADC1_MTR2 pbit(PCAP_REG_ADC1, (1 << 16))
-+#define PCAP_ADC1_TS_M_MASK 0x000e0000
-+#define PCAP_ADC1_TS_M_SHIFT 17
-+#define PCAP_BIT_ADC1_TS_REF_LOWPWR pbit(PCAP_REG_ADC1, (1 << 20))
-+#define PCAP_BIT_ADC1_TS_REFENB pbit(PCAP_REG_ADC1, (1 << 21))
-+#define PCAP_BIT_ADC1_BATT_I_POLARITY pbit(PCAP_REG_ADC1, (1 << 22))
-+#define PCAP_BIT_ADC1_BATT_I_ADC pbit(PCAP_REG_ADC1, (1 << 23))
-+
-+#define PCAP_ADC2_ADD1_MASK 0x000003ff
-+#define PCAP_ADC2_ADD1_SHIFT 0
-+#define PCAP_ADC2_ADD2_MASK 0x000ffc00
-+#define PCAP_ADC2_ADD2_SHIFT 10
-+#define PCAP_BIT_ADC2_ADINC1 pbit(PCAP_REG_ADC2, (1 << 20))
-+#define PCAP_BIT_ADC2_ADINC2 pbit(PCAP_REG_ADC2, (1 << 21))
-+#define PCAP_BIT_ADC2_ASC pbit(PCAP_REG_ADC2, (1 << 22))
-+
-+#define PCAP_BIT_BUSCTRL_FSENB 0x50000001
-+#define PCAP_BIT_BUSCTRL_USB_SUSPEND 0x50000002
-+#define PCAP_BIT_BUSCTRL_USB_PU 0x50000004
-+#define PCAP_BIT_BUSCTRL_USB_PD 0x50000008
-+#define PCAP_BIT_BUSCTRL_VUSB_EN 0x50000010
-+#define PCAP_BIT_BUSCTRL_USB_PS 0x50000020
-+#define PCAP_BIT_BUSCTRL_VUSB_MSTR_EN 0x50000040
-+#define PCAP_BIT_BUSCTRL_VBUS_PD_ENB 0x50000080
-+#define PCAP_BIT_BUSCTRL_CURRLIM 0x50000100
-+#define PCAP_BIT_BUSCTRL_RS232ENB 0x50000200
-+#define PCAP_BIT_BUSCTRL_RS232_DIR 0x50000400
-+#define PCAP_BIT_BUSCTRL_SE0_CONN 0x50000800
-+#define PCAP_BIT_BUSCTRL_USB_PDM 0x50001000
-+#define PCAP_BIT_BUSCTRL_BUS_PRI_ADJ 0x51000000
-+
-+#define PCAP_BIT_PERIPH_BL_CTRL0 0x54000001
-+#define PCAP_BIT_PERIPH_BL_CTRL1 0x54000002
-+#define PCAP_BIT_PERIPH_BL_CTRL2 0x54000004
-+#define PCAP_BIT_PERIPH_BL_CTRL3 0x54000008
-+#define PCAP_BIT_PERIPH_BL_CTRL4 0x54000010
-+#define PCAP_BIT_PERIPH_LEDR_EN 0x54000020
-+#define PCAP_BIT_PERIPH_LEDG_EN 0x54000040
-+#define PCAP_BIT_PERIPH_LEDR_CTRL0 0x54000080
-+#define PCAP_BIT_PERIPH_LEDR_CTRL1 0x54000100
-+#define PCAP_BIT_PERIPH_LEDR_CTRL2 0x54000200
-+#define PCAP_BIT_PERIPH_LEDR_CTRL3 0x54000400
-+#define PCAP_BIT_PERIPH_LEDG_CTRL0 0x54000800
-+#define PCAP_BIT_PERIPH_LEDG_CTRL1 0x54001000
-+#define PCAP_BIT_PERIPH_LEDG_CTRL2 0x54002000
-+#define PCAP_BIT_PERIPH_LEDG_CTRL3 0x54004000
-+#define PCAP_BIT_PERIPH_LEDR_I0 0x54008000
-+#define PCAP_BIT_PERIPH_LEDR_I1 0x54010000
-+#define PCAP_BIT_PERIPH_LEDG_I0 0x54020000
-+#define PCAP_BIT_PERIPH_LEDG_I1 0x54040000
-+#define PCAP_BIT_PERIPH_SKIP 0x54080000
-+#define PCAP_BIT_PERIPH_BL2_CTRL0 0x54100000
-+#define PCAP_BIT_PERIPH_BL2_CTRL1 0x54200000
-+#define PCAP_BIT_PERIPH_BL2_CTRL2 0x54400000
-+#define PCAP_BIT_PERIPH_BL2_CTRL3 0x54800000
-+#define PCAP_BIT_PERIPH_BL2_CTRL4 0x55000000
-+
-+#define PCAP_BIT_LOWPWR_VAUX2_STBY 0x60000001
-+#define PCAP_BIT_LOWPWR_VAUX2_LOWPWR 0x60000002
-+#define PCAP_BIT_LOWPWR_VAUX3_STBY 0x60000004
-+#define PCAP_BIT_LOWPWR_VAUX3_LOWPWR 0x60000008
-+#define PCAP_BIT_LOWPWR_VAUX4_STBY 0x60000010
-+#define PCAP_BIT_LOWPWR_VAUX4_LOWPWR 0x60000020
-+#define PCAP_BIT_LOWPWR_VSIM_LOWPWR 0x60000040
-+#define PCAP_BIT_LOWPWR_VSIM2_LOWPWR 0x60000080
-+#define PCAP_BIT_LOWPWR_SW1_MODE00 0x60000100
-+#define PCAP_BIT_LOWPWR_SW1_MODE01 0x60000200
-+#define PCAP_BIT_LOWPWR_SW1_MODE10 0x60000400
-+#define PCAP_BIT_LOWPWR_SW1_MODE11 0x60000800
-+#define PCAP_BIT_LOWPWR_SW10_DVS 0x60001000
-+#define PCAP_BIT_LOWPWR_SW11_DVS 0x60002000
-+#define PCAP_BIT_LOWPWR_SW12_DVS 0x60004000
-+#define PCAP_BIT_LOWPWR_SW13_DVS 0x60008000
-+#define PCAP_BIT_LOWPWR_SW2_MODE00 0x60010000
-+#define PCAP_BIT_LOWPWR_SW2_MODE01 0x60020000
-+#define PCAP_BIT_LOWPWR_SW2_MODE10 0x60040000
-+#define PCAP_BIT_LOWPWR_SW2_MODE11 0x60080000
-+#define PCAP_BIT_LOWPWR_SW20_DVS 0x60100000
-+#define PCAP_BIT_LOWPWR_SW21_DVS 0x60200000
-+#define PCAP_BIT_LOWPWR_SW22_DVS 0x60400000
-+#define PCAP_BIT_LOWPWR_SW23_DVS 0x60800000
-+#define PCAP_BIT_LOWPWR_VC_STBY 0x61000000
-+
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
-+extern int ezx_pcap_bit_get(u_int32_t);
-+extern int ezx_pcap_read_bit(u_int32_t);
-+extern void ezx_pcap_vibrator_level(u_int32_t);
-+#endif
-Index: linux-2.6.24/include/asm-arm/arch-pxa/irqs.h
-===================================================================
---- linux-2.6.24.orig/include/asm-arm/arch-pxa/irqs.h
-+++ linux-2.6.24/include/asm-arm/arch-pxa/irqs.h
-@@ -89,7 +89,7 @@
- * within sensible limits.
- */
- #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM)
--#define IRQ_BOARD_END (IRQ_BOARD_START + 16)
-+#define IRQ_BOARD_END (IRQ_BOARD_START + 22)
-
- #define IRQ_SA1111_START (IRQ_BOARD_END)
- #define IRQ_GPAIN0 (IRQ_BOARD_END + 0)
-@@ -180,7 +180,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)
-@@ -227,6 +228,31 @@
- #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 */
-+#define EZX_IRQ_WH EZX_IRQ(7)
-+#define EZX_IRQ_WL EZX_IRQ(8)
-+#define EZX_IRQ_ONOFF EZX_IRQ(9)
-+#define EZX_IRQ_ONOFF2 EZX_IRQ(10)
-+#define EZX_IRQ_MOBPORT EZX_IRQ(11)
-+#define EZX_IRQ_TODA EZX_IRQ(12)
-+#define EZX_IRQ_1HZ EZX_IRQ(13)
-+#define EZX_IRQ_MNEXB EZX_IRQ(14)
-+#define EZX_IRQ_ST EZX_IRQ(15)
-+#define EZX_IRQ_PC EZX_IRQ(16)
-+#define EZX_IRQ_SYSRST EZX_IRQ(17)
-+#define EZX_IRQ_SOFTRESET EZX_IRQ(18)
-+#define EZX_IRQ_EOL EZX_IRQ(19)
-+#define EZX_IRQ_CLK EZX_IRQ(20)
-+#define EZX_IRQ_WARM EZX_IRQ(21)
-+
- /* ITE8152 irqs */
- /* add IT8152 IRQs beyond BOARD_END */
- #ifdef CONFIG_PCI_HOST_ITE8152
-Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
-@@ -139,6 +139,9 @@
- This enables control code for the BP (baseband processor) found in
- Motorola's EZX smartphone platform.
-
-+config EZX_PCAP
-+ bool "PCAP Support"
-+
- endif
-
- endmenu
-Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.24/arch/arm/mach-pxa/Makefile
-@@ -37,6 +37,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.24/patches/ezx-pm.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch
deleted file mode 100644
index cc08fddfc6..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-Index: linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/pxa27x.c
-+++ linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
-@@ -25,6 +25,10 @@
- #include <asm/arch/pm.h>
- #include <asm/arch/dma.h>
-
-+#ifdef CONFIG_PXA_EZX
-+#include <asm/arch/ezx.h>
-+#endif
-+
- #include "generic.h"
- #include "devices.h"
- #include "clock.h"
-@@ -231,7 +235,12 @@
- void pxa27x_cpu_pm_restore(unsigned long *sleep_save)
- {
- /* 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);
-@@ -281,7 +290,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
- pxa27x_cpu_suspend(PWRMODE_SLEEP);
- break;
- }
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
-@@ -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 <asm/arch/ezx.h>
- #include <asm/arch/ezx-bp.h>
-
-@@ -108,8 +109,53 @@
- &ezxbp_device,
- };
-
-+/* PM */
-+extern int bp_handshake_passed(void);
-+
-+static void ezx_reboot_poweroff(char mode)
-+{
-+ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG;
-+ cpu_proc_fin();
-+
-+#ifdef CONFIG_EZX_BP
-+ 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');
-+ 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 = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC);
-
- pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch
deleted file mode 100644
index efff7e06a5..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Work around some errata in the pxa serial code (copied from motorolas 2.4.x tree)
-
-Index: linux-2.6.24/drivers/serial/pxa.c
-===================================================================
---- linux-2.6.24.orig/drivers/serial/pxa.c
-+++ linux-2.6.24/drivers/serial/pxa.c
-@@ -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>
-@@ -196,7 +200,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;
-@@ -204,6 +208,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);
- }
- }
-
-@@ -299,6 +305,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.24/patches/mux-fix-init-errorpath.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch
deleted file mode 100644
index 716ef86fd1..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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.24/patches/mux-fix-makefile.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch
deleted file mode 100644
index 9e5ae18263..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-2.6.23/drivers/char/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200
-+++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:59.000000000 +0200
-@@ -111,7 +111,8 @@
- obj-$(CONFIG_JS_RTC) += js-rtc.o
- js-rtc-y = rtc.o
-
--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.24/patches/mux-fix-tty-driver.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch
deleted file mode 100644
index 2e1aabd952..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-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.24/patches/mux-fix.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch
deleted file mode 100644
index b820762f41..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-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.24/patches/mux-ifdef-ezx-features.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch
deleted file mode 100644
index a3a6a8249a..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c
-===================================================================
---- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:33.000000000 +0200
-+++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:45.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();
-
-@@ -735,7 +749,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);
-Index: linux-2.6.21/drivers/char/Kconfig
-===================================================================
---- linux-2.6.21.orig/drivers/char/Kconfig 2007-09-29 10:52:18.000000000 +0200
-+++ linux-2.6.21/drivers/char/Kconfig 2007-09-29 10:52:30.000000000 +0200
-@@ -1073,7 +1073,7 @@
-
- config TS0710_MUX
- tristate "GSM TS 07.10 Multiplex driver"
-- depends on EZX_BP
-+ depends on EZX_BP || X86
- help
- This implements the GSM 07.10 multiplex.
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch
deleted file mode 100644
index 8d5299e3bd..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch
+++ /dev/null
@@ -1,297 +0,0 @@
-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.24/patches/mux-remove-flipbuffers.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch
deleted file mode 100644
index d4781f9fc7..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-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.24/patches/mux-remove-get_halted_bit.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch
deleted file mode 100644
index 0ebe27d03b..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-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.24/patches/mux-remove-usbh_finished_resume.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch
deleted file mode 100644
index c415ded428..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-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.24/patches/mux_cli.patch b/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch
deleted file mode 100644
index 3e8e3e2604..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch
+++ /dev/null
@@ -1,5396 +0,0 @@
-Index: linux-2.6.24/drivers/char/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/char/Kconfig
-+++ linux-2.6.24/drivers/char/Kconfig
-@@ -1040,5 +1040,18 @@
-
- source "drivers/s390/char/Kconfig"
-
-+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.24/drivers/char/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/char/Makefile
-+++ linux-2.6.24/drivers/char/Makefile
-@@ -111,6 +111,9 @@
- obj-$(CONFIG_JS_RTC) += js-rtc.o
- js-rtc-y = rtc.o
-
-+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.24/drivers/char/ts0710.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/char/ts0710.h
-@@ -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.24/drivers/char/ts0710_mux.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/char/ts0710_mux.c
-@@ -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.24/drivers/char/ts0710_mux.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/char/ts0710_mux.h
-@@ -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.24/drivers/char/ts0710_mux_usb.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/char/ts0710_mux_usb.c
-@@ -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.24/drivers/char/ts0710_mux_usb.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/char/ts0710_mux_usb.h
-@@ -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.24/patches/mux_debug.patch b/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch
deleted file mode 100644
index 58cb25a0b6..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch
+++ /dev/null
@@ -1,551 +0,0 @@
-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.24/patches/pcap-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch
deleted file mode 100644
index 47cc1a36bb..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch
+++ /dev/null
@@ -1,363 +0,0 @@
-Index: linux-2.6.24/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/input/touchscreen/Kconfig
-+++ linux-2.6.24/drivers/input/touchscreen/Kconfig
-@@ -263,4 +263,13 @@
- bool "GoTop Super_Q2/GogoPen/PenPower tablet device support" if EMBEDDED
- depends on TOUCHSCREEN_USB_COMPOSITE
-
-+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.24/drivers/input/touchscreen/pcap_ts.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/input/touchscreen/pcap_ts.c
-@@ -0,0 +1,331 @@
-+/*
-+ * 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 <wyrm@openezx.org>
-+ *
-+ * 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 POSITION_X_MEASUREMENT 0
-+#define POSITION_XY_MEASUREMENT 1
-+#define PRESSURE_MEASUREMENT 2
-+#define PLATE_X_MEASUREMENT 3
-+#define PLATE_Y_MEASUREMENT 4
-+#define STANDBY_MODE 5
-+#define NONTS_MODE 6
-+
-+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(struct pcap_ts *pcap_ts, u_int32_t mode)
-+{
-+ u_int32_t tmp;
-+
-+ pcap_ts->read_state = mode;
-+ ezx_pcap_read(PCAP_REG_ADC1, &tmp);
-+ tmp &= ~PCAP_ADC1_TS_M_MASK;
-+ tmp |= ((mode << PCAP_ADC1_TS_M_SHIFT) & PCAP_ADC1_TS_M_MASK);
-+ ezx_pcap_write(PCAP_REG_ADC1, tmp);
-+}
-+
-+/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE 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(PCAP_REG_ADC1, &tmp);
-+ tmp &= ~(PCAP_BIT_ADC1_RAND | PCAP_ADC1_ADA1_MASK |
-+ PCAP_ADC1_ADA2_MASK);
-+ tmp |= (PCAP_BIT_ADC1_ADEN | PCAP_BIT_ADC1_AD_SEL1 |
-+ PCAP_BIT_ADC1_AD_SEL2 | (5 << PCAP_ADC1_ADA1_SHIFT) |
-+ (3 << PCAP_ADC1_ADA2_SHIFT));
-+ ezx_pcap_write(PCAP_REG_ADC1, tmp);
-+ ezx_pcap_bit_set(PCAP_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(PCAP_REG_ADC2, &tmp);
-+
-+ if (pcap_ts->read_state == POSITION_XY_MEASUREMENT) {
-+ pcap_ts->x = (tmp & PCAP_ADC2_ADD1_MASK) >>
-+ PCAP_ADC2_ADD1_SHIFT;
-+ pcap_ts->y = (tmp & PCAP_ADC2_ADD2_MASK) >>
-+ PCAP_ADC2_ADD2_SHIFT;
-+ } else {
-+ pcap_ts->pressure = (tmp & PCAP_ADC2_ADD2_MASK) >>
-+ PCAP_ADC2_ADD2_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 == POSITION_XY_MEASUREMENT ? "COORD" :
-+ "PRESS", pcap_ts->x, pcap_ts->y, pcap_ts->pressure);
-+ switch (pcap_ts->read_state) {
-+ case PRESSURE_MEASUREMENT:
-+ 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_mode(pcap_ts, POSITION_XY_MEASUREMENT);
-+ pcap_ts_start_xy_read(pcap_ts);
-+ break;
-+ case POSITION_XY_MEASUREMENT:
-+ 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_mode(pcap_ts, STANDBY_MODE);
-+ enable_irq(pcap_ts->irq_touch);
-+ } 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_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 */
-+ disable_irq(pcap_ts->irq_touch);
-+
-+ DEBUGP("touched!!\n");
-+ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT);
-+ 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)
-+{
-+ 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;
-+ }
-+
-+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REFENB, 0);
-+ pcap_ts_mode(pcap_ts, STANDBY_MODE);
-+
-+ err = request_irq(pcap_ts->irq_xy, pcap_ts_irq_xy, IRQF_DISABLED,
-+ "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, IRQF_DISABLED,
-+ "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);
-+
-+ 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_MASK(EV_KEY) | BIT_MASK(EV_ABS);
-+ input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(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(PCAP_BIT_ADC1_TS_REF_LOWPWR, 1);
-+ return 0;
-+}
-+
-+static int ezxts_resume(struct platform_device *dev)
-+{
-+ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 0);
-+ /* just in case we suspend with TSI masked. */
-+// ezx_pcap_bit_set(PCAP_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.24/drivers/input/touchscreen/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/input/touchscreen/Makefile
-+++ linux-2.6.24/drivers/input/touchscreen/Makefile
-@@ -19,3 +19,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.24/patches/pxa-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch
deleted file mode 100644
index d272a701ba..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch
+++ /dev/null
@@ -1,547 +0,0 @@
-Index: linux-2.6.24/arch/arm/mach-pxa/generic.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c
-+++ linux-2.6.24/arch/arm/mach-pxa/generic.c
-@@ -38,6 +38,7 @@
- #include <asm/arch/mmc.h>
- #include <asm/arch/irda.h>
- #include <asm/arch/i2c.h>
-+#include <asm/arch/kbd.h>
-
- #include "devices.h"
- #include "generic.h"
-@@ -479,3 +480,28 @@
- .name = "sa1100-rtc",
- .id = -1,
- };
-+
-+static struct resource pxa_kbd_resources[] = {
-+ {
-+ .start = IRQ_KEYPAD,
-+ .end = IRQ_KEYPAD,
-+ .flags = IORESOURCE_IRQ,
-+ }, {
-+ .start = 0x41500000,
-+ .end = 0x4150004c,
-+ .flags = IORESOURCE_MEM,
-+ },
-+};
-+
-+struct platform_device pxa_device_kbd = {
-+ .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)
-+{
-+ pxa_device_kbd.dev.platform_data = info;
-+}
-+
-Index: linux-2.6.24/drivers/input/keyboard/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/input/keyboard/Kconfig
-+++ linux-2.6.24/drivers/input/keyboard/Kconfig
-@@ -293,4 +293,11 @@
- To compile this driver as a module, choose M here: the
- module will be called bf54x-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.24/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/input/keyboard/Makefile
-+++ linux-2.6.24/drivers/input/keyboard/Makefile
-@@ -25,3 +25,4 @@
- obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o
- obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o
- obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
-+obj-$(CONFIG_KEYBOARD_PXA) += pxakbd.o
-Index: linux-2.6.24/include/asm-arm/arch-pxa/kbd.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/include/asm-arm/arch-pxa/kbd.h
-@@ -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.24/drivers/input/keyboard/pxakbd.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/input/keyboard/pxakbd.c
-@@ -0,0 +1,403 @@
-+/*
-+ * Driver for Motorola EZX phone "keyboard"
-+ *
-+ * (C) 2006 by Harald Welte <laforge@openezx.org>
-+ *
-+ * May, 2007 - Daniel Ribeiro <wyrm@openezx.org>
-+ * 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(CKEN_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.24/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h
-+++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
-@@ -2271,6 +2271,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
-Index: linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/pxa27x.c
-+++ linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
-@@ -451,6 +451,7 @@
- &pxa_device_rtc,
- &pxa27x_device_i2c_power,
- &pxa27x_device_ohci,
-+ &pxa_device_kbd,
- };
-
- static int __init pxa27x_init(void)
-Index: linux-2.6.24/arch/arm/mach-pxa/devices.h
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/devices.h
-+++ linux-2.6.24/arch/arm/mach-pxa/devices.h
-@@ -9,6 +9,7 @@
- extern struct platform_device pxa_device_i2s;
- extern struct platform_device pxa_device_ficp;
- extern struct platform_device pxa_device_rtc;
-+extern struct platform_device pxa_device_kbd;
-
- extern struct platform_device pxa27x_device_i2c_power;
- extern struct platform_device pxa27x_device_ohci;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch
deleted file mode 100644
index 4b9a9abeef..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-This hack hardcodes pxa27x-udc to ether_gadget. This is just a temp workaround.
-Index: linux-2.6.24/drivers/usb/gadget/ether.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/ether.c
-+++ linux-2.6.24/drivers/usb/gadget/ether.c
-@@ -2687,10 +2687,16 @@
- MODULE_LICENSE ("GPL");
-
-
--static int __init init (void)
-+// Alex add FIXME
-+int usb_ether_init (void)
- {
- return usb_gadget_register_driver (&eth_driver);
- }
-+
-+static int __init init (void)
-+{
-+// return usb_gadget_register_driver (&eth_driver);
-+}
- module_init (init);
-
- static void __exit cleanup (void)
-Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/pxa27x_udc.c
-+++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
-@@ -65,6 +65,8 @@
- //#include <asm/arch/udc.h>
- #include <asm/mach/udc_pxa2xx.h>
-
-+extern int usb_ether_init(void);
-+
- /*
- * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x
- * series processors.
-@@ -2277,6 +2279,8 @@
- udc_init_ep(udc);
- udc_reinit(udc);
-
-+ usb_ether_init(); // Alex add FIXME
-+
- /* irq setup after old hardware state is cleaned up */
- retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc);
- if (retval != 0) {
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch
deleted file mode 100644
index 5823e8023a..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch
+++ /dev/null
@@ -1,3114 +0,0 @@
-Index: linux-2.6.24/arch/arm/mach-pxa/generic.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c
-+++ linux-2.6.24/arch/arm/mach-pxa/generic.c
-@@ -290,7 +290,11 @@
- static u64 udc_dma_mask = ~(u32)0;
-
- struct platform_device pxa_device_udc = {
-+#ifdef CONFIG_PXA27x
-+ .name = "pxa27x-udc",
-+#else
- .name = "pxa2xx-udc",
-+#endif
- .id = -1,
- .resource = pxa2xx_udc_resources,
- .num_resources = ARRAY_SIZE(pxa2xx_udc_resources),
-Index: linux-2.6.24/drivers/usb/gadget/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/Kconfig
-+++ linux-2.6.24/drivers/usb/gadget/Kconfig
-@@ -192,6 +192,24 @@
- 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
-Index: linux-2.6.24/drivers/usb/gadget/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/Makefile
-+++ linux-2.6.24/drivers/usb/gadget/Makefile
-@@ -9,6 +9,7 @@
- obj-$(CONFIG_USB_NET2280) += net2280.o
- obj-$(CONFIG_USB_AMD5536UDC) += amd5536udc.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
-Index: linux-2.6.24/drivers/usb/gadget/epautoconf.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/epautoconf.c
-+++ linux-2.6.24/drivers/usb/gadget/epautoconf.c
-@@ -230,7 +230,8 @@
- */
- 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 @@
-
- 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 ...
- */
-Index: linux-2.6.24/drivers/usb/gadget/ether.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/ether.c
-+++ linux-2.6.24/drivers/usb/gadget/ether.c
-@@ -235,10 +235,6 @@
- #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
-@@ -270,6 +266,10 @@
- #define DEV_CONFIG_SUBSET
- #endif
-
-+#ifdef CONFIG_USB_GADGET_PXA27X
-+#define DEV_CONFIG_SUBSET
-+#endif
-+
- #ifdef CONFIG_USB_GADGET_SUPERH
- #define DEV_CONFIG_SUBSET
- #endif
-@@ -1012,13 +1012,12 @@
- static int
- set_ether_config (struct eth_dev *dev, gfp_t gfp_flags)
- {
-- int result = 0;
-- struct usb_gadget *gadget = dev->gadget;
-+ int result = 0;
-
- #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS)
- /* status endpoint used for RNDIS and (optionally) CDC */
- if (!subset_active(dev) && dev->status_ep) {
-- dev->status = ep_desc (gadget, &hs_status_desc,
-+ dev->status = ep_desc (dev->gadget, &hs_status_desc,
- &fs_status_desc);
- dev->status_ep->driver_data = dev;
-
-@@ -1031,10 +1030,10 @@
- }
- #endif
-
-- dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc);
-+ dev->in = ep_desc(dev->gadget, &hs_source_desc, &fs_source_desc);
- dev->in_ep->driver_data = dev;
-
-- dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc);
-+ dev->out = ep_desc(dev->gadget, &hs_sink_desc, &fs_sink_desc);
- dev->out_ep->driver_data = dev;
-
- /* With CDC, the host isn't allowed to use these two data
-@@ -2298,6 +2297,9 @@
- * 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);
-@@ -2364,7 +2366,22 @@
-
- /* 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,
-@@ -2374,7 +2391,23 @@
- }
- 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 */
-@@ -2384,7 +2417,18 @@
- * 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) {
-@@ -2392,13 +2436,14 @@
- "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) {
-+ /* pxa25x only does CDC subset; often used with RNDIS */
-+ else if (cdc) {
- control_intf.bNumEndpoints = 0;
- /* FIXME remove endpoint from descriptor list */
--#endif
- }
-+#endif
- }
- #endif
-
-Index: linux-2.6.24/drivers/usb/gadget/file_storage.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/file_storage.c
-+++ linux-2.6.24/drivers/usb/gadget/file_storage.c
-@@ -3877,20 +3877,20 @@
-
- /* 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
-Index: linux-2.6.24/drivers/usb/gadget/gmidi.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/gmidi.c
-+++ linux-2.6.24/drivers/usb/gadget/gmidi.c
-@@ -1188,7 +1188,7 @@
- * 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",
-@@ -1198,7 +1198,7 @@
- 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;
- }
-Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
-@@ -0,0 +1,2410 @@
-+/*
-+ * 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/gpio.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>
-+#include <asm/mach/udc_pxa2xx.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 "28-Jun-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);
-+
-+/* one GPIO should control a D+ pullup, so host sees this device (or not) */
-+static void pullup_off(void)
-+{
-+ struct pxa2xx_udc_mach_info *mach = the_controller->mach;
-+
-+ if (mach->gpio_pullup)
-+ gpio_set_value(mach->gpio_pullup, 0);
-+ else if (mach->udc_command)
-+ mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
-+}
-+
-+static void pullup_on(void)
-+{
-+ struct pxa2xx_udc_mach_info *mach = the_controller->mach;
-+
-+ if (mach->gpio_pullup)
-+ gpio_set_value(mach->gpio_pullup, 1);
-+ else if (mach->udc_command)
-+ mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
-+}
-+
-+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)
-+#ifdef USE_DMA
-+ *dma = virt_to_bus(retval);
-+#else
-+ *dma = (dma_addr_t) ~0;
-+#endif
-+ 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);
-+
-+#if 0
-+ dump_regs(ep->ep_num );
-+#endif
-+ 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,
-+
-+#warning "CHECK comments here"
-+ /*
-+ .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;
-+#if 0
-+ tmp |= UDCCONR_EE;
-+#endif
-+
-+ *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 = 0x00000000;
-+ UDCICR1 = 0x00000000;
-+
-+ udc_clear_mask_UDCCR(UDCCR_UDE);
-+
-+ /* Disable clock for USB device */
-+ pxa_set_cken(CKEN_USB, 0);
-+
-+ ep0_idle(dev);
-+ dev->gadget.speed = USB_SPEED_UNKNOWN;
-+
-+ pullup_off();
-+}
-+
-+/*
-+ * 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(CKEN_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
-+
-+ pullup_on();
-+}
-+
-+/* 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;
-+
-+ retval = device_add(&dev->gadget.dev);
-+ if (retval) {
-+ DMSG("unable to add device for %s --> error %d\n",
-+ driver->driver.name, retval);
-+ goto device_add_error;
-+ }
-+ retval = driver->bind(&dev->gadget);
-+ if (retval) {
-+ DMSG("bind to driver %s --> error %d\n",
-+ driver->driver.name, retval);
-+ goto device_bind_error;
-+ }
-+ retval = device_create_file(dev->dev, &dev_attr_function);
-+ if (retval) {
-+ DMSG("unable to create file for %s --> error %d\n",
-+ driver->driver.name, retval);
-+ goto create_file_error;
-+ }
-+
-+ /* ... 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;
-+
-+ create_file_error:
-+ driver->unbind(&dev->gadget);
-+
-+ device_bind_error:
-+ device_del(&dev->gadget.dev);
-+
-+ device_add_error:
-+ dev->driver = 0;
-+ dev->gadget.dev.driver = 0;
-+
-+ return retval;
-+}
-+
-+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;
-+
-+#if 0
-+ udccsr = *ep->reg_udccsr;
-+#endif
-+ 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 __init pxa27x_udc_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct pxa27x_udc *udc = &memory;
-+ int irq, 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;
-+ }
-+
-+ irq = platform_get_irq(pdev, 0);
-+ if (irq < 0)
-+ return -ENODEV;
-+ pr_debug("%s: IRQ %d\n", driver_name, irq);
-+
-+ /* other non-static parts of init */
-+ udc->dev = dev;
-+ udc->mach = dev->platform_data;
-+
-+ /* Disable irq, erase old events and disable the pull up on the bus */
-+ UDCICR0 = 0x00000000;
-+ UDCICR1 = 0x00000000;
-+ UDCISR0 = 0xffffffff;
-+ UDCISR1 = 0xffffffff;
-+ if (udc->mach->gpio_pullup) {
-+ if ((retval = gpio_request(udc->mach->gpio_pullup,
-+ "pca2xx_udc GPIO PULLUP"))) {
-+ dev_dbg(&pdev->dev,
-+ "can't get pullup gpio %d, err: %d\n",
-+ udc->mach->gpio_pullup, retval);
-+ if (udc->mach->gpio_vbus)
-+ gpio_free(udc->mach->gpio_vbus);
-+ return -EBUSY;
-+ }
-+ gpio_direction_output(udc->mach->gpio_pullup, 0);
-+ }
-+
-+ 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, pxa27x_udc_irq, 0, driver_name, udc);
-+ if (retval != 0) {
-+ printk(KERN_ERR "%s: can't get irq %i, err %d\n",
-+ driver_name, irq, retval);
-+ return -EBUSY;
-+ }
-+ udc->got_irq = 1;
-+
-+ create_proc_files();
-+
-+ return 0;
-+}
-+
-+static void pxa27x_udc_shutdown(struct platform_device *_dev)
-+{
-+ pullup_off();
-+}
-+
-+static int __exit 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(platform_get_irq(pdev, 0), 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(CKEN_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 = {
-+ .shutdown = pxa27x_udc_shutdown,
-+ .remove = __exit_p(pxa27x_udc_remove),
-+ .suspend = pxa27x_udc_suspend,
-+ .resume = pxa27x_udc_resume,
-+ .driver = {
-+ .owner = THIS_MODULE,
-+ .name = "pxa27x-udc",
-+ },
-+};
-+
-+static int __init udc_init(void)
-+{
-+ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
-+ return platform_driver_probe(&pxa27x_udc_driver, pxa27x_udc_probe);
-+}
-+
-+static void __exit udc_exit(void)
-+{
-+ platform_driver_unregister(&pxa27x_udc_driver);
-+}
-+
-+module_init(udc_init);
-+module_exit(udc_exit);
-+
-+MODULE_DESCRIPTION(DRIVER_DESC);
-+MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell, Rodolfo Giometti");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.h
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.h
-@@ -0,0 +1,304 @@
-+/*
-+ * 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;
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/*
-+ * 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 */
-Index: linux-2.6.24/drivers/usb/gadget/serial.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/serial.c
-+++ linux-2.6.24/drivers/usb/gadget/serial.c
-@@ -1360,20 +1360,20 @@
-
- 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;
-Index: linux-2.6.24/drivers/usb/gadget/zero.c
-===================================================================
---- linux-2.6.24.orig/drivers/usb/gadget/zero.c
-+++ linux-2.6.24/drivers/usb/gadget/zero.c
-@@ -1112,7 +1112,7 @@
- * 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",
-@@ -1122,7 +1122,7 @@
- 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;
-Index: linux-2.6.24/include/asm-arm/arch-pxa/udc.h
-===================================================================
---- linux-2.6.24.orig/include/asm-arm/arch-pxa/udc.h
-+++ linux-2.6.24/include/asm-arm/arch-pxa/udc.h
-@@ -2,6 +2,7 @@
- * linux/include/asm-arm/arch-pxa/udc.h
- *
- */
-+#include <asm/arch/pxa-regs.h>
- #include <asm/mach/udc_pxa2xx.h>
-
- extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info);
-Index: linux-2.6.24/include/linux/usb/gadget.h
-===================================================================
---- linux-2.6.24.orig/include/linux/usb/gadget.h
-+++ linux-2.6.24/include/linux/usb/gadget.h
-@@ -397,10 +397,28 @@
-
- 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);
-@@ -857,7 +875,8 @@
- /* 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.24/patches/pxa27x_overlay-r8.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch
deleted file mode 100644
index 17749a98ba..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch
+++ /dev/null
@@ -1,2439 +0,0 @@
- drivers/video/Kconfig | 18
- drivers/video/Makefile | 1
- drivers/video/pxafb.c | 305 +++++--
- drivers/video/pxafb.h | 65 +
- drivers/video/pxafb_overlay.c | 1525 ++++++++++++++++++++++++++++++++++++
- include/asm-arm/arch-pxa/pxa-regs.h | 111 ++
- 6 files changed, 1969 insertions(+), 56 deletions(-)
-
-Index: linux-2.6.24/drivers/video/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/video/Kconfig
-+++ linux-2.6.24/drivers/video/Kconfig
-@@ -1729,6 +1729,24 @@
-
- If unsure, say N.
-
-+choice
-+ prompt "PXA LCD type"
-+ depends on FB_PXA
-+
-+config FB_PXA_LCD_QVGA
-+ bool "QVGA(320x240)"
-+
-+config FB_PXA_LCD_VGA
-+ bool "VGA (640x480)"
-+
-+endchoice
-+
-+config FB_PXA_OVERLAY
-+ tristate "PXA LCD overlay support"
-+ depends on FB_PXA
-+ ---help---
-+ Frame buffer overlay driver for PXA27x
-+
- config FB_PXA_PARAMETERS
- bool "PXA LCD command line parameters"
- default n
-Index: linux-2.6.24/drivers/video/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/video/Makefile
-+++ linux-2.6.24/drivers/video/Makefile
-@@ -96,6 +96,7 @@
- obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o
- obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o
- obj-$(CONFIG_FB_PXA) += pxafb.o
-+obj-$(CONFIG_FB_PXA_OVERLAY) += pxafb_overlay.o
- obj-$(CONFIG_FB_W100) += w100fb.o
- obj-$(CONFIG_FB_AU1100) += au1100fb.o
- obj-$(CONFIG_FB_AU1200) += au1200fb.o
-Index: linux-2.6.24/drivers/video/pxafb.c
-===================================================================
---- linux-2.6.24.orig/drivers/video/pxafb.c
-+++ linux-2.6.24/drivers/video/pxafb.c
-@@ -59,17 +59,49 @@
- #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB)
- #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP)
-
-+wait_queue_head_t fcs_wait_eof;
-+int fcs_in_eof;
-+static DECLARE_MUTEX(fcs_lcd_sem);
-+
- static void (*pxafb_backlight_power)(int);
- static void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *);
-
- static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *);
--static void set_ctrlr_state(struct pxafb_info *fbi, u_int state);
-+void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state);
-
- #ifdef CONFIG_FB_PXA_PARAMETERS
- #define PXAFB_OPTIONS_SIZE 256
- static char g_options[PXAFB_OPTIONS_SIZE] __devinitdata = "";
- #endif
-
-+static struct pxafb_rgb def_rgb_8 = {
-+ red: { offset: 0, length: 8, },
-+ green: { offset: 0, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgb_16 = {
-+ red: { offset: 11, length: 5, },
-+ green: { offset: 5, length: 6, },
-+ blue: { offset: 0, length: 5, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgb_18 = {
-+ red: { offset: 12, length: 6, },
-+ green: { offset: 6, length: 6, },
-+ blue: { offset: 0, length: 6, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgb_24 = {
-+ red: { offset: 16, length: 8, },
-+ green: { offset: 8, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
- static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state)
- {
- unsigned long flags;
-@@ -209,6 +241,10 @@
- case 4: ret = LCCR3_4BPP; break;
- case 8: ret = LCCR3_8BPP; break;
- case 16: ret = LCCR3_16BPP; break;
-+ case 18: ret = LCCR3_18BPP; break;
-+ case 19: ret = LCCR3_19BPP; break;
-+ case 24: ret = LCCR3_24BPP; break;
-+ case 25: ret = LCCR3_25BPP; break;
- }
- return ret;
- }
-@@ -320,18 +356,34 @@
- * The pixel packing format is described on page 7-11 of the
- * PXA2XX Developer's Manual.
- */
-- if (var->bits_per_pixel == 16) {
-- var->red.offset = 11; var->red.length = 5;
-- var->green.offset = 5; var->green.length = 6;
-- var->blue.offset = 0; var->blue.length = 5;
-- var->transp.offset = var->transp.length = 0;
-- } else {
-- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0;
-- var->red.length = 8;
-- var->green.length = 8;
-- var->blue.length = 8;
-- var->transp.length = 0;
-- }
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ /* 2 pixels per line */
-+ var->red = def_rgb_16.red;
-+ var->green = def_rgb_16.green;
-+ var->blue = def_rgb_16.blue;
-+ var->transp = def_rgb_16.transp;
-+ break;
-+ case 18:
-+ case 19:
-+ var->red = def_rgb_18.red;
-+ var->green = def_rgb_18.green;
-+ var->blue = def_rgb_18.blue;
-+ var->transp = def_rgb_18.transp;
-+ break;
-+ case 24:
-+ case 25:
-+ var->red = def_rgb_24.red;
-+ var->green = def_rgb_24.green;
-+ var->blue = def_rgb_24.blue;
-+ var->transp = def_rgb_24.transp;
-+ break;
-+ default:
-+ var->red = def_rgb_8.red;
-+ var->green = def_rgb_8.green;
-+ var->blue = def_rgb_8.blue;
-+ var->transp = def_rgb_8.transp;
-+ }
-
- #ifdef CONFIG_CPU_FREQ
- pr_debug("pxafb: dma period = %d ps, clock = %d kHz\n",
-@@ -345,7 +397,7 @@
- static inline void pxafb_set_truecolor(u_int is_true_color)
- {
- pr_debug("pxafb: true_color = %d\n", is_true_color);
-- // do your machine-specific setup if needed
-+ /* do your machine-specific setup if needed */
- }
-
- /*
-@@ -360,7 +412,8 @@
-
- pr_debug("pxafb: set_par\n");
-
-- if (var->bits_per_pixel == 16)
-+ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19
-+ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25)
- fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR;
- else if (!fbi->cmap_static)
- fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-@@ -373,12 +426,25 @@
- fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
- }
-
-- fbi->fb.fix.line_length = var->xres_virtual *
-- var->bits_per_pixel / 8;
-- if (var->bits_per_pixel == 16)
-- fbi->palette_size = 0;
-- else
-- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ fbi->fb.fix.line_length = var->xres_virtual * 2;
-+ fbi->palette_size = 0;
-+ break;
-+ case 18:
-+ case 19:
-+ fbi->fb.fix.line_length = var->xres_virtual * 3;
-+ fbi->palette_size = 0;
-+ break;
-+ case 24:
-+ case 25:
-+ fbi->fb.fix.line_length = var->xres_virtual * 4;
-+ fbi->palette_size = 0;
-+ break;
-+ default:
-+ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
-+ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
-+ }
-
- if ((fbi->lccr4 & LCCR4_PAL_FOR_MASK) == LCCR4_PAL_FOR_0)
- palette_mem_size = fbi->palette_size * sizeof(u16);
-@@ -395,7 +461,8 @@
- */
- pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR);
-
-- if (fbi->fb.var.bits_per_pixel == 16)
-+ if (fbi->fb.var.bits_per_pixel == 16 || fbi->fb.var.bits_per_pixel == 18 ||fbi->fb.var.bits_per_pixel == 19
-+ || fbi->fb.var.bits_per_pixel == 24 || fbi->fb.var.bits_per_pixel == 25)
- fb_dealloc_cmap(&fbi->fb.cmap);
- else
- fb_alloc_cmap(&fbi->fb.cmap, 1<<fbi->fb.var.bits_per_pixel, 0);
-@@ -441,7 +508,7 @@
- * 16 bpp mode does not really use the palette, so this will not
- * blank the display in all modes.
- */
--static int pxafb_blank(int blank, struct fb_info *info)
-+int pxafb_blank(int blank, struct fb_info *info)
- {
- struct pxafb_info *fbi = (struct pxafb_info *)info;
- int i;
-@@ -458,19 +525,20 @@
- for (i = 0; i < fbi->palette_size; i++)
- pxafb_setpalettereg(i, 0, 0, 0, 0, info);
-
-- pxafb_schedule_work(fbi, C_DISABLE);
-- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
-+ pxafb_schedule_work(fbi, C_BLANK);
-+ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */
- break;
-
- case FB_BLANK_UNBLANK:
-- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
-+ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */
- if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR ||
- fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
- fb_set_cmap(&fbi->fb.cmap, info);
-- pxafb_schedule_work(fbi, C_ENABLE);
-+ pxafb_schedule_work(fbi, C_UNBLANK);
- }
- return 0;
- }
-+EXPORT_SYMBOL(pxafb_blank);
-
- static int pxafb_mmap(struct fb_info *info,
- struct vm_area_struct *vma)
-@@ -606,6 +674,10 @@
- case 4:
- case 8:
- case 16:
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
- break;
- default:
- printk(KERN_ERR "%s: invalid bit depth %d\n",
-@@ -637,7 +709,10 @@
-
- new_regs.lccr0 = fbi->lccr0 |
- (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |
-- LCCR0_QDM | LCCR0_BM | LCCR0_OUM);
-+#ifdef CONFIG_PXA27x /* Enable overlay for PXA27x */
-+ LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM |
-+#endif
-+ LCCR0_QDM | LCCR0_BM | LCCR0_OUM);
-
- new_regs.lccr1 =
- LCCR1_DisWdth(var->xres) +
-@@ -696,7 +771,7 @@
-
- fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma;
- fbi->dmadesc_fbhigh_cpu->fidr = 0;
-- fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL;
-+ fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL | LDCMD_EOFINT;
-
- fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma;
- fbi->dmadesc_palette_cpu->fidr = 0;
-@@ -708,7 +783,8 @@
- sizeof(u32);
- fbi->dmadesc_palette_cpu->ldcmd |= LDCMD_PAL;
-
-- if (var->bits_per_pixel == 16) {
-+ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19
-+ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) {
- /* palette shouldn't be loaded in true-color mode */
- fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma;
- fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */
-@@ -763,8 +839,8 @@
- }
-
- /*
-- * NOTE! The following functions are purely helpers for set_ctrlr_state.
-- * Do not call them directly; set_ctrlr_state does the correct serialisation
-+ * NOTE! The following functions are purely helpers for pxafb_set_ctrlr_state.
-+ * Do not call them directly; pxafb_set_ctrlr_state does the correct serialisation
- * to ensure that things happen in the right way 100% of time time.
- * -- rmk
- */
-@@ -786,7 +862,8 @@
-
- static void pxafb_setup_gpio(struct pxafb_info *fbi)
- {
-- int gpio, ldd_bits;
-+ int gpio;
-+ int ldd_bits = 0;
- unsigned int lccr0 = fbi->lccr0;
-
- /*
-@@ -796,28 +873,56 @@
- /* 4 bit interface */
- if ((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
- (lccr0 & LCCR0_SDS) == LCCR0_Sngl &&
-- (lccr0 & LCCR0_DPD) == LCCR0_4PixMono)
-+ (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) {
- ldd_bits = 4;
--
-+ }
- /* 8 bit interface */
- else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) ||
- ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
-- (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl))
-+ (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) {
- ldd_bits = 8;
--
-+ }
- /* 16 bit interface */
-- else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
-- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act))
-- ldd_bits = 16;
-+ else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
-+ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) {
-+ switch (fbi->fb.var.bits_per_pixel) {
-+ case 16:
-+#ifdef CONFIG_PXA27x
-+ /* bits 58-77 */
-+ GPDR1 |= (0x3f << 26);
-+ GPDR2 |= 0x00003fff;
-
-+ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
-+ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
-+#endif
-+ ldd_bits = 16;
-+ break;
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
-+#ifdef CONFIG_PXA27x
-+ /* bits 58-77 and 86, 87 */
-+ GPDR1 |= (0x3f << 26);
-+ GPDR2 |= 0x00c03fff;
-+
-+ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
-+ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
-+ GAFR2_U = (GAFR2_U & 0xffff0fff) | 0xa000;
-+#endif
-+ ldd_bits = 25;
-+ break;
-+ }
-+ }
- else {
- printk(KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n");
- return;
- }
-
-- for (gpio = 58; ldd_bits; gpio++, ldd_bits--)
-+ for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) {
- pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT);
-+ }
- pxa_gpio_mode(GPIO74_LCD_FCLK_MD);
- pxa_gpio_mode(GPIO75_LCD_LCLK_MD);
- pxa_gpio_mode(GPIO76_LCD_PCLK_MD);
-@@ -837,6 +942,7 @@
- /* enable LCD controller clock */
- clk_enable(fbi->clk);
-
-+ down(&fcs_lcd_sem);
- /* Sequence from 11.7.10 */
- LCCR3 = fbi->reg_lccr3;
- LCCR2 = fbi->reg_lccr2;
-@@ -847,6 +953,8 @@
- FDADR1 = fbi->fdadr1;
- LCCR0 |= LCCR0_ENB;
-
-+ up(&fcs_lcd_sem);
-+
- pr_debug("FDADR0 0x%08x\n", (unsigned int) FDADR0);
- pr_debug("FDADR1 0x%08x\n", (unsigned int) FDADR1);
- pr_debug("LCCR0 0x%08x\n", (unsigned int) LCCR0);
-@@ -862,6 +970,7 @@
-
- pr_debug("pxafb: disabling LCD controller\n");
-
-+ down(&fcs_lcd_sem);
- set_current_state(TASK_UNINTERRUPTIBLE);
- add_wait_queue(&fbi->ctrlr_wait, &wait);
-
-@@ -871,6 +980,7 @@
-
- schedule_timeout(200 * HZ / 1000);
- remove_wait_queue(&fbi->ctrlr_wait, &wait);
-+ up(&fcs_lcd_sem);
-
- /* disable LCD controller clock */
- clk_disable(fbi->clk);
-@@ -888,6 +998,11 @@
- LCCR0 |= LCCR0_LDM;
- wake_up(&fbi->ctrlr_wait);
- }
-+ if (lcsr & LCSR_EOF && fcs_in_eof) {
-+ LCCR0 |= LCCR0_EFM;
-+ fcs_in_eof = 0;
-+ wake_up(&fcs_wait_eof);
-+ }
-
- LCSR = lcsr;
- return IRQ_HANDLED;
-@@ -898,7 +1013,7 @@
- * sleep when disabling the LCD controller, or if we get two contending
- * processes trying to alter state.
- */
--static void set_ctrlr_state(struct pxafb_info *fbi, u_int state)
-+void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state)
- {
- u_int old_state;
-
-@@ -920,7 +1035,9 @@
- */
- if (old_state != C_DISABLE && old_state != C_DISABLE_PM) {
- fbi->state = state;
-- //TODO __pxafb_lcd_power(fbi, 0);
-+ /* TODO __pxafb_lcd_power(fbi, 0); */
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
- pxafb_disable_controller(fbi);
- }
- break;
-@@ -934,6 +1051,8 @@
- fbi->state = state;
- __pxafb_backlight_power(fbi, 0);
- __pxafb_lcd_power(fbi, 0);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
- if (old_state != C_DISABLE_CLKCHANGE)
- pxafb_disable_controller(fbi);
- }
-@@ -947,7 +1066,9 @@
- if (old_state == C_DISABLE_CLKCHANGE) {
- fbi->state = C_ENABLE;
- pxafb_enable_controller(fbi);
-- //TODO __pxafb_lcd_power(fbi, 1);
-+ /* TODO __pxafb_lcd_power(fbi, 1); */
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
- }
- break;
-
-@@ -959,9 +1080,13 @@
- */
- if (old_state == C_ENABLE) {
- __pxafb_lcd_power(fbi, 0);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
- pxafb_disable_controller(fbi);
- pxafb_setup_gpio(fbi);
- pxafb_enable_controller(fbi);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
- __pxafb_lcd_power(fbi, 1);
- }
- break;
-@@ -987,11 +1112,46 @@
- pxafb_enable_controller(fbi);
- __pxafb_lcd_power(fbi, 1);
- __pxafb_backlight_power(fbi, 1);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
- }
- break;
-+
-+ case C_BLANK:
-+ /*
-+ * Disable controller, blank overlays if exist.
-+ */
-+ if ((old_state != C_DISABLE) && (old_state != C_BLANK)) {
-+ fbi->state = state;
-+ __pxafb_backlight_power(fbi, 0);
-+ __pxafb_lcd_power(fbi, 0);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_BLANK);
-+ if (old_state != C_DISABLE_CLKCHANGE)
-+ pxafb_disable_controller(fbi);
-+ }
-+ break;
-+
-+ case C_UNBLANK:
-+ /*
-+ * Power up the LCD screen, enable controller, and
-+ * turn on the backlight, unblank overlays if exist.
-+ */
-+ if ((old_state != C_ENABLE) && (old_state != C_UNBLANK)) {
-+ fbi->state = C_UNBLANK;
-+ pxafb_setup_gpio(fbi);
-+ pxafb_enable_controller(fbi);
-+ __pxafb_lcd_power(fbi, 1);
-+ __pxafb_backlight_power(fbi, 1);
-+ if(fbi->set_overlay_ctrlr_state)
-+ fbi->set_overlay_ctrlr_state(fbi, C_UNBLANK);
-+ }
-+ break;
-+
- }
- up(&fbi->ctrlr_sem);
- }
-+EXPORT_SYMBOL(pxafb_set_ctrlr_state);
-
- /*
- * Our LCD controller task (which is called when we blank or unblank)
-@@ -1003,7 +1163,7 @@
- container_of(work, struct pxafb_info, task);
- u_int state = xchg(&fbi->task_state, -1);
-
-- set_ctrlr_state(fbi, state);
-+ pxafb_set_ctrlr_state(fbi, state);
- }
-
- #ifdef CONFIG_CPU_FREQ
-@@ -1018,19 +1178,29 @@
- pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data)
- {
- struct pxafb_info *fbi = TO_INF(nb, freq_transition);
-- //TODO struct cpufreq_freqs *f = data;
-+ /* TODO struct cpufreq_freqs *f = data; */
-+ struct cpufreq_freqs *clkinfo;
- u_int pcd;
-+ u_int lccr3;
-
- switch (val) {
- case CPUFREQ_PRECHANGE:
-- set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
-+ pxafb_set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
- break;
-
- case CPUFREQ_POSTCHANGE:
-- pcd = get_pcd(fbi, fbi->fb.var.pixclock);
-+ clkinfo = (struct cpufreq_freqs *)data;
-+ /* If leaving a 13kHz state with the LCD sustained */
-+ if ((clkinfo->old == 13000))
-+ break;
-+
-+ pcd = get_pcd(fbi->fb.var.pixclock);
-+ lccr3 = fbi->reg_lccr3;
- set_hsync_time(fbi, pcd);
- fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
-- set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
-+ pxafb_set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
-+ if (lccr3 != fbi->reg_lccr3 && !((LCCR0 & LCCR0_DIS) || !(LCCR0 & LCCR0_ENB)))
-+ LCCR3 = fbi->reg_lccr3;
- break;
- }
- return 0;
-@@ -1049,7 +1219,7 @@
- printk(KERN_DEBUG "min dma period: %d ps, "
- "new clock %d kHz\n", pxafb_display_dma_period(var),
- policy->max);
-- // TODO: fill in min/max values
-+ /* TODO: fill in min/max values */
- break;
- #if 0
- case CPUFREQ_NOTIFY:
-@@ -1075,7 +1245,7 @@
- {
- struct pxafb_info *fbi = platform_get_drvdata(dev);
-
-- set_ctrlr_state(fbi, C_DISABLE_PM);
-+ pxafb_set_ctrlr_state(fbi, C_DISABLE_PM);
- return 0;
- }
-
-@@ -1083,7 +1253,11 @@
- {
- struct pxafb_info *fbi = platform_get_drvdata(dev);
-
-- set_ctrlr_state(fbi, C_ENABLE_PM);
-+ pxafb_set_ctrlr_state(fbi, C_ENABLE_PM);
-+//RP#ifdef CONFIG_PXA27x
-+//RP LCCR4 |= (1 << 31); /* Disable the PCD Divisor, PCDDIV */
-+//RP LCCR4 |= (5 << 17); /* Undocumented feature */
-+//RP#endif
- return 0;
- }
- #else
-@@ -1197,11 +1371,21 @@
- fbi->task_state = (u_char)-1;
-
- for (i = 0; i < inf->num_modes; i++) {
-- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
-+ if (mode[i].bpp <= 16) { /* 8, 16 bpp */
-+ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
-+ } else if ( mode[i].bpp > 19 ) { /* 24, 25 bpp */
-+ smemlen = mode[i].xres * mode[i].yres * 4;
-+ } else { /* 18, 19 bpp */
-+ /* packed format */
-+ smemlen = mode[i].xres * mode[i].yres * 3;
-+ }
-+
- if (smemlen > fbi->fb.fix.smem_len)
- fbi->fb.fix.smem_len = smemlen;
- }
-
-+ fbi->set_overlay_ctrlr_state = NULL;
-+
- init_waitqueue_head(&fbi->ctrlr_wait);
- INIT_WORK(&fbi->task, pxafb_task);
- init_MUTEX(&fbi->ctrlr_sem);
-@@ -1268,6 +1452,10 @@
- case 4:
- case 8:
- case 16:
-+ case 18:
-+ case 19:
-+ case 24:
-+ case 25:
- inf->modes[0].bpp = bpp;
- dev_info(dev, "overriding bit depth: %d\n", bpp);
- break;
-@@ -1416,7 +1604,7 @@
- fbi = pxafb_init_fbinfo(&dev->dev);
- if (!fbi) {
- dev_err(&dev->dev, "Failed to initialize framebuffer device\n");
-- ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc
-+ ret = -ENOMEM; /* only reason for pxafb_init_fbinfo to fail is kmalloc */
- goto failed;
- }
-
-@@ -1451,7 +1639,7 @@
- }
-
- #ifdef CONFIG_PM
-- // TODO
-+ /* TODO */
- #endif
-
- #ifdef CONFIG_CPU_FREQ
-@@ -1464,7 +1652,12 @@
- /*
- * Ok, now enable the LCD controller
- */
-- set_ctrlr_state(fbi, C_ENABLE);
-+ pxafb_set_ctrlr_state(fbi, C_ENABLE);
-+//#ifdef CONFIG_PXA27x
-+// LCCR4 |= (1 << 31); /* Disabel the PCD Divisor, PCDDIV */
-+// LCCR4 |= (5 << 17); /* Undocumented feature */
-+//#endif
-+ init_waitqueue_head(&fcs_wait_eof);
-
- return 0;
-
-Index: linux-2.6.24/drivers/video/pxafb.h
-===================================================================
---- linux-2.6.24.orig/drivers/video/pxafb.h
-+++ linux-2.6.24/drivers/video/pxafb.h
-@@ -29,6 +29,60 @@
- unsigned int lccr3;
- };
-
-+struct pxafb_rgb {
-+ struct fb_bitfield red;
-+ struct fb_bitfield green;
-+ struct fb_bitfield blue;
-+ struct fb_bitfield transp;
-+};
-+
-+#ifdef CONFIG_PXA27x
-+/* PXA Overlay Framebuffer Support */
-+struct overlayfb_info
-+{
-+ struct fb_info fb;
-+
-+ struct fb_var_screeninfo old_var;
-+
-+ struct semaphore mutex;
-+ unsigned long refcount;
-+
-+ struct pxafb_info *basefb;
-+
-+ unsigned long map_cpu;
-+ unsigned long screen_cpu;
-+ unsigned long palette_cpu;
-+ unsigned long map_size;
-+ unsigned long palette_size;
-+
-+ dma_addr_t screen_dma;
-+ dma_addr_t map_dma;
-+ dma_addr_t palette_dma;
-+
-+ volatile u_char state;
-+
-+ /* overlay specific info */
-+ unsigned long xpos; /* screen position (x, y)*/
-+ unsigned long ypos;
-+ unsigned long format;
-+
-+ /* additional */
-+ union {
-+ struct pxafb_dma_descriptor *dma0;
-+ struct pxafb_dma_descriptor *dma1;
-+ struct {
-+ struct pxafb_dma_descriptor *dma2;
-+ struct pxafb_dma_descriptor *dma3;
-+ struct pxafb_dma_descriptor *dma4;
-+ };
-+ struct {
-+ struct pxafb_dma_descriptor *dma5_pal;
-+ struct pxafb_dma_descriptor *dma5_frame;
-+ };
-+ };
-+};
-+#endif
-+
- /* PXA LCD DMA descriptor */
- struct pxafb_dma_descriptor {
- unsigned int fdadr;
-@@ -90,6 +144,14 @@
- wait_queue_head_t ctrlr_wait;
- struct work_struct task;
-
-+#ifdef CONFIG_PXA27x
-+ /* PXA Overlay Framebuffer Support */
-+ struct overlayfb_info *overlay1fb;
-+ struct overlayfb_info *overlay2fb;
-+ struct overlayfb_info *cursorfb;
-+#endif
-+ void (*set_overlay_ctrlr_state)(struct pxafb_info *, u_int);
-+
- #ifdef CONFIG_CPU_FREQ
- struct notifier_block freq_transition;
- struct notifier_block freq_policy;
-@@ -109,6 +171,9 @@
- #define C_DISABLE_PM (5)
- #define C_ENABLE_PM (6)
- #define C_STARTUP (7)
-+#define C_BLANK (8)
-+#define C_UNBLANK (9)
-+
-
- #define PXA_NAME "PXA"
-
-Index: linux-2.6.24/drivers/video/pxafb_overlay.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/video/pxafb_overlay.c
-@@ -0,0 +1,1525 @@
-+/*
-+ * linux/drivers/video/pxafb_overlay.c
-+ *
-+ * Copyright (c) 2004, Intel Corporation
-+ *
-+ * Code Status:
-+ * 2004/10/28: <yan.yin@intel.com>
-+ * - Ported to 2.6 kernel
-+ * - Made overlay driver a loadable module
-+ * - Merged overlay optimized patch
-+ * 2004/03/10: <stanley.cai@intel.com>
-+ * - Fixed Bugs
-+ * - Added workaround for overlay1&2
-+ * 2003/08/27: <yu.tang@intel.com>
-+ * - Added Overlay 1 & Overlay2 & Hardware Cursor support
-+ *
-+ *
-+ * This software program is licensed subject to the GNU Lesser General
-+ * Public License (LGPL). Version 2.1, February 1999, available at
-+ * http://www.gnu.org/copyleft/lesser.html
-+ *
-+ * Intel PXA27x LCD Controller Frame Buffer Overlay Driver
-+ *
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/interrupt.h>
-+#include <linux/slab.h>
-+#include <linux/fb.h>
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/cpufreq.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <linux/dma-mapping.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/uaccess.h>
-+#include <asm/arch/bitfield.h>
-+#include <asm/arch/pxafb.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+#include "pxafb.h"
-+
-+/* LCD enhancement : Overlay 1 & 2 & Hardware Cursor */
-+
-+/*
-+ * LCD enhancement : Overlay 1
-+ *
-+ * Features:
-+ * - support 16bpp (No palette)
-+ */
-+/*
-+ * debugging?
-+ */
-+#define DEBUG 0
-+
-+#ifdef DEBUG
-+#define dbg(fmt,arg...) printk(KERN_ALERT "%s(): " fmt "\n", __FUNCTION__, ##arg)
-+#else
-+#define dbg(fmt,arg...)
-+#endif
-+
-+static int overlay1fb_enable(struct fb_info *info);
-+static int overlay2fb_enable(struct fb_info *info);
-+static int cursorfb_enable(struct fb_info *info);
-+
-+static int overlay1fb_disable(struct fb_info *info);
-+static int overlay2fb_disable(struct fb_info *info);
-+static int cursorfb_disable(struct fb_info *info);
-+
-+static int overlay1fb_blank(int blank, struct fb_info *info);
-+static int overlay2fb_blank(int blank, struct fb_info *info);
-+static int cursorfb_blank(int blank, struct fb_info *info);
-+
-+extern void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state);
-+extern int pxafb_blank(int blank, struct fb_info *info);
-+
-+static struct pxafb_rgb def_rgb_18 = {
-+ red: { offset: 12, length: 6, },
-+ green: { offset: 6, length: 6, },
-+ blue: { offset: 0, length: 6, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_16 = {
-+ red: { offset: 10, length: 5, },
-+ green: { offset: 5, length: 5, },
-+ blue: { offset: 0, length: 5, },
-+ transp: { offset: 15, length: 1, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_19 = {
-+ red: { offset: 12, length: 6, },
-+ green: { offset: 6, length: 6, },
-+ blue: { offset: 0, length: 6, },
-+ transp: { offset: 18, length: 1, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_24 = {
-+ red: { offset: 16, length: 7, },
-+ green: { offset: 8, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 0, length: 0, },
-+};
-+
-+static struct pxafb_rgb def_rgbt_25 = {
-+ red: { offset: 16, length: 8, },
-+ green: { offset: 8, length: 8, },
-+ blue: { offset: 0, length: 8, },
-+ transp: { offset: 24, length: 1, },
-+};
-+
-+#define CLEAR_LCD_INTR(reg, intr) do { \
-+ reg = (intr); \
-+}while(0)
-+
-+#define WAIT_FOR_LCD_INTR(reg,intr,timeout) ({ \
-+ int __done =0; \
-+ int __t = timeout; \
-+ while (__t) { \
-+ __done = (reg) & (intr); \
-+ if (__done) break; \
-+ mdelay(10); \
-+ __t--; \
-+ } \
-+ if (!__t) dbg("wait " #intr " timeount");\
-+ __done; \
-+})
-+
-+#define DISABLE_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \
-+ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \
-+ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \
-+ cursorfb_disable((struct fb_info*)fbi->cursorfb); \
-+ } \
-+}while(0)
-+
-+#define ENABLE_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_DISABLE)) { \
-+ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_DISABLE)) { \
-+ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_DISABLE)) { \
-+ cursorfb_enable((struct fb_info*)fbi->cursorfb); \
-+ } \
-+}while(0)
-+
-+#define BLANK_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \
-+ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \
-+ fbi->overlay1fb->state = C_BLANK; \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \
-+ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \
-+ fbi->overlay2fb->state = C_BLANK; \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \
-+ cursorfb_disable((struct fb_info*)fbi->cursorfb); \
-+ fbi->cursorfb->state = C_BLANK; \
-+ } \
-+}while(0)
-+
-+#define UNBLANK_OVERLAYS(fbi) do { \
-+ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_BLANK)) { \
-+ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \
-+ fbi->overlay1fb->state = C_ENABLE; \
-+ } \
-+ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_BLANK)) { \
-+ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \
-+ fbi->overlay2fb->state = C_ENABLE; \
-+ } \
-+ if (fbi->cursorfb && (fbi->cursorfb->state == C_BLANK)) { \
-+ cursorfb_enable((struct fb_info*)fbi->cursorfb); \
-+ fbi->cursorfb->state = C_ENABLE; \
-+ } \
-+}while(0)
-+
-+static int overlay1fb_open(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int ret = 0;
-+
-+/* If basefb is disable, enable fb. */
-+ if (fbi->basefb && fbi->basefb->state != C_ENABLE)
-+ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb));
-+
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ ret = -EACCES;
-+ else
-+ fbi->refcount ++;
-+
-+ up(&fbi->mutex);
-+
-+ /* Initialize the variables in overlay1 framebuffer. */
-+ fbi->fb.var.xres = fbi->fb.var.yres = 0;
-+ fbi->fb.var.bits_per_pixel = 0;
-+
-+ return ret;
-+}
-+
-+static int overlay1fb_release(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ fbi->refcount --;
-+
-+ up(&fbi->mutex);
-+ /* disable overlay when released */
-+ overlay1fb_blank(1, info);
-+
-+ return 0;
-+}
-+
-+static int overlay1fb_map_video_memory(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+
-+ if (fbi->map_cpu)
-+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
-+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
-+
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+
-+ if (!fbi->map_cpu) return -ENOMEM;
-+
-+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
-+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
-+
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+
-+ /* setup dma descriptor */
-+ fbi->dma1 = (struct pxafb_dma_descriptor*)
-+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
-+
-+ fbi->dma1->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma1->fsadr = fbi->screen_dma;
-+ fbi->dma1->fidr = 0;
-+ fbi->dma1->ldcmd = fbi->fb.fix.smem_len;
-+
-+ return 0;
-+}
-+
-+static int overlay1fb_enable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ unsigned long bpp1;
-+
-+ if (!fbi->map_cpu) return -EINVAL;
-+
-+ switch (fbi->fb.var.bits_per_pixel) {
-+ case 16:
-+ bpp1 = 0x4;
-+ break;
-+ case 18:
-+ bpp1 = 0x6;
-+ break;
-+ case 19:
-+ bpp1 = 0x8;
-+ break;
-+ case 24:
-+ bpp1 = 0x9;
-+ break;
-+ case 25:
-+ bpp1 = 0xa;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ /* disable branch/start/end of frame interrupt */
-+ LCCR5 |= (LCCR5_IUM1 | LCCR5_BSM1 | LCCR5_EOFM1 | LCCR5_SOFM1);
-+
-+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK)
-+ FDADR1 = (fbi->dma1->fdadr);
-+ else
-+ FBR1 = fbi->dma1->fdadr | 0x1;
-+
-+ /* enable overlay 1 window */
-+ OVL1C2 = (fbi->ypos << 10) | fbi->xpos;
-+ OVL1C1 = OVL1C1_O1EN | (bpp1 << 20) | ((fbi->fb.var.yres-1)<<10) | (fbi->fb.var.xres-1);
-+
-+ fbi->state = C_ENABLE;
-+
-+ return 0;
-+}
-+
-+static int overlay1fb_disable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
-+ int done;
-+
-+ if ((fbi->state == C_DISABLE) || (fbi->state == C_BLANK))
-+ return 0;
-+
-+ fbi->state = C_DISABLE;
-+
-+ /* clear O1EN */
-+ OVL1C1 &= ~OVL1C1_O1EN;
-+
-+ CLEAR_LCD_INTR(LCSR1, LCSR1_BS1);
-+ FBR1 = 0x3;
-+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS1, 100);
-+
-+ if (!done) {
-+ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+static int overlay1fb_blank(int blank, struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int err=0;
-+
-+ switch (blank) {
-+ case 0:
-+ err = overlay1fb_enable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ case 1:
-+ err = overlay1fb_disable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+static int overlay1fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ int xpos, ypos;
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+
-+ /* must in base frame */
-+ xpos = (var->nonstd & 0x3ff);
-+ ypos = ((var->nonstd>>10) & 0x3ff);
-+
-+ if ( (xpos + var->xres) > fbi->basefb->fb.var.xres )
-+ return -EINVAL;
-+
-+ if ( (ypos + var->yres) > fbi->basefb->fb.var.yres )
-+ return -EINVAL;
-+
-+ switch (var->bits_per_pixel) {
-+ case 16:
-+ if ( var->xres & 0x1 ) {
-+ printk("xres should be a multiple of 2 pixels!\n");
-+ return -EINVAL;
-+ }
-+ break;
-+ case 18:
-+ case 19:
-+ if ( var->xres & 0x7 ) {
-+ printk("xres should be a multiple of 8 pixels!\n");
-+ return -EINVAL;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ fbi->old_var=*var;
-+
-+ var->activate=FB_ACTIVATE_NOW;
-+
-+ return 0;
-+}
-+
-+
-+static int overlay1fb_set_par(struct fb_info *info)
-+{
-+ int nbytes=0, err=0, pixels_per_line=0;
-+
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+
-+ info->flags &= ~FBINFO_MISC_USEREVENT;
-+
-+ if (fbi->state == C_BLANK)
-+ return 0;
-+
-+ if (fbi->state == C_DISABLE)
-+ goto out1;
-+
-+ /* only xpos & ypos change */
-+ if ( (var->xres == fbi->old_var.xres) &&
-+ (var->yres == fbi->old_var.yres) &&
-+ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) )
-+ goto out2;
-+
-+out1:
-+ switch(var->bits_per_pixel) {
-+ case 16:
-+ /* 2 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1);
-+ nbytes = 2;
-+
-+ var->red = def_rgbt_16.red;
-+ var->green = def_rgbt_16.green;
-+ var->blue = def_rgbt_16.blue;
-+ var->transp = def_rgbt_16.transp;
-+
-+ break;
-+ case 18:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgb_18.red;
-+ var->green = def_rgb_18.green;
-+ var->blue = def_rgb_18.blue;
-+ var->transp = def_rgb_18.transp;
-+
-+ break;
-+ case 19:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgbt_19.red;
-+ var->green = def_rgbt_19.green;
-+ var->blue = def_rgbt_19.blue;
-+ var->transp = def_rgbt_19.transp;
-+
-+ break;
-+ case 24:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_24.red;
-+ var->green = def_rgbt_24.green;
-+ var->blue = def_rgbt_24.blue;
-+ var->transp = def_rgbt_24.transp;
-+
-+ break;
-+ case 25:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_25.red;
-+ var->green = def_rgbt_25.green;
-+ var->blue = def_rgbt_25.blue;
-+ var->transp = def_rgbt_25.transp;
-+
-+ break;
-+ }
-+
-+ fbi->fb.fix.line_length = nbytes * pixels_per_line;
-+ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres;
-+
-+ err= overlay1fb_map_video_memory((struct fb_info*)fbi);
-+
-+ if (err)
-+ return err;
-+
-+out2:
-+ fbi->xpos = var->nonstd & 0x3ff;
-+ fbi->ypos = (var->nonstd>>10) & 0x3ff;
-+
-+ overlay1fb_enable(info);
-+
-+ return 0;
-+
-+}
-+
-+static struct fb_ops overlay1fb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = overlay1fb_open,
-+ .fb_release = overlay1fb_release,
-+ .fb_check_var = overlay1fb_check_var,
-+ .fb_set_par = overlay1fb_set_par,
-+ .fb_blank = overlay1fb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+};
-+
-+ /*
-+ * LCD enhancement : Overlay 2
-+ *
-+ * Features:
-+ * - support planar YCbCr420/YCbCr422/YCbCr444;
-+ */
-+static int overlay2fb_open(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int ret = 0;
-+
-+ /* if basefb is disable, enable fb. */
-+ if (fbi->basefb && fbi->basefb->state != C_ENABLE)
-+ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb));
-+
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ ret = -EACCES;
-+ else
-+ fbi->refcount ++;
-+
-+ up(&fbi->mutex);
-+ fbi->fb.var.xres = fbi->fb.var.yres = 0;
-+
-+ return ret;
-+}
-+
-+static int overlay2fb_release(struct fb_info *info, int user)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+
-+ down(&fbi->mutex);
-+
-+ if (fbi->refcount)
-+ fbi->refcount --;
-+
-+ up(&fbi->mutex);
-+
-+ /* disable overlay when released */
-+ overlay2fb_blank(1, info);
-+
-+ return 0;
-+}
-+
-+static int overlay2fb_map_YUV_memory( struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ unsigned int ylen, cblen, crlen, aylen, acblen, acrlen;
-+ unsigned int yoff, cboff, croff;
-+ unsigned int xres,yres;
-+ unsigned int nbytes;
-+
-+ ylen = cblen = crlen = aylen = acblen = acrlen = 0;
-+ yoff = cboff = croff = 0;
-+
-+ if (fbi->map_cpu)
-+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
-+
-+ yres = fbi->fb.var.yres;
-+
-+ switch(fbi->format) {
-+ case 0x4: /* YCbCr 4:2:0 planar */
-+ pr_debug("420 planar\n");
-+ /* 16 pixels per line */
-+ xres = (fbi->fb.var.xres + 0xf) & (~0xf);
-+ fbi->fb.fix.line_length = xres;
-+
-+ nbytes = xres * yres;
-+ ylen = nbytes;
-+ cblen = crlen = (nbytes/4);
-+
-+ break;
-+ case 0x3: /* YCbCr 4:2:2 planar */
-+ /* 8 pixles per line */
-+ pr_debug("422 planar\n");
-+ xres = (fbi->fb.var.xres + 0x7) & (~0x7);
-+ fbi->fb.fix.line_length = xres;
-+
-+ nbytes = xres * yres;
-+ ylen = nbytes;
-+ cblen = crlen = (nbytes/2);
-+
-+ break;
-+ case 0x2: /* YCbCr 4:4:4 planar */
-+ /* 4 pixels per line */
-+ pr_debug("444 planar\n");
-+ xres = (fbi->fb.var.xres + 0x3) & (~0x3);
-+ fbi->fb.fix.line_length = xres;
-+
-+ nbytes = xres * yres;
-+ ylen = cblen = crlen = nbytes;
-+ break;
-+ }
-+
-+ /* 16-bytes alignment for DMA */
-+ aylen = (ylen + 0xf) & (~0xf);
-+ acblen = (cblen + 0xf) & (~0xf);
-+ acrlen = (crlen + 0xf) & (~0xf);
-+
-+ fbi->fb.fix.smem_len = aylen + acblen + acrlen;
-+
-+ /* alloc memory */
-+
-+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+
-+ if (!fbi->map_cpu) return -ENOMEM;
-+
-+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
-+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
-+
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+
-+ /* setup dma for Planar format */
-+ fbi->dma2 = (struct pxafb_dma_descriptor*)
-+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma3 = fbi->dma2 - 1;
-+ fbi->dma4 = fbi->dma3 - 1;
-+
-+ /* offset */
-+ yoff = 0;
-+ cboff = aylen;
-+ croff = cboff + acblen;
-+
-+ /* Y vector */
-+ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma2->fsadr = fbi->screen_dma + yoff;
-+ fbi->dma2->fidr = 0;
-+ fbi->dma2->ldcmd = ylen;
-+
-+ /* Cb vector */
-+ fbi->dma3->fdadr = (fbi->dma2->fdadr - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma3->fsadr = (fbi->screen_dma + cboff);
-+ fbi->dma3->fidr = 0;
-+ fbi->dma3->ldcmd = cblen;
-+
-+ /* Cr vector */
-+
-+ fbi->dma4->fdadr = (fbi->dma3->fdadr - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma4->fsadr = (fbi->screen_dma + croff);
-+ fbi->dma4->fidr = 0;
-+ fbi->dma4->ldcmd = crlen;
-+
-+ /* adjust for user */
-+ fbi->fb.var.red.length = ylen;
-+ fbi->fb.var.red.offset = yoff;
-+ fbi->fb.var.green.length = cblen;
-+ fbi->fb.var.green.offset = cboff;
-+ fbi->fb.var.blue.length = crlen;
-+ fbi->fb.var.blue.offset = croff;
-+
-+ return 0;
-+};
-+
-+static int overlay2fb_map_RGB_memory( struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+ int pixels_per_line=0 , nbytes=0;
-+
-+ if (fbi->map_cpu)
-+ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
-+
-+ switch(var->bits_per_pixel) {
-+ case 16:
-+ /* 2 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1);
-+ nbytes = 2;
-+
-+ var->red = def_rgbt_16.red;
-+ var->green = def_rgbt_16.green;
-+ var->blue = def_rgbt_16.blue;
-+ var->transp = def_rgbt_16.transp;
-+ break;
-+
-+ case 18:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgb_18.red;
-+ var->green = def_rgb_18.green;
-+ var->blue = def_rgb_18.blue;
-+ var->transp = def_rgb_18.transp;
-+
-+ break;
-+ case 19:
-+ /* 8 pixels per line */
-+ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
-+ nbytes = 3;
-+
-+ var->red = def_rgbt_19.red;
-+ var->green = def_rgbt_19.green;
-+ var->blue = def_rgbt_19.blue;
-+ var->transp = def_rgbt_19.transp;
-+
-+ break;
-+ case 24:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_24.red;
-+ var->green = def_rgbt_24.green;
-+ var->blue = def_rgbt_24.blue;
-+ var->transp = def_rgbt_24.transp;
-+
-+ break;
-+
-+ case 25:
-+ pixels_per_line = fbi->fb.var.xres;
-+ nbytes = 4;
-+
-+ var->red = def_rgbt_25.red;
-+ var->green = def_rgbt_25.green;
-+ var->blue = def_rgbt_25.blue;
-+ var->transp = def_rgbt_25.transp;
-+
-+ break;
-+ }
-+
-+ fbi->fb.fix.line_length = nbytes * pixels_per_line;
-+ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres;
-+
-+ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+
-+ if (!fbi->map_cpu) return -ENOMEM;
-+
-+ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
-+ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
-+
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+
-+ /* setup dma descriptor */
-+ fbi->dma2 = (struct pxafb_dma_descriptor*)
-+ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
-+
-+ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
-+ fbi->dma2->fsadr = fbi->screen_dma;
-+ fbi->dma2->fidr = 0;
-+ fbi->dma2->ldcmd = fbi->fb.fix.smem_len;
-+
-+ return 0;
-+}
-+
-+static int overlay2fb_enable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ unsigned long bpp2;
-+ unsigned int xres, yres;
-+
-+ if (!fbi->map_cpu) return -EINVAL;
-+
-+ switch(fbi->fb.var.bits_per_pixel) {
-+ case 16:
-+ bpp2 = 0x4;
-+ break;
-+ case 18:
-+ bpp2 = 0x6;
-+ break;
-+ case 19:
-+ bpp2 = 0x8;
-+ break;
-+ case 24:
-+ bpp2 = 0x9;
-+ break;
-+ case 25:
-+ bpp2 = 0xa;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ /* disable branch/start/end of frame interrupt */
-+ LCCR5 |= (LCCR5_IUM4 | LCCR5_IUM3 | LCCR5_IUM2 |
-+ LCCR5_BSM4 | LCCR5_BSM3 | LCCR5_BSM2 |
-+ LCCR5_EOFM4 | LCCR5_EOFM3 | LCCR5_EOFM2 |
-+ LCCR5_SOFM4 | LCCR5_SOFM3 | LCCR5_SOFM2);
-+
-+ if (fbi->format == 0) {
-+ /* overlay2 RGB resolution, RGB and YUV have different xres value*/
-+ xres = fbi->fb.var.xres;
-+ yres = fbi->fb.var.yres;
-+
-+ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos;
-+ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1);
-+ /* setup RGB DMA */
-+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK)
-+ FDADR2 = fbi->dma2->fdadr;
-+ else
-+ FBR2 = fbi->dma2->fdadr | 0x1;
-+ } else {
-+ /* overlay2 YUV resolution */
-+ xres = fbi->fb.fix.line_length;
-+ yres = fbi->fb.var.yres;
-+
-+ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos;
-+ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1);
-+
-+ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) {
-+ FDADR2 = fbi->dma2->fdadr;
-+ FDADR3 = fbi->dma3->fdadr;
-+ FDADR4 = fbi->dma4->fdadr;
-+ } else {
-+ FBR2 = fbi->dma2->fdadr | 0x01;
-+ FBR3 = fbi->dma3->fdadr | 0x01;
-+ FBR4 = fbi->dma4->fdadr | 0x01;
-+ }
-+ }
-+
-+ fbi->state = C_ENABLE;
-+ return 0;
-+}
-+
-+static int overlay2fb_disable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
-+ int done;
-+
-+ if (fbi->state == C_DISABLE)
-+ return 0;
-+ if (fbi->state == C_BLANK) {
-+ fbi->state = C_DISABLE;
-+ return 0;
-+ }
-+
-+ fbi->state = C_DISABLE;
-+
-+ /* clear O2EN */
-+ OVL2C1 &= ~OVL2C1_O2EN;
-+
-+ /* Make overlay2 can't disable/enable
-+ * correctly sometimes.
-+ */
-+ CLEAR_LCD_INTR(LCSR1, LCSR1_BS2);
-+
-+ if (fbi->format == 0)
-+ FBR2 = 0x3;
-+ else {
-+ FBR2 = 0x3;
-+ FBR3 = 0x3;
-+ FBR4 = 0x3;
-+ }
-+
-+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS2, 100);
-+
-+ if (!done) {
-+ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+static int overlay2fb_blank(int blank, struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ int err=0;
-+
-+ switch(blank)
-+ {
-+ case 0:
-+ err = overlay2fb_enable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ case 1:
-+ err = overlay2fb_disable(info);
-+ if (err) {
-+ fbi->state = C_DISABLE;
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+ }
-+ break;
-+ default:
-+ /* reserved */
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+
-+static int overlay2fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ int xpos, ypos, xres, yres;
-+ int format;
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+
-+ xres=yres=0;
-+
-+ xpos = (var->nonstd & 0x3ff);
-+ ypos = (var->nonstd >> 10) & 0x3ff;
-+ format = (var->nonstd >>20) & 0x7;
-+
-+
-+ /* Palnar YCbCr444, YCbCr422, YCbCr420 */
-+ if ( (format != 0x4) && (format != 0x3) && (format != 0x2) && (format !=0x0))
-+ return -EINVAL;
-+
-+ /* dummy pixels */
-+ switch(format) {
-+ case 0x0: /* RGB */
-+ xres = var->xres;
-+ break;
-+ case 0x2: /* 444 */
-+ xres = (var->xres + 0x3) & ~(0x3);
-+ break;
-+ case 0x3: /* 422 */
-+ xres = (var->xres + 0x7) & ~(0x7);
-+ break;
-+ case 0x4: /* 420 */
-+ xres = (var->xres + 0xf) & ~(0xf);
-+ break;
-+ }
-+ yres = var->yres;
-+
-+ if ( (xpos + xres) > fbi->basefb->fb.var.xres )
-+ return -EINVAL;
-+
-+ if ( (ypos + yres) > fbi->basefb->fb.var.yres )
-+ return -EINVAL;
-+
-+ fbi->old_var=*var;
-+
-+ var->activate=FB_ACTIVATE_NOW;
-+
-+ return 0;
-+
-+}
-+
-+
-+/*
-+ * overlay2fb_set_var()
-+ *
-+ * var.nonstd is used as YCbCr format.
-+ * var.red/green/blue is used as (Y/Cb/Cr) vector
-+ */
-+
-+static int overlay2fb_set_par(struct fb_info *info)
-+{
-+ unsigned int xpos, ypos;
-+ int format, err;
-+
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+
-+ info->flags &= ~FBINFO_MISC_USEREVENT;
-+
-+ if (fbi->state == C_BLANK)
-+ return 0;
-+
-+ if (fbi->state == C_DISABLE)
-+ goto out1;
-+
-+ if ( (var->xres == fbi->old_var.xres) &&
-+ (var->yres == fbi->old_var.yres) &&
-+ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) &&
-+ (((var->nonstd>>20) & 0x7) == fbi->format) )
-+ goto out2;
-+
-+out1:
-+ xpos = var->nonstd & 0x3ff;
-+ ypos = (var->nonstd>>10) & 0x3ff;
-+ format = (var->nonstd>>20) & 0x7;
-+
-+
-+ fbi->format = format;
-+ if ( fbi->format==0 )
-+ err = overlay2fb_map_RGB_memory(info);
-+ else
-+ err = overlay2fb_map_YUV_memory(info);
-+
-+ if (err) return err;
-+
-+out2:
-+ /* position */
-+ fbi->xpos = var->nonstd & 0x3ff;
-+ fbi->ypos = (var->nonstd>>10) & 0x3ff;
-+
-+ overlay2fb_enable(info);
-+
-+ return 0;
-+}
-+
-+static struct fb_ops overlay2fb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = overlay2fb_open,
-+ .fb_release = overlay2fb_release,
-+ .fb_check_var = overlay2fb_check_var,
-+ .fb_set_par = overlay2fb_set_par,
-+ .fb_blank = overlay2fb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+};
-+
-+/* Hardware cursor */
-+
-+/* Bulverde Cursor Modes */
-+struct cursorfb_mode{
-+ int xres;
-+ int yres;
-+ int bpp;
-+};
-+
-+static struct cursorfb_mode cursorfb_modes[]={
-+ { 32, 32, 2},
-+ { 32, 32, 2},
-+ { 32, 32, 2},
-+ { 64, 64, 2},
-+ { 64, 64, 2},
-+ { 64, 64, 2},
-+ {128, 128, 1},
-+ {128, 128, 1}
-+};
-+
-+static int cursorfb_enable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+
-+ if (!fbi->map_cpu) return -EINVAL;
-+
-+ CCR &= ~CCR_CEN;
-+
-+ /* set palette format
-+ *
-+ * FIXME: if only cursor uses palette
-+ */
-+ LCCR4 = (LCCR4 & (~(0x3<<15))) | (0x1<<15);
-+
-+ /* disable branch/start/end of frame interrupt */
-+ LCCR5 |= (LCCR5_IUM5 | LCCR5_BSM5 | LCCR5_EOFM5 | LCCR5_SOFM5);
-+
-+ /* load palette and frame data */
-+ if (fbi->state == C_DISABLE) {
-+ FDADR5 = fbi->dma5_pal->fdadr;
-+ udelay(1);
-+ FDADR5 = fbi->dma5_frame->fdadr;
-+ udelay(1);
-+
-+ }
-+ else {
-+ FBR5 = fbi->dma5_pal->fdadr | 0x1;
-+ udelay(1);
-+ FBR5 = fbi->dma5_frame->fdadr | 0x1;
-+ udelay(1);
-+ }
-+
-+ CCR = CCR_CEN | (fbi->ypos << 15) | (fbi->xpos << 5) | (fbi->format);
-+
-+ fbi->state = C_ENABLE;
-+
-+ return 0;
-+}
-+
-+static int cursorfb_disable(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
-+ int done, ret = 0;
-+
-+ fbi->state = C_DISABLE;
-+
-+ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS5, 100);
-+ if (!done) ret = -1;
-+
-+ CCR &= ~CCR_CEN;
-+
-+ return ret;
-+}
-+
-+static int cursorfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-+ u_int trans, struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info *)info;
-+ u_int val, ret = 1;
-+ u_int *pal=(u_int*) fbi->palette_cpu;
-+
-+ /* 25bit with Transparcy for 16bpp format */
-+ if (regno < fbi->palette_size) {
-+ val = ((trans << 24) & 0x1000000);
-+ val |= ((red << 16) & 0x0ff0000);
-+ val |= ((green << 8 ) & 0x000ff00);
-+ val |= ((blue << 0) & 0x00000ff);
-+
-+ pal[regno] = val;
-+ ret = 0;
-+ }
-+ return ret;
-+}
-+
-+int cursorfb_blank(int blank, struct fb_info *info)
-+{
-+ switch(blank)
-+ {
-+ case 0:
-+ cursorfb_enable(info);
-+ break;
-+ case 1:
-+ cursorfb_disable(info);
-+ break;
-+ default:
-+ /* reserved */
-+ break;
-+ }
-+ return 0;
-+}
-+
-+static int cursorfb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ int xpos, ypos, xres, yres;
-+ int mode;
-+ struct cursorfb_mode *cursor;
-+ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
-+
-+ mode = var->nonstd & 0x7;
-+ xpos = (var->nonstd>>5) & 0x3ff;
-+ ypos = (var->nonstd>>15) & 0x3ff;
-+
-+ if (mode>7 || mode <0 )
-+ return -EINVAL;
-+
-+ cursor = cursorfb_modes + mode;
-+
-+ xres = cursor->xres;
-+ yres = cursor->yres;
-+
-+ if ( (xpos + xres) > fbi->basefb->fb.var.xres )
-+ return -EINVAL;
-+
-+ if ( (ypos + yres) > fbi->basefb->fb.var.yres )
-+ return -EINVAL;
-+
-+ return 0;
-+
-+}
-+
-+static int cursorfb_set_par(struct fb_info *info)
-+{
-+ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
-+ struct fb_var_screeninfo *var = &fbi->fb.var;
-+ struct cursorfb_mode *cursor;
-+ int mode, xpos, ypos;
-+ int err;
-+
-+ info->flags &= ~FBINFO_MISC_USEREVENT;
-+
-+ mode = var->nonstd & 0x7;
-+ xpos = (var->nonstd>>5) & 0x3ff;
-+ ypos = (var->nonstd>>15) & 0x3ff;
-+
-+ if (mode != fbi->format) {
-+ cursor = cursorfb_modes + mode;
-+
-+ /* update "var" info */
-+ fbi->fb.var.xres = cursor->xres;
-+ fbi->fb.var.yres = cursor->yres;
-+ fbi->fb.var.bits_per_pixel = cursor->bpp;
-+
-+ /* alloc video memory
-+ *
-+ * 4k is engouh for 128x128x1 cursor,
-+ * - 2k for cursor pixels,
-+ * - 2k for palette data, plus 2 dma descriptor
-+ */
-+ if (!fbi->map_cpu) {
-+ fbi->map_size = PAGE_SIZE;
-+ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
-+ &fbi->map_dma, GFP_KERNEL );
-+ if (!fbi->map_cpu) return -ENOMEM;
-+ }
-+
-+ cursor = cursorfb_modes + mode;
-+
-+ /* update overlay & fix "info" */
-+ fbi->screen_cpu = fbi->map_cpu;
-+ fbi->palette_cpu = fbi->map_cpu + (PAGE_SIZE/2);
-+ fbi->screen_dma = fbi->map_dma;
-+ fbi->palette_dma = fbi->map_dma + (PAGE_SIZE/2);
-+
-+ fbi->format = mode;
-+ fbi->palette_size = (1<<cursor->bpp);
-+ fbi->fb.fix.smem_start = fbi->screen_dma;
-+ fbi->fb.fix.smem_len = cursor->xres * cursor->yres * cursor->bpp / 8;
-+ fbi->fb.fix.line_length = cursor->xres * cursor->bpp / 8;
-+
-+ fbi->dma5_pal = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 16 );
-+ fbi->dma5_pal->fdadr = (fbi->map_dma + PAGE_SIZE - 16);
-+ fbi->dma5_pal->fsadr = fbi->palette_dma;
-+ fbi->dma5_pal->fidr = 0;
-+ fbi->dma5_pal->ldcmd = (fbi->palette_size<<2) | LDCMD_PAL;
-+
-+ fbi->dma5_frame = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 32 );
-+ fbi->dma5_frame->fdadr = (fbi->map_dma + PAGE_SIZE - 32);
-+ fbi->dma5_frame->fsadr = fbi->screen_dma;
-+ fbi->dma5_frame->fidr = 0;
-+ fbi->dma5_frame->ldcmd = fbi->fb.fix.smem_len;
-+
-+ /* alloc & set default cmap */
-+ err = fb_alloc_cmap(&fbi->fb.cmap, fbi->palette_size, 0);
-+ if (err) return err;
-+ err = fb_set_cmap(&fbi->fb.cmap, info);
-+ if (err) return err;
-+ }
-+
-+ /* update overlay info */
-+ if ( (xpos != fbi->xpos) || (ypos != fbi->ypos) ) {
-+ fbi->xpos = xpos;
-+ fbi->ypos = ypos;
-+ }
-+
-+ cursorfb_enable(info);
-+ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
-+
-+ return 0;
-+}
-+
-+static struct fb_ops cursorfb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_check_var = cursorfb_check_var,
-+ .fb_set_par = cursorfb_set_par,
-+ .fb_blank = cursorfb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_setcolreg = cursorfb_setcolreg,
-+};
-+
-+static struct overlayfb_info * __init overlay1fb_init_fbinfo(void)
-+{
-+ struct overlayfb_info *fbi;
-+
-+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
-+ if (!fbi)
-+ return NULL;
-+
-+ memset(fbi, 0, sizeof(struct overlayfb_info) );
-+
-+ fbi->refcount = 0;
-+ init_MUTEX(&fbi->mutex);
-+
-+ strcpy(fbi->fb.fix.id, "overlay1");
-+
-+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
-+ fbi->fb.fix.type_aux = 0;
-+ fbi->fb.fix.xpanstep = 0;
-+ fbi->fb.fix.ypanstep = 0;
-+ fbi->fb.fix.ywrapstep = 0;
-+ fbi->fb.fix.accel = FB_ACCEL_NONE;
-+
-+ fbi->fb.var.nonstd = 0;
-+ fbi->fb.var.activate = FB_ACTIVATE_NOW;
-+ fbi->fb.var.height = -1;
-+ fbi->fb.var.width = -1;
-+ fbi->fb.var.accel_flags = 0;
-+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
-+
-+
-+ fbi->fb.fbops = &overlay1fb_ops;
-+ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
-+ fbi->fb.node = -1;
-+ fbi->fb.pseudo_palette = NULL;
-+
-+ fbi->xpos = 0;
-+ fbi->ypos = 0;
-+ fbi->format = -1;
-+ fbi->state = C_DISABLE;
-+
-+ return fbi;
-+}
-+
-+static struct overlayfb_info * __init overlay2fb_init_fbinfo(void)
-+{
-+ struct overlayfb_info *fbi;
-+
-+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
-+ if (!fbi)
-+ return NULL;
-+
-+ memset(fbi, 0, sizeof(struct overlayfb_info) );
-+
-+ fbi->refcount = 0;
-+ init_MUTEX(&fbi->mutex);
-+
-+ strcpy(fbi->fb.fix.id, "overlay2");
-+
-+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
-+ fbi->fb.fix.type_aux = 0;
-+ fbi->fb.fix.xpanstep = 0;
-+ fbi->fb.fix.ypanstep = 0;
-+ fbi->fb.fix.ywrapstep = 0;
-+ fbi->fb.fix.accel = FB_ACCEL_NONE;
-+
-+ fbi->fb.var.nonstd = 0;
-+ fbi->fb.var.activate = FB_ACTIVATE_NOW;
-+ fbi->fb.var.height = -1;
-+ fbi->fb.var.width = -1;
-+ fbi->fb.var.accel_flags = 0;
-+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
-+
-+ fbi->fb.fbops = &overlay2fb_ops;
-+ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
-+ fbi->fb.node = -1;
-+ fbi->fb.pseudo_palette = NULL;
-+
-+ fbi->xpos = 0;
-+ fbi->ypos = 0;
-+ fbi->format = -1;
-+ fbi->state = C_DISABLE;
-+
-+ return fbi;
-+}
-+
-+static struct overlayfb_info * __init cursorfb_init_fbinfo(void)
-+{
-+ struct overlayfb_info *fbi;
-+
-+ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
-+ if (!fbi)
-+ return NULL;
-+
-+ memset(fbi, 0, sizeof(struct overlayfb_info) );
-+
-+ fbi->refcount = 0;
-+ init_MUTEX(&fbi->mutex);
-+
-+ strcpy(fbi->fb.fix.id, "cursor");
-+
-+ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
-+ fbi->fb.fix.type_aux = 0;
-+ fbi->fb.fix.xpanstep = 0;
-+ fbi->fb.fix.ypanstep = 0;
-+ fbi->fb.fix.ywrapstep = 0;
-+ fbi->fb.fix.accel = FB_ACCEL_NONE;
-+
-+ fbi->fb.var.nonstd = 0;
-+ fbi->fb.var.activate = FB_ACTIVATE_NOW;
-+ fbi->fb.var.height = -1;
-+ fbi->fb.var.width = -1;
-+ fbi->fb.var.accel_flags = 0;
-+ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
-+
-+ fbi->fb.fbops = &cursorfb_ops;
-+ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
-+ fbi->fb.node = -1;
-+ fbi->fb.pseudo_palette = NULL;
-+
-+
-+ fbi->xpos = 0;
-+ fbi->ypos = 0;
-+ fbi->format = -1;
-+ fbi->state = C_DISABLE;
-+
-+ return fbi;
-+}
-+
-+
-+void pxa_set_overlay_ctrlr_state(struct pxafb_info *fbi, u_int state)
-+{
-+ switch (state) {
-+ case C_DISABLE:
-+ DISABLE_OVERLAYS(fbi);
-+ break;
-+ case C_ENABLE:
-+ ENABLE_OVERLAYS(fbi);
-+ break;
-+ case C_BLANK:
-+ BLANK_OVERLAYS(fbi);
-+ break;
-+ case C_UNBLANK:
-+ UNBLANK_OVERLAYS(fbi);
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+static int is_pxafb_device(struct device * dev, void * data)
-+{
-+ struct platform_device *pdev = container_of(dev, struct platform_device, dev);
-+
-+ return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0);
-+}
-+
-+static int __devinit pxafb_overlay_init(void)
-+{
-+ int ret;
-+ struct overlayfb_info *overlay1fb, *overlay2fb, *cursorfb;
-+ struct pxafb_info *fbi;
-+ struct device *dev;
-+
-+ ret = -1;
-+ overlay1fb = overlay2fb = cursorfb = NULL;
-+ fbi = NULL;
-+
-+ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
-+ if (!dev) {
-+ printk(KERN_INFO "Base framebuffer not exists, failed to load overlay driver!\n");
-+ return ret;
-+ }
-+
-+ fbi = dev_get_drvdata(dev);
-+ if (fbi == NULL) {
-+ printk(KERN_INFO "Base framebuffer not initialized, failed to load overlay driver!\n");
-+ return ret;
-+ }
-+
-+ /* Overlay 1 windows */
-+ overlay1fb = overlay1fb_init_fbinfo();
-+
-+ if (!overlay1fb) {
-+ ret = -ENOMEM;
-+ printk("overlay1fb_init_fbinfo failed\n");
-+ goto failed;
-+ }
-+
-+ ret = register_framebuffer(&overlay1fb->fb);
-+ if (ret < 0)
-+ goto failed;
-+
-+ /* Overlay 2 window */
-+ overlay2fb = overlay2fb_init_fbinfo();
-+
-+ if (!overlay2fb) {
-+ ret = -ENOMEM;
-+ printk("overlay2fb_init_fbinfo failed\n");
-+ goto failed;
-+ }
-+
-+ ret = register_framebuffer(&overlay2fb->fb);
-+ if (ret < 0) goto failed;
-+
-+ /* Hardware cursor window */
-+ cursorfb = cursorfb_init_fbinfo();
-+
-+ if (!cursorfb) {
-+ ret = -ENOMEM;
-+ printk("cursorfb_init_fbinfo failed\n");
-+ goto failed;
-+ }
-+
-+ ret = register_framebuffer(&cursorfb->fb);
-+ if (ret < 0) goto failed;
-+
-+
-+ /* set refernce to Overlays */
-+ fbi->overlay1fb = overlay1fb;
-+ fbi->overlay2fb = overlay2fb;
-+ fbi->cursorfb = cursorfb;
-+ fbi->set_overlay_ctrlr_state=pxa_set_overlay_ctrlr_state;
-+
-+ /* set refernce to BaseFrame */
-+ overlay1fb->basefb = fbi;
-+ overlay2fb->basefb = fbi;
-+ cursorfb->basefb = fbi;
-+
-+ printk(KERN_INFO "Load PXA Overlay driver successfully!\n");
-+
-+ return 0;
-+
-+failed:
-+ if (overlay1fb)
-+ kfree(overlay1fb);
-+ if (overlay2fb)
-+ kfree(overlay2fb);
-+ if (cursorfb)
-+ kfree(cursorfb);
-+ printk(KERN_INFO "Load PXA Overlay driver failed!\n");
-+ return ret;
-+}
-+
-+static void __exit pxafb_overlay_exit(void)
-+{
-+ struct pxafb_info *fbi;
-+ struct device *dev;
-+
-+ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
-+ if (!dev)
-+ return;
-+
-+ fbi = dev_get_drvdata(dev);
-+ if (!fbi)
-+ return;
-+
-+ if (fbi->overlay1fb) {
-+ unregister_framebuffer(&(fbi->overlay1fb->fb));
-+ kfree(fbi->overlay1fb);
-+ fbi->overlay1fb = NULL;
-+ }
-+
-+ if (fbi->overlay2fb) {
-+ unregister_framebuffer(&(fbi->overlay2fb->fb));
-+ kfree(fbi->overlay2fb);
-+ fbi->overlay2fb = NULL;
-+ }
-+
-+ if (fbi->cursorfb) {
-+ unregister_framebuffer(&(fbi->cursorfb->fb));
-+ kfree(fbi->cursorfb);
-+ fbi->cursorfb = NULL;
-+ }
-+
-+ fbi->set_overlay_ctrlr_state = NULL;
-+
-+ printk(KERN_INFO "Unload PXA Overlay driver successfully!\n");
-+ return;
-+}
-+
-+
-+module_init(pxafb_overlay_init);
-+module_exit(pxafb_overlay_exit);
-+
-+MODULE_DESCRIPTION("Loadable framebuffer overlay driver for PXA");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h
-+++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
-@@ -792,11 +792,18 @@
- #define UDC_INT_PACKETCMP (0x1)
-
- #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2))
-+/* Older defines, do not use. */
- #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */
- #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */
- #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */
- #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */
- #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */
-+/* New defines. */
-+#define UDCISR1_IRCC (1 << 31) /* IntEn - Configuration Change */
-+#define UDCISR1_IRSOF (1 << 30) /* IntEn - Start of Frame */
-+#define UDCISR1_IRRU (1 << 29) /* IntEn - Resume */
-+#define UDCISR1_IRSU (1 << 28) /* IntEn - Suspend */
-+#define UDCISR1_IRRS (1 << 27) /* IntEn - Reset */
-
- #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */
- #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */
-@@ -1831,6 +1838,8 @@
- #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
- #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
- #define LCSR __REG(0x44000038) /* LCD Controller Status Register */
-+#define LCSR0 __REG(0x44000038) /* LCD Controller Status Register */
-+#define LCSR1 __REG(0x44000034) /* LCD Controller Status Register */
- #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */
- #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */
- #define TMEDCR __REG(0x44000044) /* TMED Control Register */
-@@ -1840,6 +1849,10 @@
- #define LCCR3_4BPP (2 << 24)
- #define LCCR3_8BPP (3 << 24)
- #define LCCR3_16BPP (4 << 24)
-+#define LCCR3_18BPP (6 << 24)
-+#define LCCR3_19BPP (8 << 24)
-+#define LCCR3_24BPP (9 << 24)
-+#define LCCR3_25BPP (10<< 24)
-
- #define LCCR3_PDFOR_0 (0 << 30)
- #define LCCR3_PDFOR_1 (1 << 30)
-@@ -2014,6 +2027,104 @@
-
- #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */
-
-+/* Overlay1 & Overlay2 & Hardware Cursor */
-+#define LCSR1_SOF1 (1 << 0)
-+#define LCSR1_SOF2 (1 << 1)
-+#define LCSR1_SOF3 (1 << 2)
-+#define LCSR1_SOF4 (1 << 3)
-+#define LCSR1_SOF5 (1 << 4)
-+#define LCSR1_SOF6 (1 << 5)
-+
-+#define LCSR1_EOF1 (1 << 8)
-+#define LCSR1_EOF2 (1 << 9)
-+#define LCSR1_EOF3 (1 << 10)
-+#define LCSR1_EOF4 (1 << 11)
-+#define LCSR1_EOF5 (1 << 12)
-+#define LCSR1_EOF6 (1 << 13)
-+
-+#define LCSR1_BS1 (1 << 16)
-+#define LCSR1_BS2 (1 << 17)
-+#define LCSR1_BS3 (1 << 18)
-+#define LCSR1_BS4 (1 << 19)
-+#define LCSR1_BS5 (1 << 20)
-+#define LCSR1_BS6 (1 << 21)
-+
-+#define LCSR1_IU2 (1 << 25)
-+#define LCSR1_IU3 (1 << 26)
-+#define LCSR1_IU4 (1 << 27)
-+#define LCSR1_IU5 (1 << 28)
-+#define LCSR1_IU6 (1 << 29)
-+
-+#define LDCMD_SOFINT (1 << 22)
-+#define LDCMD_EOFINT (1 << 21)
-+
-+
-+#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
-+#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
-+#define LCCR5_SOFM3 (1<<2) /* Start Of Frame Mask for Overlay 2 (channel 3) */
-+#define LCCR5_SOFM4 (1<<3) /* Start Of Frame Mask for Overlay 2 (channel 4) */
-+#define LCCR5_SOFM5 (1<<4) /* Start Of Frame Mask for cursor (channel 5) */
-+#define LCCR5_SOFM6 (1<<5) /* Start Of Frame Mask for command data (channel 6) */
-+
-+#define LCCR5_EOFM1 (1<<8) /* End Of Frame Mask for Overlay 1 (channel 1) */
-+#define LCCR5_EOFM2 (1<<9) /* End Of Frame Mask for Overlay 2 (channel 2) */
-+#define LCCR5_EOFM3 (1<<10) /* End Of Frame Mask for Overlay 2 (channel 3) */
-+#define LCCR5_EOFM4 (1<<11) /* End Of Frame Mask for Overlay 2 (channel 4) */
-+#define LCCR5_EOFM5 (1<<12) /* End Of Frame Mask for cursor (channel 5) */
-+#define LCCR5_EOFM6 (1<<13) /* End Of Frame Mask for command data (channel 6) */
-+
-+#define LCCR5_BSM1 (1<<16) /* Branch mask for Overlay 1 (channel 1) */
-+#define LCCR5_BSM2 (1<<17) /* Branch mask for Overlay 2 (channel 2) */
-+#define LCCR5_BSM3 (1<<18) /* Branch mask for Overlay 2 (channel 3) */
-+#define LCCR5_BSM4 (1<<19) /* Branch mask for Overlay 2 (channel 4) */
-+#define LCCR5_BSM5 (1<<20) /* Branch mask for cursor (channel 5) */
-+#define LCCR5_BSM6 (1<<21) /* Branch mask for data command (channel 6) */
-+
-+#define LCCR5_IUM1 (1<<24) /* Input FIFO Underrun Mask for Overlay 1 */
-+#define LCCR5_IUM2 (1<<25) /* Input FIFO Underrun Mask for Overlay 2 */
-+#define LCCR5_IUM3 (1<<26) /* Input FIFO Underrun Mask for Overlay 2 */
-+#define LCCR5_IUM4 (1<<27) /* Input FIFO Underrun Mask for Overlay 2 */
-+#define LCCR5_IUM5 (1<<28) /* Input FIFO Underrun Mask for cursor */
-+#define LCCR5_IUM6 (1<<29) /* Input FIFO Underrun Mask for data command */
-+
-+#define OVL1C1_O1EN (1<<31) /* Enable bit for Overlay 1 */
-+#define OVL2C1_O2EN (1<<31) /* Enable bit for Overlay 2 */
-+#define CCR_CEN (1<<31) /* Enable bit for Cursor */
-+
-+/* LCD registers */
-+#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */
-+#define LCCR5 __REG(0x44000014) /* LCD Controller Control Register 5 */
-+#define FBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
-+#define FBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
-+#define FBR2 __REG(0x44000028) /* DMA Channel 2 Frame Branch Register */
-+#define FBR3 __REG(0x4400002C) /* DMA Channel 3 Frame Branch Register */
-+#define FBR4 __REG(0x44000030) /* DMA Channel 4 Frame Branch Register */
-+#define FDADR2 __REG(0x44000220) /* DMA Channel 2 Frame Descriptor Address Register */
-+#define FSADR2 __REG(0x44000224) /* DMA Channel 2 Frame Source Address Register */
-+#define FIDR2 __REG(0x44000228) /* DMA Channel 2 Frame ID Register */
-+#define LDCMD2 __REG(0x4400022C) /* DMA Channel 2 Command Register */
-+#define FDADR3 __REG(0x44000230) /* DMA Channel 3 Frame Descriptor Address Register */
-+#define FSADR3 __REG(0x44000234) /* DMA Channel 3 Frame Source Address Register */
-+#define FIDR3 __REG(0x44000238) /* DMA Channel 3 Frame ID Register */
-+#define LDCMD3 __REG(0x4400023C) /* DMA Channel 3 Command Register */
-+#define FDADR4 __REG(0x44000240) /* DMA Channel 4 Frame Descriptor Address Register */
-+#define FSADR4 __REG(0x44000244) /* DMA Channel 4 Frame Source Address Register */
-+#define FIDR4 __REG(0x44000248) /* DMA Channel 4 Frame ID Register */
-+#define LDCMD4 __REG(0x4400024C) /* DMA Channel 4 Command Register */
-+#define FDADR5 __REG(0x44000250) /* DMA Channel 5 Frame Descriptor Address Register */
-+#define FSADR5 __REG(0x44000254) /* DMA Channel 5 Frame Source Address Register */
-+#define FIDR5 __REG(0x44000258) /* DMA Channel 5 Frame ID Register */
-+#define LDCMD5 __REG(0x4400025C) /* DMA Channel 5 Command Register */
-+
-+#define OVL1C1 __REG(0x44000050) /* Overlay 1 Control Register 1 */
-+#define OVL1C2 __REG(0x44000060) /* Overlay 1 Control Register 2 */
-+#define OVL2C1 __REG(0x44000070) /* Overlay 2 Control Register 1 */
-+#define OVL2C2 __REG(0x44000080) /* Overlay 2 Control Register 2 */
-+#define CCR __REG(0x44000090) /* Cursor Control Register */
-+
-+#define FBR5 __REG(0x44000110) /* DMA Channel 5 Frame Branch Register */
-+#define FBR6 __REG(0x44000114) /* DMA Channel 6 Frame Branch Register */
-+
- /*
- * Memory controller
- */
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml
deleted file mode 100644
index eabcc41830..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml
+++ /dev/null
@@ -1,1204 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux
-Subject: [RFC PATCH 1/8] soc_camera V4L2 driver for directly-connected
- SoC-based cameras
-Date: Wed, 23 Jan 2008 18:41:18 +0100 (CET)
-Lines: 1132
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231654540.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110130 28779 80.91.229.12 (23 Jan 2008 17:42:10 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:10 +0000 (UTC)
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:28 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjbz-0002oq-Us
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:09 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id 7B895730A6; Wed, 23 Jan 2008 12:41:41 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHfdRS017082 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:41:39 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHfcrF027810
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:38 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHf62e000540
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:06 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:40:59 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp048) with SMTP; 23 Jan 2008 18:40:59 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX19NlXt5RoZNpQ4LqFuDqiXHZ3kHYCmxz52UMExHFC
- yqWM+gBlp24/e9
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbC-00029n-Kf
- for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:18 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36470
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36470>
-
-This driver provides an interface between platform-specific camera
-busses and camera devices. It should be used if the camera is connected
-not over a "proper" bus like PCI or USB, but over a special bus, like,
-for example, the Quick Capture interface on PXA270 SoCs. Later it should
-also be used for i.MX31 SoCs from Freescale. It can handle multiple
-cameras and / or multiple busses, which can be used, e.g., in
-stereo-vision applications.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
----
- drivers/media/video/Kconfig | 8 +
- drivers/media/video/Makefile | 2 +
- drivers/media/video/soc_camera.c | 928 ++++++++++++++++++++++++++++++++++++++
- include/media/soc_camera.h | 138 ++++++
- 4 files changed, 1076 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/video/soc_camera.c
- create mode 100644 include/media/soc_camera.h
-
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index e204e7b..be54183 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -795,4 +795,12 @@ config USB_ZR364XX
-
- endif # V4L_USB_DRIVERS
-
-+config SOC_CAMERA
-+ tristate "SoC camera support"
-+ depends on VIDEO_V4L2
-+ help
-+ SoC Camera is a common API to several cameras, not connecting
-+ over a bus like PCI or USB. For example some i2c camera hanging
-+ directly on the data bus of an SoC.
-+
- endif # VIDEO_CAPTURE_DRIVERS
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index 10b4d44..97a9135 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -116,4 +116,6 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/
-
- obj-$(CONFIG_VIDEO_VIVI) += vivi.o
-
-+obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
-+
- EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
-diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c
-new file mode 100644
-index 0000000..5ec652e
---- /dev/null
-+++ b/drivers/media/video/soc_camera.c
-@@ -0,0 +1,928 @@
-+/*
-+ * camera image capture (abstract) bus driver
-+ *
-+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
-+ *
-+ * This driver provides an interface between platform-specific camera
-+ * busses and camera devices. It should be used if the camera is
-+ * connected not over a "proper" bus like PCI or USB, but over a
-+ * special bus, like, for example, the Quick Capture interface on PXA270
-+ * SoCs. Later it should also be used for i.MX31 SoCs from Freescale.
-+ * It can handle multiple cameras and / or multiple busses, which can
-+ * be used, e.g., in stereo-vision applications.
-+ *
-+ * 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/device.h>
-+#include <linux/list.h>
-+#include <linux/err.h>
-+#include <linux/mutex.h>
-+#include <linux/vmalloc.h>
-+
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-dev.h>
-+#include <media/soc_camera.h>
-+
-+static LIST_HEAD(hosts);
-+static LIST_HEAD(devices);
-+static DEFINE_MUTEX(list_lock);
-+static DEFINE_MUTEX(video_lock);
-+
-+const static struct soc_camera_data_format*
-+format_by_fourcc(struct soc_camera_device *icd, unsigned int fourcc)
-+{
-+ unsigned int i;
-+
-+ for (i = 0; i < icd->ops->num_formats; i++)
-+ if (icd->ops->formats[i].fourcc == fourcc)
-+ return icd->ops->formats + i;
-+ return NULL;
-+}
-+
-+static int soc_camera_try_fmt_cap(struct file *file, void *priv,
-+ struct v4l2_format *f)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ enum v4l2_field field;
-+ const struct soc_camera_data_format *fmt;
-+ int ret;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ fmt = format_by_fourcc(icd, f->fmt.pix.pixelformat);
-+ if (!fmt) {
-+ pr_debug("%s: invalid format 0x%08x\n", __FUNCTION__,
-+ f->fmt.pix.pixelformat);
-+ return -EINVAL;
-+ }
-+
-+ pr_debug("%s: fmt: 0x%08x\n", __FUNCTION__, fmt->fourcc);
-+
-+ field = f->fmt.pix.field;
-+
-+ if (field == V4L2_FIELD_ANY) {
-+ field = V4L2_FIELD_NONE;
-+ } else if (V4L2_FIELD_NONE != field) {
-+ printk("Field type invalid.\n");
-+ return -EINVAL;
-+ }
-+
-+ /* limit to host capabilities */
-+ ret = ici->try_fmt_cap(ici, f);
-+
-+ /* limit to sensor capabilities */
-+ if (!ret)
-+ ret = icd->ops->try_fmt_cap(icd, f);
-+
-+ /* calculate missing fields */
-+ f->fmt.pix.field = field;
-+ f->fmt.pix.bytesperline =
-+ (f->fmt.pix.width * fmt->depth) >> 3;
-+ f->fmt.pix.sizeimage =
-+ f->fmt.pix.height * f->fmt.pix.bytesperline;
-+
-+ return ret;
-+}
-+
-+static int soc_camera_enum_input(struct file *file, void *priv,
-+ struct v4l2_input *inp)
-+{
-+ if (inp->index != 0)
-+ return -EINVAL;
-+
-+ inp->type = V4L2_INPUT_TYPE_CAMERA;
-+ inp->std = V4L2_STD_UNKNOWN;
-+ strcpy(inp->name, "Camera");
-+
-+ return 0;
-+}
-+
-+static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i)
-+{
-+ *i = 0;
-+
-+ return 0;
-+}
-+
-+static int soc_camera_s_input(struct file *file, void *priv, unsigned int i)
-+{
-+ if (i > 0)
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+
-+static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id *a)
-+{
-+ return 0;
-+}
-+
-+static int soc_camera_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *p)
-+{
-+ int ret;
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ pr_debug("%s: %d\n", __FUNCTION__, p->memory);
-+
-+ ret = videobuf_reqbufs(&icf->vb_vidq, p);
-+ if (ret < 0)
-+ return ret;
-+
-+ return ici->reqbufs(icf, p);
-+
-+ return ret;
-+}
-+
-+static int soc_camera_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ return videobuf_querybuf(&icf->vb_vidq, p);
-+}
-+
-+static int soc_camera_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ return videobuf_qbuf(&icf->vb_vidq, p);
-+}
-+
-+static int soc_camera_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ return videobuf_dqbuf(&icf->vb_vidq, p, file->f_flags & O_NONBLOCK);
-+}
-+
-+static int soc_camera_open(struct inode *inode, struct file *file)
-+{
-+ struct soc_camera_host *ici;
-+ struct soc_camera_device *icd;
-+ struct video_device *vdev;
-+ struct soc_camera_file *icf;
-+ int ret;
-+
-+ mutex_lock(&video_lock);
-+ list_for_each_entry(icd, &devices, list) {
-+ if (icd->vdev && icd->vdev->minor == iminor(inode))
-+ break;
-+ }
-+ mutex_unlock(&video_lock);
-+
-+ if (&icd->list == &devices)
-+ return -ENODEV;
-+
-+ icf = vmalloc(sizeof(*icf));
-+ if (!icf)
-+ return -ENOMEM;
-+
-+ icf->icd = icd;
-+
-+ if (!try_module_get(icd->ops->owner)) {
-+ printk(KERN_INFO "Couldn't lock sensor driver.\n");
-+ ret = -EINVAL;
-+ goto emgd;
-+ }
-+
-+ ici = to_soc_camera_host(icd->dev.parent);
-+
-+ if (!try_module_get(ici->owner)) {
-+ printk(KERN_INFO "Couldn't lock capture bus driver.\n");
-+ ret = -EINVAL;
-+ goto emgi;
-+ }
-+
-+ vdev = icd->vdev;
-+
-+ file->private_data = icf;
-+ dev_dbg(vdev->dev, "camera device open\n");
-+
-+ vdev = icd->vdev;
-+
-+ videobuf_queue_init(&icf->vb_vidq, ici->vbq_ops,
-+ icd, NULL,
-+ V4L2_BUF_TYPE_VIDEO_CAPTURE,
-+ V4L2_FIELD_NONE,
-+ ici->msize, icd);
-+
-+ return 0;
-+
-+emgi:
-+ module_put(icd->ops->owner);
-+emgd:
-+ vfree(icf);
-+ return ret;
-+}
-+
-+static int soc_camera_close(struct inode *inode, struct file *file)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
-+ struct video_device *vdev = icd->vdev;
-+
-+ module_put(icd->ops->owner);
-+ module_put(ici->owner);
-+ vfree(file->private_data);
-+
-+ dev_dbg(vdev->dev, "camera device close\n");
-+
-+ return 0;
-+}
-+
-+static int soc_camera_read(struct file *file, char __user *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct video_device *vdev = icd->vdev;
-+ int err = -EINVAL;
-+
-+ dev_err(vdev->dev, "camera device read not implemented\n");
-+
-+ return err;
-+}
-+
-+static int soc_camera_mmap(struct file *file, struct vm_area_struct *vma)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ int err;
-+
-+ pr_debug("mmap called, vma=0x%08lx\n",(unsigned long)vma);
-+
-+ err = videobuf_mmap_mapper(&icf->vb_vidq, vma);
-+
-+ pr_debug ("vma start=0x%08lx, size=%ld, ret=%d\n",
-+ (unsigned long)vma->vm_start,
-+ (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
-+ err);
-+
-+ return err;
-+}
-+
-+static unsigned int soc_camera_poll(struct file *file, poll_table *pt)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+
-+ if (list_empty(&icf->vb_vidq.stream)) {
-+ printk("---------- urgs\n");
-+ return POLLERR;
-+ }
-+
-+ return ici->poll(file, pt);
-+}
-+
-+
-+static struct file_operations soc_camera_fops = {
-+ .owner = THIS_MODULE,
-+ .open = soc_camera_open,
-+ .release = soc_camera_close,
-+ .ioctl = video_ioctl2,
-+ .read = soc_camera_read,
-+ .mmap = soc_camera_mmap,
-+ .poll = soc_camera_poll,
-+ .llseek = no_llseek,
-+};
-+
-+
-+static int soc_camera_s_fmt_cap(struct file *file, void *priv,
-+ struct v4l2_format *f)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ int ret;
-+ struct v4l2_rect rect;
-+ const static struct soc_camera_data_format *data_fmt;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ data_fmt = format_by_fourcc(icd, f->fmt.pix.pixelformat);
-+ if (!data_fmt)
-+ return -EINVAL;
-+
-+ /* cached_datawidth may be further adjusted by the ici */
-+ icd->cached_datawidth = data_fmt->depth;
-+
-+ ret = soc_camera_try_fmt_cap(file, icf, f);
-+ if (ret < 0)
-+ return ret;
-+
-+ rect.left = icd->x_current;
-+ rect.top = icd->y_current;
-+ rect.width = f->fmt.pix.width;
-+ rect.height = f->fmt.pix.height;
-+ ret = ici->set_capture_format(icd, f->fmt.pix.pixelformat, &rect);
-+
-+ if (!ret) {
-+ icd->current_fmt = data_fmt;
-+ icd->width = rect.width;
-+ icd->height = rect.height;
-+ icf->vb_vidq.field = f->fmt.pix.field;
-+ if (V4L2_BUF_TYPE_VIDEO_CAPTURE != f->type)
-+ printk("Attention! Wrong buf-type %d\n", f->type);
-+
-+ dev_dbg(&icd->dev, "set width: %d height: %d\n",
-+ icd->width, icd->height);
-+ }
-+
-+ return ret;
-+}
-+
-+static int soc_camera_enum_fmt_cap(struct file *file, void *priv,
-+ struct v4l2_fmtdesc *f)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ const struct soc_camera_data_format *format;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ if (f->index >= icd->ops->num_formats)
-+ return -EINVAL;
-+
-+ format = &icd->ops->formats[f->index];
-+
-+ strlcpy(f->description, format->name, sizeof(f->description));
-+ f->pixelformat = format->fourcc;
-+ return 0;
-+}
-+
-+static int soc_camera_g_fmt_cap(struct file *file, void *priv,
-+ struct v4l2_format *f)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ f->fmt.pix.width = icd->width;
-+ f->fmt.pix.height = icd->height;
-+ f->fmt.pix.field = icf->vb_vidq.field;
-+ f->fmt.pix.pixelformat = icd->current_fmt->fourcc;
-+ f->fmt.pix.bytesperline =
-+ (f->fmt.pix.width * icd->current_fmt->depth) >> 3;
-+ f->fmt.pix.sizeimage =
-+ f->fmt.pix.height * f->fmt.pix.bytesperline;
-+ printk("%s: current_fmt->fourcc: 0x%08x\n",
-+ __FUNCTION__, icd->current_fmt->fourcc);
-+ return 0;
-+}
-+
-+static int soc_camera_querycap(struct file *file, void *priv,
-+ struct v4l2_capability *cap)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ strlcpy(cap->driver, ici->drv_name, sizeof(cap->driver));
-+ return ici->querycap(ici, cap);
-+}
-+
-+static int soc_camera_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+// struct vivi_dev *dev = fh->dev;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ pr_debug("%s\n",__FUNCTION__);
-+
-+ if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+ return -EINVAL;
-+
-+// if (!res_get(dev,fh))
-+// return -EBUSY;
-+// CIFR = CIFR_RESET_F | CIFR_FEN0;
-+
-+ icd->ops->start_capture(icd);
-+
-+ /* This calls buf_queue from host driver's videobuf_queue_ops */
-+ return videobuf_streamon(&icf->vb_vidq);
-+}
-+
-+static int soc_camera_streamoff(struct file *file, void *priv,
-+ enum v4l2_buf_type i)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+// struct vivi_dev *dev = fh->dev;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ pr_debug("%s\n",__FUNCTION__);
-+
-+ if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+ return -EINVAL;
-+
-+// CICR0 |= CICR0_DIS;
-+// while(CICR0 & CICR0_ENB);
-+
-+ /* This calls buf_release from host driver's videobuf_queue_ops for all
-+ * remaining buffers. When the last buffer is freed, stop capture */
-+ videobuf_streamoff(&icf->vb_vidq);
-+
-+ icd->ops->stop_capture(icd);
-+
-+// res_free(dev,fh);
-+
-+ return 0;
-+}
-+
-+static int soc_camera_queryctrl(struct file *file, void *priv,
-+ struct v4l2_queryctrl *qc)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ int i;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ for (i = 0; i < icd->ops->num_controls; i++)
-+ if (qc->id && qc->id == icd->ops->controls[i].id) {
-+ memcpy(qc, &(icd->ops->controls[i]),
-+ sizeof(*qc));
-+ return 0;
-+ }
-+
-+ return -EINVAL;
-+}
-+
-+static int soc_camera_g_ctrl(struct file *file, void *priv,
-+ struct v4l2_control *ctrl)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ switch (ctrl->id) {
-+ case V4L2_CID_GAIN:
-+ if (icd->gain == (unsigned short)~0)
-+ return -EINVAL;
-+ ctrl->value = icd->gain;
-+ return 0;
-+ case V4L2_CID_EXPOSURE:
-+ if (icd->exposure == (unsigned short)~0)
-+ return -EINVAL;
-+ ctrl->value = icd->exposure;
-+ return 0;
-+ }
-+
-+ if (icd->ops->get_control)
-+ return icd->ops->get_control(icd, ctrl);
-+ return -EINVAL;
-+}
-+
-+static int soc_camera_s_ctrl(struct file *file, void *priv,
-+ struct v4l2_control *ctrl)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+
-+ WARN_ON(priv != file->private_data);
-+
-+ if (icd->ops->set_control)
-+ return icd->ops->set_control(icd, ctrl);
-+ return -EINVAL;
-+}
-+
-+static int soc_camera_cropcap(struct file *file, void *fh,
-+ struct v4l2_cropcap *a)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+
-+ a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+ a->bounds.left = icd->x_min;
-+ a->bounds.top = icd->y_min;
-+ a->bounds.width = icd->width_max;
-+ a->bounds.height = icd->height_max;
-+ a->defrect.left = icd->x_min;
-+ a->defrect.top = icd->y_min;
-+ a->defrect.width = 640;
-+ a->defrect.height = 480;
-+ a->pixelaspect.numerator = 1;
-+ a->pixelaspect.denominator = 1;
-+
-+ return 0;
-+}
-+
-+static int soc_camera_g_crop(struct file *file, void *fh,
-+ struct v4l2_crop *a)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+
-+ a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+ a->c.left = icd->x_current;
-+ a->c.top = icd->y_current;
-+ a->c.width = icd->width;
-+ a->c.height = icd->height;
-+
-+ return 0;
-+}
-+
-+static int soc_camera_s_crop(struct file *file, void *fh,
-+ struct v4l2_crop *a)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct soc_camera_device *icd = icf->icd;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ int ret;
-+
-+ if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+ return -EINVAL;
-+
-+ ret = ici->set_capture_format(icd, 0, &a->c);
-+ if (!ret) {
-+ icd->width = a->c.width;
-+ icd->height = a->c.height;
-+ icd->x_current = a->c.left;
-+ icd->y_current = a->c.top;
-+ }
-+
-+ return ret;
-+}
-+
-+static int device_register_link(struct soc_camera_device *icd)
-+{
-+ int ret = device_register(&icd->dev);
-+ if (!ret && icd->control)
-+ if (sysfs_create_link(&icd->dev.kobj, &icd->control->kobj, "control"))
-+ dev_warn(&icd->dev,
-+ "Couldn't create a symlink to the control device\n");
-+ return ret;
-+}
-+
-+/* The two functions below return: 0 if no match found or a match found and
-+ * device_register() successful, error code otherwise */
-+static int scan_add_host(struct soc_camera_host *ici)
-+{
-+ struct soc_camera_device *icd;
-+ int ret = 0;
-+
-+ mutex_lock(&list_lock);
-+
-+ list_for_each_entry(icd, &devices, list) {
-+ if (icd->iface == ici->nr) {
-+ ret = 1;
-+ icd->dev.parent = &ici->dev;
-+ break;
-+ }
-+ }
-+
-+ mutex_unlock(&list_lock);
-+
-+ if (ret)
-+ ret = device_register_link(icd);
-+
-+ return ret;
-+}
-+
-+static int scan_add_device(struct soc_camera_device *icd)
-+{
-+ struct soc_camera_host *ici;
-+ int ret = 0;
-+
-+ mutex_lock(&list_lock);
-+
-+ list_add_tail(&icd->list, &devices);
-+
-+ /* Watch out for class_for_each_device / class_find_device API by
-+ * Dave Young <hidave.darkstar@gmail.com> */
-+ list_for_each_entry(ici, &hosts, list) {
-+ if (icd->iface == ici->nr) {
-+ ret = 1;
-+ icd->dev.parent = &ici->dev;
-+ break;
-+ }
-+ }
-+
-+ mutex_unlock(&list_lock);
-+
-+ if (ret)
-+ ret = device_register_link(icd);
-+
-+ return ret;
-+}
-+
-+static int soc_camera_probe(struct device *dev)
-+{
-+ struct soc_camera_device *icd = to_soc_camera_dev(dev);
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ int ret;
-+
-+ if (!icd->probe)
-+ return -ENODEV;
-+
-+ if (!(ret = ici->add(icd)))
-+ ret = icd->probe(icd);
-+
-+ if (!ret) {
-+ const struct v4l2_queryctrl *qctrl =
-+ soc_camera_find_qctrl(icd->ops, V4L2_CID_GAIN);
-+ icd->gain = qctrl ? qctrl->default_value : (unsigned short)~0;
-+ qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE);
-+ icd->exposure = qctrl ? qctrl->default_value : (unsigned short)~0;
-+
-+ }
-+
-+ return ret;
-+}
-+
-+/* This is called on device_unregister, which only means we have to disconnect
-+ * from the host, but not remove ourselves from the device list */
-+static int soc_camera_remove(struct device *dev)
-+{
-+ struct soc_camera_device *icd = to_soc_camera_dev(dev);
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+
-+ if (icd->remove)
-+ icd->remove(icd);
-+
-+ ici->remove(icd);
-+
-+ return 0;
-+}
-+
-+static struct bus_type soc_camera_bus_type = {
-+ .name = "soc-camera",
-+ .probe = soc_camera_probe,
-+ .remove = soc_camera_remove,
-+};
-+
-+static struct device_driver ic_drv = {
-+ .name = "camera",
-+ .bus = &soc_camera_bus_type,
-+ .owner = THIS_MODULE,
-+};
-+
-+/*
-+ * Image capture host - this is a host device, not a bus device, so,
-+ * no bus reference, no probing.
-+ */
-+static struct class soc_camera_host_class = {
-+ .owner = THIS_MODULE,
-+ .name = "camera_host",
-+};
-+
-+static void dummy_release(struct device *dev)
-+{
-+}
-+
-+int soc_camera_host_register(struct soc_camera_host *ici, struct module *owner)
-+{
-+ int ret;
-+
-+ if (!ici->vbq_ops || !ici->add || !ici->remove || !owner)
-+ return -EINVAL;
-+
-+ /* Number might be equal to the platform device ID,
-+ * hopefully, device core will fail nicely if we try
-+ * to register a second device with the same bus_id */
-+#warning "verify whether device_register will fail, or scan the list yourself for duplicate IDs"
-+ sprintf(ici->dev.bus_id, "camera_host%d", ici->nr);
-+ ici->dev.class = &soc_camera_host_class;
-+
-+ mutex_lock(&list_lock);
-+ list_add_tail(&ici->list, &hosts);
-+ mutex_unlock(&list_lock);
-+
-+ ici->owner = owner;
-+ ici->dev.release = dummy_release;
-+
-+ ret = device_register(&ici->dev);
-+
-+ if (ret)
-+ goto edevr;
-+
-+ return scan_add_host(ici);
-+
-+edevr:
-+ mutex_lock(&list_lock);
-+ list_del(&ici->list);
-+ mutex_unlock(&list_lock);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL(soc_camera_host_register);
-+
-+/* Unregister all clients! */
-+void soc_camera_host_unregister(struct soc_camera_host *ici)
-+{
-+ struct soc_camera_device *icd;
-+
-+ mutex_lock(&list_lock);
-+
-+ list_del(&ici->list);
-+
-+ list_for_each_entry(icd, &devices, list) {
-+ printk("list: %p %p\n", icd->dev.parent, &ici->dev);
-+ if (icd->dev.parent == &ici->dev) {
-+ device_unregister(&icd->dev);
-+ /* Not before device_unregister(), .remove
-+ * needs parent to call ici->remove() */
-+ icd->dev.parent = NULL;
-+ }
-+ }
-+
-+ mutex_unlock(&list_lock);
-+
-+ device_unregister(&ici->dev);
-+}
-+EXPORT_SYMBOL(soc_camera_host_unregister);
-+
-+/* Image capture device */
-+int soc_camera_device_register(struct soc_camera_device *icd)
-+{
-+ struct soc_camera_device *ix;
-+ int num = -1, i;
-+
-+ if (!icd)
-+ return -EINVAL;
-+
-+ for (i = 0; i < 256 && num < 0; i++) {
-+ num = i;
-+ list_for_each_entry(ix, &devices, list) {
-+ if (ix->iface == icd->iface && ix->devnum == i) {
-+ num = -1;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (num < 0)
-+ /* ok, we have 256 cameras on this host... man, stay reasonable... */
-+ return -ENOMEM;
-+
-+ icd->devnum = num;
-+ icd->dev.bus = &soc_camera_bus_type;
-+// icd->dev.driver = &ic_drv;
-+ snprintf(icd->dev.bus_id, sizeof(icd->dev.bus_id),
-+ "%u-%u", icd->iface, icd->devnum);
-+
-+ icd->dev.release = dummy_release;
-+
-+ if (icd->ops->get_datawidth)
-+ icd->cached_datawidth = icd->ops->get_datawidth(icd);
-+
-+ return scan_add_device(icd);
-+}
-+EXPORT_SYMBOL(soc_camera_device_register);
-+
-+void soc_camera_device_unregister(struct soc_camera_device *icd)
-+{
-+ mutex_lock(&list_lock);
-+ list_del(&icd->list);
-+
-+ /* The bus->remove will be eventually called */
-+ if (icd->dev.parent)
-+ device_unregister(&icd->dev);
-+ mutex_unlock(&list_lock);
-+}
-+EXPORT_SYMBOL(soc_camera_device_unregister);
-+
-+int soc_camera_video_start(struct soc_camera_device *icd)
-+{
-+ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
-+ int err = -ENOMEM;
-+ struct video_device *vdev;
-+
-+ if (!icd->dev.parent)
-+ return -ENODEV;
-+
-+ if (!(vdev = video_device_alloc()))
-+ goto evidallocd;
-+ dev_dbg(&ici->dev, "%s: Allocated video_device %p\n", __FUNCTION__, vdev);
-+
-+ strlcpy(vdev->name, ici->drv_name, sizeof(vdev->name));
-+ /* Maybe better &ici->dev */
-+ vdev->dev = &icd->dev;
-+ vdev->type = VID_TYPE_CAPTURE;
-+ vdev->current_norm = V4L2_STD_UNKNOWN;
-+ vdev->fops = &soc_camera_fops;
-+ vdev->release = video_device_release;
-+ vdev->minor = -1;
-+ vdev->tvnorms = V4L2_STD_UNKNOWN,
-+ vdev->vidioc_querycap = soc_camera_querycap;
-+ vdev->vidioc_g_fmt_cap = soc_camera_g_fmt_cap;
-+ vdev->vidioc_enum_fmt_cap = soc_camera_enum_fmt_cap;
-+ vdev->vidioc_s_fmt_cap = soc_camera_s_fmt_cap;
-+ vdev->vidioc_enum_input = soc_camera_enum_input;
-+ vdev->vidioc_g_input = soc_camera_g_input;
-+ vdev->vidioc_s_input = soc_camera_s_input;
-+ vdev->vidioc_s_std = soc_camera_s_std;
-+ vdev->vidioc_reqbufs = soc_camera_reqbufs;
-+ vdev->vidioc_try_fmt_cap = soc_camera_try_fmt_cap;
-+ vdev->vidioc_querybuf = soc_camera_querybuf;
-+ vdev->vidioc_qbuf = soc_camera_qbuf;
-+ vdev->vidioc_dqbuf = soc_camera_dqbuf;
-+ vdev->vidioc_streamon = soc_camera_streamon;
-+ vdev->vidioc_streamoff = soc_camera_streamoff;
-+ vdev->vidioc_queryctrl = soc_camera_queryctrl;
-+ vdev->vidioc_g_ctrl = soc_camera_g_ctrl;
-+ vdev->vidioc_s_ctrl = soc_camera_s_ctrl;
-+ vdev->vidioc_cropcap = soc_camera_cropcap;
-+ vdev->vidioc_g_crop = soc_camera_g_crop;
-+ vdev->vidioc_s_crop = soc_camera_s_crop;
-+
-+ icd->current_fmt = &icd->ops->formats[0];
-+
-+ err = video_register_device(vdev, VFL_TYPE_GRABBER, vdev->minor);
-+ if (err < 0) {
-+ dev_err(vdev->dev, "%s: video_register_device failed\n", __FUNCTION__);
-+ goto evidregd;
-+ }
-+ icd->vdev = vdev;
-+
-+ return 0;
-+
-+evidregd:
-+ video_device_release(vdev);
-+evidallocd:
-+ return err;
-+}
-+EXPORT_SYMBOL(soc_camera_video_start);
-+
-+void soc_camera_video_stop(struct soc_camera_device *icd)
-+{
-+ struct video_device *vdev = icd->vdev;
-+
-+ dev_dbg(&icd->dev, "%s\n", __FUNCTION__);
-+
-+ if (!icd->dev.parent || !vdev)
-+ return;
-+
-+ mutex_lock(&video_lock);
-+ video_unregister_device(vdev);
-+ icd->vdev = NULL;
-+ mutex_unlock(&video_lock);
-+}
-+EXPORT_SYMBOL(soc_camera_video_stop);
-+
-+static int __init soc_camera_init(void)
-+{
-+ int ret = bus_register(&soc_camera_bus_type);
-+ if (ret)
-+ return ret;
-+ ret = driver_register(&ic_drv);
-+ if (ret)
-+ goto edrvr;
-+ ret = class_register(&soc_camera_host_class);
-+ if (ret)
-+ goto eclr;
-+
-+ return 0;
-+
-+eclr:
-+ driver_unregister(&ic_drv);
-+edrvr:
-+ bus_unregister(&soc_camera_bus_type);
-+ return ret;
-+}
-+
-+static void __exit soc_camera_exit(void)
-+{
-+ class_unregister(&soc_camera_host_class);
-+ driver_unregister(&ic_drv);
-+ bus_unregister(&soc_camera_bus_type);
-+}
-+
-+module_init(soc_camera_init);
-+module_exit(soc_camera_exit);
-+
-+MODULE_DESCRIPTION("Image capture bus driver");
-+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
-+MODULE_LICENSE("GPL");
-diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h
-new file mode 100644
-index 0000000..f416959
---- /dev/null
-+++ b/include/media/soc_camera.h
-@@ -0,0 +1,138 @@
-+/*
-+ * camera image capture (abstract) bus driver header
-+ *
-+ * Copyright (C) 2006, Sascha Hauer, Pengutronix
-+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.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.
-+ */
-+
-+#ifndef SOC_CAMERA_H
-+#define SOC_CAMERA_H
-+
-+#include <media/video-buf.h>
-+#include <linux/videodev2.h>
-+
-+struct soc_camera_device {
-+ struct list_head list;
-+ struct device dev;
-+ struct device *control;
-+ unsigned short width; /* Current window */
-+ unsigned short height; /* sizes */
-+ unsigned short x_min; /* Camera capabilities */
-+ unsigned short y_min;
-+ unsigned short x_current; /* Current window location */
-+ unsigned short y_current;
-+ unsigned short width_min;
-+ unsigned short width_max;
-+ unsigned short height_min;
-+ unsigned short height_max;
-+ unsigned short y_skip_top; /* Lines to skip at the top */
-+ unsigned short gain;
-+ unsigned short exposure;
-+ unsigned char iface; /* Host number */
-+ unsigned char devnum; /* Device number per host */
-+ unsigned char cached_datawidth; /* See comment in .c */
-+ struct soc_camera_ops *ops;
-+ struct video_device *vdev;
-+ const struct soc_camera_data_format *current_fmt;
-+ int (*probe)(struct soc_camera_device *icd);
-+ void (*remove)(struct soc_camera_device *icd);
-+ struct module *owner;
-+};
-+
-+struct soc_camera_file {
-+ struct soc_camera_device *icd;
-+ struct videobuf_queue vb_vidq;
-+};
-+
-+struct soc_camera_host {
-+ struct list_head list;
-+ struct device dev;
-+ unsigned char nr; /* Host number */
-+ size_t msize;
-+ struct videobuf_queue_ops *vbq_ops;
-+ struct module *owner;
-+ void *priv;
-+ char *drv_name;
-+ int (*add)(struct soc_camera_device *);
-+ void (*remove)(struct soc_camera_device *);
-+ int (*set_capture_format)(struct soc_camera_device *, __u32,
-+ struct v4l2_rect *);
-+ int (*try_fmt_cap)(struct soc_camera_host *, struct v4l2_format *);
-+ int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *);
-+ int (*querycap)(struct soc_camera_host *, struct v4l2_capability *);
-+ unsigned int (*poll)(struct file *, poll_table *);
-+};
-+
-+struct soc_camera_link {
-+ int bus_id;
-+ struct i2c_client **extender;
-+};
-+
-+static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev)
-+{
-+ return container_of(dev, struct soc_camera_device, dev);
-+}
-+
-+static inline struct soc_camera_host *to_soc_camera_host(struct device *dev)
-+{
-+ return container_of(dev, struct soc_camera_host, dev);
-+}
-+
-+extern int soc_camera_host_register(struct soc_camera_host *ici, struct module *owner);
-+extern void soc_camera_host_unregister(struct soc_camera_host *ici);
-+extern int soc_camera_device_register(struct soc_camera_device *icd);
-+extern void soc_camera_device_unregister(struct soc_camera_device *icd);
-+
-+extern int soc_camera_video_start(struct soc_camera_device *icd);
-+extern void soc_camera_video_stop(struct soc_camera_device *icd);
-+
-+struct soc_camera_data_format {
-+ char *name;
-+ unsigned int depth;
-+ __u32 fourcc;
-+ enum v4l2_colorspace colorspace;
-+};
-+
-+struct soc_camera_ops {
-+ struct module *owner;
-+ int (*init)(struct soc_camera_device *);
-+ int (*release)(struct soc_camera_device *);
-+ int (*start_capture)(struct soc_camera_device *);
-+ int (*stop_capture)(struct soc_camera_device *);
-+ int (*set_capture_format)(struct soc_camera_device *, __u32,
-+ struct v4l2_rect *, unsigned int);
-+ int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *);
-+ const struct soc_camera_data_format *formats;
-+ int num_formats;
-+ int (*get_control)(struct soc_camera_device *, struct v4l2_control *);
-+ int (*set_control)(struct soc_camera_device *, struct v4l2_control *);
-+ const struct v4l2_queryctrl *controls;
-+ int num_controls;
-+ unsigned int(*get_datawidth)(struct soc_camera_device *icd);
-+};
-+
-+static inline struct v4l2_queryctrl const *soc_camera_find_qctrl(
-+ struct soc_camera_ops *ops, int id)
-+{
-+ int i;
-+
-+ for (i = 0; i < ops->num_controls; i++)
-+ if (ops->controls[i].id == id)
-+ return &ops->controls[i];
-+
-+ return NULL;
-+}
-+
-+#define IS_MASTER (1<<0)
-+#define IS_HSYNC_ACTIVE_HIGH (1<<1)
-+#define IS_VSYNC_ACTIVE_HIGH (1<<2)
-+#define IS_DATAWIDTH_8 (1<<3)
-+#define IS_DATAWIDTH_9 (1<<4)
-+#define IS_DATAWIDTH_10 (1<<5)
-+#define IS_PCLK_SAMPLE_RISING (1<<6)
-+
-+#endif
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml
deleted file mode 100644
index a681d2ad2e..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml
+++ /dev/null
@@ -1,1330 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux
-Subject: [RFC PATCH 2/8] V4L2 soc_camera driver for PXA27x processors
-Date: Wed, 23 Jan 2008 18:41:30 +0100 (CET)
-Lines: 1259
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231816430.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110136 28805 80.91.229.12 (23 Jan 2008 17:42:16 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:16 +0000 (UTC)
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:35 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjc5-0002rt-JS
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:14 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id 2A84F730D3; Wed, 23 Jan 2008 12:41:44 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHffgW017091 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:41:41 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHffAN027831
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:41 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfHEp000673
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:18 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:10 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp032) with SMTP; 23 Jan 2008 18:41:10 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX1+0is8xDaK0Koc8XTQH0vhXxt8dgUbjrW8SVR/i+1
- dGRci20BqQXyog
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbO-00029q-7k
- for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:30 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36472
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36472>
-
-This patch adds a driver for the Quick Capture Interface on the PXA270. It
-is based on the original driver from Intel, but has been re-worked
-multiple times since then, this time with the V4L2 API support.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
----
- drivers/media/video/Kconfig | 8 +
- drivers/media/video/Makefile | 1 +
- drivers/media/video/pxa_camera.c | 895 +++++++++++++++++++++++++++++++++++
- include/asm-arm/arch-pxa/pxa-regs.h | 94 ++++
- include/asm-arm/arch-pxa/pxa_cif.h | 48 ++
- 5 files changed, 1046 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/video/pxa_camera.c
- create mode 100644 include/asm-arm/arch-pxa/pxa_cif.h
-
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index be54183..dc0dfec 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -803,4 +803,12 @@ config SOC_CAMERA
- over a bus like PCI or USB. For example some i2c camera hanging
- directly on the data bus of an SoC.
-
-+config VIDEO_PXA27X
-+ tristate "PXA27x Quick Capture Interface driver"
-+ depends on VIDEO_DEV && PXA27x
-+ select VIDEO_BUF
-+ select SOC_CAMERA
-+ ---help---
-+ This is a v4l2 driver for the PXA27x Quick Capture Interface
-+
- endif # VIDEO_CAPTURE_DRIVERS
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index 97a9135..81b7cd6 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -116,6 +116,7 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/
-
- obj-$(CONFIG_VIDEO_VIVI) += vivi.o
-
-+obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o
- obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
-
- EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
-diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c
-new file mode 100644
-index 0000000..78927fb
---- /dev/null
-+++ b/drivers/media/video/pxa_camera.c
-@@ -0,0 +1,895 @@
-+/*
-+ * V4L2 Driver for PXA camera host
-+ *
-+ * Copyright (C) 2006, Sascha Hauer, Pengutronix
-+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.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.
-+ */
-+
-+#include <asm/io.h>
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/delay.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/errno.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/kernel.h>
-+#include <linux/mm.h>
-+#include <linux/moduleparam.h>
-+#include <linux/time.h>
-+#include <linux/version.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-dev.h>
-+#include <media/soc_camera.h>
-+
-+#include <linux/videodev.h>
-+#include <linux/video_decoder.h>
-+
-+#include <asm/dma.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/pxa_cif.h>
-+
-+#define PXA_CAM_VERSION_CODE KERNEL_VERSION(0, 0, 5)
-+#define PXA_CAM_DRV_NAME "pxa2xx-camera"
-+
-+#define CICR0_IRQ_MASK (CICR0_TOM | CICR0_RDAVM | CICR0_FEM | CICR0_EOLM | \
-+ CICR0_PERRM | CICR0_QDM | CICR0_CDM | CICR0_SOFM | \
-+ CICR0_EOFM | CICR0_FOM)
-+
-+/*
-+ * Structures
-+ */
-+
-+/* buffer for one video frame */
-+struct pxa_buffer {
-+ /* common v4l buffer stuff -- must be first */
-+ struct videobuf_buffer vb;
-+
-+ const struct soc_camera_data_format *fmt;
-+
-+ /* our descriptor list needed for the PXA DMA engine */
-+ dma_addr_t sg_dma;
-+ struct pxa_dma_desc *sg_cpu;
-+ size_t sg_size;
-+ int inwork;
-+};
-+
-+struct pxa_framebuffer_queue {
-+ dma_addr_t sg_last_dma;
-+ struct pxa_dma_desc *sg_last_cpu;
-+};
-+
-+struct pxa_camera_dev {
-+ struct device *dev;
-+
-+ unsigned int irq;
-+ void __iomem *base;
-+ unsigned int dma_chan_y;
-+
-+ enum v4l2_buf_type type;
-+
-+ struct pxacamera_platform_data *pdata;
-+ struct resource *res;
-+ unsigned long platform_flags;
-+ unsigned long platform_mclk_10khz;
-+
-+ struct list_head capture;
-+
-+ spinlock_t lock;
-+
-+ int dma_running;
-+
-+ struct pxa_buffer *active;
-+};
-+
-+static const char *pxa_cam_driver_description = "PXA_Camera";
-+
-+static unsigned int vid_limit = 16; /* Video memory limit, in Mb */
-+
-+/*
-+ * Videobuf operations
-+ */
-+static int
-+pxa_videobuf_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
-+{
-+ struct soc_camera_device *icd = vq->priv_data;
-+
-+ pr_debug("%s: count=%d, size=%d\n", __FUNCTION__, *count, *size);
-+
-+ *size = icd->width * icd->height * ((icd->current_fmt->depth + 7) >> 3);
-+
-+ if (0 == *count)
-+ *count = 32;
-+ while (*size * *count > vid_limit * 1024 * 1024)
-+ (*count)--;
-+
-+ return 0;
-+}
-+
-+static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf)
-+{
-+ struct soc_camera_device *icd = vq->priv_data;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ struct pxa_camera_dev *pcdev = ici->priv;
-+
-+ BUG_ON(in_interrupt());
-+
-+ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, &buf->vb, buf->vb.baddr, buf->vb.bsize);
-+
-+ /* This waits until this buffer is out of danger, i.e., until it is no longer
-+ * in STATE_QUEUED or STATE_ACTIVE */
-+ videobuf_waiton(&buf->vb, 0, 0);
-+ videobuf_dma_unmap(vq, &buf->vb.dma);
-+ videobuf_dma_free(&buf->vb.dma);
-+
-+ if (buf->sg_cpu)
-+ dma_free_coherent(pcdev->dev, buf->sg_size, buf->sg_cpu, buf->sg_dma);
-+ buf->sg_cpu = NULL;
-+
-+ buf->vb.state = STATE_NEEDS_INIT;
-+}
-+
-+static int
-+pxa_videobuf_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
-+ enum v4l2_field field)
-+{
-+ struct soc_camera_device *icd = vq->priv_data;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ struct pxa_camera_dev *pcdev = ici->priv;
-+ struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
-+// unsigned long flags;
-+ int i, ret;
-+
-+ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, vb, vb->baddr, vb->bsize);
-+
-+ /* Added list head initialization on alloc */
-+ WARN_ON(!list_empty(&vb->queue));
-+
-+#ifdef DEBUG
-+ /* This can be useful if you want to see if we actually fill
-+ * the buffer with something */
-+ memset((void *)vb->baddr, 0xaa, vb->bsize);
-+#endif
-+
-+ BUG_ON(NULL == icd->current_fmt);
-+
-+ /* I think, in buf_prepare you only have to protect global data,
-+ * the actual buffer is yours */
-+// spin_lock_irqsave(&pcdev->lock, flags);
-+ buf->inwork = 1;
-+
-+ if (buf->fmt != icd->current_fmt ||
-+ vb->width != icd->width ||
-+ vb->height != icd->height ||
-+ vb->field != field) {
-+ buf->fmt = icd->current_fmt;
-+ vb->width = icd->width;
-+ vb->height = icd->height;
-+ vb->field = field;
-+ vb->state = STATE_NEEDS_INIT;
-+ }
-+
-+ vb->size = vb->width * vb->height * ((buf->fmt->depth + 7) >> 3);
-+ if (0 != vb->baddr && vb->bsize < vb->size) {
-+ ret = -EINVAL;
-+ goto out;
-+ }
-+
-+ if (vb->state == STATE_NEEDS_INIT) {
-+ unsigned int size = vb->size;
-+
-+ if (0 != (ret = videobuf_iolock(vq, vb, NULL)))
-+ goto fail;
-+
-+ if (buf->sg_cpu)
-+ dma_free_coherent(pcdev->dev, buf->sg_size, buf->sg_cpu, buf->sg_dma);
-+
-+ buf->sg_size = (vb->dma.sglen + 1) * sizeof(struct pxa_dma_desc);
-+ buf->sg_cpu = dma_alloc_coherent(pcdev->dev,
-+ buf->sg_size,
-+ &buf->sg_dma, GFP_KERNEL);
-+ if (!buf->sg_cpu) {
-+ ret = -ENOMEM;
-+ goto fail;
-+ }
-+
-+ pr_debug("%s nents=%d size: %d sg=0x%p\n", __FUNCTION__, vb->dma.sglen, size, vb->dma.sglist);
-+ for (i = 0; i < vb->dma.sglen; i++ ) {
-+ struct scatterlist *sg = vb->dma.sglist;
-+ unsigned int dma_len = sg_dma_len(&sg[i]), xfer_len;
-+
-+ BUG_ON(!sg[i].page);
-+
-+ sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset;
-+
-+ buf->sg_cpu[i].dsadr = pcdev->res->start + 0x28; /* CIBR0 */
-+ buf->sg_cpu[i].dtadr = sg_dma_address(&sg[i]);
-+ /* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */
-+// xfer_len = (min(dma_len, size) + 7) & ~7;
-+ xfer_len = min(dma_len, size);
-+ if (xfer_len & 7)
-+ dev_err(&icd->dev, "Unaligned buffer: dma_len %u, size %u\n",
-+ dma_len, size);
-+ buf->sg_cpu[i].dcmd = DCMD_FLOWSRC | DCMD_BURST8 | DCMD_INCTRGADDR |
-+ xfer_len;
-+ size -= dma_len;
-+ buf->sg_cpu[i].ddadr = buf->sg_dma + (i + 1) *
-+ sizeof(struct pxa_dma_desc);
-+ }
-+ buf->sg_cpu[vb->dma.sglen - 1].ddadr = DDADR_STOP;
-+ buf->sg_cpu[vb->dma.sglen - 1].dcmd |= DCMD_ENDIRQEN;
-+
-+ vb->state = STATE_PREPARED;
-+ }
-+
-+ buf->inwork = 0;
-+// spin_unlock_irqrestore(&pcdev->lock, flags);
-+
-+ return 0;
-+
-+fail:
-+ free_buffer(vq,buf);
-+out:
-+ buf->inwork = 0;
-+// spin_unlock_irqrestore(&pcdev->lock, flags);
-+ return ret;
-+}
-+
-+static void
-+pxa_videobuf_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
-+{
-+ struct soc_camera_device *icd = vq->priv_data;
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ struct pxa_camera_dev *pcdev = ici->priv;
-+ struct pxa_buffer *buf = container_of(vb,struct pxa_buffer,vb);
-+ struct pxa_buffer *active = pcdev->active;
-+ int nents = vb->dma.sglen;
-+ unsigned long flags;
-+
-+ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, vb, vb->baddr, vb->bsize);
-+ spin_lock_irqsave(&pcdev->lock, flags);
-+
-+ list_add_tail(&vb->queue, &pcdev->capture);
-+
-+ vb->state = STATE_ACTIVE;
-+
-+ if (!pcdev->active) {
-+ CIFR |= CIFR_RESET_F;
-+ DDADR(pcdev->dma_chan_y) = buf->sg_dma;
-+ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
-+ pcdev->active = buf;
-+ CICR0 |= CICR0_ENB;
-+ } else {
-+ /* Stop DMA engine */
-+ DCSR(pcdev->dma_chan_y) = 0;
-+
-+ /* Add the descriptors we just initialized to the currently
-+ * running chain
-+ */
-+ pcdev->active->sg_cpu[active->vb.dma.sglen - 1].ddadr = buf->sg_dma;
-+
-+ /* Setup a dummy descriptor with the DMA engines current
-+ * state
-+ */
-+ buf->sg_cpu[nents].dsadr = pcdev->res->start + 0x28; /* CIBR0 */
-+ buf->sg_cpu[nents].dtadr = DTADR(pcdev->dma_chan_y);
-+ buf->sg_cpu[nents].dcmd = DCMD(pcdev->dma_chan_y);
-+
-+ if (DDADR(pcdev->dma_chan_y) == DDADR_STOP) {
-+ /* The DMA engine is on the last descriptor, set the
-+ * next descriptors address to the descriptors
-+ * we just initialized
-+ */
-+ buf->sg_cpu[nents].ddadr = buf->sg_dma;
-+ } else {
-+ buf->sg_cpu[nents].ddadr = DDADR(pcdev->dma_chan_y);
-+ }
-+
-+ /* The next descriptor is the dummy descriptor */
-+ DDADR(pcdev->dma_chan_y) = buf->sg_dma + nents *
-+ sizeof(struct pxa_dma_desc);
-+
-+ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
-+#if 0
-+ if(CISR & CISR_IFO_0) {
-+ printk("%s: fifo ovl. repeat last\n",__FUNCTION__);
-+ DDADR(pcdev->dma_chan_y) = pcdev->active->sg_dma;
-+
-+ CICR0 &= ~CICR0_ENB;
-+ CIFR |= CIFR_RESET_F;
-+ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
-+ CICR0 |= CICR0_ENB;
-+ } else {
-+ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
-+// printk("no fifo ovl\n");
-+ }
-+#endif
-+ }
-+
-+ spin_unlock_irqrestore(&pcdev->lock, flags);
-+
-+}
-+
-+static void pxa_videobuf_release(struct videobuf_queue *vq, struct videobuf_buffer *vb)
-+{
-+ struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
-+
-+ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__,vb, vb->baddr, vb->bsize);
-+
-+#ifdef DEBUG
-+ switch(vb->state) {
-+ case STATE_ACTIVE:
-+ printk("%s (active)\n",__FUNCTION__);
-+ break;
-+ case STATE_QUEUED:
-+ printk("%s (queued)\n",__FUNCTION__);
-+ break;
-+ case STATE_PREPARED:
-+ printk("%s (prepared)\n",__FUNCTION__);
-+ break;
-+ default:
-+ printk("%s (unknown)\n",__FUNCTION__);
-+ break;
-+ }
-+#endif
-+
-+ free_buffer(vq, buf);
-+}
-+
-+static int pxa_videobuf_map_sg(void *dev, struct scatterlist *sg, int nents,
-+ int direction)
-+{
-+ pr_debug("%s, number of pages=%d\n", __FUNCTION__,nents);
-+ BUG_ON(direction == DMA_NONE);
-+
-+ dma_map_sg(dev, sg, nents, DMA_FROM_DEVICE);
-+
-+ return nents;
-+}
-+
-+static int pxa_videobuf_unmap_sg(void *dev, struct scatterlist *sg, int nents,
-+ int direction)
-+{
-+ pr_debug("%s\n", __FUNCTION__);
-+ dma_unmap_sg(dev, sg, nents, DMA_FROM_DEVICE);
-+ return 0;
-+}
-+
-+static int pxa_videobuf_dma_sync_sg(void *dev, struct scatterlist *sg, int nents,
-+ int direction)
-+{
-+ return 0;
-+}
-+
-+static void pxa_camera_dma_irq_y(int channel, void *data)
-+{
-+ struct pxa_camera_dev *pcdev = data;
-+ struct pxa_buffer *buf;
-+ unsigned long flags;
-+ unsigned int status;
-+ struct videobuf_buffer *vb;
-+
-+ spin_lock_irqsave(&pcdev->lock, flags);
-+
-+ status = DCSR(pcdev->dma_chan_y);
-+ if (status & DCSR_BUSERR) {
-+ printk("%s: Bus Error\n",__FUNCTION__);
-+ DCSR(pcdev->dma_chan_y) |= DCSR_BUSERR;
-+ goto out;
-+ }
-+
-+ if (!(status & DCSR_ENDINTR)) {
-+ printk("%s: unknown dma interrupt source. status: 0x%08x\n",
-+ __FUNCTION__, status);
-+ goto out;
-+ }
-+
-+ DCSR(pcdev->dma_chan_y) |= DCSR_ENDINTR;
-+
-+ if (!pcdev->active) {
-+ printk("%s: no active buf\n",__FUNCTION__);
-+ goto out;
-+ }
-+
-+ vb = &pcdev->active->vb;
-+ buf = container_of(vb, struct pxa_buffer, vb);
-+ WARN_ON(buf->inwork || list_empty(&vb->queue));
-+ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__,vb, vb->baddr, vb->bsize);
-+
-+ /* _init is used to debug races, see comment in pxa_is_reqbufs() */
-+ list_del_init(&vb->queue);
-+ vb->state = STATE_DONE;
-+ do_gettimeofday(&vb->ts);
-+ vb->field_count++;
-+ wake_up(&vb->done);
-+
-+ if (list_empty(&pcdev->capture)) {
-+ pcdev->active = NULL;
-+ DCSR(pcdev->dma_chan_y) = 0;
-+ CICR0 &= ~CICR0_ENB;
-+ goto out;
-+ }
-+
-+ pcdev->active = list_entry(pcdev->capture.next, struct pxa_buffer, vb.queue);
-+
-+out:
-+ spin_unlock_irqrestore(&pcdev->lock, flags);
-+}
-+
-+static struct videobuf_queue_ops pxa_video_ops = {
-+ .buf_setup = pxa_videobuf_setup,
-+ .buf_prepare = pxa_videobuf_prepare,
-+ .buf_queue = pxa_videobuf_queue,
-+ .buf_release = pxa_videobuf_release,
-+
-+ /* Non-pci handling routines */
-+ .vb_map_sg = pxa_videobuf_map_sg,
-+ .vb_dma_sync_sg = pxa_videobuf_dma_sync_sg,
-+ .vb_unmap_sg = pxa_videobuf_unmap_sg,
-+};
-+
-+static int mclk_get_divisor(unsigned int mclk_10khz)
-+{
-+ unsigned long div;
-+ unsigned long lcdclk;
-+
-+ lcdclk = get_lcdclk_frequency_10khz();
-+
-+ /* We verify platform_mclk_10khz != 0, so this is only against future bugs */
-+ if (unlikely(!mclk_10khz))
-+ return 0;
-+
-+ div = (lcdclk + 2 * mclk_10khz - 1) / (2 * mclk_10khz) - 1;
-+
-+ pr_debug("pxa_camera: LCD clock %lukHz, platform target freq %dkHz, divisor %lu\n",
-+ lcdclk * 10, mclk_10khz * 10, div);
-+
-+ return div;
-+}
-+
-+static void pxa_is_activate(struct pxa_camera_dev *pcdev)
-+{
-+ struct pxacamera_platform_data *pdata = pcdev->pdata;
-+
-+ printk("Registered platform device at %p data %p\n", pcdev, pdata);
-+
-+ if (pdata && pdata->init) {
-+ dev_dbg(pcdev->dev, "%s: Init gpios\n", __FUNCTION__);
-+ pdata->init(pcdev->dev);
-+ }
-+
-+ if (pdata && pdata->power) {
-+ dev_dbg(pcdev->dev, "%s: Power on camera\n", __FUNCTION__);
-+ pdata->power(pcdev->dev, 1);
-+ }
-+
-+ if (pdata && pdata->reset) {
-+ dev_dbg(pcdev->dev, "%s: Releasing camera reset\n", __FUNCTION__);
-+ pdata->reset(pcdev->dev, 1);
-+ }
-+
-+ CICR0 = 0x3FF; /* disable all interrupts */
-+ pxa_set_cken(CKEN_CAMERA, 1);
-+}
-+
-+static void pxa_is_deactivate(struct pxa_camera_dev *pdev)
-+{
-+ struct pxacamera_platform_data *board = pdev->pdata;
-+
-+ pxa_set_cken(CKEN_CAMERA, 0);
-+/*
-+ dev_dbg(&pdev->dev, "%s: Asserting camera reset\n", __FUNCTION__);
-+ if (board && board->reset) {
-+ board->reset(&pdev->dev, 0);
-+ }
-+*/
-+ dev_dbg(pdev->dev, "%s: Power off camera\n", __FUNCTION__);
-+ if (board && board->power)
-+ board->power(pdev->dev, 0);
-+}
-+
-+static irqreturn_t pxa_camera_irq(int irq, void *data)
-+{
-+// struct pxa_camera_dev *pcdev = (struct pxa_camera_dev *)data;
-+// printk("%s: 0x%08x\n",__FUNCTION__,CISR);
-+ unsigned int status = CISR;
-+// if(status & CISR_SOF) printk("Start of frame\n");
-+// if(status & CISR_EOF) printk("End of frame\n");
-+// printk("%s 0x%08x\n",__FUNCTION__,status);
-+ CISR = status;
-+
-+ return IRQ_HANDLED;
-+}
-+
-+/* The following two functions absolutely depend on the fact, that
-+ * there can be only one camera on PXA quick capture interface */
-+static int pxa_is_add_device(struct soc_camera_device *icd)
-+{
-+ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
-+ struct pxa_camera_dev *pcdev = ici->priv;
-+
-+ dev_info(&icd->dev, "PXA Camera driver loaded for host %d\n",
-+ icd->iface);
-+
-+ pxa_is_activate(pcdev);
-+// udelay(200);
-+ return icd->ops->init(icd);
-+}
-+
-+static void pxa_is_remove_device(struct soc_camera_device *icd)
-+{
-+ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
-+ struct pxa_camera_dev *pcdev = ici->priv;
-+
-+ dev_dbg(pcdev->dev, "%s\n", __FUNCTION__);
-+
-+ /* disable capture, disable interrupts */
-+ CICR0 = 0x3ff;
-+ /* Stop DMA engine */
-+ DCSR(pcdev->dma_chan_y) = 0;
-+
-+ icd->ops->release(icd);
-+
-+ pxa_is_deactivate(pcdev);
-+}
-+
-+static int pxa_is_set_capture_format(struct soc_camera_device *icd,
-+ __u32 pixfmt, struct v4l2_rect *rect)
-+{
-+ struct soc_camera_host *ici =
-+ to_soc_camera_host(icd->dev.parent);
-+ struct pxa_camera_dev *pcdev = ici->priv;
-+ unsigned int datawidth = 0, dw, bpp;
-+ u32 cicr0, cicr4 = 0;
-+ int ret;
-+
-+ /* If requested data width is supported by the platform, use it */
-+ switch (icd->cached_datawidth) {
-+ case 10:
-+ if (pcdev->platform_flags & PXACIF_DATAWIDTH_10)
-+ datawidth = IS_DATAWIDTH_10;
-+ break;
-+ case 9:
-+ if (pcdev->platform_flags & PXACIF_DATAWIDTH_9)
-+ datawidth = IS_DATAWIDTH_9;
-+ break;
-+ case 8:
-+ if (pcdev->platform_flags & PXACIF_DATAWIDTH_8)
-+ datawidth = IS_DATAWIDTH_8;
-+ }
-+ if (!datawidth)
-+ return -EINVAL;
-+
-+ ret = icd->ops->set_capture_format(icd, pixfmt, rect,
-+ datawidth |
-+ (pcdev->platform_flags & PXACIF_MASTER ?
-+ IS_MASTER : 0) |
-+ (pcdev->platform_flags & PXACIF_HSP ?
-+ 0 : IS_HSYNC_ACTIVE_HIGH) |
-+ (pcdev->platform_flags & PXACIF_VSP ?
-+ 0 : IS_VSYNC_ACTIVE_HIGH) |
-+ (pcdev->platform_flags & PXACIF_PCP ?
-+ 0 : IS_PCLK_SAMPLE_RISING));
-+ if (ret < 0)
-+ return ret;
-+
-+ /* Datawidth is now guaranteed to be equal to one of the three values.
-+ * We fix bit-per-pixel equal to data-width... */
-+ switch (datawidth) {
-+ case IS_DATAWIDTH_10:
-+ icd->cached_datawidth = 10;
-+ dw = 4;
-+ bpp = 0x40;
-+ break;
-+ case IS_DATAWIDTH_9:
-+ icd->cached_datawidth = 9;
-+ dw = 3;
-+ bpp = 0x20;
-+ break;
-+ case IS_DATAWIDTH_8:
-+ icd->cached_datawidth = 8;
-+ dw = 2;
-+ bpp = 0;
-+ }
-+
-+ if (pcdev->platform_flags & PXACIF_PCLK_EN)
-+ cicr4 |= CICR4_PCLK_EN;
-+ if (pcdev->platform_flags & PXACIF_MCLK_EN)
-+ cicr4 |= CICR4_MCLK_EN;
-+ if (pcdev->platform_flags & PXACIF_PCP)
-+ cicr4 |= CICR4_PCP;
-+ if (pcdev->platform_flags & PXACIF_HSP)
-+ cicr4 |= CICR4_HSP;
-+ if (pcdev->platform_flags & PXACIF_VSP)
-+ cicr4 |= CICR4_VSP;
-+
-+ cicr0 = CICR0;
-+ if (cicr0 & CICR0_ENB)
-+ CICR0 = cicr0 & ~CICR0_ENB;
-+ CICR1 = CICR1_PPL_VAL(rect->width - 1) | bpp | dw;
-+ CICR2 = 0;
-+ CICR3 = CICR3_LPF_VAL(rect->height - 1) |
-+ CICR3_BFW_VAL(min((unsigned short)255, icd->y_skip_top));
-+ CICR4 = mclk_get_divisor(pcdev->platform_mclk_10khz) | cicr4;
-+
-+ /* CIF interrupts are not used, only DMA */
-+ CICR0 = (pcdev->platform_flags & PXACIF_MASTER ?
-+ 0 : (CICR0_SL_CAP_EN | CICR0_SIM_SP)) |
-+ CICR0_DMAEN | CICR0_IRQ_MASK | (cicr0 & CICR0_ENB);
-+
-+ return 0;
-+}
-+
-+static int pxa_is_try_fmt_cap(struct soc_camera_host *ici, struct v4l2_format *f)
-+{
-+ /* limit to pxa hardware capabilities */
-+ if (f->fmt.pix.height < 32)
-+ f->fmt.pix.height = 32;
-+ if (f->fmt.pix.height > 2048)
-+ f->fmt.pix.height = 2048;
-+ if (f->fmt.pix.width < 48)
-+ f->fmt.pix.width = 48;
-+ if (f->fmt.pix.width > 2048)
-+ f->fmt.pix.width = 2048;
-+ f->fmt.pix.width &= ~0x01;
-+
-+ return 0;
-+}
-+
-+static int pxa_is_reqbufs(struct soc_camera_file *icf, struct v4l2_requestbuffers *p)
-+{
-+ int i;
-+
-+ /* This is for locking debugging only. I removed spinlocks and now I
-+ * check whether .prepare is ever called on a linked buffer, or whether
-+ * a dma IRQ can occur for an in-work or unlinked buffer. Until now
-+ * it hadn't triggered */
-+ for (i = 0; i < p->count; i++) {
-+ struct pxa_buffer *buf = container_of(icf->vb_vidq.bufs[i],
-+ struct pxa_buffer, vb);
-+ buf->inwork = 0;
-+ INIT_LIST_HEAD(&buf->vb.queue);
-+ }
-+
-+ return 0;
-+}
-+
-+static unsigned int pxa_is_poll(struct file *file, poll_table *pt)
-+{
-+ struct soc_camera_file *icf = file->private_data;
-+ struct pxa_buffer *buf;
-+
-+ buf = list_entry(icf->vb_vidq.stream.next, struct pxa_buffer, vb.stream);
-+
-+ poll_wait(file, &buf->vb.done, pt);
-+
-+ if (buf->vb.state == STATE_DONE ||
-+ buf->vb.state == STATE_ERROR)
-+ return POLLIN|POLLRDNORM;
-+
-+ return 0;
-+}
-+
-+static int pxa_is_querycap(struct soc_camera_host *ici,
-+ struct v4l2_capability *cap)
-+{
-+ /* cap->name is set by the firendly caller:-> */
-+ strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card));
-+ cap->version = PXA_CAM_VERSION_CODE;
-+ cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
-+
-+ return 0;
-+}
-+
-+/* Should beallocated dynamically too, but we have only one. */
-+static struct soc_camera_host pxa_soc_camera_host = {
-+ .drv_name = PXA_CAM_DRV_NAME,
-+ .vbq_ops = &pxa_video_ops,
-+ .add = pxa_is_add_device,
-+ .remove = pxa_is_remove_device,
-+ .msize = sizeof(struct pxa_buffer),
-+ .set_capture_format = pxa_is_set_capture_format,
-+ .try_fmt_cap = pxa_is_try_fmt_cap,
-+ .reqbufs = pxa_is_reqbufs,
-+ .poll = pxa_is_poll,
-+ .querycap = pxa_is_querycap,
-+};
-+
-+static int pxa_camera_probe(struct platform_device *pdev)
-+{
-+ struct pxa_camera_dev *pcdev;
-+ struct resource *res;
-+ void __iomem *base;
-+ unsigned int irq;
-+ int err = 0;
-+
-+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+ irq = platform_get_irq(pdev, 0);
-+ if (!res || !irq) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ pcdev = kzalloc(sizeof(*pcdev), GFP_KERNEL);
-+ if (!pcdev) {
-+ dev_err(&pdev->dev, "%s: Could not allocate pcdev\n", __FUNCTION__);
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ dev_set_drvdata(&pdev->dev, pcdev);
-+ pcdev->res = res;
-+
-+ pcdev->pdata = pdev->dev.platform_data;
-+ pcdev->platform_flags = pcdev->pdata->flags;
-+ if (! pcdev->platform_flags & (PXACIF_DATAWIDTH_8 | PXACIF_DATAWIDTH_9 |
-+ PXACIF_DATAWIDTH_10)) {
-+ /* Platform hasn't set available data widths. This is bad.
-+ * Warn and use a default. */
-+ dev_warn(&pdev->dev, "WARNING! Platform hasn't set available "
-+ "data widths, using default 10 bit\n");
-+ pcdev->platform_flags |= PXACIF_DATAWIDTH_10;
-+ }
-+ pcdev->platform_mclk_10khz = pcdev->pdata->mclk_10khz;
-+ if (!pcdev->platform_mclk_10khz) {
-+ dev_warn(&pdev->dev,
-+ "mclk_10khz == 0! Please, fix your platform data. "
-+ "Using default 20MHz\n");
-+ pcdev->platform_mclk_10khz = 2000;
-+ }
-+
-+ INIT_LIST_HEAD(&pcdev->capture);
-+ spin_lock_init(&pcdev->lock);
-+
-+ /*
-+ * Request the regions.
-+ */
-+ if (!request_mem_region(res->start, res->end - res->start + 1, PXA_CAM_DRV_NAME)) {
-+ err = -EBUSY;
-+ goto exit_kfree;
-+ }
-+
-+ base = ioremap(res->start, res->end - res->start + 1);
-+ if (!base) {
-+ err = -ENOMEM;
-+ goto exit_release;
-+ }
-+ pcdev->irq = irq;
-+ pcdev->base = base;
-+ pcdev->dev = &pdev->dev;
-+
-+ /* request dma */
-+ pcdev->dma_chan_y = pxa_request_dma("CI_Y", DMA_PRIO_HIGH, pxa_camera_dma_irq_y, pcdev);
-+ if (pcdev->dma_chan_y < 0) {
-+ printk(KERN_ERR "Can't request DMA for Y\n");
-+ err = -ENOMEM;
-+ goto exit_iounmap;
-+ }
-+ pr_debug("got DMA channel %d\n", pcdev->dma_chan_y);
-+
-+ DRCMR68 = pcdev->dma_chan_y | DRCMR_MAPVLD;
-+
-+ /* request irq */
-+ err = request_irq(pcdev->irq, pxa_camera_irq, 0, PXA_CAM_DRV_NAME, pcdev);
-+ if (err) {
-+ printk ("Camera interrupt register failed \n");
-+ goto exit_free_dma;
-+ }
-+
-+ pxa_soc_camera_host.priv = pcdev;
-+ pxa_soc_camera_host.dev.parent = &pdev->dev;
-+ pxa_soc_camera_host.nr = pdev->id;
-+ err = soc_camera_host_register(&pxa_soc_camera_host, THIS_MODULE);
-+ if (err)
-+ goto exit_free_irq;
-+
-+ return 0;
-+
-+ exit_free_irq:
-+ free_irq(pcdev->irq, pcdev);
-+ exit_free_dma:
-+ pxa_free_dma(pcdev->dma_chan_y);
-+ exit_iounmap:
-+ iounmap(base);
-+ exit_release:
-+ release_mem_region(res->start, res->end - res->start + 1);
-+ exit_kfree:
-+ kfree(pcdev);
-+ exit:
-+ return err;
-+}
-+
-+static int __devexit pxa_camera_remove(struct platform_device *pdev)
-+{
-+ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
-+ struct resource *res;
-+
-+ pxa_free_dma(pcdev->dma_chan_y);
-+ free_irq(pcdev->irq, pcdev);
-+
-+ soc_camera_host_unregister(&pxa_soc_camera_host);
-+
-+ iounmap(pcdev->base);
-+
-+ res = pcdev->res;
-+ release_mem_region(res->start, res->end - res->start + 1);
-+
-+ kfree(pcdev);
-+
-+ dev_info(&pdev->dev, "%s: PXA Camera driver unloaded\n", __FUNCTION__);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Suspend the Camera Module.
-+ */
-+static int pxa_camera_suspend(struct platform_device *pdev, pm_message_t level)
-+{
-+ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
-+
-+ dev_info(&pdev->dev, "camera suspend\n");
-+ disable_irq(pcdev->irq);
-+ return 0;
-+}
-+
-+/*
-+ * Resume the Camera Module.
-+ */
-+static int pxa_camera_resume(struct platform_device *pdev)
-+{
-+ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
-+
-+ dev_info(&pdev->dev, "camera resume\n");
-+ enable_irq(pcdev->irq);
-+
-+ /* if (pcdev) { */ /* FIXME: dev in use? */
-+/* DRCMR68 = pcdev->dma_chan_y | DRCMR_MAPVLD; */
-+/* DRCMR69 = pcdev->dma_chan_cb | DRCMR_MAPVLD; */
-+/* DRCMR70 = pcdev->dma_chan_cr | DRCMR_MAPVLD; */
-+/* } */
-+
-+ return 0;
-+}
-+
-+
-+static struct platform_driver pxa_camera_driver = {
-+ .driver = {
-+ .name = PXA_CAM_DRV_NAME,
-+ },
-+ .probe = pxa_camera_probe,
-+ .remove = __exit_p(pxa_camera_remove),
-+ .suspend = pxa_camera_suspend,
-+ .resume = pxa_camera_resume,
-+};
-+
-+
-+static int __devinit pxa_camera_init(void)
-+{
-+ return platform_driver_register(&pxa_camera_driver);
-+}
-+
-+static void __exit pxa_camera_exit(void)
-+{
-+ return platform_driver_unregister(&pxa_camera_driver);
-+}
-+
-+module_init(pxa_camera_init);
-+module_exit(pxa_camera_exit);
-+
-+MODULE_DESCRIPTION("PXA27x SoC Camera Host driver");
-+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
-+MODULE_LICENSE("GPL");
-diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h
-index e68b593..f587c83 100644
---- a/include/asm-arm/arch-pxa/pxa-regs.h
-+++ b/include/asm-arm/arch-pxa/pxa-regs.h
-@@ -1229,19 +1229,26 @@
- #define GPIO10_RTCCLK 10 /* real time clock (1 Hz) */
- #define GPIO11_3_6MHz 11 /* 3.6 MHz oscillator out */
- #define GPIO12_32KHz 12 /* 32 kHz out */
-+#define GPIO12_CIF_DD7 12 /* Capture Interface D7 (PXA27x) */
- #define GPIO13_MBGNT 13 /* memory controller grant */
- #define GPIO14_MBREQ 14 /* alternate bus master request */
- #define GPIO15_nCS_1 15 /* chip select 1 */
- #define GPIO16_PWM0 16 /* PWM0 output */
- #define GPIO17_PWM1 17 /* PWM1 output */
-+#define GPIO17_CIF_DD6 17 /* Capture Interface D6 (PXA27x) */
- #define GPIO18_RDY 18 /* Ext. Bus Ready */
- #define GPIO19_DREQ1 19 /* External DMA Request */
- #define GPIO20_DREQ0 20 /* External DMA Request */
- #define GPIO23_SCLK 23 /* SSP clock */
-+#define GPIO23_CIF_MCLK 23 /* Capture Interface MCLK (PXA27x) */
- #define GPIO24_SFRM 24 /* SSP Frame */
-+#define GPIO24_CIF_FV 24 /* Capture Interface FV (PXA27x) */
- #define GPIO25_STXD 25 /* SSP transmit */
-+#define GPIO25_CIF_LV 25 /* Capture Interface LV (PXA27x) */
- #define GPIO26_SRXD 26 /* SSP receive */
-+#define GPIO26_CIF_PCLK 26 /* Capture Interface PCLK (PXA27x) */
- #define GPIO27_SEXTCLK 27 /* SSP ext_clk */
-+#define GPIO27_CIF_DD0 27 /* Capture Interface D0 (PXA27x) */
- #define GPIO28_BITCLK 28 /* AC97/I2S bit_clk */
- #define GPIO29_SDATA_IN 29 /* AC97 Sdata_in0 / I2S Sdata_in */
- #define GPIO30_SDATA_OUT 30 /* AC97/I2S Sdata_out */
-@@ -1262,28 +1269,40 @@
- #define GPIO41_FFRTS 41 /* FFUART request to send */
- #define GPIO42_BTRXD 42 /* BTUART receive data */
- #define GPIO42_HWRXD 42 /* HWUART receive data */
-+#define GPIO42_CIF_MCLK 42 /* Capture interface MCLK (PXA27x) */
- #define GPIO43_BTTXD 43 /* BTUART transmit data */
- #define GPIO43_HWTXD 43 /* HWUART transmit data */
-+#define GPIO43_CIF_FV 43 /* Capture interface FV (PXA27x) */
- #define GPIO44_BTCTS 44 /* BTUART clear to send */
- #define GPIO44_HWCTS 44 /* HWUART clear to send */
-+#define GPIO44_CIF_LV 44 /* Capture interface LV (PXA27x) */
- #define GPIO45_BTRTS 45 /* BTUART request to send */
- #define GPIO45_HWRTS 45 /* HWUART request to send */
- #define GPIO45_AC97_SYSCLK 45 /* AC97 System Clock */
-+#define GPIO45_CIF_PCLK 45 /* Capture interface PCLK (PXA27x) */
- #define GPIO46_ICPRXD 46 /* ICP receive data */
- #define GPIO46_STRXD 46 /* STD_UART receive data */
- #define GPIO47_ICPTXD 47 /* ICP transmit data */
- #define GPIO47_STTXD 47 /* STD_UART transmit data */
-+#define GPIO47_CIF_DD0 47 /* Capture interface D0 (PXA27x) */
- #define GPIO48_nPOE 48 /* Output Enable for Card Space */
-+#define GPIO48_CIF_DD5 48 /* Capture interface D5 (PXA27x) */
- #define GPIO49_nPWE 49 /* Write Enable for Card Space */
- #define GPIO50_nPIOR 50 /* I/O Read for Card Space */
-+#define GPIO50_CIF_DD3 50 /* Capture interface D3 (PXA27x) */
- #define GPIO51_nPIOW 51 /* I/O Write for Card Space */
-+#define GPIO51_CIF_DD2 51 /* Capture interface D2 (PXA27x) */
- #define GPIO52_nPCE_1 52 /* Card Enable for Card Space */
-+#define GPIO52_CIF_DD4 52 /* Capture interface D4 (PXA27x) */
- #define GPIO53_nPCE_2 53 /* Card Enable for Card Space */
- #define GPIO53_MMCCLK 53 /* MMC Clock */
-+#define GPIO53_CIF_MCLK 53 /* Capture interface MCLK (PXA27x) */
- #define GPIO54_MMCCLK 54 /* MMC Clock */
- #define GPIO54_pSKTSEL 54 /* Socket Select for Card Space */
- #define GPIO54_nPCE_2 54 /* Card Enable for Card Space (PXA27x) */
-+#define GPIO54_CIF_PCLK 54 /* Capture interface PCLK (PXA27x) */
- #define GPIO55_nPREG 55 /* Card Address bit 26 */
-+#define GPIO55_CIF_DD1 55 /* Capture interface D1 (PXA27x) */
- #define GPIO56_nPWAIT 56 /* Wait signal for Card Space */
- #define GPIO57_nIOIS16 57 /* Bus Width select for I/O Card Space */
- #define GPIO58_LDD_0 58 /* LCD data pin 0 */
-@@ -1318,11 +1337,28 @@
- #define GPIO79_nCS_3 79 /* chip select 3 */
- #define GPIO80_nCS_4 80 /* chip select 4 */
- #define GPIO81_NSCLK 81 /* NSSP clock */
-+#define GPIO81_CIF_DD0 81 /* Capture Interface D0 (PXA27x) */
- #define GPIO82_NSFRM 82 /* NSSP Frame */
-+#define GPIO82_CIF_DD5 82 /* Capture Interface D5 (PXA27x) */
- #define GPIO83_NSTXD 83 /* NSSP transmit */
-+#define GPIO83_CIF_DD4 83 /* Capture Interface D4 (PXA27x) */
- #define GPIO84_NSRXD 84 /* NSSP receive */
-+#define GPIO84_CIF_FV 84 /* Capture Interface FV (PXA27x) */
- #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */
-+#define GPIO85_CIF_LV 85 /* Capture Interface LV (PXA27x) */
-+#define GPIO90_CIF_DD4 90 /* Capture Interface DD4 (PXA27x) */
-+#define GPIO91_CIF_DD5 91 /* Capture Interface DD5 (PXA27x) */
- #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */
-+#define GPIO93_CIF_DD6 93 /* Capture interface D6 (PXA27x) */
-+#define GPIO94_CIF_DD5 94 /* Capture interface D5 (PXA27x) */
-+#define GPIO95_CIF_DD4 95 /* Capture interface D4 (PXA27x) */
-+#define GPIO98_CIF_DD0 98 /* Capture interface D0 (PXA27x) */
-+#define GPIO103_CIF_DD3 103 /* Capture interface D3 (PXA27x) */
-+#define GPIO104_CIF_DD2 104 /* Capture interface D2 (PXA27x) */
-+#define GPIO105_CIF_DD1 105 /* Capture interface D1 (PXA27x) */
-+#define GPIO106_CIF_DD9 106 /* Capture interface D9 (PXA27x) */
-+#define GPIO107_CIF_DD8 107 /* Capture interface D8 (PXA27x) */
-+#define GPIO108_CIF_DD7 108 /* Capture interface D7 (PXA27x) */
- #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */
- #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */
- #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */
-@@ -1332,6 +1368,9 @@
- #define GPIO112_MMCCMD 112 /* MMC CMD (PXA27x) */
- #define GPIO113_I2S_SYSCLK 113 /* I2S System Clock (PXA27x) */
- #define GPIO113_AC97_RESET_N 113 /* AC97 NRESET on (PXA27x) */
-+#define GPIO114_CIF_DD1 114 /* Capture interface D1 (PXA27x) */
-+#define GPIO115_CIF_DD3 115 /* Capture interface D3 (PXA27x) */
-+#define GPIO116_CIF_DD2 116 /* Capture interface D2 (PXA27x) */
-
- /* GPIO alternate function mode & direction */
-
-@@ -1357,19 +1396,26 @@
- #define GPIO10_RTCCLK_MD (10 | GPIO_ALT_FN_1_OUT)
- #define GPIO11_3_6MHz_MD (11 | GPIO_ALT_FN_1_OUT)
- #define GPIO12_32KHz_MD (12 | GPIO_ALT_FN_1_OUT)
-+#define GPIO12_CIF_DD7_MD (12 | GPIO_ALT_FN_2_IN)
- #define GPIO13_MBGNT_MD (13 | GPIO_ALT_FN_2_OUT)
- #define GPIO14_MBREQ_MD (14 | GPIO_ALT_FN_1_IN)
- #define GPIO15_nCS_1_MD (15 | GPIO_ALT_FN_2_OUT)
- #define GPIO16_PWM0_MD (16 | GPIO_ALT_FN_2_OUT)
- #define GPIO17_PWM1_MD (17 | GPIO_ALT_FN_2_OUT)
-+#define GPIO17_CIF_DD6_MD (17 | GPIO_ALT_FN_2_IN)
- #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 GPIO23_CIF_MCLK_MD (23 | GPIO_ALT_FN_1_OUT)
- #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT)
-+#define GPIO24_CIF_FV_MD (24 | GPIO_ALT_FN_1_OUT)
- #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT)
-+#define GPIO25_CIF_LV_MD (25 | GPIO_ALT_FN_1_OUT)
- #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT)
- #define GPIO26_SRXD_MD (26 | GPIO_ALT_FN_1_IN)
-+#define GPIO26_CIF_PCLK_MD (26 | GPIO_ALT_FN_2_IN)
- #define GPIO27_SEXTCLK_MD (27 | GPIO_ALT_FN_1_IN)
-+#define GPIO27_CIF_DD0_MD (27 | GPIO_ALT_FN_3_IN)
- #define GPIO28_BITCLK_AC97_MD (28 | GPIO_ALT_FN_1_IN)
- #define GPIO28_BITCLK_IN_I2S_MD (28 | GPIO_ALT_FN_2_IN)
- #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT)
-@@ -1394,34 +1440,46 @@
- #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT)
- #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
- #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN)
-+#define GPIO42_CIF_MCLK_MD (42 | GPIO_ALT_FN_3_OUT)
- #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN)
- #define GPIO43_BTTXD_MD (43 | GPIO_ALT_FN_2_OUT)
-+#define GPIO43_CIF_FV_MD (43 | GPIO_ALT_FN_3_OUT)
- #define GPIO43_HWTXD_MD (43 | GPIO_ALT_FN_3_OUT)
- #define GPIO44_BTCTS_MD (44 | GPIO_ALT_FN_1_IN)
- #define GPIO44_HWCTS_MD (44 | GPIO_ALT_FN_3_IN)
-+#define GPIO44_CIF_LV_MD (44 | GPIO_ALT_FN_3_OUT)
- #define GPIO45_BTRTS_MD (45 | GPIO_ALT_FN_2_OUT)
- #define GPIO45_HWRTS_MD (45 | GPIO_ALT_FN_3_OUT)
- #define GPIO45_SYSCLK_AC97_MD (45 | GPIO_ALT_FN_1_OUT)
-+#define GPIO45_CIF_PCLK_MD (45 | GPIO_ALT_FN_3_IN)
- #define GPIO46_ICPRXD_MD (46 | GPIO_ALT_FN_1_IN)
- #define GPIO46_STRXD_MD (46 | GPIO_ALT_FN_2_IN)
- #define GPIO47_ICPTXD_MD (47 | GPIO_ALT_FN_2_OUT)
- #define GPIO47_STTXD_MD (47 | GPIO_ALT_FN_1_OUT)
-+#define GPIO47_CIF_DD0_MD (47 | GPIO_ALT_FN_1_IN)
- #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT)
-+#define GPIO48_CIF_DD5_MD (48 | GPIO_ALT_FN_1_IN)
- #define GPIO48_HWTXD_MD (48 | GPIO_ALT_FN_1_OUT)
- #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT)
- #define GPIO49_HWRXD_MD (49 | GPIO_ALT_FN_1_IN)
- #define GPIO49_nPWE_MD (49 | GPIO_ALT_FN_2_OUT)
- #define GPIO50_nPIOR_MD (50 | GPIO_ALT_FN_2_OUT)
-+#define GPIO50_CIF_DD3_MD (50 | GPIO_ALT_FN_1_IN)
- #define GPIO50_HWCTS_MD (50 | GPIO_ALT_FN_1_IN)
- #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT)
- #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT)
-+#define GPIO51_CIF_DD2_MD (51 | GPIO_ALT_FN_1_IN)
- #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT)
-+#define GPIO52_CIF_DD4_MD (52 | GPIO_ALT_FN_1_IN)
- #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT)
- #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT)
-+#define GPIO53_CIF_MCLK_MD (53 | GPIO_ALT_FN_2_OUT)
- #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 GPIO54_CIF_PCLK_MD (54 | GPIO_ALT_FN_3_IN)
- #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT)
-+#define GPIO55_CIF_DD1_MD (55 | GPIO_ALT_FN_1_IN)
- #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN)
- #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN)
- #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT)
-@@ -1458,16 +1516,33 @@
- #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_CIF_DD0_MD (81 | GPIO_ALT_FN_2_IN)
- #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT)
- #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN)
-+#define GPIO82_CIF_DD5_MD (82 | GPIO_ALT_FN_3_IN)
- #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT)
- #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN)
-+#define GPIO83_CIF_DD4_MD (83 | GPIO_ALT_FN_3_IN)
- #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT)
- #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN)
-+#define GPIO84_CIF_FV_MD (84 | GPIO_ALT_FN_3_OUT)
- #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT)
-+#define GPIO85_CIF_LV_MD (85 | GPIO_ALT_FN_3_OUT)
-+#define GPIO90_CIF_DD4_MD (90 | GPIO_ALT_FN_3_IN)
-+#define GPIO91_CIF_DD5_MD (91 | GPIO_ALT_FN_3_IN)
- #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT)
-+#define GPIO93_CIF_DD6_MD (93 | GPIO_ALT_FN_2_IN)
-+#define GPIO94_CIF_DD5_MD (94 | GPIO_ALT_FN_2_IN)
-+#define GPIO95_CIF_DD4_MD (95 | GPIO_ALT_FN_2_IN)
-+#define GPIO98_CIF_DD0_MD (98 | GPIO_ALT_FN_2_IN)
- #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT)
-+#define GPIO103_CIF_DD3_MD (103 | GPIO_ALT_FN_1_IN)
- #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT)
-+#define GPIO104_CIF_DD2_MD (104 | GPIO_ALT_FN_1_IN)
-+#define GPIO105_CIF_DD1_MD (105 | GPIO_ALT_FN_1_IN)
-+#define GPIO106_CIF_DD9_MD (106 | GPIO_ALT_FN_1_IN)
-+#define GPIO107_CIF_DD8_MD (107 | GPIO_ALT_FN_1_IN)
-+#define GPIO108_CIF_DD7_MD (108 | GPIO_ALT_FN_1_IN)
- #define GPIO109_MMCDAT1_MD (109 | GPIO_ALT_FN_1_OUT)
- #define GPIO110_MMCDAT2_MD (110 | GPIO_ALT_FN_1_OUT)
- #define GPIO110_MMCCS0_MD (110 | GPIO_ALT_FN_1_OUT)
-@@ -2207,6 +2282,11 @@
- #define CICR0_ENB (1 << 28) /* Camera interface enable */
- #define CICR0_DIS (1 << 27) /* Camera interface disable */
- #define CICR0_SIM (0x7 << 24) /* Sensor interface mode mask */
-+#define CICR0_SIM_MP (0 << 24)
-+#define CICR0_SIM_SP (1 << 24)
-+#define CICR0_SIM_MS (2 << 24)
-+#define CICR0_SIM_EP (3 << 24)
-+#define CICR0_SIM_ES (4 << 24)
- #define CICR0_TOM (1 << 9) /* Time-out mask */
- #define CICR0_RDAVM (1 << 8) /* Receive-data-available mask */
- #define CICR0_FEM (1 << 7) /* FIFO-empty mask */
-@@ -2257,6 +2337,20 @@
- #define CICR4_FR_RATE (0x7 << 8) /* Frame rate mask */
- #define CICR4_DIV (0xff << 0) /* Clock divisor mask */
-
-+#define CICR1_DW_VAL(x) ((x) & CICR1_DW) /* Data bus width */
-+#define CICR1_PPL_VAL(x) (((x) << 15) & CICR1_PPL) /* Pixels per line */
-+
-+#define CICR2_BLW_VAL(x) (((x) << 24) & CICR2_BLW) /* Beginning-of-line pixel clock wait count */
-+#define CICR2_ELW_VAL(x) (((x) << 16) & CICR2_ELW) /* End-of-line pixel clock wait count */
-+#define CICR2_HSW_VAL(x) (((x) << 10) & CICR2_HSW) /* Horizontal sync pulse width */
-+#define CICR2_BFPW_VAL(x) (((x) << 3) & CICR2_BFPW) /* Beginning-of-frame pixel clock wait count */
-+#define CICR2_FSW_VAL(x) (((x) << 0) & CICR2_FSW) /* Frame stabilization wait count */
-+
-+#define CICR3_BFW_VAL(x) (((x) << 24) & CICR3_BFW) /* Beginning-of-frame line clock wait count */
-+#define CICR3_EFW_VAL(x) (((x) << 16) & CICR3_EFW) /* End-of-frame line clock wait count */
-+#define CICR3_VSW_VAL(x) (((x) << 11) & CICR3_VSW) /* Vertical sync pulse width */
-+#define CICR3_LPF_VAL(x) (((x) << 0) & CICR3_LPF) /* Lines per frame */
-+
- #define CISR_FTO (1 << 15) /* FIFO time-out */
- #define CISR_RDAV_2 (1 << 14) /* Channel 2 receive data available */
- #define CISR_RDAV_1 (1 << 13) /* Channel 1 receive data available */
-diff --git a/include/asm-arm/arch-pxa/pxa_cif.h b/include/asm-arm/arch-pxa/pxa_cif.h
-new file mode 100644
-index 0000000..ca1e5a2
---- /dev/null
-+++ b/include/asm-arm/arch-pxa/pxa_cif.h
-@@ -0,0 +1,48 @@
-+/*
-+ pxa_camera - PXA camera driver header file
-+
-+ Copyright (C) 2003, Intel Corporation
-+ Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.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., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*/
-+
-+#ifndef __PXA_CIF_H_
-+#define __PXA_CIF_H_
-+
-+#define PXACIF_MASTER 1
-+#define PXACIF_DATAWIDTH_4 2
-+#define PXACIF_DATAWIDTH_5 4
-+#define PXACIF_DATAWIDTH_8 8
-+#define PXACIF_DATAWIDTH_9 0x10
-+#define PXACIF_DATAWIDTH_10 0x20
-+#define PXACIF_PCLK_EN 0x40
-+#define PXACIF_MCLK_EN 0x80
-+#define PXACIF_PCP 0x100
-+#define PXACIF_HSP 0x200
-+#define PXACIF_VSP 0x400
-+
-+struct pxacamera_platform_data {
-+ int (*init)(struct device *);
-+ int (*power)(struct device *, int on);
-+ int (*reset)(struct device *, int set);
-+
-+ unsigned long flags;
-+ unsigned long mclk_10khz;
-+};
-+
-+extern void pxa_set_cif_info(struct pxacamera_platform_data *info);
-+
-+#endif /* __PXA_CIF_H_ */
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml
deleted file mode 100644
index 22abad6b1c..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml
+++ /dev/null
@@ -1,282 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux,gmane.linux.drivers.i2c
-Subject: [RFC PATCH 3/8] Philips PCA9536 4 bit I2C GPIO extender driver
-Date: Wed, 23 Jan 2008 18:41:39 +0100 (CET)
-Lines: 210
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231820060.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110131 28782 80.91.229.12 (23 Jan 2008 17:42:11 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:11 +0000 (UTC)
-Cc: i2c@lm-sensors.org
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:30 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjcK-0002zY-Jd
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:29 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id 1D07D72F5C; Wed, 23 Jan 2008 12:42:02 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHfx7t017217 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:41:59 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHfxW4028112
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:59 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfPdF000786
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:25 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:19 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp021) with SMTP; 23 Jan 2008 18:41:19 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX18gZ14xakQgr3grhg4ys0olRWzKeUW5G+x4WUV9jY
- iLvi2phxgtwjvM
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>)
- id 1JHjbX-00029t-5A; Wed, 23 Jan 2008 18:41:39 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36471 gmane.linux.drivers.i2c:251
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36471>
-
-This driver will be used by the mt9m001 and the mt9v022 camera drivers,
-that can use a pca9536 to switch between 8 and 10 bit modes.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
----
- drivers/i2c/chips/Kconfig | 10 +++
- drivers/i2c/chips/Makefile | 1 +
- drivers/i2c/chips/pca9536.c | 153 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 164 insertions(+), 0 deletions(-)
- create mode 100644 drivers/i2c/chips/pca9536.c
-
-diff --git a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig
-index 2e1c24f..6f492f1 100644
---- a/drivers/i2c/chips/Kconfig
-+++ b/drivers/i2c/chips/Kconfig
-@@ -65,6 +65,16 @@ config SENSORS_PCF8574
- These devices are hard to detect and rarely found on mainstream
- hardware. If unsure, say N.
-
-+config SENSORS_PCA9536
-+ tristate "Philips PCA9536 4-bit I/O port"
-+ depends on EXPERIMENTAL
-+ help
-+ If you say yes here you get support for the Philips PCA9539
-+ 4-bit I/O port.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called pca9536.
-+
- config SENSORS_PCA9539
- tristate "Philips PCA9539 16-bit I/O port"
- depends on EXPERIMENTAL
-diff --git a/drivers/i2c/chips/Makefile b/drivers/i2c/chips/Makefile
-index ca924e1..e24c582 100644
---- a/drivers/i2c/chips/Makefile
-+++ b/drivers/i2c/chips/Makefile
-@@ -8,6 +8,7 @@ obj-$(CONFIG_DS1682) += ds1682.o
- obj-$(CONFIG_SENSORS_EEPROM) += eeprom.o
- obj-$(CONFIG_SENSORS_MAX6875) += max6875.o
- obj-$(CONFIG_SENSORS_M41T00) += m41t00.o
-+obj-$(CONFIG_SENSORS_PCA9536) += pca9536.o
- obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
- obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
- obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
-diff --git a/drivers/i2c/chips/pca9536.c b/drivers/i2c/chips/pca9536.c
-new file mode 100644
-index 0000000..08e5d8b
---- /dev/null
-+++ b/drivers/i2c/chips/pca9536.c
-@@ -0,0 +1,152 @@
-+/*
-+ * Driver for PCA9536 I/O Expander
-+ *
-+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.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/videodev.h>
-+#include <linux/slab.h>
-+#include <linux/i2c.h>
-+#include <linux/hwmon-sysfs.h>
-+
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-chip-ident.h>
-+
-+#define PCA9536_INPUT 0
-+#define PCA9536_OUTPUT 1
-+#define PCA9536_INVERT 2
-+#define PCA9536_DIRECTION 3
-+
-+/* following are the sysfs callback functions */
-+static ssize_t pca9536_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *psa = to_sensor_dev_attr(attr);
-+ struct i2c_client *client = to_i2c_client(dev);
-+
-+ return sprintf(buf, "%d\n", i2c_smbus_read_byte_data(client,
-+ psa->index));
-+}
-+
-+static ssize_t pca9536_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ struct sensor_device_attribute *psa = to_sensor_dev_attr(attr);
-+ struct i2c_client *client = to_i2c_client(dev);
-+ unsigned long val = simple_strtoul(buf, NULL, 0);
-+
-+ if (val > 0xff)
-+ return -EINVAL;
-+
-+ i2c_smbus_write_byte_data(client, psa->index, val);
-+ return count;
-+}
-+
-+int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level)
-+{
-+ s32 data;
-+
-+ if (pin > 3)
-+ return -EINVAL;
-+
-+ /* Switch to output */
-+ data = i2c_smbus_read_byte_data(client, PCA9536_DIRECTION);
-+ if (data < 0)
-+ return data;
-+ data = i2c_smbus_write_byte_data(client, PCA9536_DIRECTION,
-+ data & ~(1 << pin));
-+ if (data < 0)
-+ return data;
-+
-+ /* Set level */
-+ data = i2c_smbus_read_byte_data(client, PCA9536_OUTPUT);
-+ if (data < 0)
-+ return data;
-+ if (level)
-+ data |= (1 << pin);
-+ else
-+ data &= ~(1 << pin);
-+ data = i2c_smbus_write_byte_data(client, PCA9536_OUTPUT, data);
-+
-+ return data;
-+}
-+EXPORT_SYMBOL(pca9536_set_level);
-+
-+/* Define the device attributes */
-+
-+#define PCA9536_ENTRY_RO(name, reg) \
-+ static SENSOR_DEVICE_ATTR(name, S_IRUGO, pca9536_show, NULL, reg)
-+
-+#define PCA9536_ENTRY_RW(name, reg) \
-+ static SENSOR_DEVICE_ATTR(name, S_IRUGO | S_IWUSR, pca9536_show, \
-+ pca9536_store, reg)
-+
-+PCA9536_ENTRY_RO(input, PCA9536_INPUT);
-+PCA9536_ENTRY_RW(output, PCA9536_OUTPUT);
-+PCA9536_ENTRY_RW(invert, PCA9536_INVERT);
-+PCA9536_ENTRY_RW(direction, PCA9536_DIRECTION);
-+
-+static struct attribute *pca9536_attributes[] = {
-+ &sensor_dev_attr_input.dev_attr.attr,
-+ &sensor_dev_attr_output.dev_attr.attr,
-+ &sensor_dev_attr_invert.dev_attr.attr,
-+ &sensor_dev_attr_direction.dev_attr.attr,
-+ NULL
-+};
-+
-+static struct attribute_group pca9536_defattr_group = {
-+ .attrs = pca9536_attributes,
-+};
-+
-+static int pca9536_probe(struct i2c_client *client)
-+{
-+ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
-+ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_BYTE\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ if (client->dev.platform_data)
-+ /* This chip is going to be used from the kernel */
-+ *(struct i2c_client **)client->dev.platform_data = client;
-+
-+ /* Register sysfs hooks */
-+ return sysfs_create_group(&client->dev.kobj,
-+ &pca9536_defattr_group);
-+}
-+
-+static int pca9536_remove(struct i2c_client *client)
-+{
-+ sysfs_remove_group(&client->dev.kobj, &pca9536_defattr_group);
-+ return 0;
-+}
-+
-+static struct i2c_driver pca9536_i2c_driver = {
-+ .driver = {
-+ .name = "pca9536",
-+ },
-+ .probe = pca9536_probe,
-+ .remove = pca9536_remove,
-+};
-+
-+static int __init pca9536_mod_init(void)
-+{
-+ return i2c_add_driver(&pca9536_i2c_driver);
-+}
-+
-+static void __exit pca9536_mod_exit(void)
-+{
-+ i2c_del_driver(&pca9536_i2c_driver);
-+}
-+
-+module_init(pca9536_mod_init);
-+module_exit(pca9536_mod_exit);
-+
-+MODULE_DESCRIPTION("PCA9536 driver");
-+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
-+MODULE_LICENSE("GPL");
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml
deleted file mode 100644
index 4ac9b73ff3..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml
+++ /dev/null
@@ -1,781 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux
-Subject: [RFC PATCH 4/8] Add support for the MT9M001 camera
-Date: Wed, 23 Jan 2008 18:41:48 +0100 (CET)
-Lines: 710
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231825190.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110157 28881 80.91.229.12 (23 Jan 2008 17:42:37 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:37 +0000 (UTC)
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:56 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjcT-00035B-5V
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:38 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id 9E85472FB4; Wed, 23 Jan 2008 12:42:10 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHg8l9017245 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:42:08 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHg8vG028189
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:08 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfZHu001044
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:35 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:29 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp052) with SMTP; 23 Jan 2008 18:41:29 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX18JzEdNfKMJtAD7BzHkb2TLaDIMUqlssnktvE95Pt
- 3/al7Wqsw8NYli
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbg-00029w-Ku
- for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:48 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36473
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36473>
-
-This driver supports Micron MT9M001 monochrome and colour cameras.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
----
- drivers/media/video/Kconfig | 15 +
- drivers/media/video/Makefile | 1 +
- drivers/media/video/mt9m001.c | 649 +++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 665 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/video/mt9m001.c
-
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index dc0dfec..def5246 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -803,6 +803,21 @@ config SOC_CAMERA
- over a bus like PCI or USB. For example some i2c camera hanging
- directly on the data bus of an SoC.
-
-+config SOC_CAMERA_MT9M001
-+ tristate "mt9m001 support"
-+ depends on SOC_CAMERA
-+ select SENSORS_PCA9536 if MT9M001_PCA9536_SWITCH
-+ help
-+ This driver supports MT9M001 cameras from Micron, monochrome
-+ and colour models.
-+
-+config MT9M001_PCA9536_SWITCH
-+ bool "pca9536 datawidth switch for mt9m001"
-+ depends on SOC_CAMERA_MT9M001
-+ help
-+ Select this if your MT9M001 camera uses a PCA9536 I2C GPIO
-+ extender to switch between 8 and 10 bit datawidth modes
-+
- config VIDEO_PXA27X
- tristate "PXA27x Quick Capture Interface driver"
- depends on VIDEO_DEV && PXA27x
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index 81b7cd6..c56bfdb 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -118,5 +118,6 @@ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
-
- obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o
- obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
-+obj-$(CONFIG_SOC_CAMERA_MT9M001) += mt9m001.o
-
- EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
-diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c
-new file mode 100644
-index 0000000..dc4cc8f
---- /dev/null
-+++ b/drivers/media/video/mt9m001.c
-@@ -0,0 +1,649 @@
-+/*
-+ * Driver for MT9M001 CMOS Image Sensor from Micron
-+ *
-+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.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/videodev.h>
-+#include <linux/slab.h>
-+#include <linux/i2c.h>
-+#include <linux/log2.h>
-+
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-chip-ident.h>
-+#include <media/soc_camera.h>
-+
-+/* mt9m001 i2c address 0x5d
-+ * The platform has to define i2c_board_info
-+ * and call i2c_register_board_info() */
-+
-+/* mt9m001 selected register addresses */
-+#define MT9M001_CHIP_VERSION 0x00
-+#define MT9M001_ROW_START 0x01
-+#define MT9M001_COLUMN_START 0x02
-+#define MT9M001_WINDOW_HEIGHT 0x03
-+#define MT9M001_WINDOW_WIDTH 0x04
-+#define MT9M001_HORIZONTAL_BLANKING 0x05
-+#define MT9M001_VERTICAL_BLANKING 0x06
-+#define MT9M001_OUTPUT_CONTROL 0x07
-+#define MT9M001_SHUTTER_WIDTH 0x09
-+#define MT9M001_FRAME_RESTART 0x0b
-+#define MT9M001_SHUTTER_DELAY 0x0c
-+#define MT9M001_RESET 0x0d
-+#define MT9M001_READ_OPTIONS1 0x1e
-+#define MT9M001_READ_OPTIONS2 0x20
-+#define MT9M001_GLOBAL_GAIN 0x35
-+#define MT9M001_CHIP_ENABLE 0xF1
-+
-+/* must be 32 bit, bitwise coded by reg_to_int and int_to_reg below */
-+struct reg_access {
-+ u16 value;
-+ u8 address;
-+ u8 rw;
-+} __attribute__ ((packed));
-+
-+union reg_access_32 {
-+ struct reg_access reg;
-+ u32 ctrl;
-+};
-+
-+enum reg_rw { REG_READ = 0, REG_WRITE = 1, };
-+
-+/*
-+#define reg_to_int(rw, address, value) ({ \
-+ union reg_access_32 u = {.reg = {value, address, rw}}; \
-+ u.i32; \
-+})
-+*/
-+
-+/* rw has to be numerically most significant, because
-+ * maximum, minimum and value are signed */
-+#ifdef __LITTLE_ENDIAN
-+#define reg_to_int(rw, address, value) (((value) & 0xffff) | (((address) & 0xff) << 16) | (((rw) & 0x7f) << 24))
-+#else
-+#define reg_to_int(rw, address, value) ((((value) & 0xffff) << 16) | (((address) & 0xff) << 8) | ((rw) & 0x7f))
-+#endif
-+
-+static const struct soc_camera_data_format mt9m001_colour_formats[]= {
-+ {
-+ .name = "RGB Bayer (sRGB)",
-+ .depth = 16,
-+ .fourcc = V4L2_PIX_FMT_SBGGR8,
-+ .colorspace = V4L2_COLORSPACE_SRGB,
-+ }
-+};
-+
-+static const struct soc_camera_data_format mt9m001_monochrome_formats[]= {
-+ {
-+ .name = "Monochrome 10 bit",
-+ .depth = 10,
-+ .fourcc = V4L2_PIX_FMT_Y16,
-+ }, {
-+ .name = "Monochrome 8 bit",
-+ .depth = 8,
-+ .fourcc = V4L2_PIX_FMT_GREY,
-+ },
-+};
-+
-+enum mt9m001_model {
-+ MT9M001C12ST,
-+ MT9M001C12STM
-+};
-+
-+struct mt9m001 {
-+ struct i2c_client *client;
-+ struct soc_camera_device icd;
-+ enum mt9m001_model model;
-+ struct i2c_client *data_switch;
-+ unsigned char autoexposure;
-+ unsigned char datawidth;
-+};
-+
-+static int reg_read(struct soc_camera_device *icd, const u8 reg)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ struct i2c_client *client = mt9m001->client;
-+ s32 data = i2c_smbus_read_word_data(client, reg);
-+ return data < 0 ? data : swab16(data);
-+}
-+
-+static int reg_write(struct soc_camera_device *icd, const u8 reg,
-+ const u16 data)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ return i2c_smbus_write_word_data(mt9m001->client, reg, swab16(data));
-+}
-+
-+static int reg_set(struct soc_camera_device *icd, const u8 reg,
-+ const u16 data)
-+{
-+ int ret;
-+
-+ if ((ret = reg_read(icd, reg)) < 0)
-+ return ret;
-+ return reg_write(icd, reg, ret | data);
-+}
-+
-+static int reg_clear(struct soc_camera_device *icd, const u8 reg,
-+ const u16 data)
-+{
-+ int ret;
-+
-+ if ((ret = reg_read(icd, reg)) < 0)
-+ return ret;
-+ return reg_write(icd, reg, ret & ~data);
-+}
-+
-+static int mt9m001_init(struct soc_camera_device *icd)
-+{
-+ int ret;
-+
-+ /* Disable chip, synchronous option update */
-+ dev_dbg(icd->vdev->dev, "%s\n", __FUNCTION__);
-+
-+ ret = reg_write(icd, MT9M001_RESET, 1);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_RESET, 0);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_OUTPUT_CONTROL, 0);
-+
-+ return ret >= 0 ? 0 : -EIO;
-+}
-+
-+static int mt9m001_release(struct soc_camera_device *icd)
-+{
-+ /* Disable the chip */
-+ reg_write(icd, MT9M001_OUTPUT_CONTROL, 0);
-+ return 0;
-+}
-+
-+static int mt9m001_start_capture(struct soc_camera_device *icd)
-+{
-+ /* Switch to master "normal" mode */
-+ if (reg_write(icd, MT9M001_OUTPUT_CONTROL, 2) < 0)
-+ return -EIO;
-+ return 0;
-+}
-+
-+static int mt9m001_stop_capture(struct soc_camera_device *icd)
-+{
-+ /* Stop sensor readout */
-+ if (reg_write(icd, MT9M001_OUTPUT_CONTROL, 0) < 0)
-+ return -EIO;
-+ return 0;
-+}
-+
-+extern int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level);
-+
-+static int external_bus_switch(struct i2c_client *extender, int go8bit)
-+{
-+ if (! extender)
-+ return -ENODEV;
-+
-+#ifdef CONFIG_MT9M001_PCA9536_SWITCH
-+ return pca9536_set_level(extender, 0, go8bit);
-+#else
-+ return -ENODEV;
-+#endif
-+}
-+
-+static int mt9m001_set_capture_format(struct soc_camera_device *icd, __u32 pixfmt,
-+ struct v4l2_rect *rect, unsigned int flags)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ unsigned int width_flag = flags & (IS_DATAWIDTH_10 | IS_DATAWIDTH_9 |
-+ IS_DATAWIDTH_8);
-+ int ret;
-+ const u16 hblank = 9, vblank = 25;
-+
-+ /* MT9M001 has all capture_format parameters fixed */
-+ if (! (flags & IS_MASTER) ||
-+ ! (flags & IS_PCLK_SAMPLE_RISING) ||
-+ ! (flags & IS_HSYNC_ACTIVE_HIGH) ||
-+ ! (flags & IS_VSYNC_ACTIVE_HIGH)) {
-+ return -EINVAL;
-+ }
-+
-+ /* Only one width bit may be set */
-+ if (!is_power_of_2(width_flag))
-+ return -EINVAL;
-+
-+ if ((mt9m001->datawidth != 10 && (width_flag == IS_DATAWIDTH_10)) ||
-+ (mt9m001->datawidth != 9 && (width_flag == IS_DATAWIDTH_9)) ||
-+ (mt9m001->datawidth != 8 && (width_flag == IS_DATAWIDTH_8))) {
-+ /* data width switch requested */
-+ if (! mt9m001->data_switch)
-+ return -EINVAL;
-+
-+ /* Well, we actually only can do 10 or 8 bits... */
-+ if (width_flag == IS_DATAWIDTH_9)
-+ return -EINVAL;
-+ ret = external_bus_switch(mt9m001->data_switch,
-+ width_flag == IS_DATAWIDTH_8);
-+ if (ret < 0)
-+ return ret;
-+
-+ mt9m001->datawidth = width_flag == IS_DATAWIDTH_8 ? 8 : 10;
-+ }
-+
-+ /* Blanking and start values - default... */
-+ ret = reg_write(icd, MT9M001_HORIZONTAL_BLANKING, hblank);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_VERTICAL_BLANKING, vblank);
-+
-+ /* The caller provides a supported format, as verified per
-+ * call to icd->try_fmt_cap() */
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_COLUMN_START, rect->left);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_ROW_START, rect->top);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_WINDOW_WIDTH, rect->width - 1);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9M001_WINDOW_HEIGHT, rect->height + icd->y_skip_top - 1);
-+ if (ret >= 0 && mt9m001->autoexposure) {
-+ ret = reg_write(icd, MT9M001_SHUTTER_WIDTH, rect->height + icd->y_skip_top + vblank);
-+ if (ret >= 0) {
-+ const struct v4l2_queryctrl *qctrl =
-+ soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE);
-+ icd->exposure = (524 + (rect->height + icd->y_skip_top + vblank - 1) *
-+ (qctrl->maximum - qctrl->minimum)) /
-+ 1048 + qctrl->minimum;
-+ }
-+ }
-+
-+ return ret < 0 ? ret : 0;
-+}
-+
-+static int mt9m001_try_fmt_cap(struct soc_camera_device *icd,
-+ struct v4l2_format *f)
-+{
-+ if (f->fmt.pix.height < 32 + icd->y_skip_top)
-+ f->fmt.pix.height = 32 + icd->y_skip_top;
-+ if (f->fmt.pix.height > 1024 + icd->y_skip_top)
-+ f->fmt.pix.height = 1024 + icd->y_skip_top;
-+ if (f->fmt.pix.width < 48)
-+ f->fmt.pix.width = 48;
-+ if (f->fmt.pix.width > 1280)
-+ f->fmt.pix.width = 1280;
-+ f->fmt.pix.width &= ~0x01; /* has to be even, unsure why was ~3 */
-+
-+ return 0;
-+}
-+
-+static unsigned int mt9m001_get_datawidth(struct soc_camera_device *icd)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ return mt9m001->datawidth;
-+}
-+
-+const struct v4l2_queryctrl mt9m001_controls[] = {
-+ {
-+ .id = V4L2_CID_VFLIP,
-+ .type = V4L2_CTRL_TYPE_BOOLEAN,
-+ .name = "Flip Vertically",
-+ .minimum = 0,
-+ .maximum = 1,
-+ .step = 1,
-+ .default_value = 0,
-+ }, {
-+ .id = V4L2_CID_GAIN,
-+ .type = V4L2_CTRL_TYPE_INTEGER,
-+ .name = "Gain",
-+ .minimum = 0,
-+ .maximum = 127,
-+ .step = 1,
-+ .default_value = 64,
-+ .flags = V4L2_CTRL_FLAG_SLIDER,
-+ }, {
-+ .id = V4L2_CID_EXPOSURE,
-+ .type = V4L2_CTRL_TYPE_INTEGER,
-+ .name = "Exposure",
-+ .minimum = 1,
-+ .maximum = 255,
-+ .step = 1,
-+ .default_value = 255,
-+ .flags = V4L2_CTRL_FLAG_SLIDER,
-+ }, {
-+ .id = V4L2_CID_AUTOEXPOSURE,
-+ .type = V4L2_CTRL_TYPE_BOOLEAN,
-+ .name = "Automatic Exposure",
-+ .minimum = 0,
-+ .maximum = 1,
-+ .step = 1,
-+ .default_value = 1,
-+ }, {
-+ .id = V4L2_CID_PRIVATE_BASE,
-+ .type = V4L2_CTRL_TYPE_INTEGER,
-+ .name = "Register access",
-+ .minimum = reg_to_int(REG_READ, 0, 0),
-+ .maximum = reg_to_int(REG_WRITE, 0xff, (1 << 16) - 1),
-+ .step = 1,
-+ .default_value = 1,
-+ }
-+};
-+
-+static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
-+static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
-+
-+static struct soc_camera_ops mt9m001_ops = {
-+ .owner = THIS_MODULE,
-+ .init = mt9m001_init,
-+ .release = mt9m001_release,
-+ .start_capture = mt9m001_start_capture,
-+ .stop_capture = mt9m001_stop_capture,
-+ .set_capture_format = mt9m001_set_capture_format,
-+ .try_fmt_cap = mt9m001_try_fmt_cap,
-+ .formats = NULL, /* Filled in later depending on the */
-+ .num_formats = 0, /* camera type and data widths */
-+ .get_datawidth = mt9m001_get_datawidth,
-+ .controls = mt9m001_controls,
-+ .num_controls = ARRAY_SIZE(mt9m001_controls),
-+ .get_control = mt9m001_get_control,
-+ .set_control = mt9m001_set_control,
-+};
-+
-+static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ int data;
-+
-+ switch (ctrl->id) {
-+ case V4L2_CID_VFLIP:
-+ data = reg_read(icd, MT9M001_READ_OPTIONS2);
-+ if (data < 0)
-+ return -EIO;
-+ ctrl->value = !!(data & 0x8000);
-+ break;
-+ case V4L2_CID_AUTOEXPOSURE:
-+ ctrl->value = mt9m001->autoexposure;
-+ break;
-+ case V4L2_CID_PRIVATE_BASE:
-+ if (1) {
-+ union reg_access_32 u;
-+
-+ u.ctrl = ctrl->value;
-+ if (u.reg.rw != REG_READ)
-+ return -EINVAL;
-+ data = reg_read(icd, u.reg.address);
-+ if (data < 0)
-+ return -EIO;
-+ u.reg.value = data;
-+ ctrl->value = u.ctrl;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ const struct v4l2_queryctrl *qctrl;
-+ int data;
-+
-+ qctrl = soc_camera_find_qctrl(&mt9m001_ops, ctrl->id);
-+
-+ if (!qctrl)
-+ return -EINVAL;
-+
-+ switch (ctrl->id) {
-+ case V4L2_CID_VFLIP:
-+ if (ctrl->value)
-+ data = reg_set(icd, MT9M001_READ_OPTIONS2, 0x8000);
-+ else
-+ data = reg_clear(icd, MT9M001_READ_OPTIONS2, 0x8000);
-+ if (data < 0)
-+ return -EIO;
-+ break;
-+ case V4L2_CID_GAIN:
-+ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
-+ return -EINVAL;
-+ /* See Datasheet Table 7, Gain settings. */
-+ if (ctrl->value <= qctrl->default_value) {
-+ /* Pack it into 0..1 step 0.125, register values 0..8 */
-+ unsigned long range = qctrl->default_value - qctrl->minimum;
-+ data = ((ctrl->value - qctrl->minimum) * 8 + range / 2) / range;
-+
-+ printk("Setting gain %d\n", data);
-+ data = reg_write(icd, MT9M001_GLOBAL_GAIN, data);
-+ if (data < 0)
-+ return -EIO;
-+ } else {
-+ /* Pack it into 1.125..15 variable step, register values 9..67 */
-+ /* We assume qctrl->maximum - qctrl->default_value - 1 > 0 */
-+ unsigned long range = qctrl->maximum - qctrl->default_value - 1;
-+ unsigned long gain = ((ctrl->value - qctrl->default_value - 1) *
-+ 111 + range / 2) / range + 9;
-+
-+ if (gain <= 32)
-+ data = gain;
-+ else if (gain <= 64)
-+ data = ((gain - 32) * 16 + 16) / 32 + 80;
-+ else
-+ data = ((gain - 64) * 7 + 28) / 56 + 96;
-+
-+ dev_info(&icd->dev, "Setting gain from %d to %d\n",
-+ reg_read(icd, MT9M001_GLOBAL_GAIN), data);
-+ data = reg_write(icd, MT9M001_GLOBAL_GAIN, data);
-+ if (data < 0)
-+ return -EIO;
-+ }
-+
-+ /* Success */
-+ icd->gain = ctrl->value;
-+ break;
-+ case V4L2_CID_EXPOSURE:
-+ /* mt9m001 has maximum == default */
-+ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
-+ return -EINVAL;
-+ else {
-+ unsigned long range = qctrl->maximum - qctrl->minimum;
-+ unsigned long shutter = ((ctrl->value - qctrl->minimum) * 1048 +
-+ range / 2) / range + 1;
-+
-+ dev_info(&icd->dev, "Setting shutter width from %d to %lu\n",
-+ reg_read(icd, MT9M001_SHUTTER_WIDTH), shutter);
-+ if (reg_write(icd, MT9M001_SHUTTER_WIDTH, shutter) < 0)
-+ return -EIO;
-+ icd->exposure = ctrl->value;
-+ mt9m001->autoexposure = 0;
-+ }
-+ break;
-+ case V4L2_CID_AUTOEXPOSURE:
-+ if (ctrl->value) {
-+ const u16 vblank = 25;
-+ if (reg_write(icd, MT9M001_SHUTTER_WIDTH, icd->height +
-+ icd->y_skip_top + vblank) < 0)
-+ return -EIO;
-+ qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE);
-+ icd->exposure = (524 + (icd->height + icd->y_skip_top + vblank - 1) *
-+ (qctrl->maximum - qctrl->minimum)) /
-+ 1048 + qctrl->minimum;
-+ mt9m001->autoexposure = 1;
-+ } else
-+ mt9m001->autoexposure = 0;
-+ break;
-+ case V4L2_CID_PRIVATE_BASE:
-+ if (1) {
-+ union reg_access_32 u;
-+
-+ u.ctrl = ctrl->value;
-+ if (u.reg.rw != REG_WRITE)
-+ return -EINVAL;
-+ data = reg_write(icd, u.reg.address, u.reg.value);
-+ if (data < 0)
-+ return -EIO;
-+ }
-+ }
-+ return 0;
-+}
-+
-+/* Interface active, can use i2c. If it fails, it can indeed mean, that
-+ * this wasn't our capture interface, so, we wait for the right one */
-+static int mt9m001_video_probe(struct soc_camera_device *icd)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+ s32 data;
-+ int ret;
-+
-+ /* We must have a parent by now. And it cannot be a wrong one.
-+ * So this entire test is completely redundant. */
-+ if (!icd->dev.parent ||
-+ to_soc_camera_host(icd->dev.parent)->nr != icd->iface)
-+ return -ENODEV;
-+
-+ /* Enable the chip */
-+ data = reg_write(&mt9m001->icd, MT9M001_CHIP_ENABLE, 1);
-+ dev_dbg(&icd->dev, "write: %d\n", data);
-+
-+ /* Read out the chip version register */
-+ data = reg_read(icd, MT9M001_CHIP_VERSION);
-+
-+ /* must be 0x8411 or 0x8421 for colour sensor and 8431 for bw */
-+ switch (data) {
-+ case 0x8411:
-+ case 0x8421:
-+ mt9m001->model = MT9M001C12ST;
-+ mt9m001_ops.formats = mt9m001_colour_formats;
-+ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_colour_formats);
-+ break;
-+ case 0x8431:
-+ mt9m001->model = MT9M001C12STM;
-+ mt9m001_ops.formats = mt9m001_monochrome_formats;
-+ if (mt9m001->client->dev.platform_data)
-+ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_monochrome_formats);
-+ else
-+ mt9m001_ops.num_formats = 1;
-+ break;
-+ default:
-+ ret = -ENODEV;
-+ dev_err(&icd->dev,
-+ "No MT9M001 chip detected, register read %x\n", data);
-+ goto ei2c;
-+ }
-+
-+ dev_info(&icd->dev, "Detected a MT9M001 chip ID %x (%s)\n", data,
-+ data == 0x8431 ? "C12STM" : "C12ST");
-+
-+ /* Now that we know the model, we can start video */
-+ ret = soc_camera_video_start(icd);
-+ if (ret)
-+ goto eisis;
-+
-+ return 0;
-+
-+eisis:
-+ei2c:
-+ return ret;
-+}
-+
-+static void mt9m001_video_remove(struct soc_camera_device *icd)
-+{
-+ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
-+
-+ dev_dbg(&icd->dev, "Video %x removed: %p, %p\n", mt9m001->client->addr,
-+ mt9m001->icd.dev.parent, mt9m001->icd.vdev);
-+ soc_camera_video_stop(&mt9m001->icd);
-+}
-+
-+static int mt9m001_probe(struct i2c_client *client)
-+{
-+ struct mt9m001 *mt9m001;
-+ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
-+ int ret;
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
-+ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ if (!(mt9m001 = kzalloc(sizeof(struct mt9m001), GFP_KERNEL)))
-+ return -ENOMEM;
-+
-+ mt9m001->client = client;
-+ i2c_set_clientdata(client, mt9m001);
-+
-+ /* Second stage probe - when a capture adapter is there */
-+ mt9m001->icd.probe = mt9m001_video_probe;
-+ mt9m001->icd.remove = mt9m001_video_remove;
-+ mt9m001->icd.ops = &mt9m001_ops;
-+ mt9m001->icd.control = &client->dev;
-+ mt9m001->icd.x_min = 20;
-+ mt9m001->icd.y_min = 12;
-+ mt9m001->icd.x_current = 20;
-+ mt9m001->icd.y_current = 12;
-+ mt9m001->icd.width_min = 48;
-+ mt9m001->icd.width_max = 1280;
-+ mt9m001->icd.height_min = 32;
-+ mt9m001->icd.height_max = 1024;
-+ mt9m001->icd.y_skip_top = 1;
-+ /* Default datawidth - this is the only width this camera (normally)
-+ * supports. It is only with extra logic that it can support
-+ * other widths. Therefore it seems to be a sensible default. */
-+ mt9m001->datawidth = 10;
-+ /* Simulated autoexposure. If enabled, we calculate shutter width
-+ * ourselves in the driver based on vertical blanking and frame width */
-+ mt9m001->autoexposure = 1;
-+
-+ if (client->dev.platform_data) {
-+ struct soc_camera_link *icl = client->dev.platform_data;
-+ /* We have a data bus switch. We call pca9536 functions
-+ * explicitly by name so the driver will not be unloaded,
-+ * and we'll check mt9m001->data_switch anyway every time
-+ * before calling. The only concern is that the driver
-+ * doesn't detach itself from the device, but so far it is
-+ * not supported by the I2C layer */
-+ if (icl->extender)
-+ mt9m001->data_switch = *icl->extender;
-+ mt9m001->icd.iface = icl->bus_id;
-+ }
-+
-+ ret = soc_camera_device_register(&mt9m001->icd);
-+ if (ret)
-+ goto eisdr;
-+
-+ return 0;
-+
-+eisdr:
-+ kfree(mt9m001);
-+ return ret;
-+}
-+
-+static int mt9m001_remove(struct i2c_client *client)
-+{
-+ struct mt9m001 *mt9m001 = i2c_get_clientdata(client);
-+
-+ soc_camera_device_unregister(&mt9m001->icd);
-+ kfree(mt9m001);
-+
-+ return 0;
-+}
-+
-+static struct i2c_driver mt9m001_i2c_driver = {
-+ .driver = {
-+ .name = "mt9m001",
-+ },
-+ .probe = mt9m001_probe,
-+ .remove = mt9m001_remove,
-+};
-+
-+static int __init mt9m001_mod_init(void)
-+{
-+ return i2c_add_driver(&mt9m001_i2c_driver);
-+}
-+
-+static void __exit mt9m001_mod_exit(void)
-+{
-+ i2c_del_driver(&mt9m001_i2c_driver);
-+}
-+
-+module_init(mt9m001_mod_init);
-+module_exit(mt9m001_mod_exit);
-+
-+MODULE_DESCRIPTION("Micron MT9M001 Camera driver");
-+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
-+MODULE_LICENSE("GPL");
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml
deleted file mode 100644
index 33fbf12e20..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml
+++ /dev/null
@@ -1,882 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux
-Subject: [RFC PATCH 5/8] Add support for the MT9V022 camera
-Date: Wed, 23 Jan 2008 18:41:55 +0100 (CET)
-Lines: 811
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231826270.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110170 28931 80.91.229.12 (23 Jan 2008 17:42:50 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:50 +0000 (UTC)
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:08 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjcd-0003BV-40
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:47 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id C4D7773103; Wed, 23 Jan 2008 12:42:17 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHgEOS017265 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:42:14 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgDux028248
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:13 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfhB0001132
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:43 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:36 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp007) with SMTP; 23 Jan 2008 18:41:36 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX195mwEUb8x5N9fm4LtKVLZ+GalahBZqOqI6J/GHUG
- kn7bBfBiSjX3u4
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbn-00029z-Tk
- for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:55 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36476
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36476>
-
-This driver supports Micron MT9V022 colour camera.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
----
- drivers/media/video/Kconfig | 14 +
- drivers/media/video/Makefile | 1 +
- drivers/media/video/mt9v022.c | 751 +++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 766 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/video/mt9v022.c
-
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index def5246..1359f8f 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -818,6 +818,20 @@ config MT9M001_PCA9536_SWITCH
- Select this if your MT9M001 camera uses a PCA9536 I2C GPIO
- extender to switch between 8 and 10 bit datawidth modes
-
-+config SOC_CAMERA_MT9V022
-+ tristate "mt9v022 support"
-+ depends on SOC_CAMERA
-+ select SENSORS_PCA9536 if MT9V022_PCA9536_SWITCH
-+ help
-+ This driver supports MT9V022 cameras from Micron
-+
-+config MT9V022_PCA9536_SWITCH
-+ bool "pca9536 datawidth switch for mt9v022"
-+ depends on SOC_CAMERA_MT9V022
-+ help
-+ Select this if your MT9V022 camera uses a PCA9536 I2C GPIO
-+ extender to switch between 8 and 10 bit datawidth modes
-+
- config VIDEO_PXA27X
- tristate "PXA27x Quick Capture Interface driver"
- depends on VIDEO_DEV && PXA27x
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index c56bfdb..6eaf0ad 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -119,5 +119,6 @@ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
- obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o
- obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
- obj-$(CONFIG_SOC_CAMERA_MT9M001) += mt9m001.o
-+obj-$(CONFIG_SOC_CAMERA_MT9V022) += mt9v022.o
-
- EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
-diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c
-new file mode 100644
-index 0000000..d13b965
---- /dev/null
-+++ b/drivers/media/video/mt9v022.c
-@@ -0,0 +1,751 @@
-+/*
-+ * Driver for MT9V022 CMOS Image Sensor from Micron
-+ *
-+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.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/videodev.h>
-+#include <linux/slab.h>
-+#include <linux/i2c.h>
-+#include <linux/delay.h>
-+#include <linux/log2.h>
-+
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-chip-ident.h>
-+#include <media/soc_camera.h>
-+
-+/* mt9v022 i2c address 0x48, 0x4c, 0x58, 0x5c
-+ * The platform has to define i2c_board_info
-+ * and call i2c_register_board_info() */
-+
-+static char *sensor_type;
-+module_param(sensor_type, charp, S_IRUGO);
-+MODULE_PARM_DESC(sensor_type, "Sensor type: \"colour\" or \"monochrome\"\n");
-+
-+/* mt9v022 selected register addresses */
-+#define MT9V022_CHIP_VERSION 0x00
-+#define MT9V022_COLUMN_START 0x01
-+#define MT9V022_ROW_START 0x02
-+#define MT9V022_WINDOW_HEIGHT 0x03
-+#define MT9V022_WINDOW_WIDTH 0x04
-+#define MT9V022_HORIZONTAL_BLANKING 0x05
-+#define MT9V022_VERTICAL_BLANKING 0x06
-+#define MT9V022_CHIP_CONTROL 0x07
-+#define MT9V022_SHUTTER_WIDTH1 0x08
-+#define MT9V022_SHUTTER_WIDTH2 0x09
-+#define MT9V022_SHUTTER_WIDTH_CTRL 0x0a
-+#define MT9V022_TOTAL_SHUTTER_WIDTH 0x0b
-+#define MT9V022_RESET 0x0c
-+#define MT9V022_READ_MODE 0x0d
-+#define MT9V022_MONITOR_MODE 0x0e
-+#define MT9V022_PIXEL_OPERATION_MODE 0x0f
-+#define MT9V022_LED_OUT_CONTROL 0x1b
-+#define MT9V022_ADC_MODE_CONTROL 0x1c
-+#define MT9V022_ANALOG_GAIN 0x34
-+#define MT9V022_BLACK_LEVEL_CALIB_CTRL 0x47
-+#define MT9V022_PIXCLK_FV_LV 0x74
-+#define MT9V022_DIGITAL_TEST_PATTERN 0x7f
-+#define MT9V022_AEC_AGC_ENABLE 0xAF
-+#define MT9V022_MAX_TOTAL_SHUTTER_WIDTH 0xBD
-+
-+/* Progressive scan, master, defaults */
-+#define MT9V022_CHIP_CONTROL_DEFAULT 0x188
-+
-+/* must be 32 bit, bitwise coded by reg_to_int and int_to_reg below */
-+struct reg_access {
-+ u16 value;
-+ u8 address;
-+ u8 rw;
-+} __attribute__ ((packed));
-+
-+union reg_access_32 {
-+ struct reg_access reg;
-+ u32 ctrl;
-+};
-+
-+enum reg_rw { REG_READ = 0, REG_WRITE = 1, };
-+
-+/*
-+#define reg_to_int(rw, address, value) ({ \
-+ union reg_access_32 u = {.reg = {value, address, rw}}; \
-+ u.i32; \
-+})
-+*/
-+
-+/* rw has to be numerically most significant, because
-+ * maximum, minimum and value are signed */
-+#ifdef __LITTLE_ENDIAN
-+#define reg_to_int(rw, address, value) (((value) & 0xffff) | (((address) & 0xff) << 16) | (((rw) & 0x7f) << 24))
-+#else
-+#define reg_to_int(rw, address, value) ((((value) & 0xffff) << 16) | (((address) & 0xff) << 8) | ((rw) & 0x7f))
-+#endif
-+
-+static const struct soc_camera_data_format mt9v022_formats[]= {
-+ {
-+ .name = "RGB Bayer (sRGB)",
-+ .depth = 8,
-+ .fourcc = V4L2_PIX_FMT_SBGGR8,
-+ .colorspace = V4L2_COLORSPACE_SRGB,
-+ }, {
-+ .name = "RGB Bayer (sRGB)",
-+ .depth = 10,
-+ .fourcc = V4L2_PIX_FMT_SBGGR16,
-+ .colorspace = V4L2_COLORSPACE_SRGB,
-+ }, {
-+ .name = "Monochrome 10 bit",
-+ .depth = 10,
-+ .fourcc = V4L2_PIX_FMT_Y16,
-+ }, {
-+ .name = "Monochrome 8 bit",
-+ .depth = 8,
-+ .fourcc = V4L2_PIX_FMT_GREY,
-+ },
-+};
-+
-+enum mt9v022_sensor {
-+ MT9V022_SENSOR_MONOCHROME,
-+ MT9V022_SENSOR_COLOUR,
-+};
-+
-+struct mt9v022 {
-+ struct i2c_client *client;
-+ struct soc_camera_device icd;
-+ enum mt9v022_sensor sensor;
-+ struct i2c_client *data_switch;
-+ u16 chip_control;
-+ unsigned char datawidth;
-+};
-+
-+static int reg_read(struct soc_camera_device *icd, const u8 reg)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ struct i2c_client *client = mt9v022->client;
-+ s32 data = i2c_smbus_read_word_data(client, reg);
-+ return data < 0 ? data : swab16(data);
-+}
-+
-+static int reg_write(struct soc_camera_device *icd, const u8 reg,
-+ const u16 data)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ return i2c_smbus_write_word_data(mt9v022->client, reg, swab16(data));
-+}
-+
-+static int reg_set(struct soc_camera_device *icd, const u8 reg,
-+ const u16 data)
-+{
-+ int ret;
-+
-+ if ((ret = reg_read(icd, reg)) < 0)
-+ return ret;
-+ return reg_write(icd, reg, ret | data);
-+}
-+
-+static int reg_clear(struct soc_camera_device *icd, const u8 reg,
-+ const u16 data)
-+{
-+ int ret;
-+
-+ if ((ret = reg_read(icd, reg)) < 0)
-+ return ret;
-+ return reg_write(icd, reg, ret & ~data);
-+}
-+
-+static int mt9v022_init(struct soc_camera_device *icd)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ int ret;
-+
-+ /* Almost the default mode: master, parallel, simultaneous, and an
-+ * undocumented bit 0x200, which is present in table 7, but not in 8,
-+ * plus snapshot mode to disable scan for now */
-+// mt9v022->chip_control |= 0x10;
-+ ret = reg_write(icd, MT9V022_CHIP_CONTROL, mt9v022->chip_control);
-+ if (ret >= 0)
-+ reg_write(icd, MT9V022_READ_MODE, 0x300);
-+
-+ /* All defaults */
-+ if (ret >= 0)
-+ ret = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x3); /* AEC, AGC on */
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_MAX_TOTAL_SHUTTER_WIDTH, 480);
-+ if (ret >= 0)
-+ ret = reg_clear(icd, MT9V022_BLACK_LEVEL_CALIB_CTRL, 1); /* default - auto */
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_DIGITAL_TEST_PATTERN, 0);
-+
-+ return ret < 0 ? ret :0;
-+}
-+
-+static int mt9v022_release(struct soc_camera_device *icd)
-+{
-+ /* Nothing? */
-+ return 0;
-+}
-+
-+static int mt9v022_start_capture(struct soc_camera_device *icd)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ /* Switch to master "normal" mode */
-+ mt9v022->chip_control &= ~0x10;
-+ if (reg_write(icd, MT9V022_CHIP_CONTROL,
-+ mt9v022->chip_control) < 0)
-+ return -EIO;
-+ return 0;
-+}
-+
-+static int mt9v022_stop_capture(struct soc_camera_device *icd)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ /* Switch to snapshot mode */
-+// mt9v022->chip_control |= 0x10;
-+ if (reg_write(icd, MT9V022_CHIP_CONTROL,
-+ mt9v022->chip_control) < 0)
-+ return -EIO;
-+ return 0;
-+}
-+
-+extern int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level);
-+
-+static int external_bus_switch(struct i2c_client *extender, int go8bit)
-+{
-+ if (! extender)
-+ return -ENODEV;
-+
-+#ifdef CONFIG_MT9V022_PCA9536_SWITCH
-+ return pca9536_set_level(extender, 0, go8bit);
-+#else
-+ return -ENODEV;
-+#endif
-+}
-+
-+static int mt9v022_set_capture_format(struct soc_camera_device *icd, __u32 pixfmt,
-+ struct v4l2_rect *rect, unsigned int flags)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ unsigned int width_flag = flags & (IS_DATAWIDTH_10 | IS_DATAWIDTH_9 |
-+ IS_DATAWIDTH_8);
-+ u16 pixclk = 0;
-+ int ret;
-+
-+ /* Only one width bit may be set */
-+ if (!is_power_of_2(width_flag))
-+ return -EINVAL;
-+
-+ /* The caller provides a supported format, as verified per call to
-+ * icd->try_fmt_cap(), datawidth is from our supported format list */
-+ switch (pixfmt) {
-+ case V4L2_PIX_FMT_GREY:
-+ case V4L2_PIX_FMT_Y16:
-+ if (mt9v022->sensor != MT9V022_SENSOR_MONOCHROME)
-+ return -EINVAL;
-+ break;
-+ case V4L2_PIX_FMT_SBGGR8:
-+ case V4L2_PIX_FMT_SBGGR16:
-+ if (mt9v022->sensor != MT9V022_SENSOR_COLOUR)
-+ return -EINVAL;
-+ break;
-+ case 0:
-+ /* No format change, only geometry */
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ /* Like in example app. Contradicts the datasheet though */
-+ ret = reg_read(icd, MT9V022_AEC_AGC_ENABLE);
-+ if (ret >= 0) {
-+ if (ret & 1) /* Autoexposure */
-+ ret = reg_write(icd, MT9V022_MAX_TOTAL_SHUTTER_WIDTH,
-+ rect->height + icd->y_skip_top + 43);
-+ else
-+ ret = reg_write(icd, MT9V022_TOTAL_SHUTTER_WIDTH,
-+ rect->height + icd->y_skip_top + 43);
-+ }
-+ /* Setup frame format: defaults apart from width and height */
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_COLUMN_START, rect->left);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_ROW_START, rect->top);
-+ if (ret >= 0)
-+ /* Default 94, Phytec driver says: "width + horizontal blank >= 660" */
-+ ret = reg_write(icd, MT9V022_HORIZONTAL_BLANKING,
-+ rect->width > 660 - 43 ? 43 : 660 - rect->width);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_VERTICAL_BLANKING, 45);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_WINDOW_WIDTH, rect->width);
-+ if (ret >= 0)
-+ ret = reg_write(icd, MT9V022_WINDOW_HEIGHT, rect->height + icd->y_skip_top);
-+
-+ if (ret < 0)
-+ return ret;
-+
-+ dev_dbg(&icd->dev, "Frame %ux%u pixel\n", rect->width, rect->height);
-+
-+ if ((mt9v022->datawidth != 10 && (width_flag == IS_DATAWIDTH_10)) ||
-+ (mt9v022->datawidth != 9 && (width_flag == IS_DATAWIDTH_9)) ||
-+ (mt9v022->datawidth != 8 && (width_flag == IS_DATAWIDTH_8))) {
-+ /* data width switch requested */
-+ if (! mt9v022->data_switch)
-+ return -EINVAL;
-+
-+ /* Well, we actually only can do 10 or 8 bits... */
-+ if (width_flag == IS_DATAWIDTH_9)
-+ return -EINVAL;
-+
-+ ret = external_bus_switch(mt9v022->data_switch,
-+ width_flag == IS_DATAWIDTH_8);
-+ if (ret < 0)
-+ return ret;
-+
-+ mt9v022->datawidth = width_flag == IS_DATAWIDTH_8 ? 8 : 10;
-+ }
-+
-+ if (flags & IS_PCLK_SAMPLE_RISING)
-+ pixclk |= 0x10;
-+
-+ if (! (flags & IS_HSYNC_ACTIVE_HIGH))
-+ pixclk |= 0x1;
-+
-+ if (! (flags & IS_VSYNC_ACTIVE_HIGH))
-+ pixclk |= 0x2;
-+
-+ if ((ret = reg_write(icd, MT9V022_PIXCLK_FV_LV, pixclk)) < 0)
-+ return ret;
-+
-+ if (! (flags & IS_MASTER))
-+ mt9v022->chip_control &= ~0x8;
-+
-+ if ((ret = reg_write(icd, MT9V022_CHIP_CONTROL, mt9v022->chip_control)) < 0)
-+ return ret;
-+
-+ dev_dbg(&icd->dev, "Calculated pixclk 0x%x, chip control 0x%x\n",
-+ pixclk, mt9v022->chip_control);
-+
-+ return 0;
-+}
-+
-+static int mt9v022_try_fmt_cap(struct soc_camera_device *icd,
-+ struct v4l2_format *f)
-+{
-+ if (f->fmt.pix.height < 32 + icd->y_skip_top)
-+ f->fmt.pix.height = 32 + icd->y_skip_top;
-+ if (f->fmt.pix.height > 480 + icd->y_skip_top)
-+ f->fmt.pix.height = 480 + icd->y_skip_top;
-+ if (f->fmt.pix.width < 48)
-+ f->fmt.pix.width = 48;
-+ if (f->fmt.pix.width > 752)
-+ f->fmt.pix.width = 752;
-+ f->fmt.pix.width &= ~0x03; /* ? */
-+
-+ return 0;
-+}
-+
-+static unsigned int mt9v022_get_datawidth(struct soc_camera_device *icd)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ return mt9v022->datawidth;
-+}
-+
-+const struct v4l2_queryctrl mt9v022_controls[] = {
-+ {
-+ .id = V4L2_CID_VFLIP,
-+ .type = V4L2_CTRL_TYPE_BOOLEAN,
-+ .name = "Flip Vertically",
-+ .minimum = 0,
-+ .maximum = 1,
-+ .step = 1,
-+ .default_value = 0,
-+ }, {
-+ .id = V4L2_CID_HFLIP,
-+ .type = V4L2_CTRL_TYPE_BOOLEAN,
-+ .name = "Flip Horizontally",
-+ .minimum = 0,
-+ .maximum = 1,
-+ .step = 1,
-+ .default_value = 0,
-+ }, {
-+ .id = V4L2_CID_GAIN,
-+ .type = V4L2_CTRL_TYPE_INTEGER,
-+ .name = "Analog Gain",
-+ .minimum = 64,
-+ .maximum = 127,
-+ .step = 1,
-+ .default_value = 64,
-+ .flags = V4L2_CTRL_FLAG_SLIDER,
-+ }, {
-+ .id = V4L2_CID_EXPOSURE,
-+ .type = V4L2_CTRL_TYPE_INTEGER,
-+ .name = "Exposure",
-+ .minimum = 1,
-+ .maximum = 255,
-+ .step = 1,
-+ .default_value = 255,
-+ .flags = V4L2_CTRL_FLAG_SLIDER,
-+ }, {
-+ .id = V4L2_CID_AUTOGAIN,
-+ .type = V4L2_CTRL_TYPE_BOOLEAN,
-+ .name = "Automatic Gain",
-+ .minimum = 0,
-+ .maximum = 1,
-+ .step = 1,
-+ .default_value = 1,
-+ }, {
-+ .id = V4L2_CID_AUTOEXPOSURE,
-+ .type = V4L2_CTRL_TYPE_BOOLEAN,
-+ .name = "Automatic Exposure",
-+ .minimum = 0,
-+ .maximum = 1,
-+ .step = 1,
-+ .default_value = 1,
-+ }, {
-+ .id = V4L2_CID_PRIVATE_BASE,
-+ .type = V4L2_CTRL_TYPE_INTEGER,
-+ .name = "Register access",
-+ .minimum = reg_to_int(REG_READ, 0, 0),
-+ .maximum = reg_to_int(REG_WRITE, 0xff, (1 << 16) - 1),
-+ .step = 1,
-+ .default_value = 1,
-+ }
-+};
-+
-+static int mt9v022_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
-+static int mt9v022_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
-+
-+static struct soc_camera_ops mt9v022_ops = {
-+ .owner = THIS_MODULE,
-+ .init = mt9v022_init,
-+ .release = mt9v022_release,
-+ .start_capture = mt9v022_start_capture,
-+ .stop_capture = mt9v022_stop_capture,
-+ .set_capture_format = mt9v022_set_capture_format,
-+ .try_fmt_cap = mt9v022_try_fmt_cap,
-+ .formats = mt9v022_formats,
-+ .num_formats = ARRAY_SIZE(mt9v022_formats),
-+ .get_datawidth = mt9v022_get_datawidth,
-+ .controls = mt9v022_controls,
-+ .num_controls = ARRAY_SIZE(mt9v022_controls),
-+ .get_control = mt9v022_get_control,
-+ .set_control = mt9v022_set_control,
-+};
-+
-+static int mt9v022_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
-+{
-+ int data;
-+
-+ switch (ctrl->id) {
-+ case V4L2_CID_VFLIP:
-+ data = reg_read(icd, MT9V022_READ_MODE);
-+ if (data < 0)
-+ return -EIO;
-+ ctrl->value = !!(data & 0x10);
-+ break;
-+ case V4L2_CID_HFLIP:
-+ data = reg_read(icd, MT9V022_READ_MODE);
-+ if (data < 0)
-+ return -EIO;
-+ ctrl->value = !!(data & 0x20);
-+ break;
-+ case V4L2_CID_AUTOEXPOSURE:
-+ data = reg_read(icd, MT9V022_AEC_AGC_ENABLE);
-+ if (data < 0)
-+ return -EIO;
-+ ctrl->value = !!(data & 0x1);
-+ break;
-+ case V4L2_CID_AUTOGAIN:
-+ data = reg_read(icd, MT9V022_AEC_AGC_ENABLE);
-+ if (data < 0)
-+ return -EIO;
-+ ctrl->value = !!(data & 0x2);
-+ break;
-+ case V4L2_CID_PRIVATE_BASE:
-+ if (1) {
-+ union reg_access_32 u;
-+
-+ u.ctrl = ctrl->value;
-+ if (u.reg.rw != REG_READ)
-+ return -EINVAL;
-+ data = reg_read(icd, u.reg.address);
-+ if (data < 0)
-+ return -EIO;
-+ u.reg.value = data;
-+ ctrl->value = u.ctrl;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int mt9v022_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
-+{
-+ int data;
-+ const struct v4l2_queryctrl *qctrl;
-+
-+ qctrl = soc_camera_find_qctrl(&mt9v022_ops, ctrl->id);
-+
-+ if (!qctrl)
-+ return -EINVAL;
-+
-+ switch (ctrl->id) {
-+ case V4L2_CID_VFLIP:
-+ if (ctrl->value)
-+ data = reg_set(icd, MT9V022_READ_MODE, 0x10);
-+ else
-+ data = reg_clear(icd, MT9V022_READ_MODE, 0x10);
-+ if (data < 0)
-+ return -EIO;
-+ break;
-+ case V4L2_CID_HFLIP:
-+ if (ctrl->value)
-+ data = reg_set(icd, MT9V022_READ_MODE, 0x20);
-+ else
-+ data = reg_clear(icd, MT9V022_READ_MODE, 0x20);
-+ if (data < 0)
-+ return -EIO;
-+ break;
-+ case V4L2_CID_GAIN:
-+ /* mt9v022 has minimum == default */
-+ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
-+ return -EINVAL;
-+ else {
-+ unsigned long range = qctrl->maximum - qctrl->minimum;
-+ /* Datasheet says 16 to 64. autogain only works properly
-+ * after setting gain to maximum 14. Larger values
-+ * produce "white fly" noise effect. On the whole,
-+ * manually setting analog gain does no good. */
-+ unsigned long gain = ((ctrl->value - qctrl->minimum) * 10 +
-+ range / 2) / range + 4;
-+ if (gain >= 32)
-+ gain &= ~1;
-+ /* The user wants to set gain manually, hope, she
-+ * knows, what she's doing... Switch AGC off. */
-+
-+ if (reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x2) < 0)
-+ return -EIO;
-+
-+ dev_info(&icd->dev, "Setting gain from %d to %lu\n",
-+ reg_read(icd, MT9V022_ANALOG_GAIN), gain);
-+ if (reg_write(icd, MT9V022_ANALOG_GAIN, gain) < 0)
-+ return -EIO;
-+ icd->gain = ctrl->value;
-+ }
-+ break;
-+ case V4L2_CID_EXPOSURE:
-+ /* mt9v022 has maximum == default */
-+ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
-+ return -EINVAL;
-+ else {
-+ unsigned long range = qctrl->maximum - qctrl->minimum;
-+ unsigned long shutter = ((ctrl->value - qctrl->minimum) * 479 +
-+ range / 2) / range + 1;
-+ /* The user wants to set shutter width manually, hope, she
-+ * knows, what she's doing... Switch AEC off. */
-+
-+ if (reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x1) < 0)
-+ return -EIO;
-+
-+ dev_info(&icd->dev, "Setting shutter width from %d to %lu\n",
-+ reg_read(icd, MT9V022_TOTAL_SHUTTER_WIDTH), shutter);
-+ if (reg_write(icd, MT9V022_TOTAL_SHUTTER_WIDTH, shutter) < 0)
-+ return -EIO;
-+ icd->exposure = ctrl->value;
-+ }
-+ break;
-+ case V4L2_CID_AUTOGAIN:
-+ if (ctrl->value)
-+ data = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x2);
-+ else
-+ data = reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x2);
-+ if (data < 0)
-+ return -EIO;
-+ break;
-+ case V4L2_CID_AUTOEXPOSURE:
-+ if (ctrl->value)
-+ data = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x1);
-+ else
-+ data = reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x1);
-+ if (data < 0)
-+ return -EIO;
-+ break;
-+ case V4L2_CID_PRIVATE_BASE:
-+ if (1) {
-+ union reg_access_32 u;
-+
-+ u.ctrl = ctrl->value;
-+ if (u.reg.rw != REG_WRITE)
-+ return -EINVAL;
-+ data = reg_write(icd, u.reg.address, u.reg.value);
-+ if (data < 0)
-+ return -EIO;
-+ }
-+ }
-+ return 0;
-+}
-+
-+/* Interface active, can use i2c. If it fails, it can indeed mean, that
-+ * this wasn't our capture interface, so, we wait for the right one */
-+static int mt9v022_video_probe(struct soc_camera_device *icd)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+ s32 data;
-+ int ret;
-+
-+ if (!icd->dev.parent ||
-+ to_soc_camera_host(icd->dev.parent)->nr != icd->iface)
-+ return -ENODEV;
-+
-+ /* Read out the chip version register */
-+ data = reg_read(icd, MT9V022_CHIP_VERSION);
-+
-+ /* must be 0x1311 or 0x1313 */
-+ if (data != 0x1311 && data != 0x1313) {
-+ ret = -ENODEV;
-+ dev_info(&icd->dev, "No MT9V022 detected, ID register 0x%x\n",
-+ data);
-+ goto ei2c;
-+ }
-+
-+ /* Soft reset */
-+ ret = reg_write(icd, MT9V022_RESET, 1);
-+ if (ret < 0)
-+ goto ei2c;
-+ /* 15 clock cycles */
-+ udelay(200);
-+ if (reg_read(icd, MT9V022_RESET)) {
-+ dev_err(&icd->dev, "Resetting MT9V022 failed!\n");
-+ goto ei2c;
-+ }
-+
-+ /* Set monochrome or colour sensor type */
-+ if (sensor_type && (!strcmp("colour", sensor_type) ||
-+ !strcmp("color", sensor_type))) {
-+ ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 4 | 0x11);
-+ mt9v022->sensor = MT9V022_SENSOR_COLOUR;
-+ } else {
-+ ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 0x11);
-+ mt9v022->sensor = MT9V022_SENSOR_MONOCHROME;
-+ }
-+
-+ if (ret >= 0)
-+ ret = soc_camera_video_start(icd);
-+ if (ret < 0)
-+ goto eisis;
-+
-+ dev_info(&icd->dev, "Detected a MT9V022 chip ID %x, %s sensor\n",
-+ data, mt9v022->sensor == MT9V022_SENSOR_MONOCHROME ?
-+ "monochrome" : "colour");
-+
-+ return 0;
-+
-+eisis:
-+ei2c:
-+ return ret;
-+}
-+
-+static void mt9v022_video_remove(struct soc_camera_device *icd)
-+{
-+ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
-+
-+ dev_dbg(&icd->dev, "Video %x removed: %p, %p\n", mt9v022->client->addr,
-+ mt9v022->icd.dev.parent, mt9v022->icd.vdev);
-+ soc_camera_video_stop(&mt9v022->icd);
-+}
-+
-+static int mt9v022_probe(struct i2c_client *client)
-+{
-+ struct mt9v022 *mt9v022;
-+ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
-+ int ret;
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
-+ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ if (!(mt9v022 = kzalloc(sizeof(struct mt9v022), GFP_KERNEL)))
-+ return -ENOMEM;
-+
-+ mt9v022->chip_control = MT9V022_CHIP_CONTROL_DEFAULT;
-+ mt9v022->client = client;
-+ i2c_set_clientdata(client, mt9v022);
-+
-+ mt9v022->icd.probe = mt9v022_video_probe;
-+ mt9v022->icd.remove = mt9v022_video_remove;
-+ mt9v022->icd.ops = &mt9v022_ops;
-+ mt9v022->icd.control = &client->dev;
-+ mt9v022->icd.x_min = 1;
-+ mt9v022->icd.y_min = 4;
-+ mt9v022->icd.x_current = 1;
-+ mt9v022->icd.y_current = 4;
-+ mt9v022->icd.width_min = 48;
-+ mt9v022->icd.width_max = 752;
-+ mt9v022->icd.height_min = 32;
-+ mt9v022->icd.height_max = 480;
-+ mt9v022->icd.y_skip_top = 1;
-+ /* Default datawidth - this is the only width this camera (normally)
-+ * supports. It is only with extra logic that it can support
-+ * other widths. Therefore it seems to be a sensible default. */
-+ mt9v022->datawidth = 10;
-+
-+ if (client->dev.platform_data) {
-+ struct soc_camera_link *icl = client->dev.platform_data;
-+ /* We have a data bus switch. We call pca9536 functions
-+ * explicitly by name so the driver will not be unloaded,
-+ * and we'll check mt9v022->data_switch anyway every time
-+ * before calling. The only concern is that the driver
-+ * doesn't detach itself from the device, but so far it is
-+ * not supported by the I2C layer */
-+ if (icl->extender)
-+ mt9v022->data_switch = *icl->extender;
-+ mt9v022->icd.iface = icl->bus_id;
-+ }
-+
-+ ret = soc_camera_device_register(&mt9v022->icd);
-+ if (ret)
-+ goto eisdr;
-+
-+ return 0;
-+
-+eisdr:
-+ kfree(mt9v022);
-+ return ret;
-+}
-+
-+static int mt9v022_remove(struct i2c_client *client)
-+{
-+ struct mt9v022 *mt9v022 = i2c_get_clientdata(client);
-+
-+ soc_camera_device_unregister(&mt9v022->icd);
-+ kfree(mt9v022);
-+
-+ return 0;
-+}
-+
-+static struct i2c_driver mt9v022_i2c_driver = {
-+ .driver = {
-+ .name = "mt9v022",
-+ },
-+ .probe = mt9v022_probe,
-+ .remove = mt9v022_remove,
-+};
-+
-+static int __init mt9v022_mod_init(void)
-+{
-+ return i2c_add_driver(&mt9v022_i2c_driver);
-+}
-+
-+static void __exit mt9v022_mod_exit(void)
-+{
-+ i2c_del_driver(&mt9v022_i2c_driver);
-+}
-+
-+module_init(mt9v022_mod_init);
-+module_exit(mt9v022_mod_exit);
-+
-+MODULE_DESCRIPTION("Micron MT9V022 Camera driver");
-+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
-+MODULE_LICENSE("GPL");
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml
deleted file mode 100644
index bc771f238b..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml
+++ /dev/null
@@ -1,100 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux
-Subject: [RFC PATCH 6/8] Add V4L2_CID_AUTOEXPOSURE control
-Date: Wed, 23 Jan 2008 18:42:01 +0100 (CET)
-Lines: 29
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231827200.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110161 28894 80.91.229.12 (23 Jan 2008 17:42:41 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:41 +0000 (UTC)
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:01 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjcY-000394-S3
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:43 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id 3B00D730EB; Wed, 23 Jan 2008 12:42:16 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHgEoZ017266 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:42:14 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgDXf028250
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:13 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfl3q001210
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:48 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:42 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp003) with SMTP; 23 Jan 2008 18:41:42 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX19s1mA+rThsOt7hg+tJ7j4mHAPKhlRXDzhjWNVMNr
- iM1Yi7GSzlRBY8
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbt-0002A2-Vj
- for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:42:01 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36474
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36474>
-
-The MT9V022 camera has hardware AEC support, that can be switched on and
-off in software. MT9M001 emulates Autoexposure control in software. Add a
-V4L2 control, similar to already present Autogain.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
----
- include/linux/videodev2.h | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
-index ae9b24c..05b8c22 100644
---- a/include/linux/videodev2.h
-+++ b/include/linux/videodev2.h
-@@ -946,6 +946,7 @@ struct v4l2_querymenu
- #define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
- #define V4L2_CID_VCENTER (V4L2_CID_BASE+23)
- #define V4L2_CID_LASTP1 (V4L2_CID_BASE+24) /* last CID + 1 */
-+#define V4L2_CID_AUTOEXPOSURE (V4L2_CID_BASE+25)
-
- /* MPEG-class control IDs defined by V4L2 */
- #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml
deleted file mode 100644
index 31d42cfbee..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml
+++ /dev/null
@@ -1,113 +0,0 @@
-Path: news.gmane.org!not-for-mail
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Newsgroups: gmane.comp.video.video4linux
-Subject: [RFC PATCH 7/8] Add two new fourcc codes for 16bpp formats
-Date: Wed, 23 Jan 2008 18:42:09 +0100 (CET)
-Lines: 42
-Approved: news@gmane.org
-Message-ID: <Pine.LNX.4.64.0801231830490.4932@axis700.grange>
-References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-X-Trace: ger.gmane.org 1201110167 28919 80.91.229.12 (23 Jan 2008 17:42:47 GMT)
-X-Complaints-To: usenet@ger.gmane.org
-NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:47 +0000 (UTC)
-To: video4linux-list@redhat.com
-Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:06 2008
-Return-path: <video4linux-list-bounces@redhat.com>
-Envelope-to: rh-video4linux-list@gmane.org
-Original-Received: from hormel.redhat.com ([209.132.177.30])
- by lo.gmane.org with esmtp (Exim 4.50)
- id 1JHjci-0003Dp-8K
- for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:52 +0100
-Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
- by hormel.redhat.com (Postfix) with ESMTP
- id 6BF2372FF8; Wed, 23 Jan 2008 12:42:25 -0500 (EST)
-Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
- [172.16.52.254])
- by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
- m0NHgO9P017291 for <video4linux-list@listman.util.phx.redhat.com>;
- Wed, 23 Jan 2008 12:42:24 -0500
-Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
- by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgNmZ028352
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:23 -0500
-Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
- by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfucU001324
- for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:56 -0500
-Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:50 -0000
-Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
- [87.189.47.31]
- by mail.gmx.net (mp009) with SMTP; 23 Jan 2008 18:41:50 +0100
-X-Authenticated: #20450766
-X-Provags-ID: V01U2FsdGVkX19aKoUhVR5aPjFgx0HR7/IruYd7urwvhZz+IuYK4j
- /KvctzVVJXbtdS
-Original-Received: from lyakh (helo=localhost)
- by axis700.grange with local-esmtp (Exim 4.63)
- (envelope-from <g.liakhovetski@gmx.de>) id 1JHjc1-0002A6-Re
- for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:42:09 +0100
-X-X-Sender: lyakh@axis700.grange
-In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
-X-Y-GMX-Trusted: 0
-X-RedHat-Spam-Score: 0
-X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
-X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
-X-loop: video4linux-list@redhat.com
-X-BeenThere: video4linux-list@redhat.com
-X-Mailman-Version: 2.1.5
-Precedence: junk
-List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
-List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
-List-Post: <mailto:video4linux-list@redhat.com>
-List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
-List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
- <mailto:video4linux-list-request@redhat.com?subject=subscribe>
-Original-Sender: video4linux-list-bounces@redhat.com
-Errors-To: video4linux-list-bounces@redhat.com
-Xref: news.gmane.org gmane.comp.video.video4linux:36475
-Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36475>
-
-This adds two new fourcc codes (as per info at fourcc.org)
-for 16bpp mono and 16bpp Bayer formats.
-
-Signed-off-by: Steven Whitehouse <steve@chygwyn.com>
----
-This is a resend of the patch earlier sent by Steven Whitehouse. For some
-reason, I didn't see the patch in both his emails sent to the list, only
-in copies I got directly by cc. So, strictly speaking this patch doesn't
-belong to this series, but I need these 2 codes, and I'm giving the full
-credit to the original author:-)
-
- include/linux/videodev2.h | 2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
-index 05b8c22..b2c47c4 100644
---- a/include/linux/videodev2.h
-+++ b/include/linux/videodev2.h
-@@ -280,6 +280,7 @@ struct v4l2_pix_format
- #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B','G','R','4') /* 32 BGR-8-8-8-8 */
- #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R','G','B','4') /* 32 RGB-8-8-8-8 */
- #define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */
-+#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y','1','6',' ') /* 16 Greyscale */
- #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y','V','U','9') /* 9 YVU 4:1:0 */
- #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */
- #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y','U','Y','V') /* 16 YUV 4:2:2 */
-@@ -302,6 +303,7 @@ struct v4l2_pix_format
-
- /* see http://www.siliconimaging.com/RGB%20Bayer.htm */
- #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */
-+#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B','Y','R','2') /* 16 BGBG.. GRGR.. */
-
- /* compressed formats */
- #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M','J','P','G') /* Motion-JPEG */
---
-1.5.3.4
-
---
-video4linux-list mailing list
-Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
-https://www.redhat.com/mailman/listinfo/video4linux-list
-
diff --git a/packages/linux/linux-ezx-2.6.24/patches/series b/packages/linux/linux-ezx-2.6.24/patches/series
deleted file mode 100644
index 5fb6a2bc23..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/series
+++ /dev/null
@@ -1,105 +0,0 @@
-binutils-buildid-arm.patch
-pxa27x_overlay-r8.patch
-
-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:
-# move vibrator level function to the vibrator driver
-
-a780-pcap.patch
-e680-pcap.patch
-a1200-pcap.patch
-e6-pcap.patch
-
-a780-mci.patch
-e680-mci.patch
-a1200-mci.patch
-e6-mci.patch
-
-pxa27x-udc-support.3.patch
-
-ezx-emu.patch
-# ezx-emu TODO:
-# userspace interface for controling emu
-# read adc to find which accessory is plugged
-a780-emu.patch
-e680-emu.patch
-
-pxa27x-udc-fix-a1200.patch #(see ezx-a1200.c)
-ezx-eoc.patch
-a1200-eoc.patch
-e6-eoc.patch
-
-ezx-mtd-map.patch
-
-ezx-serial-bug-workaround.patch
-
-pxa-kbd.patch
-a780-kbd.patch
-e680-kbd.patch
-a1200-kbd.patch
-
-pcap-ts.patch
-a780-ts.patch
-e680-ts.patch
-a1200-ts.patch
-e6-ts.patch
-
-ezx-backlight.patch
-
-a780-flip.patch
-e680-locksw.patch
-a1200-flip.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
-
-asoc-pxa-ssp.patch
-asoc-fix-loopback.patch
-ezx-asoc.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
-
-# the folowing break too much stuff on other phones.
-
-# incomplete
-
diff --git a/packages/linux/linux-ezx-2.6.24/rokre2/defconfig b/packages/linux/linux-ezx-2.6.24/rokre2/defconfig
deleted file mode 100755
index 206ae45fc7..0000000000
--- a/packages/linux/linux-ezx-2.6.24/rokre2/defconfig
+++ /dev/null
@@ -1,1189 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:05:01 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_KEYBOARD_PXA27x 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_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/rokre6/defconfig b/packages/linux/linux-ezx-2.6.24/rokre6/defconfig
deleted file mode 100755
index 733566adc6..0000000000
--- a/packages/linux/linux-ezx-2.6.24/rokre6/defconfig
+++ /dev/null
@@ -1,1203 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23.1
-# Wed Oct 24 18:07:51 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_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-ezxdev"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT 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=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_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=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
-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
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG 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 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC 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_EM_X270 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_EOC=y
-# CONFIG_EZX_EMU is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# 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_SYSCALL 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_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=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_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 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_SUSPEND_UP_POSSIBLE=y
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-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 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
-# 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=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_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
-# CONFIG_NET_9P 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
-CONFIG_CONNECTOR=m
-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_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=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_EZX 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
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# 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
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET 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 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_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_PPPOL2TP 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
-# 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 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_PXA27x 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_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_FUJITSU 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_USB_COMPOSITE is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-CONFIG_INPUT_MISC=y
-# 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=y
-
-#
-# 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
-# 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
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=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_GPIO 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_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM 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_DS1682 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_SENSORS_TSL2550 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
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# 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 is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_EZX is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL 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_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=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_DETECT_PRIMARY is not set
-# 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
-# CONFIG_LOGO 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 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
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=y
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_SSP=y
-CONFIG_SND_PXA2XX_SOC_EZX=y
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_PCAP2=y
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG 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_SUPPORT=y
-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_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST 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
-# CONFIG_USB_R8A66597_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 Imaging devices
-#
-# CONFIG_USB_MDC800 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_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# 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_M66592 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 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_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS 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=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 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=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=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_SUNRPC_BIND34 is not set
-# 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
-
-#
-# 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_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
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/update_patches.sh b/packages/linux/linux-ezx-2.6.24/update_patches.sh
deleted file mode 100644
index 9a8d36e461..0000000000
--- a/packages/linux/linux-ezx-2.6.24/update_patches.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/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/branches/kernel-2.6.24.x-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/logo_linux_clut224.ppm b/packages/linux/linux-ezx/logo_linux_clut224.ppm
deleted file mode 100644
index 32fbeb9fc6..0000000000
--- a/packages/linux/linux-ezx/logo_linux_clut224.ppm
+++ /dev/null
@@ -1,226084 +0,0 @@
-P3
-# CREATOR: The GIMP's PNM Filter Version 1.1
-240 314
-255
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-20
-21
-21
-4
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-20
-21
-21
-4
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-20
-21
-21
-4
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-125
-132
-132
-145
-153
-132
-145
-153
-132
-145
-153
-99
-110
-116
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-64
-71
-75
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-64
-71
-75
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-25
-24
-24
-35
-35
-35
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-35
-35
-35
-23
-22
-22
-16
-18
-19
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-90
-99
-105
-42
-44
-45
-49
-54
-57
-121
-133
-141
-146
-161
-170
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-44
-45
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-44
-45
-10
-10
-10
-0
-0
-0
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-19
-19
-20
-40
-39
-39
-89
-86
-86
-102
-100
-100
-102
-100
-100
-126
-126
-126
-178
-178
-178
-212
-212
-212
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-205
-205
-205
-169
-169
-169
-157
-157
-157
-106
-104
-104
-70
-69
-69
-59
-59
-59
-33
-32
-32
-19
-19
-20
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-64
-71
-75
-0
-0
-0
-0
-0
-0
-42
-44
-45
-168
-185
-196
-0
-0
-0
-0
-0
-0
-8
-8
-8
-89
-93
-96
-121
-133
-141
-105
-116
-123
-27
-29
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-89
-93
-96
-121
-133
-141
-105
-116
-123
-27
-29
-31
-0
-0
-0
-64
-71
-75
-168
-185
-196
-113
-125
-132
-99
-110
-116
-43
-47
-50
-0
-0
-0
-90
-99
-105
-20
-21
-21
-0
-0
-0
-90
-99
-105
-33
-37
-39
-99
-110
-116
-121
-133
-141
-69
-73
-75
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-14
-99
-110
-116
-121
-133
-141
-76
-85
-89
-56
-59
-62
-56
-59
-62
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-90
-99
-105
-35
-38
-40
-105
-116
-123
-121
-133
-141
-64
-71
-75
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-3
-3
-3
-76
-85
-89
-121
-133
-141
-113
-125
-132
-43
-47
-50
-0
-0
-0
-0
-0
-0
-56
-59
-62
-113
-125
-132
-121
-133
-141
-99
-110
-116
-20
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-54
-57
-113
-125
-132
-121
-133
-141
-105
-116
-123
-23
-25
-27
-0
-0
-0
-3
-3
-3
-76
-85
-89
-121
-133
-141
-113
-125
-132
-43
-47
-50
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-47
-50
-64
-71
-75
-0
-0
-0
-0
-0
-0
-76
-85
-89
-64
-71
-75
-0
-0
-0
-0
-0
-0
-89
-93
-96
-23
-25
-27
-0
-0
-0
-56
-59
-62
-113
-125
-132
-121
-133
-141
-99
-110
-116
-20
-21
-21
-0
-0
-0
-0
-0
-0
-90
-99
-105
-20
-21
-21
-0
-0
-0
-64
-71
-75
-168
-185
-196
-113
-125
-132
-99
-110
-116
-43
-47
-50
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-25
-24
-24
-70
-69
-69
-119
-119
-119
-173
-173
-173
-192
-192
-192
-240
-240
-240
-252
-252
-252
-252
-252
-252
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-222
-222
-222
-212
-212
-212
-186
-186
-186
-171
-171
-171
-148
-148
-148
-102
-100
-100
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-76
-85
-89
-26
-26
-26
-33
-37
-39
-113
-125
-132
-121
-133
-141
-0
-0
-0
-0
-0
-0
-132
-145
-153
-121
-133
-141
-42
-44
-45
-76
-85
-89
-168
-185
-196
-22
-23
-24
-0
-0
-0
-0
-0
-0
-132
-145
-153
-121
-133
-141
-42
-44
-45
-76
-85
-89
-168
-185
-196
-22
-23
-24
-33
-37
-39
-158
-175
-184
-76
-85
-89
-49
-54
-57
-22
-23
-24
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-158
-175
-184
-143
-149
-153
-56
-59
-62
-62
-65
-67
-158
-175
-184
-49
-54
-57
-0
-0
-0
-0
-0
-0
-143
-149
-153
-113
-125
-132
-42
-44
-45
-89
-93
-96
-158
-175
-184
-98
-103
-106
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-146
-161
-170
-56
-59
-62
-49
-54
-57
-153
-169
-179
-64
-71
-75
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-113
-125
-132
-121
-133
-141
-43
-47
-50
-56
-59
-62
-158
-175
-184
-42
-44
-45
-0
-0
-0
-76
-85
-89
-49
-54
-57
-42
-44
-45
-90
-99
-105
-153
-169
-179
-2
-2
-2
-0
-0
-0
-27
-29
-31
-168
-185
-196
-62
-65
-67
-35
-38
-40
-64
-71
-75
-33
-37
-39
-0
-0
-0
-113
-125
-132
-121
-133
-141
-43
-47
-50
-56
-59
-62
-158
-175
-184
-42
-44
-45
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-44
-45
-153
-169
-179
-0
-0
-0
-6
-7
-7
-168
-185
-196
-146
-161
-170
-0
-0
-0
-11
-10
-11
-168
-185
-196
-10
-10
-10
-0
-0
-0
-76
-85
-89
-49
-54
-57
-42
-44
-45
-90
-99
-105
-153
-169
-179
-2
-2
-2
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-33
-37
-39
-158
-175
-184
-76
-85
-89
-49
-54
-57
-22
-23
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-33
-32
-32
-89
-86
-86
-171
-171
-171
-212
-212
-212
-228
-228
-228
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-239
-239
-239
-221
-221
-221
-113
-113
-113
-53
-53
-53
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-158
-175
-184
-146
-161
-170
-146
-161
-170
-158
-175
-184
-49
-54
-57
-0
-0
-0
-33
-37
-39
-168
-185
-196
-8
-8
-8
-0
-0
-0
-0
-0
-0
-121
-133
-141
-90
-99
-105
-0
-0
-0
-33
-37
-39
-168
-185
-196
-8
-8
-8
-0
-0
-0
-0
-0
-0
-121
-133
-141
-90
-99
-105
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-158
-175
-184
-56
-59
-62
-0
-0
-0
-0
-0
-0
-99
-110
-116
-99
-110
-116
-0
-0
-0
-35
-38
-40
-168
-185
-196
-4
-4
-4
-0
-0
-0
-0
-0
-0
-132
-145
-153
-98
-103
-106
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-64
-71
-75
-0
-0
-0
-0
-0
-0
-64
-71
-75
-146
-161
-170
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-27
-29
-31
-168
-185
-196
-7
-8
-8
-0
-0
-0
-0
-0
-0
-76
-85
-89
-113
-125
-132
-0
-0
-0
-0
-0
-0
-6
-6
-6
-23
-25
-27
-26
-26
-26
-153
-169
-179
-33
-37
-39
-0
-0
-0
-43
-47
-50
-153
-169
-179
-11
-10
-11
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-29
-31
-168
-185
-196
-7
-8
-8
-0
-0
-0
-0
-0
-0
-76
-85
-89
-113
-125
-132
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-168
-185
-196
-22
-23
-24
-49
-54
-57
-121
-133
-141
-153
-169
-179
-16
-18
-19
-56
-59
-62
-132
-145
-153
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-23
-25
-27
-26
-26
-26
-153
-169
-179
-33
-37
-39
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-12
-12
-12
-32
-31
-31
-70
-69
-69
-183
-183
-183
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-228
-228
-228
-113
-113
-113
-46
-44
-44
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-64
-71
-75
-0
-0
-0
-0
-0
-0
-33
-37
-39
-168
-185
-196
-26
-26
-26
-62
-65
-67
-146
-161
-170
-0
-0
-0
-0
-0
-0
-0
-0
-0
-89
-93
-96
-121
-133
-141
-0
-0
-0
-62
-65
-67
-146
-161
-170
-0
-0
-0
-0
-0
-0
-0
-0
-0
-89
-93
-96
-121
-133
-141
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-158
-175
-184
-31
-34
-36
-0
-0
-0
-0
-0
-0
-89
-93
-96
-105
-116
-123
-0
-0
-0
-62
-65
-67
-146
-161
-170
-0
-0
-0
-0
-0
-0
-0
-0
-0
-99
-110
-116
-98
-103
-106
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-59
-62
-132
-145
-153
-132
-145
-153
-99
-110
-116
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-33
-37
-39
-0
-0
-0
-0
-0
-0
-31
-34
-36
-168
-185
-196
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-56
-59
-62
-168
-185
-196
-146
-161
-170
-146
-161
-170
-146
-161
-170
-158
-175
-184
-121
-133
-141
-0
-0
-0
-99
-110
-116
-158
-175
-184
-132
-145
-153
-121
-133
-141
-168
-185
-196
-49
-54
-57
-0
-0
-0
-1
-2
-2
-113
-125
-132
-168
-185
-196
-132
-145
-153
-76
-85
-89
-4
-5
-5
-56
-59
-62
-168
-185
-196
-146
-161
-170
-146
-161
-170
-146
-161
-170
-158
-175
-184
-121
-133
-141
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-121
-133
-141
-69
-73
-75
-98
-103
-106
-76
-85
-89
-105
-116
-123
-64
-71
-75
-99
-110
-116
-90
-99
-105
-0
-0
-0
-0
-0
-0
-99
-110
-116
-158
-175
-184
-132
-145
-153
-121
-133
-141
-168
-185
-196
-49
-54
-57
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-53
-53
-53
-128
-128
-128
-194
-194
-194
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-143
-143
-143
-46
-44
-44
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-64
-71
-75
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-64
-71
-75
-49
-54
-57
-153
-169
-179
-0
-0
-0
-0
-0
-0
-0
-0
-0
-98
-103
-106
-105
-116
-123
-0
-0
-0
-49
-54
-57
-153
-169
-179
-0
-0
-0
-0
-0
-0
-0
-0
-0
-98
-103
-106
-105
-116
-123
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-158
-175
-184
-31
-34
-36
-0
-0
-0
-0
-0
-0
-89
-93
-96
-105
-116
-123
-0
-0
-0
-49
-49
-49
-153
-169
-179
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-125
-132
-98
-103
-106
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-14
-33
-37
-39
-33
-37
-39
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-43
-47
-50
-0
-0
-0
-0
-0
-0
-43
-47
-50
-158
-175
-184
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-49
-54
-57
-153
-169
-179
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-37
-39
-158
-175
-184
-6
-7
-7
-0
-0
-0
-0
-0
-0
-153
-169
-179
-49
-54
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-9
-10
-49
-54
-57
-146
-161
-170
-90
-99
-105
-49
-54
-57
-153
-169
-179
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-85
-89
-113
-125
-132
-143
-149
-153
-27
-29
-31
-62
-65
-67
-105
-116
-123
-146
-161
-170
-43
-47
-50
-0
-0
-0
-33
-37
-39
-158
-175
-184
-6
-7
-7
-0
-0
-0
-0
-0
-0
-153
-169
-179
-49
-54
-57
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-158
-175
-184
-35
-38
-40
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-106
-104
-104
-198
-198
-198
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-205
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-198
-198
-198
-122
-119
-119
-65
-65
-65
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-64
-71
-75
-0
-0
-0
-1
-1
-1
-56
-59
-62
-168
-185
-196
-33
-37
-39
-8
-9
-10
-168
-185
-196
-49
-54
-57
-0
-0
-0
-13
-13
-14
-158
-175
-184
-62
-65
-67
-0
-0
-0
-8
-9
-10
-168
-185
-196
-49
-54
-57
-0
-0
-0
-13
-13
-14
-158
-175
-184
-62
-65
-67
-0
-0
-0
-146
-161
-170
-56
-59
-62
-0
-0
-0
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-158
-175
-184
-31
-34
-36
-0
-0
-0
-0
-0
-0
-89
-93
-96
-105
-116
-123
-0
-0
-0
-6
-6
-6
-158
-175
-184
-64
-71
-75
-0
-0
-0
-33
-37
-39
-168
-185
-196
-98
-103
-106
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-113
-125
-132
-0
-0
-0
-0
-0
-0
-113
-125
-132
-105
-116
-123
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-6
-7
-7
-158
-175
-184
-64
-71
-75
-0
-0
-0
-0
-0
-0
-4
-4
-4
-22
-23
-24
-42
-44
-45
-158
-175
-184
-6
-6
-6
-0
-0
-0
-56
-59
-62
-168
-185
-196
-49
-54
-57
-0
-0
-0
-16
-18
-19
-8
-8
-8
-0
-0
-0
-0
-0
-0
-99
-110
-116
-105
-116
-123
-6
-7
-7
-158
-175
-184
-64
-71
-75
-0
-0
-0
-0
-0
-0
-4
-4
-4
-22
-23
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-31
-34
-36
-168
-185
-196
-153
-169
-179
-0
-0
-0
-13
-13
-14
-158
-175
-184
-168
-185
-196
-4
-5
-5
-0
-0
-0
-42
-44
-45
-158
-175
-184
-6
-6
-6
-0
-0
-0
-56
-59
-62
-168
-185
-196
-49
-54
-57
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-146
-161
-170
-56
-59
-62
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-64
-71
-75
-43
-47
-50
-0
-0
-0
-0
-0
-0
-64
-71
-75
-43
-47
-50
-0
-0
-0
-0
-0
-0
-64
-71
-75
-43
-47
-50
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-89
-86
-86
-165
-165
-165
-237
-237
-237
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-165
-165
-165
-143
-143
-143
-138
-134
-134
-76
-76
-76
-63
-63
-63
-53
-53
-53
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-35
-59
-59
-59
-70
-69
-69
-116
-116
-116
-204
-204
-204
-224
-224
-224
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-218
-218
-218
-116
-116
-116
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-146
-161
-170
-168
-185
-196
-168
-185
-196
-168
-185
-196
-153
-169
-179
-69
-73
-75
-0
-0
-0
-0
-0
-0
-56
-59
-62
-158
-175
-184
-143
-149
-153
-158
-175
-184
-99
-110
-116
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-59
-62
-158
-175
-184
-143
-149
-153
-158
-175
-184
-99
-110
-116
-0
-0
-0
-0
-0
-0
-64
-71
-75
-158
-175
-184
-158
-175
-184
-69
-73
-75
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-158
-175
-184
-31
-34
-36
-0
-0
-0
-0
-0
-0
-89
-93
-96
-105
-116
-123
-0
-0
-0
-0
-0
-0
-42
-44
-45
-146
-161
-170
-158
-175
-184
-121
-133
-141
-113
-125
-132
-90
-99
-105
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-105
-116
-123
-146
-161
-170
-146
-161
-170
-146
-161
-170
-16
-18
-19
-0
-0
-0
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-41
-41
-42
-146
-161
-170
-146
-161
-170
-143
-149
-153
-158
-175
-184
-69
-73
-75
-1
-2
-2
-121
-133
-141
-158
-175
-184
-143
-149
-153
-121
-133
-141
-146
-161
-170
-49
-54
-57
-0
-0
-0
-49
-54
-57
-168
-185
-196
-143
-149
-153
-146
-161
-170
-153
-169
-179
-27
-29
-31
-0
-0
-0
-41
-41
-42
-146
-161
-170
-146
-161
-170
-143
-149
-153
-158
-175
-184
-69
-73
-75
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-158
-175
-184
-113
-125
-132
-0
-0
-0
-0
-0
-0
-146
-161
-170
-132
-145
-153
-0
-0
-0
-0
-0
-0
-1
-2
-2
-121
-133
-141
-158
-175
-184
-143
-149
-153
-121
-133
-141
-146
-161
-170
-49
-54
-57
-0
-0
-0
-153
-169
-179
-35
-38
-40
-0
-0
-0
-0
-0
-0
-64
-71
-75
-158
-175
-184
-158
-175
-184
-69
-73
-75
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-132
-145
-153
-90
-99
-105
-0
-0
-0
-0
-0
-0
-132
-145
-153
-90
-99
-105
-0
-0
-0
-0
-0
-0
-132
-145
-153
-90
-99
-105
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-70
-69
-69
-194
-194
-194
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-246
-246
-246
-233
-233
-233
-210
-210
-210
-169
-169
-169
-102
-100
-100
-53
-53
-53
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-25
-24
-24
-49
-49
-49
-53
-53
-53
-143
-143
-143
-209
-209
-209
-237
-237
-237
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-190
-190
-190
-65
-65
-65
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-27
-29
-31
-13
-13
-14
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-27
-29
-31
-13
-13
-14
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-132
-145
-153
-64
-71
-75
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-31
-34
-36
-12
-13
-13
-23
-25
-27
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-23
-24
-27
-29
-31
-4
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-23
-24
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-5
-5
-27
-29
-31
-23
-25
-27
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-23
-24
-27
-29
-31
-4
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-23
-24
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-33
-32
-32
-116
-116
-116
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-171
-171
-171
-128
-128
-128
-83
-83
-83
-17
-16
-16
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-102
-100
-100
-157
-157
-157
-204
-204
-204
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-227
-227
-227
-118
-118
-118
-49
-49
-49
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-85
-89
-90
-99
-105
-76
-85
-89
-121
-133
-141
-146
-161
-170
-7
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-175
-184
-31
-34
-36
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-70
-69
-69
-173
-173
-173
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-209
-209
-209
-169
-169
-169
-90
-90
-90
-22
-21
-21
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-53
-53
-53
-108
-108
-108
-192
-192
-192
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-202
-202
-202
-82
-79
-79
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-25
-27
-76
-85
-89
-89
-93
-96
-64
-71
-75
-8
-9
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-85
-89
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-98
-96
-96
-221
-221
-221
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-108
-108
-108
-40
-39
-39
-23
-22
-22
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-32
-31
-31
-117
-117
-117
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-16
-18
-19
-82
-79
-79
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-229
-229
-229
-175
-175
-175
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-102
-100
-100
-196
-196
-196
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-116
-116
-116
-22
-21
-21
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-139
-139
-139
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-139
-139
-139
-74
-73
-73
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-40
-39
-39
-143
-143
-143
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-143
-143
-143
-38
-38
-38
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-140
-136
-136
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-196
-196
-196
-95
-95
-95
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-98
-96
-96
-192
-192
-192
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-157
-157
-157
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-183
-183
-183
-241
-241
-241
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-157
-157
-157
-42
-42
-42
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-35
-35
-35
-143
-143
-143
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-183
-183
-183
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-139
-139
-139
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-5
-5
-5
-19
-19
-20
-38
-38
-38
-42
-42
-42
-82
-79
-79
-165
-165
-165
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-175
-165
-165
-165
-113
-113
-113
-95
-95
-95
-56
-54
-54
-27
-26
-26
-3
-3
-3
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-126
-126
-126
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-224
-224
-224
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-30
-28
-28
-139
-139
-139
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-128
-128
-128
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-35
-35
-35
-79
-79
-79
-116
-116
-116
-158
-158
-158
-214
-214
-214
-229
-229
-229
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-188
-188
-188
-112
-108
-108
-93
-93
-93
-56
-54
-54
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-98
-96
-96
-217
-217
-217
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-171
-171
-171
-30
-30
-30
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-143
-143
-143
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-227
-227
-227
-102
-100
-100
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-47
-47
-47
-102
-100
-100
-151
-151
-151
-188
-188
-188
-231
-231
-231
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-209
-209
-209
-158
-158
-158
-89
-86
-86
-17
-16
-16
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-83
-83
-83
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-165
-165
-165
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-90
-90
-90
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-90
-90
-90
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-119
-119
-119
-207
-207
-207
-237
-237
-237
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-233
-233
-233
-180
-180
-180
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-83
-83
-83
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-38
-38
-38
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-205
-205
-205
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-47
-47
-47
-118
-118
-118
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-128
-128
-128
-58
-57
-57
-17
-16
-16
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-180
-180
-180
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-122
-119
-119
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-59
-59
-59
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-227
-227
-227
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-95
-95
-95
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-242
-242
-242
-236
-236
-236
-236
-236
-236
-236
-236
-236
-236
-236
-236
-236
-236
-236
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-143
-143
-143
-63
-63
-63
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-183
-183
-183
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-218
-218
-218
-102
-100
-100
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-53
-53
-53
-151
-151
-151
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-235
-235
-235
-200
-200
-200
-194
-194
-194
-148
-148
-148
-102
-100
-100
-83
-83
-83
-83
-83
-83
-83
-83
-83
-83
-83
-83
-83
-83
-83
-108
-108
-108
-133
-133
-133
-157
-157
-157
-230
-230
-230
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-209
-209
-209
-98
-96
-96
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-90
-90
-90
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-175
-175
-175
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-128
-128
-128
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-116
-116
-116
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-74
-73
-73
-200
-200
-200
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-226
-226
-226
-178
-178
-178
-95
-95
-95
-46
-44
-44
-33
-32
-32
-30
-30
-30
-17
-16
-16
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-10
-10
-10
-16
-18
-19
-76
-76
-76
-126
-126
-126
-143
-143
-143
-222
-222
-222
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-138
-134
-134
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-128
-128
-128
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-113
-113
-113
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-126
-126
-126
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-246
-246
-246
-214
-214
-214
-126
-126
-126
-70
-69
-69
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-59
-59
-59
-140
-136
-136
-233
-233
-233
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-138
-134
-134
-33
-32
-32
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-106
-104
-104
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-194
-194
-194
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-89
-86
-86
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-205
-205
-205
-133
-133
-133
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-89
-86
-86
-192
-192
-192
-243
-243
-243
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-186
-186
-186
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-151
-151
-151
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-190
-190
-190
-49
-49
-49
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-106
-104
-104
-224
-224
-224
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-139
-139
-139
-53
-53
-53
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-42
-42
-42
-106
-104
-104
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-169
-169
-169
-46
-44
-44
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-196
-196
-196
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-82
-79
-79
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-108
-108
-108
-221
-221
-221
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-196
-196
-196
-102
-100
-100
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-19
-19
-20
-112
-108
-108
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-169
-169
-169
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-116
-116
-116
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-192
-192
-192
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-113
-113
-113
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-165
-165
-165
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-89
-86
-86
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-175
-175
-175
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-102
-100
-100
-230
-230
-230
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-190
-190
-190
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-171
-171
-171
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-143
-143
-143
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-49
-49
-200
-200
-200
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-106
-104
-104
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-56
-54
-54
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-143
-143
-143
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-79
-79
-79
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-171
-171
-171
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-217
-217
-217
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-65
-65
-65
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-126
-126
-126
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-63
-60
-60
-192
-192
-192
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-128
-128
-128
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-49
-49
-49
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-98
-96
-96
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-119
-119
-119
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-95
-95
-95
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-231
-231
-231
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-158
-158
-158
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-150
-150
-150
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-165
-165
-165
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-102
-100
-100
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-98
-96
-96
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-126
-126
-126
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-22
-21
-21
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-26
-23
-22
-22
-6
-6
-6
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-59
-59
-59
-200
-200
-200
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-171
-171
-171
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-126
-126
-126
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-133
-133
-133
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-192
-192
-192
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-171
-171
-171
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-53
-53
-53
-76
-76
-76
-90
-90
-90
-165
-165
-165
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-180
-171
-171
-171
-116
-116
-116
-83
-83
-83
-49
-49
-49
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-53
-53
-53
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-112
-108
-108
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-133
-133
-133
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-204
-204
-204
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-148
-148
-148
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-178
-178
-178
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-150
-150
-150
-207
-207
-207
-228
-228
-228
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-231
-231
-231
-202
-202
-202
-128
-128
-128
-35
-35
-35
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-98
-96
-96
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-157
-157
-157
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-207
-207
-207
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-90
-90
-90
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-108
-108
-108
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-79
-79
-79
-198
-198
-198
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-207
-207
-207
-118
-118
-118
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-178
-178
-178
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-106
-104
-104
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-90
-90
-90
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-192
-192
-192
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-143
-143
-143
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-122
-119
-119
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-47
-47
-47
-165
-165
-165
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-194
-194
-194
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-207
-207
-207
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-200
-200
-200
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-217
-217
-217
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-157
-157
-157
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-209
-209
-209
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-83
-83
-83
-204
-204
-204
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-83
-83
-83
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-106
-104
-104
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-140
-136
-136
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-89
-86
-86
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-95
-95
-95
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-133
-133
-133
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-140
-136
-136
-227
-227
-227
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-241
-241
-241
-241
-241
-241
-242
-242
-242
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-113
-113
-113
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-198
-198
-198
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-79
-79
-79
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-231
-231
-231
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-158
-158
-158
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-165
-165
-165
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-198
-198
-198
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-113
-113
-113
-241
-241
-241
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-215
-215
-215
-190
-190
-190
-157
-157
-157
-76
-76
-76
-49
-49
-49
-47
-47
-47
-53
-53
-53
-90
-90
-90
-151
-151
-151
-227
-227
-227
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-217
-217
-217
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-214
-214
-214
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-116
-116
-116
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-196
-196
-196
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-93
-93
-93
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-133
-133
-133
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-217
-217
-217
-108
-108
-108
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-128
-128
-128
-207
-207
-207
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-70
-69
-69
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-126
-126
-126
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-157
-157
-157
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-169
-169
-169
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-63
-60
-60
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-128
-128
-128
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-63
-60
-60
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-169
-169
-169
-63
-63
-63
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-35
-35
-35
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-95
-95
-95
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-175
-175
-175
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-186
-186
-186
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-169
-169
-169
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-113
-113
-113
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-126
-126
-126
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-175
-175
-175
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-102
-100
-100
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-219
-219
-219
-65
-65
-65
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-49
-49
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-200
-200
-200
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-108
-108
-108
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-90
-90
-90
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-63
-60
-60
-215
-215
-215
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-102
-100
-100
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-40
-39
-39
-175
-175
-175
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-178
-178
-178
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-106
-104
-104
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-171
-171
-171
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-139
-139
-139
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-46
-44
-44
-186
-186
-186
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-102
-100
-100
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-113
-113
-113
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-102
-100
-100
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-157
-157
-157
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-113
-113
-113
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-143
-143
-143
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-63
-63
-63
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-198
-198
-198
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-82
-79
-79
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-165
-165
-165
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-169
-169
-169
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-119
-119
-119
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-178
-178
-178
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-157
-157
-157
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-128
-128
-128
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-83
-83
-83
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-150
-150
-150
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-194
-194
-194
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-116
-116
-116
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-143
-143
-143
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-219
-219
-219
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-102
-100
-100
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-157
-157
-157
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-218
-218
-218
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-76
-76
-76
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-108
-108
-108
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-122
-119
-119
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-217
-217
-217
-255
-255
-255
-253
-253
-253
-252
-252
-252
-246
-246
-246
-226
-226
-226
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-165
-165
-165
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-122
-119
-119
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-183
-183
-183
-188
-188
-188
-143
-143
-143
-133
-133
-133
-113
-113
-113
-74
-73
-73
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-122
-119
-119
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-227
-227
-227
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-40
-39
-39
-30
-28
-28
-15
-15
-15
-10
-10
-10
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-143
-143
-143
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-93
-93
-93
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-186
-186
-186
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-215
-215
-215
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-98
-96
-96
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-4
-3
-1
-11
-9
-1
-19
-17
-7
-43
-36
-7
-27
-23
-12
-43
-36
-7
-27
-23
-12
-11
-9
-1
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-106
-104
-104
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-63
-60
-60
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-150
-150
-150
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-169
-169
-169
-255
-255
-255
-254
-254
-254
-248
-248
-248
-219
-219
-219
-186
-186
-186
-65
-65
-65
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-19
-17
-7
-43
-36
-7
-56
-49
-25
-83
-69
-6
-113
-95
-9
-113
-95
-9
-197
-165
-17
-197
-165
-17
-208
-175
-18
-208
-175
-18
-197
-165
-17
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-219
-219
-219
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-128
-128
-128
-192
-192
-192
-157
-157
-157
-118
-118
-118
-70
-69
-69
-38
-38
-38
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-3
-1
-19
-17
-7
-43
-36
-7
-83
-69
-6
-113
-95
-9
-158
-133
-18
-197
-165
-17
-208
-175
-18
-220
-185
-19
-236
-198
-20
-248
-208
-21
-248
-208
-21
-245
-205
-20
-248
-208
-21
-245
-205
-20
-245
-205
-20
-197
-165
-17
-27
-23
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-106
-104
-104
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-30
-30
-30
-16
-18
-19
-8
-8
-8
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-43
-36
-7
-113
-95
-9
-158
-133
-18
-197
-165
-17
-220
-185
-19
-230
-192
-20
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-197
-165
-17
-27
-23
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-171
-171
-171
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-5
-4
-2
-19
-17
-7
-43
-36
-7
-83
-69
-6
-158
-133
-18
-197
-165
-17
-230
-192
-20
-248
-208
-21
-245
-205
-20
-245
-205
-20
-245
-205
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-158
-133
-18
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-122
-119
-119
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-198
-198
-198
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-90
-90
-90
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-54
-54
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-128
-128
-128
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-169
-169
-169
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-11
-9
-1
-27
-23
-12
-56
-49
-25
-113
-95
-9
-158
-133
-18
-197
-165
-17
-236
-198
-20
-241
-202
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-83
-69
-6
-4
-3
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-95
-95
-95
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-106
-104
-104
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-76
-76
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-210
-210
-210
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-98
-96
-96
-241
-241
-241
-255
-255
-255
-251
-251
-251
-222
-222
-222
-150
-150
-150
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-43
-36
-7
-83
-69
-6
-158
-133
-18
-197
-165
-17
-208
-175
-18
-236
-198
-20
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-197
-165
-17
-43
-36
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-196
-196
-196
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-202
-202
-202
-53
-53
-53
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-128
-128
-128
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-89
-86
-86
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-175
-175
-175
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-234
-234
-234
-226
-226
-226
-139
-139
-139
-63
-60
-60
-17
-16
-16
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-19
-17
-7
-83
-69
-6
-158
-133
-18
-208
-175
-18
-230
-192
-20
-236
-198
-20
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-113
-95
-9
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-139
-139
-139
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-157
-157
-157
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-148
-148
-148
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-138
-134
-134
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-70
-69
-69
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-5
-4
-2
-19
-17
-7
-56
-49
-25
-158
-133
-18
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-197
-165
-17
-19
-17
-7
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-139
-139
-139
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-214
-214
-214
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-108
-108
-108
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-122
-119
-119
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-27
-23
-12
-83
-69
-6
-113
-95
-9
-197
-165
-17
-230
-192
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-83
-69
-6
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-133
-133
-133
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-143
-143
-143
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-93
-93
-93
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-83
-83
-83
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-43
-36
-7
-113
-95
-9
-197
-165
-17
-220
-185
-19
-245
-205
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-19
-17
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-40
-39
-39
-150
-150
-150
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-117
-117
-117
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-202
-202
-202
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-3
-1
-27
-23
-12
-158
-133
-18
-208
-175
-18
-230
-192
-20
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-83
-69
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-83
-83
-83
-198
-198
-198
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-108
-108
-108
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-173
-173
-173
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-27
-23
-12
-83
-69
-6
-197
-165
-17
-230
-192
-20
-241
-202
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-197
-165
-17
-27
-23
-12
-0
-0
-0
-3
-3
-3
-70
-69
-69
-173
-173
-173
-133
-133
-133
-70
-69
-69
-63
-63
-63
-40
-39
-39
-42
-42
-42
-95
-95
-95
-165
-165
-165
-214
-214
-214
-227
-227
-227
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-122
-119
-119
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-122
-119
-119
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-119
-119
-119
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-165
-165
-165
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-11
-9
-1
-43
-36
-7
-113
-95
-9
-197
-165
-17
-236
-198
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-220
-185
-19
-83
-69
-6
-2
-1
-0
-0
-0
-0
-30
-30
-30
-169
-169
-169
-251
-251
-251
-255
-255
-255
-255
-255
-255
-252
-252
-252
-214
-214
-214
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-224
-224
-224
-138
-134
-134
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-70
-69
-69
-214
-214
-214
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-49
-49
-49
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-98
-96
-96
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-56
-49
-25
-158
-133
-18
-197
-165
-17
-230
-192
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-158
-133
-18
-15
-15
-15
-0
-0
-0
-5
-5
-5
-90
-90
-90
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-83
-83
-83
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-143
-143
-143
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-143
-143
-143
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-143
-143
-143
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-19
-17
-7
-158
-133
-18
-220
-185
-19
-230
-192
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-43
-36
-7
-1
-1
-1
-0
-0
-0
-33
-32
-32
-190
-190
-190
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-231
-231
-231
-116
-116
-116
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-204
-204
-204
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-210
-210
-210
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-36
-7
-197
-165
-17
-245
-205
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-83
-69
-6
-3
-3
-3
-1
-1
-1
-1
-1
-1
-126
-126
-126
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-215
-215
-215
-119
-119
-119
-35
-35
-35
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-148
-148
-148
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-83
-83
-83
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-89
-86
-86
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-3
-1
-83
-69
-6
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-113
-95
-9
-1
-1
-1
-0
-0
-0
-0
-0
-0
-5
-5
-5
-143
-143
-143
-215
-215
-215
-241
-241
-241
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-229
-229
-229
-212
-212
-212
-204
-204
-204
-171
-171
-171
-63
-60
-60
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-112
-108
-108
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-188
-188
-188
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-175
-175
-175
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-83
-69
-6
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-158
-133
-18
-19
-17
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-63
-63
-63
-89
-86
-86
-138
-134
-134
-165
-165
-165
-196
-196
-196
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-217
-188
-188
-188
-128
-128
-128
-76
-76
-76
-59
-59
-59
-53
-53
-53
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-113
-113
-113
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-113
-113
-113
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-175
-175
-175
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-36
-7
-197
-165
-17
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-208
-175
-18
-56
-49
-25
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-19
-19
-20
-32
-31
-31
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-30
-28
-28
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-65
-65
-65
-212
-212
-212
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-188
-188
-188
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-112
-108
-108
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-6
-6
-6
-5
-5
-5
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-17
-7
-158
-133
-18
-220
-185
-19
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-220
-185
-19
-83
-69
-6
-4
-3
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-89
-86
-86
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-218
-218
-218
-65
-65
-65
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-157
-157
-157
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-27
-26
-26
-76
-76
-76
-116
-116
-116
-113
-113
-113
-90
-90
-90
-53
-53
-53
-12
-12
-12
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-83
-69
-6
-158
-133
-18
-220
-185
-19
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-74
-73
-73
-219
-219
-219
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-113
-113
-113
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-157
-157
-157
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-108
-108
-108
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-46
-44
-44
-122
-119
-119
-175
-175
-175
-223
-223
-223
-251
-251
-251
-250
-250
-250
-236
-236
-236
-204
-204
-204
-138
-134
-134
-33
-32
-32
-1
-1
-1
-0
-0
-0
-0
-0
-0
-2
-1
-0
-27
-23
-12
-83
-69
-6
-208
-175
-18
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-197
-165
-17
-19
-17
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-70
-69
-69
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-113
-113
-113
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-93
-93
-93
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-38
-38
-38
-143
-143
-143
-212
-212
-212
-244
-244
-244
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-192
-192
-192
-83
-83
-83
-7
-7
-7
-0
-0
-0
-0
-0
-0
-2
-1
-0
-5
-4
-2
-27
-23
-12
-158
-133
-18
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-56
-49
-25
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-93
-93
-93
-214
-214
-214
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-157
-157
-157
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-165
-165
-165
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-116
-116
-116
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-13
-13
-13
-46
-44
-44
-138
-134
-134
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-180
-180
-180
-79
-79
-79
-17
-16
-16
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-56
-49
-25
-158
-133
-18
-230
-192
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-49
-49
-49
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-157
-157
-157
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-76
-76
-76
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-56
-54
-54
-138
-134
-134
-217
-217
-217
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-235
-235
-235
-143
-143
-143
-42
-42
-42
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-208
-175
-18
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-197
-165
-17
-43
-36
-7
-1
-1
-1
-2
-2
-2
-22
-21
-21
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-38
-38
-38
-108
-108
-108
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-158
-158
-158
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-54
-54
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-117
-117
-117
-204
-204
-204
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-188
-188
-188
-98
-96
-96
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-49
-25
-197
-165
-17
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-56
-49
-25
-2
-2
-2
-1
-1
-1
-22
-21
-21
-133
-133
-133
-143
-143
-143
-83
-83
-83
-25
-24
-24
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-17
-16
-16
-108
-108
-108
-190
-190
-190
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-157
-157
-157
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-202
-202
-202
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-74
-73
-73
-183
-183
-183
-241
-241
-241
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-194
-194
-194
-183
-183
-183
-231
-231
-231
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-233
-233
-233
-178
-178
-178
-59
-59
-59
-0
-0
-0
-0
-0
-0
-2
-1
-0
-2
-1
-0
-56
-49
-25
-197
-165
-17
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-83
-69
-6
-4
-4
-4
-1
-1
-1
-0
-0
-0
-79
-79
-79
-234
-234
-234
-247
-247
-247
-231
-231
-231
-202
-202
-202
-108
-108
-108
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-90
-90
-90
-165
-165
-165
-205
-205
-205
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-173
-173
-173
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-150
-150
-150
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-82
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-42
-42
-42
-143
-143
-143
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-217
-217
-217
-157
-157
-157
-59
-59
-59
-3
-3
-3
-2
-2
-2
-27
-26
-26
-126
-126
-126
-214
-214
-214
-244
-244
-244
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-133
-133
-133
-35
-35
-35
-3
-3
-3
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-137
-121
-57
-5
-4
-2
-1
-1
-1
-0
-0
-0
-40
-39
-39
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-194
-194
-194
-106
-104
-104
-79
-79
-79
-59
-59
-59
-32
-31
-31
-22
-21
-21
-15
-15
-15
-2
-2
-2
-10
-10
-10
-16
-18
-19
-16
-18
-19
-16
-18
-19
-19
-19
-20
-35
-35
-35
-38
-38
-38
-53
-53
-53
-95
-95
-95
-148
-148
-148
-204
-204
-204
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-205
-205
-205
-95
-95
-95
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-112
-108
-108
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-140
-136
-136
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-19
-19
-20
-83
-83
-83
-200
-200
-200
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-219
-219
-219
-143
-143
-143
-58
-57
-57
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-49
-49
-49
-128
-128
-128
-198
-198
-198
-245
-245
-245
-255
-255
-255
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-171
-171
-171
-49
-49
-49
-0
-0
-0
-0
-0
-0
-4
-3
-1
-11
-9
-1
-158
-133
-18
-230
-192
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-158
-133
-18
-19
-17
-7
-0
-0
-0
-0
-0
-0
-25
-24
-24
-157
-157
-157
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-237
-237
-237
-196
-196
-196
-165
-165
-165
-148
-148
-148
-106
-104
-104
-128
-128
-128
-157
-157
-157
-157
-157
-157
-157
-157
-157
-158
-158
-158
-205
-205
-205
-217
-217
-217
-230
-230
-230
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-165
-165
-165
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-102
-100
-100
-217
-217
-217
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-188
-188
-188
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-42
-42
-42
-143
-143
-143
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-235
-235
-235
-165
-165
-165
-74
-73
-73
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-49
-49
-49
-128
-128
-128
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-183
-183
-183
-58
-57
-57
-2
-2
-2
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-158
-133
-18
-27
-23
-12
-0
-0
-0
-1
-0
-0
-6
-6
-6
-108
-108
-108
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-252
-252
-252
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-212
-212
-212
-106
-104
-104
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-227
-227
-227
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-190
-190
-190
-59
-59
-59
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-89
-86
-86
-200
-200
-200
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-186
-186
-186
-74
-73
-73
-22
-21
-21
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-79
-79
-79
-212
-212
-212
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-202
-202
-202
-70
-69
-69
-3
-3
-3
-1
-0
-0
-4
-3
-1
-27
-23
-12
-113
-95
-9
-230
-192
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-158
-133
-18
-19
-17
-7
-1
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-47
-47
-47
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-165
-165
-165
-46
-44
-44
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-205
-205
-205
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-40
-39
-39
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-35
-35
-35
-143
-143
-143
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-226
-226
-226
-122
-119
-119
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-40
-39
-39
-165
-165
-165
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-214
-214
-214
-83
-83
-83
-8
-8
-8
-0
-0
-0
-2
-1
-0
-4
-3
-1
-83
-69
-6
-220
-185
-19
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-197
-165
-17
-5
-4
-2
-4
-3
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-106
-104
-104
-158
-158
-158
-214
-214
-214
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-231
-231
-231
-207
-207
-207
-157
-157
-157
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-95
-95
-95
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-106
-104
-104
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-90
-90
-90
-186
-186
-186
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-183
-183
-183
-82
-79
-79
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-139
-139
-139
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-210
-210
-210
-83
-83
-83
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-69
-6
-220
-185
-19
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-197
-165
-17
-27
-23
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-46
-44
-44
-143
-143
-143
-217
-217
-217
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-244
-244
-244
-222
-222
-222
-157
-157
-157
-83
-83
-83
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-98
-96
-96
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-143
-143
-143
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-128
-128
-128
-229
-229
-229
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-133
-133
-133
-42
-42
-42
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-158
-158
-158
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-217
-217
-217
-90
-90
-90
-6
-6
-6
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-208
-175
-18
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-158
-133
-18
-43
-36
-7
-5
-4
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-65
-65
-65
-119
-119
-119
-143
-143
-143
-148
-148
-148
-214
-214
-214
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-215
-215
-215
-205
-205
-205
-158
-158
-158
-118
-118
-118
-90
-90
-90
-70
-69
-69
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-133
-133
-133
-219
-219
-219
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-143
-143
-143
-26
-26
-26
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-165
-165
-165
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-93
-93
-93
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-165
-165
-165
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-219
-219
-219
-89
-86
-86
-4
-4
-4
-0
-0
-0
-0
-0
-0
-5
-4
-2
-83
-69
-6
-197
-165
-17
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-197
-165
-17
-43
-36
-7
-4
-3
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-8
-8
-8
-13
-13
-13
-17
-16
-16
-40
-39
-39
-63
-63
-63
-70
-69
-69
-133
-133
-133
-143
-143
-143
-143
-143
-143
-143
-143
-143
-143
-143
-143
-95
-95
-95
-65
-65
-65
-65
-65
-65
-65
-65
-65
-59
-59
-59
-40
-39
-39
-35
-35
-35
-19
-19
-20
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-138
-134
-134
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-53
-53
-53
-188
-188
-188
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-188
-188
-188
-63
-60
-60
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-22
-21
-21
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-2
-2
-2
-1
-1
-1
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-157
-157
-157
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-95
-95
-95
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-17
-7
-208
-175
-18
-241
-202
-20
-248
-208
-21
-248
-208
-21
-246
-207
-21
-241
-202
-20
-208
-175
-18
-137
-121
-57
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-49
-49
-49
-157
-157
-157
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-186
-186
-186
-30
-30
-30
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-70
-69
-69
-194
-194
-194
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-151
-151
-151
-95
-95
-95
-32
-31
-31
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-171
-171
-171
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-76
-76
-76
-1
-1
-1
-0
-0
-0
-1
-0
-0
-4
-3
-1
-43
-36
-7
-158
-133
-18
-220
-185
-19
-230
-192
-20
-197
-165
-17
-113
-95
-9
-56
-49
-25
-5
-4
-2
-0
-0
-0
-0
-0
-0
-3
-3
-3
-42
-42
-42
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-102
-100
-100
-204
-204
-204
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-139
-139
-139
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-82
-79
-79
-212
-212
-212
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-200
-200
-200
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-42
-42
-42
-95
-95
-95
-119
-119
-119
-188
-188
-188
-165
-165
-165
-53
-53
-53
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-215
-215
-215
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-210
-210
-210
-63
-60
-60
-1
-1
-1
-0
-0
-0
-0
-0
-0
-4
-3
-1
-19
-17
-7
-56
-49
-25
-85
-78
-62
-43
-36
-7
-17
-16
-16
-3
-3
-3
-0
-0
-0
-0
-0
-0
-17
-16
-16
-93
-93
-93
-188
-188
-188
-158
-158
-158
-98
-96
-96
-35
-35
-35
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-89
-86
-86
-151
-151
-151
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-231
-231
-231
-138
-134
-134
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-102
-100
-100
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-204
-204
-204
-59
-59
-59
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-79
-79
-79
-204
-204
-204
-128
-128
-128
-53
-53
-53
-171
-171
-171
-180
-180
-180
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-79
-79
-79
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-194
-194
-194
-46
-44
-44
-0
-0
-0
-0
-0
-0
-1
-0
-0
-2
-1
-0
-1
-1
-1
-0
-0
-0
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-165
-165
-165
-229
-229
-229
-253
-253
-253
-252
-252
-252
-236
-236
-236
-196
-196
-196
-65
-65
-65
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-183
-183
-183
-233
-233
-233
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-79
-79
-79
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-113
-113
-113
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-194
-194
-194
-53
-53
-53
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-0
-0
-0
-70
-69
-69
-222
-222
-222
-251
-251
-251
-63
-63
-63
-35
-35
-35
-169
-169
-169
-178
-178
-178
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-157
-157
-157
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-35
-35
-35
-102
-100
-100
-217
-217
-217
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-138
-134
-134
-53
-53
-53
-25
-24
-24
-9
-9
-9
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-26
-26
-26
-46
-44
-44
-119
-119
-119
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-217
-217
-217
-102
-100
-100
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-128
-128
-128
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-255
-255
-255
-204
-204
-204
-76
-76
-76
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-0
-0
-0
-70
-69
-69
-222
-222
-222
-255
-255
-255
-183
-183
-183
-25
-24
-24
-53
-53
-53
-194
-194
-194
-119
-119
-119
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-25
-24
-24
-106
-104
-104
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-27
-26
-26
-119
-119
-119
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-229
-229
-229
-178
-178
-178
-128
-128
-128
-53
-53
-53
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-42
-42
-42
-133
-133
-133
-180
-180
-180
-224
-224
-224
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-165
-165
-165
-65
-65
-65
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-122
-119
-119
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-65
-65
-65
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-217
-217
-217
-255
-255
-255
-233
-233
-233
-89
-86
-86
-2
-2
-2
-74
-73
-73
-207
-207
-207
-70
-69
-69
-1
-1
-1
-6
-6
-6
-23
-22
-22
-35
-35
-35
-56
-54
-54
-70
-69
-69
-93
-93
-93
-128
-128
-128
-143
-143
-143
-173
-173
-173
-226
-226
-226
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-95
-95
-95
-219
-219
-219
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-139
-139
-139
-59
-59
-59
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-38
-38
-38
-102
-100
-100
-143
-143
-143
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-108
-108
-108
-27
-26
-26
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-113
-113
-113
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-108
-108
-108
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-212
-212
-212
-255
-255
-255
-250
-250
-250
-143
-143
-143
-3
-3
-3
-8
-8
-8
-188
-188
-188
-198
-198
-198
-151
-151
-151
-169
-169
-169
-204
-204
-204
-214
-214
-214
-221
-221
-221
-226
-226
-226
-235
-235
-235
-246
-246
-246
-252
-252
-252
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-56
-54
-54
-173
-173
-173
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-224
-224
-224
-173
-173
-173
-95
-95
-95
-79
-79
-79
-49
-49
-49
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-82
-79
-79
-128
-128
-128
-180
-180
-180
-217
-217
-217
-237
-237
-237
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-188
-188
-188
-63
-63
-63
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-128
-128
-128
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-139
-139
-139
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-76
-76
-76
-223
-223
-223
-255
-255
-255
-255
-255
-255
-236
-236
-236
-190
-190
-190
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-183
-183
-183
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-59
-59
-59
-128
-128
-128
-230
-230
-230
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-157
-157
-157
-106
-104
-104
-95
-95
-95
-42
-42
-42
-42
-42
-42
-46
-44
-44
-83
-83
-83
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-108
-108
-108
-158
-158
-158
-175
-175
-175
-186
-186
-186
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-233
-233
-233
-143
-143
-143
-65
-65
-65
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-116
-116
-116
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-198
-198
-198
-49
-49
-49
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-22
-21
-21
-46
-44
-44
-82
-79
-79
-173
-173
-173
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-204
-204
-204
-79
-79
-79
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-82
-79
-79
-180
-180
-180
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-229
-229
-229
-230
-230
-230
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-196
-196
-196
-93
-93
-93
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-102
-100
-100
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-106
-104
-104
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-32
-31
-31
-90
-90
-90
-139
-139
-139
-169
-169
-169
-196
-196
-196
-228
-228
-228
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-247
-247
-247
-231
-231
-231
-196
-196
-196
-183
-183
-183
-151
-151
-151
-126
-126
-126
-59
-59
-59
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-38
-38
-38
-106
-104
-104
-171
-171
-171
-239
-239
-239
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-227
-227
-227
-173
-173
-173
-116
-116
-116
-47
-47
-47
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-79
-79
-79
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-158
-158
-158
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-70
-69
-69
-157
-157
-157
-209
-209
-209
-234
-234
-234
-248
-248
-248
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-196
-196
-196
-169
-169
-169
-158
-158
-158
-128
-128
-128
-74
-73
-73
-49
-49
-49
-32
-31
-31
-27
-26
-26
-17
-16
-16
-7
-7
-7
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-6
-6
-6
-23
-22
-22
-49
-49
-49
-112
-108
-108
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-126
-126
-126
-49
-49
-49
-23
-22
-22
-8
-8
-8
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-70
-69
-69
-207
-207
-207
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-33
-32
-32
-63
-60
-60
-128
-128
-128
-224
-224
-224
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-243
-243
-243
-229
-229
-229
-209
-209
-209
-178
-178
-178
-133
-133
-133
-58
-57
-57
-12
-12
-12
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-12
-12
-12
-79
-79
-79
-190
-190
-190
-228
-228
-228
-245
-245
-245
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-223
-223
-223
-194
-194
-194
-151
-151
-151
-65
-65
-65
-12
-12
-12
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-194
-194
-194
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-157
-157
-157
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-26
-26
-26
-74
-73
-73
-148
-148
-148
-196
-196
-196
-239
-239
-239
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-239
-239
-239
-202
-202
-202
-173
-173
-173
-151
-151
-151
-117
-117
-117
-76
-76
-76
-33
-32
-32
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-70
-69
-69
-126
-126
-126
-157
-157
-157
-165
-165
-165
-186
-186
-186
-202
-202
-202
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-237
-237
-237
-236
-236
-236
-229
-229
-229
-180
-180
-180
-157
-157
-157
-106
-104
-104
-58
-57
-57
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-148
-148
-148
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-74
-73
-73
-133
-133
-133
-175
-175
-175
-226
-226
-226
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-217
-217
-217
-148
-148
-148
-95
-95
-95
-49
-49
-49
-22
-21
-21
-7
-7
-7
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-7
-7
-7
-33
-32
-32
-49
-49
-49
-79
-79
-79
-133
-133
-133
-143
-143
-143
-178
-178
-178
-194
-194
-194
-194
-194
-194
-194
-194
-194
-194
-194
-194
-194
-194
-194
-175
-175
-175
-133
-133
-133
-133
-133
-133
-133
-133
-133
-133
-133
-133
-133
-133
-133
-113
-113
-113
-83
-83
-83
-83
-83
-83
-76
-76
-76
-27
-26
-26
-3
-3
-3
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-30
-28
-28
-6
-6
-6
-53
-53
-53
-119
-119
-119
-190
-190
-190
-228
-228
-228
-246
-246
-246
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-235
-235
-235
-200
-200
-200
-157
-157
-157
-89
-86
-86
-40
-39
-39
-17
-16
-16
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-10
-10
-10
-13
-13
-13
-25
-24
-24
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-25
-24
-24
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-6
-6
-6
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-183
-183
-183
-214
-214
-214
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-231
-231
-231
-200
-200
-200
-148
-148
-148
-79
-79
-79
-22
-21
-21
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-186
-186
-186
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-239
-239
-239
-207
-207
-207
-150
-150
-150
-83
-83
-83
-25
-24
-24
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-126
-126
-126
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-217
-217
-217
-165
-165
-165
-126
-126
-126
-90
-90
-90
-53
-53
-53
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-1
-1
-1
-70
-69
-69
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-214
-214
-214
-183
-183
-183
-102
-100
-100
-47
-47
-47
-22
-21
-21
-9
-9
-9
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-241
-241
-241
-226
-226
-226
-194
-194
-194
-128
-128
-128
-47
-47
-47
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-233
-233
-233
-178
-178
-178
-117
-117
-117
-70
-69
-69
-22
-21
-21
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-102
-100
-100
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-212
-212
-212
-143
-143
-143
-83
-83
-83
-33
-32
-32
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-173
-173
-173
-89
-86
-86
-42
-42
-42
-13
-13
-13
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-165
-165
-165
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-217
-217
-217
-173
-173
-173
-112
-108
-108
-47
-47
-47
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-95
-95
-95
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-202
-202
-202
-126
-126
-126
-53
-53
-53
-12
-12
-12
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-119
-119
-119
-210
-210
-210
-209
-209
-209
-158
-158
-158
-102
-100
-100
-49
-49
-49
-7
-7
-7
-0
-0
-0
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-47
-47
-47
-70
-69
-69
-76
-76
-76
-79
-79
-79
-79
-79
-79
-79
-79
-79
-79
-79
-79
-82
-79
-79
-106
-104
-104
-126
-126
-126
-128
-128
-128
-128
-128
-128
-128
-128
-128
-126
-126
-126
-106
-104
-104
-70
-69
-69
-42
-42
-42
-13
-13
-13
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-38
-38
-38
-35
-35
-35
-19
-19
-20
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-32
-31
-31
-49
-49
-49
-70
-69
-69
-128
-128
-128
-171
-171
-171
-215
-215
-215
-227
-227
-227
-229
-229
-229
-230
-230
-230
-230
-230
-230
-230
-230
-230
-230
-230
-230
-233
-233
-233
-239
-239
-239
-245
-245
-245
-246
-246
-246
-246
-246
-246
-247
-247
-247
-245
-245
-245
-239
-239
-239
-228
-228
-228
-214
-214
-214
-175
-175
-175
-83
-83
-83
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-25
-24
-24
-49
-49
-49
-106
-104
-104
-194
-194
-194
-246
-246
-246
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-106
-104
-104
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-56
-54
-54
-112
-108
-108
-173
-173
-173
-222
-222
-222
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-178
-178
-178
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-70
-69
-69
-150
-150
-150
-207
-207
-207
-243
-243
-243
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-70
-69
-69
-169
-169
-169
-224
-224
-224
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-30
-30
-30
-95
-95
-95
-198
-198
-198
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-30
-30
-30
-25
-24
-24
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-70
-69
-69
-180
-180
-180
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-175
-175
-175
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-35
-35
-35
-143
-143
-143
-192
-192
-192
-178
-178
-178
-113
-113
-113
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-198
-198
-198
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-119
-119
-119
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-157
-157
-157
-251
-251
-251
-255
-255
-255
-255
-255
-255
-243
-243
-243
-117
-117
-117
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-207
-207
-207
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-106
-104
-104
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-219
-219
-219
-76
-76
-76
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-126
-126
-126
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-171
-171
-171
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-209
-209
-209
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-207
-207
-207
-58
-57
-57
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-98
-96
-96
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-83
-83
-83
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-79
-79
-79
-196
-196
-196
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-116
-116
-116
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-175
-175
-175
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-169
-169
-169
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-53
-53
-53
-165
-165
-165
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-188
-188
-188
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-74
-73
-73
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-83
-83
-83
-218
-218
-218
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-63
-60
-60
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-165
-165
-165
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-190
-190
-190
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-89
-86
-86
-209
-209
-209
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-82
-79
-79
-82
-79
-79
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-82
-79
-79
-222
-222
-222
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-148
-148
-148
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-165
-165
-165
-230
-230
-230
-230
-230
-230
-183
-183
-183
-70
-69
-69
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-113
-113
-113
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-133
-133
-133
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-143
-143
-143
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-165
-165
-165
-42
-42
-42
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-175
-175
-175
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-196
-196
-196
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-102
-100
-100
-241
-241
-241
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-175
-175
-175
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-106
-104
-104
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-169
-169
-169
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-108
-108
-108
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-150
-150
-150
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-98
-96
-96
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-58
-57
-57
-200
-200
-200
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-113
-113
-113
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-157
-157
-157
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-42
-42
-42
-165
-165
-165
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-194
-194
-194
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-165
-165
-165
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-190
-190
-190
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-63
-63
-63
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-158
-158
-158
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-33
-32
-32
-157
-157
-157
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-98
-96
-96
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-148
-148
-148
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-139
-139
-139
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-148
-148
-148
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-138
-134
-134
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-79
-79
-79
-241
-241
-241
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-200
-200
-200
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-102
-100
-100
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-219
-219
-219
-70
-69
-69
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-157
-157
-157
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-196
-196
-196
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-90
-90
-90
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-90
-90
-90
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-205
-205
-205
-106
-104
-104
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-46
-44
-44
-188
-188
-188
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-143
-143
-143
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-234
-234
-234
-106
-104
-104
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-158
-158
-158
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-235
-235
-235
-140
-136
-136
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-89
-86
-86
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-63
-60
-60
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-83
-83
-83
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-95
-95
-95
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-150
-150
-150
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-139
-139
-139
-25
-24
-24
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-83
-83
-83
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-169
-169
-169
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-194
-194
-194
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-157
-157
-157
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-128
-128
-128
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-143
-143
-143
-32
-31
-31
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-173
-173
-173
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-139
-139
-139
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-183
-183
-183
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-82
-79
-79
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-150
-150
-150
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-215
-215
-215
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-133
-133
-133
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-204
-204
-204
-63
-63
-63
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-58
-57
-57
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-143
-143
-143
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-102
-100
-100
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-53
-53
-53
-194
-194
-194
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-126
-126
-126
-19
-19
-20
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-128
-128
-128
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-82
-79
-79
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-227
-227
-227
-83
-83
-83
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-165
-165
-165
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-143
-143
-143
-38
-38
-38
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-190
-190
-190
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-165
-165
-165
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-112
-108
-108
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-128
-128
-128
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-165
-165
-165
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-76
-76
-76
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-63
-60
-60
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-83
-83
-83
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-157
-157
-157
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-82
-79
-79
-236
-236
-236
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-186
-186
-186
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-118
-118
-118
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-183
-183
-183
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-173
-173
-173
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-76
-76
-76
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-178
-178
-178
-33
-32
-32
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-56
-54
-54
-200
-200
-200
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-169
-169
-169
-35
-35
-35
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-117
-117
-117
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-229
-229
-229
-76
-76
-76
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-108
-108
-108
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-169
-169
-169
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-150
-150
-150
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-188
-188
-188
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-133
-133
-133
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-140
-136
-136
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-148
-148
-148
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-126
-126
-126
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-83
-83
-83
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-175
-175
-175
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-90
-90
-90
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-214
-214
-214
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-113
-113
-113
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-82
-79
-79
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-169
-169
-169
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-76
-76
-76
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-165
-165
-165
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-102
-100
-100
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-79
-79
-79
-222
-222
-222
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-215
-215
-215
-70
-69
-69
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-54
-54
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-116
-116
-116
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-83
-83
-83
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-128
-128
-128
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-49
-49
-49
-188
-188
-188
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-183
-183
-183
-47
-47
-47
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-151
-151
-151
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-183
-183
-183
-30
-30
-30
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-165
-165
-165
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-175
-175
-175
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-150
-150
-150
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-74
-73
-73
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-30
-30
-30
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-143
-143
-143
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-133
-133
-133
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-79
-79
-79
-227
-227
-227
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-139
-139
-139
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-169
-169
-169
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-113
-113
-113
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-106
-104
-104
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-95
-95
-95
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-169
-169
-169
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-171
-171
-171
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-93
-93
-93
-224
-224
-224
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-95
-95
-95
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-139
-139
-139
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-83
-83
-83
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-65
-65
-65
-207
-207
-207
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-138
-134
-134
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-198
-198
-198
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-59
-59
-59
-222
-222
-222
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-157
-157
-157
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-200
-200
-200
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-83
-83
-83
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-90
-90
-90
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-171
-171
-171
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-139
-139
-139
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-165
-165
-165
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-178
-178
-178
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-204
-204
-204
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-138
-134
-134
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-90
-90
-90
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-128
-128
-128
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-126
-126
-126
-254
-254
-254
-255
-255
-255
-255
-255
-255
-231
-231
-231
-83
-83
-83
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-119
-119
-119
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-59
-59
-59
-248
-248
-248
-255
-255
-255
-255
-255
-255
-239
-239
-239
-108
-108
-108
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-207
-207
-207
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-82
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-42
-42
-42
-183
-183
-183
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-169
-169
-169
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-192
-192
-192
-254
-254
-254
-255
-255
-255
-252
-252
-252
-158
-158
-158
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-165
-165
-165
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-140
-136
-136
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-234
-234
-234
-106
-104
-104
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-113
-113
-113
-242
-242
-242
-255
-255
-255
-255
-255
-255
-192
-192
-192
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-204
-204
-204
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-219
-219
-219
-74
-73
-73
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-65
-65
-65
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-200
-200
-200
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-59
-59
-59
-212
-212
-212
-255
-255
-255
-255
-255
-255
-223
-223
-223
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-150
-150
-150
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-186
-186
-186
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-139
-139
-139
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-180
-180
-180
-255
-255
-255
-255
-255
-255
-249
-249
-249
-108
-108
-108
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-116
-116
-116
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-202
-202
-202
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-224
-224
-224
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-138
-134
-134
-248
-248
-248
-255
-255
-255
-255
-255
-255
-128
-128
-128
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-192
-192
-192
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-106
-104
-104
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-108
-108
-108
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-76
-76
-228
-228
-228
-255
-255
-255
-255
-255
-255
-128
-128
-128
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-222
-222
-222
-255
-255
-255
-255
-255
-255
-255
-255
-255
-210
-210
-210
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-192
-192
-192
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-108
-108
-108
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-186
-186
-186
-255
-255
-255
-255
-255
-255
-122
-119
-119
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-233
-233
-233
-255
-255
-255
-255
-255
-255
-251
-251
-251
-113
-113
-113
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-128
-128
-128
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-98
-96
-96
-254
-254
-254
-255
-255
-255
-116
-116
-116
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-108
-108
-108
-240
-240
-240
-255
-255
-255
-253
-253
-253
-183
-183
-183
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-108
-108
-108
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-158
-158
-158
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-229
-229
-229
-254
-254
-254
-108
-108
-108
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-148
-148
-148
-250
-250
-250
-255
-255
-255
-230
-230
-230
-90
-90
-90
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-116
-116
-116
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-151
-151
-151
-200
-200
-200
-79
-79
-79
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-178
-178
-178
-254
-254
-254
-251
-251
-251
-169
-169
-169
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-139
-139
-139
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-49
-49
-49
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-49
-49
-202
-202
-202
-255
-255
-255
-227
-227
-227
-79
-79
-79
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-89
-86
-86
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-133
-133
-133
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-212
-212
-212
-255
-255
-255
-126
-126
-126
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-58
-57
-57
-196
-196
-196
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-59
-59
-59
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-180
-180
-180
-217
-217
-217
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-158
-158
-158
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-30
-30
-30
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-95
-95
-95
-83
-83
-83
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-95
-95
-95
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-116
-116
-116
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-212
-212
-212
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-192
-192
-192
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-128
-128
-128
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-70
-69
-69
-224
-224
-224
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-219
-219
-219
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-150
-150
-150
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-157
-157
-157
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-95
-95
-95
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-212
-212
-212
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-175
-175
-175
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-126
-126
-126
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-89
-86
-86
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-214
-214
-214
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-165
-165
-165
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-102
-100
-100
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-76
-76
-76
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-165
-165
-165
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-106
-104
-104
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-178
-178
-178
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-157
-157
-157
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-83
-83
-83
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-237
-237
-237
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-175
-175
-175
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-76
-76
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-173
-173
-173
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-106
-104
-104
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-158
-158
-158
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-165
-165
-165
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-65
-65
-65
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-113
-113
-113
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-143
-143
-143
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-169
-169
-169
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-207
-207
-207
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-210
-210
-210
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-138
-134
-134
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-102
-100
-100
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-83
-83
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-151
-151
-151
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-148
-148
-148
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-217
-217
-217
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-224
-224
-224
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-108
-108
-108
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-128
-128
-128
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-128
-128
-128
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-26
-26
-26
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-118
-118
-118
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-116
-116
-116
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-198
-198
-198
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-98
-96
-96
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-112
-108
-108
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-234
-234
-234
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-173
-173
-173
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-108
-108
-108
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-128
-128
-128
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-65
-65
-65
-215
-215
-215
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-143
-143
-143
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-126
-126
-126
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-33
-32
-32
-178
-178
-178
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-65
-65
-65
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-188
-188
-188
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-139
-139
-139
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-188
-188
-188
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-58
-57
-57
-190
-190
-190
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-47
-47
-47
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-231
-231
-231
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-178
-178
-178
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-112
-108
-108
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-139
-139
-139
-226
-226
-226
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-150
-150
-150
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-19
-19
-20
-90
-90
-90
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-188
-188
-188
-49
-49
-49
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-46
-44
-44
-188
-188
-188
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-202
-202
-202
-65
-65
-65
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-106
-104
-104
-196
-196
-196
-235
-235
-235
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-204
-204
-204
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-30
-28
-28
-95
-95
-95
-180
-180
-180
-234
-234
-234
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-196
-196
-196
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-33
-32
-32
-95
-95
-95
-169
-169
-169
-234
-234
-234
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-158
-158
-158
-53
-53
-53
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-23
-22
-22
-74
-73
-73
-180
-180
-180
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-148
-148
-148
-30
-30
-30
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-53
-53
-53
-157
-157
-157
-226
-226
-226
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-217
-217
-217
-93
-93
-93
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-76
-76
-76
-169
-169
-169
-224
-224
-224
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-234
-234
-234
-157
-157
-157
-63
-63
-63
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-76
-76
-76
-143
-143
-143
-210
-210
-210
-249
-249
-249
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-217
-217
-217
-106
-104
-104
-23
-22
-22
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-15
-15
-15
-38
-38
-38
-95
-95
-95
-188
-188
-188
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-229
-229
-229
-143
-143
-143
-49
-49
-49
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-59
-59
-59
-128
-128
-128
-194
-194
-194
-223
-223
-223
-242
-242
-242
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-243
-243
-243
-218
-218
-218
-180
-180
-180
-112
-108
-108
-27
-26
-26
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-23
-22
-22
-65
-65
-65
-116
-116
-116
-165
-165
-165
-207
-207
-207
-235
-235
-235
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-235
-235
-235
-209
-209
-209
-169
-169
-169
-118
-118
-118
-58
-57
-57
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-17
-16
-16
-56
-54
-54
-93
-93
-93
-139
-139
-139
-180
-180
-180
-217
-217
-217
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-198
-198
-198
-143
-143
-143
-90
-90
-90
-58
-57
-57
-17
-16
-16
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-13
-13
-13
-26
-26
-26
-40
-39
-39
-83
-83
-83
-157
-157
-157
-204
-204
-204
-231
-231
-231
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-217
-217
-217
-165
-165
-165
-95
-95
-95
-33
-32
-32
-13
-13
-13
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-17
-7
-113
-95
-9
-208
-175
-18
-208
-175
-18
-113
-95
-9
-83
-69
-6
-43
-36
-7
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-17
-16
-16
-38
-38
-38
-83
-83
-83
-139
-139
-139
-190
-190
-190
-192
-192
-192
-202
-202
-202
-217
-217
-217
-224
-224
-224
-228
-228
-228
-229
-229
-229
-236
-236
-236
-239
-239
-239
-239
-239
-239
-240
-240
-240
-245
-245
-245
-249
-249
-249
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-247
-247
-247
-243
-243
-243
-234
-234
-234
-224
-224
-224
-204
-204
-204
-169
-169
-169
-148
-148
-148
-113
-113
-113
-42
-42
-42
-12
-12
-12
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-3
-1
-19
-17
-7
-27
-23
-12
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-69
-6
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-197
-165
-17
-113
-95
-9
-56
-49
-25
-19
-17
-7
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-2
-2
-2
-17
-16
-16
-46
-44
-44
-63
-60
-60
-74
-73
-73
-76
-76
-76
-95
-95
-95
-106
-104
-104
-106
-104
-104
-112
-108
-108
-128
-128
-128
-143
-143
-143
-158
-158
-158
-165
-165
-165
-165
-165
-165
-165
-165
-165
-165
-165
-165
-165
-165
-165
-148
-148
-148
-133
-133
-133
-122
-119
-119
-90
-90
-90
-59
-59
-59
-27
-26
-26
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-19
-17
-7
-83
-69
-6
-158
-133
-18
-197
-165
-17
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-69
-6
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-208
-175
-18
-158
-133
-18
-113
-95
-9
-83
-69
-6
-19
-17
-7
-4
-3
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-4
-4
-4
-7
-7
-7
-10
-10
-10
-12
-12
-12
-12
-12
-12
-12
-12
-12
-12
-12
-12
-12
-12
-12
-8
-8
-8
-5
-5
-5
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-83
-69
-6
-158
-133
-18
-208
-175
-18
-245
-205
-20
-245
-205
-20
-208
-175
-18
-56
-49
-25
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-43
-36
-7
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-220
-185
-19
-197
-165
-17
-158
-133
-18
-83
-69
-6
-27
-23
-12
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-27
-23
-12
-83
-69
-6
-197
-165
-17
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-220
-185
-19
-83
-69
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-83
-69
-6
-220
-185
-19
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-241
-202
-20
-245
-205
-20
-230
-192
-20
-197
-165
-17
-113
-95
-9
-43
-36
-7
-19
-17
-7
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-4
-3
-1
-11
-9
-1
-43
-36
-7
-83
-69
-6
-158
-133
-18
-236
-198
-20
-245
-205
-20
-248
-208
-21
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-158
-133
-18
-19
-17
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-83
-69
-6
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-241
-202
-20
-230
-192
-20
-158
-133
-18
-113
-95
-9
-43
-36
-7
-11
-9
-1
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-4
-3
-1
-11
-9
-1
-27
-23
-12
-43
-36
-7
-83
-69
-6
-83
-69
-6
-158
-133
-18
-208
-175
-18
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-197
-165
-17
-27
-23
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-83
-69
-6
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-236
-198
-20
-197
-165
-17
-158
-133
-18
-113
-95
-9
-43
-36
-7
-19
-17
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-5
-4
-2
-19
-17
-7
-43
-36
-7
-83
-69
-6
-113
-95
-9
-158
-133
-18
-158
-133
-18
-197
-165
-17
-197
-165
-17
-230
-192
-20
-236
-198
-20
-245
-205
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-83
-69
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-11
-9
-1
-83
-69
-6
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-230
-192
-20
-220
-185
-19
-197
-165
-17
-158
-133
-18
-113
-95
-9
-113
-95
-9
-83
-69
-6
-56
-49
-25
-43
-36
-7
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-27
-23
-12
-43
-36
-7
-56
-49
-25
-83
-69
-6
-83
-69
-6
-83
-69
-6
-113
-95
-9
-158
-133
-18
-197
-165
-17
-220
-185
-19
-230
-192
-20
-241
-202
-20
-245
-205
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-220
-185
-19
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-5
-4
-2
-56
-49
-25
-197
-165
-17
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-248
-208
-21
-208
-175
-18
-158
-133
-18
-43
-36
-7
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-197
-165
-17
-56
-49
-25
-4
-3
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-3
-1
-83
-69
-6
-197
-165
-17
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-245
-205
-20
-197
-165
-17
-19
-17
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-36
-7
-208
-175
-18
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-158
-133
-18
-43
-36
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-43
-36
-7
-197
-165
-17
-241
-202
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-43
-36
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-56
-49
-25
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-158
-133
-18
-27
-23
-12
-4
-3
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-36
-7
-158
-133
-18
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-208
-175
-18
-43
-36
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-36
-7
-197
-165
-17
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-113
-95
-9
-11
-9
-1
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-83
-69
-6
-197
-165
-17
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-158
-133
-18
-19
-17
-7
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-113
-95
-9
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-197
-165
-17
-56
-49
-25
-0
-0
-0
-2
-1
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-17
-7
-158
-133
-18
-208
-175
-18
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-43
-36
-7
-197
-165
-17
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-241
-202
-20
-220
-185
-19
-113
-95
-9
-43
-36
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-56
-49
-25
-158
-133
-18
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-197
-165
-17
-43
-36
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-230
-192
-20
-158
-133
-18
-56
-49
-25
-19
-17
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-5
-4
-2
-19
-17
-7
-83
-69
-6
-197
-165
-17
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-245
-205
-20
-113
-95
-9
-11
-9
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-19
-17
-7
-158
-133
-18
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-230
-192
-20
-158
-133
-18
-83
-69
-6
-19
-17
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-83
-69
-6
-158
-133
-18
-208
-175
-18
-230
-192
-20
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-197
-165
-17
-43
-36
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-11
-9
-1
-197
-165
-17
-245
-205
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-236
-198
-20
-208
-175
-18
-113
-95
-9
-43
-36
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-4
-2
-43
-36
-7
-83
-69
-6
-158
-133
-18
-197
-165
-17
-230
-192
-20
-246
-207
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-83
-69
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-83
-69
-6
-220
-185
-19
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-248
-208
-21
-246
-207
-21
-230
-192
-20
-197
-165
-17
-113
-95
-9
-43
-36
-7
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-27
-23
-12
-83
-69
-6
-158
-133
-18
-197
-165
-17
-236
-198
-20
-248
-208
-21
-248
-208
-21
-248
-208
-21
-236
-198
-20
-158
-133
-18
-19
-17
-7
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-9
-1
-113
-95
-9
-220
-185
-19
-241
-202
-20
-245
-205
-20
-230
-192
-20
-197
-165
-17
-158
-133
-18
-83
-69
-6
-43
-36
-7
-11
-9
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-11
-9
-1
-27
-23
-12
-56
-49
-25
-113
-95
-9
-113
-95
-9
-158
-133
-18
-83
-69
-6
-19
-17
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-11
-9
-1
-43
-36
-7
-43
-36
-7
-43
-36
-7
-43
-36
-7
-27
-23
-12
-19
-17
-7
-5
-4
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-2
-1
-0
-2
-1
-0
-4
-3
-1
-2
-1
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-1
-0
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-16
-18
-19
-32
-31
-31
-42
-42
-42
-47
-47
-47
-49
-49
-49
-47
-47
-47
-42
-42
-42
-33
-32
-32
-16
-18
-19
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-8
-8
-8
-10
-10
-10
-10
-10
-10
-10
-10
-10
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-12
-12
-12
-27
-26
-26
-40
-39
-39
-47
-47
-47
-49
-49
-49
-47
-47
-47
-38
-38
-38
-23
-22
-22
-7
-7
-7
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-12
-12
-12
-26
-26
-26
-35
-35
-35
-46
-44
-44
-49
-49
-49
-49
-49
-49
-46
-44
-44
-38
-38
-38
-25
-24
-24
-12
-12
-12
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-9
-9
-9
-10
-10
-10
-10
-10
-10
-10
-10
-10
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-17
-16
-16
-33
-32
-32
-42
-42
-42
-49
-49
-49
-49
-49
-49
-46
-44
-44
-35
-35
-35
-19
-19
-20
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-23
-22
-22
-49
-49
-49
-83
-83
-83
-117
-112
-112
-145
-140
-140
-158
-151
-151
-163
-154
-154
-158
-151
-151
-140
-136
-136
-117
-112
-112
-81
-76
-76
-40
-39
-39
-12
-12
-12
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-38
-38
-38
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-47
-47
-47
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-40
-39
-39
-60
-56
-56
-60
-56
-56
-60
-56
-56
-60
-56
-56
-49
-49
-49
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-46
-44
-44
-106
-104
-104
-157
-157
-157
-196
-196
-196
-224
-224
-224
-243
-243
-243
-247
-247
-247
-243
-243
-243
-228
-228
-228
-198
-198
-198
-157
-157
-157
-108
-108
-108
-56
-54
-54
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-113
-113
-113
-133
-133
-133
-133
-133
-133
-133
-133
-133
-128
-128
-128
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-76
-76
-76
-138
-134
-134
-186
-186
-186
-221
-221
-221
-241
-241
-241
-246
-246
-246
-239
-239
-239
-217
-217
-217
-171
-171
-171
-113
-113
-113
-53
-53
-53
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-30
-28
-28
-89
-86
-86
-138
-134
-134
-180
-180
-180
-212
-212
-212
-236
-236
-236
-246
-246
-246
-246
-246
-246
-237
-237
-237
-214
-214
-214
-178
-178
-178
-133
-133
-133
-79
-79
-79
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-63
-60
-60
-126
-126
-126
-133
-133
-133
-133
-133
-133
-133
-133
-133
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-90
-90
-90
-150
-150
-150
-198
-198
-198
-229
-229
-229
-247
-247
-247
-247
-247
-247
-234
-234
-234
-209
-209
-209
-158
-158
-158
-102
-100
-100
-38
-38
-38
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-25
-24
-24
-70
-69
-69
-133
-129
-129
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-158
-151
-151
-105
-100
-100
-47
-47
-47
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-74
-70
-70
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-70
-66
-66
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-53
-53
-53
-145
-140
-140
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-95
-95
-95
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-33
-32
-32
-122
-119
-119
-198
-198
-198
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-243
-243
-243
-207
-207
-207
-126
-126
-126
-35
-35
-35
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-254
-254
-254
-254
-254
-254
-252
-252
-252
-0
-0
-0
-1
-1
-1
-42
-42
-42
-143
-143
-143
-226
-226
-226
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-204
-204
-204
-122
-119
-119
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-98
-96
-96
-178
-178
-178
-234
-234
-234
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-227
-227
-227
-158
-158
-158
-65
-65
-65
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-254
-254
-254
-254
-254
-254
-150
-150
-150
-0
-0
-0
-4
-4
-4
-63
-63
-63
-165
-165
-165
-235
-235
-235
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-239
-239
-239
-186
-186
-186
-82
-79
-79
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-49
-49
-49
-122
-119
-119
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-145
-140
-140
-82
-79
-79
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-15
-15
-98
-96
-96
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-143
-143
-143
-35
-33
-33
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-127
-120
-120
-170
-161
-161
-171
-162
-162
-171
-162
-162
-170
-161
-161
-117
-112
-112
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-46
-44
-44
-178
-178
-178
-242
-242
-242
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-180
-180
-180
-56
-54
-54
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-1
-1
-1
-49
-49
-49
-180
-180
-180
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-148
-148
-148
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-157
-157
-157
-233
-233
-233
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-215
-215
-215
-98
-96
-96
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-4
-4
-4
-76
-76
-76
-205
-205
-205
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-226
-226
-226
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-66
-62
-62
-145
-140
-140
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-163
-154
-154
-98
-96
-96
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-167
-158
-158
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-27
-26
-26
-133
-129
-129
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-117
-117
-117
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-105
-100
-100
-168
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-140
-136
-136
-47
-47
-47
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-49
-49
-49
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-244
-244
-244
-227
-227
-227
-214
-214
-214
-212
-212
-212
-214
-214
-214
-224
-224
-224
-243
-243
-243
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-74
-73
-73
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-42
-42
-42
-192
-192
-192
-255
-255
-255
-255
-255
-255
-253
-253
-253
-240
-240
-240
-223
-223
-223
-214
-214
-214
-212
-212
-212
-217
-217
-217
-229
-229
-229
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-165
-165
-165
-30
-28
-28
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-42
-42
-42
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-243
-243
-243
-228
-228
-228
-217
-217
-217
-212
-212
-212
-212
-212
-212
-217
-217
-217
-233
-233
-233
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-126
-126
-126
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-151
-151
-151
-79
-79
-79
-229
-229
-229
-255
-255
-255
-255
-255
-255
-254
-254
-254
-247
-247
-247
-237
-237
-237
-231
-231
-231
-233
-233
-233
-241
-241
-241
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-63
-60
-60
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-60
-56
-56
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-154
-146
-146
-122
-119
-119
-81
-76
-76
-40
-39
-39
-23
-22
-22
-16
-18
-19
-27
-26
-26
-56
-54
-54
-105
-100
-100
-145
-140
-140
-168
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-83
-83
-83
-7
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-70
-66
-66
-82
-79
-79
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-33
-33
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-95
-95
-95
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-74
-70
-70
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-66
-62
-62
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-194
-194
-194
-126
-126
-126
-70
-69
-69
-32
-31
-31
-22
-21
-21
-30
-30
-30
-59
-59
-59
-122
-119
-119
-192
-192
-192
-244
-244
-244
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-212
-212
-212
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-157
-157
-157
-252
-252
-252
-255
-255
-255
-248
-248
-248
-180
-180
-180
-112
-108
-108
-58
-57
-57
-27
-26
-26
-23
-22
-22
-38
-38
-38
-76
-76
-76
-139
-139
-139
-218
-218
-218
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-128
-128
-128
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-183
-183
-183
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-183
-183
-183
-122
-119
-119
-74
-73
-73
-35
-35
-35
-22
-21
-21
-23
-22
-22
-40
-39
-39
-83
-83
-83
-150
-150
-150
-217
-217
-217
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-79
-79
-79
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-212
-212
-212
-255
-255
-255
-255
-255
-255
-237
-237
-237
-178
-178
-178
-133
-133
-133
-98
-96
-96
-83
-83
-83
-83
-83
-83
-113
-113
-113
-157
-157
-157
-219
-219
-219
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-158
-158
-158
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-46
-44
-44
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-122
-119
-119
-60
-56
-56
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-40
-39
-39
-112
-108
-108
-169
-160
-160
-171
-162
-162
-171
-162
-162
-170
-161
-161
-154
-146
-146
-56
-54
-54
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-81
-76
-76
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-105
-100
-100
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-76
-76
-76
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-65
-65
-65
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-47
-47
-47
-145
-140
-140
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-90
-90
-90
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-143
-143
-143
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-143
-143
-143
-47
-47
-47
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-46
-44
-44
-143
-143
-143
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-157
-157
-157
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-255
-255
-255
-241
-241
-241
-143
-143
-143
-33
-32
-32
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-76
-76
-76
-192
-192
-192
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-224
-224
-224
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-150
-150
-150
-246
-246
-246
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-108
-108
-108
-35
-35
-35
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-76
-76
-76
-194
-194
-194
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-254
-254
-254
-253
-253
-253
-204
-204
-204
-102
-100
-100
-27
-26
-26
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-17
-16
-16
-74
-73
-73
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-223
-223
-223
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-112
-108
-108
-169
-160
-160
-171
-162
-162
-171
-162
-162
-170
-161
-161
-122
-119
-119
-27
-26
-26
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-117
-112
-112
-170
-161
-161
-171
-162
-162
-171
-162
-162
-169
-160
-160
-117
-112
-112
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-66
-62
-62
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-117
-112
-112
-23
-22
-22
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-15
-15
-105
-100
-100
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-138
-134
-134
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-122
-119
-119
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-17
-16
-16
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-70
-69
-69
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-165
-165
-165
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-22
-21
-21
-143
-143
-143
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-83
-83
-83
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-143
-143
-143
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-65
-65
-65
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-175
-175
-175
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-89
-86
-86
-230
-230
-230
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-95
-95
-95
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-47
-47
-47
-224
-224
-224
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-126
-126
-126
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-204
-204
-204
-70
-69
-69
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-79
-79
-79
-231
-231
-231
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-126
-126
-126
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-63
-60
-60
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-35
-33
-33
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-56
-54
-54
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-35
-35
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-133
-129
-129
-38
-35
-35
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-33
-32
-32
-133
-129
-129
-170
-161
-161
-171
-162
-162
-171
-162
-162
-169
-160
-160
-127
-120
-120
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-90
-90
-90
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-143
-143
-143
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-157
-157
-157
-254
-254
-254
-255
-255
-255
-255
-255
-255
-254
-254
-254
-188
-188
-188
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-194
-194
-194
-254
-254
-254
-255
-255
-255
-255
-255
-255
-254
-254
-254
-173
-173
-173
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-180
-180
-180
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-90
-90
-90
-233
-233
-233
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-106
-104
-104
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-76
-76
-240
-240
-240
-255
-255
-255
-255
-255
-255
-255
-255
-255
-198
-198
-198
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-133
-133
-133
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-117
-112
-112
-170
-161
-161
-171
-162
-162
-171
-162
-162
-158
-151
-151
-59
-59
-59
-2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-74
-70
-70
-163
-154
-154
-171
-162
-162
-171
-162
-162
-170
-161
-161
-98
-96
-96
-11
-10
-11
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-35
-35
-35
-140
-136
-136
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-47
-47
-47
-145
-140
-140
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-90
-90
-90
-8
-8
-8
-0
-0
-0
-1
-1
-1
-74
-73
-73
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-70
-66
-66
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-234
-234
-234
-95
-95
-95
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-79
-79
-79
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-218
-218
-218
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-236
-236
-236
-98
-96
-96
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-175
-175
-175
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-139
-139
-139
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-76
-76
-76
-245
-245
-245
-255
-255
-255
-255
-255
-255
-253
-253
-253
-178
-178
-178
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-25
-24
-24
-173
-173
-173
-254
-254
-254
-255
-255
-255
-255
-255
-255
-237
-237
-237
-90
-90
-90
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-148
-148
-148
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-79
-79
-79
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-215
-215
-215
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-35
-35
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-122
-119
-119
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-35
-35
-138
-134
-134
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-30
-28
-28
-122
-119
-119
-168
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-49
-49
-49
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-74
-70
-70
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-63
-60
-60
-5
-5
-5
-35
-33
-33
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-95
-95
-95
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-93
-93
-93
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-190
-190
-190
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-113
-113
-113
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-90
-90
-90
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-151
-151
-151
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-113
-113
-113
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-108
-108
-108
-245
-245
-245
-255
-255
-255
-255
-255
-255
-253
-253
-253
-133
-133
-133
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-49
-49
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-234
-234
-234
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-74
-70
-70
-169
-160
-160
-171
-162
-162
-171
-162
-162
-167
-158
-158
-89
-86
-86
-4
-4
-4
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-117
-112
-112
-170
-161
-161
-171
-162
-162
-171
-162
-162
-158
-151
-151
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-105
-100
-100
-167
-158
-158
-170
-161
-161
-171
-162
-162
-171
-162
-162
-158
-151
-151
-74
-73
-73
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-112
-108
-108
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-133
-129
-129
-63
-60
-60
-117
-112
-112
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-127
-120
-120
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-148
-148
-148
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-143
-143
-143
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-122
-119
-119
-251
-251
-251
-255
-255
-255
-255
-255
-255
-254
-254
-254
-151
-151
-151
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-242
-242
-242
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-58
-57
-57
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-214
-214
-214
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-74
-73
-73
-226
-226
-226
-255
-255
-255
-255
-255
-255
-255
-255
-255
-171
-171
-171
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-227
-227
-227
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-180
-180
-180
-255
-255
-255
-255
-255
-255
-255
-255
-255
-246
-246
-246
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-106
-104
-104
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-66
-62
-62
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-6
-6
-105
-100
-100
-169
-160
-160
-171
-162
-162
-171
-162
-162
-168
-160
-160
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-90
-90
-90
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-89
-86
-86
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-32
-31
-31
-133
-129
-129
-171
-162
-162
-171
-162
-162
-171
-162
-162
-168
-160
-160
-154
-146
-146
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-163
-154
-154
-40
-39
-39
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-198
-198
-198
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-79
-79
-79
-229
-229
-229
-255
-255
-255
-255
-255
-255
-255
-255
-255
-192
-192
-192
-30
-30
-30
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-90
-90
-90
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-235
-235
-235
-95
-95
-95
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-205
-205
-205
-255
-255
-255
-255
-255
-255
-255
-255
-255
-202
-202
-202
-33
-32
-32
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-183
-183
-183
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-171
-171
-171
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-138
-134
-134
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-65
-65
-65
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-31
-30
-30
-32
-31
-31
-106
-104
-104
-169
-160
-160
-171
-162
-162
-171
-162
-162
-170
-161
-161
-70
-66
-66
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-74
-70
-70
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-163
-154
-154
-98
-96
-96
-13
-13
-13
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-49
-49
-49
-145
-140
-140
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-74
-70
-70
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-223
-223
-223
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-58
-57
-57
-210
-210
-210
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-158
-158
-158
-255
-255
-255
-255
-255
-255
-255
-255
-255
-243
-243
-243
-118
-118
-118
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-210
-210
-210
-98
-96
-96
-93
-93
-93
-93
-93
-93
-93
-93
-93
-93
-93
-93
-93
-93
-93
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-126
-126
-126
-221
-221
-221
-255
-255
-255
-255
-255
-255
-255
-255
-255
-218
-218
-218
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-158
-158
-158
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-163
-154
-154
-158
-151
-151
-158
-151
-151
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-74
-73
-73
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-59
-59
-59
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-112
-108
-108
-22
-21
-21
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-6
-6
-81
-76
-76
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-102
-100
-100
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-241
-241
-241
-255
-255
-255
-255
-255
-255
-255
-255
-255
-218
-218
-218
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-196
-196
-196
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-133
-133
-133
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-138
-134
-134
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-95
-95
-95
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-246
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-247
-248
-248
-248
-248
-248
-248
-248
-248
-248
-248
-248
-248
-249
-249
-249
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-226
-226
-226
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-151
-151
-151
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-81
-76
-76
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-47
-47
-47
-138
-134
-134
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-122
-119
-119
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-127
-120
-120
-33
-32
-32
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-188
-188
-188
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-119
-119
-119
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-112
-108
-108
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-10
-11
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-81
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-28
-28
-127
-120
-120
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-143
-143
-143
-47
-47
-47
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-27
-26
-26
-133
-129
-129
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-117
-112
-112
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-253
-253
-253
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-33
-32
-32
-186
-186
-186
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-148
-148
-148
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-117
-117
-117
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-249
-249
-249
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-243
-219
-219
-219
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-11
-10
-11
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-112
-108
-108
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-102
-100
-100
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-15
-15
-133
-129
-129
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-145
-140
-140
-56
-54
-54
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-112
-108
-108
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-89
-86
-86
-11
-10
-11
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-215
-215
-215
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-192
-192
-192
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-17
-16
-16
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-126
-126
-126
-255
-255
-255
-255
-255
-255
-255
-255
-255
-251
-251
-251
-143
-143
-143
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-113
-113
-113
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-117
-117
-117
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-116
-106
-104
-104
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-145
-140
-140
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-98
-96
-96
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-74
-70
-70
-7
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-82
-79
-79
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-59
-59
-59
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-47
-47
-47
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-227
-227
-227
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-139
-139
-139
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-128
-128
-128
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-95
-95
-95
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-165
-165
-165
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-145
-140
-140
-170
-161
-161
-171
-162
-162
-171
-162
-162
-154
-146
-146
-46
-44
-44
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-83
-83
-83
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-83
-83
-83
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-49
-49
-143
-143
-143
-171
-162
-162
-171
-162
-162
-171
-162
-162
-163
-154
-154
-154
-146
-146
-168
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-140
-136
-136
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-217
-217
-217
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-63
-63
-63
-217
-217
-217
-255
-255
-255
-255
-255
-255
-255
-255
-255
-209
-209
-209
-35
-35
-35
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-63
-63
-63
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-173
-173
-173
-255
-255
-255
-255
-255
-255
-255
-255
-255
-241
-241
-241
-113
-113
-113
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-70
-69
-69
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-194
-194
-194
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-122
-119
-119
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-5
-5
-5
-65
-65
-65
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-117
-112
-112
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-133
-129
-129
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-117
-112
-112
-60
-56
-56
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-106
-104
-104
-11
-10
-11
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-178
-178
-178
-255
-255
-255
-255
-255
-255
-255
-255
-255
-242
-242
-242
-113
-113
-113
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-95
-95
-95
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-175
-175
-175
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-116
-116
-116
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-219
-219
-219
-255
-255
-255
-255
-255
-255
-255
-255
-255
-230
-230
-230
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-30
-30
-30
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-221
-221
-221
-47
-47
-47
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-82
-79
-79
-170
-161
-161
-171
-162
-162
-171
-162
-162
-170
-161
-161
-106
-104
-104
-11
-10
-11
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-59
-59
-59
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-168
-160
-160
-117
-112
-112
-19
-19
-20
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-106
-104
-104
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-33
-32
-32
-0
-0
-0
-47
-47
-47
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-163
-154
-154
-89
-86
-86
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-128
-128
-128
-254
-254
-254
-255
-255
-255
-255
-255
-255
-252
-252
-252
-158
-158
-158
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-139
-139
-139
-253
-253
-253
-255
-255
-255
-255
-255
-255
-253
-253
-253
-140
-136
-136
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-171
-171
-171
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-215
-215
-215
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-209
-209
-209
-255
-255
-255
-255
-255
-255
-255
-255
-255
-237
-237
-237
-106
-104
-104
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-43
-41
-41
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-140
-136
-136
-40
-39
-39
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-38
-35
-35
-143
-143
-143
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-127
-120
-120
-38
-35
-35
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-7
-7
-74
-73
-73
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-163
-154
-154
-56
-54
-54
-1
-1
-1
-0
-0
-0
-1
-0
-0
-90
-90
-90
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-145
-140
-140
-60
-56
-56
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-74
-73
-73
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-205
-205
-205
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-38
-38
-38
-204
-204
-204
-255
-255
-255
-255
-255
-255
-255
-255
-255
-239
-239
-239
-95
-95
-95
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-49
-49
-49
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-122
-119
-119
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-139
-139
-139
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-169
-169
-169
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-127
-120
-120
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-90
-90
-90
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-31
-30
-30
-127
-120
-120
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-145
-140
-140
-47
-47
-47
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-47
-47
-47
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-168
-160
-160
-98
-96
-96
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-117
-112
-112
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-133
-129
-129
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-202
-202
-202
-255
-255
-255
-255
-255
-255
-255
-255
-255
-245
-245
-245
-119
-119
-119
-9
-9
-9
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-108
-108
-108
-248
-248
-248
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-244
-244
-244
-128
-128
-128
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-35
-35
-35
-200
-200
-200
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-113
-113
-113
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-63
-63
-63
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-89
-86
-86
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-74
-70
-70
-163
-154
-154
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-112
-108
-108
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-56
-54
-54
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-122
-119
-119
-169
-160
-160
-171
-162
-162
-171
-162
-162
-169
-160
-160
-122
-119
-119
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-43
-41
-41
-138
-134
-134
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-112
-108
-108
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-117
-117
-117
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-228
-228
-228
-74
-73
-73
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-47
-47
-47
-237
-237
-237
-255
-255
-255
-255
-255
-255
-255
-255
-255
-247
-247
-247
-138
-134
-134
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-217
-217
-217
-74
-73
-73
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-143
-143
-143
-247
-247
-247
-255
-255
-255
-255
-255
-255
-255
-255
-255
-233
-233
-233
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-16
-18
-19
-151
-151
-151
-250
-250
-250
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-70
-69
-69
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-8
-8
-8
-19
-19
-20
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-112
-108
-108
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-53
-53
-53
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-9
-9
-9
-35
-33
-33
-74
-73
-73
-38
-38
-38
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-17
-16
-16
-105
-100
-100
-167
-158
-158
-170
-161
-161
-171
-162
-162
-171
-162
-162
-158
-151
-151
-74
-73
-73
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-106
-104
-104
-170
-161
-161
-171
-162
-162
-171
-162
-162
-170
-161
-161
-138
-134
-134
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-59
-59
-59
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-81
-76
-76
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-49
-49
-49
-196
-196
-196
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-204
-204
-204
-53
-53
-53
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-53
-53
-53
-186
-186
-186
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-210
-210
-210
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-186
-186
-186
-56
-54
-54
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-108
-108
-108
-227
-227
-227
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-138
-134
-134
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-65
-65
-65
-209
-209
-209
-254
-254
-254
-255
-255
-255
-255
-255
-255
-254
-254
-254
-207
-207
-207
-70
-69
-69
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-47
-47
-47
-117
-117
-117
-128
-128
-128
-25
-24
-24
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-46
-44
-44
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-154
-146
-146
-89
-86
-86
-38
-38
-38
-9
-9
-9
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-9
-9
-9
-27
-26
-26
-56
-54
-54
-90
-90
-90
-145
-140
-140
-154
-146
-146
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-81
-76
-76
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-158
-151
-151
-89
-86
-86
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-66
-62
-62
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-65
-65
-65
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-6
-6
-83
-83
-83
-169
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-143
-143
-143
-53
-53
-53
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-6
-6
-6
-106
-104
-104
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-95
-95
-95
-23
-22
-22
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-19
-19
-20
-93
-93
-93
-194
-194
-194
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-106
-104
-104
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-223
-223
-223
-255
-255
-255
-251
-251
-251
-196
-196
-196
-76
-76
-76
-13
-13
-13
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-32
-31
-31
-138
-134
-134
-228
-228
-228
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-196
-196
-196
-42
-42
-42
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-108
-108
-108
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-214
-214
-214
-133
-133
-133
-53
-53
-53
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-8
-8
-8
-35
-35
-35
-89
-86
-86
-143
-143
-143
-198
-198
-198
-247
-247
-247
-180
-180
-180
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-56
-54
-54
-158
-151
-151
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-138
-134
-134
-105
-100
-100
-74
-70
-70
-49
-49
-49
-40
-39
-39
-35
-33
-33
-38
-35
-35
-46
-44
-44
-59
-59
-59
-81
-76
-76
-106
-104
-104
-133
-129
-129
-154
-146
-146
-169
-160
-160
-171
-162
-162
-154
-146
-146
-53
-53
-53
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-133
-129
-129
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-95
-95
-95
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-74
-70
-70
-70
-69
-69
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-43
-41
-41
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-95
-95
-95
-11
-10
-11
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-127
-120
-120
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-127
-120
-120
-32
-31
-31
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-143
-143
-143
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-234
-234
-234
-192
-192
-192
-133
-133
-133
-83
-83
-83
-74
-73
-73
-83
-83
-83
-126
-126
-126
-190
-190
-190
-233
-233
-233
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-169
-169
-169
-12
-12
-12
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-108
-108
-108
-245
-245
-245
-255
-255
-255
-254
-254
-254
-228
-228
-228
-180
-180
-180
-122
-119
-119
-83
-83
-83
-74
-73
-73
-95
-95
-95
-143
-143
-143
-204
-204
-204
-245
-245
-245
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-227
-227
-227
-90
-90
-90
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-15
-15
-15
-128
-128
-128
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-245
-245
-245
-221
-221
-221
-180
-180
-180
-126
-126
-126
-93
-93
-93
-76
-76
-76
-74
-73
-73
-83
-83
-83
-106
-104
-104
-140
-136
-136
-175
-175
-175
-214
-214
-214
-233
-233
-233
-249
-249
-249
-255
-255
-255
-255
-255
-255
-180
-180
-180
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-66
-62
-62
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-171
-162
-162
-169
-160
-160
-158
-151
-151
-154
-146
-146
-143
-143
-143
-145
-140
-140
-143
-143
-143
-154
-146
-146
-158
-151
-151
-163
-154
-154
-169
-160
-160
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-154
-146
-146
-53
-53
-53
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-140
-136
-136
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-163
-154
-154
-154
-146
-146
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-117
-112
-112
-168
-160
-160
-171
-162
-162
-171
-162
-162
-171
-162
-162
-138
-134
-134
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-145
-140
-140
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-102
-100
-100
-13
-13
-13
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-157
-157
-157
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-240
-240
-240
-151
-151
-151
-23
-22
-22
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-13
-13
-13
-126
-126
-126
-239
-239
-239
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-222
-222
-222
-95
-95
-95
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-113
-113
-113
-226
-226
-226
-252
-252
-252
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-180
-180
-180
-27
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-38
-35
-35
-117
-112
-112
-158
-151
-151
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-170
-161
-161
-163
-154
-154
-133
-129
-129
-43
-41
-41
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-140
-136
-136
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-95
-95
-95
-167
-158
-158
-171
-162
-162
-171
-162
-162
-171
-162
-162
-145
-140
-140
-40
-39
-39
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-63
-60
-60
-154
-146
-146
-171
-162
-162
-171
-162
-162
-171
-162
-162
-167
-158
-158
-82
-79
-79
-3
-3
-3
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-118
-118
-118
-210
-210
-210
-249
-249
-249
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-253
-253
-253
-214
-214
-214
-122
-119
-119
-26
-26
-26
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-25
-24
-24
-128
-128
-128
-224
-224
-224
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-210
-210
-210
-90
-90
-90
-7
-7
-7
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-9
-9
-9
-79
-79
-79
-175
-175
-175
-235
-235
-235
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-248
-248
-248
-214
-214
-214
-128
-128
-128
-16
-18
-19
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-118
-118
-118
-243
-243
-243
-255
-255
-255
-255
-255
-255
-255
-255
-255
-150
-150
-150
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-169
-169
-169
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-79
-79
-79
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-63
-60
-60
-117
-112
-112
-145
-140
-140
-167
-158
-158
-170
-161
-161
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-171
-162
-162
-169
-160
-160
-158
-151
-151
-140
-136
-136
-117
-112
-112
-81
-76
-76
-35
-35
-35
-5
-5
-5
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-138
-134
-134
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-168
-160
-160
-163
-154
-154
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-66
-62
-62
-154
-146
-146
-168
-160
-160
-168
-160
-160
-168
-160
-160
-154
-146
-146
-74
-70
-70
-6
-6
-6
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-12
-12
-12
-90
-90
-90
-158
-151
-151
-168
-160
-160
-168
-160
-160
-168
-160
-160
-158
-151
-151
-43
-41
-41
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-10
-10
-10
-63
-60
-60
-140
-136
-136
-217
-217
-217
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-250
-250
-250
-218
-218
-218
-151
-151
-151
-63
-63
-63
-10
-10
-10
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-15
-15
-15
-82
-79
-79
-180
-180
-180
-240
-240
-240
-254
-254
-254
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-224
-224
-224
-148
-148
-148
-63
-63
-63
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-32
-31
-31
-93
-93
-93
-173
-173
-173
-227
-227
-227
-251
-251
-251
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-255
-254
-254
-254
-247
-247
-247
-215
-215
-215
-169
-169
-169
-117
-117
-117
-63
-63
-63
-22
-21
-21
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-116
-116
-116
-239
-239
-239
-250
-250
-250
-250
-250
-250
-250
-250
-250
-148
-148
-148
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-13
-13
-13
-165
-165
-165
-250
-250
-250
-250
-250
-250
-250
-250
-250
-250
-250
-250
-76
-76
-76
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-19
-19
-20
-46
-44
-44
-74
-70
-70
-98
-96
-96
-117
-112
-112
-133
-129
-129
-140
-136
-136
-140
-136
-136
-138
-134
-134
-133
-129
-129
-117
-112
-112
-105
-100
-100
-81
-76
-76
-60
-56
-56
-38
-35
-35
-17
-16
-16
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-53
-53
-53
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-63
-60
-60
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-53
-53
-53
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-22
-21
-21
-60
-56
-56
-66
-62
-62
-66
-62
-62
-66
-62
-62
-66
-62
-62
-35
-33
-33
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-1
-13
-13
-13
-42
-42
-42
-83
-83
-83
-133
-133
-133
-169
-169
-169
-194
-194
-194
-200
-200
-200
-194
-194
-194
-175
-175
-175
-133
-133
-133
-83
-83
-83
-42
-42
-42
-17
-16
-16
-1
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-27
-26
-26
-63
-63
-63
-117
-117
-117
-165
-165
-165
-192
-192
-192
-200
-200
-200
-188
-188
-188
-158
-158
-158
-102
-100
-100
-47
-47
-47
-17
-16
-16
-2
-2
-2
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-4
-4
-4
-23
-22
-22
-47
-47
-47
-83
-83
-83
-133
-133
-133
-169
-169
-169
-190
-190
-190
-200
-200
-200
-200
-200
-200
-190
-190
-190
-171
-171
-171
-143
-143
-143
-108
-108
-108
-63
-63
-63
-38
-38
-38
-23
-22
-22
-8
-8
-8
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-23
-22
-22
-47
-47
-47
-49
-49
-49
-49
-49
-49
-49
-49
-49
-30
-28
-28
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-2
-2
-2
-33
-32
-32
-49
-49
-49
-49
-49
-49
-49
-49
-49
-49
-49
-49
-15
-15
-15
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-3
-3
-3
-10
-10
-10
-16
-18
-19
-22
-21
-21
-25
-24
-24
-25
-24
-24
-25
-24
-24
-22
-21
-21
-17
-16
-16
-12
-12
-12
-4
-4
-4
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-42
-42
-42
-218
-218
-218
-255
-255
-255
-255
-255
-255
-255
-255
-255
-252
-252
-252
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
diff --git a/packages/linux/linux-ezx_2.6.21.bb b/packages/linux/linux-ezx_2.6.21.bb
deleted file mode 100644
index 150a4a153c..0000000000
--- a/packages/linux/linux-ezx_2.6.21.bb
+++ /dev/null
@@ -1,116 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
-AUTHOR = "The OpenEZX Team <openezx-devel@lists.openezx.org>"
-HOMEPAGE = "http://www.openezx.org"
-EZX = "ezxdev"
-PR = "${EZX}-r24"
-
-require linux.inc
-
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-
-CFLAGS += "-DPATH_MAX=256"
-
-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 \
- ${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}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
- ${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 \
- 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-pcap.patch;patch=1 \
- file://patches/e680-pcap.patch;patch=1 \
- file://patches/a1200-pcap.patch;patch=1 \
- file://patches/e6-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/e6-mci.patch;patch=1 \
- file://patches/pxa27x-udc-support.2.patch;patch=1 \
- file://patches/ezx-emu.patch;patch=1 \
- file://patches/ezx-eoc.patch;patch=1 \
- file://patches/a1200-eoc.patch;patch=1 \
- file://patches/e6-eoc.patch;patch=1 \
- file://patches/a780-emu.patch;patch=1 \
- file://patches/e680-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/a1200-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/e6-ts.patch;patch=1 \
- file://patches/a780-flip.patch;patch=1 \
- file://patches/e680-locksw.patch;patch=1 \
- file://patches/a1200-flip.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/asoc-pxa-ssp.patch;patch=1 \
- file://patches/asoc-fix-loopback.patch;patch=1 \
- file://patches/ezx-asoc.patch;patch=1 \
- file://patches/mtdfix.patch;patch=1 \
- file://patches/ezx-backlight.patch;patch=1 \
- file://defconfig \
- \
- "
-
-S = "${WORKDIR}/linux-${PV}"
-
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-# But we can flash it from userspace (flash_unlock /dev/mtdX && flash_eraseall /dev/mtdX && flashcp /boot/zImage /dev/mtdX)
-# so lets make a package of it. What about a postinst that flashes the new kernel?
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(a780|e680|a1200|rorkre2|rokre6)'
-
-# For now the code for serial console is disabled in compress.c
-#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 "
-CMDLINE_CON = "console=tty1 "
-
-CMDLINE_ROOT = "root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1"
-CMDLINE_NFSROOT = "root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.200:/export/ezx-image rootdelay=1 "
-# Uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0"
-CMDLINE_MEM = "mem=32M@0xA0000000 mem=16M@0xAC000000"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-# Uncomment to use root-over-nfs-over-usb
-#CMDLINE_NFSROOT_USB = "${CMDLINE_CON} ${CMDLINE_NFSROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-
-# 1024x1024 once was the maximum kernel size for boot-over-usb -- is it still?
-#KERNEL_IMAGE_MAXSIZE = "1294336"
-
-###############################################################
-# module configs specific to this kernel
-#
-#module_autoload_pxaficp_ir = "pxaficp_ir"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
diff --git a/packages/linux/linux-ezx_2.6.23.bb b/packages/linux/linux-ezx_2.6.23.bb
deleted file mode 100644
index 42624dd5a8..0000000000
--- a/packages/linux/linux-ezx_2.6.23.bb
+++ /dev/null
@@ -1,112 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
-AUTHOR = "The OpenEZX Team <openezx-devel@lists.openezx.org>"
-HOMEPAGE = "http://www.openezx.org"
-EZX = "ezxdev"
-PR = "${EZX}-r2"
-
-# unstable branch, use 2.6.21 if you want something working
-DEFAULT_PREFERENCE = "-99"
-DEFAULT_PREFERENCE_a780 = "99"
-
-
-# last sync: svn revision 2068
-
-require linux.inc
-
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-
-SRC_URI = " \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://logo_linux_clut224.ppm \
- \
- file://patches/binutils-buildid-arm.patch;patch=1 \
- file://patches/patch-2.6.23.1;patch=1 \
- file://patches/pxa27x_overlay-r7.patch;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-pcap.patch;patch=1 \
- file://patches/e680-pcap.patch;patch=1 \
- file://patches/a1200-pcap.patch;patch=1 \
- file://patches/e6-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/e6-mci.patch;patch=1 \
- file://patches/pxa27x-udc-support.3.patch;patch=1 \
- file://patches/ezx-emu.patch;patch=1 \
- file://patches/a780-emu.patch;patch=1 \
- file://patches/e680-emu.patch;patch=1 \
- file://patches/pxa27x-udc-fix-a1200.patch;patch=1 \
- file://patches/ezx-eoc.patch;patch=1 \
- file://patches/a1200-eoc.patch;patch=1 \
- file://patches/e6-eoc.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/a1200-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/e6-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/a1200-flip.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/asoc-pxa-ssp.patch;patch=1 \
- file://patches/asoc-fix-loopback.patch;patch=1 \
- file://patches/ezx-asoc.patch;patch=1 \
- file://defconfig \
- "
-
-S = "${WORKDIR}/linux-${PV}"
-
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-# But we can flash it from userspace (flash_unlock /dev/mtdX && flash_eraseall /dev/mtdX && flashcp /boot/zImage /dev/mtdX)
-# so lets make a package of it. What about a postinst that flashes the new kernel?
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(a780|e680|a1200|rorkre2|rokre6)'
-
-# For now the code for serial console is disabled in compress.c
-#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 "
-CMDLINE_CON = "console=tty1 "
-
-CMDLINE_ROOT = "root=/dev/mmcblk0p2 rootfstype=ext2 rootwait=1"
-CMDLINE_NFSROOT = "root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.200:/export/ezx-image rootdelay=1 "
-# Uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0"
-CMDLINE_MEM = "mem=32M@0xA0000000 mem=16M@0xAC000000"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-# Uncomment to use root-over-nfs-over-usb
-#CMDLINE_NFSROOT_USB = "${CMDLINE_CON} ${CMDLINE_NFSROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-
-# 1024x1024 once was the maximum kernel size for boot-over-usb -- is it still?
-#KERNEL_IMAGE_MAXSIZE = "1294336"
-
-###############################################################
-# module configs specific to this kernel
-#
-#module_autoload_pxaficp_ir = "pxaficp_ir"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
diff --git a/packages/linux/linux-ezx_2.6.24.bb b/packages/linux/linux-ezx_2.6.24.bb
deleted file mode 100644
index 093ee1e94a..0000000000
--- a/packages/linux/linux-ezx_2.6.24.bb
+++ /dev/null
@@ -1,111 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
-AUTHOR = "The OpenEZX Team <openezx-devel@lists.openezx.org>"
-HOMEPAGE = "http://www.openezx.org"
-EZX = "ezxdev"
-PR = "${EZX}-r0"
-
-# unstable branch, use 2.6.21 if you want something working
-DEFAULT_PREFERENCE = "-99"
-DEFAULT_PREFERENCE_a780 = "99"
-
-
-# last sync: svn revision XXX
-
-require linux.inc
-
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-
-SRC_URI = " \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://logo_linux_clut224.ppm \
- \
- file://patches/binutils-buildid-arm.patch;patch=1 \
- file://patches/pxa27x_overlay-r8.patch;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-pcap.patch;patch=1 \
- file://patches/e680-pcap.patch;patch=1 \
- file://patches/a1200-pcap.patch;patch=1 \
- file://patches/e6-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/e6-mci.patch;patch=1 \
- file://patches/pxa27x-udc-support.3.patch;patch=1 \
- file://patches/ezx-emu.patch;patch=1 \
- file://patches/a780-emu.patch;patch=1 \
- file://patches/e680-emu.patch;patch=1 \
- file://patches/pxa27x-udc-fix-a1200.patch;patch=1 \
- file://patches/ezx-eoc.patch;patch=1 \
- file://patches/a1200-eoc.patch;patch=1 \
- file://patches/e6-eoc.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/a1200-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/e6-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/a1200-flip.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/asoc-pxa-ssp.patch;patch=1 \
- file://patches/asoc-fix-loopback.patch;patch=1 \
- file://patches/ezx-asoc.patch;patch=1 \
- file://defconfig \
- "
-
-S = "${WORKDIR}/linux-${PV}"
-
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-# But we can flash it from userspace (flash_unlock /dev/mtdX && flash_eraseall /dev/mtdX && flashcp /boot/zImage /dev/mtdX)
-# so lets make a package of it. What about a postinst that flashes the new kernel?
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(a780|e680|a1200|rorkre2|rokre6)'
-
-# For now the code for serial console is disabled in compress.c
-#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 "
-CMDLINE_CON = "console=tty1 "
-
-CMDLINE_ROOT = "root=/dev/mmcblk0p2 rootfstype=ext2 rootwait=1"
-CMDLINE_NFSROOT = "root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.200:/export/ezx-image rootdelay=1 "
-# Uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0"
-CMDLINE_MEM = "mem=32M@0xA0000000 mem=16M@0xAC000000"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-# Uncomment to use root-over-nfs-over-usb
-#CMDLINE_NFSROOT_USB = "${CMDLINE_CON} ${CMDLINE_NFSROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-
-# 1024x1024 once was the maximum kernel size for boot-over-usb -- is it still?
-#KERNEL_IMAGE_MAXSIZE = "1294336"
-
-###############################################################
-# module configs specific to this kernel
-#
-#module_autoload_pxaficp_ir = "pxaficp_ir"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig
index 22e9cb3c93..b3f1a4cbf0 100644
--- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig
@@ -1530,7 +1530,7 @@ CONFIG_RTC_DRV_SA1100=y
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=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig
index d65aaff1bb..5d3f16ee19 100644
--- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig
@@ -1550,7 +1550,7 @@ CONFIG_RTC_DRV_SA1100=y
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=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb
index 0742e23e58..f6bb17302d 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb
@@ -1,7 +1,7 @@
SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
LICENSE = "GPL"
-PR = "r24"
+PR = "r25"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/linux/linux-linkstationppc/defconfig b/packages/linux/linux-linkstationppc/defconfig
index 5f0dd18e8d..4d700a2882 100644
--- a/packages/linux/linux-linkstationppc/defconfig
+++ b/packages/linux/linux-linkstationppc/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.27.9
-# Sun Dec 14 21:26:49 2008
+# Linux kernel version: 2.6.27.10
+# Wed Feb 11 00:10:13 2009
#
# CONFIG_PPC64 is not set
@@ -1158,14 +1158,99 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia core support
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
+CONFIG_VIDEO_MEDIA=m
#
# Multimedia drivers
#
-# CONFIG_DAB is not set
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_BT848 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_STRADIS is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_MXB is not set
+# CONFIG_VIDEO_DPC 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_IVTV is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=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
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_USB_S2255=m
+# CONFIG_SOC_CAMERA is not set
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
+# CONFIG_USB_SI470X is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
#
# Graphics support
diff --git a/packages/linux/linux-linkstationppc/fw-and-powerpc-install.patch b/packages/linux/linux-linkstationppc/fw-and-powerpc-install.patch
new file mode 100644
index 0000000000..9f1eda7ef5
--- /dev/null
+++ b/packages/linux/linux-linkstationppc/fw-and-powerpc-install.patch
@@ -0,0 +1,36 @@
+diff -urN linux-2.6.27.7.old//arch/powerpc/boot/Makefile linux-2.6.27.7//arch/powerpc/boot/Makefile
+--- linux-2.6.27.7.old//arch/powerpc/boot/Makefile 2008-11-20 23:02:37.000000000 +0000
++++ linux-2.6.27.7//arch/powerpc/boot/Makefile 2008-11-22 21:02:13.456791583 +0000
+@@ -376,16 +376,16 @@
+ cmd_mkdir = mkdir -p $@
+
+ quiet_cmd_install = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_OBJDIR)/%,%,$@)
+- cmd_install = $(INSTALL) -m0644 $(patsubst $(DESTDIR)$(WRAPPER_OBJDIR)/%,$(obj)/%,$@) $@
++ cmd_install = $(INSTALL) -m 0644 $(patsubst $(DESTDIR)$(WRAPPER_OBJDIR)/%,$(obj)/%,$@) $@
+
+ quiet_cmd_install_dts = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_DTSDIR)/%,dts/%,$@)
+- cmd_install_dts = $(INSTALL) -m0644 $(patsubst $(DESTDIR)$(WRAPPER_DTSDIR)/%,$(srctree)/$(obj)/dts/%,$@) $@
++ cmd_install_dts = $(INSTALL) -m 0644 $(patsubst $(DESTDIR)$(WRAPPER_DTSDIR)/%,$(srctree)/$(obj)/dts/%,$@) $@
+
+ quiet_cmd_install_exe = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,%,$@)
+- cmd_install_exe = $(INSTALL) -m0755 $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,$(obj)/%,$@) $@
++ cmd_install_exe = $(INSTALL) -m 0755 $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,$(obj)/%,$@) $@
+
+ quiet_cmd_install_wrapper = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,%,$@)
+- cmd_install_wrapper = $(INSTALL) -m0755 $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,$(srctree)/$(obj)/%,$@) $@ ;\
++ cmd_install_wrapper = $(INSTALL) -m 0755 $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,$(srctree)/$(obj)/%,$@) $@ ;\
+ sed -i $@ -e 's%^object=.*%object=$(WRAPPER_OBJDIR)%' \
+ -e 's%^objbin=.*%objbin=$(WRAPPER_BINDIR)%' \
+
+diff -urN linux-2.6.27.7.old//scripts/Makefile.fwinst linux-2.6.27.7//scripts/Makefile.fwinst
+--- linux-2.6.27.7.old//scripts/Makefile.fwinst 2008-11-20 23:02:37.000000000 +0000
++++ linux-2.6.27.7//scripts/Makefile.fwinst 2008-11-22 21:01:50.870504646 +0000
+@@ -37,7 +37,7 @@
+ @true
+
+ quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@)
+- cmd_install = $(INSTALL) -m0644 $< $@
++ cmd_install = $(INSTALL) -m 0644 $< $@
+
+ $(installed-fw-dirs):
+ $(call cmd,mkdir)
diff --git a/packages/linux/linux-linkstationppc_2.6.27.10.bb b/packages/linux/linux-linkstationppc_2.6.27.10.bb
deleted file mode 100644
index 2f6308cd27..0000000000
--- a/packages/linux/linux-linkstationppc_2.6.27.10.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "Linux Kernel for the Buffalo Linkstation HD/HG"
-SECTION = "kernel"
-LICENSE = "GPL"
-PR = "r3"
-
-DEPENDS = "dtc-native u-boot-mkimage-native"
-COMPATIBLE_MACHINE = "(lsppchd|lsppchg)"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.27.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.gz;patch=1 \
- file://defconfig \
- "
-S = "${WORKDIR}/linux-2.6.27"
-
-require linux.inc
-
-export ARCH="powerpc"
-
-do_configure() {
- install -m 0644 ${WORKDIR}/defconfig ${S}/.config
- ARCH=${ARCH} oe_runmake oldconfig
-}
diff --git a/packages/linux/linux-linkstationppc_2.6.28.4.bb b/packages/linux/linux-linkstationppc_2.6.28.4.bb
new file mode 100644
index 0000000000..3c15d78e42
--- /dev/null
+++ b/packages/linux/linux-linkstationppc_2.6.28.4.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Linux Kernel for the Buffalo Linkstation HD/HG"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r0"
+
+DEPENDS = "dtc-native u-boot-mkimage-native"
+COMPATIBLE_MACHINE = "(lsppchd|lsppchg)"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.gz;patch=1 \
+ file://fw-and-powerpc-install.patch;patch=1 \
+ file://defconfig \
+ "
+S = "${WORKDIR}/linux-2.6.28"
+
+require linux.inc
+
+export ARCH="powerpc"
+
+do_configure() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ ARCH=${ARCH} oe_runmake oldconfig
+}
diff --git a/packages/linux/linux-msm7xxxx/htcblackstone/defconfig b/packages/linux/linux-msm7xxxx/htcblackstone/defconfig
new file mode 100644
index 0000000000..81e8cf9a74
--- /dev/null
+++ b/packages/linux/linux-msm7xxxx/htcblackstone/defconfig
@@ -0,0 +1,1139 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.27
+# Sun Mar 8 15:57:38 2009
+#
+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_HAVE_LATENCYTOP_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_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+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_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=17
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_PANIC_TIMEOUT=3
+# 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_COMPAT_BRK=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_ASHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+# CONFIG_HAVE_CLK is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+CONFIG_CLASSIC_RCU=y
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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_MSM=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+CONFIG_MSM_AMSS_VERSION=7000
+# CONFIG_MSM_AMSS_VERSION_6210 is not set
+# CONFIG_MSM_AMSS_VERSION_6220 is not set
+# CONFIG_MSM_AMSS_VERSION_6225 is not set
+CONFIG_MSM_AMSS_VERSION_WINCE=y
+CONFIG_MSM_DEBUG_UART_NONE=y
+# CONFIG_MSM_DEBUG_UART1 is not set
+# CONFIG_MSM_DEBUG_UART2 is not set
+# CONFIG_MSM_DEBUG_UART3 is not set
+
+#
+# MSM Board Type
+#
+# CONFIG_MACH_HALIBUT is not set
+# CONFIG_MACH_TROUT is not set
+# CONFIG_MACH_HTCRAPHAEL is not set
+# CONFIG_MACH_HTCRAPHAEL_CDMA is not set
+# CONFIG_MACH_HTCDIAMOND is not set
+# CONFIG_MACH_HTCDIAMOND_CDMA is not set
+CONFIG_MACH_HTCBLACKSTONE=y
+# CONFIG_TROUT_H2W is not set
+CONFIG_TROUT_PWRSINK=y
+CONFIG_MSM7X00A_USE_GP_TIMER=y
+# CONFIG_MSM7X00A_USE_DG_TIMER is not set
+CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND=y
+# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE is not set
+# CONFIG_MSM7X00A_SLEEP_MODE_APPS_SLEEP is not set
+# CONFIG_MSM7X00A_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
+# CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_SLEEP_MODE=0
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE=y
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_APPS_SLEEP is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE=1
+CONFIG_MSM7X00A_IDLE_SLEEP_MIN_TIME=20000000
+CONFIG_MSM7X00A_IDLE_SPIN_TIME=80000
+CONFIG_MSM_IDLE_STATS=y
+CONFIG_MSM_IDLE_STATS_FIRST_BUCKET=62500
+CONFIG_MSM_IDLE_STATS_BUCKET_SHIFT=2
+CONFIG_MSM_IDLE_STATS_BUCKET_COUNT=10
+CONFIG_MSM_FIQ_SUPPORT=y
+# CONFIG_MSM_SERIAL_DEBUGGER is not set
+CONFIG_MSM_SMD=y
+# CONFIG_MSM_SMD_7500 is not set
+# CONFIG_MSM_ONCRPCROUTER is not set
+CONFIG_MSM_CPU_FREQ=y
+# CONFIG_MSM_CPU_FREQ_ONDEMAND is not set
+CONFIG_MSM_CPU_FREQ_SCREEN=y
+CONFIG_MSM_CPU_FREQ_SCREEN_OFF=245760
+CONFIG_MSM_CPU_FREQ_SCREEN_ON=384000
+CONFIG_MSM_HW3D=y
+# CONFIG_MSM_ADSP is not set
+# CONFIG_HTC_FB_CONSOLE is not set
+# CONFIG_WIFI_CONTROL_FUNC 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_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_V6=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V6=y
+CONFIG_CPU_HAS_ASID=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_BPREDICT_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=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_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=76M console=ttyMSM2,115200n8"
+# 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_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_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HAS_WAKELOCK=y
+CONFIG_HAS_EARLYSUSPEND=y
+CONFIG_WAKELOCK=y
+# CONFIG_WAKELOCK_STAT is not set
+CONFIG_USER_WAKELOCK=y
+CONFIG_EARLYSUSPEND=y
+# CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROL is not set
+CONFIG_CONSOLE_EARLYSUSPEND=y
+# CONFIG_FB_EARLYSUSPEND is not set
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+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 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_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+CONFIG_ANDROID_PARANOID_NETWORK=y
+# 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
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_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
+CONFIG_MISC_DEVICES=y
+CONFIG_ANDROID_PMEM=y
+CONFIG_TIMED_OUTPUT=y
+CONFIG_TIMED_GPIO=y
+CONFIG_BINDER_IPC=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_KERNEL_DEBUGGER_CORE=y
+CONFIG_LOW_MEMORY_KILLER=y
+CONFIG_LOGGER=y
+# CONFIG_UID_STAT is not set
+# CONFIG_ANDROID_RAM_CONSOLE is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_LIBERTAS is not set
+# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_HOSTAP is not set
+# 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_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_NETCONSOLE is not set
+CONFIG_MSM_RMNET=y
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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 is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_KEYRESET 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_MICROP_KEYPAD=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELAN_I2C_8232 is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI=y
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+CONFIG_TOUCHSCREEN_MSM=y
+CONFIG_MSM_VIRTUAL_KEYBOARD=y
+CONFIG_MSM_BLACKSTONE_PAD=y
+CONFIG_INPUT_MISC=y
+# 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
+CONFIG_INPUT_GPIO=y
+# CONFIG_INPUT_KEYCHORD is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_DEVMEM is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_MSM=y
+CONFIG_SERIAL_MSM_CONSOLE=y
+CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
+CONFIG_SERIAL_MSM_RX_WAKEUP=y
+# CONFIG_SERIAL_MSM_HS is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_DCC_TTY is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_MSM=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_AKM8976 is not set
+CONFIG_SENSORS_PCA963X=y
+# CONFIG_SENSORS_MT9T013 is not set
+CONFIG_SENSORS_MICROP_KSC=y
+CONFIG_SENSORS_MICROP_KLT=y
+# 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_SPI is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=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_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_MSM=y
+CONFIG_FB_MSM_REFRESH=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
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# 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
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_LOGO_DIAMRAPH_CLUT224 is not set
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+CONFIG_USB_SUPPORT=y
+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
+
+#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# USB Function Support
+#
+CONFIG_USB_FUNCTION=y
+CONFIG_USB_FUNCTION_MSM_HSUSB=y
+# CONFIG_USB_FUNCTION_NULL is not set
+# CONFIG_USB_FUNCTION_ZERO is not set
+# CONFIG_USB_FUNCTION_LOOPBACK is not set
+CONFIG_USB_FUNCTION_ADB=y
+# CONFIG_USB_FUNCTION_UMS is not set
+CONFIG_USB_FUNCTION_MASS_STORAGE=y
+CONFIG_USB_FUNCTION_DIAG=y
+CONFIG_USB_FUNCTION_ETHER=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+CONFIG_MMC_EMBEDDED_SDIO=y
+# CONFIG_MMC_PARANOID_SD_INIT is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
+CONFIG_MMC_BLOCK_PARANOID_RESUME=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_MSM7X00A=y
+# CONFIG_MMC_MSM7X00A_RESUME_IN_WQ is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+# CONFIG_LEDS_TRIGGER_SLEEP is not set
+CONFIG_SWITCH=y
+CONFIG_SWITCH_GPIO=y
+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 is not set
+# CONFIG_RTC_INTF_PROC is not set
+# CONFIG_RTC_INTF_DEV is not set
+CONFIG_RTC_INTF_ALARM=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_MSM7X00A is not set
+CONFIG_RTC_DRV_MSM7X01A=y
+# CONFIG_DMADEVICES is not set
+
+#
+# Voltage and Current regulators
+#
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO 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_OCFS2_FS is not set
+# CONFIG_DNOTIFY is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA 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=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_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_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+# 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
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+CONFIG_DEBUG_SPINLOCK_SLEEP=y
+# 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_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE 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
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-msm7xxxx/htcdiamond/defconfig b/packages/linux/linux-msm7xxxx/htcdiamond/defconfig
index ab6975290f..64a6044a8d 100644
--- a/packages/linux/linux-msm7xxxx/htcdiamond/defconfig
+++ b/packages/linux/linux-msm7xxxx/htcdiamond/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.25
-# Tue Oct 28 23:36:42 2008
+# Linux kernel version: 2.6.27
+# Wed Feb 25 00:43:45 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -11,7 +11,6 @@ CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_GPIOS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
@@ -25,6 +24,7 @@ CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -92,24 +92,33 @@ CONFIG_SLAB=y
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+# CONFIG_HAVE_CLK is not set
CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
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
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set
# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
#
# IO Schedulers
@@ -129,14 +138,12 @@ CONFIG_CLASSIC_RCU=y
# System Type
#
# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_GOLDFISH 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
@@ -150,10 +157,13 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_ORION is not set
+# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -163,7 +173,7 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_MSM7X00A=y
+CONFIG_ARCH_MSM=y
#
# Boot options
@@ -172,20 +182,27 @@ CONFIG_ARCH_MSM7X00A=y
#
# Power management
#
-CONFIG_MSM_AMSS_VERSION=6225
+CONFIG_MSM_AMSS_VERSION=7000
# CONFIG_MSM_AMSS_VERSION_6210 is not set
# CONFIG_MSM_AMSS_VERSION_6220 is not set
-CONFIG_MSM_AMSS_VERSION_6225=y
+# CONFIG_MSM_AMSS_VERSION_6225 is not set
+CONFIG_MSM_AMSS_VERSION_WINCE=y
+CONFIG_MSM_DEBUG_UART_NONE=y
+# CONFIG_MSM_DEBUG_UART1 is not set
+# CONFIG_MSM_DEBUG_UART2 is not set
+# CONFIG_MSM_DEBUG_UART3 is not set
+
+#
+# MSM Board Type
+#
# CONFIG_MACH_HALIBUT is not set
+# CONFIG_MACH_TROUT is not set
CONFIG_MACH_HTCRAPHAEL=y
+CONFIG_MACH_HTCRAPHAEL_CDMA=y
CONFIG_MACH_HTCDIAMOND=y
-# CONFIG_MACH_TROUT is not set
+CONFIG_MACH_HTCDIAMOND_CDMA=y
+# CONFIG_TROUT_H2W is not set
# CONFIG_TROUT_PWRSINK is not set
-# CONFIG_MSM_LL_DEBUG_UART1 is not set
-# CONFIG_MSM_LL_DEBUG_UART2 is not set
-# CONFIG_MSM_LL_DEBUG_UART3 is not set
-CONFIG_MSM_LL_DEBUG_NONE=y
-CONFIG_MSM7X00A_IDLE=y
CONFIG_MSM7X00A_USE_GP_TIMER=y
# CONFIG_MSM7X00A_USE_DG_TIMER is not set
CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND=y
@@ -207,18 +224,17 @@ CONFIG_MSM_IDLE_STATS_FIRST_BUCKET=62500
CONFIG_MSM_IDLE_STATS_BUCKET_SHIFT=2
CONFIG_MSM_IDLE_STATS_BUCKET_COUNT=10
CONFIG_MSM_FIQ_SUPPORT=y
-CONFIG_MSM_SERIAL_DEBUGGER=y
-# CONFIG_MSM_SERIAL_DEBUGGER_CONSOLE is not set
+# CONFIG_MSM_SERIAL_DEBUGGER is not set
CONFIG_MSM_SMD=y
-CONFIG_MSM_ONCRPCROUTER=y
-CONFIG_MSM_RPCSERVERS=y
+# CONFIG_MSM_ONCRPCROUTER is not set
+# CONFIG_MSM_CPU_FREQ_ONDEMAND is not set
+# CONFIG_MSM_CPU_FREQ_SCREEN is not set
CONFIG_MSM_HW3D=y
-CONFIG_MSM_ADSP=y
-CONFIG_MSM_PERF=y
-# CONFIG_TROUT_H2W is not set
+# CONFIG_MSM_ADSP is not set
CONFIG_HTC_FB_CONSOLE=y
-CONFIG_HTC_FB_CONSOLE_DELAY=y
+# CONFIG_HTC_FB_CONSOLE_DELAY is not set
CONFIG_HTC_FB_CONSOLE_BOOT=y
+# CONFIG_WIFI_CONTROL_FUNC is not set
#
# Processor Type
@@ -228,6 +244,7 @@ CONFIG_CPU_V6=y
# CONFIG_CPU_32v6K is not set
CONFIG_CPU_32v6=y
CONFIG_CPU_ABRT_EV6=y
+CONFIG_CPU_PABRT_NOIFAR=y
CONFIG_CPU_CACHE_V6=y
CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y
@@ -263,6 +280,7 @@ CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -272,6 +290,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_RESOURCES_64BIT=y
CONFIG_ZONE_DMA_FLAG=1
@@ -313,17 +332,17 @@ CONFIG_BINFMT_ELF=y
# Power management options
#
CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
+CONFIG_HAS_WAKELOCK=y
+CONFIG_WAKELOCK=y
+# CONFIG_WAKELOCK_STAT is not set
+CONFIG_USER_WAKELOCK=y
+# CONFIG_EARLYSUSPEND is not set
# CONFIG_APM_EMULATION is not set
CONFIG_ARCH_SUSPEND_POSSIBLE=y
-
-#
-# Networking
-#
CONFIG_NET=y
#
@@ -356,106 +375,10 @@ CONFIG_IP_FIB_HASH=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
-# 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_ANDROID_PARANOID_NETWORK=y
# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-CONFIG_NF_CONNTRACK=y
-CONFIG_NF_CT_ACCT=y
-CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_NETLINK is not set
-CONFIG_NETFILTER_XTABLES=y
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
-CONFIG_NETFILTER_XT_TARGET_MARK=y
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
-CONFIG_NETFILTER_XT_TARGET_NFLOG=y
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-CONFIG_NETFILTER_XT_TARGET_TRACE=y
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
-CONFIG_NETFILTER_XT_MATCH_COMMENT=y
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
-CONFIG_NETFILTER_XT_MATCH_DCCP=y
-CONFIG_NETFILTER_XT_MATCH_DSCP=y
-CONFIG_NETFILTER_XT_MATCH_ESP=y
-CONFIG_NETFILTER_XT_MATCH_HELPER=y
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-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_OWNER is not set
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
-CONFIG_NETFILTER_XT_MATCH_QUOTA=y
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-CONFIG_NETFILTER_XT_MATCH_REALM=y
-CONFIG_NETFILTER_XT_MATCH_SCTP=y
-CONFIG_NETFILTER_XT_MATCH_STATE=y
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
-CONFIG_NETFILTER_XT_MATCH_STRING=y
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
-CONFIG_NETFILTER_XT_MATCH_TIME=y
-CONFIG_NETFILTER_XT_MATCH_U32=y
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_RECENT=y
-CONFIG_IP_NF_MATCH_ECN=y
-CONFIG_IP_NF_MATCH_AH=y
-CONFIG_IP_NF_MATCH_TTL=y
-CONFIG_IP_NF_MATCH_ADDRTYPE=y
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-CONFIG_IP_NF_TARGET_LOG=y
-# CONFIG_IP_NF_TARGET_ULOG is not set
-CONFIG_NF_NAT=y
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-CONFIG_IP_NF_TARGET_NETMAP=y
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_IP_NF_MANGLE is not set
-CONFIG_IP_NF_RAW=y
-# CONFIG_IP_NF_ARPTABLES 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
@@ -471,7 +394,6 @@ CONFIG_IP_NF_RAW=y
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
#
# Network testing
@@ -487,9 +409,14 @@ CONFIG_NET_CLS_ROUTE=y
# Wireless
#
# CONFIG_CFG80211 is not set
-# CONFIG_WIRELESS_EXT is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
@@ -504,6 +431,8 @@ CONFIG_UEVENT_HELPER_PATH=""
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -519,11 +448,19 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
CONFIG_MISC_DEVICES=y
+CONFIG_ANDROID_PMEM=y
+CONFIG_TIMED_OUTPUT=y
+CONFIG_TIMED_GPIO=y
+CONFIG_BINDER_IPC=y
# CONFIG_EEPROM_93CX6 is not set
-CONFIG_LOW_MEMORY_KILLER=y
-CONFIG_KERNEL_DEBUGGER_CORE=y
# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_HAVE_IDE is not set
+CONFIG_KERNEL_DEBUGGER_CORE=y
+CONFIG_LOW_MEMORY_KILLER=y
+CONFIG_LOGGER=y
+# CONFIG_UID_STAT is not set
+# CONFIG_ANDROID_RAM_CONSOLE is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
#
# SCSI device support
@@ -535,7 +472,6 @@ CONFIG_KERNEL_DEBUGGER_CORE=y
# CONFIG_ATA is not set
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
@@ -546,7 +482,7 @@ CONFIG_DUMMY=y
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_AX88796 is not set
-CONFIG_SMC91X=y
+# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
@@ -554,14 +490,16 @@ CONFIG_SMC91X=y
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_B44 is not set
CONFIG_NETDEV_1000=y
-# CONFIG_E1000E_ENABLED is not set
CONFIG_NETDEV_10000=y
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_LIBERTAS is not set
+# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_HOSTAP is not set
# CONFIG_WAN is not set
CONFIG_PPP=y
# CONFIG_PPP_MULTILINK is not set
@@ -598,6 +536,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_KEYRESET is not set
#
# Input Device Drivers
@@ -610,25 +549,27 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set
+CONFIG_KEYBOARD_MICROP_KEYPAD=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELAN_I2C_8232 is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI=y
-# CONFIG_TOUCHSCREEN_ELAN_I2C_8232 is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
CONFIG_TOUCHSCREEN_MSM=y
-CONFIG_MSM_VIRTUAL_KEYBOARD=y
+# CONFIG_MSM_VIRTUAL_KEYBOARD is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
@@ -637,6 +578,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_GPIO=y
+# CONFIG_INPUT_KEYCHORD is not set
#
# Hardware I/O ports
@@ -648,9 +590,12 @@ CONFIG_INPUT_GPIO=y
# Character devices
#
CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_DEVMEM is not set
+CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -667,6 +612,7 @@ CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
CONFIG_SERIAL_MSM_RX_WAKEUP=y
+# CONFIG_SERIAL_MSM_HS is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
@@ -675,61 +621,63 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
-# CONFIG_DEVMEM is not set
-# CONFIG_GOLDFISH_TTY is not set
# CONFIG_DCC_TTY is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
#
-# I2C Algorithms
+# I2C Hardware Bus support
#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
#
-# I2C Hardware Bus support
+# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_GPIO is not set
CONFIG_I2C_MSM=y
# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_SENSORS_AKM8976 is not set
CONFIG_SENSORS_PCA963X=y
# CONFIG_SENSORS_MT9T013 is not set
+CONFIG_SENSORS_MICROP_KSC=y
+CONFIG_SENSORS_MICROP_KLT=y
# 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
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
# CONFIG_HWMON is not set
# CONFIG_WATCHDOG is not set
@@ -742,14 +690,27 @@ CONFIG_SSB_POSSIBLE=y
#
# Multifunction device drivers
#
+# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
#
# Multimedia devices
#
+
+#
+# Multimedia core support
+#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
CONFIG_DAB=y
#
@@ -767,8 +728,10 @@ 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_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
+CONFIG_FB_MSM=y
+CONFIG_FB_MSM_REFRESH=y
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
@@ -779,9 +742,6 @@ CONFIG_FB_TILEBLITTING=y
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_GOLDFISH is not set
-CONFIG_FB_MSM=y
-# CONFIG_FB_MSM_LOGO is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -814,10 +774,6 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set
CONFIG_LOGO_DIAMRAPH_CLUT224=y
-
-#
-# Sound
-#
# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
@@ -830,6 +786,10 @@ CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB is not set
#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
# CONFIG_USB_GADGET is not set
@@ -851,26 +811,32 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
CONFIG_MMC_EMBEDDED_SDIO=y
+# CONFIG_MMC_PARANOID_SD_INIT is not set
#
# MMC/SD Card Drivers
#
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_BLOCK_BOUNCE is not set
+CONFIG_MMC_BLOCK_PARANOID_RESUME=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
#
# MMC/SD Host Controller Drivers
#
+# CONFIG_MMC_SDHCI is not set
CONFIG_MMC_MSM7X00A=y
+# CONFIG_MMC_MSM7X00A_RESUME_IN_WQ is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
#
# LED drivers
#
+# CONFIG_LEDS_PCA9532 is not set
CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_PCA955X is not set
#
# LED Triggers
@@ -878,7 +844,7 @@ CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_LEDS_TRIGGER_SLEEP=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
CONFIG_SWITCH=y
CONFIG_SWITCH_GPIO=y
CONFIG_RTC_LIB=y
@@ -893,6 +859,7 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_INTF_SYSFS is not set
# CONFIG_RTC_INTF_PROC is not set
# CONFIG_RTC_INTF_DEV is not set
+CONFIG_RTC_INTF_ALARM=y
# CONFIG_RTC_DRV_TEST is not set
#
@@ -909,6 +876,7 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
#
# SPI RTC drivers
@@ -929,28 +897,18 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
#
# on-CPU RTC drivers
#
-# CONFIG_RTC_DRV_GOLDFISH is not set
-CONFIG_RTC_DRV_MSM7X00A=y
+# CONFIG_RTC_DRV_MSM7X00A is not set
+CONFIG_RTC_DRV_MSM7X01A=y
+# CONFIG_DMADEVICES is not set
#
-# Android
+# Voltage and Current regulators
#
-CONFIG_ANDROID_BINDER_IPC=y
-CONFIG_ANDROID_PMEM=y
-CONFIG_ANDROID_POWER=y
-CONFIG_ANDROID_POWER_STAT=y
-CONFIG_ANDROID_POWER_ALARM=y
-CONFIG_ANDROID_LOGGER=y
-CONFIG_ANDROID_RAM_CONSOLE=y
-CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION=y
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_DATA_SIZE=128
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_ECC_SIZE=16
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE=8
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_POLYNOMIAL=0x11d
-# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
-CONFIG_ANDROID_TIMED_GPIO=y
-CONFIG_ANDROID_PARANOID_NETWORK=y
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
#
# File systems
@@ -970,7 +928,6 @@ CONFIG_FS_MBCACHE=y
# 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_DNOTIFY is not set
CONFIG_INOTIFY=y
@@ -1020,6 +977,7 @@ CONFIG_TMPFS=y
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
@@ -1087,6 +1045,7 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_FS=y
@@ -1094,9 +1053,12 @@ CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_SCHED_DEBUG=y
CONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
@@ -1112,6 +1074,8 @@ CONFIG_DEBUG_SPINLOCK_SLEEP=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
@@ -1120,7 +1084,17 @@ CONFIG_FRAME_POINTER=y
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
@@ -1139,21 +1113,17 @@ CONFIG_DEBUG_LL=y
# Library routines
#
CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_ENC8=y
-CONFIG_REED_SOLOMON_DEC8=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=y
-CONFIG_TEXTSEARCH_BM=y
-CONFIG_TEXTSEARCH_FSM=y
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-msm7xxxx/htckaiser/defconfig b/packages/linux/linux-msm7xxxx/htckaiser/defconfig
index e48ebea681..eb0979cf79 100644
--- a/packages/linux/linux-msm7xxxx/htckaiser/defconfig
+++ b/packages/linux/linux-msm7xxxx/htckaiser/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Mon Aug 4 08:07:55 2008
+# Linux kernel version: 2.6.25
+# Wed Feb 25 00:39:08 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -12,6 +12,7 @@ CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -21,6 +22,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -39,24 +41,26 @@ CONFIG_SWAP=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_PANIC_TIMEOUT=0
-# CONFIG_EMBEDDED is not set
+CONFIG_EMBEDDED=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
@@ -66,23 +70,37 @@ CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=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_ASHMEM is not set
+CONFIG_ASHMEM=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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 is not set
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -101,6 +119,7 @@ CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
#
# System Type
@@ -130,6 +149,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -148,33 +168,46 @@ CONFIG_ARCH_MSM7X00A=y
#
# Power management
#
-
-#
-# MSM7X00A Board Type
-#
+CONFIG_MSM_AMSS_VERSION=6210
+CONFIG_MSM_AMSS_VERSION_6210=y
+# CONFIG_MSM_AMSS_VERSION_6220 is not set
+# CONFIG_MSM_AMSS_VERSION_6225 is not set
# CONFIG_MACH_HALIBUT is not set
-CONFIG_MSM7X00=y
-# CONFIG_MACH_HTCVOGUE is not set
+CONFIG_MACH_HTCVOGUE=y
CONFIG_MACH_HTCKAISER=y
-# CONFIG_MACH_HTCPOLARIS is not set
-CONFIG_MSM_KAISERSMD=y
-# CONFIG_MSM_7X00SMD is not set
+CONFIG_MACH_HTCPOLARIS=y
+CONFIG_MACH_HTCNIKE=y
+# CONFIG_HTCTITAN is not set
+CONFIG_VOGUE_TS=y
+CONFIG_MSM_VOGUESMD=y
# CONFIG_MSM_LL_DEBUG_UART1 is not set
# CONFIG_MSM_LL_DEBUG_UART2 is not set
# CONFIG_MSM_LL_DEBUG_UART3 is not set
CONFIG_MSM_LL_DEBUG_NONE=y
-# CONFIG_MSM7X00A_IDLE is not set
+CONFIG_MSM7X00A_IDLE=y
+# CONFIG_MSM7X00A_USE_GP_TIMER is not set
+CONFIG_MSM7X00A_USE_DG_TIMER=y
# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
-# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE is not set
+CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE=y
# CONFIG_MSM7X00A_SLEEP_MODE_APPS_SLEEP is not set
# CONFIG_MSM7X00A_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
-CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT=y
-CONFIG_MSM7X00A_SLEEP_MODE=4
-CONFIG_MSM_FIQ_SUPPORT=y
+# CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_SLEEP_MODE=1
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_APPS_SLEEP is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT=y
+# CONFIG_MSM7X00A_IDLE_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE=3
+CONFIG_MSM7X00A_IDLE_SLEEP_MIN_TIME=20000000
+CONFIG_MSM7X00A_IDLE_SPIN_TIME=80000
+# CONFIG_MSM_IDLE_STATS is not set
+# CONFIG_MSM_FIQ_SUPPORT is not set
# CONFIG_MSM_SERIAL_DEBUGGER is not set
# CONFIG_MSM_SMD is not set
+# CONFIG_MSM_ONCRPCROUTER is not set
# CONFIG_MSM_HW3D is not set
-# CONFIG_MSM_ADSP is not set
+CONFIG_MSM_ADSP=y
# CONFIG_MSM_PERF is not set
#
@@ -246,6 +279,11 @@ CONFIG_CMDLINE=""
# CONFIG_KEXEC is not set
#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
# Floating point emulation
#
@@ -264,8 +302,16 @@ CONFIG_BINFMT_ELF=y
#
# Power management options
#
-# CONFIG_PM is not set
-CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
#
# Networking
@@ -327,8 +373,22 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
# CONFIG_IRDA is not set
-# CONFIG_BT is not set
+CONFIG_BT=y
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIUART_LL_USE_MSM_SERIAL_CLOCK_CONTROL is not set
+# CONFIG_BT_HCIVHCI is not set
# CONFIG_AF_RXRPC is not set
#
@@ -362,14 +422,16 @@ CONFIG_BLK_DEV=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=y
-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_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_MISC_DEVICES is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_LOW_MEMORY_KILLER=y
+CONFIG_KERNEL_DEBUGGER_CORE=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HAVE_IDE is not set
#
# SCSI device support
@@ -389,8 +451,8 @@ CONFIG_NETDEVICES=y
# CONFIG_TUN is not set
# CONFIG_VETH is not set
# CONFIG_NET_ETHERNET is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEV_10000=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
#
# Wireless LAN
@@ -410,7 +472,6 @@ CONFIG_PPP_BSDCOMP=y
# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not set
CONFIG_SLHC=y
-# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_MSM_RMNET is not set
# CONFIG_NETPOLL is not set
@@ -429,8 +490,8 @@ CONFIG_INPUT=y
#
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_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
@@ -449,17 +510,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_FUJITSU 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_SYNAPTICS_I2C_RMI=y
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_GPIO=y
@@ -491,6 +542,8 @@ CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
+CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
+# CONFIG_SERIAL_MSM_RX_WAKEUP is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
@@ -499,12 +552,12 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
-# CONFIG_DEVMEM is not set
-# CONFIG_DCC_TTY is not set
+CONFIG_DEVMEM=y
# CONFIG_GOLDFISH_TTY is not set
+# CONFIG_DCC_TTY is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -521,19 +574,20 @@ CONFIG_I2C_MSM=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_S5K4B1FX=y
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -545,7 +599,11 @@ CONFIG_I2C_MSM=y
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_GOLDFISH is not set
# CONFIG_HWMON is not set
# CONFIG_WATCHDOG is not set
@@ -559,7 +617,7 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
-CONFIG_HTC_EGPIO=y
+# CONFIG_HTC_EGPIO is not set
#
# Multimedia devices
@@ -595,8 +653,10 @@ CONFIG_FB_TILEBLITTING=y
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_MSM=y
# CONFIG_FB_GOLDFISH is not set
+CONFIG_FB_MSM=y
+# CONFIG_FB_MSM_LOGO is not set
+# CONFIG_FB_MSM_REFRESH is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -611,29 +671,29 @@ CONFIG_FB_MSM=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
+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=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
-# CONFIG_LOGO is not set
+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 is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW is not set
+# CONFIG_HID_SUPPORT is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
@@ -644,15 +704,26 @@ CONFIG_MMC_EMBEDDED_SDIO=y
# MMC/SD Card Drivers
#
CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
#
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_MSM7X00A=y
-# CONFIG_MSMSDCC_TRACE is not set
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+# CONFIG_SWITCH is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
@@ -681,6 +752,7 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
#
# SPI RTC drivers
@@ -690,9 +762,10 @@ CONFIG_RTC_INTF_DEV=y
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_V3020 is not set
@@ -707,17 +780,25 @@ CONFIG_RTC_DRV_MSM7X00=y
#
# Android
#
-CONFIG_ANDROID_PMEM=y
CONFIG_ANDROID_BINDER_IPC=y
+# CONFIG_ANDROID_PMEM is not set
+CONFIG_ANDROID_POWER=y
+CONFIG_ANDROID_POWER_STAT=y
+CONFIG_ANDROID_POWER_ALARM=y
CONFIG_ANDROID_LOGGER=y
-# CONFIG_ANDROID_RAM_CONSOLE is not set
+CONFIG_ANDROID_RAM_CONSOLE=y
+CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set
+# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
+CONFIG_ANDROID_PARANOID_NETWORK=y
#
# File systems
#
CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
+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
@@ -725,23 +806,17 @@ CONFIG_EXT3_FS_XATTR=y
# 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_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_DNOTIFY=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
@@ -783,10 +858,12 @@ CONFIG_TMPFS=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_CRAMFS=y
# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
@@ -801,8 +878,24 @@ CONFIG_NETWORK_FILESYSTEMS=y
#
# Partition Types
#
-# CONFIG_PARTITION_ADVANCED is not set
+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
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
@@ -828,7 +921,7 @@ CONFIG_NLS_CODEPAGE_437=y
# 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_ASCII=y
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
@@ -844,50 +937,51 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set
# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
+# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_SCHED_DEBUG=y
-CONFIG_SCHEDSTATS=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_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
-CONFIG_DEBUG_SPINLOCK_SLEEP=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_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER 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_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
#
# Security options
diff --git a/packages/linux/linux-msm7xxxx/htcnike/defconfig b/packages/linux/linux-msm7xxxx/htcnike/defconfig
new file mode 100644
index 0000000000..eb0979cf79
--- /dev/null
+++ b/packages/linux/linux-msm7xxxx/htcnike/defconfig
@@ -0,0 +1,1009 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.25
+# Wed Feb 25 00:39:08 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+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_HAVE_LATENCYTOP_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_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+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_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=17
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_PANIC_TIMEOUT=0
+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_COMPAT_BRK=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_ASHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+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 is not set
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG 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"
+CONFIG_CLASSIC_RCU=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_GOLDFISH 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_MXC is not set
+# CONFIG_ARCH_ORION 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_MSM7X00A=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+CONFIG_MSM_AMSS_VERSION=6210
+CONFIG_MSM_AMSS_VERSION_6210=y
+# CONFIG_MSM_AMSS_VERSION_6220 is not set
+# CONFIG_MSM_AMSS_VERSION_6225 is not set
+# CONFIG_MACH_HALIBUT is not set
+CONFIG_MACH_HTCVOGUE=y
+CONFIG_MACH_HTCKAISER=y
+CONFIG_MACH_HTCPOLARIS=y
+CONFIG_MACH_HTCNIKE=y
+# CONFIG_HTCTITAN is not set
+CONFIG_VOGUE_TS=y
+CONFIG_MSM_VOGUESMD=y
+# CONFIG_MSM_LL_DEBUG_UART1 is not set
+# CONFIG_MSM_LL_DEBUG_UART2 is not set
+# CONFIG_MSM_LL_DEBUG_UART3 is not set
+CONFIG_MSM_LL_DEBUG_NONE=y
+CONFIG_MSM7X00A_IDLE=y
+# CONFIG_MSM7X00A_USE_GP_TIMER is not set
+CONFIG_MSM7X00A_USE_DG_TIMER=y
+# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE=y
+# CONFIG_MSM7X00A_SLEEP_MODE_APPS_SLEEP is not set
+# CONFIG_MSM7X00A_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
+# CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_SLEEP_MODE=1
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_APPS_SLEEP is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT=y
+# CONFIG_MSM7X00A_IDLE_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE=3
+CONFIG_MSM7X00A_IDLE_SLEEP_MIN_TIME=20000000
+CONFIG_MSM7X00A_IDLE_SPIN_TIME=80000
+# CONFIG_MSM_IDLE_STATS is not set
+# CONFIG_MSM_FIQ_SUPPORT is not set
+# CONFIG_MSM_SERIAL_DEBUGGER is not set
+# CONFIG_MSM_SMD is not set
+# CONFIG_MSM_ONCRPCROUTER is not set
+# CONFIG_MSM_HW3D is not set
+CONFIG_MSM_ADSP=y
+# CONFIG_MSM_PERF 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
+CONFIG_CPU_HAS_ASID=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_BPREDICT_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=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_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=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
+# 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_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 is not set
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_PACKET 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 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_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_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
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIUART_LL_USE_MSM_SERIAL_CLOCK_CONTROL is not set
+# CONFIG_BT_HCIVHCI 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
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+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
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=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 is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_LOW_MEMORY_KILLER=y
+CONFIG_KERNEL_DEBUGGER_CORE=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HAVE_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET 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
+# 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_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_NETCONSOLE is not set
+# CONFIG_MSM_RMNET is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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 is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV 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_KEYBOARD_GOLDFISH_EVENTS 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_UINPUT is not set
+CONFIG_INPUT_GPIO=y
+
+#
+# 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=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_MSM=y
+CONFIG_SERIAL_MSM_CONSOLE=y
+CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
+# CONFIG_SERIAL_MSM_RX_WAKEUP is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVMEM=y
+# CONFIG_GOLDFISH_TTY is not set
+# CONFIG_DCC_TTY is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=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_MSM=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_S5K4B1FX=y
+# 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
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_GOLDFISH is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_EGPIO is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=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_CFB_REV_PIXELS_IN_BYTE 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=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_GOLDFISH is not set
+CONFIG_FB_MSM=y
+# CONFIG_FB_MSM_LOGO is not set
+# CONFIG_FB_MSM_REFRESH is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=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
+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 is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+CONFIG_MMC_EMBEDDED_SDIO=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_MSM7X00A=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+# CONFIG_SWITCH 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=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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_GOLDFISH is not set
+# CONFIG_RTC_DRV_MSM7X00A is not set
+CONFIG_RTC_DRV_MSM7X00=y
+
+#
+# Android
+#
+CONFIG_ANDROID_BINDER_IPC=y
+# CONFIG_ANDROID_PMEM is not set
+CONFIG_ANDROID_POWER=y
+CONFIG_ANDROID_POWER_STAT=y
+CONFIG_ANDROID_POWER_ALARM=y
+CONFIG_ANDROID_LOGGER=y
+CONFIG_ANDROID_RAM_CONSOLE=y
+CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
+# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set
+# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
+CONFIG_ANDROID_PARANOID_NETWORK=y
+
+#
+# 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_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_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA 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=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_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_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+# 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
+
+#
+# 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
+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=y
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=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=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-msm7xxxx/htcpolaris/defconfig b/packages/linux/linux-msm7xxxx/htcpolaris/defconfig
index ce109f1f63..eb0979cf79 100644
--- a/packages/linux/linux-msm7xxxx/htcpolaris/defconfig
+++ b/packages/linux/linux-msm7xxxx/htcpolaris/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Sun May 18 17:21:36 2008
+# Linux kernel version: 2.6.25
+# Wed Feb 25 00:39:08 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -12,6 +12,7 @@ CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -21,6 +22,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -39,24 +41,26 @@ CONFIG_SWAP=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_PANIC_TIMEOUT=0
-# CONFIG_EMBEDDED is not set
+CONFIG_EMBEDDED=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
@@ -66,11 +70,13 @@ CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=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_ASHMEM=y
@@ -78,11 +84,23 @@ CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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 is not set
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -101,6 +119,7 @@ CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
#
# System Type
@@ -130,6 +149,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -148,34 +168,46 @@ CONFIG_ARCH_MSM7X00A=y
#
# Power management
#
-
-#
-# MSM7X00A Board Type
-#
+CONFIG_MSM_AMSS_VERSION=6210
+CONFIG_MSM_AMSS_VERSION_6210=y
+# CONFIG_MSM_AMSS_VERSION_6220 is not set
+# CONFIG_MSM_AMSS_VERSION_6225 is not set
# CONFIG_MACH_HALIBUT is not set
-CONFIG_MSM7X00=y
-# CONFIG_MACH_HTCVOGUE is not set
-# CONFIG_MACH_HTCKAISER is not set
-# CONFIG_MACH_HTCTITAN is not set
+CONFIG_MACH_HTCVOGUE=y
+CONFIG_MACH_HTCKAISER=y
CONFIG_MACH_HTCPOLARIS=y
-# CONFIG_MSM_KAISERSMD is not set
-# CONFIG_MSM_7X00SMD is not set
+CONFIG_MACH_HTCNIKE=y
+# CONFIG_HTCTITAN is not set
+CONFIG_VOGUE_TS=y
+CONFIG_MSM_VOGUESMD=y
# CONFIG_MSM_LL_DEBUG_UART1 is not set
# CONFIG_MSM_LL_DEBUG_UART2 is not set
# CONFIG_MSM_LL_DEBUG_UART3 is not set
CONFIG_MSM_LL_DEBUG_NONE=y
-# CONFIG_MSM7X00A_IDLE is not set
+CONFIG_MSM7X00A_IDLE=y
+# CONFIG_MSM7X00A_USE_GP_TIMER is not set
+CONFIG_MSM7X00A_USE_DG_TIMER=y
# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
-# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE is not set
+CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE=y
# CONFIG_MSM7X00A_SLEEP_MODE_APPS_SLEEP is not set
# CONFIG_MSM7X00A_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
-CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT=y
-CONFIG_MSM7X00A_SLEEP_MODE=4
-CONFIG_MSM_FIQ_SUPPORT=y
+# CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_SLEEP_MODE=1
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE is not set
+# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_APPS_SLEEP is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT=y
+# CONFIG_MSM7X00A_IDLE_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE=3
+CONFIG_MSM7X00A_IDLE_SLEEP_MIN_TIME=20000000
+CONFIG_MSM7X00A_IDLE_SPIN_TIME=80000
+# CONFIG_MSM_IDLE_STATS is not set
+# CONFIG_MSM_FIQ_SUPPORT is not set
# CONFIG_MSM_SERIAL_DEBUGGER is not set
# CONFIG_MSM_SMD is not set
+# CONFIG_MSM_ONCRPCROUTER is not set
# CONFIG_MSM_HW3D is not set
-# CONFIG_MSM_ADSP is not set
+CONFIG_MSM_ADSP=y
# CONFIG_MSM_PERF is not set
#
@@ -247,6 +279,11 @@ CONFIG_CMDLINE=""
# CONFIG_KEXEC is not set
#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
# Floating point emulation
#
@@ -265,8 +302,16 @@ CONFIG_BINFMT_ELF=y
#
# Power management options
#
-# CONFIG_PM is not set
-CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
#
# Networking
@@ -328,8 +373,22 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
# CONFIG_IRDA is not set
-# CONFIG_BT is not set
+CONFIG_BT=y
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIUART_LL_USE_MSM_SERIAL_CLOCK_CONTROL is not set
+# CONFIG_BT_HCIVHCI is not set
# CONFIG_AF_RXRPC is not set
#
@@ -359,8 +418,20 @@ CONFIG_FW_LOADER=y
# CONFIG_CONNECTOR is not set
# CONFIG_MTD is not set
# CONFIG_PARPORT is not set
-# CONFIG_BLK_DEV is not set
-# CONFIG_MISC_DEVICES is not set
+CONFIG_BLK_DEV=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 is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_LOW_MEMORY_KILLER=y
+CONFIG_KERNEL_DEBUGGER_CORE=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HAVE_IDE is not set
#
# SCSI device support
@@ -372,8 +443,23 @@ CONFIG_FW_LOADER=y
# CONFIG_ATA is not set
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
-# CONFIG_ISDN is not set
-
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET 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
+# CONFIG_WAN is not set
CONFIG_PPP=y
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not set
@@ -386,7 +472,6 @@ CONFIG_PPP_BSDCOMP=y
# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not set
CONFIG_SLHC=y
-# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_MSM_RMNET is not set
# CONFIG_NETPOLL is not set
@@ -405,8 +490,8 @@ CONFIG_INPUT=y
#
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_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
@@ -425,17 +510,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_FUJITSU 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_SYNAPTICS_I2C_RMI=y
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_GPIO=y
@@ -467,6 +542,8 @@ CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
+CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
+# CONFIG_SERIAL_MSM_RX_WAKEUP is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
@@ -475,12 +552,12 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
-# CONFIG_DEVMEM is not set
-# CONFIG_DCC_TTY is not set
+CONFIG_DEVMEM=y
# CONFIG_GOLDFISH_TTY is not set
+# CONFIG_DCC_TTY is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -497,19 +574,20 @@ CONFIG_I2C_MSM=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_S5K4B1FX=y
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -521,7 +599,11 @@ CONFIG_I2C_MSM=y
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_GOLDFISH is not set
# CONFIG_HWMON is not set
# CONFIG_WATCHDOG is not set
@@ -535,7 +617,7 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
-CONFIG_HTC_EGPIO=y
+# CONFIG_HTC_EGPIO is not set
#
# Multimedia devices
@@ -571,8 +653,10 @@ CONFIG_FB_TILEBLITTING=y
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_MSM=y
# CONFIG_FB_GOLDFISH is not set
+CONFIG_FB_MSM=y
+# CONFIG_FB_MSM_LOGO is not set
+# CONFIG_FB_MSM_REFRESH is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -587,29 +671,29 @@ CONFIG_FB_MSM=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
+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=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
-# CONFIG_LOGO is not set
+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 is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW is not set
+# CONFIG_HID_SUPPORT is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
@@ -620,46 +704,119 @@ CONFIG_MMC_EMBEDDED_SDIO=y
# MMC/SD Card Drivers
#
CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
#
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_MSM7X00A=y
-CONFIG_MSMSDCC_TRACE=y
-#CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+# CONFIG_SWITCH is not set
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 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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_GOLDFISH is not set
+# CONFIG_RTC_DRV_MSM7X00A is not set
+CONFIG_RTC_DRV_MSM7X00=y
#
# Android
#
-CONFIG_ANDROID_PMEM=y
CONFIG_ANDROID_BINDER_IPC=y
+# CONFIG_ANDROID_PMEM is not set
+CONFIG_ANDROID_POWER=y
+CONFIG_ANDROID_POWER_STAT=y
+CONFIG_ANDROID_POWER_ALARM=y
CONFIG_ANDROID_LOGGER=y
-# CONFIG_ANDROID_RAM_CONSOLE is not set
+CONFIG_ANDROID_RAM_CONSOLE=y
+CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set
+# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
+CONFIG_ANDROID_PARANOID_NETWORK=y
#
# File systems
#
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT3_FS is not set
+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_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_DNOTIFY=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
@@ -673,8 +830,11 @@ CONFIG_DNOTIFY=y
#
# DOS/FAT/NT Filesystems
#
-# CONFIG_MSDOS_FS is not set
+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
#
@@ -698,10 +858,12 @@ CONFIG_TMPFS=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_CRAMFS=y
# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
@@ -716,54 +878,110 @@ CONFIG_NETWORK_FILESYSTEMS=y
#
# Partition Types
#
-# CONFIG_PARTITION_ADVANCED is not set
+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_NLS is not set
+# 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
+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=y
+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
# CONFIG_DLM is not set
-# CONFIG_INSTRUMENTATION is not set
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
+# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_SCHED_DEBUG=y
-CONFIG_SCHEDSTATS=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_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
-CONFIG_DEBUG_SPINLOCK_SLEEP=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_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
# CONFIG_SAMPLES is not set
-# CONFIG_DEBUG_USER 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_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -783,6 +1001,8 @@ CONFIG_CRC_CCITT=y
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
# 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-msm7xxxx/htcraphael/defconfig b/packages/linux/linux-msm7xxxx/htcraphael/defconfig
index ab6975290f..64a6044a8d 100644
--- a/packages/linux/linux-msm7xxxx/htcraphael/defconfig
+++ b/packages/linux/linux-msm7xxxx/htcraphael/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.25
-# Tue Oct 28 23:36:42 2008
+# Linux kernel version: 2.6.27
+# Wed Feb 25 00:43:45 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -11,7 +11,6 @@ CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_GPIOS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
@@ -25,6 +24,7 @@ CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -92,24 +92,33 @@ CONFIG_SLAB=y
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+# CONFIG_HAVE_CLK is not set
CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
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
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set
# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
#
# IO Schedulers
@@ -129,14 +138,12 @@ CONFIG_CLASSIC_RCU=y
# System Type
#
# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_GOLDFISH 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
@@ -150,10 +157,13 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_ORION is not set
+# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -163,7 +173,7 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_MSM7X00A=y
+CONFIG_ARCH_MSM=y
#
# Boot options
@@ -172,20 +182,27 @@ CONFIG_ARCH_MSM7X00A=y
#
# Power management
#
-CONFIG_MSM_AMSS_VERSION=6225
+CONFIG_MSM_AMSS_VERSION=7000
# CONFIG_MSM_AMSS_VERSION_6210 is not set
# CONFIG_MSM_AMSS_VERSION_6220 is not set
-CONFIG_MSM_AMSS_VERSION_6225=y
+# CONFIG_MSM_AMSS_VERSION_6225 is not set
+CONFIG_MSM_AMSS_VERSION_WINCE=y
+CONFIG_MSM_DEBUG_UART_NONE=y
+# CONFIG_MSM_DEBUG_UART1 is not set
+# CONFIG_MSM_DEBUG_UART2 is not set
+# CONFIG_MSM_DEBUG_UART3 is not set
+
+#
+# MSM Board Type
+#
# CONFIG_MACH_HALIBUT is not set
+# CONFIG_MACH_TROUT is not set
CONFIG_MACH_HTCRAPHAEL=y
+CONFIG_MACH_HTCRAPHAEL_CDMA=y
CONFIG_MACH_HTCDIAMOND=y
-# CONFIG_MACH_TROUT is not set
+CONFIG_MACH_HTCDIAMOND_CDMA=y
+# CONFIG_TROUT_H2W is not set
# CONFIG_TROUT_PWRSINK is not set
-# CONFIG_MSM_LL_DEBUG_UART1 is not set
-# CONFIG_MSM_LL_DEBUG_UART2 is not set
-# CONFIG_MSM_LL_DEBUG_UART3 is not set
-CONFIG_MSM_LL_DEBUG_NONE=y
-CONFIG_MSM7X00A_IDLE=y
CONFIG_MSM7X00A_USE_GP_TIMER=y
# CONFIG_MSM7X00A_USE_DG_TIMER is not set
CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND=y
@@ -207,18 +224,17 @@ CONFIG_MSM_IDLE_STATS_FIRST_BUCKET=62500
CONFIG_MSM_IDLE_STATS_BUCKET_SHIFT=2
CONFIG_MSM_IDLE_STATS_BUCKET_COUNT=10
CONFIG_MSM_FIQ_SUPPORT=y
-CONFIG_MSM_SERIAL_DEBUGGER=y
-# CONFIG_MSM_SERIAL_DEBUGGER_CONSOLE is not set
+# CONFIG_MSM_SERIAL_DEBUGGER is not set
CONFIG_MSM_SMD=y
-CONFIG_MSM_ONCRPCROUTER=y
-CONFIG_MSM_RPCSERVERS=y
+# CONFIG_MSM_ONCRPCROUTER is not set
+# CONFIG_MSM_CPU_FREQ_ONDEMAND is not set
+# CONFIG_MSM_CPU_FREQ_SCREEN is not set
CONFIG_MSM_HW3D=y
-CONFIG_MSM_ADSP=y
-CONFIG_MSM_PERF=y
-# CONFIG_TROUT_H2W is not set
+# CONFIG_MSM_ADSP is not set
CONFIG_HTC_FB_CONSOLE=y
-CONFIG_HTC_FB_CONSOLE_DELAY=y
+# CONFIG_HTC_FB_CONSOLE_DELAY is not set
CONFIG_HTC_FB_CONSOLE_BOOT=y
+# CONFIG_WIFI_CONTROL_FUNC is not set
#
# Processor Type
@@ -228,6 +244,7 @@ CONFIG_CPU_V6=y
# CONFIG_CPU_32v6K is not set
CONFIG_CPU_32v6=y
CONFIG_CPU_ABRT_EV6=y
+CONFIG_CPU_PABRT_NOIFAR=y
CONFIG_CPU_CACHE_V6=y
CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y
@@ -263,6 +280,7 @@ CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -272,6 +290,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_RESOURCES_64BIT=y
CONFIG_ZONE_DMA_FLAG=1
@@ -313,17 +332,17 @@ CONFIG_BINFMT_ELF=y
# Power management options
#
CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
+CONFIG_HAS_WAKELOCK=y
+CONFIG_WAKELOCK=y
+# CONFIG_WAKELOCK_STAT is not set
+CONFIG_USER_WAKELOCK=y
+# CONFIG_EARLYSUSPEND is not set
# CONFIG_APM_EMULATION is not set
CONFIG_ARCH_SUSPEND_POSSIBLE=y
-
-#
-# Networking
-#
CONFIG_NET=y
#
@@ -356,106 +375,10 @@ CONFIG_IP_FIB_HASH=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
-# 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_ANDROID_PARANOID_NETWORK=y
# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-CONFIG_NF_CONNTRACK=y
-CONFIG_NF_CT_ACCT=y
-CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_NETLINK is not set
-CONFIG_NETFILTER_XTABLES=y
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
-CONFIG_NETFILTER_XT_TARGET_MARK=y
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
-CONFIG_NETFILTER_XT_TARGET_NFLOG=y
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-CONFIG_NETFILTER_XT_TARGET_TRACE=y
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
-CONFIG_NETFILTER_XT_MATCH_COMMENT=y
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
-CONFIG_NETFILTER_XT_MATCH_DCCP=y
-CONFIG_NETFILTER_XT_MATCH_DSCP=y
-CONFIG_NETFILTER_XT_MATCH_ESP=y
-CONFIG_NETFILTER_XT_MATCH_HELPER=y
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-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_OWNER is not set
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
-CONFIG_NETFILTER_XT_MATCH_QUOTA=y
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-CONFIG_NETFILTER_XT_MATCH_REALM=y
-CONFIG_NETFILTER_XT_MATCH_SCTP=y
-CONFIG_NETFILTER_XT_MATCH_STATE=y
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
-CONFIG_NETFILTER_XT_MATCH_STRING=y
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
-CONFIG_NETFILTER_XT_MATCH_TIME=y
-CONFIG_NETFILTER_XT_MATCH_U32=y
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_RECENT=y
-CONFIG_IP_NF_MATCH_ECN=y
-CONFIG_IP_NF_MATCH_AH=y
-CONFIG_IP_NF_MATCH_TTL=y
-CONFIG_IP_NF_MATCH_ADDRTYPE=y
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-CONFIG_IP_NF_TARGET_LOG=y
-# CONFIG_IP_NF_TARGET_ULOG is not set
-CONFIG_NF_NAT=y
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-CONFIG_IP_NF_TARGET_NETMAP=y
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_IP_NF_MANGLE is not set
-CONFIG_IP_NF_RAW=y
-# CONFIG_IP_NF_ARPTABLES 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
@@ -471,7 +394,6 @@ CONFIG_IP_NF_RAW=y
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
#
# Network testing
@@ -487,9 +409,14 @@ CONFIG_NET_CLS_ROUTE=y
# Wireless
#
# CONFIG_CFG80211 is not set
-# CONFIG_WIRELESS_EXT is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
@@ -504,6 +431,8 @@ CONFIG_UEVENT_HELPER_PATH=""
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -519,11 +448,19 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
CONFIG_MISC_DEVICES=y
+CONFIG_ANDROID_PMEM=y
+CONFIG_TIMED_OUTPUT=y
+CONFIG_TIMED_GPIO=y
+CONFIG_BINDER_IPC=y
# CONFIG_EEPROM_93CX6 is not set
-CONFIG_LOW_MEMORY_KILLER=y
-CONFIG_KERNEL_DEBUGGER_CORE=y
# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_HAVE_IDE is not set
+CONFIG_KERNEL_DEBUGGER_CORE=y
+CONFIG_LOW_MEMORY_KILLER=y
+CONFIG_LOGGER=y
+# CONFIG_UID_STAT is not set
+# CONFIG_ANDROID_RAM_CONSOLE is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
#
# SCSI device support
@@ -535,7 +472,6 @@ CONFIG_KERNEL_DEBUGGER_CORE=y
# CONFIG_ATA is not set
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
@@ -546,7 +482,7 @@ CONFIG_DUMMY=y
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_AX88796 is not set
-CONFIG_SMC91X=y
+# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
@@ -554,14 +490,16 @@ CONFIG_SMC91X=y
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_B44 is not set
CONFIG_NETDEV_1000=y
-# CONFIG_E1000E_ENABLED is not set
CONFIG_NETDEV_10000=y
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_LIBERTAS is not set
+# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_HOSTAP is not set
# CONFIG_WAN is not set
CONFIG_PPP=y
# CONFIG_PPP_MULTILINK is not set
@@ -598,6 +536,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_KEYRESET is not set
#
# Input Device Drivers
@@ -610,25 +549,27 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set
+CONFIG_KEYBOARD_MICROP_KEYPAD=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELAN_I2C_8232 is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI=y
-# CONFIG_TOUCHSCREEN_ELAN_I2C_8232 is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
CONFIG_TOUCHSCREEN_MSM=y
-CONFIG_MSM_VIRTUAL_KEYBOARD=y
+# CONFIG_MSM_VIRTUAL_KEYBOARD is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
@@ -637,6 +578,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_GPIO=y
+# CONFIG_INPUT_KEYCHORD is not set
#
# Hardware I/O ports
@@ -648,9 +590,12 @@ CONFIG_INPUT_GPIO=y
# Character devices
#
CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_DEVMEM is not set
+CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -667,6 +612,7 @@ CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
CONFIG_SERIAL_MSM_RX_WAKEUP=y
+# CONFIG_SERIAL_MSM_HS is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
@@ -675,61 +621,63 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
-# CONFIG_DEVMEM is not set
-# CONFIG_GOLDFISH_TTY is not set
# CONFIG_DCC_TTY is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
#
-# I2C Algorithms
+# I2C Hardware Bus support
#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
#
-# I2C Hardware Bus support
+# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_GPIO is not set
CONFIG_I2C_MSM=y
# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_SENSORS_AKM8976 is not set
CONFIG_SENSORS_PCA963X=y
# CONFIG_SENSORS_MT9T013 is not set
+CONFIG_SENSORS_MICROP_KSC=y
+CONFIG_SENSORS_MICROP_KLT=y
# 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
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
# CONFIG_HWMON is not set
# CONFIG_WATCHDOG is not set
@@ -742,14 +690,27 @@ CONFIG_SSB_POSSIBLE=y
#
# Multifunction device drivers
#
+# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
#
# Multimedia devices
#
+
+#
+# Multimedia core support
+#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
CONFIG_DAB=y
#
@@ -767,8 +728,10 @@ 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_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
+CONFIG_FB_MSM=y
+CONFIG_FB_MSM_REFRESH=y
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
@@ -779,9 +742,6 @@ CONFIG_FB_TILEBLITTING=y
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_GOLDFISH is not set
-CONFIG_FB_MSM=y
-# CONFIG_FB_MSM_LOGO is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -814,10 +774,6 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set
CONFIG_LOGO_DIAMRAPH_CLUT224=y
-
-#
-# Sound
-#
# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
@@ -830,6 +786,10 @@ CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB is not set
#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
# CONFIG_USB_GADGET is not set
@@ -851,26 +811,32 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
CONFIG_MMC_EMBEDDED_SDIO=y
+# CONFIG_MMC_PARANOID_SD_INIT is not set
#
# MMC/SD Card Drivers
#
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_BLOCK_BOUNCE is not set
+CONFIG_MMC_BLOCK_PARANOID_RESUME=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
#
# MMC/SD Host Controller Drivers
#
+# CONFIG_MMC_SDHCI is not set
CONFIG_MMC_MSM7X00A=y
+# CONFIG_MMC_MSM7X00A_RESUME_IN_WQ is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
#
# LED drivers
#
+# CONFIG_LEDS_PCA9532 is not set
CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_PCA955X is not set
#
# LED Triggers
@@ -878,7 +844,7 @@ CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_LEDS_TRIGGER_SLEEP=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
CONFIG_SWITCH=y
CONFIG_SWITCH_GPIO=y
CONFIG_RTC_LIB=y
@@ -893,6 +859,7 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_INTF_SYSFS is not set
# CONFIG_RTC_INTF_PROC is not set
# CONFIG_RTC_INTF_DEV is not set
+CONFIG_RTC_INTF_ALARM=y
# CONFIG_RTC_DRV_TEST is not set
#
@@ -909,6 +876,7 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
#
# SPI RTC drivers
@@ -929,28 +897,18 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
#
# on-CPU RTC drivers
#
-# CONFIG_RTC_DRV_GOLDFISH is not set
-CONFIG_RTC_DRV_MSM7X00A=y
+# CONFIG_RTC_DRV_MSM7X00A is not set
+CONFIG_RTC_DRV_MSM7X01A=y
+# CONFIG_DMADEVICES is not set
#
-# Android
+# Voltage and Current regulators
#
-CONFIG_ANDROID_BINDER_IPC=y
-CONFIG_ANDROID_PMEM=y
-CONFIG_ANDROID_POWER=y
-CONFIG_ANDROID_POWER_STAT=y
-CONFIG_ANDROID_POWER_ALARM=y
-CONFIG_ANDROID_LOGGER=y
-CONFIG_ANDROID_RAM_CONSOLE=y
-CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION=y
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_DATA_SIZE=128
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_ECC_SIZE=16
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE=8
-CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_POLYNOMIAL=0x11d
-# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
-CONFIG_ANDROID_TIMED_GPIO=y
-CONFIG_ANDROID_PARANOID_NETWORK=y
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
#
# File systems
@@ -970,7 +928,6 @@ CONFIG_FS_MBCACHE=y
# 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_DNOTIFY is not set
CONFIG_INOTIFY=y
@@ -1020,6 +977,7 @@ CONFIG_TMPFS=y
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
@@ -1087,6 +1045,7 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_FS=y
@@ -1094,9 +1053,12 @@ CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_SCHED_DEBUG=y
CONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
@@ -1112,6 +1074,8 @@ CONFIG_DEBUG_SPINLOCK_SLEEP=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
@@ -1120,7 +1084,17 @@ CONFIG_FRAME_POINTER=y
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
@@ -1139,21 +1113,17 @@ CONFIG_DEBUG_LL=y
# Library routines
#
CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_ENC8=y
-CONFIG_REED_SOLOMON_DEC8=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=y
-CONFIG_TEXTSEARCH_BM=y
-CONFIG_TEXTSEARCH_FSM=y
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-msm7xxxx/htctitan/defconfig b/packages/linux/linux-msm7xxxx/htctitan/defconfig
index aade78e75b..a72f00d04b 100644
--- a/packages/linux/linux-msm7xxxx/htctitan/defconfig
+++ b/packages/linux/linux-msm7xxxx/htctitan/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.25
-# Sat Jan 3 15:05:28 2009
+# Wed Feb 25 00:41:59 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -54,19 +54,17 @@ CONFIG_USER_SCHED=y
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
-CONFIG_NAMESPACES=y
-# CONFIG_UTS_NS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
+# CONFIG_NAMESPACES is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_PANIC_TIMEOUT=0
-# CONFIG_EMBEDDED is not set
+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
@@ -89,6 +87,7 @@ CONFIG_SLAB=y
# CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_PROC_PAGE_MONITOR=y
@@ -96,7 +95,12 @@ CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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 is not set
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -170,9 +174,11 @@ CONFIG_MSM_AMSS_VERSION_6210=y
# CONFIG_MSM_AMSS_VERSION_6225 is not set
# CONFIG_MACH_HALIBUT is not set
CONFIG_MACH_HTCVOGUE=y
-# CONFIG_HTCKAISER is not set
+CONFIG_MACH_HTCKAISER=y
+CONFIG_MACH_HTCPOLARIS=y
+CONFIG_MACH_HTCNIKE=y
CONFIG_HTCTITAN=y
-# CONFIG_VOGUE_TS is not set
+CONFIG_VOGUE_TS=y
CONFIG_MSM_VOGUESMD=y
# CONFIG_MSM_LL_DEBUG_UART1 is not set
# CONFIG_MSM_LL_DEBUG_UART2 is not set
@@ -181,22 +187,22 @@ CONFIG_MSM_LL_DEBUG_NONE=y
CONFIG_MSM7X00A_IDLE=y
# CONFIG_MSM7X00A_USE_GP_TIMER is not set
CONFIG_MSM7X00A_USE_DG_TIMER=y
-CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND=y
-# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE is not set
+# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE=y
# CONFIG_MSM7X00A_SLEEP_MODE_APPS_SLEEP is not set
# CONFIG_MSM7X00A_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
# CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT is not set
-CONFIG_MSM7X00A_SLEEP_MODE=0
+CONFIG_MSM7X00A_SLEEP_MODE=1
# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE is not set
# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_APPS_SLEEP is not set
-# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
-CONFIG_MSM7X00A_IDLE_SLEEP_WAIT_FOR_INTERRUPT=y
-CONFIG_MSM7X00A_IDLE_SLEEP_MODE=4
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT=y
+# CONFIG_MSM7X00A_IDLE_SLEEP_WAIT_FOR_INTERRUPT is not set
+CONFIG_MSM7X00A_IDLE_SLEEP_MODE=3
CONFIG_MSM7X00A_IDLE_SLEEP_MIN_TIME=20000000
CONFIG_MSM7X00A_IDLE_SPIN_TIME=80000
# CONFIG_MSM_IDLE_STATS is not set
-CONFIG_MSM_FIQ_SUPPORT=y
+# CONFIG_MSM_FIQ_SUPPORT is not set
# CONFIG_MSM_SERIAL_DEBUGGER is not set
# CONFIG_MSM_SMD is not set
# CONFIG_MSM_ONCRPCROUTER is not set
@@ -406,75 +412,11 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
# CONFIG_CONNECTOR is not set
-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_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
-# CONFIG_MTD_OOPS 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
-
-#
-# 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
-CONFIG_MTD_MSM_NAND=y
-
-#
-# 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_GOLDFISH_NAND 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
+# CONFIG_MTD is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
@@ -525,7 +467,7 @@ CONFIG_PPP_ASYNC=y
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=y
-CONFIG_PPP_MPPE=y
+# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not set
@@ -570,11 +512,6 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
-# 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
CONFIG_INPUT_GPIO=y
@@ -637,6 +574,7 @@ CONFIG_I2C_MSM=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
@@ -679,9 +617,7 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
#
# Multimedia devices
@@ -720,6 +656,7 @@ CONFIG_FB_TILEBLITTING=y
# CONFIG_FB_GOLDFISH is not set
CONFIG_FB_MSM=y
# CONFIG_FB_MSM_LOGO is not set
+# CONFIG_FB_MSM_REFRESH is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -737,13 +674,13 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
+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=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
@@ -757,25 +694,11 @@ CONFIG_LOGO_LINUX_CLUT224=y
#
# CONFIG_SOUND is not set
# CONFIG_HID_SUPPORT is not set
-CONFIG_USB_SUPPORT=y
-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'
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# USB Function Support
-#
-# CONFIG_USB_FUNCTION is not set
+# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
-# CONFIG_MMC_EMBEDDED_SDIO is not set
+CONFIG_MMC_EMBEDDED_SDIO=y
#
# MMC/SD Card Drivers
@@ -789,7 +712,17 @@ CONFIG_MMC_BLOCK=y
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_MSM7X00A=y
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
# CONFIG_SWITCH is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
@@ -848,7 +781,7 @@ CONFIG_RTC_DRV_MSM7X00=y
# Android
#
CONFIG_ANDROID_BINDER_IPC=y
-CONFIG_ANDROID_PMEM=y
+# CONFIG_ANDROID_PMEM is not set
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y
CONFIG_ANDROID_POWER_ALARM=y
@@ -900,8 +833,8 @@ CONFIG_INOTIFY_USER=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=866
-CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
@@ -925,8 +858,6 @@ CONFIG_TMPFS=y
# 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_JFFS2_FS is not set
CONFIG_CRAMFS=y
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
@@ -966,7 +897,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_EFI_PARTITION is not set
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
@@ -980,7 +911,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=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
@@ -989,7 +920,7 @@ CONFIG_NLS_CODEPAGE_866=y
# 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_CODEPAGE_1251 is not set
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
@@ -1004,7 +935,7 @@ CONFIG_NLS_ISO8859_1=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
+# CONFIG_NLS_UTF8 is not set
# CONFIG_DLM is not set
#
@@ -1017,12 +948,40 @@ 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_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
# CONFIG_SAMPLES is not set
CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1030,52 +989,7 @@ CONFIG_DEBUG_USER=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=y
-# CONFIG_CRYPTO_SEQIV is not set
-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 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=y
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRYPTD 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=y
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SALSA20 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_AUTHENC is not set
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO is not set
#
# Library routines
diff --git a/packages/linux/linux-msm7xxxx/htcvogue/defconfig b/packages/linux/linux-msm7xxxx/htcvogue/defconfig
index 3b2490df99..7e2145f67d 100644
--- a/packages/linux/linux-msm7xxxx/htcvogue/defconfig
+++ b/packages/linux/linux-msm7xxxx/htcvogue/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.25
-# Thu Nov 13 11:50:59 2008
+# Fri Mar 6 08:51:47 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -46,27 +46,21 @@ CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_CGROUPS is not set
-CONFIG_GROUP_SCHED=y
-CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_RT_GROUP_SCHED is not set
-CONFIG_USER_SCHED=y
-# CONFIG_CGROUP_SCHED is not set
+# CONFIG_GROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
-CONFIG_NAMESPACES=y
-# CONFIG_UTS_NS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
+# CONFIG_NAMESPACES is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
-CONFIG_PANIC_TIMEOUT=0
-# CONFIG_EMBEDDED is not set
+CONFIG_PANIC_TIMEOUT=3
+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
@@ -89,6 +83,7 @@ CONFIG_SLAB=y
# CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_PROC_PAGE_MONITOR=y
@@ -96,7 +91,12 @@ CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+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
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
@@ -170,7 +170,10 @@ CONFIG_MSM_AMSS_VERSION_6210=y
# CONFIG_MSM_AMSS_VERSION_6225 is not set
# CONFIG_MACH_HALIBUT is not set
CONFIG_MACH_HTCVOGUE=y
-# CONFIG_HTCKAISER is not set
+CONFIG_MACH_HTCKAISER=y
+CONFIG_MACH_HTCPOLARIS=y
+CONFIG_MACH_HTCNIKE=y
+# CONFIG_HTCTITAN is not set
CONFIG_VOGUE_TS=y
CONFIG_MSM_VOGUESMD=y
# CONFIG_MSM_LL_DEBUG_UART1 is not set
@@ -178,14 +181,14 @@ CONFIG_MSM_VOGUESMD=y
# CONFIG_MSM_LL_DEBUG_UART3 is not set
CONFIG_MSM_LL_DEBUG_NONE=y
CONFIG_MSM7X00A_IDLE=y
-# CONFIG_MSM7X00A_USE_GP_TIMER is not set
-CONFIG_MSM7X00A_USE_DG_TIMER=y
-CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND=y
-# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE is not set
+CONFIG_MSM7X00A_USE_GP_TIMER=y
+# CONFIG_MSM7X00A_USE_DG_TIMER is not set
+# CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
+CONFIG_MSM7X00A_SLEEP_MODE_POWER_COLLAPSE=y
# CONFIG_MSM7X00A_SLEEP_MODE_APPS_SLEEP is not set
# CONFIG_MSM7X00A_SLEEP_MODE_RAMP_DOWN_AND_WAIT_FOR_INTERRUPT is not set
# CONFIG_MSM7X00A_SLEEP_WAIT_FOR_INTERRUPT is not set
-CONFIG_MSM7X00A_SLEEP_MODE=0
+CONFIG_MSM7X00A_SLEEP_MODE=1
# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE_SUSPEND is not set
# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_POWER_COLLAPSE is not set
# CONFIG_MSM7X00A_IDLE_SLEEP_MODE_APPS_SLEEP is not set
@@ -195,7 +198,7 @@ CONFIG_MSM7X00A_IDLE_SLEEP_MODE=3
CONFIG_MSM7X00A_IDLE_SLEEP_MIN_TIME=20000000
CONFIG_MSM7X00A_IDLE_SPIN_TIME=80000
# CONFIG_MSM_IDLE_STATS is not set
-CONFIG_MSM_FIQ_SUPPORT=y
+# CONFIG_MSM_FIQ_SUPPORT is not set
# CONFIG_MSM_SERIAL_DEBUGGER is not set
# CONFIG_MSM_SMD is not set
# CONFIG_MSM_ONCRPCROUTER is not set
@@ -297,9 +300,7 @@ CONFIG_BINFMT_ELF=y
#
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_PM_VERBOSE is not set
-CONFIG_CAN_PM_TRACE=y
+# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
@@ -314,7 +315,8 @@ CONFIG_NET=y
#
# Networking options
#
-# CONFIG_PACKET is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
@@ -340,11 +342,106 @@ CONFIG_IP_FIB_HASH=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
+# 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
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+# CONFIG_NF_CONNTRACK_FTP is not set
+# CONFIG_NF_CONNTRACK_H323 is not set
+# CONFIG_NF_CONNTRACK_IRC is not set
+# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
+# CONFIG_NF_CONNTRACK_PPTP is not set
+# CONFIG_NF_CONNTRACK_SANE is not set
+# CONFIG_NF_CONNTRACK_SIP is not set
+# CONFIG_NF_CONNTRACK_TFTP is not set
+# CONFIG_NF_CT_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_RATEEST=y
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_DCCP=y
+CONFIG_NETFILTER_XT_MATCH_DSCP=y
+CONFIG_NETFILTER_XT_MATCH_ESP=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+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_OWNER=y
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_RATEEST=y
+CONFIG_NETFILTER_XT_MATCH_REALM=y
+CONFIG_NETFILTER_XT_MATCH_SCTP=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_TIME=y
+CONFIG_NETFILTER_XT_MATCH_U32=y
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=y
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_RECENT=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_AH=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_MATCH_ADDRTYPE=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_NF_NAT=y
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+# CONFIG_NF_NAT_SNMP_BASIC is not set
+# CONFIG_NF_NAT_FTP is not set
+# CONFIG_NF_NAT_IRC is not set
+# CONFIG_NF_NAT_TFTP is not set
+# CONFIG_NF_NAT_AMANDA is not set
+# CONFIG_NF_NAT_PPTP is not set
+# CONFIG_NF_NAT_H323 is not set
+# CONFIG_NF_NAT_SIP is not set
+# CONFIG_IP_NF_MANGLE is not set
+CONFIG_IP_NF_RAW=y
+# CONFIG_IP_NF_ARPTABLES is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
@@ -360,6 +457,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
#
# Network testing
@@ -379,8 +477,8 @@ CONFIG_BT=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIUART_LL_USE_MSM_SERIAL_CLOCK_CONTROL is not set
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_LL_USE_MSM_SERIAL_CLOCK_CONTROL=y
# CONFIG_BT_HCIVHCI is not set
# CONFIG_AF_RXRPC is not set
@@ -391,7 +489,9 @@ CONFIG_BT_HCIUART_H4=y
# CONFIG_WIRELESS_EXT is not set
# CONFIG_MAC80211 is not set
# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
+CONFIG_RFKILL=y
+# CONFIG_RFKILL_INPUT is not set
+CONFIG_RFKILL_LEDS=y
# CONFIG_NET_9P is not set
#
@@ -401,79 +501,15 @@ CONFIG_BT_HCIUART_H4=y
#
# Generic Driver Options
#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_UEVENT_HELPER_PATH=""
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
# CONFIG_CONNECTOR is not set
-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_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
-# CONFIG_MTD_OOPS 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
-
-#
-# 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
-CONFIG_MTD_MSM_NAND=y
-
-#
-# 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_GOLDFISH_NAND 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
+# CONFIG_MTD is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
@@ -501,7 +537,7 @@ CONFIG_KERNEL_DEBUGGER_CORE=y
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
+CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
@@ -569,11 +605,6 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
-# 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
CONFIG_INPUT_GPIO=y
@@ -605,7 +636,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
CONFIG_SERIAL_MSM_CLOCK_CONTROL=y
-# CONFIG_SERIAL_MSM_RX_WAKEUP is not set
+CONFIG_SERIAL_MSM_RX_WAKEUP=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
@@ -636,6 +667,7 @@ CONFIG_I2C_MSM=y
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
@@ -678,9 +710,7 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
#
# Multimedia devices
@@ -719,6 +749,7 @@ CONFIG_FB_TILEBLITTING=y
# CONFIG_FB_GOLDFISH is not set
CONFIG_FB_MSM=y
# CONFIG_FB_MSM_LOGO is not set
+# CONFIG_FB_MSM_REFRESH is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -738,11 +769,11 @@ 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_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=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
@@ -755,26 +786,15 @@ CONFIG_LOGO_LINUX_CLUT224=y
# Sound
#
# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-CONFIG_USB_SUPPORT=y
-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'
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# USB Function Support
-#
-# CONFIG_USB_FUNCTION is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
-# CONFIG_MMC_EMBEDDED_SDIO is not set
+CONFIG_MMC_EMBEDDED_SDIO=y
#
# MMC/SD Card Drivers
@@ -788,7 +808,20 @@ CONFIG_MMC_BLOCK=y
# MMC/SD Host Controller Drivers
#
CONFIG_MMC_MSM7X00A=y
-# CONFIG_NEW_LEDS is not set
+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
+CONFIG_LEDS_TRIGGER_SLEEP=y
# CONFIG_SWITCH is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
@@ -924,9 +957,7 @@ CONFIG_TMPFS=y
# 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_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
+CONFIG_CRAMFS=y
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
@@ -946,24 +977,8 @@ CONFIG_NETWORK_FILESYSTEMS=y
#
# 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
-# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
@@ -989,7 +1004,7 @@ CONFIG_NLS_CODEPAGE_437=y
# 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_ASCII is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
@@ -1016,12 +1031,40 @@ 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_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+# 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+CONFIG_DEBUG_SPINLOCK_SLEEP=y
+# 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_DEBUG_SG is not set
CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
# CONFIG_SAMPLES is not set
-CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1043,8 +1086,11 @@ CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=y
+CONFIG_TEXTSEARCH_BM=y
+CONFIG_TEXTSEARCH_FSM=y
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
-
diff --git a/packages/linux/linux-msm7xxxx_git.bb b/packages/linux/linux-msm7xxxx_git.bb
index a2972bbe8d..544bab5009 100644
--- a/packages/linux/linux-msm7xxxx_git.bb
+++ b/packages/linux/linux-msm7xxxx_git.bb
@@ -1,25 +1,24 @@
require linux.inc
PV = "2.6.25+${PR}+gitr${SRCREV}"
-PV_htckaiser = "2.6.24+${PR}+gitr${SRCREV}"
-PV_htcpolaris = "2.6.24+${PR}+gitr${SRCREV}"
+PV_htcraphael = "2.6.27+${PR}+gitr${SRCREV}"
+PV_htcdiamond = "2.6.27+${PR}+gitr${SRCREV}"
+PR = "r4"
-PR = "r2"
+COMPATIBLE_MACHINE = "htckaiser|htcpolaris|htcvogue|htctitan|htcnike|htcraphael|htcdiamond|htcblackstone"
-COMPATIBLE_MACHINE = "htckaiser|htcpolaris|htcraphael|htcdiamond|htcvogue|htctitan"
+SRCREV = "f89edc3bf353407bd1dd6c2683f539a7c2603191"
+SRCREV_htcraphael = "12008ce2c5c1ab657c46fdc6f6129ccf6730760a"
+SRCREV_htcdiamond = "12008ce2c5c1ab657c46fdc6f6129ccf6730760a"
+SRCREV_htcblackstone = "12008ce2c5c1ab657c46fdc6f6129ccf6730760a"
-SRCREV_htckaiser = "1082670ccae30e6592311cc9dee93ba978382a25"
-SRCREV_htcpolaris = "1082670ccae30e6592311cc9dee93ba978382a25"
-SRCREV_htcraphael = "c07884fc4c99845e2d940009e494f83e22509e3d"
-SRCREV_htcdiamond = "c07884fc4c99845e2d940009e494f83e22509e3d"
-SRCREV_htcvogue = "8cfc6730b38091c908b2df3b906a3a54f27e1bb2"
-SRCREV_htctitan = "8cfc6730b38091c908b2df3b906a3a54f27e1bb2"
-
-SRC_URI = "git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git;branch=htc-msm-2.6.25;protocol=git file://defconfig"
-SRC_URI_htckaiser = "git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git;branch=htc-msm;protocol=git file://defconfig"
-SRC_URI_htcpolaris = "git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git;branch=htc-msm;protocol=git file://defconfig"
-SRC_URI_htcvogue = "git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git;branch=htc-vogue;protocol=git file://defconfig"
-SRC_URI_htctitan = "git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git;branch=htc-vogue;protocol=git file://defconfig"
+SRC_BRANCH = "htc-vogue"
+SRC_BRANCH_htcraphael = "htc-msm-2.6.27"
+SRC_BRANCH_htcdiamond = "htc-msm-2.6.27"
+SRC_BRANCH_htcblackstone = "htc-msm-2.6.27"
+SRC_URI = "\
+ git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git;branch=${SRC_BRANCH};protocol=git \
+ file://defconfig \
+"
S = "${WORKDIR}/git"
-
diff --git a/packages/linux/linux-n1200/defconfig b/packages/linux/linux-n1200/defconfig
index f37ff8b640..6b5d5b5dfd 100644
--- a/packages/linux/linux-n1200/defconfig
+++ b/packages/linux/linux-n1200/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.27-rc9
-# Sun Jan 11 02:29:21 2009
+# Tue Feb 10 21:33:38 2009
#
# CONFIG_PPC64 is not set
@@ -1214,13 +1214,97 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia core support
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
+CONFIG_VIDEO_MEDIA=m
#
# Multimedia drivers
#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_BT848 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_STRADIS is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_MXB is not set
+# CONFIG_VIDEO_DPC 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_IVTV is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=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
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_USB_S2255=m
+# CONFIG_SOC_CAMERA is not set
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
+# CONFIG_USB_SI470X is not set
CONFIG_DAB=y
CONFIG_USB_DABUSB=m
diff --git a/packages/linux/linux-n1200_2.6.27-rc9+git.bb b/packages/linux/linux-n1200_2.6.27-rc9+git.bb
index 04062679ca..7674379a6b 100644
--- a/packages/linux/linux-n1200_2.6.27-rc9+git.bb
+++ b/packages/linux/linux-n1200_2.6.27-rc9+git.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Linux Kernel for the Thecus n1200"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
DEPENDS = "u-boot-mkimage-native"
COMPATIBLE_MACHINE = "n1200"
diff --git a/packages/linux/linux-omap-2.6.26/omap3evm/defconfig b/packages/linux/linux-omap-2.6.26/omap3evm/defconfig
index e61fad48d9..a0ba3d1e0a 100644
--- a/packages/linux/linux-omap-2.6.26/omap3evm/defconfig
+++ b/packages/linux/linux-omap-2.6.26/omap3evm/defconfig
@@ -95,7 +95,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap-2.6.27/omap3evm/defconfig b/packages/linux/linux-omap-2.6.27/omap3evm/defconfig
index 64597db3d2..f58ecded2d 100644
--- a/packages/linux/linux-omap-2.6.27/omap3evm/defconfig
+++ b/packages/linux/linux-omap-2.6.27/omap3evm/defconfig
@@ -115,7 +115,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap-2.6.27/omap5912osk/defconfig b/packages/linux/linux-omap-2.6.27/omap5912osk/defconfig
index 3c334868ea..48d6bf50da 100644
--- a/packages/linux/linux-omap-2.6.27/omap5912osk/defconfig
+++ b/packages/linux/linux-omap-2.6.27/omap5912osk/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc2-omap1
-# Tue Aug 21 23:22:37 2007
+# Linux kernel version: 2.6.27-omap1
+# Thu Feb 19 15:44:56 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -12,6 +12,7 @@ CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -21,7 +22,9 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -39,12 +42,19 @@ CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
@@ -58,6 +68,7 @@ CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
@@ -71,10 +82,26 @@ CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+CONFIG_HAVE_CLK=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
@@ -85,6 +112,7 @@ CONFIG_BLOCK=y
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set
# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
#
# IO Schedulers
@@ -98,6 +126,7 @@ CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_CLASSIC_RCU=y
#
# System Type
@@ -109,7 +138,6 @@ CONFIG_DEFAULT_IOSCHED="cfq"
# 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
@@ -123,9 +151,13 @@ CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -135,6 +167,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_MSM7X00A is not set
#
# TI OMAP Implementations
@@ -153,7 +186,6 @@ CONFIG_OMAP_RESET_CLOCKS=y
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
-# CONFIG_OMAP_STI is not set
CONFIG_OMAP_MCBSP=y
# CONFIG_OMAP_MMU_FWK is not set
# CONFIG_OMAP_MBOX_FWK is not set
@@ -165,7 +197,6 @@ 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
@@ -195,7 +226,6 @@ CONFIG_OMAP_ARM_192MHZ=y
# 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
#
# Boot options
@@ -222,7 +252,7 @@ CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
-# CONFIG_ARM_THUMB is not set
+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
@@ -234,10 +264,6 @@ CONFIG_CPU_CP15_MMU=y
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
@@ -255,9 +281,12 @@ CONFIG_OMAP_CF=y
# CONFIG_TICK_ONESHOT is not set
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_PREEMPT is not set
CONFIG_HZ=128
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -266,6 +295,8 @@ CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
@@ -279,7 +310,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x10400000,8M root=/dev/ram0 rw"
+CONFIG_CMDLINE=" debug "
# CONFIG_XIP_KERNEL is not set
# CONFIG_KEXEC is not set
@@ -295,9 +326,6 @@ CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x10400000,8M root=/dev/ram0
#
# 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
#
@@ -306,21 +334,17 @@ 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 is not set
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
# CONFIG_APM_EMULATION is not set
-
-#
-# Networking
-#
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_NET=y
#
@@ -333,6 +357,7 @@ CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
@@ -355,6 +380,7 @@ CONFIG_IP_PNP_BOOTP=y
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
@@ -362,8 +388,6 @@ 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
@@ -380,10 +404,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# 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
#
@@ -391,6 +411,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
@@ -412,9 +433,12 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# Generic Driver Options
#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
CONFIG_MTD=y
@@ -424,6 +448,7 @@ CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
#
# User Modules And Translation Layers
@@ -436,6 +461,7 @@ CONFIG_MTD_BLOCK=y
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
#
# RAM/ROM/Flash chip drivers
@@ -498,17 +524,23 @@ CONFIG_BLK_DEV=y
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_XIP is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_OMAP_STI is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
CONFIG_IDE=m
CONFIG_BLK_DEV_IDE=m
#
-# Please see Documentation/ide.txt for help/info on IDE drives
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_IDE_SATA is not set
CONFIG_BLK_DEV_IDEDISK=m
@@ -523,11 +555,8 @@ CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_PLATFORM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
@@ -539,18 +568,23 @@ CONFIG_IDE_PROC_FS=y
# CONFIG_ATA is not set
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
+# CONFIG_VETH is not set
# CONFIG_PHYLIB is not set
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_AX88796 is not set
CONFIG_SMC91X=y
# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
CONFIG_NETDEV_1000=y
CONFIG_NETDEV_10000=y
@@ -559,6 +593,16 @@ CONFIG_NETDEV_10000=y
#
# CONFIG_WLAN_PRE80211 is not set
# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS 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_NET_PCMCIA is not set
# CONFIG_WAN is not set
CONFIG_PPP=y
@@ -573,7 +617,6 @@ CONFIG_PPP_MULTILINK=y
# CONFIG_PPPOL2TP 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
@@ -594,7 +637,6 @@ CONFIG_INPUT_MOUSEDEV=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
@@ -609,6 +651,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_OMAP=y
+# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
@@ -618,12 +661,14 @@ CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO 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_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
# CONFIG_INPUT_MISC is not set
#
@@ -636,9 +681,11 @@ CONFIG_INPUT_TOUCHSCREEN=y
# Character devices
#
CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -660,7 +707,6 @@ CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
CONFIG_HW_RANDOM=m
CONFIG_HW_RANDOM_OMAP=m
# CONFIG_NVRAM is not set
@@ -672,38 +718,47 @@ CONFIG_HW_RANDOM_OMAP=m
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
+# CONFIG_IPWIRELESS is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
#
-# I2C Algorithms
+# I2C Hardware Bus support
#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
#
-# I2C Hardware Bus support
+# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_GPIO is not set
# CONFIG_I2C_OCORES is not set
CONFIG_I2C_OMAP=y
-# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set
#
# Miscellaneous I2C Chip support
#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_ISP1301_OMAP is not set
@@ -712,21 +767,36 @@ CONFIG_TPS65010=y
# CONFIG_GPIOEXPANDER_OMAP is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_LP5521 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_SPI is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_GPIO_SYSFS is not set
#
-# SPI support
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
+# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
@@ -734,12 +804,13 @@ CONFIG_HWMON=y
# 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_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 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_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
@@ -762,6 +833,7 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_W83781D is not set
@@ -769,47 +841,65 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
#
# Multifunction device drivers
#
+# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
-# CONFIG_NEW_LEDS is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
#
# Multimedia devices
#
+
+#
+# Multimedia core support
+#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
+# CONFIG_VIDEO_MEDIA is not set
#
-# Graphics support
+# Multimedia drivers
#
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
#
-# Display device support
+# Graphics support
#
-# CONFIG_DISPLAY_SUPPORT is not set
# CONFIG_VGASTATE is not set
CONFIG_VIDEO_OUTPUT_CONTROL=m
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_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN 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
@@ -820,12 +910,19 @@ CONFIG_FB_MODE_HELPERS=y
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
CONFIG_FB_OMAP=y
+CONFIG_FB_OMAP_VIDEO_MODE=""
# 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
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
#
# Console display driver support
@@ -846,57 +943,176 @@ CONFIG_FONT_8x8=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-
-#
-# Sound
-#
+# CONFIG_LOGO is not set
# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW 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_SUPPORT=y
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=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
#
-# Enable Host or Gadget support to see Inventra options
+# Miscellaneous USB options
#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_MON=y
#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# USB Host Controller Drivers
#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_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
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
#
-# USB Gadget Support
+# USB Device Class drivers
#
-# CONFIG_USB_GADGET is not set
-# CONFIG_MMC is not set
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
#
-# DMA Engine support
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
-# CONFIG_DMA_ENGINE is not set
#
-# DMA Clients
-#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=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_IUU=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_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_SPCP8X5=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=m
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX 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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+# CONFIG_NEW_LEDS is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
#
-# DMA Devices
+# Voltage and Current regulators
#
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
#
# CBUS support
#
# CONFIG_CBUS is not set
+# CONFIG_OMAP_DSP is not set
#
# File systems
@@ -910,14 +1126,11 @@ CONFIG_EXT2_FS=y
# 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_DNOTIFY=y
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
@@ -946,7 +1159,6 @@ 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
#
@@ -962,34 +1174,34 @@ CONFIG_RAMFS=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# 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 is not set
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
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_NFSD is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
@@ -1003,10 +1215,6 @@ CONFIG_SUNRPC=y
#
# 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
@@ -1047,30 +1255,35 @@ CONFIG_NLS_ISO8859_1=m
# 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_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
# 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_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_FRAME_POINTER=y
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_DEBUG_USER is not set
#
@@ -1078,14 +1291,95 @@ CONFIG_FRAME_POINTER=y
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
-# CONFIG_CRYPTO is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_HW=y
#
# Library routines
#
CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
diff --git a/packages/linux/linux-omap-2.6.28/add-resizer-driver.patch b/packages/linux/linux-omap-2.6.28/add-resizer-driver.patch
new file mode 100644
index 0000000000..9457bec576
--- /dev/null
+++ b/packages/linux/linux-omap-2.6.28/add-resizer-driver.patch
@@ -0,0 +1,19823 @@
+Index: git/drivers/media/video/isp/bluegamma_table.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/bluegamma_table.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,1040 @@
++/*
++ * drivers/media/video/omap/isp/redgamma_table.h
++ *
++ * Gamma Table values for Red for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2007 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++0,
++0,
++1,
++2,
++3,
++3,
++4,
++5,
++6,
++8,
++10,
++12,
++14,
++16,
++18,
++20,
++22,
++23,
++25,
++26,
++28,
++29,
++31,
++32,
++34,
++35,
++36,
++37,
++39,
++40,
++41,
++42,
++43,
++44,
++45,
++46,
++47,
++48,
++49,
++50,
++51,
++52,
++52,
++53,
++54,
++55,
++56,
++57,
++58,
++59,
++60,
++61,
++62,
++63,
++63,
++64,
++65,
++66,
++66,
++67,
++68,
++69,
++69,
++70,
++71,
++72,
++72,
++73,
++74,
++75,
++75,
++76,
++77,
++78,
++78,
++79,
++80,
++81,
++81,
++82,
++83,
++84,
++84,
++85,
++86,
++87,
++88,
++88,
++89,
++90,
++91,
++91,
++92,
++93,
++94,
++94,
++95,
++96,
++97,
++97,
++98,
++98,
++99,
++99,
++100,
++100,
++101,
++101,
++102,
++103,
++104,
++104,
++105,
++106,
++107,
++108,
++108,
++109,
++110,
++111,
++111,
++112,
++113,
++114,
++114,
++115,
++116,
++117,
++117,
++118,
++119,
++119,
++120,
++120,
++121,
++121,
++122,
++122,
++123,
++123,
++124,
++124,
++125,
++125,
++126,
++126,
++127,
++127,
++128,
++128,
++129,
++129,
++130,
++130,
++131,
++131,
++132,
++132,
++133,
++133,
++134,
++134,
++135,
++135,
++136,
++136,
++137,
++137,
++138,
++138,
++139,
++139,
++140,
++140,
++141,
++141,
++142,
++142,
++143,
++143,
++144,
++144,
++145,
++145,
++146,
++146,
++147,
++147,
++148,
++148,
++149,
++149,
++150,
++150,
++151,
++151,
++152,
++152,
++153,
++153,
++153,
++153,
++154,
++154,
++154,
++154,
++155,
++155,
++156,
++156,
++157,
++157,
++158,
++158,
++158,
++159,
++159,
++159,
++160,
++160,
++160,
++161,
++161,
++162,
++162,
++163,
++163,
++164,
++164,
++164,
++164,
++165,
++165,
++165,
++165,
++166,
++166,
++167,
++167,
++168,
++168,
++169,
++169,
++170,
++170,
++170,
++170,
++171,
++171,
++171,
++171,
++172,
++172,
++173,
++173,
++174,
++174,
++175,
++175,
++176,
++176,
++176,
++176,
++177,
++177,
++177,
++177,
++178,
++178,
++178,
++178,
++179,
++179,
++179,
++179,
++180,
++180,
++180,
++180,
++181,
++181,
++181,
++181,
++182,
++182,
++182,
++182,
++183,
++183,
++183,
++183,
++184,
++184,
++184,
++184,
++185,
++185,
++185,
++185,
++186,
++186,
++186,
++186,
++187,
++187,
++187,
++187,
++188,
++188,
++188,
++188,
++189,
++189,
++189,
++189,
++190,
++190,
++190,
++190,
++191,
++191,
++191,
++191,
++192,
++192,
++192,
++192,
++193,
++193,
++193,
++193,
++194,
++194,
++194,
++194,
++195,
++195,
++195,
++195,
++196,
++196,
++196,
++196,
++197,
++197,
++197,
++197,
++198,
++198,
++198,
++198,
++199,
++199,
++199,
++199,
++200,
++200,
++200,
++200,
++201,
++201,
++201,
++201,
++202,
++202,
++202,
++203,
++203,
++203,
++203,
++204,
++204,
++204,
++204,
++205,
++205,
++205,
++205,
++206,
++206,
++206,
++206,
++207,
++207,
++207,
++207,
++208,
++208,
++208,
++208,
++209,
++209,
++209,
++209,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++212,
++212,
++212,
++212,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++214,
++214,
++214,
++214,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++216,
++216,
++216,
++216,
++217,
++217,
++217,
++217,
++218,
++218,
++218,
++218,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++220,
++220,
++220,
++220,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++222,
++222,
++222,
++222,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++224,
++224,
++224,
++224,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++226,
++226,
++226,
++226,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++228,
++228,
++228,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++230,
++230,
++230,
++230,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++233,
++233,
++233,
++233,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++235,
++235,
++235,
++235,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++237,
++237,
++237,
++237,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++239,
++239,
++239,
++239,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++241,
++241,
++241,
++241,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++243,
++243,
++243,
++243,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++245,
++245,
++245,
++245,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++247,
++247,
++247,
++247,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++249,
++249,
++249,
++249,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++251,
++251,
++251,
++251,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++254,
++254,
++254,
++254,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255
+Index: git/drivers/media/video/isp/cfa_coef_table.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/cfa_coef_table.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,592 @@
++/*
++ * drivers/media/video/omap/isp/cfa_coef_table.h
++ *
++ * CFA Coefficient Table values for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2007 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++0,
++247,
++0,
++244,
++247,
++36,
++27,
++12,
++0,
++27,
++0,
++250,
++244,
++12,
++250,
++4,
++0,
++0,
++0,
++248,
++0,
++0,
++40,
++0,
++4,
++250,
++12,
++244,
++250,
++0,
++27,
++0,
++12,
++27,
++36,
++247,
++244,
++0,
++247,
++0,
++0,
++40,
++0,
++0,
++248,
++0,
++0,
++0,
++0,
++247,
++0,
++244,
++247,
++36,
++27,
++12,
++0,
++27,
++0,
++250,
++244,
++12,
++250,
++4,
++0,
++0,
++0,
++248,
++0,
++0,
++40,
++0,
++4,
++250,
++12,
++244,
++250,
++0,
++27,
++0,
++12,
++27,
++36,
++247,
++244,
++0,
++247,
++0,
++0,
++40,
++0,
++0,
++248,
++0,
++0,
++0,
++0,
++247,
++0,
++244,
++247,
++36,
++27,
++12,
++0,
++27,
++0,
++250,
++244,
++12,
++250,
++4,
++0,
++0,
++0,
++248,
++0,
++0,
++40,
++0,
++4,
++250,
++12,
++244,
++250,
++0,
++27,
++0,
++12,
++27,
++36,
++247,
++244,
++0,
++247,
++0,
++0,
++40,
++0,
++0,
++248,
++0,
++0,
++0,
++244,
++0,
++247,
++0,
++12,
++27,
++36,
++247,
++250,
++0,
++27,
++0,
++4,
++250,
++12,
++244,
++248,
++0,
++0,
++0,
++0,
++40,
++0,
++0,
++244,
++12,
++250,
++4,
++0,
++27,
++0,
++250,
++247,
++36,
++27,
++12,
++0,
++247,
++0,
++244,
++0,
++0,
++40,
++0,
++0,
++0,
++0,
++248,
++244,
++0,
++247,
++0,
++12,
++27,
++36,
++247,
++250,
++0,
++27,
++0,
++4,
++250,
++12,
++244,
++248,
++0,
++0,
++0,
++0,
++40,
++0,
++0,
++244,
++12,
++250,
++4,
++0,
++27,
++0,
++250,
++247,
++36,
++27,
++12,
++0,
++247,
++0,
++244,
++0,
++0,
++40,
++0,
++0,
++0,
++0,
++248,
++244,
++0,
++247,
++0,
++12,
++27,
++36,
++247,
++250,
++0,
++27,
++0,
++4,
++250,
++12,
++244,
++248,
++0,
++0,
++0,
++0,
++40,
++0,
++0,
++244,
++12,
++250,
++4,
++0,
++27,
++0,
++250,
++247,
++36,
++27,
++12,
++0,
++247,
++0,
++244,
++0,
++0,
++40,
++0,
++0,
++0,
++0,
++248,
++244,
++12,
++250,
++4,
++0,
++27,
++0,
++250,
++247,
++36,
++27,
++12,
++0,
++247,
++0,
++244,
++248,
++0,
++0,
++0,
++0,
++40,
++0,
++0,
++244,
++0,
++247,
++0,
++12,
++27,
++36,
++247,
++250,
++0,
++27,
++0,
++4,
++250,
++12,
++244,
++0,
++0,
++40,
++0,
++0,
++0,
++0,
++248,
++244,
++12,
++250,
++4,
++0,
++27,
++0,
++250,
++247,
++36,
++27,
++12,
++0,
++247,
++0,
++244,
++248,
++0,
++0,
++0,
++0,
++40,
++0,
++0,
++244,
++0,
++247,
++0,
++12,
++27,
++36,
++247,
++250,
++0,
++27,
++0,
++4,
++250,
++12,
++244,
++0,
++0,
++40,
++0,
++0,
++0,
++0,
++248,
++244,
++12,
++250,
++4,
++0,
++27,
++0,
++250,
++247,
++36,
++27,
++12,
++0,
++247,
++0,
++244,
++248,
++0,
++0,
++0,
++0,
++40,
++0,
++0,
++244,
++0,
++247,
++0,
++12,
++27,
++36,
++247,
++250,
++0,
++27,
++0,
++4,
++250,
++12,
++244,
++0,
++0,
++40,
++0,
++0,
++0,
++0,
++248,
++4,
++250,
++12,
++244,
++250,
++0,
++27,
++0,
++12,
++27,
++36,
++247,
++244,
++0,
++247,
++0,
++0,
++0,
++0,
++248,
++0,
++0,
++40,
++0,
++0,
++247,
++0,
++244,
++247,
++36,
++27,
++12,
++0,
++27,
++0,
++250,
++244,
++12,
++250,
++4,
++0,
++40,
++0,
++0,
++248,
++0,
++0,
++0,
++4,
++250,
++12,
++244,
++250,
++0,
++27,
++0,
++12,
++27,
++36,
++247,
++244,
++0,
++247,
++0,
++0,
++0,
++0,
++248,
++0,
++0,
++40,
++0,
++0,
++247,
++0,
++244,
++247,
++36,
++27,
++12,
++0,
++27,
++0,
++250,
++244,
++12,
++250,
++4,
++0,
++40,
++0,
++0,
++248,
++0,
++0,
++0,
++4,
++250,
++12,
++244,
++250,
++0,
++27,
++0,
++12,
++27,
++36,
++247,
++244,
++0,
++247,
++0,
++0,
++0,
++0,
++248,
++0,
++0,
++40,
++0,
++0,
++247,
++0,
++244,
++247,
++36,
++27,
++12,
++0,
++27,
++0,
++250,
++244,
++12,
++250,
++4,
++0,
++40,
++0,
++0,
++248,
++0,
++0,
++0
+Index: git/drivers/media/video/isp/greengamma_table.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/greengamma_table.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,1040 @@
++/*
++ * drivers/media/video/omap/isp/redgamma_table.h
++ *
++ * Gamma Table values for Red for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2007 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++0,
++0,
++1,
++2,
++3,
++3,
++4,
++5,
++6,
++8,
++10,
++12,
++14,
++16,
++18,
++20,
++22,
++23,
++25,
++26,
++28,
++29,
++31,
++32,
++34,
++35,
++36,
++37,
++39,
++40,
++41,
++42,
++43,
++44,
++45,
++46,
++47,
++48,
++49,
++50,
++51,
++52,
++52,
++53,
++54,
++55,
++56,
++57,
++58,
++59,
++60,
++61,
++62,
++63,
++63,
++64,
++65,
++66,
++66,
++67,
++68,
++69,
++69,
++70,
++71,
++72,
++72,
++73,
++74,
++75,
++75,
++76,
++77,
++78,
++78,
++79,
++80,
++81,
++81,
++82,
++83,
++84,
++84,
++85,
++86,
++87,
++88,
++88,
++89,
++90,
++91,
++91,
++92,
++93,
++94,
++94,
++95,
++96,
++97,
++97,
++98,
++98,
++99,
++99,
++100,
++100,
++101,
++101,
++102,
++103,
++104,
++104,
++105,
++106,
++107,
++108,
++108,
++109,
++110,
++111,
++111,
++112,
++113,
++114,
++114,
++115,
++116,
++117,
++117,
++118,
++119,
++119,
++120,
++120,
++121,
++121,
++122,
++122,
++123,
++123,
++124,
++124,
++125,
++125,
++126,
++126,
++127,
++127,
++128,
++128,
++129,
++129,
++130,
++130,
++131,
++131,
++132,
++132,
++133,
++133,
++134,
++134,
++135,
++135,
++136,
++136,
++137,
++137,
++138,
++138,
++139,
++139,
++140,
++140,
++141,
++141,
++142,
++142,
++143,
++143,
++144,
++144,
++145,
++145,
++146,
++146,
++147,
++147,
++148,
++148,
++149,
++149,
++150,
++150,
++151,
++151,
++152,
++152,
++153,
++153,
++153,
++153,
++154,
++154,
++154,
++154,
++155,
++155,
++156,
++156,
++157,
++157,
++158,
++158,
++158,
++159,
++159,
++159,
++160,
++160,
++160,
++161,
++161,
++162,
++162,
++163,
++163,
++164,
++164,
++164,
++164,
++165,
++165,
++165,
++165,
++166,
++166,
++167,
++167,
++168,
++168,
++169,
++169,
++170,
++170,
++170,
++170,
++171,
++171,
++171,
++171,
++172,
++172,
++173,
++173,
++174,
++174,
++175,
++175,
++176,
++176,
++176,
++176,
++177,
++177,
++177,
++177,
++178,
++178,
++178,
++178,
++179,
++179,
++179,
++179,
++180,
++180,
++180,
++180,
++181,
++181,
++181,
++181,
++182,
++182,
++182,
++182,
++183,
++183,
++183,
++183,
++184,
++184,
++184,
++184,
++185,
++185,
++185,
++185,
++186,
++186,
++186,
++186,
++187,
++187,
++187,
++187,
++188,
++188,
++188,
++188,
++189,
++189,
++189,
++189,
++190,
++190,
++190,
++190,
++191,
++191,
++191,
++191,
++192,
++192,
++192,
++192,
++193,
++193,
++193,
++193,
++194,
++194,
++194,
++194,
++195,
++195,
++195,
++195,
++196,
++196,
++196,
++196,
++197,
++197,
++197,
++197,
++198,
++198,
++198,
++198,
++199,
++199,
++199,
++199,
++200,
++200,
++200,
++200,
++201,
++201,
++201,
++201,
++202,
++202,
++202,
++203,
++203,
++203,
++203,
++204,
++204,
++204,
++204,
++205,
++205,
++205,
++205,
++206,
++206,
++206,
++206,
++207,
++207,
++207,
++207,
++208,
++208,
++208,
++208,
++209,
++209,
++209,
++209,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++212,
++212,
++212,
++212,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++214,
++214,
++214,
++214,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++216,
++216,
++216,
++216,
++217,
++217,
++217,
++217,
++218,
++218,
++218,
++218,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++220,
++220,
++220,
++220,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++222,
++222,
++222,
++222,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++224,
++224,
++224,
++224,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++226,
++226,
++226,
++226,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++228,
++228,
++228,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++230,
++230,
++230,
++230,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++233,
++233,
++233,
++233,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++235,
++235,
++235,
++235,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++237,
++237,
++237,
++237,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++239,
++239,
++239,
++239,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++241,
++241,
++241,
++241,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++243,
++243,
++243,
++243,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++245,
++245,
++245,
++245,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++247,
++247,
++247,
++247,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++249,
++249,
++249,
++249,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++251,
++251,
++251,
++251,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++254,
++254,
++254,
++254,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255
+Index: git/drivers/media/video/isp/isp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isp.c 2009-02-12 15:21:14.000000000 -0600
+@@ -0,0 +1,2301 @@
++/*
++ * drivers/media/video/isp/isp.c
++ *
++ * Driver Library for ISP Control module in TI's OMAP3430 Camera ISP
++ * ISP interface and IRQ related APIs are defined here.
++ *
++ * Copyright (C) 2008 Texas Instruments.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/interrupt.h>
++#include <linux/clk.h>
++#include <asm/irq.h>
++#include <asm/scatterlist.h>
++#include <asm/mach-types.h>
++#include <linux/device.h>
++#include <linux/autoconf.h>
++#include <asm/io.h>
++
++#include "isp.h"
++#include "ispreg.h"
++#include "ispccdc.h"
++#include "isppreview.h"
++#include "ispresizer.h"
++#include "ispmmu.h"
++#include "isph3a.h"
++#include "isp_af.h"
++#include "isphist.h"
++
++#define ISP_XCLKA_DEFAULT 0x12
++
++#ifdef CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER
++#define USE_ISP_PREVIEW
++#endif
++
++#ifdef CONFIG_VIDEO_OMAP34XX_ISP_RESIZER
++#define USE_ISP_RESZ
++#endif
++/* list of image formats supported via OMAP ISP */
++const static struct v4l2_fmtdesc isp_formats[] = {
++ {
++#ifndef ENABLE_BT_656_CAPTURE
++ .description = "UYVY, packed",
++#else
++ .description = "UYVY (YUV 4:2:2), packed",
++#endif
++ .pixelformat = V4L2_PIX_FMT_UYVY,
++ },
++ {
++ .description = "YUYV (YUV 4:2:2), packed",
++ .pixelformat = V4L2_PIX_FMT_YUYV,
++ },
++ {
++ .description = "Bayer10 (GrR/BGb)",
++ .pixelformat = V4L2_PIX_FMT_SGRBG10,
++ },
++};
++
++#define NUM_ISP_CAPTURE_FORMATS (sizeof(isp_formats)/sizeof(isp_formats[0]))
++
++
++/* ISP Crop capabilities */
++static struct v4l2_rect ispcroprect;
++static struct v4l2_rect cur_rect;
++
++/* Video controls */
++static struct vcontrol {
++ struct v4l2_queryctrl qc;
++ int current_value;
++} video_control[] = {
++ {
++ {
++ .id = V4L2_CID_BRIGHTNESS,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Brightness",
++ .minimum = ISPPRV_BRIGHT_LOW,
++ .maximum = ISPPRV_BRIGHT_HIGH,
++ .step = ISPPRV_BRIGHT_STEP,
++ .default_value = ISPPRV_BRIGHT_DEF,
++ },
++ .current_value = ISPPRV_BRIGHT_DEF,
++ },
++ {
++ {
++ .id = V4L2_CID_CONTRAST,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Contrast",
++ .minimum = ISPPRV_CONTRAST_LOW,
++ .maximum = ISPPRV_CONTRAST_HIGH,
++ .step = ISPPRV_CONTRAST_STEP,
++ .default_value = ISPPRV_CONTRAST_DEF,
++ },
++ .current_value = ISPPRV_CONTRAST_DEF,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_COLOR_FX,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Color Effects",
++ .minimum = PREV_DEFAULT_COLOR,
++ .maximum = PREV_SEPIA_COLOR,
++ .step = 1,
++ .default_value = PREV_DEFAULT_COLOR,
++ },
++ .current_value = PREV_DEFAULT_COLOR,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_CCDC_CFG,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "CCDC",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_PRV_CFG,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Previewer",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_LSC_UPDATE,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Tables",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_AEWB_CFG,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Auto Exposure, Auto WB Config",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_AEWB_REQ,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "AEWB Request Statistics",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_AF_CFG,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Auto Focus Config",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ },
++ {
++ {
++ .id = V4L2_CID_PRIVATE_ISP_AF_REQ,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "AF Request Statistics",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ },
++ .current_value = 0,
++ }
++};
++
++/*Structure for IRQ related info */
++static struct ispirq {
++ isp_callback_t isp_callbk[10];
++ isp_vbq_callback_ptr isp_callbk_arg1[10];
++ void *isp_callbk_arg2[10];
++} ispirq_obj;
++
++/* Structure for storing ISP Control module information*/
++static struct isp {
++ spinlock_t lock; /* spinlock to sync b/w isr and processes */
++ spinlock_t isp_temp_buf_lock;
++ struct mutex isp_mutex;
++ u8 if_status;
++ u8 interfacetype;
++ int ref_count;
++ struct clk *cam_ick;
++ struct clk *cam_fck;
++} isp_obj;
++
++struct isp_sgdma ispsg;
++
++/* Structure for storing ISP sub-module information - CCDC,PRV,RSZ */
++struct ispmodule {
++ /* Bit mask for sub-modules enabled within the ISP */
++ unsigned int isp_pipeline;
++ int isp_temp_state;
++ int applyCrop;
++ struct v4l2_pix_format pix;
++ /* tried ISP output sizes for video mode */
++ unsigned int ccdc_input_width;
++ unsigned int ccdc_input_height;
++ unsigned int ccdc_output_width;
++ unsigned int ccdc_output_height;
++ unsigned int preview_input_width;
++ unsigned int preview_input_height;
++ unsigned int preview_output_width;
++ unsigned int preview_output_height;
++ unsigned int resizer_input_width;
++ unsigned int resizer_input_height;
++ unsigned int resizer_output_width;
++ unsigned int resizer_output_height;
++#ifdef ENABLE_BT_656_CAPTURE
++ /* Flag to indicate whether capture is interlaced or progressive */
++ int capture_type;
++ int current_field;
++ __u32 input_pixelformat;
++#endif
++};
++
++#ifdef ENABLE_BT_656_CAPTURE
++#define ISP_SD_STD_PARAMS \
++ {"NTSC", 858, 525, 720, 480, 720 * 2, 30, V4L2_PIX_FMT_UYVY, \
++ V4L2_FIELD_INTERLACED, 720 * 2, 720 * 2 * 480, \
++ V4L2_COLORSPACE_SMPTE170M}, \
++ {"PAL", 864, 625, 720, 576, 720 * 2, 25, V4L2_PIX_FMT_UYVY, \
++ V4L2_FIELD_INTERLACED, 720 * 2, 720 * 2 * 480, \
++ V4L2_COLORSPACE_SMPTE170M}
++
++struct isp_std_config_params {
++ char name[30];
++ unsigned int num_pixels;
++ unsigned int num_lines;
++ unsigned int active_pixels;
++ unsigned int active_lines;
++ unsigned int pitch;
++ unsigned int fps;
++ __u32 pixelformat;
++ enum v4l2_field field;
++ __u32 bytesperline;
++ __u32 sizeimage;
++ enum v4l2_colorspace colorspace;
++};
++
++static struct isp_std_config_params std_params[] = {
++ ISP_SD_STD_PARAMS
++};
++#endif
++
++static struct ispmodule ispmodule_obj = {
++ .isp_pipeline = OMAP_ISP_CCDC,
++ .isp_temp_state = ISP_BUF_INIT,
++ .applyCrop = 0,
++ .pix = {
++ .width = 176,
++ .height = 144,
++ .pixelformat = V4L2_PIX_FMT_UYVY,
++ .field = V4L2_FIELD_NONE,
++ .bytesperline = 176*2,
++ .colorspace = V4L2_COLORSPACE_JPEG,
++ .priv = 0,
++ },
++#ifdef ENABLE_BT_656_CAPTURE
++ .capture_type = 0,
++ .current_field = 0,
++ .input_pixelformat = V4L2_PIX_FMT_UYVY,
++#endif
++};
++
++/* Structure for saving/restoring ISP module registers*/
++
++static struct isp_reg isp_reg_list[] = {
++ {ISP_SYSCONFIG, 0x0000},
++ {ISP_IRQ0ENABLE, 0x0000},
++ {ISP_IRQ1ENABLE, 0x0000},
++ {ISP_TCTRL_GRESET_LENGTH, 0x0000},
++ {ISP_TCTRL_PSTRB_REPLAY, 0x0000},
++ {ISP_CTRL, 0x0000},
++ {ISP_TCTRL_CTRL, 0x0000},
++ {ISP_TCTRL_FRAME, 0x0000},
++ {ISP_TCTRL_PSTRB_DELAY, 0x0000},
++ {ISP_TCTRL_STRB_DELAY, 0x0000},
++ {ISP_TCTRL_SHUT_DELAY, 0x0000},
++ {ISP_TCTRL_PSTRB_LENGTH, 0x0000},
++ {ISP_TCTRL_STRB_LENGTH, 0x0000},
++ {ISP_TCTRL_SHUT_LENGTH, 0x0000},
++ {ISP_CBUFF_SYSCONFIG, 0x0000},
++ {ISP_CBUFF_IRQENABLE, 0x0000},
++ {ISP_CBUFF0_CTRL, 0x0000},
++ {ISP_CBUFF1_CTRL, 0x0000},
++ {ISP_CBUFF0_START, 0x0000},
++ {ISP_CBUFF1_START, 0x0000},
++ {ISP_CBUFF0_END, 0x0000},
++ {ISP_CBUFF1_END, 0x0000},
++ {ISP_CBUFF0_WINDOWSIZE, 0x0000},
++ {ISP_CBUFF1_WINDOWSIZE, 0x0000},
++ {ISP_CBUFF0_THRESHOLD, 0x0000},
++ {ISP_CBUFF1_THRESHOLD, 0x0000},
++ {ISP_TOK_TERM, 0x0000}
++};
++
++/*
++ *
++ * V4L2 Handling
++ *
++ */
++
++/* Returns the index of the requested ID from the control structure array */
++static int
++find_vctrl(int id)
++{
++ int i;
++
++ if (id < V4L2_CID_BASE)
++ return -EDOM;
++
++ for (i = (ARRAY_SIZE(video_control) - 1); i >= 0; i--)
++ if (video_control[i].qc.id == id)
++ break;
++ if (i < 0)
++ i = -EINVAL;
++ return i;
++}
++
++void isp_open(void)
++{
++ ispccdc_request();
++ isppreview_request();
++ ispresizer_request();
++ return;
++}
++EXPORT_SYMBOL(isp_open);
++
++void isp_close(void)
++{
++ ispccdc_free();
++ isppreview_free();
++ ispresizer_free();
++ memset(&ispcroprect, 0, sizeof(ispcroprect));
++ memset(&cur_rect, 0, sizeof(cur_rect));
++ return;
++}
++EXPORT_SYMBOL(isp_close);
++
++/* flag to check first time of isp_get */
++static int off_mode;
++
++int isp_set_sgdma_callback(struct isp_sgdma_state *sgdma_state,
++ isp_vbq_callback_ptr func_ptr)
++{
++#ifdef USE_ISP_RESZ
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) {
++ isp_set_callback(CBK_RESZ_DONE, sgdma_state->callback,
++ func_ptr, sgdma_state->arg);
++ }
++#endif
++
++#ifdef USE_ISP_PREVIEW
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW) {
++ isp_set_callback(CBK_PREV_DONE, sgdma_state->callback,
++ func_ptr, sgdma_state->arg);
++ }
++#endif
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_CCDC) {
++ isp_set_callback(CBK_CCDC_VD0, sgdma_state->callback, func_ptr,
++ sgdma_state->arg);
++ isp_set_callback(CBK_CCDC_VD1, sgdma_state->callback, func_ptr,
++ sgdma_state->arg);
++#ifndef ENABLE_BT_656_CAPTURE
++ isp_set_callback(CBK_LSC_ISR, NULL, NULL, NULL);
++#endif
++ }
++ isp_set_callback(CBK_HS_VS, sgdma_state->callback, func_ptr,
++ sgdma_state->arg);
++ return 0;
++}
++
++/*
++ *Sets the callback for the ISP module done events.
++ * type : Type of the event for which callback is requested.
++ * callback : Method to be called as callback in the ISR context.
++ * arg1 : Argument to be passed when callback is called in ISR.
++ * arg2 : Argument to be passed when callback is called in ISR.
++ */
++int isp_set_callback(enum isp_callback_type type, isp_callback_t callback,
++ isp_vbq_callback_ptr arg1,
++ void *arg2)
++{
++ unsigned long irqflags = 0;
++
++ if (callback == NULL) {
++ DPRINTK_ISPCTRL("ISP_ERR : Null Callback\n");
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&isp_obj.lock, irqflags);
++ ispirq_obj.isp_callbk[type] = callback;
++ ispirq_obj.isp_callbk_arg1[type] = arg1;
++ ispirq_obj.isp_callbk_arg2[type] = arg2;
++ spin_unlock_irqrestore(&isp_obj.lock, irqflags);
++
++ switch (type) {
++ case CBK_HS_VS:
++ omap_writel(IRQ0ENABLE_HS_VS_IRQ, ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) | IRQ0ENABLE_HS_VS_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_PREV_DONE:
++ omap_writel(IRQ0ENABLE_PRV_DONE_IRQ, ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) |
++ IRQ0ENABLE_PRV_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_RESZ_DONE:
++ omap_writel(IRQ0ENABLE_RSZ_DONE_IRQ, ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) |
++ IRQ0ENABLE_RSZ_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_MMU_ERR:
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) |
++ IRQ0ENABLE_MMU_ERR_IRQ,
++ ISP_IRQ0ENABLE);
++
++ omap_writel(omap_readl(ISPMMU_IRQENABLE) |
++ IRQENABLE_MULTIHITFAULT |
++ IRQENABLE_TWFAULT |
++ IRQENABLE_EMUMISS |
++ IRQENABLE_TRANSLNFAULT |
++ IRQENABLE_TLBMISS,
++ ISPMMU_IRQENABLE);
++ break;
++ case CBK_H3A_AWB_DONE:
++ omap_writel(IRQ0ENABLE_H3A_AWB_DONE_IRQ, ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) |
++ IRQ0ENABLE_H3A_AWB_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_H3A_AF_DONE:
++ omap_writel(IRQ0ENABLE_H3A_AF_DONE_IRQ, ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE)|
++ IRQ0ENABLE_H3A_AF_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_HIST_DONE:
++ omap_writel(IRQ0ENABLE_HIST_DONE_IRQ, ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) |
++ IRQ0ENABLE_HIST_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_LSC_ISR:
++ omap_writel(IRQ0ENABLE_CCDC_LSC_DONE_IRQ |
++ IRQ0ENABLE_CCDC_LSC_PREF_COMP_IRQ |
++ IRQ0ENABLE_CCDC_LSC_PREF_ERR_IRQ,
++ ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) |
++ IRQ0ENABLE_CCDC_LSC_DONE_IRQ |
++ IRQ0ENABLE_CCDC_LSC_PREF_COMP_IRQ |
++ IRQ0ENABLE_CCDC_LSC_PREF_ERR_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ default:
++ break;
++ };
++
++ return 0;
++}
++EXPORT_SYMBOL(isp_set_callback);
++
++/**
++ * isp_unset_callback - Clears the callback for the ISP module done events.
++ * @type: Type of the event for which callback to be cleared.
++ *
++ * This function clears a callback function for a done event in the ISP
++ * module, and disables the corresponding interrupt.
++ **/
++int isp_unset_callback(enum isp_callback_type type)
++{
++ unsigned long irqflags = 0;
++
++ spin_lock_irqsave(&isp_obj.lock, irqflags);
++ ispirq_obj.isp_callbk[type] = NULL;
++ ispirq_obj.isp_callbk_arg1[type] = NULL;
++ ispirq_obj.isp_callbk_arg2[type] = NULL;
++ spin_unlock_irqrestore(&isp_obj.lock, irqflags);
++
++ switch (type) {
++ case CBK_CCDC_VD0:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_CCDC_VD0_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_CCDC_VD1:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_CCDC_VD1_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_PREV_DONE:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_PRV_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_RESZ_DONE:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_RSZ_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_MMU_ERR:
++ omap_writel(omap_readl(ISPMMU_IRQENABLE) &
++ ~(IRQENABLE_MULTIHITFAULT |
++ IRQENABLE_TWFAULT |
++ IRQENABLE_EMUMISS |
++ IRQENABLE_TRANSLNFAULT |
++ IRQENABLE_TLBMISS),
++ ISPMMU_IRQENABLE);
++ break;
++ case CBK_H3A_AWB_DONE:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_H3A_AWB_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_H3A_AF_DONE:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE))&
++ (~IRQ0ENABLE_H3A_AF_DONE_IRQ),ISP_IRQ0ENABLE);
++ break;
++ case CBK_HIST_DONE:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_HIST_DONE_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_HS_VS:
++ omap_writel((omap_readl(ISP_IRQ0ENABLE)) &
++ ~IRQ0ENABLE_HS_VS_IRQ,
++ ISP_IRQ0ENABLE);
++ break;
++ case CBK_LSC_ISR:
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) &
++ ~(IRQ0ENABLE_CCDC_LSC_DONE_IRQ |
++ IRQ0ENABLE_CCDC_LSC_PREF_COMP_IRQ |
++ IRQ0ENABLE_CCDC_LSC_PREF_ERR_IRQ),
++ ISP_IRQ0ENABLE);
++ break;
++ default:
++ break;
++ };
++ return 0;
++}
++EXPORT_SYMBOL(isp_unset_callback);
++
++/**
++ * isp_request_interface - Requests an ISP interface type (parallel or serial).
++ * @if_t: Type of requested ISP interface (parallel or serial).
++ *
++ * This function requests for allocation of an ISP interface type.
++ **/
++int isp_request_interface(enum isp_interface_type if_t)
++{
++ if (isp_obj.if_status & if_t) {
++ DPRINTK_ISPCTRL("ISP_ERR : Requested Interface already \
++ allocated\n");
++ goto err_ebusy;
++ }
++ if ((isp_obj.if_status == (ISP_PARLL | ISP_CSIA))
++ || isp_obj.if_status == (ISP_CSIA | ISP_CSIB)) {
++ DPRINTK_ISPCTRL("ISP_ERR : No Free interface now\n");
++ goto err_ebusy;
++ }
++
++ if (((isp_obj.if_status == ISP_PARLL) && (if_t == ISP_CSIA)) ||
++ ((isp_obj.if_status == ISP_CSIA) &&
++ (if_t == ISP_PARLL)) ||
++ ((isp_obj.if_status == ISP_CSIA) &&
++ (if_t == ISP_CSIB)) ||
++ ((isp_obj.if_status == ISP_CSIB) &&
++ (if_t == ISP_CSIA)) ||
++ (isp_obj.if_status == 0)) {
++ isp_obj.if_status |= if_t;
++ return 0;
++ } else {
++ DPRINTK_ISPCTRL("ISP_ERR : Invalid Combination Serial- \
++ Parallel interface\n");
++ return -EINVAL;
++ }
++
++err_ebusy:
++ return -EBUSY;
++}
++EXPORT_SYMBOL(isp_request_interface);
++
++/**
++ * isp_free_interface - Frees an ISP interface type (parallel or serial).
++ * @if_t: Type of ISP interface to be freed (parallel or serial).
++ *
++ * This function frees the allocation of an ISP interface type.
++ **/
++int isp_free_interface(enum isp_interface_type if_t)
++{
++ isp_obj.if_status &= ~if_t;
++ return 0;
++}
++EXPORT_SYMBOL(isp_free_interface);
++
++/**
++ * isp_set_xclk - Configures the specified cam_xclk to the desired frequency.
++ * @xclk: Desired frequency of the clock in Hz.
++ * @xclksel: XCLK to configure (0 = A, 1 = B).
++ *
++ * Configures the specified MCLK divisor in the ISP timing control register
++ * (TCTRL_CTRL) to generate the desired xclk clock value.
++ *
++ * Divisor = CM_CAM_MCLK_HZ / xclk
++ *
++ * Returns the final frequency that is actually being generated
++ **/
++u32 isp_set_xclk(u32 xclk, u8 xclksel)
++{
++ u32 divisor;
++ u32 currentxclk;
++
++ if (xclk == CM_CAM_MCLK_HZ) {
++ divisor = (xclksel == 0) ? ISPTCTRL_CTRL_DIVA_Bypass :
++ ISPTCTRL_CTRL_DIVB_Bypass;
++ currentxclk = CM_CAM_MCLK_HZ;
++ } else {
++ if (xclk >= 2) {
++ divisor = CM_CAM_MCLK_HZ / xclk;
++ divisor &= (xclksel == 0) ? ISPTCTRL_CTRL_DIVA_Bypass :
++ ISPTCTRL_CTRL_DIVB_Bypass;
++ currentxclk = CM_CAM_MCLK_HZ / divisor;
++ } else {
++ divisor = xclk;
++ currentxclk = 0;
++ }
++ }
++
++ switch (xclksel) {
++ case 0:
++ omap_writel((omap_readl(ISP_TCTRL_CTRL) &
++ ~ISPTCTRL_CTRL_DIVA_Bypass) |
++ (divisor << ISPTCTRL_CTRL_DIVA_SHIFT),
++ ISP_TCTRL_CTRL);
++ DPRINTK_ISPCTRL("isp_set_xclk(): cam_xclka set to %x Hz\n",
++ currentxclk);
++ break;
++ case 1:
++ omap_writel((omap_readl(ISP_TCTRL_CTRL) &
++ ~ISPTCTRL_CTRL_DIVB_Bypass) |
++ (divisor << ISPTCTRL_CTRL_DIVB_SHIFT),
++ ISP_TCTRL_CTRL);
++ DPRINTK_ISPCTRL("isp_set_xclk(): cam_xclkb set to %x Hz\n",
++ currentxclk);
++ break;
++ default:
++ DPRINTK_ISPCTRL("ISP_ERR: isp_set_xclk(): Invalid requested "
++ "xclk. Must be 0 (A) or 1 (B)."
++ "\n");
++ return -EINVAL;
++ }
++
++ return currentxclk;
++}
++EXPORT_SYMBOL(isp_set_xclk);
++
++/**
++ * isp_get_xclk - Returns the frequency in Hz of the desired cam_xclk.
++ * @xclksel: XCLK to retrieve (0 = A, 1 = B).
++ *
++ * This function returns the External Clock (XCLKA or XCLKB) value generated
++ * by the ISP.
++ **/
++u32 isp_get_xclk(u8 xclksel)
++{
++ u32 xclkdiv;
++ u32 xclk;
++
++ switch (xclksel) {
++ case 0:
++ xclkdiv = omap_readl(ISP_TCTRL_CTRL) & ISPTCTRL_CTRL_DIVA_MASK;
++ xclkdiv = xclkdiv >> ISPTCTRL_CTRL_DIVA_SHIFT;
++ break;
++ case 1:
++ xclkdiv = omap_readl(ISP_TCTRL_CTRL) & ISPTCTRL_CTRL_DIVB_MASK;
++ xclkdiv = xclkdiv >> ISPTCTRL_CTRL_DIVB_SHIFT;
++ break;
++ default:
++ DPRINTK_ISPCTRL("ISP_ERR: isp_get_xclk(): Invalid requested "
++ "xclk. Must be 0 (A) or 1 (B)."
++ "\n");
++ return -EINVAL;
++ }
++
++ switch (xclkdiv) {
++ case 0:
++ case 1:
++ xclk = 0;
++ break;
++ case 0x1f:
++ xclk = CM_CAM_MCLK_HZ;
++ break;
++ default:
++ xclk = CM_CAM_MCLK_HZ / xclkdiv;
++ }
++
++ return xclk;
++}
++EXPORT_SYMBOL(isp_get_xclk);
++
++/**
++ * isp_power_settings - Sysconfig settings, for Power Management.
++ * @isp_sysconfig: Structure containing the power settings for ISP to configure
++ *
++ * Sets the power settings for the ISP, and SBL bus.
++ **/
++void isp_power_settings(struct isp_sysc isp_sysconfig)
++{
++ if (isp_sysconfig.idle_mode) {
++ omap_writel(ISP_SYSCONFIG_AUTOIDLE |
++ (ISP_SYSCONFIG_MIdleMode_SmartStandBy <<
++ ISP_SYSCONFIG_MIdleMode_SHIFT),
++ ISP_SYSCONFIG);
++
++ omap_writel(ISPMMU_AUTOIDLE | (ISPMMU_SIdlemode_Smartidle <<
++ ISPMMU_SIdlemode_Shift),
++ ISPMMU_SYSCONFIG);
++/// if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0)) {
++ omap_writel(ISPCSI1_AUTOIDLE |
++ (ISPCSI1_MIdleMode_SmartStandBy <<
++ ISPCSI1_MIdleMode_Shift),
++ ISP_CSIA_SYSCONFIG);
++ omap_writel(ISPCSI1_AUTOIDLE |
++ (ISPCSI1_MIdleMode_SmartStandBy <<
++ ISPCSI1_MIdleMode_Shift),
++ ISP_CSIB_SYSCONFIG);
++/// }
++ omap_writel(ISPCTRL_SBL_AutoIdle, ISP_CTRL);
++
++ } else {
++ omap_writel(ISP_SYSCONFIG_AUTOIDLE |
++ (ISP_SYSCONFIG_MIdleMode_ForceStandBy <<
++ ISP_SYSCONFIG_MIdleMode_SHIFT), ISP_SYSCONFIG);
++
++ omap_writel(ISPMMU_AUTOIDLE |
++ (ISPMMU_SIdlemode_Noidle << ISPMMU_SIdlemode_Shift),
++ ISPMMU_SYSCONFIG);
++/// if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0)) {
++ omap_writel(ISPCSI1_AUTOIDLE |
++ (ISPCSI1_MIdleMode_ForceStandBy <<
++ ISPCSI1_MIdleMode_Shift), ISP_CSIA_SYSCONFIG);
++
++ omap_writel(ISPCSI1_AUTOIDLE |
++ (ISPCSI1_MIdleMode_ForceStandBy <<
++ ISPCSI1_MIdleMode_Shift), ISP_CSIB_SYSCONFIG);
++/// }
++
++ omap_writel(ISPCTRL_SBL_AutoIdle, ISP_CTRL);
++
++ }
++
++
++}
++EXPORT_SYMBOL(isp_power_settings);
++
++/**
++ * isp_configure_interface - Configures ISP Control I/F related parameters.
++ * @config: Structure containing the desired configuration for the ISP.
++ *
++ * Configures ISP control register (ISP_CTRL) with the values specified inside
++ * the config structure. Controls:
++ * - Selection of parallel or serial input to the preview hardware.
++ * - Data lane shifter.
++ * - Pixel clock polarity.
++ * - 8 to 16-bit bridge at the input of CCDC module.
++ * - HS or VS synchronization signal detection
++ **/
++int isp_configure_interface(struct isp_interface_config *config)
++{
++ u32 ispctrl_val = omap_readl(ISP_CTRL);
++ u32 ispccdc_vdint_val;
++
++ ispctrl_val &= (ISPCTRL_PAR_SER_CLK_SEL_MASK);
++ ispctrl_val |= config->ccdc_par_ser;
++ ispctrl_val &= ISPCTRL_SHIFT_MASK;
++ ispctrl_val |= (config->dataline_shift << ISPCTRL_SHIFT_SHIFT);
++ ispctrl_val &= ~ISPCTRL_PAR_CLK_POL_INV;
++ ispctrl_val |= (config->para_clk_pol << ISPCTRL_PAR_CLK_POL_SHIFT);
++ ispctrl_val &= ~ISPCTRL_PAR_BRIDGE_BENDIAN;
++ ispctrl_val |= (config->par_bridge << ISPCTRL_PAR_BRIDGE_SHIFT);
++ ispctrl_val &= ~(ISPCTRL_SYNC_DETECT_VSRISE);
++ ispctrl_val |= (config->hsvs_syncdetect << ISPCTRL_SYNC_DETECT_SHIFT);
++
++ omap_writel(ispctrl_val, ISP_CTRL);
++
++ ispccdc_vdint_val = omap_readl(ISPCCDC_VDINT);
++ ispccdc_vdint_val &= ~(ISPCCDC_VDINT_0_MASK << ISPCCDC_VDINT_0_SHIFT);
++ ispccdc_vdint_val &= ~(ISPCCDC_VDINT_1_MASK << ISPCCDC_VDINT_1_SHIFT);
++ omap_writel((config->vdint0_timing << ISPCCDC_VDINT_0_SHIFT) |
++ (config->vdint1_timing <<
++ ISPCCDC_VDINT_1_SHIFT),
++ ISPCCDC_VDINT);
++ return 0;
++}
++EXPORT_SYMBOL(isp_configure_interface);
++
++/**
++ * isp_CCDC_VD01_enable - Enables VD0 and VD1 IRQs.
++ *
++ * Sets VD0 and VD1 bits in IRQ0STATUS to reset the flag, and sets them in
++ * IRQ0ENABLE to enable the corresponding IRQs.
++ **/
++void isp_CCDC_VD01_enable(void)
++{
++ omap_writel(IRQ0STATUS_CCDC_VD0_IRQ | IRQ0STATUS_CCDC_VD1_IRQ,
++ ISP_IRQ0STATUS);
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) | IRQ0ENABLE_CCDC_VD0_IRQ |
++ IRQ0ENABLE_CCDC_VD1_IRQ, ISP_IRQ0ENABLE);
++}
++
++/**
++ * isp_CCDC_VD01_disable - Disables VD0 and VD1 IRQs.
++ *
++ * Clears VD0 and VD1 bits in IRQ0ENABLE register.
++ **/
++void isp_CCDC_VD01_disable(void)
++{
++ omap_writel(omap_readl(ISP_IRQ0ENABLE) &
++ ~(IRQ0ENABLE_CCDC_VD0_IRQ | IRQ0ENABLE_CCDC_VD1_IRQ),
++ ISP_IRQ0ENABLE);
++}
++
++/**
++ * omap34xx_isp_isr - Interrupt Service Routine for Camera ISP module.
++ * @irq: Not used currently.
++ * @ispirq_disp: The object that is passed while request_irq is called.
++ * This is the ispirq_obj object containing info on the callback.
++ *
++ * Handles the corresponding callback if plugged in.
++ **/
++static irqreturn_t omap34xx_isp_isr(int irq, void *ispirq_disp)
++{
++ struct ispirq *irqdis = (struct ispirq *) ispirq_disp;
++ u32 irqstatus = 0;
++ unsigned long irqflags = 0;
++ u8 is_irqhandled = 0;
++
++ irqstatus = omap_readl(ISP_IRQ0STATUS);
++
++ spin_lock_irqsave(&isp_obj.lock, irqflags);
++
++ if ((irqstatus & MMU_ERR) == MMU_ERR) {
++ if (irqdis->isp_callbk[CBK_MMU_ERR])
++ irqdis->isp_callbk[CBK_MMU_ERR](irqstatus,
++ irqdis->isp_callbk_arg1[CBK_MMU_ERR],
++ irqdis->isp_callbk_arg2[CBK_MMU_ERR]);
++ is_irqhandled = 1;
++ goto out;
++ }
++
++ if ((irqstatus & CCDC_VD1) == CCDC_VD1) {
++ if (irqdis->isp_callbk[CBK_CCDC_VD1])
++ irqdis->isp_callbk[CBK_CCDC_VD1](CCDC_VD1,
++ irqdis->isp_callbk_arg1[CBK_CCDC_VD1],
++ irqdis->isp_callbk_arg2[CBK_CCDC_VD1]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & CCDC_VD0) == CCDC_VD0) {
++ if (irqdis->isp_callbk[CBK_CCDC_VD0])
++ irqdis->isp_callbk[CBK_CCDC_VD0](CCDC_VD0,
++ irqdis->isp_callbk_arg1[CBK_CCDC_VD0],
++ irqdis->isp_callbk_arg2[CBK_CCDC_VD0]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & PREV_DONE) == PREV_DONE) {
++ if (irqdis->isp_callbk[CBK_PREV_DONE])
++ irqdis->isp_callbk[CBK_PREV_DONE](PREV_DONE,
++ irqdis->isp_callbk_arg1[CBK_PREV_DONE],
++ irqdis->isp_callbk_arg2[CBK_PREV_DONE]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & RESZ_DONE) == RESZ_DONE) {
++ if (irqdis->isp_callbk[CBK_RESZ_DONE])
++ irqdis->isp_callbk[CBK_RESZ_DONE](RESZ_DONE,
++ irqdis->isp_callbk_arg1[CBK_RESZ_DONE],
++ irqdis->isp_callbk_arg2[CBK_RESZ_DONE]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & H3A_AWB_DONE) == H3A_AWB_DONE) {
++ if (irqdis->isp_callbk[CBK_H3A_AWB_DONE])
++ irqdis->isp_callbk[CBK_H3A_AWB_DONE](H3A_AWB_DONE,
++ irqdis->isp_callbk_arg1[CBK_H3A_AWB_DONE],
++ irqdis->isp_callbk_arg2[CBK_H3A_AWB_DONE]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & HIST_DONE) == HIST_DONE) {
++ if (irqdis->isp_callbk[CBK_HIST_DONE])
++ irqdis->isp_callbk[CBK_HIST_DONE](HIST_DONE,
++ irqdis->isp_callbk_arg1[CBK_HIST_DONE],
++ irqdis->isp_callbk_arg2[CBK_HIST_DONE]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & HS_VS) == HS_VS) {
++ if (irqdis->isp_callbk[CBK_HS_VS])
++ irqdis->isp_callbk[CBK_HS_VS](HS_VS,
++ irqdis->isp_callbk_arg1[CBK_HS_VS],
++ irqdis->isp_callbk_arg2[CBK_HS_VS]);
++ is_irqhandled = 1;
++ }
++
++ if ((irqstatus & H3A_AF_DONE) == H3A_AF_DONE){
++ if (irqdis->isp_callbk[CBK_H3A_AF_DONE])
++ irqdis->isp_callbk[CBK_H3A_AF_DONE](H3A_AF_DONE,
++ irqdis->isp_callbk_arg1[CBK_H3A_AF_DONE],
++ irqdis->isp_callbk_arg2[CBK_H3A_AF_DONE]);
++ is_irqhandled = 1;
++ }
++
++ if (irqstatus & LSC_PRE_ERR) {
++ DPRINTK_ISPCTRL("isp_sr: LSC_PRE_ERR \n");
++ omap_writel(irqstatus, ISP_IRQ0STATUS);
++ ispccdc_enable_lsc(0);
++ ispccdc_enable_lsc(1);
++ spin_unlock_irqrestore(&isp_obj.lock, irqflags);
++ return IRQ_HANDLED;
++ }
++out:
++ omap_writel(irqstatus, ISP_IRQ0STATUS);
++ spin_unlock_irqrestore(&isp_obj.lock, irqflags);
++
++ if (is_irqhandled)
++ return IRQ_HANDLED;
++ else
++ return IRQ_NONE;
++}
++#ifdef CONFIG_TRACK_RESOURCES
++/* device name needed for resource tracking layer */
++struct device_driver camera_drv = {
++ .name = "camera"
++};
++
++struct device camera_dev = {
++ .driver = &camera_drv,
++};
++#endif
++
++void isp_set_pipeline(int soc_type)
++{
++ ispmodule_obj.isp_pipeline |= OMAP_ISP_CCDC;
++
++ /* 1- Smart sensor, 0 - Raw sensor */
++ if (!soc_type)
++ ispmodule_obj.isp_pipeline |= (OMAP_ISP_PREVIEW |
++ OMAP_ISP_RESIZER);
++
++ return;
++}
++
++void
++omapisp_unset_callback()
++{
++ isp_unset_callback(CBK_HS_VS);
++#ifdef USE_ISP_RESZ
++ /* This has to occur before the vysnc of the intended frame comes */
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER)
++ isp_unset_callback(CBK_RESZ_DONE);
++#endif
++#ifdef USE_ISP_PREVIEW
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW)
++ isp_unset_callback(CBK_PREV_DONE);
++#endif
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_CCDC) {
++ isp_unset_callback(CBK_CCDC_VD0);
++ isp_unset_callback(CBK_CCDC_VD1);
++ isp_unset_callback(CBK_LSC_ISR);
++ }
++ omap_writel(omap_readl(ISP_IRQ0STATUS) | ISP_INT_CLR, ISP_IRQ0STATUS);
++}
++
++void isp_start(void)
++{
++ /* start the needed isp components assuming these components
++ * are configured correctly.
++ */
++#ifdef USE_ISP_PREVIEW
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW)
++ isppreview_enable(1);
++#endif
++ return ;
++}
++EXPORT_SYMBOL(isp_start);
++
++void isp_stop()
++{
++ int timeout;
++
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ ispmodule_obj.isp_temp_state = ISP_FREE_RUNNING;
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ omapisp_unset_callback();
++
++#ifdef USE_ISP_RESZ
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) {
++ ispresizer_enable(0);
++ timeout = 0;
++ while (ispresizer_busy() && (timeout < 20)) {
++ timeout++;
++ schedule();
++ }
++ }
++#endif
++#ifdef USE_ISP_PREVIEW
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW) {
++ isppreview_enable(0);
++ timeout = 0;
++ while (isppreview_busy() && (timeout < 20)) {
++ timeout++;
++ schedule();
++ }
++ }
++#endif
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_CCDC) {
++ ispccdc_enable(0);
++ timeout = 0;
++ while (ispccdc_busy() && (timeout < 20)) {
++ timeout++;
++ schedule();
++ }
++ }
++ if (ispccdc_busy() || isppreview_busy() || ispresizer_busy()) {
++ isp_save_ctx();
++ omap_writel(omap_readl(ISP_SYSCONFIG) |
++ ISP_SYSCONFIG_SOFTRESET, ISP_SYSCONFIG);
++ timeout = 0;
++ while ((!(omap_readl(ISP_SYSSTATUS) & 0x1)) && timeout < 40) {
++ timeout++;
++ mdelay(1);
++ }
++ isp_restore_ctx();
++ }
++}
++EXPORT_SYMBOL(isp_stop);
++
++void isp_set_buf(struct isp_sgdma_state *sgdma_state)
++{
++#ifdef USE_ISP_RESZ
++ /* This has to occur before the vysnc of the intended frame comes */
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) {
++ ispresizer_set_outaddr(sgdma_state->isp_addr);
++ } else
++#endif
++#ifdef USE_ISP_PREVIEW
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW) {
++ isppreview_set_outaddr(sgdma_state->isp_addr);
++ } else
++#endif
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_CCDC) {
++ ispccdc_set_outaddr(sgdma_state->isp_addr);
++ }
++}
++
++void isp_calc_pipeline(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output)
++{
++
++ ispmodule_obj.isp_pipeline = OMAP_ISP_CCDC;
++
++#ifdef ENABLE_BT_656_CAPTURE
++ if (pix_input->field == V4L2_FIELD_NONE)
++ ispmodule_obj.capture_type = 0; /* Progressive */
++ else
++ ispmodule_obj.capture_type = 1; /* Interlaced */
++
++ ispmodule_obj.input_pixelformat = pix_input->pixelformat;
++#endif
++
++ if ((pix_input->pixelformat == V4L2_PIX_FMT_SGRBG10) &&
++ (pix_output->pixelformat != V4L2_PIX_FMT_SGRBG10)) {
++ ispmodule_obj.isp_pipeline |= (OMAP_ISP_PREVIEW |
++ OMAP_ISP_RESIZER);
++ ispccdc_config_datapath(CCDC_RAW, CCDC_OTHERS_VP);
++ isppreview_config_datapath(PRV_RAW_CCDC,
++ PREVIEW_RSZ);
++ ispresizer_config_datapath(RSZ_OTFLY_YUV);
++ } else {
++ if (pix_input->pixelformat == V4L2_PIX_FMT_SGRBG10)
++ ispccdc_config_datapath(CCDC_RAW, CCDC_OTHERS_MEM);
++ else
++#ifndef ENABLE_BT_656_CAPTURE
++ ispccdc_config_datapath(CCDC_YUV_SYNC, CCDC_OTHERS_MEM);
++#else
++ ispccdc_config_datapath(CCDC_YUV_BT, CCDC_OTHERS_MEM);
++#endif
++ }
++ return;
++}
++
++
++void isp_config_pipeline(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output)
++{
++ ispccdc_config_size(ispmodule_obj.ccdc_input_width,
++ ispmodule_obj.ccdc_input_height,
++ ispmodule_obj.ccdc_output_width,
++ ispmodule_obj.ccdc_output_height);
++
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW)
++ isppreview_config_size(ispmodule_obj.preview_input_width,
++ ispmodule_obj.preview_input_height,
++ ispmodule_obj.preview_output_width,
++ ispmodule_obj.preview_output_height);
++
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER)
++ ispresizer_config_size(ispmodule_obj.resizer_input_width,
++ ispmodule_obj.resizer_input_height,
++ ispmodule_obj.resizer_output_width,
++ ispmodule_obj.resizer_output_height);
++
++#ifdef ENABLE_BT_656_CAPTURE
++ if (pix_input->pixelformat == V4L2_PIX_FMT_UYVY)
++ ispccdc_config_y8pos(Y8POS_ODD);
++ else if (pix_input->pixelformat == V4L2_PIX_FMT_YUYV)
++ ispccdc_config_y8pos(Y8POS_EVEN);
++
++ if (((pix_input->pixelformat == V4L2_PIX_FMT_UYVY) &&
++ (pix_output->pixelformat == V4L2_PIX_FMT_UYVY)) ||
++ ((pix_input->pixelformat == V4L2_PIX_FMT_YUYV) &&
++ (pix_output->pixelformat == V4L2_PIX_FMT_YUYV)))
++ /* input and output formats are in same order */
++ ispccdc_config_byteswap(0);
++ else if (((pix_input->pixelformat == V4L2_PIX_FMT_YUYV) &&
++ (pix_output->pixelformat == V4L2_PIX_FMT_UYVY)) ||
++ ((pix_input->pixelformat == V4L2_PIX_FMT_UYVY) &&
++ (pix_output->pixelformat == V4L2_PIX_FMT_YUYV)))
++ /* input and output formats are in reverse order */
++ ispccdc_config_byteswap(1);
++
++ /* Configure Pitch */
++ ispccdc_config_outlineoffset(ispmodule_obj.pix.bytesperline, 0, 0);
++#endif
++
++ if (pix_output->pixelformat == V4L2_PIX_FMT_UYVY) {
++ isppreview_config_ycpos(YCPOS_YCrYCb);
++#ifdef USE_ISP_RESZ
++ ispresizer_config_ycpos(0);
++#endif
++ } else {
++ isppreview_config_ycpos(YCPOS_CrYCbY);
++#ifdef USE_ISP_RESZ
++ ispresizer_config_ycpos(1);
++#endif
++ }
++
++ return;
++}
++
++/* Callback for interrupt completion*/
++void isp_vbq_done(unsigned long status, isp_vbq_callback_ptr arg1, void *arg2)
++{
++ struct videobuf_buffer *vb = (struct videobuf_buffer *) arg2;
++ int notify = 0;
++ int rval = 0;
++ unsigned long flags;
++#ifdef ENABLE_BT_656_CAPTURE
++ unsigned long fld_stat = (omap_readl(ISPCCDC_SYN_MODE) >> 15) & 0x1;
++#endif
++ switch (status) {
++ case CCDC_VD0:
++#ifdef ENABLE_BT_656_CAPTURE
++ if (ispmodule_obj.capture_type) {
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.current_field != fld_stat) {
++ if (fld_stat == 0)
++ ispmodule_obj.current_field = fld_stat;
++
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++ }
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++
++ if (fld_stat == 0) { /* Skip even fields */
++ return;
++ }
++ }
++#endif
++
++ ispccdc_config_shadow_registers();
++ if ((ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) ||
++ (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW))
++ return;
++ else {
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.isp_temp_state != ISP_BUF_INIT) {
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++
++ } else {
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ break;
++ }
++ }
++ break;
++ case CCDC_VD1:
++#ifdef ENABLE_BT_656_CAPTURE
++ if (ispmodule_obj.capture_type) {
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.current_field != fld_stat) {
++ if (fld_stat == 0)
++ ispmodule_obj.current_field = fld_stat;
++
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++ }
++
++ if (fld_stat == 0) { /* Skip even fields */
++ return;
++ }
++
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ }
++#endif
++
++ if ((ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) ||
++ (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW))
++ return;
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.isp_temp_state == ISP_BUF_INIT) {
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ ispccdc_enable(0);
++ return;
++ }
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++ break;
++
++#ifdef USE_ISP_PREVIEW
++ case PREV_DONE:
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) {
++ if (!ispmodule_obj.applyCrop &&
++ (ispmodule_obj.isp_temp_state ==
++ ISP_BUF_INIT))
++ ispresizer_enable(1);
++ if (ispmodule_obj.applyCrop && !ispresizer_busy()) {
++ ispresizer_enable(0);
++ ispresizer_applycrop();
++ ispmodule_obj.applyCrop = 0;
++ }
++ }
++ isppreview_config_shadow_registers();
++ isph3a_update_wb();
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER)
++ return;
++ break;
++#endif
++
++#ifdef USE_ISP_RESZ
++ case RESZ_DONE:
++ ispresizer_config_shadow_registers();
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.isp_temp_state != ISP_BUF_INIT) {
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++ }
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ break;
++#endif
++
++ case HS_VS:
++#ifndef ENABLE_BT_656_CAPTURE
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.isp_temp_state == ISP_BUF_TRAN) {
++ isp_CCDC_VD01_enable();
++ ispmodule_obj.isp_temp_state = ISP_BUF_INIT;
++ }
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++#else
++ if (ispmodule_obj.capture_type) {
++ ispmodule_obj.current_field ^= 1;
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if ((ispmodule_obj.isp_temp_state == ISP_BUF_TRAN) &&
++ (fld_stat == 1)) {
++ isp_CCDC_VD01_enable();
++ ispmodule_obj.current_field = fld_stat;
++ ispmodule_obj.isp_temp_state = ISP_BUF_INIT;
++ }
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++ } else {
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ if (ispmodule_obj.isp_temp_state == ISP_BUF_TRAN) {
++ isp_CCDC_VD01_enable();
++ ispmodule_obj.isp_temp_state = ISP_BUF_INIT;
++ }
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ return;
++ }
++#endif
++
++ default:
++ break;
++ }
++
++ spin_lock_irqsave(&ispsg.lock, flags);
++ ispsg.free_sgdma++;
++ if (ispsg.free_sgdma > NUM_SG_DMA)
++ ispsg.free_sgdma = NUM_SG_DMA;
++ spin_unlock_irqrestore(&ispsg.lock, flags);
++
++ rval = arg1(vb);
++
++ if (rval)
++ isp_sgdma_process(&ispsg, 1, &notify, arg1);
++
++ return;
++}
++
++void
++isp_sgdma_init()
++{
++ int sg;
++
++ ispsg.free_sgdma = NUM_SG_DMA;
++ ispsg.next_sgdma = 0;
++ for (sg = 0; sg < NUM_SG_DMA; sg++) {
++ ispsg.sg_state[sg].status = 0;
++ ispsg.sg_state[sg].callback = NULL;
++ ispsg.sg_state[sg].arg = NULL;
++ }
++}
++EXPORT_SYMBOL(isp_sgdma_init);
++
++void isp_sgdma_process(struct isp_sgdma *sgdma, int irq, int *dma_notify,
++ isp_vbq_callback_ptr func_ptr)
++{
++ struct isp_sgdma_state *sgdma_state;
++ unsigned long flags;
++ spin_lock_irqsave(&sgdma->lock, flags);
++
++ /* we can at most start or queue one sgdma */
++ if ((NUM_SG_DMA - sgdma->free_sgdma) > 0) {
++ /* get the next sgdma */
++ sgdma_state = sgdma->sg_state +
++ (sgdma->next_sgdma + sgdma->free_sgdma) % NUM_SG_DMA;
++ if (!irq) {
++ if (*dma_notify) {
++ /* case 1: queue & start. */
++ isp_set_sgdma_callback(sgdma_state, func_ptr);
++ isp_set_buf(sgdma_state);
++ ispccdc_enable(1);
++ isp_start();
++ *dma_notify = 0;
++ ispmodule_obj.isp_temp_state = ISP_BUF_TRAN;
++ } else {
++ /*
++ * case 3: only need to queue
++ * (update buf ptr).
++ */
++ if (ispmodule_obj.isp_temp_state ==
++ ISP_FREE_RUNNING) {
++ isp_set_sgdma_callback(sgdma_state,
++ func_ptr);
++ isp_set_buf(sgdma_state);
++ /* Non startup case */
++ ispccdc_enable(1);
++ ispmodule_obj.isp_temp_state =
++ ISP_BUF_TRAN;
++ }
++ }
++ } else {
++ /* case 3:only need to queue (update buf ptr). */
++ isp_set_sgdma_callback(sgdma_state, func_ptr);
++ isp_set_buf(sgdma_state);
++ /* Non startup case */
++ ispccdc_enable(1);
++ ispmodule_obj.isp_temp_state = ISP_BUF_INIT;
++ /* TODO: clear irq. old interrupt can come first.
++ * OK for preview.
++ */
++ if (*dma_notify) {
++ isp_start();
++ *dma_notify = 0;
++ }
++ }
++ } else {
++ spin_lock(&isp_obj.isp_temp_buf_lock);
++ /* Disable VD0 and CCDC here before next VSYNC */
++ isp_CCDC_VD01_disable();
++ ispmodule_obj.isp_temp_state = ISP_FREE_RUNNING;
++ spin_unlock(&isp_obj.isp_temp_buf_lock);
++ }
++ spin_unlock_irqrestore(&sgdma->lock, flags);
++ return;
++}
++
++int isp_sgdma_queue(struct videobuf_dmabuf *vdma, struct videobuf_buffer *vb,
++ int irq, int *dma_notify,
++ isp_vbq_callback_ptr func_ptr)
++{
++ unsigned long flags;
++ struct isp_sgdma_state *sg_state;
++ const struct scatterlist *sglist = vdma->sglist;
++ int sglen = vdma->sglen;
++
++ if ((sglen < 0) || ((sglen > 0) & !sglist))
++ return -EINVAL;
++
++ spin_lock_irqsave(&ispsg.lock, flags);
++
++ if (!ispsg.free_sgdma) {
++ spin_unlock_irqrestore(&ispsg.lock, flags);
++ return -EBUSY;
++ }
++
++ sg_state = ispsg.sg_state + ispsg.next_sgdma;
++ sg_state->isp_addr = ispsg.isp_addr_capture[vb->i];
++ sg_state->status = 0;
++ sg_state->callback = isp_vbq_done;
++ sg_state->arg = vb;
++
++ ispsg.next_sgdma = (ispsg.next_sgdma + 1) % NUM_SG_DMA;
++ ispsg.free_sgdma--;
++
++ spin_unlock_irqrestore(&ispsg.lock, flags);
++
++ isp_sgdma_process(&ispsg, irq, dma_notify, func_ptr);
++
++ return 0;
++}
++EXPORT_SYMBOL(isp_sgdma_queue);
++
++int isp_vbq_prepare(struct videobuf_queue *vbq, struct videobuf_buffer *vb,
++ enum v4l2_field field)
++{
++ unsigned int isp_addr;
++ struct videobuf_dmabuf *vdma;
++
++ int err = 0;
++
++ vdma = videobuf_to_dma(vb);
++
++ /* Map the address to ISP MMU */
++ isp_addr = ispmmu_map_sg(vdma->sglist, vdma->sglen);
++
++ if (!isp_addr)
++ err = -EIO;
++ else
++ ispsg.isp_addr_capture[vb->i] = isp_addr;
++
++ return err;
++}
++EXPORT_SYMBOL(isp_vbq_prepare);
++
++void isp_vbq_release(struct videobuf_queue *vbq, struct videobuf_buffer *vb)
++{
++ /* Un-Map the address in ISP MMU */
++ ispmmu_unmap(ispsg.isp_addr_capture[vb->i]);
++ ispsg.isp_addr_capture[vb->i] = (dma_addr_t) NULL;
++ vb->state = VIDEOBUF_NEEDS_INIT;
++ return;
++}
++EXPORT_SYMBOL(isp_vbq_release);
++
++int isp_queryctrl(struct v4l2_queryctrl *a)
++{
++ int i;
++
++ i = find_vctrl(a->id);
++ if (i == -EINVAL)
++ a->flags = V4L2_CTRL_FLAG_DISABLED;
++
++ if (i < 0)
++ return -EINVAL;
++
++ *a = video_control[i].qc;
++ return 0;
++}
++EXPORT_SYMBOL(isp_queryctrl);
++
++int isp_g_ctrl(struct v4l2_control *a)
++{
++ u8 current_value;
++ int rval = 0;
++
++ switch (a->id) {
++ case V4L2_CID_BRIGHTNESS:
++ isppreview_query_brightness(&current_value);
++ a->value = current_value / ISPPRV_BRIGHT_UNITS;
++ break;
++ case V4L2_CID_CONTRAST:
++ isppreview_query_contrast(&current_value);
++ a->value = current_value / ISPPRV_CONTRAST_UNITS;
++ break;
++ case V4L2_CID_PRIVATE_ISP_COLOR_FX:
++ isppreview_get_color(&current_value);
++ a->value = current_value;
++ break;
++ case V4L2_CID_PRIVATE_ISP_CCDC_CFG:
++ a->value = 0;
++ break;
++ case V4L2_CID_PRIVATE_ISP_PRV_CFG:
++ a->value = 0;
++ break;
++ case V4L2_CID_PRIVATE_ISP_LSC_UPDATE:
++ a->value = 0;
++ break;
++ case V4L2_CID_PRIVATE_ISP_AEWB_CFG:
++ a->value = 0;
++ break;
++ case V4L2_CID_PRIVATE_ISP_AEWB_REQ:
++ a->value = 0;
++ break;
++ case V4L2_CID_PRIVATE_ISP_AF_CFG:
++ a->value = 0;
++ break;
++ case V4L2_CID_PRIVATE_ISP_AF_REQ:
++ a->value = 0;
++ break;
++ default:
++ rval = -EINVAL;
++ break;
++ }
++ return rval;
++}
++EXPORT_SYMBOL(isp_g_ctrl);
++
++int isp_s_ctrl(struct v4l2_control *a)
++{
++ int rval = 0;
++ u8 new_value = a->value;
++
++ switch (a->id) {
++ case V4L2_CID_BRIGHTNESS:
++ if (new_value > ISPPRV_BRIGHT_HIGH)
++ rval = -EINVAL;
++ else
++ isppreview_update_brightness(&new_value);
++ break;
++ case V4L2_CID_CONTRAST:
++ if (new_value > ISPPRV_CONTRAST_HIGH)
++ rval = -EINVAL;
++ else
++ isppreview_update_contrast(&new_value);
++ break;
++ case V4L2_CID_PRIVATE_ISP_COLOR_FX:
++ if (new_value > PREV_SEPIA_COLOR)
++ rval = -EINVAL;
++ else
++ isppreview_set_color(&new_value);
++ break;
++ case V4L2_CID_PRIVATE_ISP_CCDC_CFG:
++ omap34xx_isp_ccdc_config((void *)a->value);
++ break;
++ case V4L2_CID_PRIVATE_ISP_PRV_CFG:
++ omap34xx_isp_preview_config((void *)a->value);
++ break;
++ case V4L2_CID_PRIVATE_ISP_LSC_UPDATE:
++ omap34xx_isp_tables_update((void *)a->value);
++ omap34xx_isp_lsc_update((void *)a->value);
++ break;
++ case V4L2_CID_PRIVATE_ISP_AEWB_CFG:
++ if (!a->value)
++ rval = -EFAULT;
++ else {
++ struct isph3a_aewb_config params;
++ if (copy_from_user(&params, (void *)a->value,
++ sizeof(params))) {
++ rval = -EFAULT;
++ printk(KERN_ERR "Failed copy_from_user\n");
++ } else
++ rval = isph3a_aewb_configure(&params);
++ }
++ break;
++ case V4L2_CID_PRIVATE_ISP_AEWB_REQ:
++ if (!a->value)
++ rval = -EFAULT;
++ else {
++ struct isph3a_aewb_data data;
++ if (copy_from_user(&data, (void *)a->value,
++ sizeof(data))) {
++ rval = -EFAULT;
++ printk(KERN_ERR "Failed copy_from_user\n");
++ break;
++ }
++ rval = isph3a_aewb_request_statistics(&data);
++ if (!rval)
++ if (copy_to_user((void *)a->value, &data,
++ sizeof(data))) {
++ rval = -EFAULT;
++ printk(KERN_ERR
++ "Failed copy_to_user\n");
++ }
++ }
++ break;
++ case V4L2_CID_PRIVATE_ISP_AF_CFG:
++ if (!a->value)
++ rval = -EFAULT;
++ else {
++ struct af_configuration params;
++
++ if (copy_from_user(&params, (struct af_configuration *)a->value,
++ sizeof(struct af_configuration))) {
++ rval = -EFAULT;
++ printk(KERN_ERR "Failed copy_from_user\n");
++ } else
++ rval = isp_af_configure(&params);
++ }
++ break;
++ case V4L2_CID_PRIVATE_ISP_AF_REQ:
++ if (!a->value)
++ rval = -EFAULT;
++ else {
++ struct isp_af_data data;
++ if (copy_from_user(&data, (void *) (a->value),
++ sizeof(data))) {
++ printk(KERN_ERR "Failed copy_from_user\n");
++ return -EFAULT;
++ }
++
++ if(data.update & LENS_CURRENT_POSITION){
++#if 0
++ if(dw9710_af_getfocus(&data.lens_current_position))
++#endif
++ return -EFAULT;
++
++ if (copy_to_user((void *)a->value, &data,
++ sizeof(data))) {
++ rval = -EFAULT;
++ printk(KERN_ERR
++ "Failed copy_to_user\n");
++ }
++ }
++ if(data.update & LENS_DESIRED_POSITION)
++#if 0
++ if(dw9710_af_setfocus(data.desired_lens_direction))
++#endif
++ return -EFAULT;
++
++ rval = isp_af_request_statistics(&data);
++ if (!rval)
++ if (copy_to_user((void *)a->value, &data,
++ sizeof(data))) {
++ rval = -EFAULT;
++ printk(KERN_ERR
++ "Failed copy_to_user\n");
++ }
++ }
++
++ break;
++ case V4L2_CID_PRIVATE_ISP_HIST_CFG:
++ if (!a->value)
++ rval = -EFAULT;
++ else {
++ struct isp_hist_config params;
++ if (copy_from_user(&params, (struct isp_hist_config *)a->value,
++ sizeof(struct isp_hist_config))) {
++ rval = -EFAULT;
++ printk(KERN_ERR "Failed copy_from_user\n");
++ } else
++ rval = isp_hist_configure(&params);
++ }
++ break;
++
++ case V4L2_CID_PRIVATE_ISP_HIST_REQ:
++ if (!a->value)
++ rval = -EFAULT;
++ else {
++ struct isp_hist_data data;
++
++ if (copy_from_user(&data, (struct isp_hist_data *)a->value,
++ sizeof(struct isp_hist_data))) {
++ rval = -EFAULT;
++ printk(KERN_ERR "Failed copy_from_user\n");
++ } else
++ rval = isp_hist_request_statistics(&data);
++ }
++ break;
++ default:
++ rval = -EINVAL;
++ break;
++ }
++ return rval;
++}
++EXPORT_SYMBOL(isp_s_ctrl);
++
++int isp_enum_fmt_cap(struct v4l2_fmtdesc *f)
++{
++ int index = f->index;
++ enum v4l2_buf_type type = f->type;
++ int rval = -EINVAL;
++#ifdef ENABLE_BT_656_CAPTURE
++ int num_formats = NUM_ISP_CAPTURE_FORMATS;
++
++ if (ispmodule_obj.input_pixelformat != V4L2_PIX_FMT_SGRBG10)
++ num_formats--;
++#endif
++
++#ifndef ENABLE_BT_656_CAPTURE
++ if (index >= NUM_ISP_CAPTURE_FORMATS)
++ goto err;
++#else
++ if (index >= num_formats)
++ goto err;
++#endif
++
++ memset(f, 0, sizeof(*f));
++ f->index = index;
++ f->type = type;
++
++ switch (f->type) {
++ case V4L2_BUF_TYPE_VIDEO_CAPTURE:
++ rval = 0;
++ break;
++ default:
++ goto err;
++ }
++
++ f->flags = isp_formats[index].flags;
++ strncpy(f->description, isp_formats[index].description,
++ sizeof(f->description));
++ f->pixelformat = isp_formats[index].pixelformat;
++err:
++ return rval;
++}
++EXPORT_SYMBOL(isp_enum_fmt_cap);
++
++void isp_g_fmt_cap(struct v4l2_format *f)
++{
++ f->fmt.pix = ispmodule_obj.pix;
++ return;
++}
++EXPORT_SYMBOL(isp_g_fmt_cap);
++
++int isp_s_fmt_cap(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output)
++{
++ int crop_scaling_w = 0;
++ int crop_scaling_h = 0;
++ int rval;
++
++ /* Call Try Size for the ISP */
++ isp_calc_pipeline(pix_input, pix_output);
++ rval = isp_try_size(pix_input, pix_output);
++
++ if (rval)
++ goto out;
++
++ rval = isp_try_fmt(pix_input, pix_output);
++ if (rval)
++ goto out;
++
++ /* Reset crop settings if needed as image size might have changed */
++ if (ispcroprect.width == pix_output->width) {
++ crop_scaling_w = 0;
++ } else {
++ if (ispcroprect.width != 0)
++ crop_scaling_w = 1;
++ ispcroprect.left = 0;
++ ispcroprect.width = pix_output->width;
++ }
++
++ if (ispcroprect.height == pix_output->height) {
++ crop_scaling_h = 0;
++ } else {
++ if (ispcroprect.height != 0)
++ crop_scaling_h = 1;
++ ispcroprect.top = 0;
++ ispcroprect.height = pix_output->height;
++ }
++
++ /* Configure the ISP */
++ isp_config_pipeline(pix_input, pix_output);
++ /* Reapply resizer settings in case a crop is set. */
++ if (crop_scaling_h || crop_scaling_w)
++ isp_config_crop(pix_output);
++out:
++ return rval;
++}
++EXPORT_SYMBOL(isp_s_fmt_cap);
++
++void isp_config_crop(struct v4l2_pix_format *croppix)
++{
++ u8 crop_scaling_w;
++ u8 crop_scaling_h;
++ struct v4l2_pix_format *pix = croppix;
++
++ crop_scaling_w = (ispmodule_obj.preview_output_width * 10) /
++ pix->width;
++ crop_scaling_h = (ispmodule_obj.preview_output_height * 10) /
++ pix->height;
++
++ cur_rect.left = (ispcroprect.left * crop_scaling_w) / 10;
++ cur_rect.top = (ispcroprect.top * crop_scaling_h) / 10;
++ cur_rect.width = (ispcroprect.width * crop_scaling_w) / 10;
++ cur_rect.height = (ispcroprect.height * crop_scaling_h) / 10;
++
++ ispresizer_trycrop(cur_rect.left, cur_rect.top, cur_rect.width,
++ cur_rect.height,
++ ispmodule_obj.resizer_output_width,
++ ispmodule_obj.resizer_output_height);
++ return;
++}
++
++int isp_g_crop(struct v4l2_crop *a)
++{
++ struct v4l2_crop *crop = a;
++
++ crop->c = ispcroprect;
++ return 0;
++}
++EXPORT_SYMBOL(isp_g_crop);
++
++int isp_s_crop(struct v4l2_crop *a, struct v4l2_pix_format *pix)
++{
++ struct v4l2_crop *crop = a;
++ int rval = 0;
++
++ if ((crop->c.left + crop->c.width) > pix->width) {
++ rval = -EINVAL;
++ goto out;
++ }
++
++ if ((crop->c.top + crop->c.height) > pix->height) {
++ rval = -EINVAL;
++ goto out;
++ }
++
++ ispcroprect.left = crop->c.left;
++ ispcroprect.top = crop->c.top;
++ ispcroprect.width = crop->c.width;
++ ispcroprect.height = crop->c.height;
++
++ isp_config_crop(pix);
++
++ ispmodule_obj.applyCrop = 1;
++out:
++ return rval;
++}
++EXPORT_SYMBOL(isp_s_crop);
++
++int isp_try_fmt_cap(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output)
++{
++ int rval = 0;
++
++ isp_calc_pipeline(pix_input, pix_output);
++ rval = isp_try_size(pix_input, pix_output);
++
++ if (rval)
++ goto out;
++
++ rval = isp_try_fmt(pix_input, pix_output);
++
++ if (rval)
++ goto out;
++
++out:
++ return rval;
++}
++EXPORT_SYMBOL(isp_try_fmt_cap);
++
++int isp_try_size(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output)
++{
++ int rval = 0;
++ /*
++ * First initialize local ISP struct
++ */
++ ispmodule_obj.ccdc_input_width = pix_input->width;
++ ispmodule_obj.ccdc_input_height = pix_input->height;
++ ispmodule_obj.resizer_output_width = pix_output->width;
++ ispmodule_obj.resizer_output_height = pix_output->height;
++
++ /* Try size for CCDC Module if enabled */
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_CCDC) {
++ rval = ispccdc_try_size(ispmodule_obj.ccdc_input_width,
++ ispmodule_obj.ccdc_input_height,
++ &ispmodule_obj.ccdc_output_width,
++ &ispmodule_obj.ccdc_output_height);
++ pix_output->width = ispmodule_obj.ccdc_output_width;
++ pix_output->height = ispmodule_obj.ccdc_output_height;
++ }
++
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_PREVIEW) {
++ ispmodule_obj.preview_input_width =
++ ispmodule_obj.ccdc_output_width;
++ ispmodule_obj.preview_input_height =
++ ispmodule_obj.ccdc_output_height;
++ rval = isppreview_try_size(ispmodule_obj.preview_input_width,
++ ispmodule_obj.preview_input_height,
++ &ispmodule_obj.preview_output_width,
++ &ispmodule_obj.preview_output_height);
++ pix_output->width = ispmodule_obj.preview_output_width;
++ pix_output->height = ispmodule_obj.preview_output_height;
++ }
++
++ if (ispmodule_obj.isp_pipeline & OMAP_ISP_RESIZER) {
++ ispmodule_obj.resizer_input_width =
++ ispmodule_obj.preview_output_width;
++ ispmodule_obj.resizer_input_height =
++ ispmodule_obj.preview_output_height;
++ rval = ispresizer_try_size(&ispmodule_obj.resizer_input_width,
++ &ispmodule_obj.resizer_input_height,
++ &ispmodule_obj.resizer_output_width,
++ &ispmodule_obj.resizer_output_height);
++ pix_output->width = ispmodule_obj.resizer_output_width;
++ pix_output->height = ispmodule_obj.resizer_output_height;
++ }
++ return rval;
++}
++EXPORT_SYMBOL(isp_try_size);
++
++int isp_try_fmt(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output)
++{
++ int ifmt;
++
++ /* done with size negotiation, now fill other info */
++ for (ifmt = 0; ifmt < NUM_ISP_CAPTURE_FORMATS; ifmt++) {
++ if (pix_output->pixelformat == isp_formats[ifmt].pixelformat)
++ break;
++ }
++ if (ifmt == NUM_ISP_CAPTURE_FORMATS)
++ ifmt = 1;
++ pix_output->pixelformat = isp_formats[ifmt].pixelformat;
++
++#ifndef ENABLE_BT_656_CAPTURE
++ pix_output->field = V4L2_FIELD_NONE;
++ pix_output->bytesperline = pix_output->width * 2;
++#else
++ pix_output->field = pix_input->field;
++#endif
++
++ pix_output->sizeimage = pix_output->bytesperline * pix_output->height;
++ pix_output->priv = 0;
++ switch (pix_output->pixelformat) {
++ case V4L2_PIX_FMT_YUYV:
++ case V4L2_PIX_FMT_UYVY:
++#ifndef ENABLE_BT_656_CAPTURE
++ pix_output->colorspace = V4L2_COLORSPACE_JPEG;
++#else
++ pix_output->colorspace = pix_input->colorspace;
++#endif
++ break;
++ default:
++ pix_output->colorspace = V4L2_COLORSPACE_SRGB;
++ break;
++ }
++
++ ispmodule_obj.pix.pixelformat = pix_output->pixelformat;
++ ispmodule_obj.pix.width = pix_output->width;
++ ispmodule_obj.pix.height = pix_output->height;
++ ispmodule_obj.pix.field = pix_output->field;
++ ispmodule_obj.pix.bytesperline = pix_output->bytesperline;
++ ispmodule_obj.pix.sizeimage = pix_output->sizeimage;
++ ispmodule_obj.pix.priv = pix_output->priv;
++ ispmodule_obj.pix.colorspace = pix_output->colorspace;
++ return 0;
++}
++
++#ifdef ENABLE_BT_656_CAPTURE
++/* Configure ISP depending on standard */
++int isp_configure_std(v4l2_std_id std)
++{
++ struct isp_std_config_params *params;
++ int rval = 0;
++ struct v4l2_pix_format pix_input, pix_output;
++
++ if (std & V4L2_STD_NTSC) {
++ params = &std_params[0];
++ } else if (std & V4L2_STD_PAL) {
++ params = &std_params[1];
++ } else
++ return -EINVAL;
++
++ ispmodule_obj.pix.pixelformat = params->pixelformat;
++ ispmodule_obj.pix.width = params->active_pixels;
++ ispmodule_obj.pix.height = params->active_lines;
++ ispmodule_obj.pix.field = params->field;
++ ispmodule_obj.pix.bytesperline = params->bytesperline;
++ ispmodule_obj.pix.sizeimage = params->sizeimage;
++ ispmodule_obj.pix.colorspace = params->colorspace;
++
++ if ((std & V4L2_STD_NTSC) || (std & V4L2_STD_PAL)) {
++ pix_input = ispmodule_obj.pix;
++ pix_output = ispmodule_obj.pix;
++ } else
++ return -EINVAL;
++
++ rval = isp_s_fmt_cap(&pix_input, &pix_output);
++
++ return rval;
++}
++EXPORT_SYMBOL(isp_configure_std);
++
++/* Checks for proper pixel parameters */
++int isp_check_format(struct v4l2_pix_format *pixfmt)
++{
++ u32 hpitch, vpitch;
++
++ if (pixfmt->bytesperline <= 0) {
++ DPRINTK_ISPCTRL("Invalid pitch\n");
++ return -EINVAL;
++ }
++
++ hpitch = pixfmt->bytesperline;
++ vpitch = pixfmt->sizeimage / hpitch;
++
++ /* Check for valid value of pitch */
++ if ((hpitch < ispmodule_obj.pix.width * 2) ||
++ (vpitch < ispmodule_obj.pix.height)) {
++ DPRINTK_ISPCTRL("Invalid pitch\n");
++ return -EINVAL;
++ }
++ /* Check for 32 byte alignment */
++ if (hpitch != (hpitch & ~0x1F)) {
++ DPRINTK_ISPCTRL("Invalid pitch alignment\n");
++ return -EINVAL;
++ }
++ pixfmt->width = ispmodule_obj.pix.width;
++ pixfmt->height = ispmodule_obj.pix.height;
++ return 0;
++}
++EXPORT_SYMBOL(isp_check_format);
++#endif
++
++/**
++ * isp_save_ctx - Saves ISP, CCDC, HIST, H3A, PREV, RESZ & MMU context.
++ *
++ * Routine for saving the context of each module in the ISP.
++ * CCDC, HIST, H3A, PREV, RESZ and MMU.
++ **/
++void isp_save_ctx(void)
++{
++ isp_save_context(isp_reg_list);
++ ispccdc_save_context();
++ isphist_save_context();
++ isph3a_save_context();
++ isppreview_save_context();
++ ispresizer_save_context();
++ ispmmu_save_context();
++}
++EXPORT_SYMBOL(isp_save_ctx);
++
++/**
++ * isp_restore_ctx - Restores ISP, CCDC, HIST, H3A, PREV, RESZ & MMU context.
++ *
++ * Routine for restoring the context of each module in the ISP.
++ * CCDC, HIST, H3A, PREV, RESZ and MMU.
++ **/
++void isp_restore_ctx(void)
++{
++ isp_restore_context(isp_reg_list);
++ ispccdc_restore_context();
++ isphist_restore_context();
++ isph3a_restore_context();
++ isppreview_restore_context();
++ ispresizer_restore_context();
++ ispmmu_restore_context();
++}
++EXPORT_SYMBOL(isp_restore_ctx);
++
++/**
++ * isp_get - Adquires the ISP resource.
++ *
++ * Initializes the clocks for the first acquire.
++ **/
++int isp_get(void)
++{
++ int ret_err = 0;
++ DPRINTK_ISPCTRL("isp_get: old %d\n", isp_obj.ref_count);
++ mutex_lock(&(isp_obj.isp_mutex));
++ if (isp_obj.ref_count == 0) {
++#ifdef CONFIG_TRACK_RESOURCES
++ isp_obj.cam_ick = clk_get(&camera_dev, "cam_ick");
++#else
++ isp_obj.cam_ick = clk_get(NULL, "cam_ick");
++#endif
++ if (IS_ERR(isp_obj.cam_ick)) {
++ mutex_unlock(&(isp_obj.isp_mutex));
++ DPRINTK_ISPCTRL("ISP_ERR: clk_get for ick failed\n");
++ return PTR_ERR(isp_obj.cam_ick);
++ }
++#ifndef ENABLE_BT_656_CAPTURE
++#ifdef CONFIG_TRACK_RESOURCES
++ isp_obj.cam_fck = clk_get(&camera_dev, "cam_mclk");
++#else
++ isp_obj.cam_fck = clk_get(NULL, "cam_mclk");
++#endif
++#else
++#ifdef CONFIG_TRACK_RESOURCES
++ isp_obj.cam_fck = clk_get(&camera_dev, "cam_fck");
++#else
++ isp_obj.cam_fck = clk_get(NULL, "cam_fck");
++#endif
++#endif
++ if (IS_ERR(isp_obj.cam_fck)) {
++ mutex_unlock(&(isp_obj.isp_mutex));
++ DPRINTK_ISPCTRL("ISP_ERR: clk_get for fck failed\n");
++ return PTR_ERR(isp_obj.cam_fck);
++ }
++ /* Cam IF Clk */
++ ret_err = clk_enable(isp_obj.cam_ick);
++ if (ret_err) {
++ mutex_unlock(&(isp_obj.isp_mutex));
++ clk_put(isp_obj.cam_ick);
++ clk_put(isp_obj.cam_fck);
++ DPRINTK_ISPCTRL("ISP_ERR: clk_en for ick failed\n");
++ return ret_err;
++ }
++ /* Cam Func Clk */
++ ret_err = clk_enable(isp_obj.cam_fck);
++ if (ret_err) {
++ mutex_unlock(&(isp_obj.isp_mutex));
++ clk_put(isp_obj.cam_ick);
++ clk_put(isp_obj.cam_fck);
++ DPRINTK_ISPCTRL("ISP_ERR: clk_en for fck failed\n");
++ return ret_err;
++ }
++ /* Context restore */
++ if (off_mode == 1)
++ isp_restore_ctx();
++ }
++ isp_obj.ref_count++;
++ mutex_unlock(&(isp_obj.isp_mutex));
++
++
++ DPRINTK_ISPCTRL("isp_get: new %d\n", isp_obj.ref_count);
++ return isp_obj.ref_count;
++}
++EXPORT_SYMBOL(isp_get);
++
++/**
++ * isp_put - Releases the ISP resource.
++ *
++ * Releases the clocks also for the last release.
++ **/
++int isp_put(void)
++{
++ DPRINTK_ISPCTRL("isp_put: old %d\n", isp_obj.ref_count);
++ mutex_lock(&(isp_obj.isp_mutex));
++ if (isp_obj.ref_count)
++ if (--isp_obj.ref_count == 0) {
++ isp_save_ctx();
++ off_mode = 1;
++
++ /* Disable all interrupts */
++ /* shut down ISP clocks */
++ clk_disable(isp_obj.cam_ick);
++ clk_disable(isp_obj.cam_fck);
++ clk_put(isp_obj.cam_ick);
++ clk_put(isp_obj.cam_fck);
++ }
++ mutex_unlock(&(isp_obj.isp_mutex));
++ DPRINTK_ISPCTRL("isp_put: new %d\n", isp_obj.ref_count);
++ return isp_obj.ref_count;
++}
++EXPORT_SYMBOL(isp_put);
++
++/**
++ * isp_save_context - Saves the values of the ISP module registers.
++ * @reg_list: Structure containing pairs of register address and value to
++ * modify on OMAP.
++ **/
++void isp_save_context(struct isp_reg *reg_list)
++{
++ struct isp_reg *next = reg_list;
++
++ for (; next->reg != ISP_TOK_TERM; next++)
++ next->val = omap_readl(next->reg);
++}
++EXPORT_SYMBOL(isp_save_context);
++
++/**
++ * isp_restore_context - Restores the values of the ISP module registers.
++ * @reg_list: Structure containing pairs of register address and value to
++ * modify on OMAP.
++ **/
++void isp_restore_context(struct isp_reg *reg_list)
++{
++ struct isp_reg *next = reg_list;
++
++ for (; next->reg != ISP_TOK_TERM; next++)
++ omap_writel(next->val, next->reg);
++}
++EXPORT_SYMBOL(isp_restore_context);
++
++/**
++ * isp_init - ISP module initialization.
++ **/
++static int __init isp_init(void)
++{
++ DPRINTK_ISPCTRL("+isp_init for Omap 3430 Camera ISP\n");
++ isp_obj.ref_count = 0;
++
++ mutex_init(&(isp_obj.isp_mutex));
++ spin_lock_init(&isp_obj.isp_temp_buf_lock);
++
++ if (request_irq(INT_34XX_CAM_IRQ, omap34xx_isp_isr, IRQF_SHARED,
++ "Omap 34xx Camera ISP", &ispirq_obj)) {
++ DPRINTK_ISPCTRL("Could not install ISR\n");
++ return -EINVAL;
++ } else {
++ spin_lock_init(&isp_obj.lock);
++ DPRINTK_ISPCTRL("-isp_init for Omap 3430 Camera ISP\n");
++ return 0;
++ }
++}
++
++/**
++ * isp_cleanup - ISP module cleanup.
++ **/
++static void __exit isp_cleanup(void)
++{
++ free_irq(INT_34XX_CAM_IRQ, &ispirq_obj);
++}
++
++/**
++ * isp_print_status - Prints the values of the ISP Control Module registers
++ *
++ * Also prints other debug information stored in the ISP module structure.
++ **/
++void isp_print_status(void)
++{
++#ifdef OMAP_ISPCTRL_DEBUG
++ DPRINTK_ISPCTRL("###CM_FCLKEN_CAM=0x%x\n",
++ omap_readl(CM_FCLKEN_CAM));
++ DPRINTK_ISPCTRL("###CM_ICLKEN_CAM=0x%x\n",
++ omap_readl(CM_ICLKEN_CAM));
++ DPRINTK_ISPCTRL("###CM_CLKSEL_CAM=0x%x\n",
++ omap_readl(CM_CLKSEL_CAM));
++ DPRINTK_ISPCTRL("###CM_AUTOIDLE_CAM=0x%x\n",
++ omap_readl(CM_AUTOIDLE_CAM));
++ DPRINTK_ISPCTRL("###CM_CLKEN_PLL[18:16] \
++ should be 0x7, = 0x%x\n",
++ omap_readl(CM_CLKEN_PLL));
++ DPRINTK_ISPCTRL("###CM_CLKSEL2_PLL[18:8] should be 0x2D,\
++ [6:0] should be 1 = 0x%x\n",
++ omap_readl(CM_CLKSEL2_PLL));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_HS=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_HS));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_XCLKA=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_XCLKA));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_D1=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_D1));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_D3=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_D3));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_D5=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_D5));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_D7=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_D7));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_D9=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_D9));
++ DPRINTK_ISPCTRL("###CTRL_PADCONF_CAM_D11=0x%x\n",
++ omap_readl(CTRL_PADCONF_CAM_D11));
++#endif
++}
++EXPORT_SYMBOL(isp_print_status);
++
++module_init(isp_init);
++module_exit(isp_cleanup);
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("ISP Control Module Library");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/isp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isp.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,275 @@
++/*
++ * drivers/media/video/isp/isp.h
++ *
++ * Top level public header file for ISP Control module in
++ * TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_TOP_H
++#define OMAP_ISP_TOP_H
++#include <media/videobuf-dma-sg.h>
++#include <linux/videodev2.h>
++#define OMAP_ISP_CCDC (1 << 0)
++#define OMAP_ISP_PREVIEW (1 << 1)
++#define OMAP_ISP_RESIZER (1 << 2)
++#define OMAP_ISP_AEWB (1 << 3)
++#define OMAP_ISP_AF (1 << 4)
++#define OMAP_ISP_HIST (1 << 5)
++
++/* Define this macro to enable BT.656 capture support. Comment this out when
++ BT.656 capture support is not needed */
++#define ENABLE_BT_656_CAPTURE
++
++/* Our ISP specific controls */
++#define V4L2_CID_PRIVATE_ISP_COLOR_FX (V4L2_CID_PRIVATE_BASE + 0)
++#define V4L2_CID_PRIVATE_ISP_CCDC_CFG (V4L2_CID_PRIVATE_BASE + 1)
++#define V4L2_CID_PRIVATE_ISP_PRV_CFG (V4L2_CID_PRIVATE_BASE + 2)
++#define V4L2_CID_PRIVATE_ISP_LSC_UPDATE (V4L2_CID_PRIVATE_BASE + 3)
++#define V4L2_CID_PRIVATE_ISP_AEWB_CFG (V4L2_CID_PRIVATE_BASE + 4)
++#define V4L2_CID_PRIVATE_ISP_AEWB_REQ (V4L2_CID_PRIVATE_BASE + 5)
++#define V4L2_CID_PRIVATE_ISP_AF_CFG (V4L2_CID_PRIVATE_BASE + 6)
++#define V4L2_CID_PRIVATE_ISP_AF_REQ (V4L2_CID_PRIVATE_BASE + 7)
++#define V4L2_CID_PRIVATE_ISP_HIST_CFG (V4L2_CID_PRIVATE_BASE + 8)
++#define V4L2_CID_PRIVATE_ISP_HIST_REQ (V4L2_CID_PRIVATE_BASE + 9)
++
++typedef int (*isp_vbq_callback_ptr) (struct videobuf_buffer *vb);
++typedef void (*isp_callback_t) (unsigned long status,
++ isp_vbq_callback_ptr arg1, void *arg2);
++
++enum isp_interface_type{
++ ISP_PARLL = 1,
++ ISP_CSIA = 2,
++ ISP_CSIB = 4
++};
++enum isp_irqevents{
++ CCDC_VD0 = 0x100,
++ CCDC_VD1 = 0x200,
++ CCDC_VD2 = 0x400,
++ CCDC_ERR = 0x800,
++ H3A_AWB_DONE = 0x2000,
++ H3A_AF_DONE = 0x1000,
++ HIST_DONE = 0x10000,
++ PREV_DONE = 0x100000,
++ LSC_DONE = 0x20000,
++ LSC_PRE_COMP = 0x40000,
++ LSC_PRE_ERR = 0x80000,
++ RESZ_DONE = 0x1000000,
++ SBL_OVF = 0x2000000,
++ MMU_ERR = 0x10000000,
++ OCP_ERR = 0x20000000,
++ HS_VS = 0x80000000
++};
++
++enum isp_callback_type{
++ CBK_CCDC_VD0,
++ CBK_CCDC_VD1,
++ CBK_PREV_DONE,
++ CBK_RESZ_DONE,
++ CBK_MMU_ERR,
++ CBK_H3A_AWB_DONE,
++ CBK_HIST_DONE,
++ CBK_HS_VS,
++ CBK_LSC_ISR,
++ CBK_H3A_AF_DONE
++};
++
++#define ISP_TOK_TERM 0xFFFFFFFF /* terminating token for ISP modules
++ * reg list
++ */
++#define NUM_SG_DMA (VIDEO_MAX_FRAME+2)
++
++#define ISP_BUF_INIT 0
++#define ISP_FREE_RUNNING 1
++#define ISP_BUF_TRAN 2
++/* defines a structure for isp registers values */
++struct isp_reg {
++ u32 reg; /* 32-bit address */
++ u32 val; /* 32-bit value */
++};
++
++/* sgdma state for each of the possible videobuf_buffers + 2 overlays */
++struct isp_sgdma_state {
++ /* mapped ISP mmu addrs */
++ dma_addr_t isp_addr; /* ISP space addr */
++ u32 status; /* DMA return code */
++ isp_callback_t callback;
++ void *arg;
++};
++
++struct isp_sgdma {
++ dma_addr_t isp_addr_capture[VIDEO_MAX_FRAME];
++ /* scatter-gather DMA management */
++ spinlock_t lock;
++ int free_sgdma; /* number of free sg dma slots */
++ int next_sgdma; /* index of next sg dma slot to use */
++ struct isp_sgdma_state sg_state[NUM_SG_DMA];
++};
++
++void isp_open(void);
++
++void isp_close(void);
++
++void isp_start(void);
++
++void isp_stop(void);
++
++void isp_sgdma_init(void);
++
++void isp_vbq_done(unsigned long status, isp_vbq_callback_ptr arg1, void *arg2);
++
++void isp_sgdma_process(struct isp_sgdma *sgdma, int irq, int *dma_notify,
++ isp_vbq_callback_ptr func_ptr);
++
++int isp_sgdma_queue(struct videobuf_dmabuf *vdma, struct videobuf_buffer *vb,
++ int irq, int *dma_notify,
++ isp_vbq_callback_ptr func_ptr);
++
++int isp_vbq_prepare(struct videobuf_queue *vbq, struct videobuf_buffer *vb,
++ enum v4l2_field field);
++
++void isp_vbq_release(struct videobuf_queue *vbq, struct videobuf_buffer *vb);
++/*
++ *Sets the callback for the ISP module done events.*/
++int isp_set_callback(enum isp_callback_type type, isp_callback_t callback,
++ isp_vbq_callback_ptr arg1, void *arg2);
++
++void omapisp_unset_callback(void);
++
++/*Clears the callback for the ISP module done events. */
++int isp_unset_callback(enum isp_callback_type type);
++
++u32 isp_set_xclk(u32 xclk, u8 xclksel);
++
++u32 isp_get_xclk(u8 xclksel);
++
++int isp_request_interface(enum isp_interface_type if_t);
++
++/* Frees the parallel or serial interface that is passed.*/
++int isp_free_interface(enum isp_interface_type if_t);
++
++struct isp_interface_config {
++ /*0 - Parallell 1- CSIA, 2-CSIB to CCDC */
++ enum isp_interface_type ccdc_par_ser;
++ /*0- Disable, 1 - Enable, first byte->cam_d[7:0],*/
++ /*2 - Enable, first byte -> cam_d[15:8]*/
++ u8 par_bridge;
++ /* 0 - Non Inverted, 1- Inverted*/
++ u8 para_clk_pol;
++ /* 0 - No Shift, 1 -CAMEXT[11:2]->CAM[8:0]*/
++ /* 2 - [11:4]->[7:0]*/
++ u8 dataline_shift;
++ /* 0 - HS Falling, 1-HS rising, 2 - VS falling, 3 - VS rising*/
++ u8 hsvs_syncdetect;
++ /* VD0 Interrupt timing */
++ u16 vdint0_timing;
++ /* VD1 Interrupt timing */
++ u16 vdint1_timing;
++ /* Strobe related parameter*/
++ int strobe;
++ /* PreStrobe related parameter*/
++ int prestrobe;
++ /* Shutter related parameter*/
++ int shutter;
++};
++
++struct isp_sysc {
++ char reset;
++ char idle_mode;
++};
++
++/* sysconfig settings */
++void isp_power_settings(struct isp_sysc);
++
++/* Configures the ISP Control interace related parameters.*/
++int isp_configure_interface(struct isp_interface_config *config);
++
++void isp_CCDC_VD01_disable(void);
++void isp_CCDC_VD01_enable(void);
++
++/* Acquires the ISP resource. Initialises the clocks for the first aquire.*/
++int isp_get(void);
++
++/* Releases the ISP resource. Releases the clocks also for the last release.*/
++int isp_put(void);
++
++/* Set up ISP pipeline */
++void isp_set_pipeline(int soc_type);
++
++/* Config ISP pipeline */
++void isp_config_pipeline(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output);
++
++/* Query Control */
++int isp_queryctrl(struct v4l2_queryctrl *a);
++
++/* Get Control */
++int isp_g_ctrl(struct v4l2_control *a);
++
++/* Set Control */
++int isp_s_ctrl(struct v4l2_control *a);
++/* Enum format capture for ISP */
++int isp_enum_fmt_cap(struct v4l2_fmtdesc *f);
++
++/* try Format capture for ISP */
++int isp_try_fmt_cap(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output);
++
++/* Get format for ISP sub-modules */
++void isp_g_fmt_cap(struct v4l2_format *f);
++/* Set format for ISP sub-modules */
++int isp_s_fmt_cap(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output);
++
++/* Get Crop capabilities */
++int isp_g_crop(struct v4l2_crop *a);
++
++/* Set Crop capabilities */
++int isp_s_crop(struct v4l2_crop *a, struct v4l2_pix_format *pix);
++
++/* Config crop */
++void isp_config_crop(struct v4l2_pix_format *pix);
++
++/* Try Size for ISP sub-modules */
++int isp_try_size(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output);
++
++/* Try Format for ISP */
++int isp_try_fmt(struct v4l2_pix_format *pix_input,
++ struct v4l2_pix_format *pix_output);
++
++#ifdef ENABLE_BT_656_CAPTURE
++/* Configure ISP depending on standard */
++int isp_configure_std(v4l2_std_id std);
++
++/* Checks for proper pixel parameters */
++int isp_check_format(struct v4l2_pix_format *pixfmt);
++#endif
++
++/*Saves ISP context*/
++void isp_save_context(struct isp_reg *);
++
++/*Restores ISP context*/
++void isp_restore_context(struct isp_reg *);
++
++/*Saves ISP context*/
++void isp_save_ctx(void);
++
++/*Restores ISP context*/
++void isp_restore_ctx(void);
++
++
++void isp_print_status(void);
++
++
++
++#endif /* OMAP_ISP_TOP_H */
+Index: git/drivers/media/video/isp/isp_af.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isp_af.c 2009-02-12 10:29:18.000000000 -0600
+@@ -0,0 +1,829 @@
++/*
++ * drivers/media/video/isp/isp_af.c
++ *
++ * AF module for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++/* Linux specific include files */
++#include <linux/cdev.h>
++#include <linux/device.h>
++#include <linux/delay.h>
++#include <linux/fs.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <asm/cacheflush.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++/*#include <asm/arch/io.h>*/
++
++/*#include <linux/mm.h>*/
++#include <linux/mman.h>
++#include <linux/syscalls.h>
++/*#include <linux/module.h>*/
++#include <linux/errno.h>
++#include <linux/types.h>
++#include <linux/dma-mapping.h>
++/*#include <asm/io.h>*/
++/*#include <asm/cacheflush.h>*/
++/*#include <asm/uaccess.h>*/
++
++#include "isp.h"
++#include "ispreg.h"
++#include "isph3a.h"
++#include "isp_af.h"
++#include "ispmmu.h"
++#include "../dw9710.h"
++
++/**
++ * struct isp_af_buffer - AF frame stats buffer.
++ * @virt_addr: Virtual address to mmap the buffer.
++ * @phy_addr: Physical address of the buffer.
++ * @addr_align: Virtual Address 32 bytes aligned.
++ * @ispmmu_addr: Address of the buffer mapped by the ISPMMU.
++ * @mmap_addr: Mapped memory area of buffer. For userspace access.
++ * @locked: 1 - Buffer locked from write. 0 - Buffer can be overwritten.
++ * @frame_num: Frame number from which the statistics are taken.
++ * @lens_position: Lens position currently set in the DW9710 Coil motor driver.
++ * @next: Pointer to link next buffer.
++ */
++struct isp_af_buffer {
++ unsigned long virt_addr;
++ unsigned long phy_addr;
++ unsigned long addr_align;
++ unsigned long ispmmu_addr;
++ unsigned long mmap_addr;
++
++ u8 locked;
++ u16 frame_num;
++ struct isp_af_xtrastats xtrastats;
++ struct isp_af_buffer *next;
++};
++
++/**
++ * struct isp_af_status - AF status.
++ * @initialized: 1 - Buffers initialized.
++ * @update: 1 - Update registers.
++ * @stats_req: 1 - Future stats requested.
++ * @stats_done: 1 - Stats ready for user.
++ * @frame_req: Number of frame requested for statistics.
++ * @af_buff: Array of statistics buffers to access.
++ * @stats_buf_size: Statistics buffer size.
++ * @min_buf_size: Minimum statisitics buffer size.
++ * @frame_count: Frame Count.
++ * @stats_wait: Wait primitive for locking/unlocking the stats request.
++ * @buffer_lock: Spinlock for statistics buffers access.
++ */
++static struct isp_af_status {
++ u8 initialized;
++ u8 update;
++ u8 stats_req;
++ u8 stats_done;
++ u16 frame_req;
++
++ struct isp_af_buffer af_buff[H3A_MAX_BUFF];
++ unsigned int stats_buf_size;
++ unsigned int min_buf_size;
++
++ u32 frame_count;
++ wait_queue_head_t stats_wait;
++ spinlock_t buffer_lock;
++} afstat;
++
++struct af_device *af_dev_configptr;
++static struct isp_af_buffer *active_buff;
++static int af_major = -1;
++static int camnotify;
++
++
++/**
++ * isp_af_setxtrastats - Receives extra statistics from prior frames.
++ * @xtrastats: Pointer to structure containing extra statistics fields like
++ * field count and timestamp of frame.
++ *
++ * Called from update_vbq in camera driver
++ **/
++void isp_af_setxtrastats(struct isp_af_xtrastats *xtrastats, u8 updateflag)
++{
++ int i, past_i;
++
++ if (active_buff == NULL)
++ return;
++
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if (afstat.af_buff[i].frame_num == active_buff->frame_num)
++ break;
++ }
++
++ if (i == H3A_MAX_BUFF)
++ return;
++
++ if (i == 0) {
++ if (afstat.af_buff[H3A_MAX_BUFF - 1].locked == 0)
++ past_i = H3A_MAX_BUFF - 1;
++ else
++ past_i = H3A_MAX_BUFF - 2;
++ } else if (i == 1) {
++ if (afstat.af_buff[0].locked == 0)
++ past_i = 0;
++ else
++ past_i = H3A_MAX_BUFF - 1;
++ } else {
++ if (afstat.af_buff[i - 1].locked == 0)
++ past_i = i - 1;
++ else
++ past_i = i - 2;
++ }
++
++ if (updateflag & AF_UPDATEXS_TS)
++ afstat.af_buff[past_i].xtrastats.ts = xtrastats->ts;
++
++ if (updateflag & AF_UPDATEXS_FIELDCOUNT)
++ afstat.af_buff[past_i].xtrastats.field_count =
++ xtrastats->field_count;
++}
++EXPORT_SYMBOL(isp_af_setxtrastats);
++
++/*
++ * Helper function to update buffer cache pages
++ */
++static void isp_af_update_req_buffer(struct isp_af_buffer *buffer)
++{
++ int size = afstat.stats_buf_size;
++
++ size = PAGE_ALIGN(size);
++ /* Update the kernel pages of the requested buffer */
++ dmac_inv_range((void *)buffer->addr_align, (void *)buffer->addr_align +
++ size);
++}
++
++/* Function to check paxel parameters */
++int isp_af_check_paxel(void)
++{
++ /* Check horizontal Count */
++ if ((af_dev_configptr->config->paxel_config.hz_cnt
++ < AF_PAXEL_HORIZONTAL_COUNT_MIN)
++ || (af_dev_configptr->config->paxel_config.hz_cnt
++ > AF_PAXEL_HORIZONTAL_COUNT_MAX)) {
++ DPRINTK_ISPH3A("Error : Horizontal Count is incorrect");
++ return -AF_ERR_HZ_COUNT;
++ }
++
++ /*Check Vertical Count */
++ if ((af_dev_configptr->config->paxel_config.vt_cnt
++ < AF_PAXEL_VERTICAL_COUNT_MIN)
++ || (af_dev_configptr->config->paxel_config.vt_cnt
++ > AF_PAXEL_VERTICAL_COUNT_MAX)) {
++ DPRINTK_ISPH3A("Error : Vertical Count is incorrect");
++ return -AF_ERR_VT_COUNT;
++ }
++
++ /*Check Height */
++ if ((af_dev_configptr->config->paxel_config.height
++ < AF_PAXEL_HEIGHT_MIN)
++ || (af_dev_configptr->config->paxel_config.height
++ > AF_PAXEL_HEIGHT_MAX)) {
++ DPRINTK_ISPH3A("Error : Height is incorrect");
++ return -AF_ERR_HEIGHT;
++ }
++
++ /*Check width */
++ if ((af_dev_configptr->config->paxel_config.width < AF_PAXEL_WIDTH_MIN)
++ || (af_dev_configptr->config->paxel_config.width
++ > AF_PAXEL_WIDTH_MAX)) {
++ DPRINTK_ISPH3A("Error : Width is incorrect");
++ return -AF_ERR_WIDTH;
++ }
++
++ /*Check Line Increment */
++ if ((af_dev_configptr->config->paxel_config.line_incr
++ < AF_PAXEL_INCREMENT_MIN)
++ || (af_dev_configptr->config->paxel_config.line_incr
++ > AF_PAXEL_INCREMENT_MAX)) {
++ DPRINTK_ISPH3A("Error : Line Increment is incorrect");
++ return -AF_ERR_INCR;
++ }
++
++ /*Check Horizontal Start */
++ if ((af_dev_configptr->config->paxel_config.hz_start % 2 != 0)
++ || (af_dev_configptr->config->paxel_config.hz_start
++ < (af_dev_configptr->config->iir_config.hz_start_pos + 2))
++ || (af_dev_configptr->config->paxel_config.hz_start
++ > AF_PAXEL_HZSTART_MAX)
++ || (af_dev_configptr->config->paxel_config.hz_start
++ < AF_PAXEL_HZSTART_MIN)) {
++ DPRINTK_ISPH3A("Error : Horizontal Start is incorrect");
++ return -AF_ERR_HZ_START;
++ }
++
++ /*Check Vertical Start */
++ if ((af_dev_configptr->config->paxel_config.vt_start
++ < AF_PAXEL_VTSTART_MIN)
++ || (af_dev_configptr->config->paxel_config.vt_start
++ > AF_PAXEL_VTSTART_MAX)) {
++ DPRINTK_ISPH3A("Error : Vertical Start is incorrect");
++ return -AF_ERR_VT_START;
++ }
++ return 0; /*Success */
++}
++
++/**
++ * isp_af_check_iir - Function to check IIR Coefficient.
++ **/
++int isp_af_check_iir(void)
++{
++ int index;
++
++ for (index = 0; index < AF_NUMBER_OF_COEF; index++) {
++ if ((af_dev_configptr->config->iir_config.coeff_set0[index])
++ > AF_COEF_MAX) {
++ DPRINTK_ISPH3A(
++ "Error : Coefficient for set 0 is incorrect");
++ return -AF_ERR_IIR_COEF;
++ }
++
++ if ((af_dev_configptr->config->iir_config.coeff_set1[index])
++ > AF_COEF_MAX) {
++ DPRINTK_ISPH3A(
++ "Error : Coefficient for set 1 is incorrect");
++ return -AF_ERR_IIR_COEF;
++ }
++ }
++
++ if ((af_dev_configptr->config->iir_config.hz_start_pos < AF_IIRSH_MIN)
++ || (af_dev_configptr->config->iir_config.hz_start_pos >
++ AF_IIRSH_MAX)) {
++ DPRINTK_ISPH3A("Error : IIRSH is incorrect");
++ return -AF_ERR_IIRSH;
++ }
++
++ return 0;
++}
++/**
++ * isp_af_unlock_buffers - Helper function to unlock all buffers.
++ **/
++static void isp_af_unlock_buffers(void)
++{
++ int i;
++ unsigned long irqflags;
++
++ spin_lock_irqsave(&afstat.buffer_lock, irqflags);
++ for (i = 0; i < H3A_MAX_BUFF; i++)
++ afstat.af_buff[i].locked = 0;
++
++ spin_unlock_irqrestore(&afstat.buffer_lock, irqflags);
++}
++
++/*
++ * Helper function to link allocated buffers
++ */
++static void isp_af_link_buffers(void)
++{
++ int i;
++
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if ((i + 1) < H3A_MAX_BUFF)
++ afstat.af_buff[i].next = &afstat.af_buff[i + 1];
++ else
++ afstat.af_buff[i].next = &afstat.af_buff[0];
++ }
++}
++
++/*
++ * Helper function to munmap kernel buffers from user space.
++ */
++static int isp_af_munmap(struct isp_af_buffer *buffer)
++{
++ /* TO DO: munmap succesfully the kernel buffers, so they can be
++ remmaped again */
++ buffer->mmap_addr = 0;
++ return 0;
++}
++
++/*
++ * Helper function to mmap buffers to user space.
++ * buffer passed need to already have a valid physical address: buffer->phy_addr
++ * It returns user pointer as unsigned long in buffer->mmap_addr
++ */
++static int isp_af_mmap_buffers(struct isp_af_buffer *buffer)
++{
++ struct vm_area_struct vma;
++ struct mm_struct *mm = current->mm;
++ int size = afstat.stats_buf_size;
++ unsigned long addr = 0;
++ unsigned long pgoff = 0, flags = MAP_SHARED | MAP_ANONYMOUS;
++ unsigned long prot = PROT_READ | PROT_WRITE;
++ void *pos = (void *)buffer->addr_align;
++
++ size = PAGE_ALIGN(size);
++
++ addr = get_unmapped_area(NULL, addr, size, pgoff, flags);
++ vma.vm_mm = mm;
++ vma.vm_start = addr;
++ vma.vm_end = addr + size;
++ vma.vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags);
++ vma.vm_pgoff = pgoff;
++ vma.vm_file = NULL;
++ vma.vm_page_prot = protection_map[vma.vm_flags];
++
++ while (size > 0) {
++ if (vm_insert_page(&vma, addr, vmalloc_to_page(pos)))
++ return -EAGAIN;
++ addr += PAGE_SIZE;
++ pos += PAGE_SIZE;
++ size -= PAGE_SIZE;
++ }
++
++ buffer->mmap_addr = vma.vm_start;
++ return 0;
++}
++
++/* Function to perform hardware set up */
++int isp_af_configure(struct af_configuration *afconfig)
++{
++ int result;
++ int buff_size, i;
++ unsigned int busyaf;
++
++ if (NULL == afconfig) {
++ printk(KERN_ERR "Null argument in configuration. \n");
++ return -EINVAL;
++ }
++
++ af_dev_configptr->config = afconfig;
++ /* Get the value of PCR register */
++ busyaf = omap_readl(ISPH3A_PCR);
++
++ if ((busyaf & AF_BUSYAF) == AF_BUSYAF) {
++ DPRINTK_ISPH3A("AF_register_setup_ERROR : Engine Busy");
++ DPRINTK_ISPH3A("\n Configuration cannot be done ");
++ return -AF_ERR_ENGINE_BUSY;
++ }
++
++ /*Check IIR Coefficient and start Values */
++ result = isp_af_check_iir();
++ if (result < 0)
++ return result;
++
++ /*Check Paxel Values */
++ result = isp_af_check_paxel();
++ if (result < 0)
++ return result;
++
++ /*Check HMF Threshold Values */
++ if (af_dev_configptr->config->hmf_config.threshold > AF_THRESHOLD_MAX) {
++ DPRINTK_ISPH3A("Error : HMF Threshold is incorrect");
++ return -AF_ERR_THRESHOLD;
++ }
++
++ /* Compute buffer size */
++ buff_size =
++ (af_dev_configptr->config->paxel_config.hz_cnt + 1) *
++ (af_dev_configptr->config->paxel_config.vt_cnt + 1) * AF_PAXEL_SIZE;
++
++ /*Deallocate the previous buffers */
++ if (afstat.stats_buf_size && (buff_size > afstat.stats_buf_size)) {
++ isp_af_enable(0);
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ isp_af_munmap(&afstat.af_buff[i]);
++ ispmmu_unmap(afstat.af_buff[i].ispmmu_addr);
++ dma_free_coherent(NULL,
++ afstat.min_buf_size + 64,
++ (void *)afstat.af_buff[i].virt_addr,
++ (dma_addr_t)afstat.af_buff[i].phy_addr);
++ afstat.af_buff[i].virt_addr = 0;
++ }
++ afstat.stats_buf_size = 0;
++ }
++
++ if (!afstat.af_buff[0].virt_addr) {
++ afstat.stats_buf_size = buff_size;
++ afstat.min_buf_size = PAGE_ALIGN(afstat.stats_buf_size);
++
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ afstat.af_buff[i].virt_addr =
++ (unsigned long)dma_alloc_coherent(NULL,
++ afstat.min_buf_size,
++ (dma_addr_t *)
++ &afstat.af_buff[i].phy_addr,
++ GFP_KERNEL | GFP_DMA);
++ if (afstat.af_buff[i].virt_addr == 0) {
++ printk(KERN_ERR "Can't acquire memory for "
++ "buffer[%d]\n", i);
++ return -ENOMEM;
++ }
++ afstat.af_buff[i].addr_align =
++ afstat.af_buff[i].virt_addr;
++ while ((afstat.af_buff[i].addr_align & 0xFFFFFFC0) !=
++ afstat.af_buff[i].addr_align)
++ afstat.af_buff[i].addr_align++;
++ afstat.af_buff[i].ispmmu_addr =
++ ispmmu_map(afstat.af_buff[i].phy_addr,
++ afstat.min_buf_size);
++ }
++ isp_af_unlock_buffers();
++ isp_af_link_buffers();
++
++ /* First active buffer */
++ if (active_buff == NULL)
++ active_buff = &afstat.af_buff[0];
++ isp_af_set_address(active_buff->ispmmu_addr);
++ }
++ /* Always remap when calling Configure */
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if (afstat.af_buff[i].mmap_addr)
++ isp_af_munmap(&afstat.af_buff[i]);
++ isp_af_mmap_buffers(&afstat.af_buff[i]);
++ }
++
++ result = isp_af_register_setup(af_dev_configptr);
++ if (result < 0)
++ return result;
++ af_dev_configptr->size_paxel = buff_size;
++ afstat.initialized = 1;
++ /*Set configuration flag to indicate HW setup done */
++ if (af_dev_configptr->config->af_config)
++ isp_af_enable(1);
++ else
++ isp_af_enable(0);
++
++ /*Success */
++ return 0;
++}
++EXPORT_SYMBOL(isp_af_configure);
++
++int isp_af_register_setup(struct af_device *af_dev)
++{
++ unsigned int pcr = 0, pax1 = 0, pax2 = 0, paxstart = 0;
++ unsigned int coef = 0;
++ unsigned int base_coef_set0 = 0;
++ unsigned int base_coef_set1 = 0;
++ int index;
++
++
++ /* Configure Hardware Registers */
++ /* Set PCR Register */
++ pcr = omap_readl(ISPH3A_PCR); /* Read PCR Register */
++
++ /*Set Accumulator Mode */
++ if (af_dev->config->mode == ACCUMULATOR_PEAK)
++ pcr |= FVMODE;
++ else
++ pcr &= ~FVMODE;
++
++ /*Set A-law */
++ if (af_dev->config->alaw_enable == H3A_AF_ALAW_ENABLE)
++ pcr |= AF_ALAW_EN;
++ else
++ pcr &= ~AF_ALAW_EN;
++
++ /*Set RGB Position */
++ pcr &= ~RGBPOS;
++ pcr |= (af_dev->config->rgb_pos) << AF_RGBPOS_SHIFT;
++
++ /*HMF Configurations */
++ if (af_dev->config->hmf_config.enable == H3A_AF_HMF_ENABLE) {
++ pcr &= ~AF_MED_EN;
++ /* Enable HMF */
++ pcr |= AF_MED_EN;
++
++ /* Set Median Threshold */
++ pcr &= ~MED_TH;
++ pcr |=
++ (af_dev->config->hmf_config.threshold) << AF_MED_TH_SHIFT;
++ } else
++ pcr &= ~AF_MED_EN;
++
++ omap_writel(pcr, ISPH3A_PCR);
++
++ pax1 &= ~PAXW;
++ pax1 |= (af_dev->config->paxel_config.width) << AF_PAXW_SHIFT;
++
++ /* Set height in AFPAX1 */
++ pax1 &= ~PAXH;
++ pax1 |= af_dev->config->paxel_config.height;
++
++ omap_writel(pax1, ISPH3A_AFPAX1);
++
++ /* Configure AFPAX2 Register */
++ /* Set Line Increment in AFPAX2 Register */
++ pax2 &= ~AFINCV;
++ pax2 |= (af_dev->config->paxel_config.line_incr) << AF_LINE_INCR_SHIFT;
++ /* Set Vertical Count */
++ pax2 &= ~PAXVC;
++ pax2 |= (af_dev->config->paxel_config.vt_cnt) << AF_VT_COUNT_SHIFT;
++ /* Set Horizontal Count */
++ pax2 &= ~PAXHC;
++ pax2 |= af_dev->config->paxel_config.hz_cnt;
++ omap_writel(pax2, ISPH3A_AFPAX2);
++
++ /* Configure PAXSTART Register */
++ /*Configure Horizontal Start */
++ paxstart &= ~PAXSH;
++ paxstart |=
++ (af_dev->config->paxel_config.hz_start) << AF_HZ_START_SHIFT;
++ /* Configure Vertical Start */
++ paxstart &= ~PAXSV;
++ paxstart |= af_dev->config->paxel_config.vt_start;
++ omap_writel(paxstart, ISPH3A_AFPAXSTART);
++
++ /*SetIIRSH Register */
++ omap_writel(af_dev->config->iir_config.hz_start_pos, ISPH3A_AFIIRSH);
++
++ /*Set IIR Filter0 Coefficients */
++ base_coef_set0 = ISPH3A_AFCOEF010;
++ for (index = 0; index <= 8; index += 2) {
++ coef &= ~COEF_MASK0;
++ coef |= af_dev->config->iir_config.coeff_set0[index];
++ coef &= ~COEF_MASK1;
++ coef |=
++ (af_dev->config->iir_config.
++ coeff_set0[index + 1]) << AF_COEF_SHIFT;
++ omap_writel(coef, base_coef_set0);
++
++ base_coef_set0 = base_coef_set0 + AFCOEF_OFFSET;
++ }
++
++ /* set AFCOEF0010 Register */
++ omap_writel(af_dev->config->iir_config.coeff_set0[10],
++ ISPH3A_AFCOEF010);
++
++ /*Set IIR Filter1 Coefficients */
++
++ base_coef_set1 = ISPH3A_AFCOEF110;
++ for (index = 0; index <= 8; index += 2) {
++ coef &= ~COEF_MASK0;
++ coef |= af_dev->config->iir_config.coeff_set1[index];
++ coef &= ~COEF_MASK1;
++ coef |=
++ (af_dev->config->iir_config.
++ coeff_set1[index + 1]) << AF_COEF_SHIFT;
++ omap_writel(coef, base_coef_set1);
++
++ base_coef_set1 = base_coef_set1 + AFCOEF_OFFSET;
++ }
++ omap_writel(af_dev->config->iir_config.coeff_set1[10],
++ ISPH3A_AFCOEF1010);
++
++ return 0;
++}
++
++/* Function to set address */
++void isp_af_set_address(unsigned long address)
++{
++ omap_writel(address, ISPH3A_AFBUFST);
++}
++
++static int isp_af_stats_available(struct isp_af_data *afdata)
++{
++ int i;
++ unsigned long irqflags;
++
++ spin_lock_irqsave(&afstat.buffer_lock, irqflags);
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if ((afdata->frame_number == afstat.af_buff[i].frame_num)
++ && (afstat.af_buff[i].frame_num !=
++ active_buff->frame_num)) {
++ afstat.af_buff[i].locked = 1;
++ spin_unlock_irqrestore(&afstat.buffer_lock, irqflags);
++ isp_af_update_req_buffer(&afstat.af_buff[i]);
++ afstat.af_buff[i].frame_num = 0;
++ afdata->af_statistics_buf = (void *)
++ afstat.af_buff[i].mmap_addr;
++ afdata->xtrastats.ts = afstat.af_buff[i].xtrastats.ts;
++ afdata->xtrastats.field_count =
++ afstat.af_buff[i].xtrastats.field_count;
++ afdata->xtrastats.lens_position =
++ afstat.af_buff[i].xtrastats.lens_position;
++ return 0;
++ }
++ }
++ spin_unlock_irqrestore(&afstat.buffer_lock, irqflags);
++ /* Stats unavailable */
++
++ afdata->af_statistics_buf = NULL;
++ return -1;
++}
++
++void isp_af_notify(int notify)
++{
++ camnotify = notify;
++ if (camnotify && afstat.initialized) {
++ printk(KERN_DEBUG "Warning Camera Off \n");
++ afstat.stats_req = 0;
++ afstat.stats_done = 1;
++ wake_up_interruptible(&afstat.stats_wait);
++ }
++}
++EXPORT_SYMBOL(isp_af_notify);
++/*
++ * This API allows the user to update White Balance gains, as well as
++ * exposure time and analog gain. It is also used to request frame
++ * statistics.
++ */
++int isp_af_request_statistics(struct isp_af_data *afdata)
++{
++ int ret = 0;
++ u16 frame_diff = 0;
++ u16 frame_cnt = afstat.frame_count;
++ wait_queue_t wqt;
++
++ if (!af_dev_configptr->config->af_config) {
++ printk(KERN_ERR "AF engine not enabled\n");
++ return -EINVAL;
++ }
++ afdata->af_statistics_buf = NULL;
++
++ if (afdata->update != 0) {
++ if (afdata->update & REQUEST_STATISTICS) {
++ isp_af_unlock_buffers();
++ /* Stats available? */
++ DPRINTK_ISPH3A("Stats available?\n");
++ ret = isp_af_stats_available(afdata);
++ if (!ret)
++ goto out;
++
++ /* Stats in near future? */
++ DPRINTK_ISPH3A("Stats in near future?\n");
++ if (afdata->frame_number > frame_cnt) {
++ frame_diff = afdata->frame_number - frame_cnt;
++ } else if (afdata->frame_number < frame_cnt) {
++ if ((frame_cnt >
++ (MAX_FRAME_COUNT - MAX_FUTURE_FRAMES))
++ && (afdata->frame_number
++ < MAX_FRAME_COUNT))
++ frame_diff = afdata->frame_number
++ + MAX_FRAME_COUNT
++ - frame_cnt;
++ else {
++ /* Frame unavailable */
++ frame_diff = MAX_FUTURE_FRAMES + 1;
++ afdata->af_statistics_buf = NULL;
++ }
++ }
++
++ if (frame_diff > MAX_FUTURE_FRAMES) {
++ printk(KERN_ERR "Invalid frame requested\n");
++ } else if (!camnotify) {
++ /* Block until frame in near future completes */
++ afstat.frame_req = afdata->frame_number;
++ afstat.stats_req = 1;
++ afstat.stats_done = 0;
++ init_waitqueue_entry(&wqt, current);
++ ret =
++ wait_event_interruptible(afstat.stats_wait,
++ afstat.stats_done == 1);
++ if (ret < 0)
++ return ret;
++ DPRINTK_ISPH3A("ISP AF request status"
++ " interrupt raised\n");
++
++ /* Stats now available */
++ ret = isp_af_stats_available(afdata);
++ if (ret) {
++ printk(KERN_ERR "After waiting for"
++ " stats, stats not available!!"
++ "\n");
++ }
++ }
++ }
++ }
++
++out:
++ afdata->curr_frame = afstat.frame_count;
++
++ return 0;
++}
++EXPORT_SYMBOL(isp_af_request_statistics);
++
++/* This function will handle the H3A interrupt. */
++static void isp_af_isr(unsigned long status, isp_vbq_callback_ptr arg1,
++ void *arg2)
++{
++ u16 frame_align;
++
++ if ((H3A_AF_DONE & status) != H3A_AF_DONE)
++ return;
++
++ /* Exchange buffers */
++ active_buff = active_buff->next;
++ if (active_buff->locked == 1)
++ active_buff = active_buff->next;
++ isp_af_set_address(active_buff->ispmmu_addr);
++
++ /* Update frame counter */
++ afstat.frame_count++;
++ frame_align = afstat.frame_count;
++ if (afstat.frame_count > MAX_FRAME_COUNT) {
++ afstat.frame_count = 1;
++ frame_align++;
++ }
++ active_buff->frame_num = afstat.frame_count;
++
++ dw9710_af_getfocus_cached(&active_buff->xtrastats.lens_position);
++ /* Future Stats requested? */
++ if (afstat.stats_req) {
++ /* Is the frame we want already done? */
++ if (frame_align >= (afstat.frame_req + 1)) {
++ afstat.stats_req = 0;
++ afstat.stats_done = 1;
++ wake_up_interruptible(&afstat.stats_wait);
++ }
++ }
++}
++
++/* Function to Enable/Disable AF Engine */
++int isp_af_enable(int enable)
++{
++ unsigned int pcr;
++
++ pcr = omap_readl(ISPH3A_PCR);
++
++ /* Set AF_EN bit in PCR Register */
++ if (enable) {
++ if (isp_set_callback(CBK_H3A_AF_DONE, isp_af_isr,
++ (void *)NULL, (void *)NULL)) {
++ printk(KERN_ERR "No callback for AF\n");
++ return -EINVAL;
++ }
++
++ pcr |= AF_EN;
++ } else {
++ isp_unset_callback(CBK_H3A_AF_DONE);
++ pcr &= ~AF_EN;
++ }
++ mdelay(100);
++ omap_writel(pcr, ISPH3A_PCR);
++ return 0;
++}
++
++/* Function to register the AF character device driver. */
++int __init isp_af_init(void)
++{
++ /*allocate memory for device structure and initialize it with 0 */
++ af_dev_configptr = kzalloc(sizeof(struct af_device), GFP_KERNEL);
++ if (!af_dev_configptr)
++ goto err_nomem1;
++
++ active_buff = NULL;
++
++ af_dev_configptr->config = (struct af_configuration *)
++ kzalloc(sizeof(struct af_configuration), GFP_KERNEL);
++
++ if (af_dev_configptr->config == NULL)
++ goto err_nomem2;
++
++ printk(KERN_DEBUG "isp_af_init\n");
++ memset(&afstat, 0, sizeof(afstat));
++
++ init_waitqueue_head(&afstat.stats_wait);
++ spin_lock_init(&afstat.buffer_lock);
++
++ return 0;
++
++err_nomem2:
++ kfree(af_dev_configptr);
++err_nomem1:
++ printk(KERN_ERR "Error: kmalloc fail");
++ return -ENOMEM;
++}
++
++void __exit isp_af_exit(void)
++{
++ int i;
++
++ if (afstat.af_buff) {
++ /* Free buffers */
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ ispmmu_unmap(afstat.af_buff[i].ispmmu_addr);
++ dma_free_coherent(NULL,
++ afstat.min_buf_size + 64,
++ (void *)afstat.af_buff[i].virt_addr,
++ (dma_addr_t)afstat.af_buff[i].phy_addr);
++ }
++ }
++ kfree(af_dev_configptr->config);
++ kfree(af_dev_configptr);
++
++ memset(&afstat, 0, sizeof(afstat));
++
++ af_major = -1;
++ isp_af_enable(0);
++}
++
++module_init(isp_af_init)
++module_exit(isp_af_exit)
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("AF ISP Module");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/isp_af.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isp_af.h 2009-02-12 16:32:13.000000000 -0600
+@@ -0,0 +1,258 @@
++/*
++ * drivers/media/video/isp/isp_af.h
++ *
++ * Include file for AF module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++/* Device Constants */
++#ifndef OMAP_ISP_AF_H
++#define OMAP_ISP_AF_H
++
++#define AF_MAJOR_NUMBER 0
++#define ISPAF_NAME "OMAPISP_AF"
++#define AF_NR_DEVS 1
++#define AF_TIMEOUT (300 * HZ) / 1000
++
++
++/* Range Constants */
++#define AF_IIRSH_MIN 0
++#define AF_IIRSH_MAX 4094
++#define AF_PAXEL_HORIZONTAL_COUNT_MIN 0
++#define AF_PAXEL_HORIZONTAL_COUNT_MAX 35
++#define AF_PAXEL_VERTICAL_COUNT_MIN 0
++#define AF_PAXEL_VERTICAL_COUNT_MAX 127
++#define AF_PAXEL_INCREMENT_MIN 0
++#define AF_PAXEL_INCREMENT_MAX 14
++#define AF_PAXEL_HEIGHT_MIN 0
++#define AF_PAXEL_HEIGHT_MAX 127
++#define AF_PAXEL_WIDTH_MIN 0
++#define AF_PAXEL_WIDTH_MAX 127
++#define AF_PAXEL_HZSTART_MIN 2
++#define AF_PAXEL_HZSTART_MAX 4094
++
++#define AF_PAXEL_VTSTART_MIN 0
++#define AF_PAXEL_VTSTART_MAX 4095
++#define AF_THRESHOLD_MAX 255
++#define AF_COEF_MAX 4095
++#define AF_PAXEL_SIZE 48
++
++/* Print Macros */
++/*list of error code */
++#define AF_ERR_HZ_COUNT 800 /* Invalid Horizontal Count */
++#define AF_ERR_VT_COUNT 801 /* Invalid Vertical Count */
++#define AF_ERR_HEIGHT 802 /* Invalid Height */
++#define AF_ERR_WIDTH 803 /* Invalid width */
++#define AF_ERR_INCR 804 /* Invalid Increment */
++#define AF_ERR_HZ_START 805 /* Invalid horizontal Start */
++#define AF_ERR_VT_START 806 /* Invalud vertical Start */
++#define AF_ERR_IIRSH 807 /* Invalid IIRSH value */
++#define AF_ERR_IIR_COEF 808 /* Invalid Coefficient */
++#define AF_ERR_SETUP 809 /* Setup not done */
++#define AF_ERR_THRESHOLD 810 /* Invalid Threshold */
++#define AF_ERR_ENGINE_BUSY 811 /* Engine is busy */
++#define AF_NUMBER_OF_COEF 11
++/* list of ioctls */
++#pragma pack(1)
++
++#pragma pack()
++#define AFPID 0x0 /* Peripheral Revision
++ * and Class Information
++ */
++
++#define AFCOEF_OFFSET 0x00000004 /* COEFFICIENT BASE
++ * ADDRESS
++ */
++
++/*
++ * PCR fields
++ */
++#define AF_BUSYAF (1 << 15)
++#define FVMODE (1 << 14)
++#define RGBPOS (0x7 << 11)
++#define MED_TH (0xFF << 3)
++#define AF_MED_EN (1 << 2)
++#define AF_ALAW_EN (1 << 1)
++#define AF_EN (1 << 0)
++
++/*
++ * AFPAX1 fields
++ */
++#define PAXW (0x7F << 16)
++#define PAXH 0x7F
++
++/*
++ * AFPAX2 fields
++ */
++#define AFINCV (0xF << 13)
++#define PAXVC (0x7F << 6)
++#define PAXHC 0x3F
++
++/*
++ * AFPAXSTART fields
++ */
++#define PAXSH (0xFFF<<16)
++#define PAXSV 0xFFF
++
++/*
++ * COEFFICIENT MASK
++ */
++
++#define COEF_MASK0 0xFFF
++#define COEF_MASK1 (0xFFF<<16)
++
++/* BIT SHIFTS */
++#define AF_RGBPOS_SHIFT 11
++#define AF_MED_TH_SHIFT 3
++#define AF_PAXW_SHIFT 16
++#define AF_LINE_INCR_SHIFT 13
++#define AF_VT_COUNT_SHIFT 6
++#define AF_HZ_START_SHIFT 16
++#define AF_COEF_SHIFT 16
++
++/* Flags for update field */
++#define REQUEST_STATISTICS (1 << 0)
++#define LENS_DESIRED_POSITION (1 << 1)
++#define LENS_CURRENT_POSITION (1 << 2)
++
++#define AF_UPDATEXS_TS (1 << 0)
++#define AF_UPDATEXS_FIELDCOUNT (1 << 1)
++#define AF_UPDATEXS_LENSPOS (1 << 2)
++
++/**
++ * struct isp_af_xtrastats - Extra statistics related to AF generated stats.
++ * @ts: Timestamp when the frame gets delivered to the user.
++ * @field_count: Field count of the frame delivered to the user.
++ * @lens_position: Lens position when the stats are being generated.
++ */
++struct isp_af_xtrastats {
++ struct timeval ts;
++ unsigned long field_count;
++ u16 lens_position;
++};
++
++/**
++ * struct isp_af_data - AF statistics data to transfer between driver and user.
++ * @af_statistics_buf: Pointer to pass to user.
++ * @lens_current_position: Read value of lens absolute position.
++ * @desired_lens_direction: Lens desired location.
++ * @update: Bitwise flags to update parameters.
++ * @frame_number: Data for which frame is desired/given.
++ * @curr_frame: Current frame number being processed by AF module.
++ * @xtrastats: Extra statistics structure.
++ */
++struct isp_af_data {
++ void *af_statistics_buf;
++ u16 lens_current_position;
++ u16 desired_lens_direction;
++ u16 update;
++ u16 frame_number;
++ u16 curr_frame;
++ struct isp_af_xtrastats xtrastats;
++};
++
++/* enum used for status of specific feature */
++enum af_alaw_enable {
++ H3A_AF_ALAW_DISABLE = 0,
++ H3A_AF_ALAW_ENABLE = 1
++};
++
++enum af_hmf_enable {
++ H3A_AF_HMF_DISABLE = 0,
++ H3A_AF_HMF_ENABLE = 1
++};
++
++enum af_config_flag {
++ H3A_AF_CFG_DISABLE = 0,
++ H3A_AF_CFG_ENABLE = 1
++};
++
++enum af_mode {
++ ACCUMULATOR_SUMMED = 0,
++ ACCUMULATOR_PEAK = 1
++};
++
++/* Red, Green, and blue pixel location in the AF windows */
++enum rgbpos {
++ GR_GB_BAYER = 0, /* GR and GB as Bayer pattern */
++ RG_GB_BAYER = 1, /* RG and GB as Bayer pattern */
++ GR_BG_BAYER = 2, /* GR and BG as Bayer pattern */
++ RG_BG_BAYER = 3, /* RG and BG as Bayer pattern */
++ GG_RB_CUSTOM = 4, /* GG and RB as custom pattern */
++ RB_GG_CUSTOM = 5 /* RB and GG as custom pattern */
++};
++
++/* Contains the information regarding the Horizontal Median Filter */
++struct af_hmf {
++ enum af_hmf_enable enable; /* Status of Horizontal Median Filter */
++ unsigned int threshold; /* Threshhold Value for Horizontal Median
++ * Filter
++ */
++};
++
++/* Contains the information regarding the IIR Filters */
++struct af_iir {
++ unsigned int hz_start_pos; /* IIR Start Register Value */
++ int coeff_set0[AF_NUMBER_OF_COEF]; /*
++ * IIR Filter Coefficient for
++ * Set 0
++ */
++ int coeff_set1[AF_NUMBER_OF_COEF]; /*
++ * IIR Filter Coefficient for
++ * Set 1
++ */
++};
++
++/* Contains the information regarding the Paxels Structure in AF Engine */
++struct af_paxel {
++ unsigned int width; /* Width of the Paxel */
++ unsigned int height; /* Height of the Paxel */
++ unsigned int hz_start; /* Horizontal Start Position */
++ unsigned int vt_start; /* Vertical Start Position */
++ unsigned int hz_cnt; /* Horizontal Count */
++ unsigned int vt_cnt; /* vertical Count */
++ unsigned int line_incr; /* Line Increment */
++};
++/* Contains the parameters required for hardware set up of AF Engine */
++struct af_configuration {
++ enum af_alaw_enable alaw_enable; /*ALWAW status */
++ struct af_hmf hmf_config; /*HMF configurations */
++ enum rgbpos rgb_pos; /*RGB Positions */
++ struct af_iir iir_config; /*IIR filter configurations */
++ struct af_paxel paxel_config; /*Paxel parameters */
++ enum af_mode mode; /*Accumulator mode */
++ enum af_config_flag af_config; /*Flag indicates Engine is configured */
++};
++
++/* Structure for device of AF Engine */
++struct af_device {
++ struct af_configuration *config; /*Device configuration structure */
++ int size_paxel; /*Paxel size in bytes */
++};
++
++int isp_af_check_paxel(void);
++int isp_af_check_iir(void);
++int isp_af_register_setup(struct af_device *af_dev);
++int isp_af_enable(int);
++void isp_af_notify(int notify);
++
++#include <linux/autoconf.h>
++#ifdef CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER
++int isp_af_request_statistics(struct isp_af_data *afdata);
++int isp_af_configure(struct af_configuration *afconfig);
++#else
++static inline int isp_af_request_statistics(struct isp_af_data *afdata){return 0;}
++static inline int isp_af_configure(struct af_configuration *afconfig){return 0;}
++#endif
++void isp_af_set_address(unsigned long);
++void isp_af_setxtrastats(struct isp_af_xtrastats *xtrastats, u8 updateflag);
++#endif /* OMAP_ISP_AF_H */
+Index: git/drivers/media/video/isp/ispccdc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispccdc.c 2009-02-12 11:39:19.000000000 -0600
+@@ -0,0 +1,1631 @@
++/*
++ * drivers/media/video/isp/ispccdc.c
++ *
++ * Driver Library for CCDC module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/types.h>
++#include <asm/mach-types.h>
++#include <asm/io.h>
++#include <asm/scatterlist.h>
++#include <asm/uaccess.h>
++
++#include "isp.h"
++#include "ispreg.h"
++#include "ispccdc.h"
++#ifndef CONFIG_ARCH_OMAP3410
++#include "isppreview.h"
++#endif
++#include "ispmmu.h"
++
++#ifndef CONFIG_ARCH_OMAP3410
++#define USE_ISP_LSC
++#else
++#undef USE_ISP_LSC
++#endif
++
++static u32 *fpc_table_add;
++static unsigned long fpc_table_add_m;
++
++/*
++ * Structure for the CCDC module to store its own information.
++ */
++static struct isp_ccdc {
++ u8 ccdc_inuse;
++ u32 ccdcout_w;
++ u32 ccdcout_h;
++ u32 ccdcin_w;
++ u32 ccdcin_h;
++ u32 ccdcin_woffset;
++ u32 ccdcin_hoffset;
++ u32 crop_w;
++ u32 crop_h;
++ u8 ccdc_inpfmt;
++ u8 ccdc_outfmt;
++ u8 vpout_en;
++ u8 wen;
++ u8 exwen;
++ u8 refmt_en;
++ u8 ccdcslave;
++ u8 syncif_ipmod;
++ u8 obclamp_en;
++ u8 lsc_en;
++ struct semaphore semlock;
++} ispccdc_obj;
++
++#ifdef USE_ISP_LSC
++ static struct ispccdc_lsc_config lsc_config;
++ static u8 *lsc_gain_table;
++ static unsigned long lsc_ispmmu_addr;
++ static int lsc_initialized;
++ static int size_mismatch;
++ static u8 ccdc_use_lsc;
++ static u8 ispccdc_lsc_tbl[] = {
++ #include "ispccd_lsc.dat"
++ };
++#endif
++
++/* Structure for saving/restoring CCDC module registers*/
++static struct isp_reg ispccdc_reg_list[] = {
++ {ISPCCDC_SYN_MODE, 0x0000},
++ {ISPCCDC_HD_VD_WID, 0x0000},
++ {ISPCCDC_PIX_LINES, 0x0000},
++ {ISPCCDC_HORZ_INFO, 0x0000},
++ {ISPCCDC_VERT_START, 0x0000},
++ {ISPCCDC_VERT_LINES, 0x0000},
++ {ISPCCDC_CULLING, 0x0000},
++ {ISPCCDC_HSIZE_OFF, 0x0000},
++ {ISPCCDC_SDOFST, 0x0000},
++ {ISPCCDC_SDR_ADDR, 0x0000},
++ {ISPCCDC_CLAMP, 0x0000},
++ {ISPCCDC_DCSUB, 0x0000},
++ {ISPCCDC_COLPTN, 0x0000},
++ {ISPCCDC_BLKCMP, 0x0000},
++ {ISPCCDC_FPC, 0x0000},
++ {ISPCCDC_FPC_ADDR, 0x0000},
++ {ISPCCDC_VDINT, 0x0000},
++ {ISPCCDC_ALAW, 0x0000},
++ {ISPCCDC_REC656IF, 0x0000},
++ {ISPCCDC_CFG, 0x0000},
++ {ISPCCDC_FMTCFG, 0x0000},
++ {ISPCCDC_FMT_HORZ, 0x0000},
++ {ISPCCDC_FMT_VERT, 0x0000},
++ {ISPCCDC_FMT_ADDR0, 0x0000},
++ {ISPCCDC_FMT_ADDR1, 0x0000},
++ {ISPCCDC_FMT_ADDR2, 0x0000},
++ {ISPCCDC_FMT_ADDR3, 0x0000},
++ {ISPCCDC_FMT_ADDR4, 0x0000},
++ {ISPCCDC_FMT_ADDR5, 0x0000},
++ {ISPCCDC_FMT_ADDR6, 0x0000},
++ {ISPCCDC_FMT_ADDR7, 0x0000},
++ {ISPCCDC_PRGEVEN0, 0x0000},
++ {ISPCCDC_PRGEVEN1, 0x0000},
++ {ISPCCDC_PRGODD0, 0x0000},
++ {ISPCCDC_PRGODD1, 0x0000},
++ {ISPCCDC_VP_OUT, 0x0000},
++ {ISPCCDC_LSC_CONFIG, 0x0000},
++ {ISPCCDC_LSC_INITIAL, 0x0000},
++ {ISPCCDC_LSC_TABLE_BASE, 0x0000},
++ {ISPCCDC_LSC_TABLE_OFFSET, 0x0000},
++ {ISP_TOK_TERM, 0x0000}
++};
++
++/*
++ * Abstraction layer CCDC Module configuration.
++ */
++int omap34xx_isp_ccdc_config(void *userspace_add)
++{
++ struct ispccdc_bclamp bclamp_t;
++ struct ispccdc_blcomp blcomp_t;
++ struct ispccdc_fpc fpc_t;
++ struct ispccdc_culling cull_t;
++ struct ispccdc_update_config ccdc_struct;
++ u32 old_size;
++
++ if (userspace_add == NULL)
++ return -EINVAL;
++
++ if (copy_from_user(&ccdc_struct,
++ (struct ispccdc_update_config *)(userspace_add),
++ sizeof(struct ispccdc_update_config)))
++ goto copy_from_user_err;
++
++ if ((ISP_ABS_CCDC_ALAW & ccdc_struct.flag) ==
++ ISP_ABS_CCDC_ALAW) {
++ if ((ISP_ABS_CCDC_ALAW & ccdc_struct.update) ==
++ ISP_ABS_CCDC_ALAW) {
++ ispccdc_config_alaw(ccdc_struct.alawip);
++ ispccdc_enable_alaw(1);
++ } else
++ ispccdc_enable_alaw(1);
++ } else {
++ if ((ISP_ABS_CCDC_ALAW & ccdc_struct.update) ==
++ ISP_ABS_CCDC_ALAW)
++ ispccdc_enable_alaw(0);
++ }
++
++ if ((ISP_ABS_CCDC_LPF & ccdc_struct.flag) == ISP_ABS_CCDC_LPF)
++ ispccdc_enable_lpf(1);
++ else
++ ispccdc_enable_lpf(0);
++
++ if ((ISP_ABS_CCDC_BLCLAMP & ccdc_struct.flag) ==
++ ISP_ABS_CCDC_BLCLAMP) {
++ if ((ISP_ABS_CCDC_BLCLAMP & ccdc_struct.update) ==
++ ISP_ABS_CCDC_BLCLAMP) {
++ if (copy_from_user(&bclamp_t,
++ (struct ispccdc_bclamp *)
++ (ccdc_struct.bclamp),
++ sizeof(struct ispccdc_bclamp)))
++ goto copy_from_user_err;
++
++ ispccdc_config_black_clamp(bclamp_t);
++ ispccdc_enable_black_clamp(1);
++ } else
++ ispccdc_enable_black_clamp(1);
++ } else {
++ if ((ISP_ABS_CCDC_BLCLAMP & ccdc_struct.update) ==
++ ISP_ABS_CCDC_BLCLAMP)
++ ispccdc_enable_black_clamp(0);
++ }
++
++ if ((ISP_ABS_CCDC_BCOMP & ccdc_struct.update) == ISP_ABS_CCDC_BCOMP) {
++ if (copy_from_user(&blcomp_t,
++ (struct ispccdc_blcomp *)(ccdc_struct.blcomp),
++ sizeof(blcomp_t)))
++ goto copy_from_user_err;
++
++ ispccdc_config_black_comp(blcomp_t);
++ }
++
++ if ((ISP_ABS_CCDC_FPC & ccdc_struct.flag) == ISP_ABS_CCDC_FPC) {
++ if ((ISP_ABS_CCDC_FPC & ccdc_struct.update) ==
++ ISP_ABS_CCDC_FPC) {
++ if (copy_from_user(&fpc_t,
++ (struct ispccdc_fpc *)(ccdc_struct.fpc),
++ sizeof(fpc_t)))
++ goto copy_from_user_err;
++ fpc_table_add = (u32 *)
++ kmalloc((64 + ((fpc_t.fpnum) * 4)),
++ GFP_KERNEL|GFP_DMA);
++ if (fpc_table_add == NULL) {
++ printk(KERN_ERR "Cannot allocate memory for FPC table");
++ return -ENOMEM;
++ }
++
++ while (((int)fpc_table_add & 0xFFFFFFC0) != (int)fpc_table_add)
++ fpc_table_add++;
++
++ fpc_table_add_m = ispmmu_map(virt_to_phys(fpc_table_add),
++ (fpc_t.fpnum)*4);
++
++ if (copy_from_user(fpc_table_add, (void *)fpc_t.fpcaddr,
++ fpc_t.fpnum * 4))
++ goto copy_from_user_err;
++
++ fpc_t.fpcaddr = fpc_table_add_m;
++ ispccdc_config_fpc(fpc_t);
++ ispccdc_enable_fpc(1);
++ } else
++ ispccdc_enable_fpc(1);
++ } else {
++ if ((ISP_ABS_CCDC_FPC & ccdc_struct.update) ==
++ ISP_ABS_CCDC_FPC)
++ ispccdc_enable_fpc(0);
++ }
++
++ if ((ISP_ABS_CCDC_CULL & ccdc_struct.update) == ISP_ABS_CCDC_CULL) {
++ if (copy_from_user(&cull_t,
++ (struct ispccdc_culling *)(ccdc_struct.cull),
++ sizeof(cull_t)))
++ goto copy_from_user_err;
++ ispccdc_config_culling(cull_t);
++ }
++#ifdef USE_ISP_LSC
++ if ((ISP_ABS_CCDC_CONFIG_LSC & ccdc_struct.flag) ==
++ ISP_ABS_CCDC_CONFIG_LSC) {
++ if ((ISP_ABS_CCDC_CONFIG_LSC & ccdc_struct.update) ==
++ ISP_ABS_CCDC_CONFIG_LSC) {
++ old_size = lsc_config.size;
++ if (copy_from_user(&lsc_config,
++ (struct ispccdc_lsc_config *)
++ (ccdc_struct.lsc_cfg),
++ sizeof(struct ispccdc_lsc_config)))
++ goto copy_from_user_err;
++
++ lsc_initialized = 0;
++
++ if (lsc_config.size <= old_size)
++ size_mismatch = 0;
++ else
++ size_mismatch = 1;
++
++ ispccdc_config_lsc(&lsc_config);
++ }
++ }
++
++ if ((ISP_ABS_CCDC_CONFIG_LSC & ccdc_struct.flag) ==
++ ISP_ABS_CCDC_CONFIG_LSC)
++ ccdc_use_lsc = 1;
++ else {
++ ispccdc_enable_lsc(0);
++ ccdc_use_lsc = 0;
++ }
++#endif
++ if ((ISP_ABS_CCDC_COLPTN & ccdc_struct.update) ==
++ ISP_ABS_CCDC_COLPTN)
++ ispccdc_config_imgattr(ccdc_struct.colptn);
++
++ return 0;
++
++copy_from_user_err:
++ printk(KERN_ERR "CCDC Config:Copy From User Error");
++ return -EINVAL ;
++}
++EXPORT_SYMBOL(omap34xx_isp_ccdc_config);
++
++/*
++ * Reserve the CCDC module.
++ * Only one user at a time.
++ */
++int ispccdc_request(void)
++{
++ down(&(ispccdc_obj.semlock));
++ if (!(ispccdc_obj.ccdc_inuse)) {
++ ispccdc_obj.ccdc_inuse = 1;
++ up(&(ispccdc_obj.semlock));
++ /* Turn on CCDC module Clocks. */
++ omap_writel((omap_readl(ISP_CTRL)) | ISPCTRL_CCDC_RAM_EN |
++ ISPCTRL_CCDC_CLK_EN |
++ ISPCTRL_SBL_WR1_RAM_EN,
++ ISP_CTRL);
++ /* VDLC = 1 is a must if CCDC to be used */
++ omap_writel((omap_readl(ISPCCDC_CFG)) | ISPCCDC_CFG_VDLC
++ , ISPCCDC_CFG);
++ return 0;
++ } else{
++ up(&(ispccdc_obj.semlock));
++ DPRINTK_ISPCCDC("ISP_ERR : CCDC Module Busy");
++ return -EBUSY;
++ }
++}
++EXPORT_SYMBOL(ispccdc_request);
++
++/*
++ * Marks CCDC module free.
++ */
++int ispccdc_free(void)
++{
++ down(&(ispccdc_obj.semlock));
++ if (ispccdc_obj.ccdc_inuse) {
++ ispccdc_obj.ccdc_inuse = 0;
++ up(&(ispccdc_obj.semlock));
++ /* Turn off CCDC module Clocks. */
++ omap_writel((omap_readl(ISP_CTRL)) & ~(ISPCTRL_CCDC_CLK_EN
++ | ISPCTRL_CCDC_RAM_EN
++ | ISPCTRL_SBL_WR1_RAM_EN), ISP_CTRL);
++ return 0;
++ } else {
++ up(&(ispccdc_obj.semlock));
++ DPRINTK_ISPCCDC("ISP_ERR : CCDC Module already freed");
++ return -EINVAL;
++ }
++}
++EXPORT_SYMBOL(ispccdc_free);
++
++#ifdef USE_ISP_LSC
++/*
++ * Load lens shading table
++ */
++int ispccdc_load_lsc(u32 table_size)
++{
++ if (table_size == 0)
++ return -EINVAL;
++
++ if (lsc_initialized)
++ return 0;
++
++ /* Disable LSC module*/
++ ispccdc_enable_lsc(0);
++ lsc_gain_table = kmalloc(table_size, GFP_KERNEL | GFP_DMA);
++
++ if (lsc_gain_table == NULL) {
++ printk(KERN_ERR "Cannot allocate memory for gain tables\n");
++ return -ENOMEM;
++ }
++
++ memcpy(lsc_gain_table, ispccdc_lsc_tbl, table_size);
++ lsc_ispmmu_addr = ispmmu_map(virt_to_phys(lsc_gain_table), table_size);
++
++ omap_writel(lsc_ispmmu_addr , ISPCCDC_LSC_TABLE_BASE);
++ lsc_initialized = 1;
++
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_load_lsc);
++
++/*
++ * Configures the lens shading compensation module
++ * lsc_cfg : LSC configuration structure
++ */
++void ispccdc_config_lsc(struct ispccdc_lsc_config *lsc_cfg)
++{
++ int reg;
++
++ /* Disable LSC module*/
++ ispccdc_enable_lsc(0);
++
++ omap_writel(lsc_cfg->offset, ISPCCDC_LSC_TABLE_OFFSET);
++
++ reg = 0x0000;
++ reg |= (lsc_cfg->gain_mode_n << ISPCCDC_LSC_GAIN_MODE_N_SHIFT);
++ reg |= (lsc_cfg->gain_mode_m << ISPCCDC_LSC_GAIN_MODE_M_SHIFT);
++ reg |= (lsc_cfg->gain_format << ISPCCDC_LSC_GAIN_FORMAT_SHIFT);
++ omap_writel(reg , ISPCCDC_LSC_CONFIG);
++
++ reg = 0x0000;
++ reg &= ~ISPCCDC_LSC_INITIAL_X_MASK;
++ reg |= (lsc_cfg->initial_x << ISPCCDC_LSC_INITIAL_X_SHIFT);
++ reg &= ~ISPCCDC_LSC_INITIAL_Y_MASK;
++ reg |= (lsc_cfg->initial_y << ISPCCDC_LSC_INITIAL_Y_SHIFT);
++ omap_writel(reg , ISPCCDC_LSC_INITIAL);
++}
++EXPORT_SYMBOL(ispccdc_config_lsc);
++
++/*
++ * Enables lens shading compensation module
++ * enable :0 - Disable LSC : 1- Enables LSC
++ */
++void ispccdc_enable_lsc(u8 enable)
++{
++ if (enable & ccdc_use_lsc) {
++ omap_writel(omap_readl(ISP_CTRL) | ISPCTRL_SBL_SHARED_RPORTB |
++ ISPCTRL_SBL_RD_RAM_EN, ISP_CTRL);
++ omap_writel(omap_readl(ISPCCDC_LSC_CONFIG) | 0x01,
++ ISPCCDC_LSC_CONFIG);
++ ispccdc_obj.lsc_en = 1;
++ } else {
++ omap_writel(omap_readl(ISPCCDC_LSC_CONFIG) & 0xFFFE,
++ ISPCCDC_LSC_CONFIG);
++ ispccdc_obj.lsc_en = 0;
++ }
++}
++EXPORT_SYMBOL(ispccdc_enable_lsc);
++
++/*
++* Abstraction layer LSC Updates
++*/
++int omap34xx_isp_lsc_update(void *userspace_add)
++{
++ struct isptables_update isptables_struct;
++
++ if (userspace_add == NULL)
++ return -EINVAL;
++
++ if (copy_from_user(&isptables_struct, (void *)userspace_add,
++ sizeof(struct isptables_update)))
++ goto copy_from_user_err;
++
++ if ((ISP_ABS_TBL_LSC & isptables_struct.flag) == ISP_ABS_TBL_LSC) {
++ if ((ISP_ABS_TBL_LSC & isptables_struct.update) ==
++ ISP_ABS_TBL_LSC) {
++ ispccdc_enable_lsc(0);
++ if (size_mismatch) {
++ ispmmu_unmap(lsc_ispmmu_addr);
++ kfree(lsc_gain_table);
++ lsc_gain_table = kmalloc(lsc_config.size,
++ GFP_KERNEL | GFP_DMA);
++ if (!lsc_gain_table) {
++ printk(KERN_ERR "Cannot allocate "
++ "memory for gain tables \n");
++ return -ENOMEM;
++ }
++
++ lsc_ispmmu_addr = ispmmu_map(
++ virt_to_phys(lsc_gain_table),
++ lsc_config.size);
++ omap_writel(lsc_ispmmu_addr,
++ ISPCCDC_LSC_TABLE_BASE);
++ lsc_initialized = 1;
++ size_mismatch = 0;
++ }
++
++ if (copy_from_user(lsc_gain_table, isptables_struct.lsc,
++ lsc_config.size))
++ goto copy_from_user_err;
++ }
++
++ ccdc_use_lsc = 1;
++ } else {
++ if ((ISP_ABS_TBL_LSC & isptables_struct.update) ==
++ ISP_ABS_TBL_LSC)
++ ispccdc_enable_lsc(0);
++ ccdc_use_lsc = 0;
++ }
++
++ return 0;
++
++copy_from_user_err:
++ printk(KERN_ERR "LSC Update:Copy From User Error");
++ return -EINVAL;
++}
++#else
++void ispccdc_enable_lsc(u8 enable) {}
++#endif
++EXPORT_SYMBOL(omap34xx_isp_lsc_update);
++
++void ispccdc_config_crop(u32 left, u32 top, u32 height, u32 width)
++{
++/* The following restrictions are applied for the crop settings. If incoming
++ * values do not follow these restrictions then we map the settings to the
++ * closest acceptable crop value.
++ * 1) Left offset is always odd. This can be avoided if we enable byte swap
++ * option for incoming data into CCDC.
++ * 2) Height offset is always even.
++ * 3) Crop width is always a multiple of 16 pixels
++ * 4) Crop height is always even.
++ */
++
++ ispccdc_obj.ccdcin_woffset = left + ((left+1)%2);
++ ispccdc_obj.ccdcin_hoffset = top + (top % 2);
++
++ ispccdc_obj.crop_w = width - (width % 16);
++ ispccdc_obj.crop_h = height + (height % 2);
++
++ DPRINTK_ISPCCDC("\n\tOffsets L %d T %d W %d H %d\n",
++ ispccdc_obj.ccdcin_woffset,
++ ispccdc_obj.ccdcin_hoffset,
++ ispccdc_obj.crop_w,
++ ispccdc_obj.crop_h);
++
++}
++/* Sets up the default CCDC configuration according to the arguments.
++ * input : Indicates the module that gives the image to CCDC
++ * output : Indicates the module to which the CCDC outputs to.
++ */
++int ispccdc_config_datapath(enum ccdc_input input,
++ enum ccdc_output output)
++{
++ u32 syn_mode = 0;
++ struct ispccdc_vp vpcfg;
++ struct ispccdc_syncif syncif;
++ struct ispccdc_bclamp blkcfg;
++ /* Color pattern is
++ Gr R Gr R Gr R ...
++ B Gb . B Gb B Gb.....
++ Gr R Gr R Gr R ...
++ B Gb . B Gb B Gb.....
++ */
++ u32 colptn = ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP0PLC0_SHIFT
++ | ISPCCDC_COLPTN_R_Ye << ISPCCDC_COLPTN_CP0PLC1_SHIFT
++ | ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP0PLC2_SHIFT
++ | ISPCCDC_COLPTN_R_Ye << ISPCCDC_COLPTN_CP0PLC3_SHIFT
++ | ISPCCDC_COLPTN_B_Mg << ISPCCDC_COLPTN_CP1PLC0_SHIFT
++ | ISPCCDC_COLPTN_Gb_G << ISPCCDC_COLPTN_CP1PLC1_SHIFT
++ | ISPCCDC_COLPTN_B_Mg << ISPCCDC_COLPTN_CP1PLC2_SHIFT
++ | ISPCCDC_COLPTN_Gb_G << ISPCCDC_COLPTN_CP1PLC3_SHIFT
++ | ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP2PLC0_SHIFT
++ | ISPCCDC_COLPTN_R_Ye << ISPCCDC_COLPTN_CP2PLC1_SHIFT
++ | ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP2PLC2_SHIFT
++ | ISPCCDC_COLPTN_R_Ye << ISPCCDC_COLPTN_CP2PLC3_SHIFT
++ | ISPCCDC_COLPTN_B_Mg << ISPCCDC_COLPTN_CP3PLC0_SHIFT
++ | ISPCCDC_COLPTN_Gb_G << ISPCCDC_COLPTN_CP3PLC1_SHIFT
++ | ISPCCDC_COLPTN_B_Mg << ISPCCDC_COLPTN_CP3PLC2_SHIFT
++ | ISPCCDC_COLPTN_Gb_G << ISPCCDC_COLPTN_CP3PLC3_SHIFT;
++
++ /* CCDC does not convert the image format */
++ if (((input == CCDC_RAW) || (input == CCDC_OTHERS))
++ && (output == CCDC_YUV_RSZ)) {
++ DPRINTK_ISPCCDC("ISP_ERR : Wrong CCDC i/p,o/p Combination");
++ return -EINVAL;
++ }
++
++ syn_mode = omap_readl(ISPCCDC_SYN_MODE);
++
++ switch (output) {
++ case CCDC_YUV_RSZ:
++ syn_mode |= ISPCCDC_SYN_MODE_SDR2RSZ;
++ syn_mode &= ~ISPCCDC_SYN_MODE_WEN;
++ break;
++
++ case CCDC_YUV_MEM_RSZ:
++ syn_mode |= ISPCCDC_SYN_MODE_SDR2RSZ;
++ ispccdc_obj.wen = 1;
++ syn_mode |= ISPCCDC_SYN_MODE_WEN;
++ break;
++
++ case CCDC_OTHERS_VP:
++ syn_mode &= ~ISPCCDC_SYN_MODE_VP2SDR;
++ syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
++ syn_mode &= ~ISPCCDC_SYN_MODE_WEN;
++ /* Video Port Configuration */
++ vpcfg.bitshift_sel = BIT9_0;
++ vpcfg.freq_sel = PIXCLKBY2;
++ ispccdc_config_vp(vpcfg);
++ ispccdc_enable_vp(1);
++ break;
++
++ case CCDC_OTHERS_MEM:
++ syn_mode &= ~ISPCCDC_SYN_MODE_VP2SDR;
++ syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
++ syn_mode |= ISPCCDC_SYN_MODE_WEN;
++ /* Generally cam_wen is used with cam_hs, vs signals */
++#ifndef ENABLE_BT_656_CAPTURE
++ syn_mode |= ISPCCDC_SYN_MODE_EXWEN;
++ omap_writel((omap_readl(ISPCCDC_CFG))
++ | ISPCCDC_CFG_WENLOG, ISPCCDC_CFG);
++#else
++ syn_mode &= ~ISPCCDC_SYN_MODE_EXWEN;
++#endif
++ break;
++
++ case CCDC_OTHERS_VP_MEM:
++ syn_mode |= ISPCCDC_SYN_MODE_VP2SDR;
++ syn_mode |= ISPCCDC_SYN_MODE_WEN;
++ /* Generally cam_wen is used with cam_hs, vs signals */
++ syn_mode |= ISPCCDC_SYN_MODE_EXWEN;
++ omap_writel((omap_readl(ISPCCDC_CFG))
++ | ISPCCDC_CFG_WENLOG, ISPCCDC_CFG);
++ /* Video Port Configuration */
++ vpcfg.bitshift_sel = BIT9_0;
++ vpcfg.freq_sel = PIXCLKBY2;
++ ispccdc_config_vp(vpcfg);
++ ispccdc_enable_vp(1);
++ break;
++ default:
++ DPRINTK_ISPCCDC("ISP_ERR : Wrong CCDC Input");
++ return -EINVAL;
++ };
++
++#ifdef USE_ISP_LSC
++ if (input == CCDC_RAW) {
++ lsc_config.initial_x = 0;
++ lsc_config.initial_y = 0;
++ lsc_config.gain_mode_n = 0x06;
++ lsc_config.gain_mode_m = 0x06;
++ lsc_config.gain_format = 0x04;
++ lsc_config.offset = 0x60;
++ ispccdc_config_lsc(&lsc_config);
++ ispccdc_load_lsc(lsc_config.size);
++ /* mdelay(100);
++ ispccdc_enable_lsc(1); */
++ }
++#endif
++
++ omap_writel(syn_mode, ISPCCDC_SYN_MODE);
++
++ switch (input) {
++ case CCDC_RAW:
++ /* Slave mode */
++ syncif.ccdc_mastermode = 0;
++ /* Normal */
++ syncif.datapol = 0;
++ syncif.datsz = DAT10;
++ /* Progressive Mode */
++ syncif.fldmode = 0;
++ /* Input */
++ syncif.fldout = 0;
++ /* Positive */
++ syncif.fldpol = 0;
++ /* Odd Field */
++ syncif.fldstat = 0;
++ /*Positive */
++ syncif.hdpol = 0;
++ syncif.ipmod = RAW;
++ /* Positive */
++ syncif.vdpol = 0;
++ ispccdc_config_sync_if(syncif);
++ ispccdc_config_imgattr(colptn);
++ blkcfg.dcsubval = 42;
++ ispccdc_config_black_clamp(blkcfg);
++ break;
++ case CCDC_YUV_SYNC:
++ /* Slave mode */
++ syncif.ccdc_mastermode = 0;
++ /* Normal */
++ syncif.datapol = 0;
++ syncif.datsz = DAT8;
++ /* Progressive Mode */
++ syncif.fldmode = 0;
++ /* Input */
++ syncif.fldout = 0;
++ /* Positive */
++ syncif.fldpol = 0;
++ /* Odd Field */
++ syncif.fldstat = 0;
++ /*Positive */
++ syncif.hdpol = 0;
++ syncif.ipmod = YUV16;
++ /*Positive */
++ syncif.vdpol = 0;
++#ifdef ENABLE_BT_656_CAPTURE
++ syncif.bt_r656_en = 0;
++#endif
++ ispccdc_config_imgattr(0);
++ ispccdc_config_sync_if(syncif);
++ blkcfg.dcsubval = 0;
++ ispccdc_config_black_clamp(blkcfg);
++ break;
++ case CCDC_YUV_BT:
++#ifdef ENABLE_BT_656_CAPTURE
++ /* Slave mode */
++ syncif.ccdc_mastermode = 0;
++ /* Normal */
++ syncif.datapol = 0;
++ syncif.datsz = DAT8;
++ /* Progressive Mode */
++ syncif.fldmode = 1;
++ /* Input */
++ syncif.fldout = 0;
++ /* Positive */
++ syncif.fldpol = 0;
++ /* Odd Field */
++ syncif.fldstat = 0;
++ /*Positive */
++ syncif.hdpol = 0;
++ syncif.ipmod = YUV8;
++ /*Positive */
++ syncif.vdpol = 1;
++ syncif.bt_r656_en = 1;
++ ispccdc_config_imgattr(0);
++ ispccdc_config_sync_if(syncif);
++ blkcfg.dcsubval = 0;
++ ispccdc_config_black_clamp(blkcfg);
++#endif
++ break;
++ case CCDC_OTHERS:
++ break;
++ default:
++ DPRINTK_ISPCCDC("ISP_ERR : Wrong CCDC Input");
++ return -EINVAL;
++ }
++
++ ispccdc_obj.ccdc_inpfmt = input;
++ ispccdc_obj.ccdc_outfmt = output;
++ ispccdc_print_status();
++ isp_print_status();
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_config_datapath);
++
++/*
++ * Configures the sync interface parameters between the sensor and the CCDC.
++ * syncif : Structure containing the sync parameters like
++ * field state,
++ * CCDC in master/slave mode, raw/yuv data, polarity of data,
++ * field, hs, vs signals.
++ */
++void ispccdc_config_sync_if(struct ispccdc_syncif syncif)
++{
++ u32 syn_mode = omap_readl(ISPCCDC_SYN_MODE);
++
++ syn_mode |= ISPCCDC_SYN_MODE_VDHDEN;
++
++ if (syncif.fldstat)
++ syn_mode |= ISPCCDC_SYN_MODE_FLDSTAT;
++ else
++ syn_mode &= ~ISPCCDC_SYN_MODE_FLDSTAT;
++
++ syn_mode &= ISPCCDC_SYN_MODE_INPMOD_MASK;
++ ispccdc_obj.syncif_ipmod = syncif.ipmod;
++
++ switch (syncif.ipmod) {
++ case RAW:
++ break;
++ case YUV16:
++ syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
++ break;
++ case YUV8:
++ syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
++#ifdef ENABLE_BT_656_CAPTURE
++ syn_mode |= ISPCCDC_SYN_MODE_PACK8;
++#endif
++ break;
++ };
++
++ syn_mode &= ISPCCDC_SYN_MODE_DATSIZ_MASK;
++ switch (syncif.datsz) {
++ case DAT8:
++ syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_8;
++ break;
++ case DAT10:
++ syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_10;
++ break;
++ case DAT11:
++ syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_11;
++ break;
++ case DAT12:
++ syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_12;
++ break;
++ };
++
++ if (syncif.fldmode)
++ /*Interlaced mode*/
++ syn_mode |= ISPCCDC_SYN_MODE_FLDMODE;
++ else
++ /*Progressive mode */
++ syn_mode &= ~ISPCCDC_SYN_MODE_FLDMODE;
++
++ if (syncif.datapol)
++ /*One's complement */
++ syn_mode |= ISPCCDC_SYN_MODE_DATAPOL;
++ else
++ /*Normal */
++ syn_mode &= ~ISPCCDC_SYN_MODE_DATAPOL;
++
++ if (syncif.fldpol)
++ /*Negative */
++ syn_mode |= ISPCCDC_SYN_MODE_FLDPOL;
++ else
++ /*Positive */
++ syn_mode &= ~ISPCCDC_SYN_MODE_FLDPOL;
++
++ if (syncif.hdpol)
++ /*Negative */
++ syn_mode |= ISPCCDC_SYN_MODE_HDPOL;
++ else
++ /*Positive */
++ syn_mode &= ~ISPCCDC_SYN_MODE_HDPOL;
++
++ if (syncif.vdpol)
++ /*Negative */
++ syn_mode |= ISPCCDC_SYN_MODE_VDPOL;
++ else
++ /*Positive */
++ syn_mode &= ~ISPCCDC_SYN_MODE_VDPOL;
++
++ if (syncif.ccdc_mastermode) {
++ /*fld, hd, vd are output signals in master mode */
++ syn_mode |= ISPCCDC_SYN_MODE_FLDOUT
++ | ISPCCDC_SYN_MODE_VDHDOUT;
++ omap_writel(syncif.hs_width << ISPCCDC_HD_VD_WID_HDW_SHIFT
++ | syncif.vs_width << ISPCCDC_HD_VD_WID_VDW_SHIFT,
++ ISPCCDC_HD_VD_WID);
++
++ /*Pixel per line, half line per frame are used
++ * along with HS/VS as output
++ */
++ omap_writel(syncif.ppln << ISPCCDC_PIX_LINES_PPLN_SHIFT
++ | syncif.hlprf << ISPCCDC_PIX_LINES_HLPRF_SHIFT,
++ ISPCCDC_PIX_LINES);
++ } else
++ /*fld, hd,vd input signals in slave mode */
++ syn_mode &= ~(ISPCCDC_SYN_MODE_FLDOUT
++ | ISPCCDC_SYN_MODE_VDHDOUT);
++
++ omap_writel(syn_mode, ISPCCDC_SYN_MODE);
++
++ if (!(syncif.bt_r656_en))
++ omap_writel((omap_readl(ISPCCDC_REC656IF))
++ & (~ISPCCDC_REC656IF_R656ON), ISPCCDC_REC656IF);
++#ifdef ENABLE_BT_656_CAPTURE
++ else
++ omap_writel((omap_readl(ISPCCDC_REC656IF))
++ | (ISPCCDC_REC656IF_R656ON | ISPCCDC_REC656IF_ECCFVH), ISPCCDC_REC656IF);
++#endif
++}
++EXPORT_SYMBOL(ispccdc_config_sync_if);
++
++/*
++ * Configures the optical/digital black clamp parameters in CCDC.
++ * bclamp : Structure containing the optical black average gain,
++ * optical black sample length, sample lines, and the start pixel
++ * position of the samples w.r.t the HS pulse .
++ */
++int ispccdc_config_black_clamp(struct ispccdc_bclamp bclamp)
++{
++ u32 bclamp_val = 0;
++ if (ispccdc_obj.obclamp_en) {
++ bclamp_val |= bclamp.obgain << ISPCCDC_CLAMP_OBGAIN_SHIFT;
++ bclamp_val |= bclamp.oblen << ISPCCDC_CLAMP_OBSLEN_SHIFT;
++ bclamp_val |= bclamp.oblines << ISPCCDC_CLAMP_OBSLN_SHIFT;
++ bclamp_val |= bclamp.obstpixel << ISPCCDC_CLAMP_OBST_SHIFT;
++ omap_writel(bclamp_val, ISPCCDC_CLAMP);
++ } else {
++ /*
++ * HW Errata 1.39. Camera ISP: DC substract not supported for
++ * YUV 8bit and ITU656
++ */
++#if 0
++ if (is_sil_rev_less_than(OMAP3430_REV_ES2_0))
++ if ((ispccdc_obj.syncif_ipmod == YUV16) ||
++ (ispccdc_obj.syncif_ipmod == YUV8) ||
++ ((omap_readl(ISPCCDC_REC656IF)
++ & ISPCCDC_REC656IF_R656ON)
++ == ISPCCDC_REC656IF_R656ON))
++ bclamp.dcsubval = 0;
++ omap_writel(bclamp.dcsubval, ISPCCDC_DCSUB);
++#endif
++ }
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_config_black_clamp);
++
++/*
++ * Enables the optical or Digital black clamp.
++ * enable : : 1- Enables Optical Black clamp
++ * 0 - Enables Digital Black clamp.
++ */
++void ispccdc_enable_black_clamp(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPCCDC_CLAMP)) | ISPCCDC_CLAMP_CLAMPEN,
++ ISPCCDC_CLAMP);
++ ispccdc_obj.obclamp_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPCCDC_CLAMP))
++ & (~ISPCCDC_CLAMP_CLAMPEN), ISPCCDC_CLAMP);
++ ispccdc_obj.obclamp_en = 0;
++ }
++}
++EXPORT_SYMBOL(ispccdc_enable_black_clamp);
++
++/*
++ * Configures the Faulty Pixel Correction parameters.
++ * fpc : Structure containing the number of faulty pixels corrected
++ * in the frame, address of the FPC table.
++ */
++int ispccdc_config_fpc(struct ispccdc_fpc fpc)
++{
++ u32 fpc_val = 0;
++
++ fpc_val = omap_readl(ISPCCDC_FPC);
++
++ if ((fpc.fpcaddr & 0xFFFFFFC0) == fpc.fpcaddr) {
++ /*Make sure that FPC is disabled*/
++ omap_writel(fpc_val&(~ISPCCDC_FPC_FPCEN), ISPCCDC_FPC);
++ omap_writel(fpc.fpcaddr, ISPCCDC_FPC_ADDR);
++ } else {
++ DPRINTK_ISPCCDC("FPC Address should be on 64byte boundary\n");
++ return -EINVAL;
++ }
++ /*Retain the FPC Enable bit along with the configuration*/
++ omap_writel(fpc_val|(fpc.fpnum<<ISPCCDC_FPC_FPNUM_SHIFT)
++ , ISPCCDC_FPC);
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_config_fpc);
++
++/*
++ * Enables the Faulty Pixel Correction.
++ * enable : : 1- Enables FPC
++ */
++void ispccdc_enable_fpc(u8 enable)
++{
++ if (enable)
++ omap_writel((omap_readl(ISPCCDC_FPC))|ISPCCDC_FPC_FPCEN
++ , ISPCCDC_FPC);
++ else
++ omap_writel((omap_readl(ISPCCDC_FPC))
++ & (~ISPCCDC_FPC_FPCEN), ISPCCDC_FPC);
++}
++EXPORT_SYMBOL(ispccdc_enable_fpc);
++
++/*
++ * Configures the Black Level Compensation parameters.
++ * blcomp : Structure containing the black level compensation value
++ * for RGrGbB pixels. in 2's complement.
++ */
++void ispccdc_config_black_comp(struct ispccdc_blcomp blcomp)
++{
++ u32 blcomp_val = 0;
++ blcomp_val |= blcomp.b_mg << ISPCCDC_BLKCMP_B_MG_SHIFT;
++ blcomp_val |= blcomp.gb_g << ISPCCDC_BLKCMP_GB_G_SHIFT;
++ blcomp_val |= blcomp.gr_cy << ISPCCDC_BLKCMP_GR_CY_SHIFT;
++ blcomp_val |= blcomp.r_ye << ISPCCDC_BLKCMP_R_YE_SHIFT;
++
++ omap_writel(blcomp_val, ISPCCDC_BLKCMP);
++}
++EXPORT_SYMBOL(ispccdc_config_black_comp);
++
++/*
++ * Configures the Video Port Configuration parameters.
++ * vpcfg : Structure containing the Video Port input frequency,
++ * and the 10 bit format.
++ */
++void ispccdc_config_vp(struct ispccdc_vp vpcfg)
++{
++ u32 fmtcfg_vp = omap_readl(ISPCCDC_FMTCFG);
++
++ /*Clear the existing values */
++ fmtcfg_vp &= ISPCCDC_FMTCFG_VPIN_MASK &
++ ISPCCDC_FMTCF_VPIF_FRQ_MASK;
++
++ switch (vpcfg.bitshift_sel) {
++ case BIT9_0:
++ fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_9_0;
++ break;
++ case BIT10_1:
++ fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_10_1;
++ break;
++ case BIT11_2:
++ fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_11_2;
++ break;
++ case BIT12_3:
++ fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_12_3;
++ break;
++ };
++ switch (vpcfg.freq_sel) {
++ case PIXCLKBY2:
++ fmtcfg_vp |= ISPCCDC_FMTCF_VPIF_FRQ_BY2;
++ break;
++ case PIXCLKBY3_5:
++ fmtcfg_vp |= ISPCCDC_FMTCF_VPIF_FRQ_BY3;
++ break;
++ case PIXCLKBY4_5:
++ fmtcfg_vp |= ISPCCDC_FMTCF_VPIF_FRQ_BY4;
++ break;
++ case PIXCLKBY5_5:
++ fmtcfg_vp |= ISPCCDC_FMTCF_VPIF_FRQ_BY5;
++ break;
++ case PIXCLKBY6_5:
++ fmtcfg_vp |= ISPCCDC_FMTCF_VPIF_FRQ_BY6;
++ break;
++ };
++ omap_writel(fmtcfg_vp, ISPCCDC_FMTCFG);
++}
++EXPORT_SYMBOL(ispccdc_config_vp);
++
++/*
++ * Enables the Video Port.
++ * enable : : 1- Enables VP
++ */
++void ispccdc_enable_vp(u8 enable)
++{
++ if (enable)
++ omap_writel((omap_readl(ISPCCDC_FMTCFG))
++ | ISPCCDC_FMTCFG_VPEN, ISPCCDC_FMTCFG);
++ else
++ omap_writel((omap_readl(ISPCCDC_FMTCFG))
++ & (~ISPCCDC_FMTCFG_VPEN), ISPCCDC_FMTCFG);
++}
++EXPORT_SYMBOL(ispccdc_enable_vp);
++
++/*
++ * Configures the Reformatter register values if line alternating is disabled.
++ * else just enabling the line alternating is enough.
++ * refmt : : Structure containing the memory address to format and
++ * the bit fields for the reformatter registers.
++ */
++void ispccdc_config_reformatter(struct ispccdc_refmt refmt)
++{
++ u32 fmtcfg_val = 0;
++
++ fmtcfg_val = omap_readl(ISPCCDC_FMTCFG);
++
++ if (refmt.lnalt)
++ fmtcfg_val |= ISPCCDC_FMTCFG_LNALT;
++ else{
++ fmtcfg_val &= ~ISPCCDC_FMTCFG_LNALT;
++ /*Clear fields of lnum plen_even/odd*/
++ fmtcfg_val &= 0xFFFFF003;
++ fmtcfg_val |= refmt.lnum << ISPCCDC_FMTCFG_LNUM_SHIFT;
++ fmtcfg_val |= refmt.plen_even <<
++ ISPCCDC_FMTCFG_PLEN_EVEN_SHIFT;
++ fmtcfg_val |= refmt.plen_odd << ISPCCDC_FMTCFG_PLEN_ODD_SHIFT;
++
++ /*The arguments have the proper caluclated addresses
++ * and bit fields for the reformatter configuration*/
++ omap_writel(refmt.prgeven0, ISPCCDC_PRGEVEN0);
++ omap_writel(refmt.prgeven1, ISPCCDC_PRGEVEN1);
++ omap_writel(refmt.prgodd0, ISPCCDC_PRGODD0);
++ omap_writel(refmt.prgodd1, ISPCCDC_PRGODD1);
++ omap_writel(refmt.fmtaddr0, ISPCCDC_FMT_ADDR0);
++ omap_writel(refmt.fmtaddr1, ISPCCDC_FMT_ADDR1);
++ omap_writel(refmt.fmtaddr2, ISPCCDC_FMT_ADDR2);
++ omap_writel(refmt.fmtaddr3, ISPCCDC_FMT_ADDR3);
++ omap_writel(refmt.fmtaddr4, ISPCCDC_FMT_ADDR4);
++ omap_writel(refmt.fmtaddr5, ISPCCDC_FMT_ADDR5);
++ omap_writel(refmt.fmtaddr6, ISPCCDC_FMT_ADDR6);
++ omap_writel(refmt.fmtaddr7, ISPCCDC_FMT_ADDR7);
++ }
++ omap_writel(fmtcfg_val, ISPCCDC_FMTCFG);
++}
++EXPORT_SYMBOL(ispccdc_config_reformatter);
++
++/*
++ * Enables the Reformatter
++ * enable : : 1- Enables Data Reformatter
++ */
++void ispccdc_enable_reformatter(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPCCDC_FMTCFG))
++ | ISPCCDC_FMTCFG_FMTEN, ISPCCDC_FMTCFG);
++ ispccdc_obj.refmt_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPCCDC_FMTCFG))
++ & ~ISPCCDC_FMTCFG_FMTEN, ISPCCDC_FMTCFG);
++ ispccdc_obj.refmt_en = 0;
++ }
++}
++EXPORT_SYMBOL(ispccdc_enable_reformatter);
++
++/*
++ * Configures the Culling parameters.
++ * cull : : Structure containing the vertical culling pattern,
++ * and horizontal culling pattern for odd and even lines.
++ */
++void ispccdc_config_culling(struct ispccdc_culling cull)
++{
++ u32 culling_val = 0;
++
++ culling_val |= cull.v_pattern<<ISPCCDC_CULLING_CULV_SHIFT;
++ culling_val |= cull.h_even << ISPCCDC_CULLING_CULHEVN_SHIFT;
++ culling_val |= cull.h_odd << ISPCCDC_CULLING_CULHODD_SHIFT;
++
++ omap_writel(culling_val, ISPCCDC_CULLING);
++}
++EXPORT_SYMBOL(ispccdc_config_culling);
++
++/*
++ * Enables the Low pass Filter
++ * enable : : 1- Enables LPF
++ */
++void ispccdc_enable_lpf(u8 enable)
++{
++ if (enable)
++ omap_writel((omap_readl(ISPCCDC_SYN_MODE))
++ | ISPCCDC_SYN_MODE_LPF, ISPCCDC_SYN_MODE);
++ else
++ omap_writel((omap_readl(ISPCCDC_SYN_MODE))
++ & (~ISPCCDC_SYN_MODE_LPF), ISPCCDC_SYN_MODE);
++}
++EXPORT_SYMBOL(ispccdc_enable_lpf);
++
++/*
++ * Configures the input width for A-law.
++ * ipwidth : Input width for ALaw
++ */
++void ispccdc_config_alaw(enum alaw_ipwidth ipwidth)
++{
++ omap_writel(ipwidth << ISPCCDC_ALAW_GWDI_SHIFT, ISPCCDC_ALAW);
++}
++EXPORT_SYMBOL(ispccdc_config_alaw);
++
++/*
++ * Enables the A-law compression
++ * enable : : 1- Enables A-Law
++ */
++void ispccdc_enable_alaw(u8 enable)
++{
++ if (enable)
++ omap_writel((omap_readl(ISPCCDC_ALAW))
++ | ISPCCDC_ALAW_CCDTBL, ISPCCDC_ALAW);
++ else
++ omap_writel((omap_readl(ISPCCDC_ALAW))
++ & ~ISPCCDC_ALAW_CCDTBL, ISPCCDC_ALAW);
++}
++EXPORT_SYMBOL(ispccdc_enable_alaw);
++
++/*
++ * Configures the sensor image specific attribute.
++ * colptn : Color pattern of the sensor.
++ */
++void ispccdc_config_imgattr(u32 colptn)
++{
++ omap_writel(colptn, ISPCCDC_COLPTN);
++}
++EXPORT_SYMBOL(ispccdc_config_imgattr);
++
++/*
++ * Programs the shadow registers associated with CCDC.
++ */
++void ispccdc_config_shadow_registers(void)
++{
++ if (ccdc_use_lsc && !ispccdc_obj.lsc_en &&
++ (ispccdc_obj.ccdc_inpfmt == CCDC_RAW))
++ ispccdc_enable_lsc(1);
++ return;
++}
++EXPORT_SYMBOL(ispccdc_config_shadow_registers);
++
++/*
++ * Calculates the number of pixels cropped if the reformater is disabled,
++ * Fills up the output widht height variables in the isp_ccdc structure .
++ * input_w : input width for the CCDC in number of pixels per line
++ * input_h : input height for the CCDC in number of lines
++ * output_w : output width from the CCDC in number of pixels per line
++ * output_h : output height for the CCDC in number of lines
++*/
++int ispccdc_try_size(u32 input_w, u32 input_h, u32 *output_w,
++ u32 *output_h)
++{
++/*
++ * CCDC cannot handle less than 2 pixels for input.
++ */
++ if (input_w < 2) {
++ DPRINTK_ISPCCDC("ISP_ERR: CCDC cannot handle input width less"
++ " than 2 pixels\n");
++ return -EINVAL;
++ }
++
++/*
++ * If crop settings are issued then output size from CCDC
++ * will be equal to the crop window specified.
++ */
++
++ if (ispccdc_obj.crop_w)
++ *output_w = ispccdc_obj.crop_w;
++ else
++ *output_w = input_w;
++
++ if (ispccdc_obj.crop_h)
++ *output_h = ispccdc_obj.crop_h;
++ else
++ *output_h = input_h;
++
++ if ((!ispccdc_obj.refmt_en) && (ispccdc_obj.ccdc_outfmt !=
++ CCDC_OTHERS_MEM))
++ *output_h -= 1;
++
++ if ((ispccdc_obj.ccdc_outfmt == CCDC_OTHERS_MEM) ||
++ (ispccdc_obj.ccdc_outfmt == CCDC_OTHERS_VP_MEM)) {
++ if (*output_w % 16) {
++ *output_w -= (*output_w % 16);
++ *output_w += 16;
++ }
++ }
++
++ ispccdc_obj.ccdcout_w = *output_w;
++ ispccdc_obj.ccdcout_h = *output_h;
++ ispccdc_obj.ccdcin_w = input_w;
++ ispccdc_obj.ccdcin_h = input_h;
++
++ DPRINTK_ISPCCDC("try size: ccdcin_w=%u,ccdcin_h=%u,ccdcout_w=%u,"
++ " ccdcout_h=%u\n",
++ ispccdc_obj.ccdcin_w,
++ ispccdc_obj.ccdcin_h,
++ ispccdc_obj.ccdcout_w,
++ ispccdc_obj.ccdcout_h);
++
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_try_size);
++
++/*
++ * Configures the appropriate values stored in the isp_ccdc structure to
++ * HORZ/VERT_INFO registers and the VP_OUT depending on whether the image
++ * is stored in memory or given to the another module in the ISP pipeline.
++ * input_w : input width for the CCDC in number of pixels per line
++ * input_h : input height for the CCDC in number of lines
++ * output_w : output width from the CCDC in number of pixels per line
++ * output_h : output height for the CCDC in number of lines
++ */
++int ispccdc_config_size(u32 input_w, u32 input_h, u32 output_w, u32 output_h)
++{
++ DPRINTK_ISPCCDC("config size: input_w=%u,input_h=%u,output_w=%u,"
++ "output_h=%u\n", input_w, input_h, output_w, output_h);
++
++ if ((output_w != ispccdc_obj.ccdcout_w)
++ || (output_h != ispccdc_obj.ccdcout_h)) {
++ DPRINTK_ISPCCDC("ISP_ERR : ispccdc_try_size should "
++ "be called before config size\n");
++ return -EINVAL;
++ }
++
++ if (ispccdc_obj.ccdc_outfmt == CCDC_OTHERS_VP) {
++ /* Start with 1 pixel apart */
++ omap_writel((ispccdc_obj.ccdcin_woffset
++ << ISPCCDC_FMT_HORZ_FMTSPH_SHIFT)
++ | (ispccdc_obj.ccdcin_w
++ << ISPCCDC_FMT_HORZ_FMTLNH_SHIFT),
++ ISPCCDC_FMT_HORZ);
++
++ omap_writel((ispccdc_obj.ccdcin_hoffset
++ << ISPCCDC_FMT_VERT_FMTSLV_SHIFT)
++ | ((ispccdc_obj.ccdcin_h)
++ << ISPCCDC_FMT_VERT_FMTLNV_SHIFT),
++ ISPCCDC_FMT_VERT);
++
++ omap_writel((ispccdc_obj.ccdcout_w
++ << ISPCCDC_VP_OUT_HORZ_NUM_SHIFT)
++ | (ispccdc_obj.ccdcout_h
++ << ISPCCDC_VP_OUT_VERT_NUM_SHIFT),
++ ISPCCDC_VP_OUT);
++ omap_writel((((ispccdc_obj.ccdcout_h - 25)
++ & ISPCCDC_VDINT_0_MASK)
++ << ISPCCDC_VDINT_0_SHIFT)
++ | (((50) & ISPCCDC_VDINT_1_MASK)
++ << ISPCCDC_VDINT_1_SHIFT),
++ ISPCCDC_VDINT);
++
++ } else if (ispccdc_obj.ccdc_outfmt == CCDC_OTHERS_MEM) {
++#ifndef CONFIG_ARCH_OMAP3410
++#ifndef ENABLE_BT_656_CAPTURE
++ omap_writel(1 << ISPCCDC_HORZ_INFO_SPH_SHIFT
++ | ((ispccdc_obj.ccdcout_w - 1)
++ << ISPCCDC_HORZ_INFO_NPH_SHIFT),
++ ISPCCDC_HORZ_INFO);
++#else
++ omap_writel(0 << ISPCCDC_HORZ_INFO_SPH_SHIFT
++ | (((ispccdc_obj.ccdcout_w << 1) - 1)
++ << ISPCCDC_HORZ_INFO_NPH_SHIFT),
++ ISPCCDC_HORZ_INFO);
++#endif
++#else
++ omap_writel(0 << ISPCCDC_HORZ_INFO_SPH_SHIFT
++ | ((ispccdc_obj.ccdcout_w - 1)
++ << ISPCCDC_HORZ_INFO_NPH_SHIFT),
++ ISPCCDC_HORZ_INFO);
++#endif
++
++#ifndef ENABLE_BT_656_CAPTURE
++ omap_writel(0 << ISPCCDC_VERT_START_SLV0_SHIFT,
++ ISPCCDC_VERT_START);
++ omap_writel((ispccdc_obj.ccdcout_h - 1)
++ << ISPCCDC_VERT_LINES_NLV_SHIFT,
++ ISPCCDC_VERT_LINES);
++#else
++ omap_writel(2 << ISPCCDC_VERT_START_SLV0_SHIFT | 2 << ISPCCDC_VERT_START_SLV1_SHIFT,
++ ISPCCDC_VERT_START);
++ omap_writel(((ispccdc_obj.ccdcout_h >> 1) - 1)
++ << ISPCCDC_VERT_LINES_NLV_SHIFT,
++ ISPCCDC_VERT_LINES);
++#endif
++
++ /*Configure the HSIZE_OFF with output buffer width */
++ ispccdc_config_outlineoffset(ispccdc_obj.ccdcout_w*2, 0, 0);
++
++#ifndef ENABLE_BT_656_CAPTURE
++ omap_writel((((ispccdc_obj.ccdcout_h - 1)
++ & ISPCCDC_VDINT_0_MASK)
++ << ISPCCDC_VDINT_0_SHIFT)
++ | (((50) & ISPCCDC_VDINT_1_MASK)
++ << ISPCCDC_VDINT_1_SHIFT),
++ ISPCCDC_VDINT);
++#else
++ ispccdc_config_outlineoffset(ispccdc_obj.ccdcout_w*2,
++ EVENEVEN, 1);
++ ispccdc_config_outlineoffset(ispccdc_obj.ccdcout_w*2,
++ ODDEVEN, 1);
++ ispccdc_config_outlineoffset(ispccdc_obj.ccdcout_w*2,
++ EVENODD, 1);
++ ispccdc_config_outlineoffset(ispccdc_obj.ccdcout_w*2,
++ ODDODD, 1);
++
++ omap_writel(((((ispccdc_obj.ccdcout_h >> 1) - 1)
++ & ISPCCDC_VDINT_0_MASK)
++ << ISPCCDC_VDINT_0_SHIFT)
++ | (((50) & ISPCCDC_VDINT_1_MASK)
++ << ISPCCDC_VDINT_1_SHIFT),
++ ISPCCDC_VDINT);
++#endif
++ } else if (ispccdc_obj.ccdc_outfmt == CCDC_OTHERS_VP_MEM) {
++ /* Start with 1 pixel apart */
++ omap_writel((1 << ISPCCDC_FMT_HORZ_FMTSPH_SHIFT)
++ | (ispccdc_obj.ccdcin_w
++ << ISPCCDC_FMT_HORZ_FMTLNH_SHIFT),
++ ISPCCDC_FMT_HORZ);
++
++ omap_writel((0 << ISPCCDC_FMT_VERT_FMTSLV_SHIFT)
++ | ((ispccdc_obj.ccdcin_h)
++ << ISPCCDC_FMT_VERT_FMTLNV_SHIFT),
++ ISPCCDC_FMT_VERT);
++
++ omap_writel((ispccdc_obj.ccdcout_w
++ << ISPCCDC_VP_OUT_HORZ_NUM_SHIFT)
++ | (ispccdc_obj.ccdcout_h
++ << ISPCCDC_VP_OUT_VERT_NUM_SHIFT),
++ ISPCCDC_VP_OUT);
++ omap_writel(0 << ISPCCDC_HORZ_INFO_SPH_SHIFT
++ | ((ispccdc_obj.ccdcout_w - 1)
++ << ISPCCDC_HORZ_INFO_NPH_SHIFT),
++ ISPCCDC_HORZ_INFO);
++ omap_writel(0 << ISPCCDC_VERT_START_SLV0_SHIFT,
++ ISPCCDC_VERT_START);
++ omap_writel((ispccdc_obj.ccdcout_h - 1)
++ << ISPCCDC_VERT_LINES_NLV_SHIFT,
++ ISPCCDC_VERT_LINES);
++ /*Configure the HSIZE_OFF with output buffer width*/
++ ispccdc_config_outlineoffset(ispccdc_obj.ccdcout_w*2, 0, 0);
++ omap_writel((((ispccdc_obj.ccdcout_h - 25)
++ & ISPCCDC_VDINT_0_MASK)
++ << ISPCCDC_VDINT_0_SHIFT)
++ | (((50) & ISPCCDC_VDINT_1_MASK)
++ << ISPCCDC_VDINT_1_SHIFT),
++ ISPCCDC_VDINT);
++ }
++#ifdef USE_ISP_LSC
++ if (ispccdc_obj.ccdc_inpfmt == CCDC_RAW) {
++ ispccdc_config_lsc(&lsc_config);
++ ispccdc_load_lsc(lsc_config.size);
++ }
++#endif
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_config_size);
++
++/*
++ * Configures the output line offset when stored in memory.
++ * Configures the num of even and odd line fields in case of rearranging
++ * the lines
++ * offset: twice the Output width and aligned on 32byte boundary.
++ * oddeven: odd/even line pattern to be chosen to store the output
++ * numlines: Configure the value 0-3 for +1-4lines, 4-7 for -1-4lines
++ */
++int ispccdc_config_outlineoffset(u32 offset, u8 oddeven, u8 numlines)
++{
++
++
++ /*
++ * Make sure offset is multiple of 32bytes. ie last 5bits should be
++ * zero
++ */
++ if ((offset & ISP_32B_BOUNDARY_OFFSET) == offset)
++ omap_writel((offset&0xFFFF), ISPCCDC_HSIZE_OFF);
++ else {
++ DPRINTK_ISPCCDC("ISP_ERR : Offset should be in 32 byte \
++ boundary");
++ return -EINVAL;
++ }
++
++ /*0 - By default Donot inverse the field identification */
++ omap_writel((omap_readl(ISPCCDC_SDOFST) & (~ISPCCDC_SDOFST_FINV)),
++ ISPCCDC_SDOFST);
++
++ /*0 - By default one line offset*/
++ omap_writel(omap_readl(ISPCCDC_SDOFST) & ISPCCDC_SDOFST_FOFST_1L,
++ ISPCCDC_SDOFST);
++
++ switch (oddeven) {
++ case EVENEVEN: /*even lines even fields*/
++ omap_writel((omap_readl(ISPCCDC_SDOFST))|
++ ((numlines & 0x7) << ISPCCDC_SDOFST_LOFST0_SHIFT)
++ , ISPCCDC_SDOFST);
++ break;
++ case ODDEVEN: /*odd lines even fields*/
++ omap_writel((omap_readl(ISPCCDC_SDOFST))|
++ ((numlines & 0x7) << ISPCCDC_SDOFST_LOFST1_SHIFT)
++ , ISPCCDC_SDOFST);
++ break;
++ case EVENODD: /*even lines odd fields*/
++ omap_writel((omap_readl(ISPCCDC_SDOFST)) |
++ ((numlines & 0x7) << ISPCCDC_SDOFST_LOFST2_SHIFT)
++ , ISPCCDC_SDOFST);
++ break;
++ case ODDODD: /*odd lines odd fields*/
++ omap_writel((omap_readl(ISPCCDC_SDOFST)) |
++ ((numlines & 0x7) << ISPCCDC_SDOFST_LOFST3_SHIFT)
++ , ISPCCDC_SDOFST);
++ break;
++ default:
++ break;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(ispccdc_config_outlineoffset);
++
++/*
++ * Configures the memory address where the output should be stored.
++ * addr : 32bit memory address aligned on 32 bit boundary.
++ */
++int ispccdc_set_outaddr(u32 addr)
++{
++ if ((addr & ISP_32B_BOUNDARY_BUF) == addr) {
++ omap_writel(addr, ISPCCDC_SDR_ADDR);
++ return 0;
++ } else {
++ DPRINTK_ISPCCDC("ISP_ERR : Address should be in 32 byte \
++ boundary");
++ return -EINVAL;
++ }
++
++}
++EXPORT_SYMBOL(ispccdc_set_outaddr);
++
++/*
++ *
++ * Enables the CCDC module.
++ * Client should configure all the sub modules in CCDC before this.
++ * enable : 1- Enables the preview module.
++ */
++void ispccdc_enable(u8 enable)
++{
++ if (enable)
++ omap_writel(omap_readl(ISPCCDC_PCR) | (ISPCCDC_PCR_EN),
++ ISPCCDC_PCR);
++ else
++ omap_writel(omap_readl(ISPCCDC_PCR) & ~(ISPCCDC_PCR_EN),
++ ISPCCDC_PCR);
++}
++EXPORT_SYMBOL(ispccdc_enable);
++
++#ifdef ENABLE_BT_656_CAPTURE
++/*
++ * Configures the location of Y color component when YCbCr 8-bit data is input
++ */
++void ispccdc_config_y8pos(enum y8pos_mode mode)
++{
++ if (mode == Y8POS_EVEN)
++ omap_writel(omap_readl(ISPCCDC_CFG) & ~(ISPCCDC_CFG_Y8POS),
++ ISPCCDC_CFG);
++ else
++ omap_writel(omap_readl(ISPCCDC_CFG) | (ISPCCDC_CFG_Y8POS),
++ ISPCCDC_CFG);
++}
++EXPORT_SYMBOL(ispccdc_config_y8pos);
++
++/*
++ * Configures byte swap data stored in memory. 1 - swap bytes, 0 - normal
++ */
++void ispccdc_config_byteswap(int swap)
++{
++ if (swap)
++ omap_writel(omap_readl(ISPCCDC_CFG) | (ISPCCDC_CFG_BSWD),
++ ISPCCDC_CFG);
++ else
++ omap_writel(omap_readl(ISPCCDC_CFG) & ~(ISPCCDC_CFG_BSWD),
++ ISPCCDC_CFG);
++}
++EXPORT_SYMBOL(ispccdc_config_byteswap);
++#endif
++
++int ispccdc_busy(void)
++{
++ return (omap_readl(ISPCCDC_PCR) & ISPCCDC_PCR_BUSY);
++}
++EXPORT_SYMBOL(ispccdc_busy);
++
++/*
++ * Saves the values of the CCDC module registers.
++ */
++void ispccdc_save_context(void)
++{
++ DPRINTK_ISPCCDC(" Saving context \n");
++ isp_save_context(ispccdc_reg_list);
++
++}
++EXPORT_SYMBOL(ispccdc_save_context);
++
++/*
++ * Restores the values of the CCDC module registers.
++ */
++void ispccdc_restore_context(void)
++{
++ DPRINTK_ISPCCDC(" Restoring context\n");
++ isp_restore_context(ispccdc_reg_list);
++}
++EXPORT_SYMBOL(ispccdc_restore_context);
++
++/*
++ * Prints the values of the CCDC Module registers
++ * Also prints other debug information stored in the CCDC module
++ */
++void ispccdc_print_status(void)
++{
++#ifdef OMAP_ISPCCDC_DEBUG
++ DPRINTK_ISPCCDC("Module in use =%d\n", ispccdc_obj.ccdc_inuse);
++ DPRINTK_ISPCCDC("Accepted CCDC Input (width = %d,Height = %d)\n",
++ ispccdc_obj.ccdcin_w,
++ ispccdc_obj.ccdcin_h);
++ DPRINTK_ISPCCDC("Accepted CCDC Output (width = %d,Height = %d)\n",
++ ispccdc_obj.ccdcout_w,
++ ispccdc_obj.ccdcout_h);
++
++ DPRINTK_ISPCCDC("###CCDC PCR=0x%x\n", omap_readl(ISPCCDC_PCR));
++ DPRINTK_ISPCCDC("ISP_CTRL =0x%x\n", omap_readl(ISP_CTRL));
++ switch (ispccdc_obj.ccdc_inpfmt) {
++ case CCDC_RAW:
++ DPRINTK_ISPCCDC("ccdc input format is CCDC_RAW\n");
++ break;
++ case CCDC_YUV_SYNC:
++ DPRINTK_ISPCCDC("ccdc input format is CCDC_YUV_SYNC\n");
++ break;
++ case CCDC_YUV_BT:
++ DPRINTK_ISPCCDC("ccdc input format is CCDC_YUV_BT\n");
++ break;
++
++ }
++ switch (ispccdc_obj.ccdc_outfmt) {
++ case CCDC_OTHERS_VP:
++ DPRINTK_ISPCCDC("ccdc output format is CCDC_OTHERS_VP\n");
++ break;
++ case CCDC_OTHERS_MEM:
++ DPRINTK_ISPCCDC("ccdc output format is CCDC_OTHERS_MEM\n");
++ break;
++ case CCDC_YUV_RSZ:
++ DPRINTK_ISPCCDC("ccdc output format is CCDC_YUV_RSZ\n");
++ break;
++ }
++ DPRINTK_ISPCCDC("###ISP_CTRL in ccdc =0x%x\n", omap_readl(ISP_CTRL));
++ DPRINTK_ISPCCDC("###ISP_IRQ0ENABLE in ccdc =0x%x\n",
++ omap_readl(ISP_IRQ0ENABLE));
++ DPRINTK_ISPCCDC("###ISP_IRQ0STATUS in ccdc =0x%x\n",
++ omap_readl(ISP_IRQ0STATUS));
++ DPRINTK_ISPCCDC("###CCDC SYN_MODE=0x%x\n",
++ omap_readl(ISPCCDC_SYN_MODE));
++ DPRINTK_ISPCCDC("###CCDC HORZ_INFO=0x%x\n",
++ omap_readl(ISPCCDC_HORZ_INFO));
++ DPRINTK_ISPCCDC("###CCDC VERT_START=0x%x\n",
++ omap_readl(ISPCCDC_VERT_START));
++ DPRINTK_ISPCCDC("###CCDC VERT_LINES=0x%x\n",
++ omap_readl(ISPCCDC_VERT_LINES));
++ DPRINTK_ISPCCDC("###CCDC CULLING=0x%x\n", omap_readl(ISPCCDC_CULLING));
++ DPRINTK_ISPCCDC("###CCDC HSIZE_OFF=0x%x\n",
++ omap_readl(ISPCCDC_HSIZE_OFF));
++ DPRINTK_ISPCCDC("###CCDC SDOFST=0x%x\n", omap_readl(ISPCCDC_SDOFST));
++ DPRINTK_ISPCCDC("###CCDC SDR_ADDR=0x%x\n",
++ omap_readl(ISPCCDC_SDR_ADDR));
++ DPRINTK_ISPCCDC("###CCDC CLAMP=0x%x\n", omap_readl(ISPCCDC_CLAMP));
++ DPRINTK_ISPCCDC("###CCDC COLPTN=0x%x\n", omap_readl(ISPCCDC_COLPTN));
++ DPRINTK_ISPCCDC("###CCDC CFG=0x%x\n", omap_readl(ISPCCDC_CFG));
++ DPRINTK_ISPCCDC("###CCDC VP_OUT=0x%x\n", omap_readl(ISPCCDC_VP_OUT));
++ DPRINTK_ISPCCDC("###CCDC_SDR_ADDR= 0x%x\n",
++ omap_readl(ISPCCDC_SDR_ADDR));
++ DPRINTK_ISPCCDC("###CCDC FMTCFG=0x%x\n", omap_readl(ISPCCDC_FMTCFG));
++ DPRINTK_ISPCCDC("###CCDC FMT_HORZ=0x%x\n",
++ omap_readl(ISPCCDC_FMT_HORZ));
++ DPRINTK_ISPCCDC("###CCDC FMT_VERT=0x%x\n",
++ omap_readl(ISPCCDC_FMT_VERT));
++ DPRINTK_ISPCCDC("###CCDC LSC_CONFIG=0x%x\n",
++ omap_readl(ISPCCDC_LSC_CONFIG));
++ DPRINTK_ISPCCDC("###CCDC LSC_INIT=0x%x\n",
++ omap_readl(ISPCCDC_LSC_INITIAL));
++ DPRINTK_ISPCCDC("###CCDC LSC_TABLE BASE=0x%x\n",
++ omap_readl(ISPCCDC_LSC_TABLE_BASE));
++ DPRINTK_ISPCCDC("###CCDC LSC TABLE OFFSET=0x%x\n",
++ omap_readl(ISPCCDC_LSC_TABLE_OFFSET));
++#endif
++}
++EXPORT_SYMBOL(ispccdc_print_status);
++
++/*
++ * Module Initialisation.
++ */
++static int __init isp_ccdc_init(void)
++{
++ ispccdc_obj.ccdc_inuse = 0;
++ ispccdc_config_crop(0, 0, 0, 0);
++ init_MUTEX(&(ispccdc_obj.semlock));
++
++#ifdef USE_ISP_LSC
++ lsc_config.initial_x = 0;
++ lsc_config.initial_y = 0;
++ lsc_config.gain_mode_n = 0x06;
++ lsc_config.gain_mode_m = 0x06;
++ lsc_config.gain_format = 0x04;
++ lsc_config.offset = 0x60;
++ lsc_config.size = sizeof(ispccdc_lsc_tbl);
++ ccdc_use_lsc = 1;
++#endif
++
++ return 0;
++}
++
++static void isp_ccdc_cleanup(void)
++{
++#ifdef USE_ISP_LSC
++ if (lsc_initialized) {
++ ispmmu_unmap(lsc_ispmmu_addr);
++ kfree(lsc_gain_table);
++ lsc_initialized = 0;
++ }
++#endif
++ if (fpc_table_add_m != 0) {
++ ispmmu_unmap(fpc_table_add_m);
++ kfree(fpc_table_add);
++ }
++}
++
++module_init(isp_ccdc_init);
++module_exit(isp_ccdc_cleanup);
++
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("ISP CCDC Library");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/ispccdc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispccdc.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,342 @@
++/*
++ * drivers/media/video/isp/ispccdc.h
++ *
++ * Driver include file for CCDC module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_CCDC_H
++#define OMAP_ISP_CCDC_H
++
++/*Abstraction layer CCDC configurations*/
++#define ISP_ABS_CCDC_ALAW (1 << 0)
++#define ISP_ABS_CCDC_LPF (1 << 1)
++#define ISP_ABS_CCDC_BLCLAMP (1 << 2)
++#define ISP_ABS_CCDC_BCOMP (1 << 3)
++#define ISP_ABS_CCDC_FPC (1 << 4)
++#define ISP_ABS_CCDC_CULL (1 << 5)
++#define ISP_ABS_CCDC_COLPTN (1 << 6)
++#define ISP_ABS_CCDC_CONFIG_LSC (1 << 7)
++
++#define ISP_ABS_TBL_LSC (1 << 0)
++
++#ifndef CONFIG_ARCH_OMAP3410
++ #include "isppreview.h"
++#endif
++
++int ispccdc_request(void);
++
++int ispccdc_free(void);
++
++/*Enumeration constants for CCDC input output format */
++enum ccdc_input {
++ CCDC_RAW,
++ CCDC_YUV_SYNC,
++ CCDC_YUV_BT,
++ CCDC_OTHERS
++};
++enum ccdc_output {
++ CCDC_YUV_RSZ,
++ CCDC_YUV_MEM_RSZ,
++ CCDC_OTHERS_VP,
++ CCDC_OTHERS_MEM,
++ CCDC_OTHERS_VP_MEM
++};
++
++/*
++ * Sets up the default CCDC configuration according to the arguments.
++ */
++int ispccdc_config_datapath(enum ccdc_input input, enum ccdc_output output);
++
++/*
++ * Configures the crop settings in the CCDC module.
++ */
++void ispccdc_config_crop(u32 left, u32 top, u32 height, u32 width);
++
++/* Enumeration constants for the sync interface parameters */
++enum inpmode {
++ RAW,
++ YUV16,
++ YUV8
++};
++enum datasize {
++ DAT8,
++ DAT10,
++ DAT11,
++ DAT12
++};
++
++#ifdef ENABLE_BT_656_CAPTURE
++/*
++ * Configure location of Y component in 8-bit YUV data input
++ */
++enum y8pos_mode {
++ Y8POS_EVEN = 0,
++ Y8POS_ODD = 1
++};
++#endif
++
++/* Structure for the Sync Interface between the sensor and CCDC*/
++struct ispccdc_syncif {
++ /* 1 - Master, 0- Slave */
++ u8 ccdc_mastermode;
++ /* 0 - Odd Field, 1- Even Field */
++ u8 fldstat;
++ enum inpmode ipmod;
++ enum datasize datsz;
++ /* 0 -Progressive Mode, 1 -Interlaced Mode */
++ u8 fldmode;
++ /* 0 -Positive, 1 - Negative */
++ u8 datapol;
++ /* 0 -Positive, 1 - Negative */
++ u8 fldpol;
++ /* 0 -Positive, 1 - Negative */
++ u8 hdpol;
++ /* 0 -Positive, 1 - Negative */
++ u8 vdpol;
++ /* 0 -Input, 1 - Output */
++ u8 fldout;
++ /* Width of the Horizontal Sync pulse - used for HS/VS Output*/
++ u8 hs_width;
++ /* Width of the Vertical Sync pulse - used for HS/VS Output*/
++ u8 vs_width;
++ /*Number of pixels per line - used for HS/VS Output*/
++ u8 ppln;
++ /*Number of half lines per frame - used for HS/VS Output*/
++ u8 hlprf;
++ /*1 - Enable ITU-R BT656 mode, 0 - Sync mode*/
++ u8 bt_r656_en;
++};
++
++/* Structure for LSC configuration*/
++struct ispccdc_lsc_config {
++ u8 offset;
++ u8 gain_mode_n;
++ u8 gain_mode_m;
++ u8 gain_format;
++ u16 fmtsph;
++ u16 fmtlnh;
++ u16 fmtslv;
++ u16 fmtlnv;
++ u8 initial_x;
++ u8 initial_y;
++ u32 size;
++};
++
++/*
++ * Configures the sync interface parameters between the sensor and the CCDC.
++ */
++void ispccdc_config_sync_if(struct ispccdc_syncif syncif);
++
++/* Structure for the optical black Clamp and Digital black Clamp subtract*/
++struct ispccdc_bclamp{
++ /*Optical black average gain*/
++ u8 obgain;
++ /*Start Pixel w.r.t. HS pulse in Optical black sample*/
++ u8 obstpixel;
++ /*Optical Black Sample lines*/
++ u8 oblines;
++ /*Optical Black Sample Length*/
++ u8 oblen;
++ /*Digital Black Clamp subtract value */
++ u16 dcsubval;
++ };
++
++/*
++ * Configures the optical/digital black clamp parameters in CCDC.
++ */
++int ispccdc_config_black_clamp(struct ispccdc_bclamp bclamp);
++
++/*
++ * Enables the optical or Digital black clamp.
++ */
++void ispccdc_enable_black_clamp(u8 enable);
++
++/* Structure for FPC */
++struct ispccdc_fpc{
++ /* Number of faulty pixels to be corrected in the frame*/
++ u16 fpnum;
++ /* Memory address of the FPC Table */
++ u32 fpcaddr;
++ };
++
++/*
++ * Configures the Faulty Pixel Correction parameters.
++ */
++int ispccdc_config_fpc(struct ispccdc_fpc fpc);
++
++/*
++ * Enables the Faulty Pixel Correction.
++ * enable : : 1- Enables FPC
++ */
++void ispccdc_enable_fpc(u8 enable);
++
++/* Structure for Black Level Compensation parameters*/
++struct ispccdc_blcomp{
++ u8 b_mg;
++ u8 gb_g;
++ u8 gr_cy;
++ u8 r_ye;
++ };
++
++/*
++ * Configures the Black Level Compensation parameters.
++ */
++void ispccdc_config_black_comp(struct ispccdc_blcomp blcomp);
++
++/* Enumeration constants for Video Port */
++enum vpin {
++ BIT12_3 = 3,
++ BIT11_2 = 4,
++ BIT10_1 = 5,
++ BIT9_0 = 6
++};
++enum vpif_freq {
++ PIXCLKBY2,
++ PIXCLKBY3_5,
++ PIXCLKBY4_5,
++ PIXCLKBY5_5,
++ PIXCLKBY6_5
++};
++
++/*Structure for Video Port parameters */
++struct ispccdc_vp {
++ enum vpin bitshift_sel;
++ enum vpif_freq freq_sel;
++};
++
++/*
++ * Configures the Video Port Configuration parameters.
++ */
++void ispccdc_config_vp(struct ispccdc_vp vp);
++
++/*
++ * Enables the Video Port.
++ */
++void ispccdc_enable_vp(u8 enable);
++
++/* Structure for Reformatter parameters */
++struct ispccdc_refmt{
++ u8 lnalt;
++ u8 lnum;
++ u8 plen_even;
++ u8 plen_odd;
++ u32 prgeven0;
++ u32 prgeven1;
++ u32 prgodd0;
++ u32 prgodd1;
++ u32 fmtaddr0;
++ u32 fmtaddr1;
++ u32 fmtaddr2;
++ u32 fmtaddr3;
++ u32 fmtaddr4;
++ u32 fmtaddr5;
++ u32 fmtaddr6;
++ u32 fmtaddr7;
++};
++
++/*
++ * Configures the Reformatter register values if line alternating is disabled.
++ * else just enabling the line alternating is enough.
++ */
++void ispccdc_config_reformatter(struct ispccdc_refmt refmt);
++
++/*
++ * Enables the Reformatter
++ */
++void ispccdc_enable_reformatter(u8 enable);
++
++/* Structure for Culling parameters */
++struct ispccdc_culling{
++ /* Vertical culling pattern */
++ u8 v_pattern;
++ /* Horizontal Culling pattern for odd lines */
++ u16 h_odd;
++ /* Horizontal Culling pattern for even lines */
++ u16 h_even;
++};
++
++/*
++ * Configures the Culling parameters.
++ */
++void ispccdc_config_culling(struct ispccdc_culling culling);
++
++/*
++ * Enables the Low pass Filter
++ */
++void ispccdc_enable_lpf(u8 enable);
++
++/* Enumeration constants for Alaw input width */
++enum alaw_ipwidth{
++ ALAW_BIT12_3 = 0x3,
++ ALAW_BIT11_2 = 0x4,
++ ALAW_BIT10_1 = 0x5,
++ ALAW_BIT9_0 = 0x6
++};
++
++/* Structure for CCDC configuration*/
++struct ispccdc_update_config {
++ u16 update;
++ u16 flag;
++ enum alaw_ipwidth alawip;
++ struct ispccdc_bclamp *bclamp;
++ struct ispccdc_blcomp *blcomp;
++ struct ispccdc_fpc *fpc;
++ struct ispccdc_lsc_config *lsc_cfg;
++ struct ispccdc_culling *cull;
++ u32 colptn;
++};
++
++
++void ispccdc_config_alaw(enum alaw_ipwidth ipwidth);
++
++void ispccdc_enable_alaw(u8 enable);
++
++int ispccdc_load_lsc(u32 table_size);
++
++void ispccdc_config_lsc(struct ispccdc_lsc_config *lsc_cfg);
++
++void ispccdc_enable_lsc(u8 enable);
++
++void ispccdc_config_imgattr(u32 colptn);
++
++void ispccdc_config_shadow_registers(void);
++
++int ispccdc_try_size(u32 input_w, u32 input_h, u32 *output_w, u32 *output_h);
++
++int ispccdc_config_size(u32 input_w, u32 input_h, u32 output_w, u32 output_h);
++
++int ispccdc_config_outlineoffset(u32 offset, u8 oddeven, u8 numlines);
++
++int ispccdc_set_outaddr(u32 addr);
++
++void ispccdc_enable(u8 enable);
++
++#ifdef ENABLE_BT_656_CAPTURE
++void ispccdc_config_y8pos(enum y8pos_mode mode);
++
++void ispccdc_config_byteswap(int swap);
++#endif
++
++int ispccdc_busy(void);
++
++void ispccdc_save_context(void);
++
++void ispccdc_restore_context(void);
++
++void ispccdc_print_status(void);
++
++int omap34xx_isp_ccdc_config(void *userspace_add);
++
++int omap34xx_isp_lsc_update(void *userspace_add);
++
++#endif /* OMAP_ISP_CCDC_H */
+Index: git/drivers/media/video/isp/isph3a.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isph3a.c 2009-02-12 10:29:18.000000000 -0600
+@@ -0,0 +1,901 @@
++/*
++ * drivers/media/video/omap/isp/isph3a.c
++ *
++ * H3A module for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include <linux/mm.h>
++#include <linux/mman.h>
++#include <linux/syscalls.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/types.h>
++#include <linux/dma-mapping.h>
++#include <asm/io.h>
++#include <asm/cacheflush.h>
++#include <asm/uaccess.h>
++
++#include "isp.h"
++#include "ispreg.h"
++#include "isph3a.h"
++#include "ispmmu.h"
++#include "isppreview.h"
++
++
++struct isph3a_aewb_buffer {
++ unsigned long virt_addr;
++ unsigned long phy_addr;
++ unsigned long addr_align;
++ unsigned long ispmmu_addr;
++ unsigned long mmap_addr; /* For userspace */
++
++ u8 locked;
++ u16 frame_num;
++ struct isph3a_aewb_buffer *next;
++};
++
++static struct isph3a_aewb_status {
++ u8 initialized;
++ u8 update;
++ u8 stats_req;
++ u8 stats_done;
++ u16 frame_req;
++
++ struct isph3a_aewb_buffer h3a_buff[H3A_MAX_BUFF];
++ unsigned int stats_buf_size;
++ unsigned int min_buf_size;
++
++ u16 win_count;
++ u32 frame_count;
++ wait_queue_head_t stats_wait;
++ spinlock_t buffer_lock;
++} aewbstat;
++
++static struct isph3a_aewb_regs {
++ u32 reg_pcr;
++ u32 reg_win1;
++ u32 reg_start;
++ u32 reg_blk;
++ u32 reg_subwin;
++} aewb_regs;
++
++static struct isph3a_aewb_config aewb_config_local = {
++ .saturation_limit = 0x3FF,
++ .win_height = 0, /* Range: 2 - 256 even values only */
++ .win_width = 0, /* Range: 6 - 256 even values only */
++ .ver_win_count = 0, /* Range: 1 - 128 */
++ .hor_win_count = 0, /* Range: 1 - 36 */
++ .ver_win_start = 0, /* Range: 0 - 4095 */
++ .hor_win_start = 0, /* Range: 0 - 4095 */
++ .blk_ver_win_start = 0, /* Range: 0 - 4095 */
++ .blk_win_height = 0, /* Range: 2 - 256 even values only */
++ .subsample_ver_inc = 0, /* Range: 2 - 32 even values only */
++ .subsample_hor_inc = 0, /* Range: 2 - 32 even values only */
++ .alaw_enable = 0, /* AEW ALAW EN flag */
++ .aewb_enable = 0, /* AE AWB stats generation EN flag */
++}; /* With reset values */
++
++
++/* Structure for saving/restoring h3a module registers*/
++static struct isp_reg isph3a_reg_list[] = {
++ {ISPH3A_AEWWIN1, 0x0000},
++ {ISPH3A_AEWINSTART, 0x0000},
++ {ISPH3A_AEWINBLK, 0x0000},
++ {ISPH3A_AEWSUBWIN, 0x0000},
++ {ISPH3A_AEWBUFST, 0x0000},
++ {ISPH3A_AFPAX1, 0x0000},
++ {ISPH3A_AFPAX2, 0x0000},
++ {ISPH3A_AFPAXSTART, 0x0000},
++ {ISPH3A_AFIIRSH, 0x0000},
++ {ISPH3A_AFBUFST, 0x0000},
++ {ISPH3A_AFCOEF010, 0x0000},
++ {ISPH3A_AFCOEF032, 0x0000},
++ {ISPH3A_AFCOEF054, 0x0000},
++ {ISPH3A_AFCOEF076, 0x0000},
++ {ISPH3A_AFCOEF098, 0x0000},
++ {ISPH3A_AFCOEF0010, 0x0000},
++ {ISPH3A_AFCOEF110, 0x0000},
++ {ISPH3A_AFCOEF132, 0x0000},
++ {ISPH3A_AFCOEF154, 0x0000},
++ {ISPH3A_AFCOEF176, 0x0000},
++ {ISPH3A_AFCOEF198, 0x0000},
++ {ISPH3A_AFCOEF1010, 0x0000},
++ {ISP_TOK_TERM, 0x0000}
++};
++
++static struct ispprev_wbal h3awb_update; /* Keep changes in AEWB gains */
++static struct isph3a_aewb_buffer *active_buff;
++static struct isph3a_aewb_xtrastats h3a_xtrastats[H3A_MAX_BUFF];
++static int camnotify;
++static int wb_update;
++static void isph3a_print_status(void);
++
++void isph3a_aewb_setxtrastats(struct isph3a_aewb_xtrastats *xtrastats)
++{
++ int i;
++ if (active_buff == NULL)
++ return;
++
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if (aewbstat.h3a_buff[i].frame_num == active_buff->frame_num) {
++ if (i == 0) {
++ if (aewbstat.h3a_buff[H3A_MAX_BUFF - 1].
++ locked == 0)
++ h3a_xtrastats[H3A_MAX_BUFF - 1] =
++ *xtrastats;
++ else
++ h3a_xtrastats[H3A_MAX_BUFF - 2] =
++ *xtrastats;
++ } else if (i == 1) {
++ if (aewbstat.h3a_buff[0].locked == 0)
++ h3a_xtrastats[0] = *xtrastats;
++ else
++ h3a_xtrastats[H3A_MAX_BUFF - 1] =
++ *xtrastats;
++ } else {
++ if (aewbstat.h3a_buff[i - 1].locked == 0)
++ h3a_xtrastats[i - 1] = *xtrastats;
++ else
++ h3a_xtrastats[i - 2] = *xtrastats;
++ }
++ return;
++ }
++ }
++}
++EXPORT_SYMBOL(isph3a_aewb_setxtrastats);
++
++/*
++ * Enables AEW engine in the H3A module.
++ * Client should configure all the AE & AWB registers in H3A before this.
++ * enable : 1- Enables the AE & AWB engine.
++ */
++static void
++isph3a_aewb_enable(u8 enable)
++{
++ /* Before enabling AEWB we need to clear H3A bit in IRQ0 status reg */
++ omap_writel(IRQ0STATUS_H3A_AWB_DONE_IRQ, ISP_IRQ0STATUS);
++
++ if (enable) {
++ aewb_regs.reg_pcr |= ISPH3A_PCR_AEW_EN;
++ omap_writel(omap_readl(ISPH3A_PCR) | (ISPH3A_PCR_AEW_EN),
++ ISPH3A_PCR);
++ DPRINTK_ISPH3A(" H3A enabled \n");
++ } else {
++ aewb_regs.reg_pcr &= ~ISPH3A_PCR_AEW_EN;
++ omap_writel(omap_readl(ISPH3A_PCR) & ~(ISPH3A_PCR_AEW_EN),
++ ISPH3A_PCR);
++ DPRINTK_ISPH3A(" H3A disabled \n");
++ }
++ aewb_config_local.aewb_enable = enable;
++}
++
++/*
++ * Updates WB parameters. Needs to be called when no ISP Preview processing is
++ * taking place.
++ */
++void
++isph3a_update_wb(void)
++{
++ if (wb_update) {
++ isppreview_config_whitebalance(h3awb_update);
++ wb_update = 0;
++ }
++ return;
++}
++EXPORT_SYMBOL(isph3a_update_wb);
++
++/*
++ * Helper function to update h3a registers
++ */
++static void
++isph3a_aewb_update_regs(void)
++{
++ omap_writel(aewb_regs.reg_pcr, ISPH3A_PCR);
++ omap_writel(aewb_regs.reg_win1, ISPH3A_AEWWIN1);
++ omap_writel(aewb_regs.reg_start, ISPH3A_AEWINSTART);
++ omap_writel(aewb_regs.reg_blk, ISPH3A_AEWINBLK);
++ omap_writel(aewb_regs.reg_subwin, ISPH3A_AEWSUBWIN);
++
++ aewbstat.update = 0;
++ aewbstat.frame_count = 0;
++}
++
++/*
++ * Helper function to update buffer cache pages
++ */
++static void
++isph3a_aewb_update_req_buffer(struct isph3a_aewb_buffer *buffer)
++{
++ int size = aewbstat.stats_buf_size;
++
++ size = PAGE_ALIGN(size);
++ /* Update the kernel pages of the requested buffer */
++ dmac_inv_range((void *)buffer->addr_align,
++ (void *)buffer->addr_align + size);
++}
++
++/*
++ * Helper function to check for stats available of specified frame
++ * Returns 0 if stats available for frame requested; -1 otherwise.
++ */
++static int
++isph3a_aewb_stats_available(struct isph3a_aewb_data *aewbdata)
++{
++ int i;
++ unsigned long irqflags;
++
++ spin_lock_irqsave(&aewbstat.buffer_lock, irqflags);
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if ((aewbdata->frame_number == aewbstat.h3a_buff[i].frame_num)
++ && (aewbstat.h3a_buff[i].frame_num !=
++ active_buff->frame_num)) {
++ aewbstat.h3a_buff[i].locked = 1;
++ spin_unlock_irqrestore(&aewbstat.buffer_lock, irqflags);
++ isph3a_aewb_update_req_buffer(&aewbstat.h3a_buff[i]);
++ aewbstat.h3a_buff[i].frame_num = 0;
++ aewbdata->h3a_aewb_statistics_buf = (void *)
++ aewbstat.h3a_buff[i].mmap_addr;
++ aewbdata->ts = h3a_xtrastats[i].ts;
++ aewbdata->field_count = h3a_xtrastats[i].field_count;
++ return 0;
++ }
++ }
++ spin_unlock_irqrestore(&aewbstat.buffer_lock, irqflags);
++ /* Stats unavailable */
++
++ aewbdata->h3a_aewb_statistics_buf = NULL;
++ return -1;
++}
++
++/*
++ * Helper function to link allocated buffers
++ */
++static void
++isph3a_aewb_link_buffers(void)
++{
++ int i;
++
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if ((i + 1) < H3A_MAX_BUFF) {
++ aewbstat.h3a_buff[i].next = &aewbstat.h3a_buff[i + 1];
++ h3a_xtrastats[i].next = &h3a_xtrastats[i + 1];
++ } else {
++ aewbstat.h3a_buff[i].next = &aewbstat.h3a_buff[0];
++ h3a_xtrastats[i].next = &h3a_xtrastats[0];
++ }
++ }
++}
++
++/*
++ * Helper function to unlock all buffers
++ */
++static void
++isph3a_aewb_unlock_buffers(void)
++{
++ int i;
++ unsigned long irqflags;
++
++ spin_lock_irqsave(&aewbstat.buffer_lock, irqflags);
++ for (i = 0; i < H3A_MAX_BUFF; i++)
++ aewbstat.h3a_buff[i].locked = 0;
++
++ spin_unlock_irqrestore(&aewbstat.buffer_lock, irqflags);
++}
++
++/*
++ * Callback from ISP driver for H3A AEW interrupt
++ * status : IRQ0STATUS in case of MMU error, 0 for h3a interrupt
++ * arg1 : Not used as of now.
++ * arg2 : Not used as of now.
++ */
++static void
++isph3a_aewb_isr(unsigned long status, isp_vbq_callback_ptr arg1, void *arg2)
++{
++ u16 frame_align;
++
++ if ((H3A_AWB_DONE & status) != H3A_AWB_DONE)
++ return;
++
++ /* Exchange buffers */
++ active_buff = active_buff->next;
++ if (active_buff->locked == 1)
++ active_buff = active_buff->next;
++ omap_writel(active_buff->ispmmu_addr, ISPH3A_AEWBUFST);
++
++ /* Update frame counter */
++ aewbstat.frame_count++;
++ frame_align = aewbstat.frame_count;
++ if (aewbstat.frame_count > MAX_FRAME_COUNT) {
++ aewbstat.frame_count = 1;
++ frame_align++;
++ }
++ active_buff->frame_num = aewbstat.frame_count;
++
++ /* Future Stats requested? */
++ if (aewbstat.stats_req) {
++ /* Is the frame we want already done? */
++ DPRINTK_ISPH3A("waiting for frame %d\n", aewbstat.frame_req);
++ if (frame_align >= (aewbstat.frame_req + 1)) {
++ aewbstat.stats_req = 0;
++ aewbstat.stats_done = 1;
++ wake_up_interruptible(&aewbstat.stats_wait);
++ }
++ }
++
++ if (aewbstat.update)
++ isph3a_aewb_update_regs();
++
++ DPRINTK_ISPH3A(".");
++}
++
++/*
++ * Helper function to check and store user given params.
++ * As most of them are busy-lock registers, need to wait
++ * until AEW_BUSY = 0 --> to program them during ISR.
++ */
++static int
++isph3a_aewb_set_params(struct isph3a_aewb_config *user_cfg)
++{
++ /* Saturation limit */
++ if (unlikely(user_cfg->saturation_limit > MAX_SATURATION_LIM)) {
++ printk(KERN_ERR "Invalid Saturation_limit: %d\n",
++ user_cfg->saturation_limit);
++ return -EINVAL;
++ } else if (aewb_config_local.saturation_limit !=
++ user_cfg->saturation_limit) {
++ WRITE_SAT_LIM(aewb_regs.reg_pcr, user_cfg->saturation_limit);
++ aewb_config_local.saturation_limit =
++ user_cfg->saturation_limit;
++ aewbstat.update = 1;
++ }
++ /* A-Law */
++ if (aewb_config_local.alaw_enable != user_cfg->alaw_enable) {
++ WRITE_ALAW(aewb_regs.reg_pcr, user_cfg->alaw_enable);
++ aewb_config_local.alaw_enable = user_cfg->alaw_enable;
++ aewbstat.update = 1;
++ }
++ /* Window height */
++ if (unlikely((user_cfg->win_height < MIN_WIN_H)
++ || (user_cfg->win_height > MAX_WIN_H)
++ || (user_cfg->win_height & 0x01))) {
++ printk(KERN_ERR "Invalid window height: %d\n",
++ user_cfg->win_height);
++ return -EINVAL;
++ } else if (aewb_config_local.win_height != user_cfg->win_height) {
++ WRITE_WIN_H(aewb_regs.reg_win1, user_cfg->win_height);
++ aewb_config_local.win_height = user_cfg->win_height;
++ aewbstat.update = 1;
++ }
++ /* Window width */
++ if (unlikely((user_cfg->win_width < MIN_WIN_W)
++ || (user_cfg->win_width > MAX_WIN_W)
++ || (user_cfg->win_width & 0x01))) {
++ printk(KERN_ERR "Invalid window width: %d\n",
++ user_cfg->win_width);
++ return -EINVAL;
++ } else if (aewb_config_local.win_width != user_cfg->win_width) {
++ WRITE_WIN_W(aewb_regs.reg_win1, user_cfg->win_width);
++ aewb_config_local.win_width = user_cfg->win_width;
++ aewbstat.update = 1;
++ }
++ /* Vertical window count */
++ if (unlikely((user_cfg->ver_win_count < 1)
++ || (user_cfg->ver_win_count > MAX_WINVC))) {
++ printk(KERN_ERR "Invalid vertical window count: %d\n",
++ user_cfg->ver_win_count);
++ return -EINVAL;
++ } else if (aewb_config_local.ver_win_count
++ != user_cfg->ver_win_count){
++ WRITE_VER_C(aewb_regs.reg_win1,
++ user_cfg->ver_win_count);
++ aewb_config_local.ver_win_count =
++ user_cfg->ver_win_count;
++ aewbstat.update = 1;
++ }
++ /* Horizontal window count */
++ if (unlikely((user_cfg->hor_win_count < 1)
++ || (user_cfg->hor_win_count > MAX_WINHC))) {
++ printk(KERN_ERR "Invalid horizontal window count: %d\n",
++ user_cfg->hor_win_count);
++ return -EINVAL;
++ } else if (aewb_config_local.hor_win_count
++ != user_cfg->hor_win_count){
++ WRITE_HOR_C(aewb_regs.reg_win1,
++ user_cfg->hor_win_count);
++ aewb_config_local.hor_win_count =
++ user_cfg->hor_win_count;
++ aewbstat.update = 1;
++ }
++ /* Windows vertical start position */
++ if (unlikely(user_cfg->ver_win_start > MAX_WINSTART)) {
++ printk(KERN_ERR "Invalid vertical window start: %d\n",
++ user_cfg->ver_win_start);
++ return -EINVAL;
++ } else if (aewb_config_local.ver_win_start
++ != user_cfg->ver_win_start){
++ WRITE_VER_WIN_ST(aewb_regs.reg_start,
++ user_cfg->ver_win_start);
++ aewb_config_local.ver_win_start =
++ user_cfg->ver_win_start;
++ aewbstat.update = 1;
++ }
++ /* Windows horizontal start position */
++ if (unlikely(user_cfg->hor_win_start > MAX_WINSTART)) {
++ printk(KERN_ERR "Invalid horizontal window start: %d\n",
++ user_cfg->hor_win_start);
++ return -EINVAL;
++ } else if (aewb_config_local.hor_win_start
++ != user_cfg->hor_win_start){
++ WRITE_HOR_WIN_ST(aewb_regs.reg_start,
++ user_cfg->hor_win_start);
++ aewb_config_local.hor_win_start =
++ user_cfg->hor_win_start;
++ aewbstat.update = 1;
++ }
++ /* Black Line vertical start position */
++ if (unlikely(user_cfg->blk_ver_win_start > MAX_WINSTART)) {
++ printk(KERN_ERR "Invalid black vertical window start: %d\n",
++ user_cfg->blk_ver_win_start);
++ return -EINVAL;
++ } else if (aewb_config_local.blk_ver_win_start
++ != user_cfg->blk_ver_win_start){
++ WRITE_BLK_VER_WIN_ST(aewb_regs.reg_blk,
++ user_cfg->blk_ver_win_start);
++ aewb_config_local.blk_ver_win_start =
++ user_cfg->blk_ver_win_start;
++ aewbstat.update = 1;
++ }
++ /* Black line height */
++ if (unlikely((user_cfg->blk_win_height < MIN_WIN_H)
++ || (user_cfg->blk_win_height > MAX_WIN_H)
++ || (user_cfg->blk_win_height & 0x01))) {
++ printk(KERN_ERR "Invalid black window height: %d\n",
++ user_cfg->blk_win_height);
++ return -EINVAL;
++ } else if (aewb_config_local.blk_win_height
++ != user_cfg->blk_win_height) {
++ WRITE_BLK_WIN_H(aewb_regs.reg_blk,
++ user_cfg->blk_win_height);
++ aewb_config_local.blk_win_height
++ = user_cfg->blk_win_height;
++ aewbstat.update = 1;
++ }
++ /* Vertical sampling point increments */
++ if (unlikely((user_cfg->subsample_ver_inc < MIN_SUB_INC)
++ || (user_cfg->subsample_ver_inc > MAX_SUB_INC)
++ || (user_cfg->subsample_ver_inc & 0x01))) {
++ printk(KERN_ERR "Invalid vertical subsample increment: %d\n",
++ user_cfg->subsample_ver_inc);
++ return -EINVAL;
++ } else if (aewb_config_local.subsample_ver_inc
++ != user_cfg->subsample_ver_inc) {
++ WRITE_SUB_VER_INC(aewb_regs.reg_subwin,
++ user_cfg->subsample_ver_inc);
++ aewb_config_local.subsample_ver_inc
++ = user_cfg->subsample_ver_inc;
++ aewbstat.update = 1;
++ }
++ /* Horizontal sampling point increments */
++ if (unlikely((user_cfg->subsample_hor_inc < MIN_SUB_INC)
++ || (user_cfg->subsample_hor_inc > MAX_SUB_INC)
++ || (user_cfg->subsample_hor_inc & 0x01))) {
++ printk(KERN_ERR "Invalid horizontal subsample increment: %d\n",
++ user_cfg->subsample_hor_inc);
++ return -EINVAL;
++ } else if (aewb_config_local.subsample_hor_inc
++ != user_cfg->subsample_hor_inc) {
++ WRITE_SUB_HOR_INC(aewb_regs.reg_subwin,
++ user_cfg->subsample_hor_inc);
++ aewb_config_local.subsample_hor_inc
++ = user_cfg->subsample_hor_inc;
++ aewbstat.update = 1;
++ }
++
++ if ((!aewbstat.initialized) || (0 == aewb_config_local.aewb_enable)) {
++ isph3a_aewb_update_regs();
++ aewbstat.initialized = 1;
++ }
++ return 0;
++}
++
++/*
++ * Helper function to munmap kernel buffers from user space.
++ */
++static int
++isph3a_aewb_munmap(struct isph3a_aewb_buffer *buffer)
++{
++ /* TO DO: munmap succesfully the kernel buffers, so they can be
++ remmaped again */
++ buffer->mmap_addr = 0;
++ return 0;
++}
++
++/*
++ * Helper function to mmap buffers to user space.
++ * buffer passed need to already have a valid physical address: buffer->phy_addr
++ * It returns user pointer as unsigned long in buffer->mmap_addr
++ */
++static int
++isph3a_aewb_mmap_buffers(struct isph3a_aewb_buffer *buffer)
++{
++ struct vm_area_struct vma;
++ struct mm_struct *mm = current->mm;
++ int size = aewbstat.stats_buf_size;
++ unsigned long addr = 0;
++ unsigned long pgoff = 0, flags = MAP_SHARED | MAP_ANONYMOUS;
++ unsigned long prot = PROT_READ | PROT_WRITE;
++ void *pos = (void *) buffer->addr_align;
++
++ size = PAGE_ALIGN(size);
++
++ addr = get_unmapped_area(NULL, addr, size, pgoff, flags);
++ vma.vm_mm = mm;
++ vma.vm_start = addr;
++ vma.vm_end = addr + size;
++ vma.vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags);
++ vma.vm_pgoff = pgoff;
++ vma.vm_file = NULL;
++#ifndef ENABLE_BT_656_CAPTURE
++ vma.vm_page_prot = protection_map[vma.vm_flags];
++#else
++ vma.vm_page_prot = vm_get_page_prot(vma.vm_flags);
++#endif
++
++ while (size > 0) {
++ if (vm_insert_page(&vma, addr, vmalloc_to_page(pos)))
++ return -EAGAIN;
++ addr += PAGE_SIZE;
++ pos += PAGE_SIZE;
++ size -= PAGE_SIZE;
++ }
++
++ buffer->mmap_addr = vma.vm_start;
++ return 0;
++}
++
++/*
++ * API to configure AEW registers and enable/disable H3A engine
++ */
++int
++isph3a_aewb_configure(struct isph3a_aewb_config *aewbcfg)
++{
++ int ret = 0;
++ int i;
++ int win_count = 0;
++
++ if (NULL == aewbcfg) {
++ printk(KERN_ERR "Null argument in configuration. \n");
++ return -EINVAL;
++ }
++
++ if (!aewbstat.initialized) {
++ DPRINTK_ISPH3A("Setting callback for H3A\n");
++ ret = isp_set_callback(CBK_H3A_AWB_DONE, isph3a_aewb_isr,
++ (void *)NULL, (void *)NULL);
++ if (ret) {
++ printk(KERN_ERR "No callback for H3A\n");
++ return ret;
++ }
++ }
++
++ ret = isph3a_aewb_set_params(aewbcfg);
++ if (ret) {
++ printk(KERN_ERR "Invalid parameters! \n");
++ return ret;
++ }
++
++ win_count = (aewbcfg->ver_win_count * aewbcfg->hor_win_count);
++ win_count += aewbcfg->hor_win_count; /* Blk windows row*/
++ ret = (win_count / 8);
++ win_count += (win_count % 8)? 1: 0;
++ win_count += ret;
++
++ aewbstat.win_count = win_count;
++
++ if (aewbstat.stats_buf_size && ((win_count * AEWB_PACKET_SIZE)
++ > aewbstat.stats_buf_size)) {
++ DPRINTK_ISPH3A("There was a previous buffer... \n");
++ isph3a_aewb_enable(0);
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ isph3a_aewb_munmap(&aewbstat.h3a_buff[i]);
++ ispmmu_unmap(aewbstat.h3a_buff[i].ispmmu_addr);
++ dma_free_coherent(NULL,
++ aewbstat.min_buf_size + 64,
++ (void *)aewbstat.h3a_buff[i].virt_addr,
++ (dma_addr_t)aewbstat.h3a_buff[i].phy_addr);
++ aewbstat.h3a_buff[i].virt_addr = 0;
++ }
++ aewbstat.stats_buf_size = 0;
++ }
++
++ if (!aewbstat.h3a_buff[0].virt_addr) {
++ aewbstat.stats_buf_size = win_count * AEWB_PACKET_SIZE;
++ aewbstat.min_buf_size = PAGE_ALIGN(aewbstat.stats_buf_size);
++
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ aewbstat.h3a_buff[i].virt_addr =
++ (unsigned long)dma_alloc_coherent(NULL,
++ aewbstat.min_buf_size,
++ (dma_addr_t *)
++ &aewbstat.h3a_buff[i].
++ phy_addr, GFP_KERNEL |
++ GFP_DMA);
++ if (aewbstat.h3a_buff[i].virt_addr == 0) {
++ printk(KERN_ERR "Can't acquire memory for "
++ "buffer[%d]\n", i);
++ return -ENOMEM;
++ }
++ aewbstat.h3a_buff[i].addr_align =
++ aewbstat.h3a_buff[i].virt_addr;
++ while ((aewbstat.h3a_buff[i].addr_align &
++ 0xFFFFFFC0) !=
++ aewbstat.h3a_buff[i].
++ addr_align)
++ aewbstat.h3a_buff[i].addr_align++;
++ aewbstat.h3a_buff[i].ispmmu_addr =
++ ispmmu_map(aewbstat.
++ h3a_buff[i].phy_addr,
++ aewbstat.min_buf_size);
++ }
++ isph3a_aewb_unlock_buffers();
++ isph3a_aewb_link_buffers();
++
++ /* First active buffer */
++ if (active_buff == NULL)
++ active_buff = &aewbstat.h3a_buff[0];
++ omap_writel(active_buff->ispmmu_addr, ISPH3A_AEWBUFST);
++ }
++ /* Always remap when calling Configure */
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ if (aewbstat.h3a_buff[i].mmap_addr) {
++ isph3a_aewb_munmap(&aewbstat.h3a_buff[i]);
++ DPRINTK_ISPH3A("We have munmaped buffer 0x%lX\n",
++ aewbstat.h3a_buff[i].virt_addr);
++ }
++ isph3a_aewb_mmap_buffers(&aewbstat.h3a_buff[i]);
++ DPRINTK_ISPH3A("buff[%d] addr is:\n virt 0x%lX\n"
++ " aligned 0x%lX\n"
++ " phys 0x%lX\n"
++ " ispmmu 0x%08lX\n"
++ " mmapped 0x%lX\n", i,
++ aewbstat.h3a_buff[i].virt_addr,
++ aewbstat.h3a_buff[i].addr_align,
++ aewbstat.h3a_buff[i].phy_addr,
++ aewbstat.h3a_buff[i].ispmmu_addr,
++ aewbstat.h3a_buff[i].mmap_addr);
++ }
++ /* Enable/disable engine */
++ isph3a_aewb_enable(aewbcfg->aewb_enable);
++ isph3a_print_status();
++
++ return 0;
++}
++EXPORT_SYMBOL(isph3a_aewb_configure);
++
++
++/*
++ * This API allows the user to update White Balance gains, as well as
++ * exposure time and analog gain. It is also used to request frame
++ * statistics.
++ */
++int
++isph3a_aewb_request_statistics(struct isph3a_aewb_data *aewbdata)
++{
++ int ret = 0;
++ u16 frame_diff = 0;
++ u16 frame_cnt = aewbstat.frame_count;
++ wait_queue_t wqt;
++
++ /*
++ * This will be replaced by the gain settings using
++ * Master->Slave approach in camera driver
++ */
++
++ /*
++ u32 exp_time = aewbdata->shutter;
++ u16 gain = aewbdata->gain;
++ */
++
++ if (!aewb_config_local.aewb_enable) {
++ printk(KERN_ERR "H3A engine not enabled\n");
++ return -EINVAL;
++ }
++ aewbdata->h3a_aewb_statistics_buf = NULL;
++
++ DPRINTK_ISPH3A("User data received: \n");
++ DPRINTK_ISPH3A("Digital gain = 0x%04x\n", aewbdata->dgain);
++ DPRINTK_ISPH3A("WB gain b *= 0x%04x\n", aewbdata->wb_gain_b);
++ DPRINTK_ISPH3A("WB gain r *= 0x%04x\n", aewbdata->wb_gain_r);
++ DPRINTK_ISPH3A("WB gain gb = 0x%04x\n", aewbdata->wb_gain_gb);
++ DPRINTK_ISPH3A("WB gain gr = 0x%04x\n", aewbdata->wb_gain_gr);
++ DPRINTK_ISPH3A("ISP AEWB request status wait for interrupt\n");
++
++ if (aewbdata->update != 0) {
++ if (aewbdata->update & SET_DIGITAL_GAIN)
++ h3awb_update.dgain = (u16)aewbdata->dgain;
++ if (aewbdata->update & SET_COLOR_GAINS) {
++ h3awb_update.coef3 = (u8)aewbdata->wb_gain_b;
++ h3awb_update.coef2 = (u8)aewbdata->wb_gain_gr;
++ h3awb_update.coef1 = (u8)aewbdata->wb_gain_gb;
++ h3awb_update.coef0 = (u8)aewbdata->wb_gain_r;
++ }
++ if (aewbdata->update & (SET_COLOR_GAINS | SET_DIGITAL_GAIN))
++ wb_update = 1;
++
++ if (aewbdata->update & REQUEST_STATISTICS) {
++ isph3a_aewb_unlock_buffers();
++
++ /* Stats available? */
++ DPRINTK_ISPH3A("Stats available?\n");
++ ret = isph3a_aewb_stats_available(aewbdata);
++ if (!ret)
++ goto out;
++
++ DPRINTK_ISPH3A("Stats in near future?\n");
++ /* Stats in near future? */
++ if (aewbdata->frame_number > frame_cnt) {
++ frame_diff = aewbdata->frame_number - frame_cnt;
++ } else if (aewbdata->frame_number < frame_cnt) {
++ if ((frame_cnt > (MAX_FRAME_COUNT -
++ MAX_FUTURE_FRAMES))
++ && (aewbdata->
++ frame_number
++ < MAX_FRAME_COUNT))
++ frame_diff = aewbdata->frame_number
++ + MAX_FRAME_COUNT
++ - frame_cnt;
++ else {
++ /* Frame unavailable */
++ frame_diff = MAX_FUTURE_FRAMES + 1;
++ aewbdata->h3a_aewb_statistics_buf =
++ NULL;
++ }
++ }
++
++ if (frame_diff > MAX_FUTURE_FRAMES) {
++ printk(KERN_ERR "Invalid frame requested\n");
++
++ } else if (!camnotify) {
++ /* Block until frame in near future completes */
++ aewbstat.frame_req = aewbdata->frame_number;
++ aewbstat.stats_req = 1;
++ aewbstat.stats_done = 0;
++ init_waitqueue_entry(&wqt, current);
++ ret = wait_event_interruptible
++ (aewbstat.stats_wait,
++ aewbstat.stats_done == 1);
++ if (ret < 0)
++ return ret;
++
++ DPRINTK_ISPH3A("ISP AEWB request status"
++ " interrupt raised\n");
++ /* Stats now available */
++ ret = isph3a_aewb_stats_available(aewbdata);
++ if (ret) {
++ DPRINTK_ISPH3A
++ ("After waiting for stats,"
++ " stats not available!!\n");
++ }
++ }
++ }
++ }
++out:
++ aewbdata->curr_frame = aewbstat.frame_count;
++
++ return 0;
++}
++EXPORT_SYMBOL(isph3a_aewb_request_statistics);
++
++/*
++ * Module Initialisation.
++ */
++static int __init
++isph3a_aewb_init(void)
++{
++ memset(&aewbstat, 0, sizeof(aewbstat));
++ memset(&aewb_regs, 0, sizeof(aewb_regs));
++
++ init_waitqueue_head(&aewbstat.stats_wait);
++ spin_lock_init(&aewbstat.buffer_lock);
++ return 0;
++}
++
++/*
++ * Module exit.
++ */
++static void
++isph3a_aewb_cleanup(void)
++{
++ int i;
++ isph3a_aewb_enable(0);
++ isp_unset_callback(CBK_H3A_AWB_DONE);
++
++ if (aewbstat.h3a_buff) {
++ /* Free buffers */
++ for (i = 0; i < H3A_MAX_BUFF; i++) {
++ ispmmu_unmap(aewbstat.h3a_buff[i].ispmmu_addr);
++ dma_free_coherent(NULL,
++ aewbstat.min_buf_size + 64,
++ (void *)aewbstat.h3a_buff[i].virt_addr,
++ (dma_addr_t)aewbstat.h3a_buff[i].phy_addr);
++ }
++ }
++ memset(&aewbstat, 0, sizeof(aewbstat));
++ memset(&aewb_regs, 0, sizeof(aewb_regs));
++}
++
++/*
++ * Debug print
++ */
++static void
++isph3a_print_status(void)
++{
++ DPRINTK_ISPH3A("ISPH3A_PCR = 0x%08x\n",
++ omap_readl(ISPH3A_PCR));
++ DPRINTK_ISPH3A("ISPH3A_AEWWIN1 = 0x%08x\n",
++ omap_readl(ISPH3A_AEWWIN1));
++ DPRINTK_ISPH3A("ISPH3A_AEWINSTART = 0x%08x\n",
++ omap_readl(ISPH3A_AEWINSTART));
++ DPRINTK_ISPH3A("ISPH3A_AEWINBLK = 0x%08x\n",
++ omap_readl(ISPH3A_AEWINBLK));
++ DPRINTK_ISPH3A("ISPH3A_AEWSUBWIN = 0x%08x\n",
++ omap_readl(ISPH3A_AEWSUBWIN));
++ DPRINTK_ISPH3A("ISPH3A_AEWBUFST = 0x%08x\n",
++ omap_readl(ISPH3A_AEWBUFST));
++ DPRINTK_ISPH3A("stats windows = %d\n",
++ aewbstat.win_count);
++ DPRINTK_ISPH3A("stats buff size = %d\n",
++ aewbstat.stats_buf_size);
++}
++void
++isph3a_notify(int notify)
++{
++ camnotify = notify;
++ if (camnotify && aewbstat.initialized) {
++ printk(KERN_DEBUG "Warning Camera Off \n");
++ aewbstat.stats_req = 0;
++ aewbstat.stats_done = 1;
++ wake_up_interruptible(&aewbstat.stats_wait);
++ }
++}
++EXPORT_SYMBOL(isph3a_notify);
++/*
++ * Saves the values of the h3a module registers.
++ */
++void
++isph3a_save_context(void)
++{
++ DPRINTK_ISPH3A(" Saving context\n");
++ isp_save_context(isph3a_reg_list);
++}
++EXPORT_SYMBOL(isph3a_save_context);
++
++/*
++ * Restores the values of the h3a module registers.
++ */
++void
++isph3a_restore_context(void)
++{
++ DPRINTK_ISPH3A(" Restoring context\n");
++ isp_restore_context(isph3a_reg_list);
++}
++EXPORT_SYMBOL(isph3a_restore_context);
++
++module_init(isph3a_aewb_init);
++module_exit(isph3a_aewb_cleanup);
++
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("H3A ISP Module");
++MODULE_LICENSE("GPL");
++
+Index: git/drivers/media/video/isp/isph3a.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isph3a.h 2009-02-12 15:25:41.000000000 -0600
+@@ -0,0 +1,197 @@
++/*
++ * drivers/media/video/omap/isp/isph3a.h
++ *
++ * Include file for H3A module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_H3A_H
++#define OMAP_ISP_H3A_H
++
++#define AEWB_PACKET_SIZE 16
++#define H3A_MAX_BUFF 5
++
++/* Flags for changed registers */
++#define PCR_CHNG (1 << 0)
++#define AEWWIN1_CHNG (1 << 1)
++#define AEWINSTART_CHNG (1 << 2)
++#define AEWINBLK_CHNG (1 << 3)
++#define AEWSUBWIN_CHNG (1 << 4)
++#define PRV_WBDGAIN_CHNG (1 << 5)
++#define PRV_WBGAIN_CHNG (1 << 6)
++
++/* Flags for update field */
++#define REQUEST_STATISTICS (1 << 0)
++#define SET_COLOR_GAINS (1 << 1)
++#define SET_DIGITAL_GAIN (1 << 2)
++#define SET_EXPOSURE (1 << 3)
++#define SET_ANALOG_GAIN (1 << 4)
++
++#define MAX_SATURATION_LIM 1023
++#define MIN_WIN_H 2
++#define MAX_WIN_H 256
++#define MIN_WIN_W 6
++#define MAX_WIN_W 256
++#define MAX_WINVC 128
++#define MAX_WINHC 36
++#define MAX_WINSTART 4095
++#define MIN_SUB_INC 2
++#define MAX_SUB_INC 32
++
++#define MAX_FRAME_COUNT 0x0FFF
++#define MAX_FUTURE_FRAMES 10
++
++/* ISPH3A REGISTERS bits */
++#define ISPH3A_PCR_AF_EN (1 << 0)
++#define ISPH3A_PCR_AF_ALAW_EN (1 << 1)
++#define ISPH3A_PCR_AF_MED_EN (1 << 2)
++#define ISPH3A_PCR_AF_BUSY (1 << 15)
++#define ISPH3A_PCR_AEW_EN (1 << 16)
++#define ISPH3A_PCR_AEW_ALAW_EN (1 << 17)
++#define ISPH3A_PCR_AEW_BUSY (1 << 18)
++
++#define WRITE_SAT_LIM(reg, sat_limit) \
++ (reg = (reg & (~(ISPH3A_PCR_AEW_AVE2LMT_MASK))) \
++ | (sat_limit << ISPH3A_PCR_AEW_AVE2LMT_SHIFT))
++
++#define WRITE_ALAW(reg, alaw_en) \
++ (reg = (reg & (~(ISPH3A_PCR_AEW_ALAW_EN))) \
++ | ((alaw_en & ISPH3A_PCR_AF_ALAW_EN) \
++ << ISPH3A_PCR_AEW_ALAW_EN_SHIFT))
++
++#define WRITE_WIN_H(reg, height) \
++ (reg = (reg & (~(ISPH3A_AEWWIN1_WINH_MASK))) \
++ | (((height >> 1) - 1) << ISPH3A_AEWWIN1_WINH_SHIFT))
++
++#define WRITE_WIN_W(reg, width) \
++ (reg = (reg & (~(ISPH3A_AEWWIN1_WINW_MASK))) \
++ | (((width >> 1) - 1) << ISPH3A_AEWWIN1_WINW_SHIFT))
++
++#define WRITE_VER_C(reg, ver_count) \
++ (reg = (reg & ~(ISPH3A_AEWWIN1_WINVC_MASK)) \
++ | ((ver_count - 1) << ISPH3A_AEWWIN1_WINVC_SHIFT))
++
++#define WRITE_HOR_C(reg, hor_count) \
++ (reg = (reg & ~(ISPH3A_AEWWIN1_WINHC_MASK)) \
++ | ((hor_count - 1) << ISPH3A_AEWWIN1_WINHC_SHIFT))
++
++#define WRITE_VER_WIN_ST(reg, ver_win_st) \
++ (reg = (reg & ~(ISPH3A_AEWINSTART_WINSV_MASK)) \
++ | (ver_win_st << ISPH3A_AEWINSTART_WINSV_SHIFT))
++
++#define WRITE_HOR_WIN_ST(reg, hor_win_st) \
++ (reg = (reg & ~(ISPH3A_AEWINSTART_WINSH_MASK)) \
++ | (hor_win_st << ISPH3A_AEWINSTART_WINSH_SHIFT))
++
++#define WRITE_BLK_VER_WIN_ST(reg, blk_win_st) \
++ (reg = (reg & ~(ISPH3A_AEWINBLK_WINSV_MASK)) \
++ | (blk_win_st << ISPH3A_AEWINBLK_WINSV_SHIFT))
++
++#define WRITE_BLK_WIN_H(reg, height) \
++ (reg = (reg & ~(ISPH3A_AEWINBLK_WINH_MASK)) \
++ | (((height >> 1) - 1) << ISPH3A_AEWINBLK_WINH_SHIFT))
++
++#define WRITE_SUB_VER_INC(reg, sub_ver_inc) \
++ (reg = (reg & ~(ISPH3A_AEWSUBWIN_AEWINCV_MASK)) \
++ | (((sub_ver_inc >> 1) - 1) << ISPH3A_AEWSUBWIN_AEWINCV_SHIFT))
++
++#define WRITE_SUB_HOR_INC(reg, sub_hor_inc) \
++ (reg = (reg & ~(ISPH3A_AEWSUBWIN_AEWINCH_MASK)) \
++ | (((sub_hor_inc >> 1) - 1) << ISPH3A_AEWSUBWIN_AEWINCH_SHIFT))
++
++
++struct isph3a_aewb_config {
++ u16 saturation_limit;
++ u16 win_height; /* Range: 2 - 256 */
++ u16 win_width; /* Range: 2 - 256 */
++ u16 ver_win_count; /* vertical window count: 1 - 128 */
++ u16 hor_win_count; /* horizontal window count: 1 - 36 */
++ u16 ver_win_start; /* ver window start position: 0 - 4095 */
++ u16 hor_win_start; /* hor window start position: 0 - 4095 */
++ u16 blk_ver_win_start; /* black line ver window start pos: 0 -4095 */
++ u16 blk_win_height; /* black line height: 2 - 256 */
++ u16 subsample_ver_inc; /* ver distance between subsamples: 2 - 32 */
++ u16 subsample_hor_inc; /* hor distance between subsamples: 2 - 32 */
++ u8 alaw_enable; /* enable AEW ALAW flag */
++ u8 aewb_enable; /* AE AWB enable flag */
++};
++
++struct isph3a_aewb_data {
++ void *h3a_aewb_statistics_buf; /* Pointer to pass to user */
++ u32 shutter; /* Shutter speed */
++ u16 gain; /* Sensor analog Gain */
++ u32 shutter_cap; /* Shutter speed for capture */
++ u16 gain_cap; /* Sensor Gain for capture */
++
++ u16 dgain; /* White balance digital gain */
++ u16 wb_gain_b; /* White balance color gain blue */
++ u16 wb_gain_r; /* White balance color gain red */
++ u16 wb_gain_gb; /* White balance color gain green blue */
++ u16 wb_gain_gr; /* White balance color gain green red */
++
++ u16 frame_number; /* Frame number of requested stats */
++ u16 curr_frame; /* Current frame number being processed */
++ u8 update; /* Bitwise flags to update parameters */
++
++ struct timeval ts; /* Timestamp of returned framestats */
++ unsigned long field_count; /*
++ * Sequence number of returned
++ * framestats
++ */
++};
++
++struct isph3a_aewb_xtrastats {
++ struct timeval ts;
++ unsigned long field_count;
++
++ struct isph3a_aewb_xtrastats *next;
++};
++
++void isph3a_aewb_setxtrastats(struct isph3a_aewb_xtrastats *xtrastats);
++
++#include <linux/autoconf.h>
++#ifdef CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER
++/*
++ * Sets the parameters in H3A registers
++ */
++int isph3a_aewb_configure(struct isph3a_aewb_config *aewbcfg);
++
++/*
++ * Requests AE and AWB statistics
++ */
++int isph3a_aewb_request_statistics(struct isph3a_aewb_data *aewbdata);
++
++/*
++ * Saves h3a context
++ */
++void isph3a_save_context(void);
++
++/*
++ * Restores h3a context
++ */
++void isph3a_restore_context(void);
++
++#else
++#define isph3a_aewb_configure(x) -EFAULT
++#define isph3a_aewb_request_statistics(x) -EFAULT
++#define isph3a_save_context()
++#define isph3a_restore_context()
++
++#endif
++
++/*
++ * Update WB values after a H3A statistics request
++ */
++void isph3a_update_wb(void);
++
++void isph3a_notify(int notify);
++#endif /* OMAP_ISP_H3A_H */
+Index: git/drivers/media/video/isp/isphist.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isphist.h 2009-02-12 15:23:05.000000000 -0600
+@@ -0,0 +1,145 @@
++/*
++ * drivers/media/video/isp/isphist.h
++ *
++ * Include file for HISTOGRAM module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_HIST_H
++#define OMAP_ISP_HIST_H
++
++/* Flags for number of bins */
++#define BINS_32 0x0
++#define BINS_64 0x1
++#define BINS_128 0x2
++#define BINS_256 0x3
++
++#define MAX_REGIONS 0x4
++#define MAX_WB_GAIN 255
++#define MIN_WB_GAIN 0x0
++#define MAX_BIT_WIDTH 14
++#define MIN_BIT_WIDTH 8
++
++#define ISPHIST_PCR_EN (1 << 0)
++#define HIST_MEM_SIZE 1024
++#define ISPHIST_CNT_CLR_EN (1 << 7)
++
++#define WRITE_SOURCE(reg, source) \
++ (reg = (reg & ~(ISPHIST_CNT_SOURCE_MASK)) \
++ | (source << ISPHIST_CNT_SOURCE_SHIFT))
++
++#define WRITE_HV_INFO(reg, hv_info) \
++ (reg = ((reg & ~(ISPHIST_HV_INFO_MASK)) \
++ | (hv_info & ISPHIST_HV_INFO_MASK)))
++
++#define WRITE_RADD(reg, radd) \
++ (reg = (reg & ~(ISPHIST_RADD_MASK)) \
++ | (radd << ISPHIST_RADD_SHIFT))
++
++#define WRITE_RADD_OFF(reg, radd_off) \
++ (reg = (reg & ~(ISPHIST_RADD_OFF_MASK)) \
++ | (radd_off << ISPHIST_RADD_OFF_SHIFT))
++
++#define WRITE_BIT_SHIFT(reg, bit_shift) \
++ (reg = (reg & ~(ISPHIST_CNT_SHIFT_MASK)) \
++ | (bit_shift << ISPHIST_CNT_SHIFT_SHIFT))
++
++#define WRITE_DATA_SIZE(reg, data_size) \
++ (reg = (reg & ~(ISPHIST_CNT_DATASIZE_MASK)) \
++ | (data_size << ISPHIST_CNT_DATASIZE_SHIFT))
++
++#define WRITE_NUM_BINS(reg, num_bins) \
++ (reg = (reg & ~(ISPHIST_CNT_BINS_MASK)) \
++ | (num_bins << ISPHIST_CNT_BINS_SHIFT))
++
++#define WRITE_WB_R(reg, reg_wb_gain) \
++ reg = ((reg & ~(ISPHIST_WB_GAIN_WG00_MASK)) \
++ | (reg_wb_gain << ISPHIST_WB_GAIN_WG00_SHIFT))
++
++#define WRITE_WB_RG(reg, reg_wb_gain) \
++ (reg = (reg & ~(ISPHIST_WB_GAIN_WG01_MASK)) \
++ | (reg_wb_gain << ISPHIST_WB_GAIN_WG01_SHIFT))
++
++#define WRITE_WB_B(reg, reg_wb_gain) \
++ (reg = (reg & ~(ISPHIST_WB_GAIN_WG02_MASK)) \
++ | (reg_wb_gain << ISPHIST_WB_GAIN_WG02_SHIFT))
++
++#define WRITE_WB_BG(reg, reg_wb_gain) \
++ (reg = (reg & ~(ISPHIST_WB_GAIN_WG03_MASK)) \
++ | (reg_wb_gain << ISPHIST_WB_GAIN_WG03_SHIFT))
++
++#define WRITE_REG_HORIZ(reg, reg_n_hor) \
++ (reg = ((reg & ~ISPHIST_REGHORIZ_MASK) \
++ | (reg_n_hor & ISPHIST_REGHORIZ_MASK)))
++
++#define WRITE_REG_VERT(reg, reg_n_vert) \
++ (reg = ((reg & ~ISPHIST_REGVERT_MASK) \
++ | (reg_n_vert & ISPHIST_REGVERT_MASK)))
++
++struct isp_hist_config {
++ u8 hist_source; /* CCDC or Memory */
++ u8 input_bit_width; /* Needed o know the size per pixel */
++ u8 hist_frames; /* Num of frames to be processed and accumulated */
++ u8 hist_h_v_info; /* frame-input width and height if source is memory */
++ u16 hist_radd; /* frame-input address in memory */
++ u16 hist_radd_off; /* line-offset for frame-input */
++ u16 hist_bins; /* number of bins: 32, 64, 128, or 256 */
++ u16 wb_gain_R; /* White Balance Field-to-Pattern Assignments */
++ u16 wb_gain_RG; /* White Balance Field-to-Pattern Assignments */
++ u16 wb_gain_B; /* White Balance Field-to-Pattern Assignments */
++ u16 wb_gain_BG; /* White Balance Field-to-Pattern Assignments */
++ u8 num_regions; /* number of regions to be configured */
++ u16 reg0_hor; /* Region 0 size and position */
++ u16 reg0_ver; /* Region 0 size and position */
++ u16 reg1_hor; /* Region 1 size and position */
++ u16 reg1_ver; /* Region 1 size and position */
++ u16 reg2_hor; /* Region 2 size and position */
++ u16 reg2_ver; /* Region 2 size and position */
++ u16 reg3_hor; /* Region 3 size and position */
++ u16 reg3_ver; /* Region 3 size and position */
++};
++
++struct isp_hist_data {
++
++ u32 *hist_statistics_buf; /* Pointer to pass to user */
++
++};
++
++#include <linux/autoconf.h>
++#ifdef CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER
++/*
++ * Validate parameters to be stored in HIST registers
++ */
++int isp_hist_configure(struct isp_hist_config *histcfg);
++
++/*
++ * Requests Histrogram statistics
++ */
++int isp_hist_request_statistics(struct isp_hist_data *histdata);
++
++/*
++ * Saves hist context
++ */
++void isphist_save_context(void);
++
++/*
++ * Restores hist context
++ */
++void isphist_restore_context(void);
++#else
++#define isp_hist_configure(x) -EFAULT
++#define isp_hist_request_statistics(x) -EFAULT
++#define isphist_save_context()
++#define isphist_restore_context()
++#endif
++
++#endif /* OMAP_ISP_HIST */
+Index: git/drivers/media/video/isp/ispmmu.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispmmu.c 2009-02-12 11:41:19.000000000 -0600
+@@ -0,0 +1,792 @@
++/*
++ * drivers/media/video/isp/ispmmu.c
++ *
++ * Driver Library for ISP MMU module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/types.h>
++#include <linux/dma-mapping.h>
++#include <linux/mm.h>
++
++#include <asm/io.h>
++#include <asm/byteorder.h>
++#include <asm/scatterlist.h>
++#include <asm/irq.h>
++
++
++#include "isp.h"
++#include "ispreg.h"
++#include "ispmmu.h"
++
++
++#define ISPMMU_L1D_TYPE_SHIFT 0
++#define ISPMMU_L1D_TYPE_MASK 0x3
++#define ISPMMU_L1D_TYPE_FAULT 0
++#define ISPMMU_L1D_TYPE_FAULT1 3
++#define ISPMMU_L1D_TYPE_PAGE 1
++#define ISPMMU_L1D_TYPE_SECTION 2
++#define ISPMMU_L1D_PAGE_ADDR_SHIFT 10
++
++#define ISPMMU_L2D_TYPE_SHIFT 0
++#define ISPMMU_L2D_TYPE_MASK 0x3
++#define ISPMMU_L2D_TYPE_FAULT 0
++#define ISPMMU_L2D_TYPE_LARGE_PAGE 1
++#define ISPMMU_L2D_TYPE_SMALL_PAGE 2
++#define ISPMMU_L2D_SMALL_ADDR_SHIFT 12
++#define ISPMMU_L2D_SMALL_ADDR_MASK 0xFFFFF000
++#define ISPMMU_L2D_M_ACCESSBASED (1 << 11)
++#define ISPMMU_L2D_E_BIGENDIAN (1 << 9)
++#define ISPMMU_L2D_ES_SHIFT 4
++#define ISPMMU_L2D_ES_MASK ~(3 << 4)
++#define ISPMMU_L2D_ES_8BIT 0
++#define ISPMMU_L2D_ES_16BIT 1
++#define ISPMMU_L2D_ES_32BIT 2
++#define ISPMMU_L2D_ES_NOENCONV 3
++
++#define ISPMMU_TTB_ENTRIES_NR 4096
++
++/* Number 1MB entries in TTB in one 32MB region */
++#define ISPMMU_REGION_ENTRIES_NR 32
++
++/* 128 region entries */
++#define ISPMMU_REGION_NR \
++ (ISPMMU_TTB_ENTRIES_NR / ISPMMU_REGION_ENTRIES_NR)
++
++/* Each region is 32MB */
++#define ISPMMU_REGION_SIZE (ISPMMU_REGION_ENTRIES_NR * (1 << 20))
++
++/* Number of entries per L2 Page table */
++#define ISPMMU_L2D_ENTRIES_NR 256
++
++/*
++ * Statically allocate 16KB for L2 page tables. 16KB can be used for
++ * up to 16 L2 page tables which cover up to 16MB space. We use an array of 16
++ * to keep track of these 16 L2 page table's status.
++ */
++#define L2P_TABLE_SIZE 1024
++#define L2P_TABLE_NR 41 /* Currently supports 4*5MP shots */
++#define L2P_TABLES_SIZE (L2P_TABLE_SIZE * L2P_TABLE_NR)
++
++/* Extra memory allocated to get ttb aligned on 16KB */
++#define ISPMMU_TTB_MISALIGN_SIZE 0x3000
++
++/* Page structure for statically allocated l1 and l2 page tables */
++static struct page *ttb_page;
++static struct page *l2p_page;
++
++/*
++* Allocate the same number as of TTB entries for easy tracking
++* even though L2P tables are limited to 16 or so
++*/
++static u32 l2p_table_addr[4096];
++
++/* An array of flags to keep the L2P table allotted */
++static int l2p_table_allotted[L2P_TABLE_NR];
++
++/* TTB virtual and physical address */
++static u32 *ttb, ttb_p;
++
++/* Worst case allocation for TTB for 16KB alignment */
++static u32 ttb_aligned_size;
++
++/* L2 page table base virtural and physical address */
++static u32 l2_page_cache, l2_page_cache_p;
++
++/* Structure for Mapping Attributes in the L1, L2 descriptor*/
++struct ispmmu_mapattr{
++ enum ISPMMU_MAP_ENDIAN endianism;
++ enum ISPMMU_MAP_ELEMENTSIZE element_size;
++ enum ISPMMU_MAP_MIXEDREGION mixed_size;
++ enum ISPMMU_MAP_SIZE map_size;
++};
++
++static struct ispmmu_mapattr l1_mapattr_obj, l2_mapattr_obj;
++
++/* Structure for saving/restoring mmu module registers*/
++static struct isp_reg ispmmu_reg_list[] = {
++ {ISPMMU_SYSCONFIG, 0x0000},
++ {ISPMMU_IRQENABLE, 0x0000},
++ {ISPMMU_CNTL, 0x0000},
++ {ISPMMU_TTB, 0x0000},
++ {ISPMMU_LOCK, 0x0000},
++ {ISPMMU_LD_TLB, 0x0000},
++ {ISPMMU_CAM, 0x0000},
++ {ISPMMU_RAM, 0x0000},
++ {ISPMMU_GFLUSH, 0x0000},
++ {ISPMMU_FLUSH_ENTRY, 0x0000},
++ {ISP_TOK_TERM, 0x0000}
++};
++
++/*
++ * Sets the L1,L2 descriptor with section/supersection/Largepage/Smallpage
++ * base address or with L2 Page table address depending on the size parameter.
++ * Returns the written L1/L2 descriptor.
++ * pte_addr : Pointer to the Indexed address in the L1 Page table ie TTB.
++ * phy_addr : Section/Supersection/L2page table physical address.
++ * mapattr : Mapping attributes applicable for Section/Supersections.
++ */
++static u32 ispmmu_set_pte(u32 *pte_addr, u32 phy_addr,
++ struct ispmmu_mapattr mapattr)
++{
++ u32 pte = 0;
++
++ switch (mapattr.map_size) {
++ case PAGE :
++ pte = ISPMMU_L1D_TYPE_PAGE << ISPMMU_L1D_TYPE_SHIFT;
++ pte |= (phy_addr >> ISPMMU_L1D_PAGE_ADDR_SHIFT)
++ << ISPMMU_L1D_PAGE_ADDR_SHIFT;
++ break;
++ case SMALLPAGE:
++ pte = ISPMMU_L2D_TYPE_SMALL_PAGE <<
++ ISPMMU_L2D_TYPE_SHIFT;
++ pte &= ~ISPMMU_L2D_M_ACCESSBASED;
++ if (mapattr.endianism)
++ pte |= ISPMMU_L2D_E_BIGENDIAN ;
++ else
++ pte &= ~ISPMMU_L2D_E_BIGENDIAN ;
++ pte &= ISPMMU_L2D_ES_MASK;
++ pte |= mapattr.element_size << ISPMMU_L2D_ES_SHIFT;
++ pte |= (phy_addr >> ISPMMU_L2D_SMALL_ADDR_SHIFT)
++ << ISPMMU_L2D_SMALL_ADDR_SHIFT;
++ break;
++ case L1DFAULT:
++ pte = ISPMMU_L1D_TYPE_FAULT << ISPMMU_L1D_TYPE_SHIFT;
++ break;
++ case L2DFAULT:
++ pte = ISPMMU_L2D_TYPE_FAULT << ISPMMU_L2D_TYPE_SHIFT;
++ break;
++ default:
++ break;
++ };
++
++ *pte_addr = pte;
++ return pte;
++}
++
++/*
++ * Returns the index in the ttb for a free 32MB region
++ * Returns 0 as an error code, if run out of regions.
++ */
++static u32 find_free_region_index(void)
++{
++ int idx = 0;
++ /* Find the first free 32M region in ttb. */
++ /* skip region 0 to avoid NULL pointer */
++ for (idx = ISPMMU_REGION_ENTRIES_NR; idx < ISPMMU_TTB_ENTRIES_NR;
++ idx += ISPMMU_REGION_ENTRIES_NR){
++ if (((*(ttb + idx)) & ISPMMU_L1D_TYPE_MASK) ==
++ (ISPMMU_L1D_TYPE_FAULT << ISPMMU_L1D_TYPE_SHIFT))
++ break;
++ }
++ if (idx == ISPMMU_TTB_ENTRIES_NR) {
++ DPRINTK_ISPMMU("run out of virtual space\n");
++ return 0;
++ }
++ return idx;
++}
++
++/*
++ * Returns the Page aligned address
++ * addr :Address to be page aligned
++ */
++static inline u32 page_aligned_addr(u32 addr)
++{
++ u32 paddress;
++ paddress = addr & ~(PAGE_SIZE-1) ;
++ return paddress;
++}
++
++
++/*
++ * Returns the physical address of the allocated L2 page Table.
++ * l2_table : Virtual address of the allocated l2 table.
++ */
++static inline u32 l2_page_paddr(u32 l2_table)
++{
++ return (l2_page_cache_p + (l2_table - l2_page_cache));
++}
++
++/*
++ * Allocates contigous memory for L2 page tables.
++ */
++static int init_l2_page_cache(void)
++{
++ int i;
++ u32 *l2p;
++
++ l2p_page = alloc_pages(GFP_KERNEL, get_order(L2P_TABLES_SIZE));
++ if (!l2p_page) {
++ DPRINTK_ISPMMU("ISP_ERR : No Memory for L2 page tables\n");
++ return -ENOMEM;
++ }
++ l2p = page_address(l2p_page);
++ l2_page_cache = (u32)l2p;
++ l2_page_cache_p = __pa(l2p);
++ l2_page_cache = (u32)ioremap_nocache(l2_page_cache_p, L2P_TABLES_SIZE);
++
++ for (i = 0; i < L2P_TABLE_NR; i++)
++ l2p_table_allotted[i] = 0;
++
++ DPRINTK_ISPMMU("Mem for L2 page tables at l2_paddr = %x, \
++ l2_vaddr = 0x%x, of bytes = 0x%x\n",
++ l2_page_cache_p, l2_page_cache, L2P_TABLES_SIZE);
++ /*HW Errata 1.40. Camera ISP: MMU endianess polarity inverted */
++/// if (is_sil_rev_less_than(OMAP3430_REV_ES2_0))
++/// l2_mapattr_obj.endianism = B_ENDIAN;
++/// else
++ l2_mapattr_obj.endianism = L_ENDIAN;
++ l2_mapattr_obj.element_size = ES_8BIT;
++ l2_mapattr_obj.mixed_size = ACCESS_BASED;
++ l2_mapattr_obj.map_size = L2DFAULT;
++ return 0;
++}
++
++/*
++ * Frees the memory of L2 page tables.
++ */
++static void cleanup_l2_page_cache(void)
++{
++ if (l2p_page) {
++ ioremap_cached(l2_page_cache_p, L2P_TABLES_SIZE);
++ __free_pages(l2p_page, get_order(L2P_TABLES_SIZE));
++ }
++}
++
++/*
++ * Finds the free L2 Page table slot.
++ * Fills the allotted L2 Page table with default entries.
++ * Returns the virtual address of the allotted L2 Pagetable,
++ */
++static u32 request_l2_page_table(void)
++{
++ int i, j;
++ u32 l2_table;
++
++ for (i = 0; i < L2P_TABLE_NR; i++) {
++ if (!l2p_table_allotted[i])
++ break;
++ }
++ if (i < L2P_TABLE_NR) {
++ l2p_table_allotted[i] = 1;
++ l2_table = l2_page_cache + (i * L2P_TABLE_SIZE);
++ l2_mapattr_obj.map_size = L2DFAULT;
++ /*Fill up all the entries with fault */
++ for (j = 0; j < ISPMMU_L2D_ENTRIES_NR; j++)
++ ispmmu_set_pte((u32 *)l2_table+j, 0, l2_mapattr_obj);
++ DPRINTK_ISPMMU("Allotted l2 page table at 0x%x\n",
++ (u32)l2_table);
++ return l2_table;
++ } else {
++ DPRINTK_ISPMMU("ISP_ERR : Cannot allocate more than 16 L2\
++ Page Tables");
++ return 0;
++ }
++}
++
++/*
++ * Frees the allotted L2 Page table slot.
++ */
++static int free_l2_page_table(u32 l2_table)
++{
++ int i;
++
++ DPRINTK_ISPMMU("Free l2 page table at 0x%x\n", l2_table);
++ for (i = 0; i < L2P_TABLE_NR; i++)
++ if (l2_table == (l2_page_cache + (i * L2P_TABLE_SIZE))) {
++ if (!l2p_table_allotted[i]) {
++ DPRINTK_ISPMMU("L2 page not in use\n");
++ }
++ l2p_table_allotted[i] = 0;
++ return 0;
++ }
++ DPRINTK_ISPMMU("L2 table not found\n");
++ return -EINVAL;
++}
++
++/*
++ * Map a physically contiguous buffer to ISP space. This call is used to
++ * map a frame buffer
++ * p_addr : Physical address of the contigous mem to be mapped.
++ * size : Size of the contigous mem to be mapped.
++ */
++dma_addr_t ispmmu_map(u32 p_addr, int size)
++{
++ int i, j, idx, num;
++ u32 sz, first_padding;
++ u32 p_addr_align, p_addr_align_end;
++ u32 pd;
++ u32 *l2_table;
++
++ DPRINTK_ISPMMU("map: p_addr = 0x%x, size = 0x%x\n", p_addr, size);
++
++ p_addr_align = page_aligned_addr(p_addr);
++
++ first_padding = p_addr - p_addr_align;
++
++ if (first_padding > size)
++ sz = 0;
++ else
++ sz = size - first_padding;
++
++ num = (sz/PAGE_SIZE) + ((sz%PAGE_SIZE)?1:0) + (first_padding ?1:0);
++ p_addr_align_end = p_addr_align + num*PAGE_SIZE;
++
++ DPRINTK_ISPMMU("buffer at 0x%x of size 0x%x spans to %d pages\n",
++ p_addr, size, num);
++
++ idx = find_free_region_index();
++ if (!idx) {
++ DPRINTK_ISPMMU("Runs out of virtual space");
++ return -EINVAL;
++ }
++ DPRINTK_ISPMMU("allocating region %d\n", idx/ISPMMU_REGION_ENTRIES_NR);
++
++ /* how many second-level page tables we need */
++ num = num/ISPMMU_L2D_ENTRIES_NR +
++ ((num%ISPMMU_L2D_ENTRIES_NR)?1:0);
++ DPRINTK_ISPMMU("need %d second-level page tables (1KB each)\n", num);
++
++ /* create second-level page tables */
++ for (i = 0; i < num; i++) {
++ l2_table = (u32 *)request_l2_page_table();
++ if (!l2_table) {
++ DPRINTK_ISPMMU("no memory\n");
++ i--;
++ goto release_mem;
++ }
++
++ /* Make the first level page descriptor */
++ l1_mapattr_obj.map_size = PAGE;
++ pd = ispmmu_set_pte(ttb+idx+i, l2_page_paddr((u32)l2_table),
++ l1_mapattr_obj);
++ DPRINTK_ISPMMU("L1 pte[%d] = 0x%x\n", idx+i, pd);
++
++ /* Make the second Level page descriptors */
++ l2_mapattr_obj.map_size = SMALLPAGE;
++ for (j = 0; j < ISPMMU_L2D_ENTRIES_NR; j++) {
++ pd = ispmmu_set_pte(l2_table + j, p_addr_align,
++ l2_mapattr_obj);
++ /* DPRINTK_ISPMMU("L2 pte[%d] = 0x%x\n", j, pd); */
++ /*Contigous memory, just increment with Page size */
++ p_addr_align += PAGE_SIZE;
++ if (p_addr_align == p_addr_align_end)
++ break;
++ }
++ /* save it so we can free this l2 table later */
++ l2p_table_addr[idx + i] = (u32)l2_table;
++ }
++
++ DPRINTK_ISPMMU("mapped to ISP virtual address 0x%x\n",
++ (u32)((idx << 20) + (p_addr & (PAGE_SIZE - 1))));
++
++ omap_writel(1, ISPMMU_GFLUSH);
++ return (dma_addr_t)((idx<<20) + (p_addr & (PAGE_SIZE - 1)));
++
++release_mem:
++ for (; i >= 0; i--) {
++ free_l2_page_table(l2p_table_addr[idx + i]);
++ l2p_table_addr[idx + i] = 0;
++ }
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ispmmu_map);
++
++/*
++ * Map a physically discontiguous buffer to ISP space. This call is used to
++ * map a user buffer or a vmalloc buffer. The sg list is a set of pages.
++ * sg_list : Address of the Scatter gather linked list.
++ * sglen : Number of elements in the sg list.
++ */
++dma_addr_t ispmmu_map_sg(const struct scatterlist *sglist, int sglen)
++{
++ int i, j, idx, num, sg_num = 0;
++ u32 pd, sg_element_addr;
++ u32 *l2_table;
++
++ DPRINTK_ISPMMU("Map_sg: sglen (num of pages) = %d\n", sglen);
++
++ idx = find_free_region_index();
++ if (!idx) {
++ DPRINTK_ISPMMU("Runs out of virtual space");
++ return -EINVAL;
++ }
++
++ DPRINTK_ISPMMU("allocating region %d\n", idx/ISPMMU_REGION_ENTRIES_NR);
++
++ /* How many second-level page tables we need */
++ /*
++ * Size of each sglist element does not exceed a page size
++ * so consider the number of elements in the list for calcuating
++ * number of L2P tables
++ */
++ num = sglen/ISPMMU_L2D_ENTRIES_NR +
++ ((sglen%ISPMMU_L2D_ENTRIES_NR)?1:0);
++ DPRINTK_ISPMMU("Need %d second-level page tables (1KB each)\n", num);
++
++ /* create second-level page tables */
++ for (i = 0; i < num; i++) {
++ l2_table = (u32 *)request_l2_page_table();
++ if (!l2_table) {
++ DPRINTK_ISPMMU("No memory\n");
++ i--;
++ goto release_mem;
++ }
++ /* Make the first level page descriptor */
++ l1_mapattr_obj.map_size = PAGE;
++ pd = ispmmu_set_pte(ttb+idx+i, l2_page_paddr((u32)l2_table),
++ l1_mapattr_obj);
++ DPRINTK_ISPMMU("L1 pte[%d] = 0x%x\n", idx+i, pd);
++
++ /* Make the second Level page descriptors */
++ l2_mapattr_obj.map_size = SMALLPAGE;
++ for (j = 0; j < ISPMMU_L2D_ENTRIES_NR; j++) {
++ /*
++ * Assuming that sglist elements are always page
++ * aligned
++ */
++ sg_element_addr = sg_dma_address(sglist + sg_num);
++ if ((sg_num > 0) && page_aligned_addr(sg_element_addr)
++ != sg_element_addr)
++ DPRINTK_ISPMMU("ISP_ERR : Intermediate SG"
++ " elements are not"
++ " page aligned = 0x%x\n",
++ sg_element_addr);
++ pd = ispmmu_set_pte(l2_table + j, sg_element_addr,
++ l2_mapattr_obj);
++
++ /* DPRINTK_ISPMMU("L2 pte[%d] = 0x%x\n", j, pd); */
++
++ sg_num++;
++ if (sg_num == sglen)
++ break;
++ }
++ /* save it so we can free this l2 table later */
++ l2p_table_addr[idx + i] = (u32)l2_table;
++ }
++
++ DPRINTK_ISPMMU("mapped sg list to ISP virtual address 0x%x, idx=%d\n",
++ (u32)((idx << 20) + (sg_dma_address(sglist + 0) &
++ (PAGE_SIZE - 1))), idx);
++
++ omap_writel(1, ISPMMU_GFLUSH);
++ return (dma_addr_t)((idx << 20) + (sg_dma_address(sglist + 0) &
++ (PAGE_SIZE - 1)));
++
++release_mem:
++ for (; i >= 0; i--) {
++ free_l2_page_table(l2p_table_addr[idx + i]);
++ l2p_table_addr[idx + i] = 0;
++ }
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ispmmu_map_sg);
++
++/*
++ * Unmap a ISP space that is mapped before via ispmmu_map and
++ * ispmmu_map_sg.
++ * v_addr : Virtural address to be unmapped
++ */
++int ispmmu_unmap(dma_addr_t v_addr)
++{
++ u32 v_addr_align;
++ int idx;
++
++ DPRINTK_ISPMMU("+ispmmu_unmap: 0x%x\n", v_addr);
++
++ v_addr_align = page_aligned_addr(v_addr);
++ idx = v_addr_align >> 20;
++ if ((idx < ISPMMU_REGION_ENTRIES_NR) ||
++ (idx > (ISPMMU_REGION_ENTRIES_NR * (ISPMMU_REGION_NR - 1)))
++ || ((idx << 20) != v_addr_align)
++ || (idx%ISPMMU_REGION_ENTRIES_NR)) {
++ DPRINTK_ISPMMU("Cannot unmap a non region-aligned space \
++ 0x%x\n", v_addr);
++ return -EINVAL;
++ }
++
++ if (((*(ttb + idx)) & (ISPMMU_L1D_TYPE_MASK <<
++ ISPMMU_L1D_TYPE_SHIFT)) !=
++ (ISPMMU_L1D_TYPE_PAGE <<
++ ISPMMU_L1D_TYPE_SHIFT)) {
++ DPRINTK_ISPMMU("unmap a wrong region\n");
++ return -EINVAL;
++ }
++
++ /* free the associated level-2 page tables */
++ while (((*(ttb + idx)) & (ISPMMU_L1D_TYPE_MASK <<
++ ISPMMU_L1D_TYPE_SHIFT)) ==
++ (ISPMMU_L1D_TYPE_PAGE <<
++ ISPMMU_L1D_TYPE_SHIFT)) {
++ *(ttb + idx) = (ISPMMU_L1D_TYPE_FAULT <<
++ ISPMMU_L1D_TYPE_SHIFT);
++ free_l2_page_table(l2p_table_addr[idx]);
++ l2p_table_addr[idx++] = 0;
++ if (!(idx%ISPMMU_REGION_ENTRIES_NR)) {
++ DPRINTK_ISPMMU("Do not exceed this 32M region\n");
++ break;
++ }
++ }
++ omap_writel(1, ISPMMU_GFLUSH);
++
++ DPRINTK_ISPMMU("-ispmmu_unmap()\n");
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ispmmu_unmap);
++
++/*
++ * Callback from ISP driver for MMU interrupt
++ * status : IRQ status of ISPMMU
++ * arg1 : Not used as of now.
++ * arg2 : Not used as of now.
++ */
++static void ispmmu_isr(unsigned long status, isp_vbq_callback_ptr arg1,
++ void *arg2)
++{
++ u32 irqstatus;
++
++ irqstatus = omap_readl(ISPMMU_IRQSTATUS);
++ DPRINTK_ISPMMU("mmu error 0x%lx, 0x%x\n", status, irqstatus);
++
++ if (irqstatus & IRQENABLE_TLBMISS)
++ DPRINTK_ISPMMU("ISP_ERR: TLB Miss\n");
++ if (irqstatus & IRQENABLE_TRANSLNFAULT)
++ DPRINTK_ISPMMU("ISP_ERR: Invalid descriptor in the "
++ "translation table - Translation Fault\n");
++ if (irqstatus & IRQENABLE_EMUMISS)
++ DPRINTK_ISPMMU("ISP_ERR: TLB Miss during debug - "
++ "Emulation mode\n");
++ if (irqstatus & IRQENABLE_TWFAULT)
++ DPRINTK_ISPMMU("ISP_ERR: Table Walk Fault\n");
++ if (irqstatus & IRQENABLE_MULTIHITFAULT)
++ DPRINTK_ISPMMU("ISP_ERR: Multiple Matches in the TLB\n");
++
++ DPRINTK_ISPMMU("Fault address for the ISPMMU is 0x%x\n",
++ omap_readl(ISPMMU_FAULT_AD));
++ /*
++ * TODO: Indicate the camera driver about the fault and it should
++ * stop using the ISP
++ */
++ omap_writel(irqstatus, ISPMMU_IRQSTATUS);
++}
++
++/*
++ * Reserves memory for L1 and L2 Page tables.
++ * Initializes the ISPMMU with TTB address, fault entries as default in the
++ * TTB table.
++ * Enables MMU and TWL.
++ * Sets the callback for the MMU error events.
++ */
++static int __init ispmmu_init(void)
++{
++ int i, val = 5;
++ struct isp_sysc isp_sysconfig;
++
++ isp_get();
++
++ /* reset */
++ omap_writel(0x2, ISPMMU_SYSCONFIG);
++ while (((omap_readl(ISPMMU_SYSSTATUS) & 0x1) != 0x1) && val--)
++ udelay(10);
++
++ if ((omap_readl(ISPMMU_SYSSTATUS) & 0x1) != 0x1) {
++ DPRINTK_ISPMMU("can't take ISP MMU out of reset\n");
++ isp_put();
++ return -ENODEV;
++ }
++
++ isp_sysconfig.reset = 0;
++ isp_sysconfig.idle_mode = 1;
++ isp_power_settings(isp_sysconfig);
++
++ ttb_page = alloc_pages(GFP_KERNEL,
++ get_order(ISPMMU_TTB_ENTRIES_NR * 4));
++ if (!ttb_page) {
++ DPRINTK_ISPMMU("No Memory for TTB\n");
++ isp_put();
++ return -ENOMEM;
++ }
++
++ ttb = page_address(ttb_page);
++ ttb_p = __pa(ttb);
++ ttb_aligned_size = ISPMMU_TTB_ENTRIES_NR * 4;
++ ttb = ioremap_nocache(ttb_p, ttb_aligned_size);
++ if ((ttb_p & 0xFFFFC000) != ttb_p) {
++ DPRINTK_ISPMMU("ISP_ERR : TTB address not aligned at 16KB\n");
++ __free_pages(ttb_page, get_order(ISPMMU_TTB_ENTRIES_NR * 4));
++ ttb_aligned_size = (ISPMMU_TTB_ENTRIES_NR * 4)
++ + (ISPMMU_TTB_MISALIGN_SIZE);
++ ttb_page = alloc_pages(GFP_KERNEL,
++ get_order(ttb_aligned_size));
++ if (!ttb_page) {
++ DPRINTK_ISPMMU("No Memory for TTB\n");
++ isp_put();
++ return -ENOMEM;
++ }
++ ttb = page_address(ttb_page);
++ ttb_p = __pa(ttb);
++ ttb = ioremap_nocache(ttb_p, ttb_aligned_size);
++ if ((ttb_p & 0xFFFFC000) != ttb_p) {
++ /*
++ * Move the unaligned address to the next 16KB
++ * alignment
++ */
++ ttb = (u32 *)(((u32)ttb & 0xFFFFC000) + 0x4000);
++ ttb_p = __pa(ttb);
++ }
++ }
++
++ DPRINTK_ISPMMU("TTB allocated at p = 0x%x, v = 0x%x, size = 0x%x\n",
++ ttb_p, (u32)ttb, ttb_aligned_size);
++ /*HW Errata 1.40. Camera ISP: MMU endianess polarity inverted */
++/// if (is_sil_rev_less_than(OMAP3430_REV_ES2_0))
++/// l1_mapattr_obj.endianism = B_ENDIAN;
++/// else
++ l1_mapattr_obj.endianism = L_ENDIAN;
++
++ l1_mapattr_obj.element_size = ES_8BIT;
++ l1_mapattr_obj.mixed_size = ACCESS_BASED;
++ l1_mapattr_obj.map_size = L1DFAULT;
++
++ val = init_l2_page_cache();
++ if (val) {
++ DPRINTK_ISPMMU("ISP_ERR : init l2 page cache\n");
++ ttb = page_address(ttb_page);
++ ttb_p = __pa(ttb);
++ ioremap_cached(ttb_p, ttb_aligned_size);
++ __free_pages(ttb_page, get_order(ttb_aligned_size));
++
++ isp_put();
++ return val;
++ }
++
++ /* Setting all the entries to generate fault by default */
++ for (i = 0; i < ISPMMU_TTB_ENTRIES_NR; i++)
++ ispmmu_set_pte(ttb + i, 0, l1_mapattr_obj);
++ /*
++ * TTB 31:7 is the address, since TTB is on 16KB boundary the last
++ * 14 bits are 0
++ */
++ omap_writel(ttb_p, ISPMMU_TTB);
++
++ /* Enable MMU with table walking logic */
++ omap_writel((ISPMMU_MMUCNTL_MMU_EN|ISPMMU_MMUCNTL_TWL_EN),
++ ISPMMU_CNTL);
++ omap_writel(omap_readl(ISPMMU_IRQSTATUS), ISPMMU_IRQSTATUS);
++ omap_writel(0xf, ISPMMU_IRQENABLE);
++
++ isp_set_callback(CBK_MMU_ERR, ispmmu_isr, (void *)NULL, (void *)NULL);
++
++ val = omap_readl(ISPMMU_REVISION);
++ DPRINTK_ISPMMU("ISP MMU Rev %c.%c initialized\n",
++ (val>>ISPMMU_REVISION_REV_MAJOR_SHIFT)+'0',
++ (val & ISPMMU_REVISION_REV_MINOR_MASK)+'0');
++ /* Release the clocks now */
++ isp_put();
++ return 0;
++}
++
++/*
++ * Frees the L1 and L2 Page tables.
++ * Unsets the callback for MMU
++ */
++static void ispmmu_cleanup(void)
++{
++ /* free ttb */
++ ttb = page_address(ttb_page);
++ ttb_p = __pa(ttb);
++ ioremap_cached(ttb_p, ttb_aligned_size);
++ __free_pages(ttb_page, get_order(ttb_aligned_size));
++
++ isp_unset_callback(CBK_MMU_ERR);
++
++ cleanup_l2_page_cache();
++
++ return;
++}
++
++/*
++ * Saves the values of the mmu module registers.
++ */
++void ispmmu_save_context(void)
++{
++ DPRINTK_ISPMMU(" Saving context\n");
++ isp_save_context(ispmmu_reg_list);
++}
++EXPORT_SYMBOL_GPL(ispmmu_save_context);
++
++/*
++ * Restores the values of the mmu module registers.
++ */
++void ispmmu_restore_context(void)
++{
++ DPRINTK_ISPMMU(" Restoring context\n");
++ isp_restore_context(ispmmu_reg_list);
++}
++EXPORT_SYMBOL_GPL(ispmmu_restore_context);
++
++/*
++ * Prints the values of the ISPMMU registers
++ * Also prints other debug information stored
++ */
++void ispmmu_print_status(void)
++{
++#ifdef OMAP_ISPMMU_DEBUG
++ DPRINTK_ISPMMU("TTB v_addr = 0x%x, p_addr = 0x%x\n", (u32)ttb, ttb_p);
++ DPRINTK_ISPMMU("L2P base v_addr = 0x%x, p_addr = 0x%x\n"
++ , l2_page_cache, l2_page_cache_p);
++ DPRINTK_ISPMMU("ISPMMU_REVISION = 0x%x\n",
++ omap_readl(ISPMMU_REVISION));
++ DPRINTK_ISPMMU("ISPMMU_SYSCONFIG = 0x%x\n",
++ omap_readl(ISPMMU_SYSCONFIG));
++ DPRINTK_ISPMMU("ISPMMU_SYSSTATUS = 0x%x\n",
++ omap_readl(ISPMMU_SYSSTATUS));
++ DPRINTK_ISPMMU("ISPMMU_IRQSTATUS = 0x%x\n",
++ omap_readl(ISPMMU_IRQSTATUS));
++ DPRINTK_ISPMMU("ISPMMU_IRQENABLE = 0x%x\n",
++ omap_readl(ISPMMU_IRQENABLE));
++ DPRINTK_ISPMMU("ISPMMU_WALKING_ST = 0x%x\n",
++ omap_readl(ISPMMU_WALKING_ST));
++ DPRINTK_ISPMMU("ISPMMU_CNTL = 0x%x\n", omap_readl(ISPMMU_CNTL));
++ DPRINTK_ISPMMU("ISPMMU_FAULT_AD = 0x%x\n",
++ omap_readl(ISPMMU_FAULT_AD));
++ DPRINTK_ISPMMU("ISPMMU_TTB = 0x%x\n", omap_readl(ISPMMU_TTB));
++ DPRINTK_ISPMMU("ISPMMU_LOCK = 0x%x\n", omap_readl(ISPMMU_LOCK));
++ DPRINTK_ISPMMU("ISPMMU_LD_TLB= 0x%x\n", omap_readl(ISPMMU_LD_TLB));
++ DPRINTK_ISPMMU("ISPMMU_CAM = 0x%x\n", omap_readl(ISPMMU_CAM));
++ DPRINTK_ISPMMU("ISPMMU_RAM = 0x%x\n", omap_readl(ISPMMU_RAM));
++ DPRINTK_ISPMMU("ISPMMU_GFLUSH = 0x%x\n", omap_readl(ISPMMU_GFLUSH));
++ DPRINTK_ISPMMU("ISPMMU_FLUSH_ENTRY = 0x%x\n",
++ omap_readl(ISPMMU_FLUSH_ENTRY));
++ DPRINTK_ISPMMU("ISPMMU_READ_CAM = 0x%x\n",
++ omap_readl(ISPMMU_READ_CAM));
++ DPRINTK_ISPMMU("ISPMMU_READ_RAM = 0x%x\n",
++ omap_readl(ISPMMU_READ_RAM));
++#endif
++}
++EXPORT_SYMBOL_GPL(ispmmu_print_status);
++
++MODULE_AUTHOR("Texas Instruments.");
++MODULE_DESCRIPTION("OMAP3430 ISP MMU Driver");
++MODULE_LICENSE("GPL");
++
++module_init(ispmmu_init);
++module_exit(ispmmu_cleanup);
+Index: git/drivers/media/video/isp/ispmmu.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispmmu.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,57 @@
++/*
++ * drivers/media/video/isp/ispmmu.h
++ *
++ * OMAP3430 Camera ISP MMU API
++ *
++ * Copyright (C) 2008 Texas Instruments.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_MMU_H
++#define OMAP_ISP_MMU_H
++
++#ifdef CONFIG_ARCH_OMAP3410
++#include <asm/scatterlist.h>
++#endif
++
++dma_addr_t ispmmu_map(unsigned int p_addr, int size);
++
++/*
++* To be called from camera driver with scatter gather list
++*/
++dma_addr_t ispmmu_map_sg(const struct scatterlist *sglist, int sglen);
++int ispmmu_unmap(dma_addr_t isp_addr);
++
++void ispmmu_print_status(void);
++
++enum
++ISPMMU_MAP_ENDIAN{L_ENDIAN, B_ENDIAN};
++
++enum
++ISPMMU_MAP_ELEMENTSIZE{ES_8BIT, ES_16BIT, ES_32BIT, ES_NOENCONV};
++
++enum
++ISPMMU_MAP_MIXEDREGION{ACCESS_BASED, PAGE_BASED};
++
++enum
++ISPMMU_MAP_SIZE{L1DFAULT, PAGE, SECTION, SUPERSECTION, L2DFAULT,
++ LARGEPAGE, SMALLPAGE};
++
++/*
++ * Saves mmu context
++ */
++void ispmmu_save_context(void);
++
++/*
++ * Restores mmu context
++ */
++void ispmmu_restore_context(void);
++
++#endif /* OMAP_ISP_MMU_H */
+Index: git/drivers/media/video/isp/isppreview.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isppreview.c 2009-02-12 10:29:18.000000000 -0600
+@@ -0,0 +1,1894 @@
++/*
++ * drivers/media/video/isp/isppreview.c
++ *
++ * Driver Library for Preview module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include <linux/mutex.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/types.h>
++#include <asm/io.h>
++
++#include "isp.h"
++#include "ispreg.h"
++#include "isppreview.h"
++#include <asm/uaccess.h>
++
++static struct ispprev_nf prev_nf_t;
++static int RG_update, GG_update, BG_update, NF_enable, NF_update;
++
++/* Structure for saving/restoring preview module registers*/
++static struct isp_reg ispprev_reg_list[] = {
++ {ISPPRV_HORZ_INFO, 0x0000},
++ {ISPPRV_VERT_INFO, 0x0000},
++ {ISPPRV_RSDR_ADDR, 0x0000},
++ {ISPPRV_RADR_OFFSET, 0x0000},
++ {ISPPRV_DSDR_ADDR, 0x0000},
++ {ISPPRV_DRKF_OFFSET, 0x0000},
++ {ISPPRV_WSDR_ADDR, 0x0000},
++ {ISPPRV_WADD_OFFSET, 0x0000},
++ {ISPPRV_AVE, 0x0000},
++ {ISPPRV_HMED, 0x0000},
++ {ISPPRV_NF, 0x0000},
++ {ISPPRV_WB_DGAIN, 0x0000},
++ {ISPPRV_WBGAIN, 0x0000},
++ {ISPPRV_WBSEL, 0x0000},
++ {ISPPRV_CFA, 0x0000},
++ {ISPPRV_BLKADJOFF, 0x0000},
++ {ISPPRV_RGB_MAT1, 0x0000},
++ {ISPPRV_RGB_MAT2, 0x0000},
++ {ISPPRV_RGB_MAT3, 0x0000},
++ {ISPPRV_RGB_MAT4, 0x0000},
++ {ISPPRV_RGB_MAT5, 0x0000},
++ {ISPPRV_RGB_OFF1, 0x0000},
++ {ISPPRV_RGB_OFF2, 0x0000},
++ {ISPPRV_CSC0, 0x0000},
++ {ISPPRV_CSC1, 0x0000},
++ {ISPPRV_CSC2, 0x0000},
++ {ISPPRV_CSC_OFFSET, 0x0000},
++ {ISPPRV_CNT_BRT, 0x0000},
++ {ISPPRV_CSUP, 0x0000},
++ {ISPPRV_SETUP_YC, 0x0000},
++ {ISPPRV_SET_TBL_ADDR, 0x0000},
++ {ISPPRV_SET_TBL_DATA, 0x0000},
++ {ISPPRV_CDC_THR0, 0x0000},
++ {ISPPRV_CDC_THR1, 0x0000},
++ {ISPPRV_CDC_THR2, 0x0000},
++ {ISPPRV_CDC_THR3, 0x0000},
++ {ISP_TOK_TERM, 0x0000}
++};
++
++
++/* Default values in Office Flourescent Light for RGBtoRGB Blending */
++static struct ispprev_rgbtorgb flr_rgb2rgb = {
++ { /* RGB-RGB Matrix */
++ { 0x01E2, 0x0F30, 0x0FEE },
++ { 0x0F9B, 0x01AC, 0x0FB9 },
++ { 0x0FE0, 0x0EC0, 0x0260 }
++ }, /* RGB Offset */
++ {0x0000, 0x0000, 0x0000}
++};
++
++/* Default values in Office Flourescent Light for RGB to YUV Conversion*/
++static struct ispprev_csc flr_prev_csc[] = {
++ {
++ { /* CSC Coef Matrix */
++ { 66, 129, 25},
++ { -38, -75, 112},
++ { 112, -94 , -18}
++ }, /* CSC Offset */
++ {0x0, 0x0, 0x0}
++ },
++ {
++ { /* CSC Coef Matrix Sepia*/
++ { 19, 38, 7},
++ { 0, 0, 0},
++ { 0, 0, 0}
++ }, /* CSC Offset */
++ {0x0, 0xE7, 0x14}
++ },
++ {
++ { /* CSC Coef Matrix BW*/
++ { 66, 129, 25},
++ { 0, 0, 0},
++ { 0, 0, 0}
++ }, /* CSC Offset */
++ {0x0, 0x0, 0x0}
++ }
++};
++
++
++/* Default values in Office Flourescent Light for CFA Gradient*/
++static u8 flr_cfa_gradthrs_horz = 0x28;
++static u8 flr_cfa_gradthrs_vert = 0x28;
++
++/* Default values in Office Flourescent Light for Chroma Suppression*/
++static u8 flr_csup_gain = 0x0D;
++static u8 flr_csup_thres = 0xEB;
++
++/* Default values in Office Flourescent Light for Noise Filter*/
++static u8 flr_nf_strgth = 0x03;
++
++/* Default values in Office Flourescent Light for White Balance*/
++static u16 flr_wbal_dgain = 0x100;
++static u8 flr_wbal_coef0 = 0x68;
++static u8 flr_wbal_coef1 = 0x5c;
++static u8 flr_wbal_coef2 = 0x5c;
++static u8 flr_wbal_coef3 = 0x94;
++
++/* Default values in Office Flourescent Light for Black Adjustment*/
++static u8 flr_blkadj_blue = 0x0;
++static u8 flr_blkadj_green = 0x0;
++static u8 flr_blkadj_red = 0x0;
++
++static int update_color_matrix;
++
++/*
++ * Structure for the preview module to store its own information.
++ */
++static struct isp_prev {
++ u8 prev_inuse;
++ u32 prevout_w;
++ u32 prevout_h;
++ u32 previn_w;
++ u32 previn_h;
++ enum preview_input prev_inpfmt;
++ enum preview_output prev_outfmt;
++ u8 hmed_en;
++ u8 nf_en;
++ u8 dcor_en;
++ u8 cfa_en;
++ u8 csup_en;
++ u8 yenh_en;
++ u8 fmtavg;
++ u8 brightness;
++ u8 contrast;
++ enum preview_color_effect color;
++ enum cfa_fmt cfafmt;
++ struct mutex ispprev_mutex;
++} ispprev_obj;
++
++/* Saved parameters */
++struct prev_params *prev_config_params;
++
++/*
++ * Coeficient Tables for the submodules in Preview.
++ * Array is initialised with the values from.the tables text file.
++ */
++
++/*
++ * CFA Filter Coefficient Table
++ *
++ */
++static u32 cfa_coef_table[] = {
++#include "cfa_coef_table.h"
++};
++
++/*
++ * Gamma Correction Table - Red
++ */
++static u32 redgamma_table[] = {
++#include "redgamma_table.h"
++};
++
++/*
++ * Gamma Correction Table - Green
++ */
++static u32 greengamma_table[] = {
++#include "greengamma_table.h"
++};
++
++/*
++ * Gamma Correction Table - Blue
++ */
++static u32 bluegamma_table[] = {
++#include "bluegamma_table.h"
++};
++
++/*
++ * Noise Filter Threshold table
++ */
++static u32 noise_filter_table[] = {
++#include "noise_filter_table.h"
++};
++
++/*
++ * Luminance Enhancement Table
++ */
++static u32 luma_enhance_table[] = {
++#include "luma_enhance_table.h"
++};
++
++int omap34xx_isp_preview_config(void *userspace_add)
++{
++ struct prev_params *params = prev_config_params;
++ struct ispprev_hmed prev_hmed_t;
++ struct ispprev_cfa prev_cfa_t;
++ struct ispprev_csup csup_t;
++ struct ispprev_wbal prev_wbal_t;
++ struct ispprev_blkadj prev_blkadj_t;
++ struct ispprev_rgbtorgb rgb2rgb_t;
++ struct ispprev_csc prev_csc_t;
++ struct ispprev_yclimit yclimit_t;
++ struct ispprev_dcor prev_dcor_t;
++ struct ispprv_update_config preview_struct;
++ int yen_t[128];
++
++ if (userspace_add == NULL)
++ return -EINVAL ;
++ if (copy_from_user(&preview_struct,
++ (struct ispprv_update_config *)userspace_add,
++ sizeof(struct ispprv_update_config))) {
++ goto err_copy_from_user;
++ }
++ if ((ISP_ABS_PREV_LUMAENH & preview_struct.flag) ==
++ ISP_ABS_PREV_LUMAENH) {
++ if ((ISP_ABS_PREV_LUMAENH & preview_struct.update) ==
++ ISP_ABS_PREV_LUMAENH) {
++ if (copy_from_user(yen_t, (preview_struct.yen),
++ sizeof(yen_t)))
++ goto err_copy_from_user;
++
++ isppreview_config_luma_enhancement(yen_t);
++ params->features |= (PREV_LUMA_ENHANCE);
++ } else
++ params->features |= (PREV_LUMA_ENHANCE);
++ } else {
++ if ((ISP_ABS_PREV_LUMAENH & preview_struct.update) ==
++ ISP_ABS_PREV_LUMAENH)
++ params->features &= ~(PREV_LUMA_ENHANCE);
++ }
++
++ if ((ISP_ABS_PREV_INVALAW & preview_struct.flag)
++ == ISP_ABS_PREV_INVALAW) {
++ isppreview_enable_invalaw(1);
++ params->features |= (PREV_INVERSE_ALAW);
++ } else {
++ isppreview_enable_invalaw(0);
++ params->features &= ~(PREV_INVERSE_ALAW);
++ }
++
++ if ((ISP_ABS_PREV_HRZ_MED & preview_struct.flag) ==
++ ISP_ABS_PREV_HRZ_MED) {
++ if ((ISP_ABS_PREV_HRZ_MED & preview_struct.update)
++ == ISP_ABS_PREV_HRZ_MED) {
++ if (copy_from_user(&prev_hmed_t,
++ (struct ispprev_hmed *)
++ (preview_struct.prev_hmed),
++ sizeof(struct ispprev_hmed)))
++ goto err_copy_from_user;
++ isppreview_config_hmed(prev_hmed_t);
++ isppreview_enable_hmed(1);
++ params->features |= (PREV_HORZ_MEDIAN_FILTER);
++ } else {
++ isppreview_enable_hmed(1);
++ params->features |= (PREV_HORZ_MEDIAN_FILTER);
++ }
++ } else {
++ if ((ISP_ABS_PREV_HRZ_MED & preview_struct.update) ==
++ ISP_ABS_PREV_HRZ_MED) {
++ isppreview_enable_hmed(0);
++ params->features &= ~(PREV_HORZ_MEDIAN_FILTER);
++ }
++ }
++
++ if ((ISP_ABS_PREV_CFA & preview_struct.flag) ==
++ ISP_ABS_PREV_CFA) {
++ if ((ISP_ABS_PREV_CFA & preview_struct.update) ==
++ ISP_ABS_PREV_CFA) {
++ if (copy_from_user(&prev_cfa_t,
++ (struct ispprev_cfa *)preview_struct.
++ prev_cfa, sizeof(struct ispprev_cfa)))
++ goto err_copy_from_user;
++
++ isppreview_config_cfa(prev_cfa_t);
++ isppreview_enable_cfa(1);
++ params->features |= (PREV_CFA);
++
++ } else {
++ isppreview_enable_cfa(1);
++ params->features |= (PREV_CFA);
++ }
++ } else {
++ if ((ISP_ABS_PREV_CFA & preview_struct.update) ==
++ ISP_ABS_PREV_CFA) {
++ isppreview_enable_cfa(0);
++ params->features &= ~(PREV_CFA);
++ }
++ }
++
++ if ((ISP_ABS_PREV_CHROMA_SUPP & preview_struct.flag) ==
++ ISP_ABS_PREV_CHROMA_SUPP) {
++ if ((ISP_ABS_PREV_CHROMA_SUPP &
++ preview_struct.update) ==
++ ISP_ABS_PREV_CHROMA_SUPP) {
++ if (copy_from_user(&csup_t,
++ (struct ispprev_csup *)
++ (preview_struct.csup),
++ sizeof(struct ispprev_csup)))
++ goto err_copy_from_user;
++
++ isppreview_config_chroma_suppression(csup_t);
++ isppreview_enable_chroma_suppression(1);
++ params->features |= (PREV_CHROMA_SUPPRESS);
++
++ } else {
++ isppreview_enable_chroma_suppression(1);
++ params->features |= (PREV_CHROMA_SUPPRESS);
++ }
++ } else {
++ if ((ISP_ABS_PREV_CHROMA_SUPP &
++ preview_struct.update) ==
++ ISP_ABS_PREV_CHROMA_SUPP) {
++ isppreview_enable_chroma_suppression(0);
++ params->features &= ~(PREV_CHROMA_SUPPRESS);
++ }
++ }
++
++ if ((ISP_ABS_PREV_WB & preview_struct.update) == ISP_ABS_PREV_WB) {
++ if (copy_from_user(&prev_wbal_t,
++ (struct ispprev_wbal *)(preview_struct.
++ prev_wbal), sizeof(struct ispprev_wbal)))
++ goto err_copy_from_user;
++
++ isppreview_config_whitebalance(prev_wbal_t);
++ }
++
++ if ((ISP_ABS_PREV_BLKADJ & preview_struct.update)
++ == ISP_ABS_PREV_BLKADJ) {
++ if (copy_from_user(&prev_blkadj_t,
++ (struct ispprev_blkadjl *)(preview_struct.
++ prev_blkadj), sizeof(struct ispprev_blkadj))) {
++ goto err_copy_from_user;
++ }
++ isppreview_config_blkadj(prev_blkadj_t);
++ }
++
++ if ((ISP_ABS_PREV_RGB2RGB & preview_struct.update)
++ == ISP_ABS_PREV_RGB2RGB) {
++ if (copy_from_user(&rgb2rgb_t,
++ (struct ispprev_rgbtorgb *)(preview_struct.
++ rgb2rgb), sizeof(struct ispprev_rgbtorgb)))
++ goto err_copy_from_user;
++
++ isppreview_config_rgb_blending(rgb2rgb_t);
++ }
++
++ if ((ISP_ABS_PREV_COLOR_CONV & preview_struct.update)
++ == ISP_ABS_PREV_COLOR_CONV) {
++ if (copy_from_user(&prev_csc_t,
++ (struct ispprev_csc *)(preview_struct.
++ prev_csc), sizeof(struct ispprev_csc)))
++ goto err_copy_from_user;
++
++ isppreview_config_rgb_to_ycbcr(prev_csc_t);
++ }
++
++ if ((ISP_ABS_PREV_YC_LIMIT & preview_struct.update)
++ == ISP_ABS_PREV_YC_LIMIT) {
++ if (copy_from_user(&yclimit_t,
++ (struct ispprev_yclimit *)(preview_struct.
++ yclimit), sizeof(struct ispprev_yclimit)))
++ goto err_copy_from_user;
++
++ isppreview_config_yc_range(yclimit_t);
++ }
++
++ if ((ISP_ABS_PREV_DEFECT_COR & preview_struct.flag) ==
++ ISP_ABS_PREV_DEFECT_COR) {
++ if ((ISP_ABS_PREV_DEFECT_COR & preview_struct.update) ==
++ ISP_ABS_PREV_DEFECT_COR) {
++ if (copy_from_user(&prev_dcor_t,
++ (struct ispprev_dcor *)
++ (preview_struct.prev_dcor),
++ sizeof(struct ispprev_dcor)))
++ goto err_copy_from_user;
++
++ isppreview_config_dcor(prev_dcor_t);
++ isppreview_enable_dcor(1);
++ params->features |= (PREV_DEFECT_COR);
++ } else {
++ isppreview_enable_dcor(1);
++ params->features |= (PREV_DEFECT_COR);
++ }
++ } else {
++ if ((ISP_ABS_PREV_DEFECT_COR & preview_struct.update) ==
++ ISP_ABS_PREV_DEFECT_COR) {
++ isppreview_enable_dcor(0);
++ params->features &= ~(PREV_DEFECT_COR);
++ }
++ }
++
++ if ((ISP_ABS_PREV_GAMMABYPASS & preview_struct.flag) ==
++ ISP_ABS_PREV_GAMMABYPASS) {
++ isppreview_enable_gammabypass(1);
++ params->features |= (PREV_GAMMA_BYPASS);
++ } else {
++ isppreview_enable_gammabypass(0);
++ params->features &= ~(PREV_GAMMA_BYPASS);
++ }
++
++ return 0;
++
++err_copy_from_user:
++ printk(KERN_ERR);
++ DPRINTK_ISPPREV("ISP_ERR : Preview Copy From User Error \n");
++ return -EINVAL ;
++}
++EXPORT_SYMBOL(omap34xx_isp_preview_config);
++
++int omap34xx_isp_tables_update(void *userspace_add)
++{
++ struct isptables_update isptables_struct;
++ struct prev_params *params = prev_config_params;
++
++ if (userspace_add == NULL)
++ return -EINVAL;
++
++ if (copy_from_user(&isptables_struct,
++ (struct isptables_update *)(userspace_add),
++ sizeof(struct isptables_update)))
++ goto err_copy_from_user;
++
++ if ((ISP_ABS_TBL_NF & isptables_struct.flag) == ISP_ABS_TBL_NF) {
++ NF_enable = 1;
++ params->features |= (PREV_NOISE_FILTER);
++ } else {
++ NF_enable = 0;
++ params->features &= ~(PREV_NOISE_FILTER);
++ }
++
++ if ((ISP_ABS_TBL_NF & isptables_struct.update) == ISP_ABS_TBL_NF) {
++ if (copy_from_user(&prev_nf_t, (void *)isptables_struct.prev_nf,
++ sizeof(struct ispprev_nf)))
++ goto err_copy_from_user;
++
++ if (copy_from_user(noise_filter_table, prev_nf_t.table,
++ sizeof(noise_filter_table))) {
++ NF_update = 0;
++ goto err_copy_from_user;
++ }
++ prev_nf_t.table = noise_filter_table;
++ NF_update = 1;
++ }
++
++ if ((ISP_ABS_TBL_REDGAMMA & isptables_struct.update) ==
++ ISP_ABS_TBL_REDGAMMA) {
++ if (copy_from_user(redgamma_table,
++ (isptables_struct.red_gamma),
++ sizeof(redgamma_table))) {
++ RG_update = 0;
++ goto err_copy_from_user;
++ }
++ RG_update = 1;
++ }
++
++ if ((ISP_ABS_TBL_GREENGAMMA & isptables_struct.update) ==
++ ISP_ABS_TBL_GREENGAMMA) {
++ if (copy_from_user(greengamma_table,
++ (isptables_struct.green_gamma),
++ sizeof(greengamma_table))) {
++ GG_update = 0;
++ goto err_copy_from_user;
++ }
++ GG_update = 1;
++ }
++
++ if ((ISP_ABS_TBL_BLUEGAMMA & isptables_struct.update) ==
++ ISP_ABS_TBL_BLUEGAMMA) {
++ if (copy_from_user(bluegamma_table,
++ (isptables_struct.blue_gamma),
++ sizeof(bluegamma_table))) {
++ BG_update = 0;
++ goto err_copy_from_user;
++ }
++ BG_update = 1;
++ }
++
++ return 0;
++
++err_copy_from_user:
++ printk(KERN_ERR "Preview Tables:Copy From User Error");
++ return -EINVAL;
++}
++EXPORT_SYMBOL(omap34xx_isp_tables_update);
++
++/*
++ * Allows user to program shadow registers associated with preview module.
++ */
++void
++isppreview_config_shadow_registers()
++{
++ struct prev_params *params = prev_config_params;
++ u8 current_brightness_contrast;
++ int ctr, prv_disabled;
++
++ /* Program Brightness if needed */
++ isppreview_query_brightness(&current_brightness_contrast);
++ if (current_brightness_contrast != ((ispprev_obj.brightness) *
++ ISPPRV_BRIGHT_UNITS)) {
++ DPRINTK_ISPPREV(" Changing Brightness level to %d\n",
++ ispprev_obj.brightness);
++ isppreview_config_brightness((ispprev_obj.brightness) *
++ ISPPRV_BRIGHT_UNITS);
++ }
++
++ /* Program Contrast if needed */
++ isppreview_query_contrast(&current_brightness_contrast);
++ if (current_brightness_contrast != ((ispprev_obj.contrast) *
++ ISPPRV_CONTRAST_UNITS)) {
++ DPRINTK_ISPPREV(" Changing Contrast level to %d\n",
++ ispprev_obj.contrast);
++ isppreview_config_contrast((ispprev_obj.contrast) *
++ ISPPRV_CONTRAST_UNITS);
++ }
++
++ if (update_color_matrix) {
++ isppreview_config_rgb_to_ycbcr(
++ flr_prev_csc[ispprev_obj.color]);
++ update_color_matrix = 0;
++ }
++
++ if (GG_update || RG_update || BG_update || NF_update) {
++ isppreview_enable(0);
++ prv_disabled = 1;
++ }
++
++ if (GG_update) {
++ omap_writel(0x400, ISPPRV_SET_TBL_ADDR);
++
++ for (ctr = 0; ctr < ISP_GAMMA_TABLE_SIZE; ctr++)
++ omap_writel(greengamma_table[ctr],
++ ISPPRV_SET_TBL_DATA);
++
++ GG_update = 0;
++ }
++
++ if (RG_update) {
++ omap_writel(0, ISPPRV_SET_TBL_ADDR);
++
++ for (ctr = 0; ctr < ISP_GAMMA_TABLE_SIZE; ctr++)
++ omap_writel(redgamma_table[ctr], ISPPRV_SET_TBL_DATA);
++
++ RG_update = 0;
++ }
++
++ if (BG_update) {
++ omap_writel(0x800, ISPPRV_SET_TBL_ADDR);
++
++ for (ctr = 0; ctr < ISP_GAMMA_TABLE_SIZE; ctr++)
++ omap_writel(bluegamma_table[ctr], ISPPRV_SET_TBL_DATA);
++
++ BG_update = 0;
++ }
++
++ if (NF_update) {
++ isppreview_config_noisefilter(prev_nf_t);
++
++ if (NF_enable) {
++ isppreview_enable_noisefilter(1);
++ params->features |= ~(PREV_NOISE_FILTER);
++ } else {
++ isppreview_enable_noisefilter(0);
++ params->features &= ~(PREV_NOISE_FILTER);
++ }
++
++ NF_update = 0;
++ }
++
++ if (prv_disabled) {
++ isppreview_enable(1);
++ prv_disabled = 0;
++ }
++}
++EXPORT_SYMBOL(isppreview_config_shadow_registers);
++
++/**
++ * isppreview_request - Reserves the preview module.
++ *
++ * Returns 0 if successful, or -EBUSY if the module was already reserved.
++ **/
++int isppreview_request()
++{
++ mutex_lock(&ispprev_obj.ispprev_mutex);
++ if (!(ispprev_obj.prev_inuse)) {
++ ispprev_obj.prev_inuse = 1;
++ mutex_unlock(&ispprev_obj.ispprev_mutex);
++ /* Turn on Preview module Clocks. */
++ omap_writel((omap_readl(ISP_CTRL)) | ISPCTRL_PREV_RAM_EN |
++ ISPCTRL_PREV_CLK_EN | ISPCTRL_SBL_WR1_RAM_EN
++ , ISP_CTRL);
++ return 0;
++ } else{
++ mutex_unlock(&ispprev_obj.ispprev_mutex);
++ printk(KERN_ERR "ISP_ERR : Preview Module Busy\n");
++ return -EBUSY;
++ }
++}
++EXPORT_SYMBOL(isppreview_request);
++
++/*
++ * Marks Preview module free.
++ */
++int
++isppreview_free()
++{
++ mutex_lock(&ispprev_obj.ispprev_mutex);
++ if (ispprev_obj.prev_inuse) {
++ ispprev_obj.prev_inuse = 0;
++ mutex_unlock(&ispprev_obj.ispprev_mutex);
++ omap_writel(omap_readl(ISP_CTRL) & ~(ISPCTRL_PREV_CLK_EN |
++ ISPCTRL_PREV_RAM_EN
++ | ISPCTRL_SBL_WR1_RAM_EN), ISP_CTRL);
++ return 0;
++ } else {
++ mutex_unlock(&ispprev_obj.ispprev_mutex);
++ DPRINTK_ISPPREV("ISP_ERR : Preview Module already freed\n");
++ return -EINVAL;
++ }
++
++}
++EXPORT_SYMBOL(isppreview_free);
++
++/* Sets up the default preview configuration according to the arguments.
++ * input: Indicates the module that gives the image to preview
++ * output: Indicates the module to which the preview outputs to.
++ */
++int
++isppreview_config_datapath(enum preview_input input,
++ enum preview_output output)
++{
++ u32 pcr = 0;
++ u8 enable = 0;
++ struct prev_params *params = prev_config_params;
++ struct ispprev_yclimit yclimit;
++
++ pcr = omap_readl(ISPPRV_PCR);
++
++ switch (input) {
++ case PRV_RAW_CCDC:
++ pcr &= ~(ISPPRV_PCR_SOURCE);
++ pcr &= ~(ISPPRV_PCR_ONESHOT);
++ ispprev_obj.prev_inpfmt = PRV_RAW_CCDC;
++ break;
++ case PRV_RAW_MEM:
++ pcr |= ISPPRV_PCR_SOURCE;
++ pcr |= ISPPRV_PCR_ONESHOT;
++ ispprev_obj.prev_inpfmt = PRV_RAW_MEM;
++ break;
++ case PRV_CCDC_DRKF:
++ pcr |= ISPPRV_PCR_DRKFCAP;
++ pcr |= ISPPRV_PCR_ONESHOT;
++ ispprev_obj.prev_inpfmt = PRV_CCDC_DRKF;
++ break;
++ /* Just check for input path validity. No PCR update required
++ * for the current HW setup.
++ */
++ case PRV_COMPCFA:
++ ispprev_obj.prev_inpfmt = PRV_COMPCFA;
++ break;
++ case PRV_OTHERS:
++ ispprev_obj.prev_inpfmt = PRV_OTHERS;
++ break;
++ case PRV_RGBBAYERCFA:
++ ispprev_obj.prev_inpfmt = PRV_RGBBAYERCFA;
++ break;
++ default:
++ printk(KERN_ERR "ISP_ERR : Wrong Input\n");
++ return -EINVAL;
++ };
++
++ if (output == PREVIEW_RSZ) {
++ pcr |= ISPPRV_PCR_RSZPORT;
++ pcr &= (~ISPPRV_PCR_SDRPORT);
++ ispprev_obj.prev_outfmt = PREVIEW_RSZ;
++ } else if (output == PREVIEW_MEM) {
++ pcr &= (~ISPPRV_PCR_RSZPORT);
++ pcr |= ISPPRV_PCR_SDRPORT;
++ ispprev_obj.prev_outfmt = PREVIEW_MEM;
++ } else {
++ printk(KERN_ERR "ISP_ERR : Wrong Output\n");
++ return -EINVAL;
++ }
++ omap_writel(pcr, ISPPRV_PCR);
++
++ /* Default Output format configured is YCrYCb (UYVY) */
++ isppreview_config_ycpos(params->pix_fmt);
++
++ /* CFA */
++ if (params->cfa.cfa_table != NULL)
++ isppreview_config_cfa(params->cfa);
++ /* Chroma Suppression */
++ if (params->csup.hypf_en == 1)
++ isppreview_config_chroma_suppression(params->csup);
++ /* Luma */
++ if (params->ytable != NULL)
++ isppreview_config_luma_enhancement(params->ytable);
++ /* Noise Filter */
++ /* Gamma Correction */
++ if (params->gtable.redtable != NULL)
++ isppreview_config_gammacorrn(params->gtable);
++
++ /* Enabling specific features */
++ enable = ((params->features & PREV_CFA) == PREV_CFA) ? 1 : 0;
++ isppreview_enable_cfa(enable);
++
++ enable = ((params->features & PREV_CHROMA_SUPPRESS)
++ == PREV_CHROMA_SUPPRESS) ? 1 : 0;
++ isppreview_enable_chroma_suppression(enable);
++
++ enable = ((params->features & PREV_LUMA_ENHANCE)
++ == PREV_LUMA_ENHANCE) ? 1 : 0;
++ isppreview_enable_luma_enhancement(enable);
++
++ enable = ((params->features & PREV_NOISE_FILTER)
++ == PREV_NOISE_FILTER) ? 1 : 0;
++ if (enable)
++ isppreview_config_noisefilter(params->nf);
++ isppreview_enable_noisefilter(enable);
++
++ enable = ((params->features & PREV_DEFECT_COR)
++ == PREV_DEFECT_COR) ? 1 : 0;
++ if (enable)
++ isppreview_config_dcor(params->dcor);
++ isppreview_enable_dcor(enable);
++
++ enable = ((params->features & PREV_GAMMA_BYPASS)
++ == PREV_GAMMA_BYPASS) ? 1 : 0;
++ isppreview_enable_gammabypass(enable);
++
++ isppreview_config_whitebalance(params->wbal);
++ isppreview_config_blkadj(params->blk_adj);
++ isppreview_config_rgb_blending(params->rgb2rgb);
++ isppreview_config_rgb_to_ycbcr(params->rgb2ycbcr);
++
++ isppreview_config_contrast(params->contrast * ISPPRV_CONTRAST_UNITS);
++ isppreview_config_brightness(params->brightness * ISPPRV_BRIGHT_UNITS);
++
++ yclimit.minC = ISPPRV_YC_MIN;
++ yclimit.maxC = ISPPRV_YC_MAX;
++ yclimit.minY = ISPPRV_YC_MIN;
++ yclimit.maxY = ISPPRV_YC_MAX;
++ isppreview_config_yc_range(yclimit);
++
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_config_datapath);
++
++/*
++ * Configure byte layout of YUV image
++ */
++void isppreview_config_ycpos(enum preview_ycpos_mode mode)
++{
++ u32 pcr = omap_readl(ISPPRV_PCR);
++ pcr &= (~ISPPRV_PCR_YCPOS_CrYCbY);
++ pcr |= (mode << ISPPRV_PCR_YCPOS_SHIFT);
++ omap_writel(pcr, ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_config_ycpos);
++
++/*
++ * Enable/disable/configure averager
++ */
++void
++isppreview_config_averager(u8 average)
++{
++ int reg = 0;
++
++ reg = AVE_ODD_PIXEL_DIST | AVE_EVEN_PIXEL_DIST | average;
++ omap_writel(reg, ISPPRV_AVE);
++}
++EXPORT_SYMBOL(isppreview_config_averager);
++
++/*
++ * Enable/Disable the Inverse A-Law module in Preview
++ * enable: 1- Reverse the ALaw done in CCDC.
++ */
++void isppreview_enable_invalaw(u8 enable)
++{
++ u32 pcr_val = 0;
++ pcr_val = omap_readl(ISPPRV_PCR);
++
++ if (enable)
++ omap_writel(pcr_val | ISPPRV_PCR_WIDTH | ISPPRV_PCR_INVALAW,
++ ISPPRV_PCR);
++ else
++ omap_writel(pcr_val & ~(ISPPRV_PCR_WIDTH | ISPPRV_PCR_INVALAW),
++ ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_enable_invalaw);
++
++/* Enable/Disable of the darkframe subtract for each captured frame.
++ * enable: 1- Acquires memory bandwidth since the pixels in each frame is
++ * subtracted with the pixels in the current frame.
++ */
++void
++isppreview_enable_drkframe(u8 enable)
++{
++ if (enable)
++ omap_writel(omap_readl(ISPPRV_PCR) | ISPPRV_PCR_DRKFEN,
++ ISPPRV_PCR);
++ else
++ omap_writel((omap_readl(ISPPRV_PCR)) & ~ISPPRV_PCR_DRKFEN,
++ ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_enable_drkframe);
++
++/* If dark frame subtract not to be used, then enable this shading compensation
++ * enable: 1- Enables the shading compensation.
++ */
++void
++isppreview_enable_shadcomp(u8 enable)
++{
++
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_SCOMP_EN,
++ ISPPRV_PCR);
++ isppreview_enable_drkframe(1);
++ } else
++ omap_writel((omap_readl(ISPPRV_PCR)) & ~ISPPRV_PCR_SCOMP_EN,
++ ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_enable_shadcomp);
++
++/* Configure the shift value to be used in shading compensation.
++ * scomp_shtval: 3bit value of shift used in shading compensation.
++ */
++void isppreview_config_drkf_shadcomp(u8 scomp_shtval)
++{
++ u32 pcr_val = omap_readl(ISPPRV_PCR);
++
++ pcr_val &= ISPPRV_PCR_SCOMP_SFT_MASK;
++ omap_writel(pcr_val | (scomp_shtval << ISPPRV_PCR_SCOMP_SFT_SHIFT),
++ ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_config_drkf_shadcomp);
++
++/*
++ * Enable/Disable of the Horizontal Median Filter
++ * enable: 1- Enables Horizontal Median Filter
++ */
++void isppreview_enable_hmed(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_HMEDEN,
++ ISPPRV_PCR);
++ ispprev_obj.hmed_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_HMEDEN),
++ ISPPRV_PCR);
++ ispprev_obj.hmed_en = 0;
++ }
++}
++EXPORT_SYMBOL(isppreview_enable_hmed);
++
++/*
++ *Configures the Horizontal Median Filter
++ * prev_hmed: Structure containing the odd and even distance between the
++ * pixels in the image along with the filter threshold.
++ */
++void isppreview_config_hmed(struct ispprev_hmed prev_hmed)
++{
++
++ u32 odddist = 0;
++ u32 evendist = 0;
++
++ if (prev_hmed.odddist == 1)
++ odddist = ~ISPPRV_HMED_ODDDIST;
++ else /* else the odd distance is 2 */
++ odddist = ISPPRV_HMED_ODDDIST;
++
++ if (prev_hmed.evendist == 1)
++ evendist = ~ISPPRV_HMED_EVENDIST;
++ else /* else the even distance is 2 */
++ evendist = ISPPRV_HMED_EVENDIST;
++
++ omap_writel(odddist | evendist
++ | (prev_hmed.thres<<ISPPRV_HMED_THRESHOLD_SHIFT),
++ ISPPRV_HMED);
++
++}
++EXPORT_SYMBOL(isppreview_config_hmed);
++
++/*
++ * Configures the Noise Filter
++ * prev_nf: Structure containing the noisefilter table, strength to be used
++ * for the noise filter and the defect correction enable flag.
++ */
++void
++isppreview_config_noisefilter(struct ispprev_nf prev_nf)
++{
++ int i = 0;
++ omap_writel(prev_nf.spread, ISPPRV_NF);
++ omap_writel(ISPPRV_NF_TABLE_ADDR, ISPPRV_SET_TBL_ADDR);
++ for (i = 0; i < 64; i++)
++ omap_writel(prev_nf.table[i], ISPPRV_SET_TBL_DATA);
++}
++EXPORT_SYMBOL(isppreview_config_noisefilter);
++
++/*
++ * Configures the defect correction
++ * prev_nf: Structure containing the defect correction structure
++ */
++void
++isppreview_config_dcor(struct ispprev_dcor prev_dcor)
++{
++ if (prev_dcor.couplet_mode_en) {
++ omap_writel(prev_dcor.detect_correct[0], ISPPRV_CDC_THR0);
++ omap_writel(prev_dcor.detect_correct[1], ISPPRV_CDC_THR1);
++ omap_writel(prev_dcor.detect_correct[2], ISPPRV_CDC_THR2);
++ omap_writel(prev_dcor.detect_correct[3], ISPPRV_CDC_THR3);
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_DCCOUP,
++ ISPPRV_PCR);
++ } else
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_DCCOUP),
++ ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_config_dcor);
++
++/*
++ * Configures the CFA Interpolation parameters
++ * prev_cfa: Structure containing the CFA interpolation table, CFA format
++ * in the image, vertical and horizontal gradient threshold.
++ */
++void isppreview_config_cfa(struct ispprev_cfa prev_cfa)
++{
++ int i = 0;
++ ispprev_obj.cfafmt = prev_cfa.cfafmt;
++
++ omap_writel((omap_readl(ISPPRV_PCR))
++ | (prev_cfa.cfafmt << ISPPRV_PCR_CFAFMT_SHIFT), ISPPRV_PCR);
++
++ omap_writel((prev_cfa.cfa_gradthrs_vert << ISPPRV_CFA_GRADTH_VER_SHIFT)
++ | (prev_cfa.cfa_gradthrs_horz << ISPPRV_CFA_GRADTH_HOR_SHIFT),
++ ISPPRV_CFA);
++
++ omap_writel(ISPPRV_CFA_TABLE_ADDR, ISPPRV_SET_TBL_ADDR);
++
++ /* Array of 576 */
++ for (i = 0; i < 576; i++)
++ omap_writel(prev_cfa.cfa_table[i], ISPPRV_SET_TBL_DATA);
++}
++EXPORT_SYMBOL(isppreview_config_cfa);
++
++/*
++ * Configures the Gamma Correction table values
++ * gtable: Structure containing the table for red, blue, green gamma table.
++ */
++void
++isppreview_config_gammacorrn(struct ispprev_gtable gtable)
++{
++ int i = 0;
++
++ omap_writel(ISPPRV_REDGAMMA_TABLE_ADDR, ISPPRV_SET_TBL_ADDR);
++ /* Array of 1024 */
++ for (i = 0; i < 1024; i++)
++ omap_writel(gtable.redtable[i], ISPPRV_SET_TBL_DATA);
++
++ omap_writel(ISPPRV_GREENGAMMA_TABLE_ADDR, ISPPRV_SET_TBL_ADDR);
++ /* Array of 1024 */
++ for (i = 0; i < 1024; i++)
++ omap_writel(gtable.greentable[i], ISPPRV_SET_TBL_DATA);
++
++ omap_writel(ISPPRV_BLUEGAMMA_TABLE_ADDR, ISPPRV_SET_TBL_ADDR);
++ /* Array of 1024 */
++ for (i = 0; i < 1024; i++)
++ omap_writel(gtable.bluetable[i], ISPPRV_SET_TBL_DATA);
++}
++EXPORT_SYMBOL(isppreview_config_gammacorrn);
++
++/*
++ * Configures the Luminance Enhancement table values
++ * ytable: Structure containing the table for Luminance Enhancement table.
++ */
++void
++isppreview_config_luma_enhancement(u32 *ytable)
++{
++ int i = 0;
++ omap_writel(ISPPRV_YENH_TABLE_ADDR, ISPPRV_SET_TBL_ADDR);
++ /* Array of 128 */
++ for (i = 0; i < 128; i++)
++ omap_writel(ytable[i], ISPPRV_SET_TBL_DATA);
++}
++EXPORT_SYMBOL(isppreview_config_luma_enhancement);
++
++/*
++ * Configures the Chroma Suppression
++ * csup: Structure containing the threshold value for suppression
++ * and the hypass filter enable flag.
++ */
++void
++isppreview_config_chroma_suppression(struct ispprev_csup csup)
++{
++ omap_writel(csup.gain | (csup.thres << ISPPRV_CSUP_THRES_SHIFT)
++ | (csup.hypf_en << ISPPRV_CSUP_HPYF_SHIFT)
++ , ISPPRV_CSUP);
++}
++EXPORT_SYMBOL(isppreview_config_chroma_suppression);
++
++/*
++ * Enable/Disable the Noise Filter
++ * enable: 1 - Enables the Noise Filter.
++ */
++void
++isppreview_enable_noisefilter(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_NFEN,
++ ISPPRV_PCR);
++ ispprev_obj.nf_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_NFEN),
++ ISPPRV_PCR);
++ ispprev_obj.nf_en = 0;
++ }
++}
++EXPORT_SYMBOL(isppreview_enable_noisefilter);
++
++/*
++ * Enable/Disable the defect correction
++ * enable: 1 - Enables the defect correction.
++ */
++void
++isppreview_enable_dcor(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_DCOREN,
++ ISPPRV_PCR);
++ ispprev_obj.dcor_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_DCOREN),
++ ISPPRV_PCR);
++ ispprev_obj.dcor_en = 0;
++ }
++}
++EXPORT_SYMBOL(isppreview_enable_dcor);
++
++/*
++ * Enable/Disable the CFA Interpolation
++ * enable: 1 - Enables the CFA.
++ */
++void
++isppreview_enable_cfa(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_CFAEN,
++ ISPPRV_PCR);
++ ispprev_obj.cfa_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_CFAEN),
++ ISPPRV_PCR);
++ ispprev_obj.cfa_en = 0;
++ }
++
++}
++EXPORT_SYMBOL(isppreview_enable_cfa);
++
++/*
++ * Enable/Disable the GammaByPass
++ * enable: 1 - Bypasses Gamma - 10bit input is cropped to 8MSB.
++ * 0 - Goes through Gamma Correction. input and output is 10bit.
++ */
++void
++isppreview_enable_gammabypass(u8 enable)
++{
++ if (enable)
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_GAMMA_BYPASS,
++ ISPPRV_PCR);
++ else
++ omap_writel((omap_readl(ISPPRV_PCR)) &
++ (~ISPPRV_PCR_GAMMA_BYPASS),
++ ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_enable_gammabypass);
++
++/*
++ * Enable/Disable the Luminance Enhancement
++ * enable: 1 - Enable the Luminance Enhancement.
++ */
++void
++isppreview_enable_luma_enhancement(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_YNENHEN,
++ ISPPRV_PCR);
++ ispprev_obj.yenh_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_YNENHEN),
++ ISPPRV_PCR);
++ ispprev_obj.yenh_en = 0;
++ }
++}
++EXPORT_SYMBOL(isppreview_enable_luma_enhancement);
++
++/*
++ * Enable/Disable the Chrominance Suppression
++ * enable: 1 - Enable the Chrominance Suppression.
++ */
++void
++isppreview_enable_chroma_suppression(u8 enable)
++{
++ if (enable) {
++ omap_writel((omap_readl(ISPPRV_PCR)) | ISPPRV_PCR_SUPEN,
++ ISPPRV_PCR);
++ ispprev_obj.csup_en = 1;
++ } else {
++ omap_writel((omap_readl(ISPPRV_PCR)) & (~ISPPRV_PCR_SUPEN),
++ ISPPRV_PCR);
++ ispprev_obj.csup_en = 0;
++ }
++}
++EXPORT_SYMBOL(isppreview_enable_chroma_suppression);
++
++/*
++ * Configures the White Balance parameters. Coefficient matrix always with
++ * default values.
++ * prev_wbal: Structure containing the digital gain and white balance
++ * coefficient.
++ */
++void isppreview_config_whitebalance(struct ispprev_wbal prev_wbal)
++{
++
++ omap_writel(prev_wbal.dgain, ISPPRV_WB_DGAIN);
++ omap_writel(prev_wbal.coef0 |
++ prev_wbal.coef1 << ISPPRV_WBGAIN_COEF1_SHIFT |
++ prev_wbal.coef2 << ISPPRV_WBGAIN_COEF2_SHIFT |
++ prev_wbal.coef3 << ISPPRV_WBGAIN_COEF3_SHIFT, ISPPRV_WBGAIN);
++
++ /* Keeping the HW default value as such */
++ omap_writel(ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N0_0_SHIFT
++ | ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N0_1_SHIFT
++ | ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N0_2_SHIFT
++ | ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N0_3_SHIFT
++ | ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N1_0_SHIFT
++ | ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N1_1_SHIFT
++ | ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N1_2_SHIFT
++ | ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N1_3_SHIFT
++ | ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N2_0_SHIFT
++ | ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N2_1_SHIFT
++ | ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N2_2_SHIFT
++ | ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N2_3_SHIFT
++ | ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N3_0_SHIFT
++ | ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N3_1_SHIFT
++ | ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N3_2_SHIFT
++ | ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N3_3_SHIFT,
++ ISPPRV_WBSEL);
++
++}
++EXPORT_SYMBOL(isppreview_config_whitebalance);
++
++/*
++ * Configures the White Balance parameters. Coefficient matrix can be changed.
++ * prev_wbal: Structure containing the digital gain and white balance
++ * coefficient.
++ */
++void isppreview_config_whitebalance2(struct prev_white_balance prev_wbal)
++{
++ omap_writel(prev_wbal.wb_dgain, ISPPRV_WB_DGAIN);
++ omap_writel(prev_wbal.wb_gain[0]
++ | prev_wbal.wb_gain[1] << ISPPRV_WBGAIN_COEF1_SHIFT
++ | prev_wbal.wb_gain[2] << ISPPRV_WBGAIN_COEF2_SHIFT
++ | prev_wbal.wb_gain[3] << ISPPRV_WBGAIN_COEF3_SHIFT,
++ ISPPRV_WBGAIN);
++
++ /* Changing the HW default value */
++ omap_writel(prev_wbal.wb_coefmatrix[0][0] << ISPPRV_WBSEL_N0_0_SHIFT
++ | prev_wbal.wb_coefmatrix[0][1] << ISPPRV_WBSEL_N0_1_SHIFT
++ | prev_wbal.wb_coefmatrix[0][2] << ISPPRV_WBSEL_N0_2_SHIFT
++ | prev_wbal.wb_coefmatrix[0][3] << ISPPRV_WBSEL_N0_3_SHIFT
++ | prev_wbal.wb_coefmatrix[1][0] << ISPPRV_WBSEL_N1_0_SHIFT
++ | prev_wbal.wb_coefmatrix[1][1] << ISPPRV_WBSEL_N1_1_SHIFT
++ | prev_wbal.wb_coefmatrix[1][2] << ISPPRV_WBSEL_N1_2_SHIFT
++ | prev_wbal.wb_coefmatrix[1][3] << ISPPRV_WBSEL_N1_3_SHIFT
++ | prev_wbal.wb_coefmatrix[2][0] << ISPPRV_WBSEL_N2_0_SHIFT
++ | prev_wbal.wb_coefmatrix[2][1] << ISPPRV_WBSEL_N2_1_SHIFT
++ | prev_wbal.wb_coefmatrix[2][2] << ISPPRV_WBSEL_N2_2_SHIFT
++ | prev_wbal.wb_coefmatrix[2][3] << ISPPRV_WBSEL_N2_3_SHIFT
++ | prev_wbal.wb_coefmatrix[3][0] << ISPPRV_WBSEL_N3_0_SHIFT
++ | prev_wbal.wb_coefmatrix[3][1] << ISPPRV_WBSEL_N3_1_SHIFT
++ | prev_wbal.wb_coefmatrix[3][2] << ISPPRV_WBSEL_N3_2_SHIFT
++ | prev_wbal.wb_coefmatrix[3][3] << ISPPRV_WBSEL_N3_3_SHIFT,
++ ISPPRV_WBSEL);
++}
++EXPORT_SYMBOL(isppreview_config_whitebalance2);
++
++/*
++ * Configures the Black Adjustment parameters
++ * prev_blkadj: Structure containing the black adjustment towards red,
++ * green, blue.
++ */
++void
++isppreview_config_blkadj(struct ispprev_blkadj prev_blkadj)
++{
++ omap_writel(prev_blkadj.blue
++ | (prev_blkadj.green << ISPPRV_BLKADJOFF_G_SHIFT)
++ | (prev_blkadj.red << ISPPRV_BLKADJOFF_R_SHIFT)
++ , ISPPRV_BLKADJOFF);
++}
++EXPORT_SYMBOL(isppreview_config_blkadj);
++
++/*
++ * Configures the RGB-RGB Blending matrix
++ * rgb2rgb: Structure containing the rgb to rgb blending matrix and the
++ * rgb offset.
++ */
++void
++isppreview_config_rgb_blending(struct ispprev_rgbtorgb rgb2rgb)
++{
++ omap_writel((rgb2rgb.matrix[0][0] << ISPPRV_RGB_MAT1_MTX_RR_SHIFT)
++ | (rgb2rgb.matrix[0][1] << ISPPRV_RGB_MAT1_MTX_GR_SHIFT),
++ ISPPRV_RGB_MAT1);
++
++ omap_writel((rgb2rgb.matrix[0][2] << ISPPRV_RGB_MAT2_MTX_BR_SHIFT)
++ | (rgb2rgb.matrix[1][0] << ISPPRV_RGB_MAT2_MTX_RG_SHIFT),
++ ISPPRV_RGB_MAT2);
++
++ omap_writel((rgb2rgb.matrix[1][1] << ISPPRV_RGB_MAT3_MTX_GG_SHIFT)
++ | (rgb2rgb.matrix[1][2] << ISPPRV_RGB_MAT3_MTX_BG_SHIFT),
++ ISPPRV_RGB_MAT3);
++
++ omap_writel((rgb2rgb.matrix[2][0] << ISPPRV_RGB_MAT4_MTX_RB_SHIFT)
++ | (rgb2rgb.matrix[2][1] << ISPPRV_RGB_MAT4_MTX_GB_SHIFT),
++ ISPPRV_RGB_MAT4);
++
++ omap_writel((rgb2rgb.matrix[2][2] << ISPPRV_RGB_MAT5_MTX_BB_SHIFT),
++ ISPPRV_RGB_MAT5);
++
++ omap_writel((rgb2rgb.offset[0] << ISPPRV_RGB_OFF1_MTX_OFFG_SHIFT)
++ | (rgb2rgb.offset[1] << ISPPRV_RGB_OFF1_MTX_OFFR_SHIFT),
++ ISPPRV_RGB_OFF1);
++
++ omap_writel(rgb2rgb.offset[2] << ISPPRV_RGB_OFF2_MTX_OFFB_SHIFT,
++ ISPPRV_RGB_OFF2);
++
++}
++EXPORT_SYMBOL(isppreview_config_rgb_blending);
++
++/*
++ * Configures the RGB-YCbYCr conversion matrix
++ * prev_csc: Structure containing the RGB to YCbYCr matrix and the
++ * YCbCr offset.
++ */
++void
++isppreview_config_rgb_to_ycbcr(struct ispprev_csc prev_csc)
++{
++ omap_writel(prev_csc.matrix[0][0] << ISPPRV_CSC0_RY_SHIFT
++ | prev_csc.matrix[0][1] << ISPPRV_CSC0_GY_SHIFT
++ | prev_csc.matrix[0][2] << ISPPRV_CSC0_BY_SHIFT,
++ ISPPRV_CSC0);
++
++ omap_writel(prev_csc.matrix[1][0] << ISPPRV_CSC1_RCB_SHIFT
++ | prev_csc.matrix[1][1] << ISPPRV_CSC1_GCB_SHIFT
++ | prev_csc.matrix[1][2] << ISPPRV_CSC1_BCB_SHIFT,
++ ISPPRV_CSC1);
++
++ omap_writel(prev_csc.matrix[2][0] << ISPPRV_CSC2_RCR_SHIFT
++ | prev_csc.matrix[2][1] << ISPPRV_CSC2_GCR_SHIFT
++ | prev_csc.matrix[2][2] << ISPPRV_CSC2_BCR_SHIFT,
++ ISPPRV_CSC2);
++
++ omap_writel(prev_csc.offset[0] << ISPPRV_CSC_OFFSET_CR_SHIFT
++ | prev_csc.offset[1] << ISPPRV_CSC_OFFSET_CB_SHIFT
++ | prev_csc.offset[2] << ISPPRV_CSC_OFFSET_Y_SHIFT,
++ ISPPRV_CSC_OFFSET);
++}
++EXPORT_SYMBOL(isppreview_config_rgb_to_ycbcr);
++
++/*
++ * Query the contrast.
++ * contrast: Pointer to hold the current programmed contrast value.
++ */
++void
++isppreview_query_contrast(u8 *contrast)
++{
++ u32 brt_cnt_val = 0;
++ brt_cnt_val = omap_readl(ISPPRV_CNT_BRT);
++ *contrast = (brt_cnt_val >> ISPPRV_CNT_BRT_CNT_SHIFT) & 0xFF;
++ DPRINTK_ISPPREV(" Current brt cnt value in hw is %x\n", brt_cnt_val);
++}
++EXPORT_SYMBOL(isppreview_query_contrast);
++
++/*
++ * Updates the contrast.
++ * Value should be programmed before enabling the module.
++ */
++void
++isppreview_update_contrast(u8 *contrast)
++{
++ ispprev_obj.contrast = *contrast;
++}
++EXPORT_SYMBOL(isppreview_update_contrast);
++
++/*
++ * Configures the Contrast.
++ * contrast: 8bitvalue in U8Q4 format.
++ * Value should be programmed before enabling the module.
++ */
++void
++isppreview_config_contrast(u8 contrast)
++{
++ u32 brt_cnt_val = 0;
++
++ brt_cnt_val = omap_readl(ISPPRV_CNT_BRT);
++ brt_cnt_val &= ~(0xFF << ISPPRV_CNT_BRT_CNT_SHIFT);
++ contrast &= 0xFF;
++ omap_writel((brt_cnt_val)|(contrast << ISPPRV_CNT_BRT_CNT_SHIFT)
++ , ISPPRV_CNT_BRT);
++}
++EXPORT_SYMBOL(isppreview_config_contrast);
++
++/*
++ * Gets the range contrast value
++ * min_contrast: Pointer to hold the minimum Contrast value
++ * max_contrast: Pointer to hold the maximum Contrast value
++ */
++void
++isppreview_get_contrast_range(u8 *min_contrast, u8 *max_contrast)
++{
++ *min_contrast = ISPPRV_CONTRAST_MIN;
++ *max_contrast = ISPPRV_CONTRAST_MAX;
++}
++EXPORT_SYMBOL(isppreview_get_contrast_range);
++
++/*
++ * Updates the brightness in the preview module.
++ */
++void
++isppreview_update_brightness(u8 *brightness)
++{
++ ispprev_obj.brightness = *brightness;
++}
++EXPORT_SYMBOL(isppreview_update_brightness);
++
++/*
++ * Configures the brightness.
++ * contrast: 8bitvalue in U8Q0 format.
++ */
++void
++isppreview_config_brightness(u8 brightness)
++{
++ u32 brt_cnt_val = 0;
++ DPRINTK_ISPPREV("\tConfiguring brightness in ISP: %d\n", brightness);
++ brt_cnt_val = omap_readl(ISPPRV_CNT_BRT);
++ brt_cnt_val &= ~(0xFF << ISPPRV_CNT_BRT_BRT_SHIFT);
++ brightness &= 0xFF;
++ omap_writel((brt_cnt_val)|(brightness << ISPPRV_CNT_BRT_BRT_SHIFT)
++ , ISPPRV_CNT_BRT);
++}
++EXPORT_SYMBOL(isppreview_config_brightness);
++
++/*
++ * Query the brightness.
++ * brightness: Pointer to hold the current programmed brightness value.
++ */
++void
++isppreview_query_brightness(u8 *brightness)
++{
++
++ *brightness = omap_readl(ISPPRV_CNT_BRT);
++}
++EXPORT_SYMBOL(isppreview_query_brightness);
++
++/*
++ * Gets the range brightness value
++ * min_brightness: Pointer to hold the minimum brightness value
++ * max_brightness: Pointer to hold the maximum brightness value
++ */
++void
++isppreview_get_brightness_range(u8 *min_brightness, u8 *max_brightness)
++{
++ *min_brightness = ISPPRV_BRIGHT_MIN;
++ *max_brightness = ISPPRV_BRIGHT_MAX;
++}
++EXPORT_SYMBOL(isppreview_get_brightness_range);
++
++/**
++ * @brief isppreview_set_color -- sets the color effect.
++ * @param mode -- indicates the required color effect.
++ */
++void isppreview_set_color(u8 *mode)
++{
++ ispprev_obj.color = *mode;
++ update_color_matrix = 1;
++}
++EXPORT_SYMBOL(isppreview_set_color);
++
++/**
++ * @brief isppreview_get_color -- gets the current color effect.
++ * @param mode -- indicates the current color effect.
++ */
++void isppreview_get_color(u8 *mode)
++{
++ *mode = ispprev_obj.color;
++}
++EXPORT_SYMBOL(isppreview_get_color);
++
++/*
++ * Configures the max and minim Y and C values.
++ * yclimit: Structure containing the min,max Y,C values.
++ */
++void
++isppreview_config_yc_range(struct ispprev_yclimit yclimit)
++{
++ omap_writel(((yclimit.maxC << ISPPRV_SETUP_YC_MAXC_SHIFT)
++ | (yclimit.maxY << ISPPRV_SETUP_YC_MAXY_SHIFT)
++ | (yclimit.minC << ISPPRV_SETUP_YC_MINC_SHIFT)
++ | (yclimit.minY << ISPPRV_SETUP_YC_MINY_SHIFT))
++ , ISPPRV_SETUP_YC);
++}
++EXPORT_SYMBOL(isppreview_config_yc_range);
++
++/*
++ * Calculates the number of pixels cropped in the submodules that are enabled,
++ * Fills up the output widht height variables in the isp_prev structure .
++ * input_w: input width for the preview in number of pixels per line
++ * input_h: input height for the preview in number of lines
++ * output_w: output width from the preview in number of pixels per line
++ * output_h: output height for the preview in number of lines
++*/
++int
++isppreview_try_size(u32 input_w, u32 input_h, u32 *output_w,
++ u32 *output_h)
++{
++ u32 prevout_w = input_w;
++ u32 prevout_h = input_h;
++ u32 div = 0;
++ int max_out;
++
++ ispprev_obj.previn_w = input_w;
++ ispprev_obj.previn_h = input_h;
++
++ /*Checks if input size is more than the preview output width limit,
++ *else suggests for downsampling in the averager.
++ */
++ if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0))
++ max_out = ISPPRV_MAXOUTPUT_WIDTH;
++ else
++ max_out = ISPPRV_MAXOUTPUT_WIDTH_ES2;
++
++ ispprev_obj.fmtavg = 0;
++
++ if (input_w > max_out) {
++ div = (input_w/max_out);
++ if (div >= 2 && div < 4) {
++ ispprev_obj.fmtavg = 1;
++ prevout_w /= 2;
++ } else if (div >= 4 && div < 8) {
++ ispprev_obj.fmtavg = 2;
++ prevout_w /= 4;
++ } else if (div >= 8) {
++ ispprev_obj.fmtavg = 3;
++ prevout_w /= 8;
++ }
++ }
++
++ if (ispprev_obj.hmed_en)
++ prevout_w -= 4;
++ if (ispprev_obj.nf_en) {
++ prevout_w -= 4;
++ prevout_h -= 4;
++ }
++ if (ispprev_obj.cfa_en) {
++ switch (ispprev_obj.cfafmt) {
++ case CFAFMT_BAYER:
++ case CFAFMT_SONYVGA:
++ prevout_w -= 4;
++ prevout_h -= 4;
++ break;
++ case CFAFMT_RGBFOVEON:
++ case CFAFMT_RRGGBBFOVEON:
++ case CFAFMT_DNSPL:
++ case CFAFMT_HONEYCOMB:
++ prevout_h -= 2;
++ break;
++ };
++ }
++ if ((ispprev_obj.yenh_en) || (ispprev_obj.csup_en))
++ prevout_w -= 2;
++
++ /* FMTSPH is always set to be 4 */
++ prevout_w -= 4;
++ /* Reserving for now, another 2 extra pixels from Preview to Resizer
++ prevout_w -=2;*/
++
++ /*
++ * Make sure that preview always outputs even number of pixels
++ */
++ if (prevout_w % 2)
++ prevout_w -= 1;
++
++ if (ispprev_obj.prev_outfmt == PREVIEW_MEM) {
++ if (((prevout_w*2)&ISP_32B_BOUNDARY_OFFSET) != (prevout_w*2))
++ prevout_w = ((prevout_w*2)&ISP_32B_BOUNDARY_OFFSET)/2;
++ }
++ ispprev_obj.prevout_w = *output_w = prevout_w;
++ ispprev_obj.prevout_h = *output_h = prevout_h;
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_try_size);
++
++/*
++ * Configures the appropriate values stored in the isp_prev structure to
++ * HORZ/VERT_INFO.
++ * Configures PRV_AVE if needed for downsampling as calculated in trysize.
++ * input_w: input width for the preview in number of pixels per line
++ * input_h: input height for the preview in number of lines
++ * output_w: output width from the preview in number of pixels per line
++ * output_h: output height for the preview in number of lines
++ */
++int
++isppreview_config_size(u32 input_w, u32 input_h, u32 output_w,
++ u32 output_h)
++{
++ u32 prevsdroff;
++
++ /* Checks if the parameters match the values calculated in the
++ * isppreview_try_size(). If not return error.
++ */
++ if ((output_w != ispprev_obj.prevout_w)
++ || (output_h != ispprev_obj.prevout_h)) {
++ printk(KERN_ERR "ISP_ERR : isppreview_try_size should "
++ "be called before config size\n");
++ return -EINVAL;
++ }
++
++ omap_writel((4 << ISPPRV_HORZ_INFO_SPH_SHIFT) |
++ (ispprev_obj.previn_w - 1),
++ ISPPRV_HORZ_INFO);
++ omap_writel((0 << ISPPRV_VERT_INFO_SLV_SHIFT) |
++ (ispprev_obj.previn_h - 1),
++ ISPPRV_VERT_INFO);
++
++ if (ispprev_obj.cfafmt == CFAFMT_BAYER)
++ omap_writel(ISPPRV_AVE_EVENDIST_2 << ISPPRV_AVE_EVENDIST_SHIFT
++ | ISPPRV_AVE_ODDDIST_2 << ISPPRV_AVE_ODDDIST_SHIFT
++ | ispprev_obj.fmtavg,
++ ISPPRV_AVE);
++
++ /* When written to memory output should be of 32byte boundary */
++ if (ispprev_obj.prev_outfmt == PREVIEW_MEM) {
++ prevsdroff = ispprev_obj.prevout_w*2;
++ if ((prevsdroff & ISP_32B_BOUNDARY_OFFSET) != prevsdroff) {
++ DPRINTK_ISPPREV("ISP_WARN : Preview output buffer line"
++ " size is truncated to 32byte boundary\n");
++ prevsdroff &= ISP_32B_BOUNDARY_BUF ;
++ }
++ isppreview_config_outlineoffset(prevsdroff);
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_config_size);
++
++/*
++ * Configures the Read address line offset.
++ * offset: Line Offset for the input image.
++ */
++int
++isppreview_config_inlineoffset(u32 offset)
++{
++ if ((offset & ISP_32B_BOUNDARY_OFFSET) == offset)
++ omap_writel(offset&0xFFFF, ISPPRV_RADR_OFFSET);
++ else{
++ printk(KERN_ERR "ISP_ERR : Offset should be in 32 byte "
++ "boundary\n");
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_config_inlineoffset);
++
++/*
++ * Configures the memory address from which the input frame is to be read.
++ * addr: 32bit memory address aligned on 32byte boundary.
++ */
++int isppreview_set_inaddr(u32 addr)
++{
++ if ((addr & ISP_32B_BOUNDARY_BUF) == addr)
++ omap_writel(addr, ISPPRV_RSDR_ADDR);
++ else{
++ printk(KERN_ERR "ISP_ERR : Address should be in 32 byte "
++ "boundary\n");
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_set_inaddr);
++
++/*
++ * Configures the Write address line offset.
++ * offset: Line Offset for the preview output.
++ */
++int isppreview_config_outlineoffset(u32 offset)
++{
++ if ((offset & ISP_32B_BOUNDARY_OFFSET) == offset) {
++ omap_writel(offset&0xFFFF, ISPPRV_WADD_OFFSET);
++ }
++ else{
++ printk(KERN_ERR "ISP_ERR : Offset should be in 32 byte "
++ "boundary\n");
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_config_outlineoffset);
++
++/*
++ * Configures the memory address to which the output frame is written.
++ * addr: 32bit memory address aligned on 32byte boundary.
++ */
++int
++isppreview_set_outaddr(u32 addr)
++{
++ if ((addr & ISP_32B_BOUNDARY_BUF) == addr) {
++ omap_writel(addr, ISPPRV_WSDR_ADDR);
++ } else {
++ printk(KERN_ERR "ISP_ERR : Address should be in 32 byte "
++ "boundary\n");
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_set_outaddr);
++
++/*
++ * Configures the Dark frame address line offset.
++ * offset: Line Offset for the Darkframe.
++ */
++int
++isppreview_config_darklineoffset(u32 offset)
++{
++ if ((offset & ISP_32B_BOUNDARY_OFFSET) == offset)
++ omap_writel(offset&0xFFFF, ISPPRV_DRKF_OFFSET);
++ else{
++ printk(KERN_ERR "ISP_ERR : Offset should be in 32 byte "
++ "boundary\n");
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_config_darklineoffset);
++
++/*
++ * Configures the memory address where the Dark frame should be stored.
++ * addr: 32bit memory address aligned on 32 bit boundary.
++ */
++int
++isppreview_set_darkaddr(u32 addr)
++{
++ if ((addr & ISP_32B_BOUNDARY_BUF) == addr)
++ omap_writel(addr, ISPPRV_DSDR_ADDR);
++ else{
++ printk(KERN_ERR "ISP_ERR : Address should be in 32 byte "
++ "boundary\n");
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(isppreview_set_darkaddr);
++
++/*
++ *
++ * Enables the Preview module.
++ * Client should configure all the sub modules in Preview before this.
++ * enable: 1- Enables the preview module.
++ */
++void
++isppreview_enable(u8 enable)
++{
++
++ if (enable)
++ omap_writel((omap_readl(ISPPRV_PCR))
++ | ISPPRV_PCR_EN, ISPPRV_PCR);
++ else
++ omap_writel((omap_readl(ISPPRV_PCR))
++ & ~ISPPRV_PCR_EN, ISPPRV_PCR);
++}
++EXPORT_SYMBOL(isppreview_enable);
++
++int isppreview_busy(void)
++{
++ return (omap_readl(ISPPRV_PCR) & ISPPRV_PCR_BUSY);
++}
++EXPORT_SYMBOL(isppreview_busy);
++
++struct prev_params *isppreview_get_config(void)
++{
++ return prev_config_params;
++}
++EXPORT_SYMBOL(isppreview_get_config);
++
++/*
++ * Saves the values of the preview module registers.
++ */
++void isppreview_save_context(void)
++{
++ DPRINTK_ISPPREV(" Saving context\n");
++ isp_save_context(ispprev_reg_list);
++}
++EXPORT_SYMBOL(isppreview_save_context);
++
++/*
++ * Restores the values of the preview module registers.
++ */
++void isppreview_restore_context(void)
++{
++ DPRINTK_ISPPREV(" Restoring context\n");
++ isp_restore_context(ispprev_reg_list);
++}
++EXPORT_SYMBOL(isppreview_restore_context);
++
++/*
++ * Prints the values of the Preview Module registers
++ * Also prints other debug information stored in the preview moduel
++ */
++void isppreview_print_status(void)
++{
++#ifdef OMAP_ISPPREV_DEBUG
++ printk("Module in use =%d\n", ispprev_obj.prev_inuse);
++ DPRINTK_ISPPREV("Preview Input format =%d, Output Format =%d\n",
++ ispprev_obj.prev_inpfmt,
++ ispprev_obj.prev_outfmt);
++ DPRINTK_ISPPREV("Accepted Preview Input (width = %d,Height = %d)\n",
++ ispprev_obj.previn_w,
++ ispprev_obj.previn_h);
++ DPRINTK_ISPPREV("Accepted Preview Output (width = %d,Height = %d)\n",
++ ispprev_obj.prevout_w,
++ ispprev_obj.prevout_h);
++ DPRINTK_ISPPREV("###ISP_CTRL in preview =0x%x\n",
++ omap_readl(ISP_CTRL));
++ DPRINTK_ISPPREV("###ISP_IRQ0ENABLE in preview =0x%x\n",
++ omap_readl(ISP_IRQ0ENABLE));
++ DPRINTK_ISPPREV("###ISP_IRQ0STATUS in preview =0x%x\n",
++ omap_readl(ISP_IRQ0STATUS));
++ DPRINTK_ISPPREV("###PRV PCR =0x%x\n", omap_readl(ISPPRV_PCR));
++ DPRINTK_ISPPREV("###PRV HORZ_INFO =0x%x\n",
++ omap_readl(ISPPRV_HORZ_INFO));
++ DPRINTK_ISPPREV("###PRV VERT_INFO =0x%x\n",
++ omap_readl(ISPPRV_VERT_INFO));
++ DPRINTK_ISPPREV("###PRV WSDR_ADDR =0x%x\n",
++ omap_readl(ISPPRV_WSDR_ADDR));
++ DPRINTK_ISPPREV("###PRV WADD_OFFSET =0x%x\n",
++ omap_readl(ISPPRV_WADD_OFFSET));
++ DPRINTK_ISPPREV("###PRV AVE =0x%x\n", omap_readl(ISPPRV_AVE));
++ DPRINTK_ISPPREV("###PRV HMED =0x%x\n", omap_readl(ISPPRV_HMED));
++ DPRINTK_ISPPREV("###PRV NF =0x%x\n", omap_readl(ISPPRV_NF));
++ DPRINTK_ISPPREV("###PRV WB_DGAIN =0x%x\n",
++ omap_readl(ISPPRV_WB_DGAIN));
++ DPRINTK_ISPPREV("###PRV WBGAIN =0x%x\n", omap_readl(ISPPRV_WBGAIN));
++ DPRINTK_ISPPREV("###PRV WBSEL =0x%x\n", omap_readl(ISPPRV_WBSEL));
++ DPRINTK_ISPPREV("###PRV CFA =0x%x\n", omap_readl(ISPPRV_CFA));
++ DPRINTK_ISPPREV("###PRV BLKADJOFF =0x%x\n",
++ omap_readl(ISPPRV_BLKADJOFF));
++ DPRINTK_ISPPREV("###PRV RGB_MAT1 =0x%x\n",
++ omap_readl(ISPPRV_RGB_MAT1));
++ DPRINTK_ISPPREV("###PRV RGB_MAT2 =0x%x\n",
++ omap_readl(ISPPRV_RGB_MAT2));
++ DPRINTK_ISPPREV("###PRV RGB_MAT3 =0x%x\n",
++ omap_readl(ISPPRV_RGB_MAT3));
++ DPRINTK_ISPPREV("###PRV RGB_MAT4 =0x%x\n",
++ omap_readl(ISPPRV_RGB_MAT4));
++ DPRINTK_ISPPREV("###PRV RGB_MAT5 =0x%x\n",
++ omap_readl(ISPPRV_RGB_MAT5));
++ DPRINTK_ISPPREV("###PRV RGB_OFF1 =0x%x\n",
++ omap_readl(ISPPRV_RGB_OFF1));
++ DPRINTK_ISPPREV("###PRV RGB_OFF2 =0x%x\n",
++ omap_readl(ISPPRV_RGB_OFF2));
++ DPRINTK_ISPPREV("###PRV CSC0 =0x%x\n", omap_readl(ISPPRV_CSC0));
++ DPRINTK_ISPPREV("###PRV CSC1 =0x%x\n", omap_readl(ISPPRV_CSC1));
++ DPRINTK_ISPPREV("###PRV CSC2 =0x%x\n", omap_readl(ISPPRV_CSC2));
++ DPRINTK_ISPPREV("###PRV CSC_OFFSET =0x%x\n",
++ omap_readl(ISPPRV_CSC_OFFSET));
++ DPRINTK_ISPPREV("###PRV CNT_BRT =0x%x\n", omap_readl(ISPPRV_CNT_BRT));
++ DPRINTK_ISPPREV("###PRV CSUP =0x%x\n", omap_readl(ISPPRV_CSUP));
++ DPRINTK_ISPPREV("###PRV SETUP_YC =0x%x\n",
++ omap_readl(ISPPRV_SETUP_YC));
++#endif
++}
++EXPORT_SYMBOL(isppreview_print_status);
++
++/*
++ * Module Initialisation.
++ */
++static int __init
++isp_preview_init(void)
++{
++ struct prev_params *params;
++ int i = 0;
++
++ prev_config_params = kmalloc(sizeof(*prev_config_params), GFP_KERNEL);
++ if (prev_config_params == NULL) {
++ printk(KERN_ERR "Can't get memory for isp_preview params!\n");
++ return -ENOMEM;
++ }
++ params = prev_config_params;
++
++ ispprev_obj.prev_inuse = 0;
++ mutex_init(&ispprev_obj.ispprev_mutex);
++
++ if (is_sil_rev_equal_to(OMAP3430_REV_ES2_0)) {
++ flr_wbal_coef0 = 0x23;
++ flr_wbal_coef1 = 0x20;
++ flr_wbal_coef2 = 0x20;
++ flr_wbal_coef3 = 0x39;
++ }
++
++ /* Init values */
++ ispprev_obj.color = PREV_DEFAULT_COLOR;
++ params->contrast = ispprev_obj.contrast = ISPPRV_CONTRAST_DEF;
++ params->brightness = ispprev_obj.brightness = ISPPRV_BRIGHT_DEF;
++ params->average = NO_AVE;
++ params->lens_shading_shift = 0;
++ params->pix_fmt = YCPOS_YCrYCb;
++ /* Color Filter Array */
++ params->cfa.cfafmt = CFAFMT_BAYER;
++ params->cfa.cfa_table = cfa_coef_table;
++ params->cfa.cfa_gradthrs_horz = flr_cfa_gradthrs_horz;
++ params->cfa.cfa_gradthrs_vert = flr_cfa_gradthrs_vert;
++ /* Chroma Suppression */
++ params->csup.gain = flr_csup_gain;
++ params->csup.thres = flr_csup_thres;
++ params->csup.hypf_en = 0;
++ /* Lumma Enhancement Table */
++ params->ytable = luma_enhance_table;
++ /* Noise Filter */
++ params->nf.spread = flr_nf_strgth;
++ params->nf.table = noise_filter_table;
++ /* defect correction */
++ params->dcor.couplet_mode_en = 1;
++ for (i = 0; i < 4; i++)
++ params->dcor.detect_correct[i] = 0xE;
++ /* Gamma Correction */
++ params->gtable.bluetable = bluegamma_table;
++ params->gtable.greentable = greengamma_table;
++ params->gtable.redtable = redgamma_table;
++ /* White Balance */
++ params->wbal.dgain = flr_wbal_dgain;
++ params->wbal.coef0 = flr_wbal_coef0;
++ params->wbal.coef1 = flr_wbal_coef1;
++ params->wbal.coef2 = flr_wbal_coef2;
++ params->wbal.coef3 = flr_wbal_coef3;
++ /* Black Adjustment */
++ params->blk_adj.red = flr_blkadj_red;
++ params->blk_adj.green = flr_blkadj_green;
++ params->blk_adj.blue = flr_blkadj_blue;
++ /* RGB to RGB Blending */
++ params->rgb2rgb = flr_rgb2rgb;
++ /* RGB to YCbCr Blending */
++ params->rgb2ycbcr = flr_prev_csc[ispprev_obj.color];
++
++ /* Features enabled by default */
++ params->features = PREV_CFA | PREV_CHROMA_SUPPRESS | PREV_LUMA_ENHANCE
++ | PREV_DEFECT_COR | PREV_NOISE_FILTER;
++ params->features &= ~(PREV_AVERAGER | PREV_INVERSE_ALAW |
++ PREV_HORZ_MEDIAN_FILTER |
++ PREV_GAMMA_BYPASS |
++ PREV_DARK_FRAME_SUBTRACT |
++ PREV_LENS_SHADING |
++ PREV_DARK_FRAME_CAPTURE);
++ return 0;
++}
++
++static void
++isp_preview_cleanup(void)
++{
++ kfree(prev_config_params);
++ prev_config_params = NULL;
++}
++
++module_init(isp_preview_init);
++module_exit(isp_preview_cleanup);
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("ISP Preview Library");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/isppreview.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/isppreview.h 2009-02-12 16:32:50.000000000 -0600
+@@ -0,0 +1,525 @@
++/*
++ * drivers/media/video/isp/isppreview.h
++ *
++ * Driver include file for Preview module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_PREVIEW_H
++#define OMAP_ISP_PREVIEW_H
++
++/* Isp query control structure */
++
++#define ISPPRV_BRIGHT_STEP 0x1
++#define ISPPRV_BRIGHT_DEF 0x1
++#define ISPPRV_BRIGHT_LOW 0x0
++#define ISPPRV_BRIGHT_HIGH 0xF
++#define ISPPRV_BRIGHT_UNITS 0x7
++
++#define ISPPRV_CONTRAST_STEP 0x1
++#define ISPPRV_CONTRAST_DEF 0x2
++#define ISPPRV_CONTRAST_LOW 0x0
++#define ISPPRV_CONTRAST_HIGH 0xF
++#define ISPPRV_CONTRAST_UNITS 0x5
++
++#define NO_AVE 0x0
++#define AVE_2_PIX 0x1
++#define AVE_4_PIX 0x2
++#define AVE_8_PIX 0x3
++#define AVE_ODD_PIXEL_DIST (1 << 4) /* For Bayer Sensors */
++#define AVE_EVEN_PIXEL_DIST (1 << 2)
++
++#define WB_GAIN_MAX 4
++#define RGB_MAX 3
++
++/* Features list */
++#define PREV_AVERAGER (1 << 0)
++#define PREV_INVERSE_ALAW (1 << 1)
++#define PREV_HORZ_MEDIAN_FILTER (1 << 2)
++#define PREV_NOISE_FILTER (1 << 3)
++#define PREV_CFA (1 << 4)
++#define PREV_GAMMA_BYPASS (1 << 5)
++#define PREV_LUMA_ENHANCE (1 << 6)
++#define PREV_CHROMA_SUPPRESS (1 << 7)
++#define PREV_DARK_FRAME_SUBTRACT (1 << 8)
++#define PREV_LENS_SHADING (1 << 9)
++#define PREV_DARK_FRAME_CAPTURE (1 << 10)
++#define PREV_DEFECT_COR (1 << 11)
++
++/* Abstraction layer preview configurations */
++#define ISP_ABS_PREV_LUMAENH (1 << 1)
++#define ISP_ABS_PREV_INVALAW (1 << 2)
++#define ISP_ABS_PREV_HRZ_MED (1 << 5)
++#define ISP_ABS_PREV_CFA (1 << 6)
++#define ISP_ABS_PREV_CHROMA_SUPP (1 << 7)
++#define ISP_ABS_PREV_WB (1 << 8)
++#define ISP_ABS_PREV_BLKADJ (1 << 9)
++#define ISP_ABS_PREV_RGB2RGB (1 << 10)
++#define ISP_ABS_PREV_COLOR_CONV (1 << 11)
++#define ISP_ABS_PREV_YC_LIMIT (1 << 12)
++#define ISP_ABS_PREV_DEFECT_COR (1 << 13)
++#define ISP_ABS_PREV_GAMMABYPASS (1 << 14)
++
++/* Abstraction layer Table Update Flags */
++#define ISP_ABS_TBL_NF (1 << 1)
++#define ISP_ABS_TBL_REDGAMMA (1 << 2)
++#define ISP_ABS_TBL_GREENGAMMA (1 << 3)
++#define ISP_ABS_TBL_BLUEGAMMA (1 << 4)
++
++#define ISP_NF_TABLE_SIZE 64
++#define ISP_GAMMA_TABLE_SIZE 1024
++
++/*
++ *Enumeration Constants for input and output format
++ */
++enum preview_input {
++ PRV_RAW_CCDC,
++ PRV_RAW_MEM,
++ PRV_RGBBAYERCFA,
++ PRV_COMPCFA,
++ PRV_CCDC_DRKF,
++ PRV_OTHERS
++};
++
++enum preview_output {
++ PREVIEW_RSZ,
++ PREVIEW_MEM
++};
++/*
++ * Configure byte layout of YUV image
++ */
++enum preview_ycpos_mode {
++ YCPOS_YCrYCb = 0,
++ YCPOS_YCbYCr = 1,
++ YCPOS_CbYCrY = 2,
++ YCPOS_CrYCbY = 3
++};
++
++enum preview_color_effect {
++ PREV_DEFAULT_COLOR = 0,
++ PREV_BW_COLOR = 1,
++ PREV_SEPIA_COLOR = 2
++};
++
++/**
++ * struct ispprev_hmed - Structure for Horizontal Median Filter.
++ * @odddist: Distance between consecutive pixels of same color in the odd line.
++ * @evendist: Distance between consecutive pixels of same color in the even
++ * line.
++ * @thres: Horizontal median filter threshold.
++ */
++struct ispprev_hmed {
++ u8 odddist;
++ u8 evendist;
++ u8 thres;
++};
++
++/*
++ * Structure for Noise Filter
++ */
++struct ispprev_nf {
++ /* Spread value to be used in Noise Filter*/
++ u8 spread;
++ /*Pointer to the Noise Filter table */
++ u32 *table;
++};
++
++/*
++ * Structure for Defect correction
++ */
++struct ispprev_dcor {
++ /* Flag to enable or disable the couplet dc Correction in NF*/
++ u8 couplet_mode_en;
++ /* Thresholds for correction bit 0:10 detect 16:25 correct*/
++ u32 detect_correct[4];
++};
++
++
++
++/*
++ * Enumeration for CFA Formats supported by preview
++ */
++enum cfa_fmt {
++ CFAFMT_BAYER, CFAFMT_SONYVGA, CFAFMT_RGBFOVEON,
++ CFAFMT_DNSPL, CFAFMT_HONEYCOMB, CFAFMT_RRGGBBFOVEON
++};
++/*
++ * Structure for CFA Inpterpolation
++ */
++struct ispprev_cfa {
++ /* CFA Format Enum value supported by preview.*/
++ enum cfa_fmt cfafmt;
++ /* CFA Gradient Threshold - Vertical */
++ u8 cfa_gradthrs_vert;
++ /* CFA Gradient Threshold - Horizontal */
++ u8 cfa_gradthrs_horz;
++ /* Pointer to the CFA table */
++ u32 *cfa_table;
++};
++/*
++ * Structure for Gamma Correction
++ */
++struct ispprev_gtable {
++ /* Pointer to the red gamma table */
++ u32 *redtable;
++ /* Pointer to the green gamma table */
++ u32 *greentable;
++ /* Pointer to the blue gamma table */
++ u32 *bluetable;
++};
++/*
++ * Structure for Chrominance Suppression
++ */
++struct ispprev_csup {
++ /* Gain */
++ u8 gain;
++ /* Threshold */
++ u8 thres;
++ /* Flag to enable/disable the High Pass Filter */
++ u8 hypf_en;
++};
++/*
++ * Structure for White Balance
++ */
++struct ispprev_wbal {
++ /*Digital gain (U10Q8) */
++ u16 dgain;
++ /*White balance gain - COEF 3 (U8Q5) */
++ u8 coef3;
++ /*White balance gain - COEF 2 (U8Q5) */
++ u8 coef2;
++ /*White balance gain - COEF 1 (U8Q5) */
++ u8 coef1;
++ /*White balance gain - COEF 0 (U8Q5) */
++ u8 coef0;
++};
++
++struct prev_white_balance {
++ u16 wb_dgain; /* white balance common gain */
++ u8 wb_gain[WB_GAIN_MAX]; /* individual color gains */
++ u8 wb_coefmatrix[WB_GAIN_MAX][WB_GAIN_MAX];
++};
++/*
++ * Structure for Black Adjustment
++ */
++struct ispprev_blkadj {
++ /*Black level offset adjustment for Red in 2's complement format */
++ u8 red;
++ /*Black level offset adjustment for Green in 2's complement format */
++ u8 green;
++ /* Black level offset adjustment for Blue in 2's complement format */
++ u8 blue;
++};
++/*
++ * Structure for RGB to RGB Blending
++ */
++struct ispprev_rgbtorgb {
++ /*
++ * Blending values(S12Q8 format)
++ * [RR] [GR] [BR]
++ * [RG] [GG] [BG]
++ * [RB] [GB] [BB]
++ */
++ u16 matrix[3][3];
++ /*Blending offset value for R,G,B in 2's complement integer format*/
++ u16 offset[3];
++};
++/*
++ * Structure for Color Space Conversion from RGB-YCbYCr
++ */
++struct ispprev_csc {
++ /*
++ *Color space conversion coefficients(S10Q8)
++ * [CSCRY] [CSCGY] [CSCBY]
++ * [CSCRCB] [CSCGCB] [CSCBCB]
++ * [CSCRCR] [CSCGCR] [CSCBCR]
++ */
++ u16 matrix[RGB_MAX][RGB_MAX];
++ /*
++ *CSC offset values for Y offset, CB offset and CR offset respectively
++ */
++ s16 offset[RGB_MAX];
++};
++/*
++ * Structure for Y, C Value Limit
++ */
++struct ispprev_yclimit{
++ u8 minC;
++ u8 maxC;
++ u8 minY;
++ u8 maxY;
++};
++
++/*
++ * Structure for size parameters
++ */
++struct prev_size_params {
++ unsigned int hstart; /* Starting pixel */
++ unsigned int vstart; /* Starting line */
++ unsigned int hsize; /* width of input image */
++ unsigned int vsize; /* height of input image */
++ unsigned char pixsize; /* pixel size of the image in
++ terms of bits */
++ unsigned short in_pitch; /* line offset of input image */
++ unsigned short out_pitch; /* line offset of output image */
++};
++
++/*
++ * Structure RGB2YCbCr parameters
++ */
++struct prev_rgb2ycbcr_coeffs {
++ short coeff[RGB_MAX][RGB_MAX]; /* color conversion gains in
++ 3x3 matrix */
++ short offset[RGB_MAX]; /* color conversion offsets */
++};
++
++/*
++ * Structure for Dark frame suppression
++ */
++struct prev_darkfrm_params {
++ u32 addr; /* memory start address */
++ u32 offset; /* line offset */
++};
++
++
++/*
++ * Structure for all configuration
++ */
++struct prev_params {
++ u16 features; /* Set of features enabled */
++
++ enum preview_ycpos_mode pix_fmt; /* output pixel format */
++
++ struct ispprev_cfa cfa; /* CFA coefficients */
++
++ struct ispprev_csup csup; /* chroma suppression coefficients */
++
++ u32 *ytable; /* luma enhancement coeffs */
++
++ struct ispprev_nf nf; /* noise filter coefficients */
++
++ struct ispprev_dcor dcor; /* noise filter coefficients */
++
++ struct ispprev_gtable gtable; /* gamma coefficients */
++
++ struct ispprev_wbal wbal;
++ /*
++ struct prev_white_balance prev_wbal;
++ */
++ struct ispprev_blkadj blk_adj; /* black adjustment parameters */
++
++ struct ispprev_rgbtorgb rgb2rgb; /* rgb blending parameters */
++
++ struct ispprev_csc rgb2ycbcr; /* rgb to ycbcr parameters */
++
++ struct ispprev_hmed hmf_params; /* horizontal median filter */
++
++ struct prev_size_params size_params; /* size parameters */
++ struct prev_darkfrm_params drkf_params;
++ u8 lens_shading_shift;
++ u8 average; /* down sampling rate for averager */
++
++ u8 contrast; /* contrast */
++ u8 brightness; /* brightness */
++};
++
++/**
++ * struct ispprv_update_config - Structure for Preview Configuration (user).
++ * @update: Specifies which ISP Preview registers should be updated.
++ * @flag: Specifies which ISP Preview functions should be enabled.
++ * @yen: Pointer to luma enhancement table.
++ * @shading_shift: 3bit value of shift used in shading compensation.
++ * @prev_hmed: Pointer to structure containing the odd and even distance.
++ * between the pixels in the image along with the filter threshold.
++ * @prev_cfa: Pointer to structure containing the CFA interpolation table, CFA.
++ * format in the image, vertical and horizontal gradient threshold.
++ * @csup: Pointer to Structure for Chrominance Suppression coefficients.
++ * @prev_wbal: Pointer to structure for White Balance.
++ * @prev_blkadj: Pointer to structure for Black Adjustment.
++ * @rgb2rgb: Pointer to structure for RGB to RGB Blending.
++ * @prev_csc: Pointer to structure for Color Space Conversion from RGB-YCbYCr.
++ * @yclimit: Pointer to structure for Y, C Value Limit.
++ * @prev_dcor: Pointer to structure for defect correction.
++ */
++struct ispprv_update_config {
++ u16 update;
++ u16 flag;
++ void *yen;
++ u32 shading_shift;
++ struct ispprev_hmed *prev_hmed;
++ struct ispprev_cfa *prev_cfa;
++ struct ispprev_csup *csup;
++ struct ispprev_wbal *prev_wbal;
++ struct ispprev_blkadj *prev_blkadj;
++ struct ispprev_rgbtorgb *rgb2rgb;
++ struct ispprev_csc *prev_csc;
++ struct ispprev_yclimit *yclimit;
++ struct ispprev_dcor *prev_dcor;
++};
++
++/**
++ * struct isptables_update - Structure for Table Configuration.
++ * @update: Specifies which tables should be updated.
++ * @flag: Specifies which tables should be enabled.
++ * @lsc_cfg: Pointer to structure for LSC configuration.
++ * @prev_nf: Pointer to structure for Noise Filter
++ * @lsc: Pointer to LSC gain table. (currently not used)
++ * @red_gamma: Pointer to red gamma correction table.
++ * @green_gamma: Pointer to green gamma correction table.
++ * @blue_gamma: Pointer to blue gamma correction table.
++ */
++struct isptables_update {
++ u16 update;
++ u16 flag;
++ struct ispprev_nf *prev_nf;
++ u32 *lsc;
++ u32 *red_gamma;
++ u32 *green_gamma;
++ u32 *blue_gamma;
++};
++
++void isppreview_config_shadow_registers(void);
++
++#include <linux/autoconf.h>
++#ifdef CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER
++int isppreview_request(void);
++
++int isppreview_free(void);
++
++int isppreview_config_datapath(enum preview_input input,
++ enum preview_output output);
++
++void isppreview_config_ycpos(enum preview_ycpos_mode mode);
++
++void isppreview_set_color(u8 *mode);
++
++void isppreview_get_color(u8 *mode);
++
++void isppreview_query_contrast(u8 *contrast);
++
++void isppreview_query_brightness(u8 *brightness);
++
++int isppreview_try_size(u32 input_w, u32 input_h, u32 *output_w, u32 *output_h);
++
++int isppreview_config_size(u32 input_w, u32 input_h, u32 output_w,
++ u32 output_h);
++
++void isppreview_update_contrast(u8 *contrast);
++
++void isppreview_update_brightness(u8 *brightness);
++
++int isppreview_busy(void);
++
++void isppreview_save_context(void);
++
++void isppreview_restore_context(void);
++
++int omap34xx_isp_preview_config(void *userspace_add);
++
++int omap34xx_isp_tables_update(void *userspace_add);
++
++#else
++static inline int isppreview_request(void) { return 0;}
++static inline int isppreview_free(void) { return 0;}
++static inline int isppreview_config_datapath(enum preview_input input,
++ enum preview_output output) { return 0;}
++static inline void isppreview_config_ycpos(enum preview_ycpos_mode mode) {}
++static inline void isppreview_set_color(u8 *mode) {}
++static inline void isppreview_get_color(u8 *mode) {}
++static inline void isppreview_query_brightness(u8 *brightness) {}
++static inline void isppreview_query_contrast(u8 *contrast){}
++static inline int isppreview_try_size(u32 input_w, u32 input_h, u32 *output_w, u32 *output_h){ return 0;}
++static inline int isppreview_config_size(u32 input_w, u32 input_h, u32 output_w, u32 output_h) {return 0;}
++static inline void isppreview_update_contrast(u8 *contrast) {}
++static inline void isppreview_update_brightness(u8 *brightness) {}
++static inline int isppreview_busy(void){return 0;}
++static inline int omap34xx_isp_preview_config(void *userspace_add){return 0;}
++static inline int omap34xx_isp_tables_update(void *userspace_add){return 0;}
++static inline void isppreview_save_context(void) {}
++static inline void isppreview_restore_context(void) {}
++#endif
++
++void isppreview_config_averager(u8 average);
++
++void isppreview_enable_invalaw(u8 enable);
++
++void isppreview_enable_drkframe(u8 enable);
++
++void isppreview_enable_shadcomp(u8 enable);
++
++void isppreview_config_drkf_shadcomp(u8 scomp_shtval);
++
++void isppreview_enable_gammabypass(u8 enable);
++
++void isppreview_enable_hmed(u8 enable);
++
++void isppreview_config_hmed(struct ispprev_hmed);
++
++void isppreview_enable_noisefilter(u8 enable);
++
++void isppreview_config_noisefilter(struct ispprev_nf prev_nf);
++
++void isppreview_enable_dcor(u8 enable);
++
++void isppreview_config_dcor(struct ispprev_dcor prev_dcor);
++
++void isppreview_config_cfa(struct ispprev_cfa);
++
++void isppreview_config_gammacorrn(struct ispprev_gtable);
++
++void isppreview_config_chroma_suppression(struct ispprev_csup csup);
++
++void isppreview_enable_cfa(u8 enable);
++
++void isppreview_config_luma_enhancement(u32 *ytable);
++
++void isppreview_enable_luma_enhancement(u8 enable);
++
++void isppreview_enable_chroma_suppression(u8 enable);
++
++void isppreview_config_whitebalance(struct ispprev_wbal);
++
++void isppreview_config_blkadj(struct ispprev_blkadj);
++
++void isppreview_config_rgb_blending(struct ispprev_rgbtorgb);
++
++void isppreview_config_rgb_to_ycbcr(struct ispprev_csc);
++
++void isppreview_config_contrast(u8 contrast);
++
++void isppreview_get_contrast_range(u8 *min_contrast, u8 *max_contrast);
++
++void isppreview_config_brightness(u8 brightness);
++
++void isppreview_get_brightness_range(u8 *min_brightness, u8 *max_brightness);
++
++void isppreview_config_yc_range(struct ispprev_yclimit yclimit);
++
++int isppreview_config_inlineoffset(u32 offset);
++
++int isppreview_set_inaddr(u32 addr);
++
++int isppreview_config_outlineoffset(u32 offset);
++
++int isppreview_set_outaddr(u32 addr);
++
++int isppreview_config_darklineoffset(u32 offset);
++
++int isppreview_set_darkaddr(u32 addr);
++
++void isppreview_enable(u8 enable);
++
++struct prev_params *isppreview_get_config(void);
++
++void isppreview_print_status(void);
++
++#endif/* OMAP_ISP_PREVIEW_H */
+Index: git/drivers/media/video/isp/ispreg.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispreg.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,1225 @@
++/*
++ * drivers/media/video/omap/isp/ispreg.h
++ *
++ * Header file for all the ISP module in TI's OMAP3430 Camera ISP.
++ * It has the OMAP HW register definitions.
++ *
++ * Copyright (C) 2007 Texas Instruments.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef __ISPREG_H__
++#define __ISPREG_H__
++
++#if 0
++#define OMAP_ISPCTRL_DEBUG
++#define OMAP_ISPCCDC_DEBUG
++#define OMAP_ISPPREV_DEBUG
++#define OMAP_ISPRESZ_DEBUG
++#define OMAP_ISPMMU_DEBUG
++#define OMAP_ISPH3A_DEBUG
++#define OMAP_ISPHIST_DEBUG
++#endif
++
++#ifdef OMAP_ISPCTRL_DEBUG
++#define DPRINTK_ISPCTRL(format,...)\
++ printk("ISPCTRL: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPCTRL(format, ...)
++#endif
++
++#ifdef OMAP_ISPCCDC_DEBUG
++#define DPRINTK_ISPCCDC(format, ...)\
++ printk("ISPCCDC: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPCCDC(format, ...)
++#endif
++
++#ifdef OMAP_ISPPREV_DEBUG
++#define DPRINTK_ISPPREV(format, ...)\
++ printk("ISPPREV: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPPREV(format, ...)
++#endif
++
++#ifdef OMAP_ISPRESZ_DEBUG
++#define DPRINTK_ISPRESZ(format, ...)\
++ printk("ISPRESZ: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPRESZ(format, ...)
++#endif
++
++#ifdef OMAP_ISPMMU_DEBUG
++#define DPRINTK_ISPMMU(format, ...)\
++ printk("ISPMMU: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPMMU(format, ...)
++#endif
++
++#ifdef OMAP_ISPH3A_DEBUG
++#define DPRINTK_ISPH3A(format, ...)\
++ printk("ISPH3A: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPH3A(format, ...)
++#endif
++
++#ifdef OMAP_ISPHIST_DEBUG
++#define DPRINTK_ISPHIST(format, ...)\
++ printk("ISPHIST: " format, ## __VA_ARGS__)
++#else
++#define DPRINTK_ISPHIST(format, ...)
++#endif
++
++#define ISP_32B_BOUNDARY_BUF 0xFFFFFFE0
++#define ISP_32B_BOUNDARY_OFFSET 0x0000FFE0
++
++/*PRCM Clock definition*/
++
++#define CM_FCLKEN_CAM 0x48004f00
++#define CM_ICLKEN_CAM 0x48004f10
++#define CM_AUTOIDLE_CAM 0x48004f30
++#define CM_CLKSEL_CAM 0x48004f40
++#define CM_CLKEN_PLL 0x48004D00
++#define CM_CLKSEL2_PLL 0x48004D44
++#define CTRL_PADCONF_CAM_HS 0x4800210C
++#define CTRL_PADCONF_CAM_XCLKA 0x48002110
++#define CTRL_PADCONF_CAM_D1 0x48002118
++#define CTRL_PADCONF_CAM_D3 0x4800211C
++#define CTRL_PADCONF_CAM_D5 0x48002120
++
++#define CTRL_PADCONF_CAM_D7 0x48002124
++#define CTRL_PADCONF_CAM_D9 0x48002128
++#define CTRL_PADCONF_CAM_D11 0x4800212C
++
++#define CM_ICLKEN_CAM_EN 0x1
++#define CM_FCLKEN_CAM_EN 0x1
++
++#define CM_CAM_MCLK_HZ 216000000
++
++/* ISP Submodules offset */
++
++#define ISP_REG_BASE 0x480BC000
++#define ISP_REG_SIZE 0x00001600
++
++#define ISPCBUFF_REG_BASE 0x480BC100
++#define ISPCBUFF_REG(offset) (ISPCBUFF_REG_BASE + (offset))
++
++#define ISPCCP2A_REG_OFFSET 0x00000200
++#define ISPCCP2A_REG_BASE 0x480BC200
++
++#define ISPCCP2B_REG_OFFSET 0x00000400
++#define ISPCCP2B_REG_BASE 0x480BC400
++
++#define ISPCCDC_REG_OFFSET 0x00000600
++#define ISPCCDC_REG_BASE 0x480BC600
++
++#define ISPSCMP_REG_OFFSET 0x00000800
++#define ISPSCMP_REG_BASE 0x480BC800
++
++#define ISPHIST_REG_OFFSET 0x00000A00
++#define ISPHIST_REG_BASE 0x480BCA00
++#define ISPHIST_REG(offset) (ISPHIST_REG_BASE + (offset))
++
++#define ISPH3A_REG_OFFSET 0x00000C00
++#define ISPH3A_REG_BASE 0x480BCC00
++#define ISPH3A_REG(offset) (ISPH3A_REG_BASE + (offset))
++
++#define ISPPREVIEW_REG_OFFSET 0x00000E00
++#define ISPPREVIEW_REG_BASE 0x480BCE00
++
++#define ISPRESIZER_REG_OFFSET 0x00001000
++#define ISPRESIZER_REG_BASE 0x480BD000
++
++#define ISPSBL_REG_OFFSET 0x00001200
++#define ISPSBL_REG_BASE 0x480BD200
++
++#define ISPMMU_REG_OFFSET 0x00001400
++#define ISPMMU_REG_BASE 0x480BD400
++
++/* ISP module register offset */
++
++#define ISP_REVISION 0x480BC000
++#define ISP_SYSCONFIG 0x480BC004
++#define ISP_SYSSTATUS 0x480BC008
++#define ISP_IRQ0ENABLE 0x480BC00C
++#define ISP_IRQ0STATUS 0x480BC010
++#define ISP_IRQ1ENABLE 0x480BC014
++#define ISP_IRQ1STATUS 0x480BC018
++#define ISP_TCTRL_GRESET_LENGTH 0x480BC030
++#define ISP_TCTRL_PSTRB_REPLAY 0x480BC034
++#define ISP_CTRL 0x480BC040
++#define ISP_SECURE 0x480BC044
++#define ISP_TCTRL_CTRL 0x480BC050
++#define ISP_TCTRL_FRAME 0x480BC054
++#define ISP_TCTRL_PSTRB_DELAY 0x480BC058
++#define ISP_TCTRL_STRB_DELAY 0x480BC05C
++#define ISP_TCTRL_SHUT_DELAY 0x480BC060
++#define ISP_TCTRL_PSTRB_LENGTH 0x480BC064
++#define ISP_TCTRL_STRB_LENGTH 0x480BC068
++#define ISP_TCTRL_SHUT_LENGTH 0x480BC06C
++#define ISP_PING_PONG_ADDR 0x480BC070
++#define ISP_PING_PONG_MEM_RANGE 0x480BC074
++#define ISP_PING_PONG_BUF_SIZE 0x480BC078
++
++/* CSI1 receiver registers */
++
++#define ISP_CSIA_SYSCONFIG 0x480BC204
++#define ISP_CSIB_SYSCONFIG 0x480BC404
++
++/* ISP_CBUFF Registers */
++
++#define ISP_CBUFF_SYSCONFIG ISPCBUFF_REG(0x010)
++#define ISP_CBUFF_IRQENABLE ISPCBUFF_REG(0x01C)
++
++#define ISP_CBUFF0_CTRL ISPCBUFF_REG(0x020)
++#define ISP_CBUFF1_CTRL (ISP_CBUFF0_CTRL + (0x004))
++
++#define ISP_CBUFF0_START ISPCBUFF_REG(0x040)
++#define ISP_CBUFF1_START (ISP_CBUFF0_START + (0x004))
++
++#define ISP_CBUFF0_END ISPCBUFF_REG(0x050)
++#define ISP_CBUFF1_END (ISP_CBUFF0_END + (0x04))
++
++#define ISP_CBUFF0_WINDOWSIZE ISPCBUFF_REG(0x060)
++#define ISP_CBUFF1_WINDOWSIZE (ISP_CBUFF0_WINDOWSIZE + (0x004))
++
++#define ISP_CBUFF0_THRESHOLD ISPCBUFF_REG(0x070)
++#define ISP_CBUFF1_THRESHOLD (ISP_CBUFF0_THRESHOLD + (0x004))
++
++
++/* CCDC module register offset */
++
++#define ISPCCDC_PID 0x480BC600
++#define ISPCCDC_PCR 0x480BC604
++#define ISPCCDC_SYN_MODE 0x480BC608
++#define ISPCCDC_HD_VD_WID 0x480BC60C
++#define ISPCCDC_PIX_LINES 0x480BC610
++#define ISPCCDC_HORZ_INFO 0x480BC614
++#define ISPCCDC_VERT_START 0x480BC618
++#define ISPCCDC_VERT_LINES 0x480BC61C
++#define ISPCCDC_CULLING 0x480BC620
++#define ISPCCDC_HSIZE_OFF 0x480BC624
++#define ISPCCDC_SDOFST 0x480BC628
++#define ISPCCDC_SDR_ADDR 0x480BC62C
++#define ISPCCDC_CLAMP 0x480BC630
++#define ISPCCDC_DCSUB 0x480BC634
++#define ISPCCDC_COLPTN 0x480BC638
++#define ISPCCDC_BLKCMP 0x480BC63C
++#define ISPCCDC_FPC 0x480BC640
++#define ISPCCDC_FPC_ADDR 0x480BC644
++#define ISPCCDC_VDINT 0x480BC648
++#define ISPCCDC_ALAW 0x480BC64C
++#define ISPCCDC_REC656IF 0x480BC650
++#define ISPCCDC_CFG 0x480BC654
++#define ISPCCDC_FMTCFG 0x480BC658
++#define ISPCCDC_FMT_HORZ 0x480BC65C
++#define ISPCCDC_FMT_VERT 0x480BC660
++#define ISPCCDC_FMT_ADDR0 0x480BC664
++#define ISPCCDC_FMT_ADDR1 0x480BC668
++#define ISPCCDC_FMT_ADDR2 0x480BC66C
++#define ISPCCDC_FMT_ADDR3 0x480BC670
++#define ISPCCDC_FMT_ADDR4 0x480BC674
++#define ISPCCDC_FMT_ADDR5 0x480BC678
++#define ISPCCDC_FMT_ADDR6 0x480BC67C
++#define ISPCCDC_FMT_ADDR7 0x480BC680
++#define ISPCCDC_PRGEVEN0 0x480BC684
++#define ISPCCDC_PRGEVEN1 0x480BC688
++#define ISPCCDC_PRGODD0 0x480BC68C
++#define ISPCCDC_PRGODD1 0x480BC690
++#define ISPCCDC_VP_OUT 0x480BC694
++
++#define ISPCCDC_LSC_CONFIG 0x480BC698
++#define ISPCCDC_LSC_INITIAL 0x480BC69C
++#define ISPCCDC_LSC_TABLE_BASE 0x480BC6A0
++#define ISPCCDC_LSC_TABLE_OFFSET 0x480BC6A4
++
++
++/* Histogram registers */
++#define ISPHIST_PID ISPHIST_REG(0x000)
++#define ISPHIST_PCR ISPHIST_REG(0x004)
++#define ISPHIST_CNT ISPHIST_REG(0x008)
++#define ISPHIST_WB_GAIN ISPHIST_REG(0x00C)
++#define ISPHIST_R0_HORZ ISPHIST_REG(0x010)
++#define ISPHIST_R0_VERT ISPHIST_REG(0x014)
++#define ISPHIST_R1_HORZ ISPHIST_REG(0x018)
++#define ISPHIST_R1_VERT ISPHIST_REG(0x01C)
++#define ISPHIST_R2_HORZ ISPHIST_REG(0x020)
++#define ISPHIST_R2_VERT ISPHIST_REG(0x024)
++#define ISPHIST_R3_HORZ ISPHIST_REG(0x028)
++#define ISPHIST_R3_VERT ISPHIST_REG(0x02C)
++#define ISPHIST_ADDR ISPHIST_REG(0x030)
++#define ISPHIST_DATA ISPHIST_REG(0x034)
++#define ISPHIST_RADD ISPHIST_REG(0x038)
++#define ISPHIST_RADD_OFF ISPHIST_REG(0x03C)
++#define ISPHIST_H_V_INFO ISPHIST_REG(0x040)
++
++/* H3A module registers */
++#define ISPH3A_PID ISPH3A_REG(0x000)
++#define ISPH3A_PCR ISPH3A_REG(0x004)
++#define ISPH3A_AEWWIN1 ISPH3A_REG(0x04C)
++#define ISPH3A_AEWINSTART ISPH3A_REG(0x050)
++#define ISPH3A_AEWINBLK ISPH3A_REG(0x054)
++#define ISPH3A_AEWSUBWIN ISPH3A_REG(0x058)
++#define ISPH3A_AEWBUFST ISPH3A_REG(0x05C)
++#define ISPH3A_AFPAX1 ISPH3A_REG(0x008)
++#define ISPH3A_AFPAX2 ISPH3A_REG(0x00C)
++#define ISPH3A_AFPAXSTART ISPH3A_REG(0x010)
++#define ISPH3A_AFIIRSH ISPH3A_REG(0x014)
++#define ISPH3A_AFBUFST ISPH3A_REG(0x018)
++#define ISPH3A_AFCOEF010 ISPH3A_REG(0x01C)
++#define ISPH3A_AFCOEF032 ISPH3A_REG(0x020)
++#define ISPH3A_AFCOEF054 ISPH3A_REG(0x024)
++#define ISPH3A_AFCOEF076 ISPH3A_REG(0x028)
++#define ISPH3A_AFCOEF098 ISPH3A_REG(0x02C)
++#define ISPH3A_AFCOEF0010 ISPH3A_REG(0x030)
++#define ISPH3A_AFCOEF110 ISPH3A_REG(0x034)
++#define ISPH3A_AFCOEF132 ISPH3A_REG(0x038)
++#define ISPH3A_AFCOEF154 ISPH3A_REG(0x03C)
++#define ISPH3A_AFCOEF176 ISPH3A_REG(0x040)
++#define ISPH3A_AFCOEF198 ISPH3A_REG(0x044)
++#define ISPH3A_AFCOEF1010 ISPH3A_REG(0x048)
++
++
++
++
++#define ISPPRV_PCR 0x480BCE04
++#define ISPPRV_HORZ_INFO 0x480BCE08
++#define ISPPRV_VERT_INFO 0x480BCE0C
++#define ISPPRV_RSDR_ADDR 0x480BCE10
++#define ISPPRV_RADR_OFFSET 0x480BCE14
++#define ISPPRV_DSDR_ADDR 0x480BCE18
++#define ISPPRV_DRKF_OFFSET 0x480BCE1C
++#define ISPPRV_WSDR_ADDR 0x480BCE20
++#define ISPPRV_WADD_OFFSET 0x480BCE24
++#define ISPPRV_AVE 0x480BCE28
++#define ISPPRV_HMED 0x480BCE2C
++#define ISPPRV_NF 0x480BCE30
++#define ISPPRV_WB_DGAIN 0x480BCE34
++#define ISPPRV_WBGAIN 0x480BCE38
++#define ISPPRV_WBSEL 0x480BCE3C
++#define ISPPRV_CFA 0x480BCE40
++#define ISPPRV_BLKADJOFF 0x480BCE44
++#define ISPPRV_RGB_MAT1 0x480BCE48
++#define ISPPRV_RGB_MAT2 0x480BCE4C
++#define ISPPRV_RGB_MAT3 0x480BCE50
++#define ISPPRV_RGB_MAT4 0x480BCE54
++#define ISPPRV_RGB_MAT5 0x480BCE58
++#define ISPPRV_RGB_OFF1 0x480BCE5C
++#define ISPPRV_RGB_OFF2 0x480BCE60
++#define ISPPRV_CSC0 0x480BCE64
++#define ISPPRV_CSC1 0x480BCE68
++#define ISPPRV_CSC2 0x480BCE6C
++#define ISPPRV_CSC_OFFSET 0x480BCE70
++#define ISPPRV_CNT_BRT 0x480BCE74
++#define ISPPRV_CSUP 0x480BCE78
++#define ISPPRV_SETUP_YC 0x480BCE7C
++#define ISPPRV_SET_TBL_ADDR 0x480BCE80
++#define ISPPRV_SET_TBL_DATA 0x480BCE84
++#define ISPPRV_CDC_THR0 0x480BCE90
++#define ISPPRV_CDC_THR1 (ISPPRV_CDC_THR0 + (0x4))
++#define ISPPRV_CDC_THR2 (ISPPRV_CDC_THR0 + (0x4)*2)
++#define ISPPRV_CDC_THR3 (ISPPRV_CDC_THR0 + (0x4)*3)
++
++#define ISPPRV_REDGAMMA_TABLE_ADDR 0x0000
++#define ISPPRV_GREENGAMMA_TABLE_ADDR 0x0400
++#define ISPPRV_BLUEGAMMA_TABLE_ADDR 0x0800
++#define ISPPRV_NF_TABLE_ADDR 0x0C00
++#define ISPPRV_YENH_TABLE_ADDR 0x1000
++#define ISPPRV_CFA_TABLE_ADDR 0x1400
++
++#define ISPPRV_MAXOUTPUT_WIDTH 1280
++#define ISPPRV_MAXOUTPUT_WIDTH_ES2 3300
++
++/* Resizer module register offset */
++
++#define ISPRSZ_PID 0x480BD000
++#define ISPRSZ_PCR 0x480BD004
++#define ISPRSZ_CNT 0x480BD008
++#define ISPRSZ_OUT_SIZE 0x480BD00C
++#define ISPRSZ_IN_START 0x480BD010
++#define ISPRSZ_IN_SIZE 0x480BD014
++#define ISPRSZ_SDR_INADD 0x480BD018
++#define ISPRSZ_SDR_INOFF 0x480BD01C
++#define ISPRSZ_SDR_OUTADD 0x480BD020
++#define ISPRSZ_SDR_OUTOFF 0x480BD024
++#define ISPRSZ_HFILT10 0x480BD028
++#define ISPRSZ_HFILT32 0x480BD02C
++#define ISPRSZ_HFILT54 0x480BD030
++#define ISPRSZ_HFILT76 0x480BD034
++#define ISPRSZ_HFILT98 0x480BD038
++#define ISPRSZ_HFILT1110 0x480BD03C
++#define ISPRSZ_HFILT1312 0x480BD040
++#define ISPRSZ_HFILT1514 0x480BD044
++#define ISPRSZ_HFILT1716 0x480BD048
++#define ISPRSZ_HFILT1918 0x480BD04C
++#define ISPRSZ_HFILT2120 0x480BD050
++#define ISPRSZ_HFILT2322 0x480BD054
++#define ISPRSZ_HFILT2524 0x480BD058
++#define ISPRSZ_HFILT2726 0x480BD05C
++#define ISPRSZ_HFILT2928 0x480BD060
++#define ISPRSZ_HFILT3130 0x480BD064
++#define ISPRSZ_VFILT10 0x480BD068
++#define ISPRSZ_VFILT32 0x480BD06C
++#define ISPRSZ_VFILT54 0x480BD070
++#define ISPRSZ_VFILT76 0x480BD074
++#define ISPRSZ_VFILT98 0x480BD078
++#define ISPRSZ_VFILT1110 0x480BD07C
++#define ISPRSZ_VFILT1312 0x480BD080
++#define ISPRSZ_VFILT1514 0x480BD084
++#define ISPRSZ_VFILT1716 0x480BD088
++#define ISPRSZ_VFILT1918 0x480BD08C
++#define ISPRSZ_VFILT2120 0x480BD090
++#define ISPRSZ_VFILT2322 0x480BD094
++#define ISPRSZ_VFILT2524 0x480BD098
++#define ISPRSZ_VFILT2726 0x480BD09C
++#define ISPRSZ_VFILT2928 0x480BD0A0
++#define ISPRSZ_VFILT3130 0x480BD0A4
++#define ISPRSZ_YENH 0x480BD0A8
++
++
++/* MMU module registers */
++#define ISPMMU_REVISION 0x480BD400
++#define ISPMMU_SYSCONFIG 0x480BD410
++#define ISPMMU_SYSSTATUS 0x480BD414
++#define ISPMMU_IRQSTATUS 0x480BD418
++#define ISPMMU_IRQENABLE 0x480BD41C
++#define ISPMMU_WALKING_ST 0x480BD440
++#define ISPMMU_CNTL 0x480BD444
++#define ISPMMU_FAULT_AD 0x480BD448
++#define ISPMMU_TTB 0x480BD44C
++#define ISPMMU_LOCK 0x480BD450
++#define ISPMMU_LD_TLB 0x480BD454
++#define ISPMMU_CAM 0x480BD458
++#define ISPMMU_RAM 0x480BD45C
++#define ISPMMU_GFLUSH 0x480BD460
++#define ISPMMU_FLUSH_ENTRY 0x480BD464
++#define ISPMMU_READ_CAM 0x480BD468
++#define ISPMMU_READ_RAM 0x480BD46c
++#define ISPMMU_EMU_FAULT_AD 0x480BD470
++
++
++#define ISP_INT_CLR 0xFF113F11
++#define ISPPRV_PCR_EN 1
++#define ISPPRV_PCR_BUSY (1<<1)
++#define ISPPRV_PCR_SOURCE (1<<2)
++#define ISPPRV_PCR_ONESHOT (1<<3)
++#define ISPPRV_PCR_WIDTH (1<<4)
++#define ISPPRV_PCR_INVALAW (1<<5)
++#define ISPPRV_PCR_DRKFEN (1<<6)
++#define ISPPRV_PCR_DRKFCAP (1<<7)
++#define ISPPRV_PCR_HMEDEN (1<<8)
++#define ISPPRV_PCR_NFEN (1<<9)
++#define ISPPRV_PCR_CFAEN (1<<10)
++#define ISPPRV_PCR_CFAFMT_SHIFT 11
++#define ISPPRV_PCR_CFAFMT_MASK 0x7800
++#define ISPPRV_PCR_CFAFMT_BAYER (0<<11)
++#define ISPPRV_PCR_CFAFMT_SONYVGA (1<<11)
++#define ISPPRV_PCR_CFAFMT_RGBFOVEON (2<<11)
++#define ISPPRV_PCR_CFAFMT_DNSPL (3<<11)
++#define ISPPRV_PCR_CFAFMT_HONEYCOMB (4<<11)
++#define ISPPRV_PCR_CFAFMT_RRGGBBFOVEON (5<<11)
++#define ISPPRV_PCR_YNENHEN (1<<15)
++#define ISPPRV_PCR_SUPEN (1<<16)
++#define ISPPRV_PCR_YCPOS_SHIFT 17
++#define ISPPRV_PCR_YCPOS_YCrYCb (0<<17)
++#define ISPPRV_PCR_YCPOS_YCbYCr (1<<17)
++#define ISPPRV_PCR_YCPOS_CbYCrY (2<<17)
++#define ISPPRV_PCR_YCPOS_CrYCbY (3<<17)
++#define ISPPRV_PCR_RSZPORT (1<<19)
++#define ISPPRV_PCR_SDRPORT (1<<20)
++#define ISPPRV_PCR_SCOMP_EN (1<<21)
++#define ISPPRV_PCR_SCOMP_SFT_SHIFT (22)
++#define ISPPRV_PCR_SCOMP_SFT_MASK ~(7<<22)
++#define ISPPRV_PCR_GAMMA_BYPASS (1<<26)
++#define ISPPRV_PCR_DCOREN (1<<27)
++#define ISPPRV_PCR_DCCOUP (1<<28)
++#define ISPPRV_PCR_DRK_FAIL (1<<31)
++
++#define ISPPRV_HORZ_INFO_EPH_SHIFT 0
++#define ISPPRV_HORZ_INFO_EPH_MASK 0x3fff;
++#define ISPPRV_HORZ_INFO_SPH_SHIFT 16
++#define ISPPRV_HORZ_INFO_SPH_MASK 0x3fff0
++
++#define ISPPRV_VERT_INFO_ELV_SHIFT 0
++#define ISPPRV_VERT_INFO_ELV_MASK 0x3fff
++#define ISPPRV_VERT_INFO_SLV_SHIFT 16
++#define ISPPRV_VERT_INFO_SLV_MASK 0x3fff0
++
++#define ISPPRV_AVE_EVENDIST_SHIFT 2
++#define ISPPRV_AVE_EVENDIST_1 0x0
++#define ISPPRV_AVE_EVENDIST_2 0x1
++#define ISPPRV_AVE_EVENDIST_3 0x2
++#define ISPPRV_AVE_EVENDIST_4 0x3
++#define ISPPRV_AVE_ODDDIST_SHIFT 4
++#define ISPPRV_AVE_ODDDIST_1 0x0
++#define ISPPRV_AVE_ODDDIST_2 0x1
++#define ISPPRV_AVE_ODDDIST_3 0x2
++#define ISPPRV_AVE_ODDDIST_4 0x3
++
++#define ISPPRV_HMED_THRESHOLD_SHIFT 0
++#define ISPPRV_HMED_EVENDIST (1<<8)
++#define ISPPRV_HMED_ODDDIST (1<<9)
++
++#define ISPPRV_WBGAIN_COEF0_SHIFT 0
++#define ISPPRV_WBGAIN_COEF1_SHIFT 8
++#define ISPPRV_WBGAIN_COEF2_SHIFT 16
++#define ISPPRV_WBGAIN_COEF3_SHIFT 24
++
++#define ISPPRV_WBSEL_COEF0 0x0
++#define ISPPRV_WBSEL_COEF1 0x1
++#define ISPPRV_WBSEL_COEF2 0x2
++#define ISPPRV_WBSEL_COEF3 0x3
++
++#define ISPPRV_WBSEL_N0_0_SHIFT 0
++#define ISPPRV_WBSEL_N0_1_SHIFT 2
++#define ISPPRV_WBSEL_N0_2_SHIFT 4
++#define ISPPRV_WBSEL_N0_3_SHIFT 6
++#define ISPPRV_WBSEL_N1_0_SHIFT 8
++#define ISPPRV_WBSEL_N1_1_SHIFT 10
++#define ISPPRV_WBSEL_N1_2_SHIFT 12
++#define ISPPRV_WBSEL_N1_3_SHIFT 14
++#define ISPPRV_WBSEL_N2_0_SHIFT 16
++#define ISPPRV_WBSEL_N2_1_SHIFT 18
++#define ISPPRV_WBSEL_N2_2_SHIFT 20
++#define ISPPRV_WBSEL_N2_3_SHIFT 22
++#define ISPPRV_WBSEL_N3_0_SHIFT 24
++#define ISPPRV_WBSEL_N3_1_SHIFT 26
++#define ISPPRV_WBSEL_N3_2_SHIFT 28
++#define ISPPRV_WBSEL_N3_3_SHIFT 30
++
++#define ISPPRV_CFA_GRADTH_HOR_SHIFT 0
++#define ISPPRV_CFA_GRADTH_VER_SHIFT 8
++
++#define ISPPRV_BLKADJOFF_B_SHIFT 0
++#define ISPPRV_BLKADJOFF_G_SHIFT 8
++#define ISPPRV_BLKADJOFF_R_SHIFT 16
++
++#define ISPPRV_RGB_MAT1_MTX_RR_SHIFT 0
++#define ISPPRV_RGB_MAT1_MTX_GR_SHIFT 16
++
++#define ISPPRV_RGB_MAT2_MTX_BR_SHIFT 0
++#define ISPPRV_RGB_MAT2_MTX_RG_SHIFT 16
++
++#define ISPPRV_RGB_MAT3_MTX_GG_SHIFT 0
++#define ISPPRV_RGB_MAT3_MTX_BG_SHIFT 16
++
++#define ISPPRV_RGB_MAT4_MTX_RB_SHIFT 0
++#define ISPPRV_RGB_MAT4_MTX_GB_SHIFT 16
++
++#define ISPPRV_RGB_MAT5_MTX_BB_SHIFT 0
++
++#define ISPPRV_RGB_OFF1_MTX_OFFG_SHIFT 0
++#define ISPPRV_RGB_OFF1_MTX_OFFR_SHIFT 16
++
++#define ISPPRV_RGB_OFF2_MTX_OFFB_SHIFT 0
++
++#define ISPPRV_CSC0_RY_SHIFT 0
++#define ISPPRV_CSC0_GY_SHIFT 10
++#define ISPPRV_CSC0_BY_SHIFT 20
++
++#define ISPPRV_CSC1_RCB_SHIFT 0
++#define ISPPRV_CSC1_GCB_SHIFT 10
++#define ISPPRV_CSC1_BCB_SHIFT 20
++
++#define ISPPRV_CSC2_RCR_SHIFT 0
++#define ISPPRV_CSC2_GCR_SHIFT 10
++#define ISPPRV_CSC2_BCR_SHIFT 20
++
++#define ISPPRV_CSC_OFFSET_CR_SHIFT 0
++#define ISPPRV_CSC_OFFSET_CB_SHIFT 8
++#define ISPPRV_CSC_OFFSET_Y_SHIFT 16
++
++#define ISPPRV_CNT_BRT_BRT_SHIFT 0
++#define ISPPRV_CNT_BRT_CNT_SHIFT 8
++
++#define ISPPRV_CONTRAST_MAX 0x10
++#define ISPPRV_CONTRAST_MIN 0xFF
++#define ISPPRV_BRIGHT_MIN 0x00
++#define ISPPRV_BRIGHT_MAX 0xFF
++
++
++#define ISPPRV_CSUP_CSUPG_SHIFT 0
++#define ISPPRV_CSUP_THRES_SHIFT 8
++#define ISPPRV_CSUP_HPYF_SHIFT 16
++
++#define ISPPRV_SETUP_YC_MINC_SHIFT 0
++#define ISPPRV_SETUP_YC_MAXC_SHIFT 8
++#define ISPPRV_SETUP_YC_MINY_SHIFT 16
++#define ISPPRV_SETUP_YC_MAXY_SHIFT 24
++#define ISPPRV_YC_MAX 0xFF
++#define ISPPRV_YC_MIN 0x0
++
++
++
++
++/* Define bit fields within selected registers */
++
++#define ISP_REVISION_SHIFT 0
++
++#define ISP_SYSCONFIG_AUTOIDLE 0
++#define ISP_SYSCONFIG_SOFTRESET (1<<1)
++#define ISP_SYSCONFIG_MIdleMode_SHIFT 12
++#define ISP_SYSCONFIG_MIdleMode_ForceStandBy 0x0
++#define ISP_SYSCONFIG_MIdleMode_NoStandBy 0x1
++#define ISP_SYSCONFIG_MIdleMode_SmartStandBy 0x2
++
++#define ISP_SYSSTATUS_ResetDone 0
++
++#define IRQ0ENABLE_CSIA_IRQ 1
++#define IRQ0ENABLE_CSIA_LC1_IRQ (1<<1)
++#define IRQ0ENABLE_CSIA_LC2_IRQ (1<<2)
++#define IRQ0ENABLE_CSIA_LC3_IRQ (1<<3)
++#define IRQ0ENABLE_CSIB_IRQ (1<<4)
++#define IRQ0ENABLE_CSIB_LC1_IRQ (1<<5)
++#define IRQ0ENABLE_CSIB_LC2_IRQ (1<<6)
++#define IRQ0ENABLE_CSIB_LC3_IRQ (1<<7)
++#define IRQ0ENABLE_CCDC_VD0_IRQ (1<<8)
++#define IRQ0ENABLE_CCDC_VD1_IRQ (1<<9)
++#define IRQ0ENABLE_CCDC_VD2_IRQ (1<<10)
++#define IRQ0ENABLE_CCDC_ERR_IRQ (1<<11)
++#define IRQ0ENABLE_H3A_AF_DONE_IRQ (1<<12)
++#define IRQ0ENABLE_H3A_AWB_DONE_IRQ (1<<13)
++#define IRQ0ENABLE_HIST_DONE_IRQ (1<<16)
++#define IRQ0ENABLE_CCDC_LSC_DONE_IRQ (1<<17)
++#define IRQ0ENABLE_CCDC_LSC_PREF_COMP_IRQ (1<<18)
++#define IRQ0ENABLE_CCDC_LSC_PREF_ERR_IRQ (1<<19)
++#define IRQ0ENABLE_PRV_DONE_IRQ (1<<20)
++#define IRQ0ENABLE_RSZ_DONE_IRQ (1<<24)
++#define IRQ0ENABLE_OVF_IRQ (1<<25)
++#define IRQ0ENABLE_PING_IRQ (1<<26)
++#define IRQ0ENABLE_PONG_IRQ (1<<27)
++#define IRQ0ENABLE_MMU_ERR_IRQ (1<<28)
++#define IRQ0ENABLE_OCP_ERR_IRQ (1<<29)
++#define IRQ0ENABLE_SEC_ERR_IRQ (1<<30)
++#define IRQ0ENABLE_HS_VS_IRQ (1<<31)
++
++#define IRQ0STATUS_CSIA_IRQ 1
++#define IRQ0STATUS_CSIA_LC1_IRQ (1<<1)
++#define IRQ0STATUS_CSIA_LC2_IRQ (1<<2)
++#define IRQ0STATUS_CSIA_LC3_IRQ (1<<3)
++#define IRQ0STATUS_CSIB_IRQ (1<<4)
++#define IRQ0STATUS_CSIB_LC1_IRQ (1<<5)
++#define IRQ0STATUS_CSIB_LC2_IRQ (1<<6)
++#define IRQ0STATUS_CSIB_LC3_IRQ (1<<7)
++#define IRQ0STATUS_CCDC_VD0_IRQ (1<<8)
++#define IRQ0STATUS_CCDC_VD1_IRQ (1<<9)
++#define IRQ0STATUS_CCDC_VD2_IRQ (1<<10)
++#define IRQ0STATUS_CCDC_ERR_IRQ (1<<11)
++#define IRQ0STATUS_H3A_AF_DONE_IRQ (1<<12)
++#define IRQ0STATUS_H3A_AWB_DONE_IRQ (1<<13)
++#define IRQ0STATUS_HIST_DONE_IRQ (1<<16)
++#define IRQ0STATUS_PRV_DONE_IRQ (1<<20)
++#define IRQ0STATUS_RSZ_DONE_IRQ (1<<24)
++#define IRQ0STATUS_OVF_IRQ (1<<25)
++#define IRQ0STATUS_PING_IRQ (1<<26)
++#define IRQ0STATUS_PONG_IRQ (1<<27)
++#define IRQ0STATUS_MMU_ERR_IRQ (1<<28)
++#define IRQ0STATUS_OCP_ERR_IRQ (1<<29)
++#define IRQ0STATUS_SEC_ERR_IRQ (1<<30)
++#define IRQ0STATUS_HS_VS_IRQ (1<<31)
++
++#define TCTRL_GRESET_LEN 0
++
++#define TCTRL_PSTRB_REPLAY_DELAY 0
++#define TCTRL_PSTRB_REPLAY_COUNTER_SHIFT 25
++
++#define ISPCTRL_PAR_SER_CLK_SEL_parallel 0x0
++#define ISPCTRL_PAR_SER_CLK_SEL_CSIA 0x1
++#define ISPCTRL_PAR_SER_CLK_SEL_CSIB 0x2
++#define ISPCTRL_PAR_SER_CLK_SEL_MASK 0xFFFFFFFC
++
++#define ISPCTRL_PAR_BRIDGE_SHIFT 2
++#define ISPCTRL_PAR_BRIDGE_DISABLE (0x0 << 2)
++#define ISPCTRL_PAR_BRIDGE_LENDIAN (0x2 << 2)
++#define ISPCTRL_PAR_BRIDGE_BENDIAN (0x3 << 2)
++
++#define ISPCTRL_PAR_CLK_POL_SHIFT 4
++#define ISPCTRL_PAR_CLK_POL_INV (1 << 4)
++#define ISPCTRL_PING_PONG_EN (1 << 5)
++#define ISPCTRL_SHIFT_SHIFT 6
++#define ISPCTRL_SHIFT_0 (0x0 << 6)
++#define ISPCTRL_SHIFT_2 (0x1 << 6)
++#define ISPCTRL_SHIFT_4 (0x2 << 6)
++#define ISPCTRL_SHIFT_MASK (~(0x3 << 6))
++
++#define ISPCTRL_CCDC_CLK_EN (1 << 8)
++#define ISPCTRL_SCMP_CLK_EN (1 << 9)
++#define ISPCTRL_H3A_CLK_EN (1 << 10)
++#define ISPCTRL_HIST_CLK_EN (1 << 11)
++#define ISPCTRL_PREV_CLK_EN (1 << 12)
++#define ISPCTRL_RSZ_CLK_EN (1 << 13)
++#define ISPCTRL_SYNC_DETECT_SHIFT 14
++#define ISPCTRL_SYNC_DETECT_HSFALL 0x0
++#define ISPCTRL_SYNC_DETECT_HSRISE 0x1
++#define ISPCTRL_SYNC_DETECT_VSFALL 0x2
++#define ISPCTRL_SYNC_DETECT_VSRISE 0x3
++
++#define ISPCTRL_CCDC_RAM_EN (1 << 16)
++#define ISPCTRL_PREV_RAM_EN (1 << 17)
++#define ISPCTRL_SBL_RD_RAM_EN (1 << 18)
++#define ISPCTRL_SBL_WR1_RAM_EN (1 << 19)
++#define ISPCTRL_SBL_WR0_RAM_EN (1 << 20)
++#define ISPCTRL_SBL_AutoIdle (1 << 21)
++#define ISPCTRL_SBL_SHARED_RPORTB (1 << 28)
++#define ISPCTRL_JPEG_FLUSH (1 << 30)
++#define ISPCTRL_CCDC_FLUSH (1 << 31)
++
++#define ISPSECURE_SecureMode 0
++
++#define ISPTCTRL_CTRL_DIVA_SHIFT 0
++#define ISPTCTRL_CTRL_DIVA_MASK (0x1F << ISPTCTRL_CTRL_DIVA_SHIFT)
++#define ISPTCTRL_CTRL_DIVA_Low 0x0
++#define ISPTCTRL_CTRL_DIVA_High 0x1
++#define ISPTCTRL_CTRL_DIVA_Bypass 0x1F
++
++#define ISPTCTRL_CTRL_DIVB_SHIFT 5
++#define ISPTCTRL_CTRL_DIVB_MASK (0x1F << ISPTCTRL_CTRL_DIVB_SHIFT)
++#define ISPTCTRL_CTRL_DIVB_Low (0x0 << 5)
++#define ISPTCTRL_CTRL_DIVB_High (0x1 << 5)
++#define ISPTCTRL_CTRL_DIVB_Bypass (0x1F << 5)
++
++#define ISPTCTRL_CTRL_DIVC_SHIFT 10
++#define ISPTCTRL_CTRL_DIVC_NoClock (0x0 << 10)
++
++#define ISPTCTRL_CTRL_SHUTEN (1 << 21)
++#define ISPTCTRL_CTRL_PSTRBEN (1 << 22)
++#define ISPTCTRL_CTRL_STRBEN (1 << 23)
++#define ISPTCTRL_CTRL_SHUTPOL (1 << 24)
++#define ISPTCTRL_CTRL_STRBPSTRBPOL (1 << 26)
++
++#define ISPTCTRL_CTRL_INSEL_SHIFT 27
++#define ISPTCTRL_CTRL_INSEL_Parallel (0x0 << 27)
++#define ISPTCTRL_CTRL_INSEL_CSIA (0x1 << 27)
++#define ISPTCTRL_CTRL_INSEL_CSIB (0x2 << 27)
++
++#define ISPTCTRL_CTRL_GRESETEn (1 << 29)
++#define ISPTCTRL_CTRL_GRESETPOL (1 << 30)
++#define ISPTCTRL_CTRL_GRESETDIR (1 << 31)
++
++#define ISPTCTRL_FRAME_SHUT_SHIFT 0
++#define ISPTCTRL_FRAME_PSTRB_SHIFT 6
++#define ISPTCTRL_FRAME_STRB_SHIFT 12
++
++#define ISPCCDC_PID_PREV_SHIFT 0
++#define ISPCCDC_PID_CID_SHIFT 8
++#define ISPCCDC_PID_TID_SHIFT 16
++
++#define ISPCCDC_PCR_EN 1
++#define ISPCCDC_PCR_BUSY (1 << 1)
++
++#define ISPCCDC_SYN_MODE_VDHDOUT 0x1
++#define ISPCCDC_SYN_MODE_FLDOUT (1 << 1)
++#define ISPCCDC_SYN_MODE_VDPOL (1 << 2)
++#define ISPCCDC_SYN_MODE_HDPOL (1 << 3)
++#define ISPCCDC_SYN_MODE_FLDPOL (1 << 4)
++#define ISPCCDC_SYN_MODE_EXWEN (1 << 5)
++#define ISPCCDC_SYN_MODE_DATAPOL (1 << 6)
++#define ISPCCDC_SYN_MODE_FLDMODE (1 << 7)
++#define ISPCCDC_SYN_MODE_DATSIZ_MASK 0xFFFFF8FF
++#define ISPCCDC_SYN_MODE_DATSIZ_8_16 (0x0 << 8)
++#define ISPCCDC_SYN_MODE_DATSIZ_12 (0x4 << 8)
++#define ISPCCDC_SYN_MODE_DATSIZ_11 (0x5 << 8)
++#define ISPCCDC_SYN_MODE_DATSIZ_10 (0x6 << 8)
++#define ISPCCDC_SYN_MODE_DATSIZ_8 (0x7 << 8)
++#define ISPCCDC_SYN_MODE_PACK8 (1 << 11)
++#define ISPCCDC_SYN_MODE_INPMOD_MASK 0xFFFFCFFF
++#define ISPCCDC_SYN_MODE_INPMOD_RAW (0 << 12)
++#define ISPCCDC_SYN_MODE_INPMOD_YCBCR16 (1 << 12)
++#define ISPCCDC_SYN_MODE_INPMOD_YCBCR8 (2 << 12)
++#define ISPCCDC_SYN_MODE_LPF (1 << 14)
++#define ISPCCDC_SYN_MODE_FLDSTAT (1 << 15)
++#define ISPCCDC_SYN_MODE_VDHDEN (1 << 16)
++#define ISPCCDC_SYN_MODE_WEN (1 << 17)
++#define ISPCCDC_SYN_MODE_VP2SDR (1 << 18)
++#define ISPCCDC_SYN_MODE_SDR2RSZ (1 << 19)
++
++#define ISPCCDC_HD_VD_WID_VDW_SHIFT 0
++#define ISPCCDC_HD_VD_WID_HDW_SHIFT 16
++
++#define ISPCCDC_PIX_LINES_HLPRF_SHIFT 0
++#define ISPCCDC_PIX_LINES_PPLN_SHIFT 16
++
++#define ISPCCDC_HORZ_INFO_NPH_SHIFT 0
++#define ISPCCDC_HORZ_INFO_NPH_MASK 0xFFFF8000
++#define ISPCCDC_HORZ_INFO_SPH_MASK 0x1000FFFF
++#define ISPCCDC_HORZ_INFO_SPH_SHIFT 16
++
++#define ISPCCDC_VERT_START_SLV0_SHIFT 16
++#define ISPCCDC_VERT_START_SLV0_MASK 0x1000FFFF
++#define ISPCCDC_VERT_START_SLV1_SHIFT 0
++
++#define ISPCCDC_VERT_LINES_NLV_MASK 0xFFFF8000
++#define ISPCCDC_VERT_LINES_NLV_SHIFT 0
++
++#define ISPCCDC_CULLING_CULV_SHIFT 0
++#define ISPCCDC_CULLING_CULHODD_SHIFT 16
++#define ISPCCDC_CULLING_CULHEVN_SHIFT 24
++
++#define ISPCCDC_HSIZE_OFF_SHIFT 0
++
++#define ISPCCDC_SDOFST_FINV (1 << 14)
++#define ISPCCDC_SDOFST_FOFST_1L (~(3 << 12))
++#define ISPCCDC_SDOFST_FOFST_4L (3 << 12)
++#define ISPCCDC_SDOFST_LOFST3_SHIFT 0
++#define ISPCCDC_SDOFST_LOFST2_SHIFT 3
++#define ISPCCDC_SDOFST_LOFST1_SHIFT 6
++#define ISPCCDC_SDOFST_LOFST0_SHIFT 9
++#define EVENEVEN 1
++#define ODDEVEN 2
++#define EVENODD 3
++#define ODDODD 4
++
++#define ISPCCDC_CLAMP_OBGAIN_SHIFT 0
++#define ISPCCDC_CLAMP_OBST_SHIFT 10
++#define ISPCCDC_CLAMP_OBSLN_SHIFT 25
++#define ISPCCDC_CLAMP_OBSLEN_SHIFT 28
++#define ISPCCDC_CLAMP_CLAMPEN (1 << 31)
++
++#define ISPCCDC_COLPTN_R_Ye 0x0
++#define ISPCCDC_COLPTN_Gr_Cy 0x1
++#define ISPCCDC_COLPTN_Gb_G 0x2
++#define ISPCCDC_COLPTN_B_Mg 0x3
++#define ISPCCDC_COLPTN_CP0PLC0_SHIFT 0
++#define ISPCCDC_COLPTN_CP0PLC1_SHIFT 2
++#define ISPCCDC_COLPTN_CP0PLC2_SHIFT 4
++#define ISPCCDC_COLPTN_CP0PLC3_SHIFT 6
++#define ISPCCDC_COLPTN_CP1PLC0_SHIFT 8
++#define ISPCCDC_COLPTN_CP1PLC1_SHIFT 10
++#define ISPCCDC_COLPTN_CP1PLC2_SHIFT 12
++#define ISPCCDC_COLPTN_CP1PLC3_SHIFT 14
++#define ISPCCDC_COLPTN_CP2PLC0_SHIFT 16
++#define ISPCCDC_COLPTN_CP2PLC1_SHIFT 18
++#define ISPCCDC_COLPTN_CP2PLC2_SHIFT 20
++#define ISPCCDC_COLPTN_CP2PLC3_SHIFT 22
++#define ISPCCDC_COLPTN_CP3PLC0_SHIFT 24
++#define ISPCCDC_COLPTN_CP3PLC1_SHIFT 26
++#define ISPCCDC_COLPTN_CP3PLC2_SHIFT 28
++#define ISPCCDC_COLPTN_CP3PLC3_SHIFT 30
++
++#define ISPCCDC_BLKCMP_B_MG_SHIFT 0
++#define ISPCCDC_BLKCMP_GB_G_SHIFT 8
++#define ISPCCDC_BLKCMP_GR_CY_SHIFT 6
++#define ISPCCDC_BLKCMP_R_YE_SHIFT 24
++
++#define ISPCCDC_FPC_FPNUM_SHIFT 0
++#define ISPCCDC_FPC_FPCEN (1 << 15)
++#define ISPCCDC_FPC_FPERR (1 << 16)
++
++#define ISPCCDC_VDINT_1_SHIFT 0
++#define ISPCCDC_VDINT_0_SHIFT 16
++#define ISPCCDC_VDINT_0_MASK 0x7FFF
++#define ISPCCDC_VDINT_1_MASK 0x7FFF
++
++#define ISPCCDC_ALAW_GWDI_SHIFT 0
++#define ISPCCDC_ALAW_CCDTBL (1 << 3)
++
++#define ISPCCDC_REC656IF_R656ON 1
++#define ISPCCDC_REC656IF_ECCFVH (1 << 1)
++
++#define ISPCCDC_CFG_BW656 (1 << 5)
++#define ISPCCDC_CFG_FIDMD_SHIFT 6
++#define ISPCCDC_CFG_WENLOG (1 << 8)
++#define ISPCCDC_CFG_Y8POS (1 << 11)
++#define ISPCCDC_CFG_BSWD (1 << 12)
++#define ISPCCDC_CFG_MSBINVI (1 << 13)
++#define ISPCCDC_CFG_VDLC (1 << 15)
++
++#define ISPCCDC_FMTCFG_FMTEN 0x1
++#define ISPCCDC_FMTCFG_LNALT (1 << 1)
++#define ISPCCDC_FMTCFG_LNUM_SHIFT 2
++#define ISPCCDC_FMTCFG_PLEN_ODD_SHIFT 4
++#define ISPCCDC_FMTCFG_PLEN_EVEN_SHIFT 8
++#define ISPCCDC_FMTCFG_VPIN_MASK 0xFFFF8000
++#define ISPCCDC_FMTCFG_VPIN_12_3 (0x3 << 12)
++#define ISPCCDC_FMTCFG_VPIN_11_2 (0x4 << 12)
++#define ISPCCDC_FMTCFG_VPIN_10_1 (0x5 << 12)
++#define ISPCCDC_FMTCFG_VPIN_9_0 (0x6 << 12)
++#define ISPCCDC_FMTCFG_VPEN (1 << 15)
++
++#define ISPCCDC_FMTCF_VPIF_FRQ_MASK 0xFFF8FFFF
++#define ISPCCDC_FMTCF_VPIF_FRQ_BY2 (0x0 << 16)
++#define ISPCCDC_FMTCF_VPIF_FRQ_BY3 (0x1 << 16)
++#define ISPCCDC_FMTCF_VPIF_FRQ_BY4 (0x2 << 16)
++#define ISPCCDC_FMTCF_VPIF_FRQ_BY5 (0x3 << 16)
++#define ISPCCDC_FMTCF_VPIF_FRQ_BY6 (0x4 << 16)
++
++#define ISPCCDC_FMT_HORZ_FMTLNH_SHIFT 0
++#define ISPCCDC_FMT_HORZ_FMTSPH_SHIFT 16
++
++#define ISPCCDC_FMT_VERT_FMTLNV_SHIFT 0
++#define ISPCCDC_FMT_VERT_FMTSLV_SHIFT 16
++
++#define ISPCCDC_FMT_HORZ_FMTSPH_MASK 0x1FFF0000
++#define ISPCCDC_FMT_HORZ_FMTLNH_MASK 0x1FFF
++
++#define ISPCCDC_FMT_VERT_FMTSLV_MASK 0x1FFF0000
++#define ISPCCDC_FMT_VERT_FMTLNV_MASK 0x1FFF
++
++
++#define ISPCCDC_VP_OUT_HORZ_ST_SHIFT 0
++#define ISPCCDC_VP_OUT_HORZ_NUM_SHIFT 4
++#define ISPCCDC_VP_OUT_VERT_NUM_SHIFT 17
++
++#define ISPRSZ_PID_PREV_SHIFT 0
++#define ISPRSZ_PID_CID_SHIFT 8
++#define ISPRSZ_PID_TID_SHIFT 16
++
++
++#define ISPRSZ_PCR_ENABLE 0x5
++#define ISPRSZ_PCR_BUSY (1 << 1)
++
++#define ISPRSZ_CNT_HRSZ_SHIFT 0
++#define ISPRSZ_CNT_HRSZ_MASK 0x3FF
++#define ISPRSZ_CNT_VRSZ_SHIFT 10
++#define ISPRSZ_CNT_VRSZ_MASK 0xFFC00
++#define ISPRSZ_CNT_HSTPH_SHIFT 20
++#define ISPRSZ_CNT_HSTPH_MASK 0x700000
++#define ISPRSZ_CNT_VSTPH_SHIFT 23
++#define ISPRSZ_CNT_VSTPH_MASK 0x3800000
++#define ISPRSZ_CNT_CBILIN_MASK 0x20000000
++#define ISPRSZ_CNT_INPTYP_MASK 0x08000000
++#define ISPRSZ_CNT_PIXFMT_MASK 0x04000000
++#define ISPRSZ_CNT_YCPOS (1 << 26)
++#define ISPRSZ_CNT_INPTYP (1 << 27)
++#define ISPRSZ_CNT_INPSRC (1 << 28)
++#define ISPRSZ_CNT_CBILIN (1 << 29)
++
++#define ISPRSZ_OUT_SIZE_HORZ_SHIFT 0
++#define ISPRSZ_OUT_SIZE_HORZ_MASK 0x7FF
++#define ISPRSZ_OUT_SIZE_VERT_SHIFT 16
++#define ISPRSZ_OUT_SIZE_VERT_MASK 0x7FF0000
++
++
++#define ISPRSZ_IN_START_HORZ_ST_SHIFT 0
++#define ISPRSZ_IN_START_HORZ_ST_MASK 0x1FFF
++#define ISPRSZ_IN_START_VERT_ST_SHIFT 16
++#define ISPRSZ_IN_START_VERT_ST_MASK 0x1FFF0000
++
++
++#define ISPRSZ_IN_SIZE_HORZ_SHIFT 0
++#define ISPRSZ_IN_SIZE_HORZ_MASK 0x1FFF
++#define ISPRSZ_IN_SIZE_VERT_SHIFT 16
++#define ISPRSZ_IN_SIZE_VERT_MASK 0x1FFF0000
++
++#define ISPRSZ_SDR_INADD_ADDR_SHIFT 0
++#define ISPRSZ_SDR_INADD_ADDR_MASK 0xFFFFFFFF
++
++#define ISPRSZ_SDR_INOFF_OFFSET_SHIFT 0
++#define ISPRSZ_SDR_INOFF_OFFSET_MASK 0xFFFF
++
++#define ISPRSZ_SDR_OUTADD_ADDR_SHIFT 0
++#define ISPRSZ_SDR_OUTADD_ADDR_MASK 0xFFFFFFFF
++
++
++#define ISPRSZ_SDR_OUTOFF_OFFSET_SHIFT 0
++#define ISPRSZ_SDR_OUTOFF_OFFSET_MASK 0xFFFF
++
++#define ISPRSZ_HFILT10_COEF0_SHIFT 0
++#define ISPRSZ_HFILT10_COEF0_MASK 0x3FF
++#define ISPRSZ_HFILT10_COEF1_SHIFT 16
++#define ISPRSZ_HFILT10_COEF1_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT32_COEF2_SHIFT 0
++#define ISPRSZ_HFILT32_COEF2_MASK 0x3FF
++#define ISPRSZ_HFILT32_COEF3_SHIFT 16
++#define ISPRSZ_HFILT32_COEF3_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT54_COEF4_SHIFT 0
++#define ISPRSZ_HFILT54_COEF4_MASK 0x3FF
++#define ISPRSZ_HFILT54_COEF5_SHIFT 16
++#define ISPRSZ_HFILT54_COEF5_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT76_COEFF6_SHIFT 0
++#define ISPRSZ_HFILT76_COEFF6_MASK 0x3FF
++#define ISPRSZ_HFILT76_COEFF7_SHIFT 16
++#define ISPRSZ_HFILT76_COEFF7_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT98_COEFF8_SHIFT 0
++#define ISPRSZ_HFILT98_COEFF8_MASK 0x3FF
++#define ISPRSZ_HFILT98_COEFF9_SHIFT 16
++#define ISPRSZ_HFILT98_COEFF9_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT1110_COEF10_SHIFT 0
++#define ISPRSZ_HFILT1110_COEF10_MASK 0x3FF
++#define ISPRSZ_HFILT1110_COEF11_SHIFT 16
++#define ISPRSZ_HFILT1110_COEF11_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT1312_COEFF12_SHIFT 0
++#define ISPRSZ_HFILT1312_COEFF12_MASK 0x3FF
++#define ISPRSZ_HFILT1312_COEFF13_SHIFT 16
++#define ISPRSZ_HFILT1312_COEFF13_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT1514_COEFF14_SHIFT 0
++#define ISPRSZ_HFILT1514_COEFF14_MASK 0x3FF
++#define ISPRSZ_HFILT1514_COEFF15_SHIFT 16
++#define ISPRSZ_HFILT1514_COEFF15_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT1716_COEF16_SHIFT 0
++#define ISPRSZ_HFILT1716_COEF16_MASK 0x3FF
++#define ISPRSZ_HFILT1716_COEF17_SHIFT 16
++#define ISPRSZ_HFILT1716_COEF17_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT1918_COEF18_SHIFT 0
++#define ISPRSZ_HFILT1918_COEF18_MASK 0x3FF
++#define ISPRSZ_HFILT1918_COEF19_SHIFT 16
++#define ISPRSZ_HFILT1918_COEF19_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT2120_COEF20_SHIFT 0
++#define ISPRSZ_HFILT2120_COEF20_MASK 0x3FF
++#define ISPRSZ_HFILT2120_COEF21_SHIFT 16
++#define ISPRSZ_HFILT2120_COEF21_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT2322_COEF22_SHIFT 0
++#define ISPRSZ_HFILT2322_COEF22_MASK 0x3FF
++#define ISPRSZ_HFILT2322_COEF23_SHIFT 16
++#define ISPRSZ_HFILT2322_COEF23_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT2524_COEF24_SHIFT 0
++#define ISPRSZ_HFILT2524_COEF24_MASK 0x3FF
++#define ISPRSZ_HFILT2524_COEF25_SHIFT 16
++#define ISPRSZ_HFILT2524_COEF25_MASK 0x3FF0000
++
++#define ISPRSZ_HFILT2726_COEF26_SHIFT 0
++#define ISPRSZ_HFILT2726_COEF26_MASK 0x3FF
++#define ISPRSZ_HFILT2726_COEF27_SHIFT 16
++#define ISPRSZ_HFILT2726_COEF27_MASK 0x3FF0000
++
++
++#define ISPRSZ_HFILT2928_COEF28_SHIFT 0
++#define ISPRSZ_HFILT2928_COEF28_MASK 0x3FF
++#define ISPRSZ_HFILT2928_COEF29_SHIFT 16
++#define ISPRSZ_HFILT2928_COEF29_MASK 0x3FF0000
++
++
++#define ISPRSZ_HFILT3130_COEF30_SHIFT 0
++#define ISPRSZ_HFILT3130_COEF30_MASK 0x3FF
++#define ISPRSZ_HFILT3130_COEF31_SHIFT 16
++#define ISPRSZ_HFILT3130_COEF31_MASK 0x3FF0000
++
++
++#define ISPRSZ_VFILT10_COEF0_SHIFT 0
++#define ISPRSZ_VFILT10_COEF0_MASK 0x3FF
++#define ISPRSZ_VFILT10_COEF1_SHIFT 16
++#define ISPRSZ_VFILT10_COEF1_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT32_COEF2_SHIFT 0
++#define ISPRSZ_VFILT32_COEF2_MASK 0x3FF
++#define ISPRSZ_VFILT32_COEF3_SHIFT 16
++#define ISPRSZ_VFILT32_COEF3_MASK 0x3FF0000
++
++
++#define ISPRSZ_VFILT54_COEF4_SHIFT 0
++#define ISPRSZ_VFILT54_COEF4_MASK 0x3FF
++#define ISPRSZ_VFILT54_COEF5_SHIFT 16
++#define ISPRSZ_VFILT54_COEF5_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT76_COEFF6_SHIFT 0
++#define ISPRSZ_VFILT76_COEFF6_MASK 0x3FF
++#define ISPRSZ_VFILT76_COEFF7_SHIFT 16
++#define ISPRSZ_VFILT76_COEFF7_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT98_COEFF8_SHIFT 0
++#define ISPRSZ_VFILT98_COEFF8_MASK 0x3FF
++#define ISPRSZ_VFILT98_COEFF9_SHIFT 16
++#define ISPRSZ_VFILT98_COEFF9_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT1110_COEF10_SHIFT 0
++#define ISPRSZ_VFILT1110_COEF10_MASK 0x3FF
++#define ISPRSZ_VFILT1110_COEF11_SHIFT 16
++#define ISPRSZ_VFILT1110_COEF11_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT1312_COEFF12_SHIFT 0
++#define ISPRSZ_VFILT1312_COEFF12_MASK 0x3FF
++#define ISPRSZ_VFILT1312_COEFF13_SHIFT 16
++#define ISPRSZ_VFILT1312_COEFF13_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT1514_COEFF14_SHIFT 0
++#define ISPRSZ_VFILT1514_COEFF14_MASK 0x3FF
++#define ISPRSZ_VFILT1514_COEFF15_SHIFT 16
++#define ISPRSZ_VFILT1514_COEFF15_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT1716_COEF16_SHIFT 0
++#define ISPRSZ_VFILT1716_COEF16_MASK 0x3FF
++#define ISPRSZ_VFILT1716_COEF17_SHIFT 16
++#define ISPRSZ_VFILT1716_COEF17_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT1918_COEF18_SHIFT 0
++#define ISPRSZ_VFILT1918_COEF18_MASK 0x3FF
++#define ISPRSZ_VFILT1918_COEF19_SHIFT 16
++#define ISPRSZ_VFILT1918_COEF19_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT2120_COEF20_SHIFT 0
++#define ISPRSZ_VFILT2120_COEF20_MASK 0x3FF
++#define ISPRSZ_VFILT2120_COEF21_SHIFT 16
++#define ISPRSZ_VFILT2120_COEF21_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT2322_COEF22_SHIFT 0
++#define ISPRSZ_VFILT2322_COEF22_MASK 0x3FF
++#define ISPRSZ_VFILT2322_COEF23_SHIFT 16
++#define ISPRSZ_VFILT2322_COEF23_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT2524_COEF24_SHIFT 0
++#define ISPRSZ_VFILT2524_COEF24_MASK 0x3FF
++#define ISPRSZ_VFILT2524_COEF25_SHIFT 16
++#define ISPRSZ_VFILT2524_COEF25_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT2726_COEF26_SHIFT 0
++#define ISPRSZ_VFILT2726_COEF26_MASK 0x3FF
++#define ISPRSZ_VFILT2726_COEF27_SHIFT 16
++#define ISPRSZ_VFILT2726_COEF27_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT2928_COEF28_SHIFT 0
++#define ISPRSZ_VFILT2928_COEF28_MASK 0x3FF
++#define ISPRSZ_VFILT2928_COEF29_SHIFT 16
++#define ISPRSZ_VFILT2928_COEF29_MASK 0x3FF0000
++
++#define ISPRSZ_VFILT3130_COEF30_SHIFT 0
++#define ISPRSZ_VFILT3130_COEF30_MASK 0x3FF
++#define ISPRSZ_VFILT3130_COEF31_SHIFT 16
++#define ISPRSZ_VFILT3130_COEF31_MASK 0x3FF0000
++
++#define ISPRSZ_YENH_CORE_SHIFT 0
++#define ISPRSZ_YENH_CORE_MASK 0xFF
++#define ISPRSZ_YENH_SLOP_SHIFT 8
++#define ISPRSZ_YENH_SLOP_MASK 0xF00
++#define ISPRSZ_YENH_GAIN_SHIFT 12
++#define ISPRSZ_YENH_GAIN_MASK 0xF000
++#define ISPRSZ_YENH_ALGO_SHIFT 16
++#define ISPRSZ_YENH_ALGO_MASK 0x30000
++
++#define ISPH3A_PCR_AEW_ALAW_EN_SHIFT 1
++#define ISPH3A_PCR_AF_MED_TH_SHIFT 3
++#define ISPH3A_PCR_AF_RGBPOS_SHIFT 11
++#define ISPH3A_PCR_AEW_AVE2LMT_SHIFT 22
++#define ISPH3A_PCR_AEW_AVE2LMT_MASK 0xFFC00000
++
++#define ISPH3A_AEWWIN1_WINHC_SHIFT 0
++#define ISPH3A_AEWWIN1_WINHC_MASK 0x3F
++#define ISPH3A_AEWWIN1_WINVC_SHIFT 6
++#define ISPH3A_AEWWIN1_WINVC_MASK 0x1FC0
++#define ISPH3A_AEWWIN1_WINW_SHIFT 13
++#define ISPH3A_AEWWIN1_WINW_MASK 0xFE000
++#define ISPH3A_AEWWIN1_WINH_SHIFT 24
++#define ISPH3A_AEWWIN1_WINH_MASK 0x7F000000
++
++#define ISPH3A_AEWINSTART_WINSH_SHIFT 0
++#define ISPH3A_AEWINSTART_WINSH_MASK 0x0FFF
++#define ISPH3A_AEWINSTART_WINSV_SHIFT 16
++#define ISPH3A_AEWINSTART_WINSV_MASK 0x0FFF0000
++
++#define ISPH3A_AEWINBLK_WINH_SHIFT 0
++#define ISPH3A_AEWINBLK_WINH_MASK 0x7F
++#define ISPH3A_AEWINBLK_WINSV_SHIFT 16
++#define ISPH3A_AEWINBLK_WINSV_MASK 0x0FFF0000
++
++#define ISPH3A_AEWSUBWIN_AEWINCH_SHIFT 0
++#define ISPH3A_AEWSUBWIN_AEWINCH_MASK 0x0F
++#define ISPH3A_AEWSUBWIN_AEWINCV_SHIFT 8
++#define ISPH3A_AEWSUBWIN_AEWINCV_MASK 0x0F00
++
++#define ISPHIST_PCR_ENABLE_SHIFT 0
++#define ISPHIST_PCR_ENABLE_MASK 0x01
++#define ISPHIST_PCR_BUSY_SHIFT 1
++#define ISPHIST_PCR_BUSY_MASK 0x02
++
++#define ISPHIST_CNT_DATASIZE_SHIFT 8
++#define ISPHIST_CNT_DATASIZE_MASK 0x0100
++#define ISPHIST_CNT_CLEAR_SHIFT 7
++#define ISPHIST_CNT_CLEAR_MASK 0x080
++#define ISPHIST_CNT_CFA_SHIFT 6
++#define ISPHIST_CNT_CFA_MASK 0x040
++#define ISPHIST_CNT_BINS_SHIFT 4
++#define ISPHIST_CNT_BINS_MASK 0x030
++#define ISPHIST_CNT_SOURCE_SHIFT 3
++#define ISPHIST_CNT_SOURCE_MASK 0x08
++#define ISPHIST_CNT_SHIFT_SHIFT 0
++#define ISPHIST_CNT_SHIFT_MASK 0x07
++
++#define ISPHIST_WB_GAIN_WG00_SHIFT 24
++#define ISPHIST_WB_GAIN_WG00_MASK 0xFF000000
++#define ISPHIST_WB_GAIN_WG01_SHIFT 16
++#define ISPHIST_WB_GAIN_WG01_MASK 0xFF0000
++#define ISPHIST_WB_GAIN_WG02_SHIFT 8
++#define ISPHIST_WB_GAIN_WG02_MASK 0xFF00
++#define ISPHIST_WB_GAIN_WG03_SHIFT 0
++#define ISPHIST_WB_GAIN_WG03_MASK 0xFF
++
++#define ISPHIST_REGHORIZ_HSTART_SHIFT 16 /*REGION 0 to 3 HORZ and VERT */
++#define ISPHIST_REGHORIZ_HSTART_MASK 0x3FFF0000
++#define ISPHIST_REGHORIZ_HEND_SHIFT 0
++#define ISPHIST_REGHORIZ_HEND_MASK 0x3FFF
++#define ISPHIST_REGVERT_VSTART_SHIFT 16
++#define ISPHIST_REGVERT_VSTART_MASK 0x3FFF0000
++#define ISPHIST_REGVERT_VEND_SHIFT 0
++#define ISPHIST_REGVERT_VEND_MASK 0x3FFF
++
++#define ISPHIST_REGHORIZ_MASK 0x3FFF3FFF
++#define ISPHIST_REGVERT_MASK 0x3FFF3FFF
++
++#define ISPHIST_ADDR_SHIFT 0
++#define ISPHIST_ADDR_MASK 0x3FF
++
++#define ISPHIST_DATA_SHIFT 0
++#define ISPHIST_DATA_MASK 0xFFFFF
++
++#define ISPHIST_RADD_SHIFT 0
++#define ISPHIST_RADD_MASK 0xFFFFFFFF
++
++#define ISPHIST_RADD_OFF_SHIFT 0
++#define ISPHIST_RADD_OFF_MASK 0xFFFF
++
++#define ISPHIST_HV_INFO_HSIZE_SHIFT 16
++#define ISPHIST_HV_INFO_HSIZE_MASK 0x3FFF0000
++#define ISPHIST_HV_INFO_VSIZE_SHIFT 0
++#define ISPHIST_HV_INFO_VSIZE_MASK 0x3FFF
++
++#define ISPHIST_HV_INFO_MASK 0x3FFF3FFF
++
++
++#define ISPCCDC_LSC_GAIN_MODE_N_MASK 0x700
++#define ISPCCDC_LSC_GAIN_MODE_N_SHIFT 8
++#define ISPCCDC_LSC_GAIN_MODE_M_MASK 0x3800
++#define ISPCCDC_LSC_GAIN_MODE_M_SHIFT 12
++#define ISPCCDC_LSC_GAIN_FORMAT_MASK 0xE
++#define ISPCCDC_LSC_GAIN_FORMAT_SHIFT 1
++#define ISPCCDC_LSC_AFTER_REFORMATTER_MASK (1<<6)
++
++
++#define ISPCCDC_LSC_INITIAL_X_MASK 0x3F
++#define ISPCCDC_LSC_INITIAL_X_SHIFT 0
++#define ISPCCDC_LSC_INITIAL_Y_MASK 0x3F0000
++#define ISPCCDC_LSC_INITIAL_Y_SHIFT 16
++
++
++#define ISPMMU_REVISION_REV_MINOR_MASK 0xF
++#define ISPMMU_REVISION_REV_MAJOR_SHIFT 0x4
++
++#define IRQENABLE_MULTIHITFAULT (1<<4)
++#define IRQENABLE_TWFAULT (1<<3)
++#define IRQENABLE_EMUMISS (1<<2)
++#define IRQENABLE_TRANSLNFAULT (1<<1)
++#define IRQENABLE_TLBMISS (1)
++
++#define ISPMMU_MMUCNTL_MMU_EN (1<<1)
++#define ISPMMU_MMUCNTL_TWL_EN (1<<2)
++#define ISPMMU_MMUCNTL_EMUTLBUPDATE (1<<3)
++#define ISPMMU_AUTOIDLE 0x1
++#define ISPMMU_SIdlemode_Forceidle 0
++#define ISPMMU_SIdlemode_Noidle 1
++#define ISPMMU_SIdlemode_Smartidle 2
++#define ISPMMU_SIdlemode_Shift 3
++
++#define ISPCSI1_AUTOIDLE 0x1
++#define ISPCSI1_MIdleMode_Shift 12
++#define ISPCSI1_MIdleMode_ForceStandBy 0x0
++#define ISPCSI1_MIdleMode_NoStandBy 0x1
++#define ISPCSI1_MIdleMode_SmartStandBy 0x2
++
++#endif /* __ISPREG_H__ */
+Index: git/drivers/media/video/isp/ispresizer.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispresizer.c 2009-02-12 11:44:14.000000000 -0600
+@@ -0,0 +1,854 @@
++/*
++ * drivers/media/video/ispresizer.c
++ *
++ * Driver Library for Resizer module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C)2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ *
++ * Resizer module for ISP driver on OMAP3430. It implements
++ * the Resizer module APIs defined in ispresizer.h.
++ */
++
++#include <linux/errno.h>
++#include <linux/types.h>
++#include <linux/delay.h>
++#include <asm/io.h>
++#include <linux/module.h>
++
++#include "isp.h"
++#include "ispreg.h"
++#include "ispresizer.h"
++
++/*
++ * Resizer Constants
++ */
++#define MAX_IN_WIDTH_MEMORY_MODE 4095
++
++#define MAX_IN_WIDTH_ONTHEFLY_MODE 1280
++#define MAX_IN_WIDTH_ONTHEFLY_MODE_ES2 4095
++#define MAX_IN_HEIGHT 4095
++#define MINIMUM_RESIZE_VALUE 64
++#define MAXIMUM_RESIZE_VALUE 1024
++#define MID_RESIZE_VALUE 512
++
++#define MAX_7TAP_HRSZ_OUTWIDTH 1280
++#define MAX_7TAP_VRSZ_OUTWIDTH 640
++
++#define MAX_7TAP_HRSZ_OUTWIDTH_ES2 3300
++#define MAX_7TAP_VRSZ_OUTWIDTH_ES2 1650
++
++#define DEFAULTSTPIXEL 0
++#define DEFAULTSTPHASE 1
++#define DEFAULTHSTPIXEL4TAPMODE 3
++#define FOURPHASE 4
++#define EIGHTPHASE 8
++#define RESIZECONSTANT 256
++#define SHIFTER4TAPMODE 0
++#define SHIFTER7TAPMODE 1
++#define DEFAULTOFFSET 7
++#define OFFSETVERT4TAPMODE 4
++#define OPWDALIGNCONSTANT 0xFFFFFFF0
++
++/* Default configuration of resizer,filter coefficients,yenh for camera isp*/
++static struct isprsz_yenh ispreszdefaultyenh = {0, 0, 0, 0};
++static struct isprsz_coef ispreszdefcoef = {
++{
++ 0x0000, 0x0100, 0x0000, 0x0000,
++ 0x03FA, 0x00F6, 0x0010, 0x0000,
++ 0x03F9, 0x00DB, 0x002C, 0x0000,
++ 0x03FB, 0x00B3, 0x0053, 0x03FF,
++ 0x03FD, 0x0082, 0x0084, 0x03FD,
++ 0x03FF, 0x0053, 0x00B3, 0x03FB,
++ 0x0000, 0x002C, 0x00DB, 0x03F9,
++ 0x0000, 0x0010, 0x00F6, 0x03FA
++ },
++ {
++ 0x0000, 0x0100, 0x0000, 0x0000,
++ 0x03FA, 0x00F6, 0x0010, 0x0000,
++ 0x03F9, 0x00DB, 0x002C, 0x0000,
++ 0x03FB, 0x00B3, 0x0053, 0x03FF,
++ 0x03FD, 0x0082, 0x0084, 0x03FD,
++ 0x03FF, 0x0053, 0x00B3, 0x03FB,
++ 0x0000, 0x002C, 0x00DB, 0x03F9,
++ 0x0000, 0x0010, 0x00F6, 0x03FA
++ },
++ {
++ 0x0004, 0x0023, 0x005A, 0x0058,
++ 0x0023, 0x0004, 0x0000, 0x0002,
++ 0x0018, 0x004d, 0x0060, 0x0031,
++ 0x0008, 0x0000, 0x0001, 0x000f,
++ 0x003f, 0x0062, 0x003f, 0x000f,
++ 0x0001, 0x0000, 0x0008, 0x0031,
++ 0x0060, 0x004d, 0x0018, 0x0002
++ },
++ {
++ 0x0004, 0x0023, 0x005A, 0x0058,
++ 0x0023, 0x0004, 0x0000, 0x0002,
++ 0x0018, 0x004d, 0x0060, 0x0031,
++ 0x0008, 0x0000, 0x0001, 0x000f,
++ 0x003f, 0x0062, 0x003f, 0x000f,
++ 0x0001, 0x0000, 0x0008, 0x0031,
++ 0x0060, 0x004d, 0x0018, 0x0002
++ }
++ };
++
++/*
++ * Structure for the resizer module to store its own information.
++ */
++static struct isp_res {
++ u8 res_inuse;
++ u8 h_startphase;
++ u8 v_startphase;
++ u16 h_resz;
++ u16 v_resz;
++ u32 outputwidth;
++ u32 outputheight;
++ u32 inputwidth;
++ u32 inputheight;
++ u8 algo;
++ u32 ipht_crop;
++ u32 ipwd_crop;
++ u32 cropwidth;
++ u32 cropheight;
++ enum ispresizer_input resinput;
++ struct isprsz_coef coeflist;
++ struct semaphore semlock;
++} ispres_obj;
++
++/* Structure for saving/restoring resizer module registers*/
++static struct isp_reg isprsz_reg_list[] = {
++ {ISPRSZ_CNT, 0x0000},
++ {ISPRSZ_OUT_SIZE, 0x0000},
++ {ISPRSZ_IN_START, 0x0000},
++ {ISPRSZ_IN_SIZE, 0x0000},
++ {ISPRSZ_SDR_INADD, 0x0000},
++ {ISPRSZ_SDR_INOFF, 0x0000},
++ {ISPRSZ_SDR_OUTADD, 0x0000},
++ {ISPRSZ_SDR_OUTOFF, 0x0000},
++ {ISPRSZ_HFILT10, 0x0000},
++ {ISPRSZ_HFILT32, 0x0000},
++ {ISPRSZ_HFILT54, 0x0000},
++ {ISPRSZ_HFILT76, 0x0000},
++ {ISPRSZ_HFILT98, 0x0000},
++ {ISPRSZ_HFILT1110, 0x0000},
++ {ISPRSZ_HFILT1312, 0x0000},
++ {ISPRSZ_HFILT1514, 0x0000},
++ {ISPRSZ_HFILT1716, 0x0000},
++ {ISPRSZ_HFILT1918, 0x0000},
++ {ISPRSZ_HFILT2120, 0x0000},
++ {ISPRSZ_HFILT2322, 0x0000},
++ {ISPRSZ_HFILT2524, 0x0000},
++ {ISPRSZ_HFILT2726, 0x0000},
++ {ISPRSZ_HFILT2928, 0x0000},
++ {ISPRSZ_HFILT3130, 0x0000},
++ {ISPRSZ_VFILT10, 0x0000},
++ {ISPRSZ_VFILT32, 0x0000},
++ {ISPRSZ_VFILT54, 0x0000},
++ {ISPRSZ_VFILT76, 0x0000},
++ {ISPRSZ_VFILT98, 0x0000},
++ {ISPRSZ_VFILT1110, 0x0000},
++ {ISPRSZ_VFILT1312, 0x0000},
++ {ISPRSZ_VFILT1514, 0x0000},
++ {ISPRSZ_VFILT1716, 0x0000},
++ {ISPRSZ_VFILT1918, 0x0000},
++ {ISPRSZ_VFILT2120, 0x0000},
++ {ISPRSZ_VFILT2322, 0x0000},
++ {ISPRSZ_VFILT2524, 0x0000},
++ {ISPRSZ_VFILT2726, 0x0000},
++ {ISPRSZ_VFILT2928, 0x0000},
++ {ISPRSZ_VFILT3130, 0x0000},
++ {ISPRSZ_YENH, 0x0000},
++ {ISP_TOK_TERM, 0x0000}
++};
++
++void ispresizer_config_shadow_registers()
++{
++ return;
++}
++EXPORT_SYMBOL(ispresizer_config_shadow_registers);
++
++void ispresizer_trycrop(u32 left, u32 top, u32 width, u32 height, u32 ow,
++ u32 oh)
++{
++ ispres_obj.cropwidth = width + 6;
++ ispres_obj.cropheight = height + 6;
++ ispresizer_try_size(&ispres_obj.cropwidth, &ispres_obj.cropheight, &ow,
++ &oh);
++ ispres_obj.ipht_crop = top;
++ ispres_obj.ipwd_crop = left;
++}
++EXPORT_SYMBOL(ispresizer_trycrop);
++
++void ispresizer_applycrop()
++{
++ ispresizer_config_size(ispres_obj.cropwidth, ispres_obj.cropheight,
++ ispres_obj.outputwidth,
++ ispres_obj.outputheight);
++ return;
++}
++
++
++/*
++ * Reserve the Resizer module.
++ * Only one user at a time.
++ */
++int ispresizer_request()
++{
++ down(&(ispres_obj.semlock));
++ if (!(ispres_obj.res_inuse)) {
++ ispres_obj.res_inuse = 1;
++ up(&(ispres_obj.semlock));
++ /* Turn on Resizer module Clocks.*/
++ omap_writel(omap_readl(ISP_CTRL) | ISPCTRL_SBL_WR0_RAM_EN |
++ ISPCTRL_RSZ_CLK_EN, ISP_CTRL);
++ return 0;
++ } else {
++ up(&(ispres_obj.semlock));
++ printk(KERN_ERR "ISP_ERR : Resizer Module Busy\n");
++ return -EBUSY;
++ }
++}
++EXPORT_SYMBOL(ispresizer_request);
++
++/*
++ * Makes Resizer module free.
++ */
++int ispresizer_free()
++{
++ down(&(ispres_obj.semlock));
++ if (ispres_obj.res_inuse) {
++ ispres_obj.res_inuse = 0;
++ up(&(ispres_obj.semlock));
++ omap_writel(omap_readl(ISP_CTRL) & ~(ISPCTRL_RSZ_CLK_EN |
++ ISPCTRL_SBL_WR0_RAM_EN), ISP_CTRL);
++ return 0;
++ } else {
++ up(&(ispres_obj.semlock));
++ DPRINTK_ISPRESZ("ISP_ERR : Resizer Module already freed\n");
++ return -EINVAL;
++ }
++}
++EXPORT_SYMBOL(ispresizer_free);
++
++/*
++ * Sets up the default resizer configuration according to the arguments.
++ * input : Indicates the module that gives the image to resizer
++ */
++int
++ispresizer_config_datapath(enum ispresizer_input input)
++{
++ u32 cnt = 0;
++ DPRINTK_ISPRESZ("ispresizer_config_datapath()+\n");
++ ispres_obj.resinput = input;
++ switch (input) {
++ case RSZ_OTFLY_YUV:
++ cnt &= ~ISPRSZ_CNT_INPTYP;
++ cnt &= ~ISPRSZ_CNT_INPSRC;
++ /* according to TRM, inline address and inline offset must be
++ * set to 0 for OTF input mode
++ */
++ ispresizer_set_inaddr(0);
++ ispresizer_config_inlineoffset(0);
++ break;
++ case RSZ_MEM_YUV:
++ cnt |= ISPRSZ_CNT_INPSRC;
++ cnt &= ~ISPRSZ_CNT_INPTYP;
++ break;
++ case RSZ_MEM_COL8:
++ cnt |= ISPRSZ_CNT_INPSRC;
++ cnt |= ISPRSZ_CNT_INPTYP;
++ break;
++ default:
++ printk(KERN_ERR "ISP_ERR : Wrong Input\n");
++ return -EINVAL;
++ }
++ omap_writel(omap_readl(ISPRSZ_CNT) | cnt, ISPRSZ_CNT);
++ /*Set up default parameters
++ */
++ ispresizer_config_ycpos(0);
++ ispresizer_config_filter_coef(&ispreszdefcoef);
++ ispresizer_enable_cbilin(0);
++ ispresizer_config_luma_enhance(&ispreszdefaultyenh);
++ DPRINTK_ISPRESZ("ispresizer_config_datapath()-\n");
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_config_datapath);
++
++/*
++ * Calculates the horizontal and vertical resize ratio,number of pixels to
++ * be cropped in the resizer module and checks the validity of various
++ * parameters.This function internally calls trysize_calculation,which does
++ * the actual calculations and populates required members of isp_res struct
++ * Formula used for calculation is:-
++ * 8-phase 4-tap mode :-
++ * inputwidth = (32*sph + (ow - 1)*hrsz + 16) >> 8 + 7
++ * inputheight = (32*spv + (oh - 1)*vrsz + 16) >> 8 + 4
++ * endpahse for width = ( ( 32*sph + (ow - 1)*hrsz +16 ) >> 5 )% 8
++ * endphase for height = ( ( 32*sph + (oh - 1)*hrsz +16 ) >> 5 )% 8
++ * 4-phase 7-tap mode :-
++ * inputwidth = (64*sph + (ow - 1)*hrsz + 32) >> 8 + 7
++ * inputheight = (64*spv + (oh - 1)*vrsz + 32) >> 8 + 7
++ * endpahse for width = ( ( 64*sph + (ow - 1)*hrsz +32 ) >> 6 )% 4
++ * endphase for height = ( ( 64*sph + (oh - 1)*hrsz +32 ) >> 6 )% 4
++ * where
++ * sph = Start phase horizontal
++ * spv = Start phase vertical
++ * ow = Output width
++ * oh = Output height
++ * hrsz = Horizontal resize value
++ * vrsz = Vertical resize value
++ * Fills up the output/input widht/height,horizontal/vertical resize ratio,
++ * horizontal/vertical crop variables in the isp_res structure .
++ * input_w: input width for the resizer in number of pixels per line
++ * input_h: input height for the resizer in number of lines
++ * output_w: output width from the resizer in number of pixels per line
++ * resizer when writing to memory needs this to be multiple of 16
++ * output_h: output height for the resizer in number of lines, must be even
++*/
++int ispresizer_try_size(u32 *input_width, u32 *input_height, u32 *output_w,
++ u32 *output_h)
++{
++ u32 rsz, rsz_7, rsz_4;
++ u32 sph;
++ u32 input_w, input_h;
++ u32 output;
++ int max_in_otf, max_out_7tap;
++ input_w = *input_width;
++ input_h = *input_height;
++
++ /*
++ * This has to be done inorder to make sure that the try size does not
++ * end up with input height/width greater than what the preview will
++ * output.
++ */
++ input_w = input_w - 6;
++ input_h = input_h - 6;
++
++ if (input_h > MAX_IN_HEIGHT)
++ return -EINVAL;
++
++/// if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0)) {
++/// max_in_otf = MAX_IN_WIDTH_ONTHEFLY_MODE;
++// max_out_7tap = MAX_7TAP_VRSZ_OUTWIDTH;
++/// } else {
++ max_in_otf = MAX_IN_WIDTH_ONTHEFLY_MODE_ES2;
++ max_out_7tap = MAX_7TAP_VRSZ_OUTWIDTH_ES2;
++/// }
++
++ if (ispres_obj.resinput == RSZ_OTFLY_YUV) {
++ if (input_w > max_in_otf)
++ return -EINVAL;
++ } else {
++ if (input_w > MAX_IN_WIDTH_MEMORY_MODE)
++ return -EINVAL;
++ }
++
++
++ *(output_h) = *(output_h) & 0xFFFFFFFE;
++ output = *(output_h);
++ sph = DEFAULTSTPHASE;
++
++ /* For height */
++ rsz_7 = ((input_h - 7) * 256) / (output - 1);
++ rsz_4 = ((input_h - 4) * 256) / (output - 1);
++
++ rsz = (input_h * 256) / output;
++
++ if (rsz <= MID_RESIZE_VALUE) {
++ rsz = rsz_4;
++ if (rsz < MINIMUM_RESIZE_VALUE) {
++ rsz = MINIMUM_RESIZE_VALUE;
++ output = (((input_h - 4) * 256) / rsz) + 1;
++ printk(KERN_ERR "\t ISP_ERR: rsz was less than min -"
++ " new op_h is = %d\n", output);
++ }
++ } else {
++ rsz = rsz_7;
++ if (*(output_w) > max_out_7tap)
++ *(output_w) = max_out_7tap;
++ if (rsz > MAXIMUM_RESIZE_VALUE) {
++ rsz = MAXIMUM_RESIZE_VALUE;
++ output = (((input_h - 7) * 256) / rsz) + 1;
++ printk("\t ISP_ERR: rsz was more than max - new op_h"
++ " is %d\n", output);
++ }
++ }
++
++ /* Recalculate input */
++ if (rsz > MID_RESIZE_VALUE)
++ input_h = (((64 * sph) + ((output - 1) * rsz) + 32) / 256) + 7;
++ else
++ input_h = (((32 * sph) + ((output - 1) * rsz) + 16) / 256) + 4;
++
++ ispres_obj.outputheight = output;
++ ispres_obj.v_resz = rsz;
++ ispres_obj.inputheight = input_h;
++ ispres_obj.ipht_crop = DEFAULTSTPIXEL;
++ ispres_obj.v_startphase = sph;
++
++
++ *(output_w) = *(output_w) & 0xFFFFFFF0;
++ output = *(output_w);
++ sph = DEFAULTSTPHASE;
++
++ /* For Width */
++ rsz_7 = ((input_w - 7) * 256) / (output - 1);
++ rsz_4 = ((input_w - 4) * 256) / (output - 1);
++
++ rsz = (input_w * 256) / output;
++ if (rsz > MID_RESIZE_VALUE) {
++ rsz = rsz_7;
++ if (rsz > MAXIMUM_RESIZE_VALUE) {
++ rsz = MAXIMUM_RESIZE_VALUE;
++ output = (((input_w - 7) * 256) / rsz) + 1;
++ printk("\t ISP_ERR: rsz was greater than max - new"
++ " op_w is %d\n", output);
++ }
++ } else {
++ rsz = rsz_4;
++ if (rsz < MINIMUM_RESIZE_VALUE) {
++ rsz = MINIMUM_RESIZE_VALUE;
++ output = (((input_w - 4) * 256) / rsz) + 1;
++ printk("\t ISP_ERR: rsz was less than min - new op_w"
++ " is %d\n", output);
++ }
++ }
++
++ /* Recalculate input based on TRM equations */
++ if (rsz > MID_RESIZE_VALUE)
++ input_w = (((64 * sph) + ((output - 1) * rsz) + 32) / 256) + 7;
++ else
++ input_w = (((32 * sph) + ((output - 1) * rsz) + 16) / 256) + 7;
++
++ ispres_obj.outputwidth = output;
++ ispres_obj.h_resz = rsz;
++ ispres_obj.inputwidth = input_w;
++ ispres_obj.ipwd_crop = DEFAULTSTPIXEL;
++ ispres_obj.h_startphase = sph;
++
++ *input_height = input_h;
++ *input_width = input_w;
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_try_size);
++
++/*
++ * Configures the appropriate values stored in the isp_res structure in
++ * the resizer registers
++ * input_w : input width for the resizer in number of pixels per line
++ * input_h : input height for the resizer in number of lines
++ * output_w : output width from the resizer in number of pixels per line
++ * output_h : output height for the resizer in number of lines
++ */
++int
++ispresizer_config_size(u32 input_w, u32 input_h, u32 output_w, u32 output_h)
++{
++ int i, j;
++ u32 res;
++ DPRINTK_ISPRESZ("ispresizer_config_size()+, input_w = %d,input_h ="
++ " %d, output_w = %d, output_h"
++ " = %d,hresz = %d,vresz = %d,"
++ " hcrop = %d, vcrop = %d,"
++ " hstph = %d, vstph = %d\n",
++ ispres_obj.inputwidth,
++ ispres_obj.inputheight,
++ ispres_obj.outputwidth,
++ ispres_obj.outputheight,
++ ispres_obj.h_resz,
++ ispres_obj.v_resz,
++ ispres_obj.ipwd_crop,
++ ispres_obj.ipht_crop,
++ ispres_obj.h_startphase,
++ ispres_obj.v_startphase);
++ if ((output_w != ispres_obj.outputwidth)
++ || (output_h != ispres_obj.outputheight)) {
++ printk(KERN_ERR "Output parameters passed do not match the"
++ " values calculated by the"
++ " trysize passed w %d, h %d"
++ " \n", output_w , output_h);
++ return -EINVAL;
++ }
++ /* Set horizontal and vertical starting phase */
++ res = omap_readl(ISPRSZ_CNT) & (~(ISPRSZ_CNT_HSTPH_MASK |
++ ISPRSZ_CNT_VSTPH_MASK));
++ omap_writel(res | (ispres_obj.h_startphase << ISPRSZ_CNT_HSTPH_SHIFT)
++ | (ispres_obj.v_startphase << ISPRSZ_CNT_VSTPH_SHIFT)
++ , ISPRSZ_CNT);
++ /* Set horizontal and vertical start pixel */
++ omap_writel(((ispres_obj.ipwd_crop * 2) <<
++ ISPRSZ_IN_START_HORZ_ST_SHIFT) |
++ (ispres_obj.ipht_crop <<
++ ISPRSZ_IN_START_VERT_ST_SHIFT),
++ ISPRSZ_IN_START);
++
++
++ /*Set input width and height*/
++ omap_writel((ispres_obj.inputwidth << ISPRSZ_IN_SIZE_HORZ_SHIFT) |
++ (ispres_obj.inputheight <<
++ ISPRSZ_IN_SIZE_VERT_SHIFT),
++ ISPRSZ_IN_SIZE);
++ /*Set output width and height*/
++ if (!ispres_obj.algo)
++ omap_writel((output_w << ISPRSZ_OUT_SIZE_HORZ_SHIFT) |
++ (output_h <<
++ ISPRSZ_OUT_SIZE_VERT_SHIFT),
++ ISPRSZ_OUT_SIZE);
++ else
++ omap_writel(((output_w - 4) << ISPRSZ_OUT_SIZE_HORZ_SHIFT) |
++ (output_h <<
++ ISPRSZ_OUT_SIZE_VERT_SHIFT),
++ ISPRSZ_OUT_SIZE);
++
++
++ /*Set horizontal and vertical resize ratios*/
++ res = omap_readl(ISPRSZ_CNT) & (~(ISPRSZ_CNT_HRSZ_MASK |
++ ISPRSZ_CNT_VRSZ_MASK));
++ omap_writel(res | ((ispres_obj.h_resz - 1) << ISPRSZ_CNT_HRSZ_SHIFT)
++ | ((ispres_obj.v_resz - 1) << ISPRSZ_CNT_VRSZ_SHIFT)
++ , ISPRSZ_CNT);
++ /*Set the horizontal/vertical filter coefficients depending on the
++ * resize values
++ */
++ if (ispres_obj.h_resz <= MID_RESIZE_VALUE) {
++ j = 0;
++ for (i = 0; i < 16; i++) {
++ omap_writel((ispres_obj.coeflist.
++ h_filter_coef_4tap[j] <<
++ ISPRSZ_HFILT10_COEF0_SHIFT) |
++ (ispres_obj.coeflist.h_filter_coef_4tap[j+1]
++ << ISPRSZ_HFILT10_COEF1_SHIFT),
++ ISPRSZ_HFILT10 + (i * 0x04));
++ j += 2;
++ }
++ } else {
++ j = 0;
++ for (i = 0; i < 16; i++) {
++ if ((i + 1) % 4 == 0) {
++ omap_writel((ispres_obj.coeflist.
++ h_filter_coef_7tap[j] <<
++ ISPRSZ_HFILT10_COEF0_SHIFT) ,
++ ISPRSZ_HFILT10 + (i * 0x04));
++ j += 1;
++ } else {
++ omap_writel((ispres_obj.coeflist.
++ h_filter_coef_7tap[j] <<
++ ISPRSZ_HFILT10_COEF0_SHIFT) |
++ (ispres_obj.coeflist.
++ h_filter_coef_7tap[j+1] <<
++ ISPRSZ_HFILT10_COEF1_SHIFT),
++ ISPRSZ_HFILT10 + (i * 0x04));
++ j += 2;
++ }
++ }
++ }
++ if (ispres_obj.v_resz <= MID_RESIZE_VALUE) {
++ j = 0;
++ for (i = 0; i < 16; i++) {
++ omap_writel((ispres_obj.coeflist.
++ v_filter_coef_4tap[j] <<
++ ISPRSZ_VFILT10_COEF0_SHIFT) |
++ (ispres_obj.coeflist.v_filter_coef_4tap[j+1]
++ << ISPRSZ_VFILT10_COEF1_SHIFT),
++ ISPRSZ_VFILT10 + (i * 0x04));
++ j += 2;
++ }
++ } else {
++ j = 0;
++ for (i = 0; i < 16; i++) {
++ if ((i + 1) % 4 == 0) {
++ omap_writel((ispres_obj.coeflist.
++ v_filter_coef_7tap[j] <<
++ ISPRSZ_VFILT10_COEF0_SHIFT) ,
++ ISPRSZ_VFILT10 + (i * 0x04));
++ j += 1;
++ } else {
++ omap_writel((ispres_obj.coeflist.
++ v_filter_coef_7tap[j] <<
++ ISPRSZ_VFILT10_COEF0_SHIFT) |
++ (ispres_obj.coeflist.
++ v_filter_coef_7tap[j+1] <<
++ ISPRSZ_VFILT10_COEF1_SHIFT),
++ ISPRSZ_VFILT10 + (i * 0x04));
++ j += 2;
++ }
++ }
++ }
++
++ /* Configure the outline offset to e outputwidth*2*/
++ ispresizer_config_outlineoffset(output_w*2);
++ DPRINTK_ISPRESZ("ispresizer_config_size()-\n");
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_config_size);
++
++/*
++ * Enables the Resizer module.
++ * Client should configure all the sub modules in Resizer before this.
++ * enable : 1- Enables the resizer module.
++ */
++void
++ispresizer_enable(u8 enable)
++{
++ DPRINTK_ISPRESZ("+ispresizer_enable()+\n");
++ if (enable)
++ omap_writel((omap_readl(ISPRSZ_PCR)) |
++ ISPRSZ_PCR_ENABLE, ISPRSZ_PCR);
++ else {
++ omap_writel((omap_readl(ISPRSZ_PCR)) &
++ ~ISPRSZ_PCR_ENABLE, ISPRSZ_PCR);
++ }
++ DPRINTK_ISPRESZ("+ispresizer_enable()-\n");
++}
++EXPORT_SYMBOL(ispresizer_enable);
++
++int ispresizer_busy(void)
++{
++ return (omap_readl(ISPRSZ_PCR) & ISPPRV_PCR_BUSY);
++}
++EXPORT_SYMBOL(ispresizer_busy);
++
++/*
++ * Sets the horizontal and vertical start phase.
++ * This API just updates the isp_res struct.Actual register write happens in
++ * ispresizer_config_size.
++ * hstartphase : horizontal start phase(0-7)
++ * vstartphase : vertical startphase(0-7)
++ */
++void ispresizer_config_startphase(u8 hstartphase, u8 vstartphase)
++{
++ DPRINTK_ISPRESZ("ispresizer_config_startphase()+\n");
++ ispres_obj.h_startphase = hstartphase;
++ ispres_obj.v_startphase = vstartphase;
++ DPRINTK_ISPRESZ("ispresizer_config_startphase()-\n");
++}
++EXPORT_SYMBOL(ispresizer_config_startphase);
++
++/*
++ * Sets whether the output should be in YC or CY format.
++ * yc :0 - YC format
++ * 1 - CY format
++ */
++void ispresizer_config_ycpos(u8 yc)
++{
++ DPRINTK_ISPRESZ("ispresizer_config_ycpos()+\n");
++ if (yc)
++ omap_writel((omap_readl(ISPRSZ_CNT)) |
++ (ISPRSZ_CNT_YCPOS), ISPRSZ_CNT);
++ else
++ omap_writel((omap_readl(ISPRSZ_CNT)) &
++ (~ISPRSZ_CNT_YCPOS), ISPRSZ_CNT);
++ DPRINTK_ISPRESZ("ispresizer_config_ycpos()-\n");
++}
++EXPORT_SYMBOL(ispresizer_config_ycpos);
++
++/*
++ * Sets the chrominance algorithm
++ * cbilin :0 - chrominance uses same processing as luminance
++ * 1 - bilinear interpolation processing
++ */
++void
++ispresizer_enable_cbilin(u8 enable)
++{
++ DPRINTK_ISPRESZ("ispresizer_enable_cbilin()+\n");
++ if (enable)
++ omap_writel((omap_readl(ISPRSZ_CNT)) |
++ (ISPRSZ_CNT_CBILIN), ISPRSZ_CNT);
++ else
++ omap_writel((omap_readl(ISPRSZ_CNT)) &
++ (~ISPRSZ_CNT_CBILIN) , ISPRSZ_CNT);
++ DPRINTK_ISPRESZ("ispresizer_enable_cbilin()-\n");
++}
++EXPORT_SYMBOL(ispresizer_enable_cbilin);
++
++/*
++ * Configures luminance enhancer parameters.
++ * yenh :structure containing desired values for core,slope,gain and
++ * algo parameters
++ */
++void
++ispresizer_config_luma_enhance(struct isprsz_yenh *yenh)
++{
++ DPRINTK_ISPRESZ("ispresizer_config_luma_enhance()+\n");
++ ispres_obj.algo = yenh->algo;
++ omap_writel((yenh->algo << ISPRSZ_YENH_ALGO_SHIFT) |
++ (yenh->gain << ISPRSZ_YENH_GAIN_SHIFT) |
++ (yenh->slope << ISPRSZ_YENH_SLOP_SHIFT) |
++ (yenh->coreoffset << ISPRSZ_YENH_CORE_SHIFT),
++ ISPRSZ_YENH);
++ DPRINTK_ISPRESZ("ispresizer_config_luma_enhance()-\n");
++}
++EXPORT_SYMBOL(ispresizer_config_luma_enhance);
++
++/*
++ * Sets the filter coefficients for both 4-tap and 7-tap mode.
++ * This API just updates the isp_res struct.Actual register write happens in
++ * ispresizer_config_size.
++ * coef :structure containing horizontal and vertical filter
++ * coefficients for both 4-tap and 7-tap mode
++ */
++void ispresizer_config_filter_coef(struct isprsz_coef *coef)
++{
++ int i;
++ DPRINTK_ISPRESZ("ispresizer_config_filter_coef()+\n");
++ for (i = 0; i < 32; i++) {
++ ispres_obj.coeflist.h_filter_coef_4tap[i] =
++ coef->h_filter_coef_4tap[i];
++ ispres_obj.coeflist.v_filter_coef_4tap[i] =
++ coef->v_filter_coef_4tap[i];
++ }
++ for (i = 0; i < 28; i++) {
++ ispres_obj.coeflist.h_filter_coef_7tap[i] =
++ coef->h_filter_coef_7tap[i];
++ ispres_obj.coeflist.v_filter_coef_7tap[i] =
++ coef->v_filter_coef_7tap[i];
++ }
++ DPRINTK_ISPRESZ("ispresizer_config_filter_coef()-\n");
++}
++EXPORT_SYMBOL(ispresizer_config_filter_coef);
++
++/*
++ * Configures the Read address line offset.
++ * offset : Line Offset for the input image.
++ */
++int ispresizer_config_inlineoffset(u32 offset)
++{
++ DPRINTK_ISPRESZ("ispresizer_config_inlineoffset()+\n");
++ if (offset%32)
++ return -EINVAL;
++ omap_writel(offset << ISPRSZ_SDR_INOFF_OFFSET_SHIFT, ISPRSZ_SDR_INOFF);
++ DPRINTK_ISPRESZ("ispresizer_config_inlineoffset()-\n");
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_config_inlineoffset);
++
++/*
++ * Configures the memory address from which the input frame is to be read.
++ * addr : 32bit memory address aligned on 32byte boundary.
++ */
++int
++ispresizer_set_inaddr(u32 addr)
++{
++ DPRINTK_ISPRESZ("ispresizer_set_inaddr()+\n");
++ if (addr%32)
++ return -EINVAL;
++ omap_writel(addr << ISPRSZ_SDR_INADD_ADDR_SHIFT, ISPRSZ_SDR_INADD);
++ DPRINTK_ISPRESZ("ispresizer_set_inaddr()-\n");
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_set_inaddr);
++
++/*
++ * Configures the Write address line offset.
++ * offset : Line Offset for the preview output.
++ */
++int ispresizer_config_outlineoffset(u32 offset)
++{
++ DPRINTK_ISPRESZ("ispresizer_config_outlineoffset()+\n");
++ if (offset%32)
++ return -EINVAL;
++ omap_writel(offset << ISPRSZ_SDR_OUTOFF_OFFSET_SHIFT,
++ ISPRSZ_SDR_OUTOFF);
++ DPRINTK_ISPRESZ("ispresizer_config_outlineoffset()-\n");
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_config_outlineoffset);
++
++/*
++ * Configures the memory address to which the output frame is written.
++ * addr : 32bit memory address aligned on 32byte boundary.
++ */
++int ispresizer_set_outaddr(u32 addr)
++{
++ DPRINTK_ISPRESZ("ispresizer_set_outaddr()+\n");
++ if (addr%32)
++ return -EINVAL;
++ omap_writel(addr << ISPRSZ_SDR_OUTADD_ADDR_SHIFT, ISPRSZ_SDR_OUTADD);
++
++ DPRINTK_ISPRESZ("ispresizer_set_outaddr()-\n");
++ return 0;
++}
++EXPORT_SYMBOL(ispresizer_set_outaddr);
++
++/*
++ * Saves the values of the resizer module registers.
++ */
++void ispresizer_save_context(void)
++{
++ DPRINTK_ISPRESZ("Saving context\n");
++ isp_save_context(isprsz_reg_list);
++}
++EXPORT_SYMBOL(ispresizer_save_context);
++
++/*
++ * Restores the values of the resizer module registers.
++ */
++void ispresizer_restore_context(void)
++{
++ DPRINTK_ISPRESZ("Restoring context\n");
++ isp_restore_context(isprsz_reg_list);
++}
++EXPORT_SYMBOL(ispresizer_restore_context);
++
++/*
++ * Prints the values of the Resizer Module registers
++ */
++void ispresizer_print_status()
++{
++#ifdef OMAP_ISPRESZ_DEBUG
++ DPRINTK_ISPRESZ("###ISP_CTRL inresizer =0x%x\n", omap_readl(ISP_CTRL));
++
++ DPRINTK_ISPRESZ("###ISP_IRQ0ENABLE in resizer =0x%x\n",
++ omap_readl(ISP_IRQ0ENABLE));
++ DPRINTK_ISPRESZ("###ISP_IRQ0STATUS in resizer =0x%x\n",
++ omap_readl(ISP_IRQ0STATUS));
++ DPRINTK_ISPRESZ("###RSZ PCR =0x%x\n", omap_readl(ISPRSZ_PCR));
++ DPRINTK_ISPRESZ("###RSZ CNT =0x%x\n", omap_readl(ISPRSZ_CNT));
++ DPRINTK_ISPRESZ("###RSZ OUT SIZE =0x%x\n",
++ omap_readl(ISPRSZ_OUT_SIZE));
++ DPRINTK_ISPRESZ("###RSZ IN START =0x%x\n",
++ omap_readl(ISPRSZ_IN_START));
++ DPRINTK_ISPRESZ("###RSZ IN SIZE =0x%x\n", omap_readl(ISPRSZ_IN_SIZE));
++ DPRINTK_ISPRESZ("###RSZ SDR INADD =0x%x\n",
++ omap_readl(ISPRSZ_SDR_INADD));
++ DPRINTK_ISPRESZ("###RSZ SDR INOFF =0x%x\n",
++ omap_readl(ISPRSZ_SDR_INOFF));
++ DPRINTK_ISPRESZ("###RSZ SDR OUTADD =0x%x\n",
++ omap_readl(ISPRSZ_SDR_OUTADD));
++ DPRINTK_ISPRESZ("###RSZ SDR OTOFF =0x%x\n",
++ omap_readl(ISPRSZ_SDR_OUTOFF));
++ DPRINTK_ISPRESZ("###RSZ YENH =0x%x\n", omap_readl(ISPRSZ_YENH));
++#endif
++}
++EXPORT_SYMBOL(ispresizer_print_status);
++
++/*
++ * Module Initialisation.
++ */
++static int __init
++isp_resizer_init(void)
++{
++ /*Nothing to do other than mutex init*/
++ init_MUTEX(&(ispres_obj.semlock));
++ return 0;
++}
++
++static void
++isp_resizer_cleanup(void)
++{
++ /*Nothing to do*/
++}
++
++module_init(isp_resizer_init);
++module_exit(isp_resizer_cleanup);
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("ISP Resizer Library");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/ispresizer.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispresizer.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,184 @@
++/*
++ * drivers/media/video/ispresizer.h
++ *
++ * Driver include file for Resizer module in TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_RESIZER_H
++#define OMAP_ISP_RESIZER_H
++
++/************************************************************************
++The client is supposed to call resizer API in the following sequence:
++ - request()
++ - config_datatpath()
++ - optionally config/enable sub modules
++ - try/config size
++ - setup callback
++ - setup in/out memory offsets and ptrs
++ - enable()
++ ...
++ - disable()
++ - free()
++*************************************************************************/
++
++void ispresizer_config_shadow_registers(void);
++
++/*
++ * Reserve the resizer module and turns on the clocks
++ * Only one user at a time.
++ */
++int ispresizer_request(void);
++
++/*
++ * Marks Resizer module free and turns off the clocks.
++ */
++int ispresizer_free(void);
++
++/*
++ *Enumeration Constants for input format
++ */
++enum ispresizer_input {
++ RSZ_OTFLY_YUV,
++ RSZ_MEM_YUV,
++ RSZ_MEM_COL8
++};
++
++/*
++ * Sets up the default resizer configuration according to the arguments.
++ */
++int ispresizer_config_datapath(enum ispresizer_input input);
++
++/*
++ * Sets the chrominance algorithm
++ */
++void ispresizer_enable_cbilin(u8 enable);
++
++/*
++ * Sets whether the output should be in YC or CY format.
++ */
++void ispresizer_config_ycpos(u8 yc);
++
++/*
++ * Sets the horizontal and vertical start phase.
++ */
++void ispresizer_config_startphase(u8 hstartphase, u8 vstartphase);
++
++/*
++ * Structure for resizer filter coeffcients.
++ */
++struct isprsz_coef{
++ /* 8-phase/4-tap mode(.5x-4x) */
++ u16 h_filter_coef_4tap[32];
++ u16 v_filter_coef_4tap[32];
++ /* 4-phase/7-tap mode(.25x-.5x) */
++ u16 h_filter_coef_7tap[28];
++ u16 v_filter_coef_7tap[28];
++};
++
++/*
++ * Sets the filter coefficients for both 4-tap and 7-tap mode.
++ * Note this API doesn't program to hardware at all. It only make a local
++ * copy of filter arrays. The actual programming happnes when _config_size
++ * is called.
++ */
++void ispresizer_config_filter_coef(struct isprsz_coef *coef);
++
++/*
++ * Structure for resizer luminance enhancer parameters
++ */
++struct isprsz_yenh{
++ u8 algo;
++ u8 gain;
++ u8 slope;
++ u8 coreoffset;
++ };
++
++/*
++ * Configures luminance enhancer parameters.
++ */
++void ispresizer_config_luma_enhance(struct isprsz_yenh *yenh);
++/*
++ * Calculates the horizontal and vertical resize ratio,number of pixels to
++ * be cropped in the resizer module and checks the validity of various
++ * parameters.We don't expose API to change RSZ_IN_START (cropping). HORZ_ST
++ * and VERT_ST are implictly set based on the expected output size and the
++ * need of small cropping on the input image.
++ * User should already config yenh/stphase before attempting any size API.
++ */
++int ispresizer_try_size(u32 *input_w, u32 *input_h, u32 *output_w,
++ u32 *output_h);
++
++
++/*
++ * Applies Crop values to hardware
++ */
++void ispresizer_applycrop(void);
++
++/*
++ * Try size for applying crop. Updates global resizer structure. Does not
++ * update h/w
++ */
++void ispresizer_trycrop(u32 left, u32 top, u32 width, u32 height, u32 ow,
++ u32 oh);
++
++/*
++ * APT that programs I/O sizes, ratios, and the right filter coefficients
++ * to resizer hardware.
++ */
++int ispresizer_config_size(u32 input_w, u32 input_h, u32 output_w,
++ u32 output_h);
++
++/*
++ * Configures the Read address line offset.
++ */
++int ispresizer_config_inlineoffset(u32 offset);
++
++/*
++ * Configures the memory address from which the input frame is to be read.
++ */
++int ispresizer_set_inaddr(u32 addr);
++
++/*
++ * Configures the Write address line offset.
++ */
++int ispresizer_config_outlineoffset(u32 offset);
++
++/*
++ * Configures the memory address to which the output frame is written.
++ */
++int ispresizer_set_outaddr(u32 addr);
++
++/*
++ * Enables the Resizer module.
++ * ES1 only works on one-shot. ES2 allows On-The-Fly.
++ * A client should config everything else before enabling the resizer.
++ */
++void ispresizer_enable(u8 enable);
++int ispresizer_busy(void);
++
++/*
++ * Saves resizer context
++ */
++void ispresizer_save_context(void);
++
++/*
++ * Restores resizer context
++ */
++void ispresizer_restore_context(void);
++
++/*
++ * Prints the values of the Resizer Module registers
++ */
++void ispresizer_print_status(void);
++
++#endif /* OMAP_ISP_RESIZER_H */
+Index: git/drivers/media/video/isp/luma_enhance_table.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/luma_enhance_table.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,144 @@
++/*
++ * drivers/media/video/isp/luma_enhance_table.h
++ *
++ * Luminance Enhancement table values for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1047552,
++1048575,
++1047551,
++1046527,
++1045503,
++1044479,
++1043455,
++1042431,
++1041407,
++1040383,
++1039359,
++1038335,
++1037311,
++1036287,
++1035263,
++1034239,
++1033215,
++1032191,
++1031167,
++1030143,
++1028096,
++1028096,
++1028096,
++1028096,
++1028096,
++1028096,
++1028096,
++1028096,
++1028096,
++1028096,
++1028100,
++1032196,
++1036292,
++1040388,
++1044484,
++0,
++0,
++0,
++5,
++5125,
++10245,
++15365,
++20485,
++25605,
++30720,
++30720,
++30720,
++30720,
++30720,
++30720,
++30720,
++30720,
++30720,
++30720,
++30720,
++31743,
++30719,
++29695,
++28671,
++27647,
++26623,
++25599,
++24575,
++23551,
++22527,
++21503,
++20479,
++19455,
++18431,
++17407,
++16383,
++15359,
++14335,
++13311,
++12287,
++11263,
++10239,
++9215,
++8191,
++7167,
++6143,
++5119,
++4095,
++3071,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024,
++1024
+Index: git/drivers/media/video/isp/omap_previewer.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/omap_previewer.c 2009-02-12 10:29:18.000000000 -0600
+@@ -0,0 +1,820 @@
++/*
++ * drivers/media/video/isp/omap_previewer.c
++ *
++ * Wrapper for Preview module in TI's OMAP3430 ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include <linux/mutex.h>
++#include <linux/cdev.h>
++#include <linux/device.h>
++#include <linux/delay.h>
++#include <linux/fs.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <media/v4l2-dev.h>
++#include <asm/cacheflush.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++#include <asm/arch/io.h>
++#include "isp.h"
++#include "ispmmu.h"
++#include "ispreg.h"
++#include "omap_previewer.h"
++
++#define OMAP_PREV_NAME "omap-previewer"
++
++static int prev_major = -1;
++static struct device *prev_dev;
++static struct class *prev_class;
++static struct prev_device *prevdevice;
++static struct platform_driver omap_previewer_driver;
++
++static u32 prev_bufsize;
++
++/**
++ * prev_calculate_crop - Calculate crop size according to device parameters
++ * @device: Structure containing ISP preview wrapper global information
++ * @crop: Structure containing crop size
++ *
++ * This function is used to calculate frame size reduction depending on
++ * the features enabled by the application.
++ **/
++static void prev_calculate_crop(struct prev_device *device,
++ struct prev_cropsize *crop)
++{
++ dev_dbg(prev_dev, "prev_calculate_crop E\n");
++
++ if (!device || !crop) {
++ dev_err(prev_dev, "\nErron in argument");
++ return;
++ }
++
++ isppreview_try_size(device->params->size_params.hsize,
++ device->params->size_params.vsize,
++ &crop->hcrop, &crop->vcrop);
++ crop->hcrop &= PREV_16PIX_ALIGN_MASK;
++ dev_dbg(prev_dev, "prev_calculate_crop L\n");
++}
++
++/**
++ * prev_get_status - Get status of ISP preview module
++ * @status: Structure containing the busy state.
++ *
++ * Checks if the ISP preview module is busy.
++ *
++ * Returns 0 if successful, or -EINVAL if the status parameter is invalid.
++ **/
++static int prev_get_status(struct prev_status *status)
++{
++ if (!status) {
++ dev_err(prev_dev, "get_status: invalid parameter\n");
++ return -EINVAL;
++ }
++ status->hw_busy = (char)isppreview_busy();
++ return 0;
++}
++
++/**
++ * prev_hw_setup - Stores the desired configuration in the proper HW registers
++ * @config: Structure containing the desired configuration for ISP preview
++ * module.
++ *
++ * Reads the structure sent, and modifies the desired registers.
++ *
++ * Always returns 0.
++ **/
++static int prev_hw_setup(struct prev_params *config)
++{
++ dev_dbg(prev_dev, "prev_hw_setup E\n");
++
++ if (config->features & PREV_AVERAGER)
++ isppreview_config_averager(config->average);
++ else
++ isppreview_config_averager(0);
++
++ if (config->features & PREV_INVERSE_ALAW)
++ isppreview_enable_invalaw(1);
++ else
++ isppreview_enable_invalaw(0);
++
++ if (config->features & PREV_HORZ_MEDIAN_FILTER) {
++ isppreview_config_hmed(config->hmf_params);
++ isppreview_enable_hmed(1);
++ } else
++ isppreview_enable_hmed(0);
++
++ if (config->features & PREV_DARK_FRAME_SUBTRACT) {
++ isppreview_set_darkaddr(config->drkf_params.addr);
++ isppreview_config_darklineoffset(config->drkf_params.offset);
++ isppreview_enable_drkframe(1);
++ } else
++ isppreview_enable_drkframe(0);
++
++ if (config->features & PREV_LENS_SHADING) {
++ isppreview_config_drkf_shadcomp(config->lens_shading_shift);
++ isppreview_enable_shadcomp(1);
++ } else
++ isppreview_enable_shadcomp(0);
++
++ dev_dbg(prev_dev, "prev_hw_setup L\n");
++ return 0;
++}
++
++/**
++ * prev_validate_params - Validate configuration parameters for Preview Wrapper
++ * @params: Structure containing configuration parameters
++ *
++ * Validate configuration parameters for Preview Wrapper
++ *
++ * Returns 0 if successful, or -EINVAL if a parameter value is invalid.
++ **/
++static int prev_validate_params(struct prev_params *params)
++{
++ if (!params) {
++ dev_err(prev_dev, "validate_params: error in argument");
++ goto err_einval;
++ }
++
++ if ((params->features & PREV_AVERAGER) == PREV_AVERAGER) {
++ if ((params->average != NO_AVE)
++ && (params->average != AVE_2_PIX)
++ && (params->average != AVE_4_PIX)
++ && (params->average != AVE_8_PIX)) {
++ dev_err(prev_dev, "validate_params: wrong pix "
++ "average\n");
++ goto err_einval;
++ } else if (((params->average == AVE_2_PIX)
++ && (params->size_params.hsize % 2))
++ || ((params->average == AVE_4_PIX)
++ && (params->size_params.hsize % 4))
++ || ((params->average == AVE_8_PIX)
++ && (params->size_params.hsize % 8))) {
++ dev_err(prev_dev, "validate_params: "
++ "wrong pix average for input size\n");
++ goto err_einval;
++ }
++ }
++
++ if ((params->size_params.pixsize != PREV_INWIDTH_8BIT)
++ && (params->size_params.pixsize
++ != PREV_INWIDTH_10BIT)) {
++ dev_err(prev_dev, "validate_params: wrong pixsize\n");
++ goto err_einval;
++ }
++
++ if (params->size_params.hsize > MAX_IMAGE_WIDTH
++ || params->size_params.hsize < 0) {
++ dev_err(prev_dev, "validate_params: wrong hsize\n");
++ goto err_einval;
++ }
++
++ if ((params->pix_fmt != YCPOS_YCrYCb)
++ && (YCPOS_YCbYCr != params->pix_fmt)
++ && (YCPOS_CbYCrY != params->pix_fmt)
++ && (YCPOS_CrYCbY != params->pix_fmt)) {
++ dev_err(prev_dev, "validate_params: wrong pix_fmt");
++ goto err_einval;
++ }
++
++ if ((params->features & PREV_DARK_FRAME_SUBTRACT)
++ && (params->features
++ & PREV_DARK_FRAME_CAPTURE)) {
++ dev_err(prev_dev, "validate_params: DARK FRAME CAPTURE and "
++ "SUBSTRACT cannot be enabled "
++ "at same time\n");
++ goto err_einval;
++ }
++
++ if (params->features & PREV_DARK_FRAME_SUBTRACT)
++ if (!params->drkf_params.addr
++ || (params->drkf_params.offset % 32)) {
++ dev_err(prev_dev, "validate_params: dark frame "
++ "address\n");
++ goto err_einval;
++ }
++
++ if (params->features & PREV_LENS_SHADING)
++ if ((params->lens_shading_shift > 7)
++ || !params->drkf_params.addr
++ || (params->drkf_params.offset % 32)) {
++ dev_err(prev_dev, "validate_params: lens shading "
++ "shift\n");
++ goto err_einval;
++ }
++
++ if ((params->size_params.in_pitch <= 0)
++ || (params->size_params.in_pitch % 32)) {
++ params->size_params.in_pitch =
++ (params->size_params.hsize * 2) & 0xFFE0;
++ dev_err(prev_dev, "\nError in in_pitch; new value = %d",
++ params->size_params.in_pitch);
++ }
++
++ return 0;
++err_einval:
++ return -EINVAL;
++}
++
++/**
++ * preview_isr - Callback from ISP driver for ISP Preview Interrupt
++ * @status: ISP IRQ0STATUS register value
++ * @arg1: Structure containing ISP preview wrapper global information
++ * @arg2: Currently not used
++ **/
++static void preview_isr(unsigned long status, isp_vbq_callback_ptr arg1,
++ void *arg2)
++{
++ struct prev_device *device = (struct prev_device *)arg1;
++
++ if ((status & PREV_DONE) != PREV_DONE)
++ return;
++
++ if (device)
++ complete(&device->wfc);
++}
++
++/**
++ * prev_do_preview - Performs the Preview process
++ * @device: Structure containing ISP preview wrapper global information
++ * @arg: Currently not used
++ *
++ * Returns 0 if successful, or -EINVAL if the sent parameters are invalid.
++ **/
++static int prev_do_preview(struct prev_device *device, int *arg)
++{
++ int bpp, size;
++ int ret = 0;
++ u32 out_hsize, out_vsize, out_line_offset;
++
++ dev_dbg(prev_dev, "prev_do_preview E\n");
++
++ if (!device) {
++ dev_err(prev_dev, "preview: invalid parameters\n");
++ return -EINVAL;
++ }
++
++ if (device->params->size_params.pixsize == PREV_INWIDTH_8BIT)
++ bpp = 1;
++ else
++ bpp = 2;
++
++ size = device->params->size_params.hsize *
++ device->params->size_params.vsize * bpp;
++
++ ret = isppreview_set_inaddr(device->isp_addr_read);
++ if (ret)
++ goto out;
++
++ ret = isppreview_set_outaddr(device->isp_addr_read);
++ if (ret)
++ goto out;
++
++ isppreview_try_size(device->params->size_params.hsize,
++ device->params->size_params.vsize,
++ &out_hsize, &out_vsize);
++
++ ret = isppreview_config_inlineoffset(device->params->size_params.hsize
++ * bpp);
++ if (ret)
++ goto out;
++
++ out_line_offset = (out_hsize * bpp) & PREV_32BYTES_ALIGN_MASK;
++
++ ret = isppreview_config_outlineoffset(out_line_offset);
++ if (ret)
++ goto out;
++
++ ret = isppreview_config_size(device->params->size_params.hsize,
++ device->params->size_params.vsize,
++ out_hsize, out_vsize);
++ if (ret)
++ goto out;
++
++ isppreview_config_datapath(PRV_RAW_MEM, PREVIEW_MEM);
++
++ ret = isp_set_callback(CBK_PREV_DONE, preview_isr, (void *)device,
++ (void *)NULL);
++ if (ret) {
++ dev_err(prev_dev, "ERROR while setting Previewer callback!\n");
++ goto out;
++ }
++ isppreview_enable(1);
++
++ wait_for_completion_interruptible(&device->wfc);
++
++ if (device->isp_addr_read) {
++ ispmmu_unmap(device->isp_addr_read);
++ device->isp_addr_read = 0;
++ }
++
++ ret = isp_unset_callback(CBK_PREV_DONE);
++
++ dev_dbg(prev_dev, "prev_do_preview L\n");
++out:
++ return ret;
++}
++
++/**
++ * previewer_vbq_release - Videobuffer queue release
++ * @q: Structure containing the videobuffer queue.
++ * @vb: Structure containing the videobuffer used for previewer processing.
++ **/
++static void previewer_vbq_release(struct videobuf_queue *q,
++ struct videobuf_buffer *vb)
++{
++ struct prev_fh *fh = q->priv_data;
++ struct prev_device *device = fh->device;
++
++ ispmmu_unmap(device->isp_addr_read);
++ device->isp_addr_read = 0;
++ spin_lock(&device->vbq_lock);
++ vb->state = VIDEOBUF_NEEDS_INIT;
++ spin_unlock(&device->vbq_lock);
++ dev_dbg(prev_dev, "previewer_vbq_release\n");
++}
++
++/**
++ * previewer_vbq_setup - Sets up the videobuffer size and validates count.
++ * @q: Structure containing the videobuffer queue.
++ * @cnt: Number of buffers requested
++ * @size: Size in bytes of the buffer used for previewing
++ *
++ * Always returns 0.
++ **/
++static int previewer_vbq_setup(struct videobuf_queue *q,
++ unsigned int *cnt,
++ unsigned int *size)
++{
++ struct prev_fh *fh = q->priv_data;
++ struct prev_device *device = fh->device;
++ u32 bpp = 1;
++
++ spin_lock(&device->vbq_lock);
++ if (*cnt <= 0)
++ *cnt = VIDEO_MAX_FRAME;
++
++ if (*cnt > VIDEO_MAX_FRAME)
++ *cnt = VIDEO_MAX_FRAME;
++
++ if (!device->params->size_params.hsize ||
++ !device->params->size_params.vsize) {
++ dev_err(prev_dev, "Can't setup buffer size\n");
++ spin_unlock(&device->vbq_lock);
++ return -EINVAL;
++ }
++
++ if (device->params->size_params.pixsize == PREV_INWIDTH_10BIT)
++ bpp = 2;
++ *size = prev_bufsize = bpp * device->params->size_params.hsize
++ * device->params->size_params.vsize;
++ spin_unlock(&device->vbq_lock);
++ dev_dbg(prev_dev, "previewer_vbq_setup\n");
++ return 0;
++}
++
++/**
++ * previewer_vbq_prepare - Videobuffer is prepared and mmapped.
++ * @q: Structure containing the videobuffer queue.
++ * @vb: Structure containing the videobuffer used for previewer processing.
++ * @field: Type of field to set in videobuffer device.
++ *
++ * Returns 0 if successful, or -EINVAL if buffer couldn't get allocated, or
++ * -EIO if the ISP MMU mapping fails
++ **/
++static int previewer_vbq_prepare(struct videobuf_queue *q,
++ struct videobuf_buffer *vb,
++ enum v4l2_field field)
++{
++ struct prev_fh *fh = q->priv_data;
++ struct prev_device *device = fh->device;
++ int err = -EINVAL;
++ unsigned int isp_addr;
++ struct videobuf_dmabuf *dma = videobuf_to_dma(vb);
++
++ dev_dbg(prev_dev, "previewer_vbq_prepare E\n");
++ spin_lock(&device->vbq_lock);
++ if (vb->baddr) {
++ vb->size = prev_bufsize;
++ vb->bsize = prev_bufsize;
++ } else {
++ spin_unlock(&device->vbq_lock);
++ dev_err(prev_dev, "No user buffer allocated\n");
++ goto out;
++ }
++
++ vb->width = device->params->size_params.hsize;
++ vb->height = device->params->size_params.vsize;
++ vb->field = field;
++ spin_unlock(&device->vbq_lock);
++
++ if (vb->state == VIDEOBUF_NEEDS_INIT) {
++ err = videobuf_iolock(q, vb, NULL);
++ if (!err) {
++ isp_addr = ispmmu_map_sg(dma->sglist, dma->sglen);
++ if (!isp_addr)
++ err = -EIO;
++ else
++ device->isp_addr_read = isp_addr;
++ }
++ }
++
++ if (!err) {
++ vb->state = VIDEOBUF_PREPARED;
++ flush_cache_user_range(NULL, vb->baddr,
++ (vb->baddr + vb->bsize));
++ } else
++ previewer_vbq_release(q, vb);
++
++ dev_dbg(prev_dev, "previewer_vbq_prepare L\n");
++out:
++ return err;
++}
++
++static void previewer_vbq_queue(struct videobuf_queue *q,
++ struct videobuf_buffer *vb)
++{
++ return;
++}
++
++/**
++ * previewer_open - Initializes and opens the Preview Wrapper
++ * @inode: Inode structure associated with the Preview Wrapper
++ * @filp: File structure associated with the Preview Wrapper
++ *
++ * Returns 0 if successful, -EACCES if its unable to initialize default config,
++ * -EBUSY if its already opened or the ISP module is not available, or -ENOMEM
++ * if its unable to allocate the device in kernel space memory.
++ **/
++static int previewer_open(struct inode *inode, struct file *filp)
++{
++ int ret = 0;
++ struct prev_device *device = prevdevice;
++ struct prev_params *config = isppreview_get_config();
++ struct prev_fh *fh;
++
++ if (config == NULL) {
++ dev_err(prev_dev, "Unable to initialize default config "
++ "from isppreviewer\n\n");
++ return -EACCES;
++ }
++
++ if (device->opened || (filp->f_flags & O_NONBLOCK)) {
++ dev_err(prev_dev, "previewer_open: device is already "
++ "opened\n");
++ return -EBUSY;
++ }
++
++ fh = kzalloc(sizeof(struct prev_fh), GFP_KERNEL);
++ if (NULL == fh)
++ return -ENOMEM;
++
++ isp_get();
++ ret = isppreview_request();
++ if (ret) {
++ isp_put();
++ dev_err(prev_dev, "Can't acquire isppreview\n");
++ return ret;
++ }
++
++ device->params = config;
++ device->opened = 1;
++
++ filp->private_data = fh;
++ fh->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ fh->device = device;
++
++ videobuf_queue_pci_init(&fh->vbq, &device->vbq_ops, NULL,
++ &device->vbq_lock, fh->type,
++ V4L2_FIELD_NONE,
++ sizeof(struct videobuf_buffer), fh);
++
++ init_completion(&device->wfc);
++ device->wfc.done = 0;
++ mutex_init(&device->prevwrap_mutex);
++
++ return 0;
++}
++
++/**
++ * previewer_release - Releases Preview Wrapper and frees up allocated memory
++ * @inode: Inode structure associated with the Preview Wrapper
++ * @filp: File structure associated with the Preview Wrapper
++ *
++ * Always returns 0.
++ **/
++static int previewer_release(struct inode *inode, struct file *filp)
++{
++ struct prev_fh *fh = filp->private_data;
++ struct prev_device *device = fh->device;
++ struct videobuf_queue *q = &fh->vbq;
++
++ device->opened = 0;
++ device->params = NULL;
++ isppreview_free();
++ isp_put();
++ videobuf_mmap_free(q);
++ prev_bufsize = 0;
++ filp->private_data = NULL;
++ kfree(fh);
++
++ dev_dbg(prev_dev, "previewer_release\n");
++ return 0;
++}
++
++/**
++ * previewer_mmap - Memory maps the Preview Wrapper module.
++ * @file: File structure associated with the Preview Wrapper
++ * @vma: Virtual memory area structure.
++ *
++ * Returns 0 if successful, or returned value by the videobuf_mmap_mapper()
++ * function.
++ **/
++static int previewer_mmap(struct file *file, struct vm_area_struct *vma)
++{
++ struct prev_fh *fh = file->private_data;
++ dev_dbg(prev_dev, "previewer_mmap\n");
++
++ return videobuf_mmap_mapper(&fh->vbq, vma);
++}
++
++/**
++ * previewer_ioctl - I/O control function for Preview Wrapper
++ * @inode: Inode structure associated with the Preview Wrapper.
++ * @file: File structure associated with the Preview Wrapper.
++ * @cmd: Type of command to execute.
++ * @arg: Argument to send to requested command.
++ *
++ * Returns 0 if successful, -1 if bad command passed or access is denied,
++ * -EFAULT if copy_from_user() or copy_to_user() fails, -EINVAL if parameter
++ * validation fails or parameter structure is not present
++ **/
++static int previewer_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ int ret = 0;
++ struct prev_params params;
++ struct prev_fh *fh = file->private_data;
++ struct prev_device *device = fh->device;
++
++ dev_dbg(prev_dev, "Entering previewer_ioctl()\n");
++
++ if ((_IOC_TYPE(cmd) != PREV_IOC_BASE)
++ || (_IOC_NR(cmd) > PREV_IOC_MAXNR)) {
++ dev_err(prev_dev, "Bad command Value \n");
++ goto err_minusone;
++ }
++
++ if (_IOC_DIR(cmd) & _IOC_READ)
++ ret = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
++ else if (_IOC_DIR(cmd) & _IOC_WRITE)
++ ret = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
++ if (ret) {
++ dev_err(prev_dev, "access denied\n");
++ goto err_minusone;
++ }
++
++ switch (cmd) {
++ case PREV_REQBUF:
++ if (mutex_lock_interruptible(&device->prevwrap_mutex))
++ goto err_eintr;
++ ret = videobuf_reqbufs(&fh->vbq, (void *)arg);
++ mutex_unlock(&device->prevwrap_mutex);
++ break;
++
++ case PREV_QUERYBUF:
++ if (mutex_lock_interruptible(&device->prevwrap_mutex))
++ goto err_eintr;
++ ret = videobuf_querybuf(&fh->vbq, (void *)arg);
++ mutex_unlock(&device->prevwrap_mutex);
++ break;
++
++ case PREV_QUEUEBUF:
++ if (mutex_lock_interruptible(&device->prevwrap_mutex))
++ goto err_eintr;
++ ret = videobuf_qbuf(&fh->vbq, (void *)arg);
++ mutex_unlock(&device->prevwrap_mutex);
++ break;
++
++ case PREV_SET_PARAM:
++ if (mutex_lock_interruptible(&device->prevwrap_mutex))
++ goto err_eintr;
++ if (copy_from_user(&params, (struct prev_params *)arg,
++ sizeof(struct prev_params))) {
++ mutex_unlock(&device->prevwrap_mutex);
++ return -EFAULT;
++ }
++ ret = prev_validate_params(&params);
++ if (ret < 0) {
++ dev_err(prev_dev, "Error validating parameters!\n");
++ mutex_unlock(&device->prevwrap_mutex);
++ goto out;
++ }
++ if (device->params)
++ memcpy(device->params, &params,
++ sizeof(struct prev_params));
++ else {
++ mutex_unlock(&device->prevwrap_mutex);
++ return -EINVAL;
++ }
++
++ ret = prev_hw_setup(device->params);
++ mutex_unlock(&device->prevwrap_mutex);
++ break;
++
++ case PREV_GET_PARAM:
++ if (copy_to_user((struct prev_params *)arg, device->params,
++ sizeof(struct prev_params)))
++ ret = -EFAULT;
++ break;
++
++ case PREV_GET_STATUS:
++ ret = prev_get_status((struct prev_status *)arg);
++ break;
++
++ case PREV_PREVIEW:
++ if (mutex_lock_interruptible(&device->prevwrap_mutex))
++ goto err_eintr;
++ ret = prev_do_preview(device, (int *)arg);
++ mutex_unlock(&device->prevwrap_mutex);
++ break;
++
++ case PREV_GET_CROPSIZE:
++ {
++ struct prev_cropsize outputsize;
++ prev_calculate_crop(device, &outputsize);
++ if (copy_to_user((struct prev_cropsize *)arg, &outputsize,
++ sizeof(struct prev_cropsize)))
++ ret = -EFAULT;
++ }
++ break;
++
++ default:
++ dev_err(prev_dev, "previewer_ioctl: Invalid Command Value\n");
++ ret = -EINVAL;
++ }
++out:
++ return ret;
++err_minusone:
++ return -1;
++err_eintr:
++ return -EINTR;
++}
++
++/**
++ * previewer_platform_release - Acts when Reference count is zero
++ * @device: Structure containing ISP preview wrapper global information
++ *
++ * This is called when the reference count goes to zero
++ **/
++static void previewer_platform_release(struct device *device)
++{
++ dev_dbg(prev_dev, "previewer_platform_release()\n");
++}
++
++static struct file_operations prev_fops = {
++ .owner = THIS_MODULE,
++ .open = previewer_open,
++ .release = previewer_release,
++ .mmap = previewer_mmap,
++ .ioctl = previewer_ioctl,
++};
++
++static struct platform_device omap_previewer_device = {
++ .name = OMAP_PREV_NAME,
++ .id = -1,
++ .dev = {
++ .release = previewer_platform_release,
++ }
++};
++
++/**
++ * previewer_probe - Checks for device presence
++ * @pdev: Structure containing details of the current device.
++ *
++ * Always returns 0
++ **/
++static int __init previewer_probe(struct platform_device *pdev)
++{
++ return 0;
++}
++
++/**
++ * previewer_remove - Handles the removal of the driver
++ * @pdev: Structure containing details of the current device.
++ *
++ * Always returns 0.
++ **/
++static int previewer_remove(struct platform_device *pdev)
++{
++ dev_dbg(prev_dev, "previewer_remove()\n");
++
++ platform_device_unregister(&omap_previewer_device);
++ platform_driver_unregister(&omap_previewer_driver);
++ unregister_chrdev(prev_major, OMAP_PREV_NAME);
++ return 0;
++}
++
++static struct platform_driver omap_previewer_driver = {
++ .probe = previewer_probe,
++ .remove = previewer_remove,
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = OMAP_PREV_NAME,
++ },
++};
++
++/**
++ * omap_previewer_init - Initialization of Preview Wrapper
++ *
++ * Returns 0 if successful, -ENOMEM if could not allocate memory, -ENODEV if
++ * could not register the wrapper as a character device, or other errors if the
++ * device or driver can't register.
++ **/
++static int __init omap_previewer_init(void)
++{
++ int ret;
++ struct prev_device *device;
++
++ device = kzalloc(sizeof(struct prev_device), GFP_KERNEL);
++ if (!device) {
++ dev_err(prev_dev, OMAP_PREV_NAME ": could not allocate"
++ " memory\n");
++ return -ENOMEM;
++ }
++ prev_major = register_chrdev(0, OMAP_PREV_NAME, &prev_fops);
++
++ if (prev_major < 0) {
++ dev_err(prev_dev, OMAP_PREV_NAME ": initialization "
++ "failed. could not register character "
++ "device\n");
++ return -ENODEV;
++ }
++
++ ret = platform_driver_register(&omap_previewer_driver);
++ if (ret) {
++ dev_err(prev_dev, OMAP_PREV_NAME
++ ": failed to register platform driver!\n");
++ goto fail2;
++ }
++ ret = platform_device_register(&omap_previewer_device);
++ if (ret) {
++ dev_err(prev_dev, OMAP_PREV_NAME
++ ": failed to register platform device!\n");
++ goto fail3;
++ }
++
++ prev_class = class_create(THIS_MODULE, OMAP_PREV_NAME);
++ if (!prev_class)
++ goto fail4;
++
++ prev_dev = device_create(prev_class, prev_dev, (MKDEV(prev_major, 0)),
++ OMAP_PREV_NAME);
++ dev_dbg(prev_dev, OMAP_PREV_NAME ": Registered Previewer Wrapper\n");
++ device->opened = 0;
++
++ device->vbq_ops.buf_setup = previewer_vbq_setup;
++ device->vbq_ops.buf_prepare = previewer_vbq_prepare;
++ device->vbq_ops.buf_release = previewer_vbq_release;
++ device->vbq_ops.buf_queue = previewer_vbq_queue;
++ spin_lock_init(&device->vbq_lock);
++
++ prevdevice = device;
++ return 0;
++
++fail4:
++ platform_device_unregister(&omap_previewer_device);
++fail3:
++ platform_driver_unregister(&omap_previewer_driver);
++fail2:
++ unregister_chrdev(prev_major, OMAP_PREV_NAME);
++
++ return ret;
++}
++
++/**
++ * omap_previewer_exit - Close of Preview Wrapper
++ **/
++static void __exit omap_previewer_exit(void)
++{
++ previewer_remove(&omap_previewer_device);
++ kfree(prevdevice);
++ prev_major = -1;
++}
++
++module_init(omap_previewer_init);
++module_exit(omap_previewer_exit);
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("OMAP ISP Previewer");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/omap_previewer.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/omap_previewer.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,136 @@
++/*
++ * drivers/media/video/isp/omap_previewer.h
++ *
++ * Include file for Preview module wrapper in TI's OMAP3430 ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include "isppreview.h"
++
++#ifndef OMAP_ISP_PREVIEW_WRAP_H
++#define OMAP_ISP_PREVIEW_WRAP_H
++
++#define PREV_IOC_BASE 'P'
++#define PREV_REQBUF _IOWR(PREV_IOC_BASE, 1,\
++ struct v4l2_requestbuffers)
++#define PREV_QUERYBUF _IOWR(PREV_IOC_BASE, 2,\
++ struct v4l2_buffer)
++#define PREV_SET_PARAM _IOW(PREV_IOC_BASE, 3,\
++ struct prev_params)
++#define PREV_GET_PARAM _IOWR(PREV_IOC_BASE, 4,\
++ struct prev_params)
++#define PREV_PREVIEW _IOR(PREV_IOC_BASE, 5, int)
++#define PREV_GET_STATUS _IOR(PREV_IOC_BASE, 6, char)
++#define PREV_GET_CROPSIZE _IOR(PREV_IOC_BASE, 7,\
++ struct prev_cropsize)
++#define PREV_QUEUEBUF _IOWR(PREV_IOC_BASE, 8,\
++ struct v4l2_buffer)
++#define PREV_IOC_MAXNR 8
++
++#define LUMA_TABLE_SIZE 128
++#define GAMMA_TABLE_SIZE 1024
++#define CFA_COEFF_TABLE_SIZE 576
++#define NOISE_FILTER_TABLE_SIZE 256
++
++#define MAX_IMAGE_WIDTH 3300
++
++#define PREV_INWIDTH_8BIT 0 /* pixel width of 8 bitS */
++#define PREV_INWIDTH_10BIT 1 /* pixel width of 10 bits */
++
++#define PREV_32BYTES_ALIGN_MASK 0xFFFFFFE0
++#define PREV_16PIX_ALIGN_MASK 0xFFFFFFF0
++
++/* list of structures */
++
++/* structure for RGB2RGB blending parameters */
++struct prev_rgbblending {
++ short blending[RGB_MAX][RGB_MAX]; /* color correlation 3x3
++ * matrix.
++ */
++ short offset[RGB_MAX]; /* color correlation offsets */
++};
++
++/* structure for CFA coefficients */
++struct prev_cfa_coeffs {
++ char hthreshold, vthreshold; /* horizontal an vertical
++ * threshold.
++ */
++ int coeffs[CFA_COEFF_TABLE_SIZE]; /* cfa coefficients */
++};
++/* structure for Gamma Coefficients */
++struct prev_gamma_coeffs {
++ unsigned char red[GAMMA_TABLE_SIZE]; /* table of gamma correction
++ * values for red color.
++ */
++ unsigned char green[GAMMA_TABLE_SIZE]; /* table of gamma correction
++ * values for green color.
++ */
++ unsigned char blue[GAMMA_TABLE_SIZE]; /* table of gamma correction
++ * values for blue color.
++ */
++};
++/* Structure for Noise Filter Coefficients */
++struct prev_noiseflt_coeffs {
++ unsigned char noise[NOISE_FILTER_TABLE_SIZE]; /* noise filter
++ * table.
++ */
++ unsigned char strength; /* to find out
++ * weighted average.
++ */
++};
++
++/* Structure for Chroma Suppression */
++struct prev_chroma_spr {
++ unsigned char hpfy; /* whether to use high passed
++ * version of Y or normal Y
++ */
++ char threshold; /* threshold for chroma
++ * suppress.
++ */
++ unsigned char gain; /* chroma suppression gain */
++};
++
++/* structure to know status of the hardware */
++struct prev_status {
++ char hw_busy;
++};
++/* structure to knwo crop size */
++struct prev_cropsize {
++ int hcrop;
++ int vcrop;
++};
++
++
++/* device structure keeps track of global information */
++struct prev_device {
++ struct prev_params *params;
++ unsigned char opened; /* state of the device */
++
++ struct completion wfc;
++ struct mutex prevwrap_mutex;
++
++ spinlock_t vbq_lock; /* spinlock for videobuf
++ * queues.
++ */
++ struct videobuf_queue_ops vbq_ops; /* videobuf queue operations */
++
++ dma_addr_t isp_addr_read; /* Input/Output address */
++
++};
++
++/* per-filehandle data structure */
++struct prev_fh {
++ enum v4l2_buf_type type;
++ struct videobuf_queue vbq;
++ struct prev_device *device;
++};
++#endif
+Index: git/drivers/media/video/isp/omap_resizer.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/omap_resizer.c 2009-02-12 14:48:11.000000000 -0600
+@@ -0,0 +1,1812 @@
++/*
++ * drivers/media/video/isp/omap_resizer.c
++ *
++ * Wrapper for Resizer module in TI's OMAP3430 ISP
++ *
++ * Copyright (C) 2007 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#include <linux/mutex.h>
++#include <linux/cdev.h>
++#include <linux/delay.h>
++#include <linux/device.h>
++#include <linux/fs.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/time.h>
++#include <media/v4l2-dev.h>
++#include <asm/cacheflush.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++#include <mach/io.h>
++#include <asm/scatterlist.h>
++#include <linux/pci.h>
++#include "isp.h"
++#include "ispmmu.h"
++#include "ispreg.h"
++#include "ispresizer.h"
++#include <linux/omap_resizer.h>
++
++#define OMAP_REZR_NAME "omap-resizer"
++
++/* Defines and Constants*/
++#define MAX_CHANNELS 16
++#define MAX_IMAGE_WIDTH 2047
++#define MAX_IMAGE_WIDTH_HIGH 2047
++#define ALIGNMENT 16
++#define CHANNEL_BUSY 1
++#define CHANNEL_FREE 0
++#define PIXEL_EVEN 2
++#define RATIO_MULTIPLIER 256
++/* Bit position Macro */
++/* macro for bit set and clear */
++#define BITSET(variable, bit) (variable) | (1 << bit)
++#define BITRESET(variable, bit) (variable) & ~(0x00000001 << (bit))
++#define SET_BIT_INPUTRAM 28
++#define SET_BIT_CBLIN 29
++#define SET_BIT_INPTYP 27
++#define SET_BIT_YCPOS 26
++#define INPUT_RAM 1
++#define UP_RSZ_RATIO 64
++#define DOWN_RSZ_RATIO 512
++#define UP_RSZ_RATIO1 513
++#define DOWN_RSZ_RATIO1 1024
++#define RSZ_IN_SIZE_VERT_SHIFT 16
++#define MAX_HORZ_PIXEL_8BIT 31
++#define MAX_HORZ_PIXEL_16BIT 15
++#define NUM_PHASES 8
++#define NUM_TAPS 4
++#define NUM_D2PH 4 /* for downsampling * 2+x ~ 4x,
++ * number of phases
++ */
++#define NUM_D2TAPS 7 /* for downsampling * 2+x ~ 4x,
++ * number of taps
++ */
++#define ALIGN32 32
++#define MAX_COEF_COUNTER 16
++#define COEFF_ADDRESS_OFFSET 0x04
++
++#define RSZ_DEF_REQ_EXP 0xE /* Default read operation expand
++ * for the Resizer driver; value
++ * taken from Davinci.
++ */
++/*
++ * These magic numbers are copied from video-buf layer,
++ * since they gets set in to the same layer. To support
++ * contiguous memory and to remove max buffer size constraint from
++ * application, we implemented replication of some video-buf functions
++ * so magic numbers also.
++ */
++#define MAGIC_BUFFER 0x20070728
++#define MAGIC_DMABUF 0x19721112
++#define MAGIC_SG_MEM 0x17890714
++#define MAGIC_CHECK(is,should) if (unlikely((is) != (should))) \
++ { printk(KERN_ERR "magic mismatch: %x (expected %x)\n",is,should); BUG(); }
++
++/* Global structure which contains information about number of channels
++ and protection variables */
++struct device_params {
++
++ struct mutex reszwrap_mutex; /* Semaphore for array */
++ struct completion compl_isr; /* Completion for interrupt */
++ struct videobuf_queue_ops vbq_ops; /* videobuf queue operations */
++};
++
++/* Register mapped structure which contains the every register
++ information */
++struct resizer_config {
++ u32 rsz_pcr; /* pcr register mapping
++ * variable.
++ */
++ u32 rsz_in_start; /* in_start register mapping
++ * variable.
++ */
++ u32 rsz_in_size; /* in_size register mapping
++ * variable.
++ */
++ u32 rsz_out_size; /* out_size register mapping
++ * variable.
++ */
++ u32 rsz_cnt; /* rsz_cnt register mapping
++ * variable.
++ */
++ u32 rsz_sdr_inadd; /* sdr_inadd register mapping
++ * variable.
++ */
++ u32 rsz_sdr_inoff; /* sdr_inoff register mapping
++ * variable.
++ */
++ u32 rsz_sdr_outadd; /* sdr_outadd register mapping
++ * variable.
++ */
++ u32 rsz_sdr_outoff; /* sdr_outbuff register
++ * mapping variable.
++ */
++ u32 rsz_coeff_horz[16]; /* horizontal coefficients
++ * mapping array.
++ */
++ u32 rsz_coeff_vert[16]; /* vertical coefficients
++ * mapping array.
++ */
++ u32 rsz_yehn; /* yehn(luma)register mapping
++ * variable.
++ */
++ u32 sdr_req_exp; /* Configuration for Non
++ * real time read expand
++ */
++};
++struct rsz_mult {
++ s32 in_hsize; /* input frame horizontal
++ * size.
++ */
++ s32 in_vsize; /* input frame vertical size.
++ */
++ s32 out_hsize; /* output frame horizontal
++ * size.
++ */
++ s32 out_vsize; /* output frame vertical
++ * size.
++ */
++ s32 in_pitch; /* offset between two rows of
++ * input frame.
++ */
++ s32 out_pitch; /* offset between two rows of
++ * output frame.
++ */
++ s32 end_hsize;
++ s32 end_vsize;
++ s32 num_htap; /* 0 = 7tap; 1 = 4tap */
++ s32 num_vtap; /* 0 = 7tap; 1 = 4tap */
++ s32 active;
++ s32 inptyp;
++ s32 vrsz;
++ s32 hrsz;
++ s32 hstph; /* for specifying horizontal
++ * starting phase.
++ */
++ s32 vstph;
++ s32 pix_fmt; /* # defined, UYVY or YUYV. */
++ s32 cbilin; /* # defined, filter with luma
++ * or bi-linear.
++ */
++ u16 tap4filt_coeffs[32]; /* horizontal filter
++ * coefficients.
++ */
++ u16 tap7filt_coeffs[32]; /* vertical filter
++ * coefficients.
++ */
++};
++/* Channel specific structure contains information regarding
++ the every channel */
++struct channel_config {
++ struct resizer_config register_config; /* Instance of register set
++ * mapping structure
++ */
++ int status; /* Specifies whether the
++ * channel is busy or not
++ */
++ struct mutex chanprotection_mutex; /* Pointer to channel
++ * specific protection
++ */
++ int buf_address[VIDEO_MAX_FRAME];
++ enum config_done config_state;
++ u8 input_buf_index, output_buf_index;
++
++};
++
++/* per-filehandle data structure */
++struct rsz_fh {
++ struct rsz_params *params;
++ struct channel_config *config; /* Pointer to channel
++ * configuration.
++ */
++ enum v4l2_buf_type type;
++ struct videobuf_queue vbq;
++ struct device_params *device;
++ dma_addr_t isp_addr_read; /* Input/Output address */
++ dma_addr_t isp_addr_write; /* Input/Output address */
++ struct rsz_mult *multipass; /* Multipass to support
++ * resizing ration outside
++ * of 0.25x to 4x
++ */
++ spinlock_t vbq_lock; /* spinlock for videobuf
++ * queues.
++ */
++ u32 rsz_bufsize; /* channel specific buffersize
++ */
++};
++
++static struct device_params *device_config;
++static struct device *rsz_device;
++static int rsz_major = -1;
++/* functions declaration */
++static void rsz_hardware_setup(struct channel_config *rsz_conf_chan);
++static int rsz_set_params(struct rsz_mult *multipass, struct rsz_params *,
++ struct channel_config *);
++static int rsz_get_params(struct rsz_params *, struct channel_config *);
++static void rsz_copy_data(struct rsz_mult *multipass,
++ struct rsz_params *params);
++static void rsz_isr(unsigned long status, isp_vbq_callback_ptr arg1,
++ void *arg2);
++static void rsz_calculate_crop(struct channel_config *rsz_conf_chan,
++ struct rsz_cropsize *cropsize);
++static int rsz_set_multipass(struct rsz_mult *multipass,
++ struct channel_config *rsz_conf_chan);
++static int rsz_set_ratio(struct rsz_mult *multipass,
++ struct channel_config *rsz_conf_chan);
++static void rsz_config_ratio(struct rsz_mult *multipass,
++ struct channel_config *rsz_conf_chan);
++
++/*
++ * resizer_busy - Enables the Resizer driver
++ */
++static int inline resizer_busy(void)
++{
++ return (omap_readl(ISPRSZ_PCR) & ISPPRV_PCR_BUSY);
++}
++
++static void inline rsz_set_exp(unsigned int exp)
++{
++ omap_writel(((exp & 0x3FF) << 10), ISPSBL_REG_BASE+0xF8);
++}
++/**
++ * rsz_hardware_setup - Sets hardware configuration registers
++ * @rsz_conf_chan: Structure containing channel configuration
++ *
++ * Set hardware configuration registers
++ **/
++static void rsz_hardware_setup(struct channel_config *rsz_conf_chan)
++{
++ int coeffcounter;
++ int coeffoffset = 0;
++
++ omap_writel(rsz_conf_chan->register_config.rsz_cnt, ISPRSZ_CNT);
++
++ omap_writel(rsz_conf_chan->register_config.rsz_in_start,
++ ISPRSZ_IN_START);
++ omap_writel(rsz_conf_chan->register_config.rsz_in_size,
++ ISPRSZ_IN_SIZE);
++
++ omap_writel(rsz_conf_chan->register_config.rsz_out_size,
++ ISPRSZ_OUT_SIZE);
++ omap_writel(rsz_conf_chan->register_config.rsz_sdr_inadd,
++ ISPRSZ_SDR_INADD);
++ omap_writel(rsz_conf_chan->register_config.rsz_sdr_inoff,
++ ISPRSZ_SDR_INOFF);
++ omap_writel(rsz_conf_chan->register_config.rsz_sdr_outadd,
++ ISPRSZ_SDR_OUTADD);
++ omap_writel(rsz_conf_chan->register_config.rsz_sdr_outoff,
++ ISPRSZ_SDR_OUTOFF);
++ omap_writel(rsz_conf_chan->register_config.rsz_yehn, ISPRSZ_YENH);
++
++ for (coeffcounter = 0; coeffcounter < MAX_COEF_COUNTER;
++ coeffcounter++) {
++ omap_writel(rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter],
++ ISPRSZ_HFILT10 + coeffoffset);
++
++ omap_writel(rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter],
++ ISPRSZ_VFILT10 + coeffoffset);
++ coeffoffset = coeffoffset + COEFF_ADDRESS_OFFSET;
++ }
++ /* Configure the read expand register */
++ rsz_set_exp(rsz_conf_chan->register_config.sdr_req_exp);
++}
++
++/**
++ * rsz_start - Enables Resizer Wrapper
++ * @arg: Currently not used.
++ * @fh: File structure containing ISP resizer information specific to
++ * channel opened.
++ *
++ * Submits a resizing task specified by the rsz_resize structure. The call can
++ * either be blocked until the task is completed or returned immediately based
++ * on the value of the blocking argument in the rsz_resize structure. If it is
++ * blocking, the status of the task can be checked by calling ioctl
++ * RSZ_G_STATUS. Only one task can be outstanding for each logical channel.
++ *
++ * Returns 0 if successful, or -EINVAL if could not set callback for RSZR IRQ
++ * event or the state of the channel is not configured.
++ **/
++int rsz_start(int *arg, struct rsz_fh *fh)
++{
++ struct channel_config *rsz_conf_chan = fh->config;
++ struct rsz_mult *multipass = fh->multipass;
++ struct videobuf_queue *q = &fh->vbq;
++ struct videobuf_buffer *buf;
++ int ret;
++
++ if (rsz_conf_chan->config_state) {
++ dev_err(rsz_device, "State not configured \n");
++ goto err_einval;
++ }
++ if(!rsz_conf_chan->register_config.rsz_sdr_inadd ||
++ !rsz_conf_chan->register_config.rsz_sdr_outadd) {
++ dev_err(rsz_device, "address is null\n");
++ goto err_einval;
++ }
++
++ rsz_conf_chan->status = CHANNEL_BUSY;
++ rsz_hardware_setup(rsz_conf_chan);
++ if (isp_set_callback(CBK_RESZ_DONE, rsz_isr, (void *) NULL,
++ (void *)NULL)) {
++ dev_err(rsz_device, "No callback for RSZR\n");
++ goto err_einval;
++ }
++mult:
++ device_config->compl_isr.done = 0;
++ ispresizer_enable(1);
++ ret = wait_for_completion_interruptible(&device_config->compl_isr);
++ if (ret != 0) {
++ dev_dbg(rsz_device, "Unexpected exit from "
++ "wait_for_completion_interruptible\n");
++ wait_for_completion(&device_config->compl_isr);
++ }
++
++ if (multipass->active) {
++ rsz_set_multipass(multipass, rsz_conf_chan);
++ goto mult;
++ }
++
++ rsz_conf_chan->status = CHANNEL_FREE;
++ rsz_conf_chan->register_config.rsz_sdr_outadd = 0;
++ rsz_conf_chan->register_config.rsz_sdr_inadd = 0;
++
++ isp_unset_callback(CBK_RESZ_DONE);
++
++ /* Empty the Videobuf queue which was filled during the qbuf */
++ buf = q->bufs[rsz_conf_chan->input_buf_index];
++ buf->state = VIDEOBUF_IDLE;
++ list_del(&buf->stream);
++ if (rsz_conf_chan->input_buf_index != rsz_conf_chan->output_buf_index) {
++ buf = q->bufs[rsz_conf_chan->output_buf_index];
++ buf->state = VIDEOBUF_IDLE;
++ list_del(&buf->stream);
++ }
++
++ return 0;
++err_einval:
++ return -EINVAL;
++}
++
++/**
++ * rsz_set_multipass - Set resizer multipass
++ * @fh: File structure containing ISP resizer information specific to
++ * channel opened.
++ * @rsz_conf_chan: Structure containing channel configuration
++ *
++ * Returns always 0
++ **/
++static int rsz_set_multipass(struct rsz_mult *multipass,
++ struct channel_config *rsz_conf_chan)
++{
++ multipass->in_hsize = multipass->out_hsize;
++ multipass->in_vsize = multipass->out_vsize;
++ multipass->out_hsize = multipass->end_hsize;
++ multipass->out_vsize = multipass->end_vsize;
++
++ multipass->out_pitch = (multipass->inptyp ? multipass->out_hsize
++ : (multipass->out_hsize * 2));
++ multipass->in_pitch = (multipass->inptyp ? multipass->in_hsize
++ : (multipass->in_hsize * 2));
++
++ rsz_set_ratio(multipass, rsz_conf_chan);
++ rsz_config_ratio(multipass, rsz_conf_chan);
++ rsz_hardware_setup(rsz_conf_chan);
++ return 0;
++}
++
++/**
++ * rsz_copy_data - Copy data
++ * @fh: File structure containing ISP resizer information specific to
++ * channel opened.
++ * @params: Structure containing the Resizer Wrapper parameters
++ *
++ * Copy data
++ **/
++static void rsz_copy_data(struct rsz_mult *multipass, struct rsz_params *params)
++{
++ int i;
++ multipass->in_hsize = params->in_hsize;
++ multipass->in_vsize = params->in_vsize;
++ multipass->out_hsize = params->out_hsize;
++ multipass->out_vsize = params->out_vsize;
++ multipass->end_hsize = params->out_hsize;
++ multipass->end_vsize = params->out_vsize;
++ multipass->in_pitch = params->in_pitch;
++ multipass->out_pitch = params->out_pitch;
++ multipass->hstph = params->hstph;
++ multipass->vstph = params->vstph;
++ multipass->inptyp = params->inptyp;
++ multipass->pix_fmt = params->pix_fmt;
++ multipass->cbilin = params->cbilin;
++
++ for (i = 0; i < 32; i++) {
++ multipass->tap4filt_coeffs[i] = params->tap4filt_coeffs[i];
++ multipass->tap7filt_coeffs[i] = params->tap7filt_coeffs[i];
++ }
++}
++
++/**
++ * rsz_set_params - Set parameters for resizer wrapper
++ * @fh: File structure containing ISP resizer information specific to
++ * channel opened.
++ * @params: Structure containing the Resizer Wrapper parameters
++ * @rsz_conf_chan: Structure containing channel configuration
++ *
++ * Used to set the parameters of the Resizer hardware, including input and
++ * output image size, horizontal and vertical poly-phase filter coefficients,
++ * luma enchancement filter coefficients, etc.
++ **/
++static int rsz_set_params(struct rsz_mult *multipass, struct rsz_params *params,
++ struct channel_config *rsz_conf_chan)
++{
++ int mul = 1;
++ if(params->yenh_params.type < 0 || params->yenh_params.type > 2) {
++ dev_err(rsz_device, "rsz_set_params:Wrong yenh type\n");
++ return -EINVAL;
++ }
++ if(params->in_vsize <= 0 || params->in_hsize <= 0 ||
++ params->out_vsize <= 0 || params->out_hsize <= 0 ||
++ params->in_pitch <= 0 || params->out_pitch <= 0) {
++ dev_err(rsz_device,"rsz_set_size:invalid size params\n");
++ return -EINVAL;
++ }
++ if((params->inptyp != RSZ_INTYPE_YCBCR422_16BIT) &&
++ (params->inptyp != RSZ_INTYPE_PLANAR_8BIT)){
++ dev_err(rsz_device, "Invalid input type\n");
++ return -EINVAL;
++ }
++ if((params->pix_fmt != RSZ_PIX_FMT_UYVY) &&
++ (params->pix_fmt != RSZ_PIX_FMT_YUYV)) {
++ dev_err(rsz_device, "Invalid pix_fmt\n");
++ return -EINVAL;
++ }
++ if(params->inptyp == RSZ_INTYPE_YCBCR422_16BIT)
++ mul = 2;
++ else
++ mul = 1;
++ if(params->in_pitch < (params->in_hsize * mul)) {
++ dev_err(rsz_device, "pitch is incorrect\n");
++ return -EINVAL;
++ }
++ if(params->out_pitch < (params->out_hsize * mul)) {
++ dev_err(rsz_device,"out pitch is less than out hsize\n");
++ return -EINVAL;
++ }
++ /* Output h size should be even */
++ if((params->out_hsize % PIXEL_EVEN) != 0) {
++ dev_err(rsz_device, "output h size should be even\n");
++ return -EINVAL;
++ }
++ if(params->horz_starting_pixel < 0) {
++ dev_err(rsz_device, "horz start pixel cannot be less \
++ that zero\n");
++ return -EINVAL;
++ }
++
++ rsz_copy_data(multipass, params);
++ if (0 != rsz_set_ratio(multipass, rsz_conf_chan))
++ goto err_einval;
++
++ if(params->yenh_params.type) {
++ if((multipass->num_htap && multipass->out_hsize >
++ 1280 ) ||
++ (!multipass->num_htap && multipass->out_hsize >
++ 640))
++ goto err_einval;
++ }
++ if ((multipass->in_pitch) % ALIGN32) {
++ dev_err(rsz_device, "Invalid input pitch: %d \n",
++ multipass->in_pitch);
++ goto err_einval;
++ }
++ if ((multipass->out_pitch) % ALIGN32) {
++ dev_err(rsz_device, "Invalid output pitch %d \n",
++ multipass->out_pitch);
++ goto err_einval;
++ }
++
++ if (INPUT_RAM)
++ params->vert_starting_pixel = 0;
++
++ rsz_conf_chan->register_config.rsz_in_start =
++ (params->vert_starting_pixel
++ << ISPRSZ_IN_SIZE_VERT_SHIFT)
++ & ISPRSZ_IN_SIZE_VERT_MASK;
++
++ if (params->inptyp == RSZ_INTYPE_PLANAR_8BIT) {
++ if (params->horz_starting_pixel > MAX_HORZ_PIXEL_8BIT)
++ goto err_einval;
++ }
++ if (params->inptyp == RSZ_INTYPE_YCBCR422_16BIT) {
++ if (params->horz_starting_pixel > MAX_HORZ_PIXEL_16BIT)
++ goto err_einval;
++ }
++
++ rsz_conf_chan->register_config.rsz_in_start |=
++ params->horz_starting_pixel
++ & ISPRSZ_IN_START_HORZ_ST_MASK;
++
++ rsz_conf_chan->register_config.rsz_yehn =
++ (params->yenh_params.type
++ << ISPRSZ_YENH_ALGO_SHIFT)
++ & ISPRSZ_YENH_ALGO_MASK;
++
++ if (params->yenh_params.type) {
++ rsz_conf_chan->register_config.rsz_yehn |=
++ params->yenh_params.core
++ & ISPRSZ_YENH_CORE_MASK;
++
++ rsz_conf_chan->register_config.rsz_yehn |=
++ (params->yenh_params.gain
++ << ISPRSZ_YENH_GAIN_SHIFT)
++ & ISPRSZ_YENH_GAIN_MASK;
++
++ rsz_conf_chan->register_config.rsz_yehn |=
++ (params->yenh_params.slop
++ << ISPRSZ_YENH_SLOP_SHIFT)
++ & ISPRSZ_YENH_SLOP_MASK;
++ }
++
++ rsz_config_ratio(multipass, rsz_conf_chan);
++ /* Default value for read expand:Taken from Davinci */
++ rsz_conf_chan->register_config.sdr_req_exp = RSZ_DEF_REQ_EXP;
++
++ rsz_conf_chan->config_state = STATE_CONFIGURED;
++
++ return 0;
++err_einval:
++ return -EINVAL;
++}
++
++/**
++ * rsz_set_ratio - Set ratio
++ * @fh: File structure containing ISP resizer information specific to
++ * channel opened.
++ * @rsz_conf_chan: Structure containing channel configuration
++ *
++ * Returns 0 if successful, -EINVAL if invalid output size, upscaling ratio is
++ * being requested, or other ratio configuration value is out of bounds
++ **/
++static int rsz_set_ratio(struct rsz_mult *multipass,
++ struct channel_config *rsz_conf_chan)
++{
++ int alignment = 0, hrsz, vrsz;
++ rsz_conf_chan->register_config.rsz_cnt = 0;
++ if ((multipass->out_hsize > MAX_IMAGE_WIDTH) ||
++ (multipass->out_vsize > MAX_IMAGE_WIDTH)) {
++ dev_err(rsz_device, "Invalid output size!");
++ goto err_einval;
++ }
++ if (multipass->cbilin) {
++ rsz_conf_chan->register_config.rsz_cnt =
++ BITSET(rsz_conf_chan->register_config.rsz_cnt,
++ SET_BIT_CBLIN);
++ }
++ if (INPUT_RAM) {
++ rsz_conf_chan->register_config.rsz_cnt =
++ BITSET(rsz_conf_chan->register_config.rsz_cnt,
++ SET_BIT_INPUTRAM);
++ }
++ if (multipass->inptyp == RSZ_INTYPE_PLANAR_8BIT) {
++ rsz_conf_chan->register_config.rsz_cnt =
++ BITSET(rsz_conf_chan->register_config.rsz_cnt,
++ SET_BIT_INPTYP);
++ } else {
++ rsz_conf_chan->register_config.rsz_cnt =
++ BITRESET(rsz_conf_chan->register_config.
++ rsz_cnt, SET_BIT_INPTYP);
++ if (multipass->pix_fmt == RSZ_PIX_FMT_UYVY) {
++ rsz_conf_chan->register_config.rsz_cnt =
++ BITRESET(rsz_conf_chan->register_config.
++ rsz_cnt, SET_BIT_YCPOS);
++ } else if (multipass->pix_fmt == RSZ_PIX_FMT_YUYV) {
++ rsz_conf_chan->register_config.rsz_cnt =
++ BITSET(rsz_conf_chan->register_config.
++ rsz_cnt, SET_BIT_YCPOS);
++ }
++
++ }
++ hrsz = (multipass->in_hsize * RATIO_MULTIPLIER) / multipass->out_hsize;
++ vrsz = (multipass->in_vsize * RATIO_MULTIPLIER) / multipass->out_vsize;
++ if(hrsz < 64 || hrsz > 1024 || vrsz < 64 || vrsz > 1024){
++ dev_err(rsz_device,"Wrong Resizing Ratio\n");
++ goto err_einval;
++ }
++
++ vrsz = multipass->vrsz = (multipass->in_vsize - NUM_D2TAPS) *
++ RATIO_MULTIPLIER / (multipass->out_vsize - 1);
++ hrsz = multipass->hrsz = ((multipass->in_hsize - NUM_D2TAPS) *
++ RATIO_MULTIPLIER) / (multipass->out_hsize - 1);
++
++ /* For Width */
++ if (multipass->hrsz <= 512) {
++ hrsz = multipass->hrsz = (multipass->in_hsize - NUM_TAPS)
++ * RATIO_MULTIPLIER
++ / (multipass->out_hsize - 1);
++ if (multipass->hrsz < 64)
++ multipass->hrsz = 64;
++ if (multipass->hrsz > 512)
++ multipass->hrsz = 512;
++ if (multipass->hstph > NUM_PHASES)
++ goto err_einval;
++ multipass->num_htap = 1;
++ } else if (multipass->hrsz >= 513 && multipass->hrsz <= 1024) {
++ if (multipass->hstph > NUM_D2PH)
++ goto err_einval;
++ multipass->num_htap = 0;
++ }
++ /* For Height */
++ if (multipass->vrsz <= 512) {
++ vrsz = multipass->vrsz = (multipass->in_vsize - NUM_TAPS)
++ * RATIO_MULTIPLIER
++ / (multipass->out_vsize - 1);
++ if (multipass->vrsz < 64)
++ multipass->vrsz = 64;
++ if (multipass->vrsz > 512)
++ multipass->vrsz = 512;
++ if (multipass->vstph > NUM_PHASES)
++ goto err_einval;
++ multipass->num_vtap = 1;
++ } else if (multipass->vrsz >= 513 && multipass->vrsz <= 1024) {
++ if (multipass->vstph > NUM_D2PH)
++ goto err_einval;
++ multipass->num_vtap = 0;
++ }
++ if(vrsz >= 64 && vrsz <= 512) {
++ if(multipass->out_hsize > 3300) {
++ dev_err(rsz_device, "wrong output hsize\n");
++ goto err_einval;
++ }
++ } else {
++ if(multipass->out_hsize > 1650) {
++ dev_err(rsz_device, "wrong output hsize\n");
++ goto err_einval;
++ }
++ }
++
++ if (multipass->vrsz < 256 &&
++ (multipass->in_vsize < multipass->out_vsize)) {
++ if (multipass->inptyp == RSZ_INTYPE_PLANAR_8BIT) {
++ alignment = ALIGNMENT;
++ } else if (multipass->inptyp == RSZ_INTYPE_YCBCR422_16BIT) {
++ alignment = (ALIGNMENT / 2);
++ } else {
++ dev_err(rsz_device, "Invalid input type\n");
++ }
++
++ if (!(((multipass->out_hsize % PIXEL_EVEN) == 0)
++ && (multipass->out_hsize % alignment) == 0)) {
++ dev_err(rsz_device, "wrong hsize\n");
++ goto err_einval;
++ }
++ }
++ if (multipass->hrsz >= 64 && multipass->hrsz <= 1024) {
++ if (multipass->out_hsize > MAX_IMAGE_WIDTH) {
++ dev_err(rsz_device, "wrong width\n");
++ goto err_einval;
++ }
++ multipass->active = 0;
++
++ } else if (multipass->hrsz > 1024) {
++ if (multipass->out_hsize > MAX_IMAGE_WIDTH) {
++ dev_err(rsz_device, "wrong width\n");
++ goto err_einval;
++ }
++ if (multipass->hstph > NUM_D2PH)
++ goto err_einval;
++ multipass->num_htap = 0;
++ multipass->out_hsize = multipass->in_hsize * 256 / 1024;
++ if (multipass->out_hsize % ALIGN32) {
++ multipass->out_hsize +=
++ abs((multipass->out_hsize % ALIGN32) - ALIGN32);
++ }
++ multipass->out_pitch = ((multipass->inptyp) ? multipass->out_hsize
++ : (multipass->out_hsize * 2));
++ multipass->hrsz = ((multipass->in_hsize - NUM_D2TAPS)
++ * RATIO_MULTIPLIER)
++ / (multipass->out_hsize - 1);
++ multipass->active = 1;
++
++ }
++ if (multipass->vrsz > 1024) {
++ if (multipass->out_vsize > MAX_IMAGE_WIDTH_HIGH) {
++ dev_err(rsz_device, "wrong width\n");
++ goto err_einval;
++ }
++
++ multipass->out_vsize = multipass->in_vsize * 256 / 1024;
++ multipass->vrsz = ((multipass->in_vsize - NUM_D2TAPS)
++ * RATIO_MULTIPLIER)
++ / (multipass->out_vsize - 1);
++ multipass->active = 1;
++ multipass->num_vtap = 0;
++ }
++ rsz_conf_chan->register_config.rsz_out_size =
++ multipass->out_hsize
++ & ISPRSZ_OUT_SIZE_HORZ_MASK;
++
++ rsz_conf_chan->register_config.rsz_out_size |=
++ (multipass->out_vsize
++ << ISPRSZ_OUT_SIZE_VERT_SHIFT)
++ & ISPRSZ_OUT_SIZE_VERT_MASK;
++
++ rsz_conf_chan->register_config.rsz_sdr_inoff =
++ multipass->in_pitch
++ & ISPRSZ_SDR_INOFF_OFFSET_MASK;
++
++ rsz_conf_chan->register_config.rsz_sdr_outoff =
++ multipass->out_pitch
++ & ISPRSZ_SDR_OUTOFF_OFFSET_MASK;
++
++ if (multipass->hrsz >= 64 && multipass->hrsz <= 512) {
++ if (multipass->hstph > NUM_PHASES)
++ goto err_einval;
++ } else if (multipass->hrsz >= 64 && multipass->hrsz <= 512) {
++ if (multipass->hstph > NUM_D2PH)
++ goto err_einval;
++ }
++
++ rsz_conf_chan->register_config.rsz_cnt |=
++ (multipass->hstph
++ << ISPRSZ_CNT_HSTPH_SHIFT)
++ & ISPRSZ_CNT_HSTPH_MASK;
++
++ if (multipass->vrsz >= 64 && multipass->hrsz <= 512) {
++ if (multipass->vstph > NUM_PHASES)
++ goto err_einval;
++ } else if (multipass->vrsz >= 64 && multipass->vrsz <= 512) {
++ if (multipass->vstph > NUM_D2PH)
++ goto err_einval;
++ }
++
++ rsz_conf_chan->register_config.rsz_cnt |=
++ (multipass->vstph
++ << ISPRSZ_CNT_VSTPH_SHIFT)
++ & ISPRSZ_CNT_VSTPH_MASK;
++
++ rsz_conf_chan->register_config.rsz_cnt |=
++ (multipass->hrsz - 1)
++ & ISPRSZ_CNT_HRSZ_MASK;
++
++ rsz_conf_chan->register_config.rsz_cnt |=
++ ((multipass->vrsz - 1)
++ << ISPRSZ_CNT_VRSZ_SHIFT)
++ & ISPRSZ_CNT_VRSZ_MASK;
++ return 0;
++err_einval:
++ return -EINVAL;
++}
++
++/**
++ * rsz_config_ratio - Configure ratio
++ * @fh: File structure containing ISP resizer information specific to
++ * channel opened.
++ * @rsz_conf_chan: Structure containing channel configuration
++ *
++ * Configure ratio
++ **/
++static void rsz_config_ratio(struct rsz_mult *multipass, struct channel_config *rsz_conf_chan)
++{
++ int hsize, vsize;
++ int coeffcounter;
++ if (multipass->hrsz <= 512) {
++ hsize = ((32 * multipass->hstph + (multipass->out_hsize - 1)
++ * multipass->hrsz + 16) >> 8) + 7;
++ } else {
++ hsize = ((64 * multipass->hstph + (multipass->out_hsize - 1)
++ * multipass->hrsz + 32) >> 8) + 7;
++ }
++ if (multipass->vrsz <= 512) {
++ vsize = ((32 * multipass->vstph + (multipass->out_vsize - 1)
++ * multipass->vrsz + 16) >> 8) + 4;
++ } else {
++ vsize = ((64 * multipass->vstph + (multipass->out_vsize - 1)
++ * multipass->vrsz + 32) >> 8) + 7;
++ }
++ rsz_conf_chan->register_config.rsz_in_size = hsize;
++
++ rsz_conf_chan->register_config.rsz_in_size |=
++ ((vsize << ISPRSZ_IN_SIZE_VERT_SHIFT)
++ & ISPRSZ_IN_SIZE_VERT_MASK);
++
++ for (coeffcounter = 0; coeffcounter < MAX_COEF_COUNTER;
++ coeffcounter++) {
++ if (multipass->num_htap) {
++ rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter] =
++ (multipass->tap4filt_coeffs[2
++ * coeffcounter]
++ & ISPRSZ_HFILT10_COEF0_MASK);
++ rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter] |=
++ ((multipass->tap4filt_coeffs[2
++ * coeffcounter + 1]
++ << ISPRSZ_HFILT10_COEF1_SHIFT)
++ & ISPRSZ_HFILT10_COEF1_MASK);
++ } else {
++ rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter] =
++ (multipass->tap7filt_coeffs[2
++ * coeffcounter]
++ & ISPRSZ_HFILT10_COEF0_MASK);
++
++ rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter] |=
++ ((multipass->tap7filt_coeffs[2
++ * coeffcounter + 1]
++ << ISPRSZ_HFILT10_COEF1_SHIFT)
++ & ISPRSZ_HFILT10_COEF1_MASK);
++ }
++
++ if (multipass->num_vtap) {
++ rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter] =
++ (multipass->tap4filt_coeffs[2
++ * coeffcounter]
++ & ISPRSZ_VFILT10_COEF0_MASK);
++
++ rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter] |=
++ ((multipass->tap4filt_coeffs[2
++ * coeffcounter + 1]
++ << ISPRSZ_VFILT10_COEF1_SHIFT) &
++ ISPRSZ_VFILT10_COEF1_MASK);
++ } else {
++ rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter] =
++ (multipass->tap7filt_coeffs[2
++ * coeffcounter]
++ & ISPRSZ_VFILT10_COEF0_MASK);
++ rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter] |=
++ ((multipass->tap7filt_coeffs[2
++ * coeffcounter + 1]
++ << ISPRSZ_VFILT10_COEF1_SHIFT)
++ & ISPRSZ_VFILT10_COEF1_MASK);
++ }
++ }
++}
++
++/**
++ * rsz_get_params - Gets the parameter values
++ * @params: Structure containing the Resizer Wrapper parameters
++ * @rsz_conf_chan: Structure containing channel configuration
++ *
++ * Used to get the Resizer hardware settings associated with the
++ * current logical channel represented by fd.
++ **/
++static int rsz_get_params(struct rsz_params *params,
++ struct channel_config *rsz_conf_chan)
++{
++ int coeffcounter;
++
++ if (rsz_conf_chan->config_state) {
++ dev_err(rsz_device, "state not configured\n");
++ return -EINVAL;
++ }
++
++ params->in_hsize = rsz_conf_chan->register_config.rsz_in_size
++ & ISPRSZ_IN_SIZE_HORZ_MASK;
++ params->in_vsize = (rsz_conf_chan->register_config.rsz_in_size
++ & ISPRSZ_IN_SIZE_VERT_MASK)
++ >> ISPRSZ_IN_SIZE_VERT_SHIFT;
++
++ params->in_pitch = rsz_conf_chan->register_config.rsz_sdr_inoff
++ & ISPRSZ_SDR_INOFF_OFFSET_MASK;
++
++ params->out_hsize = rsz_conf_chan->register_config.rsz_out_size
++ & ISPRSZ_OUT_SIZE_HORZ_MASK;
++
++ params->out_vsize = (rsz_conf_chan->register_config.rsz_out_size
++ & ISPRSZ_OUT_SIZE_VERT_MASK)
++ >> ISPRSZ_OUT_SIZE_VERT_SHIFT;
++
++ params->out_pitch = rsz_conf_chan->register_config.rsz_sdr_outoff
++ & ISPRSZ_SDR_OUTOFF_OFFSET_MASK;
++
++ params->cbilin = (rsz_conf_chan->register_config.rsz_cnt
++ & SET_BIT_CBLIN) >> SET_BIT_CBLIN;
++
++ params->inptyp = (rsz_conf_chan->register_config.rsz_cnt
++ & ISPRSZ_CNT_INPTYP_MASK)
++ >> SET_BIT_INPTYP;
++ params->horz_starting_pixel = ((rsz_conf_chan->register_config.
++ rsz_in_start
++ & ISPRSZ_IN_START_HORZ_ST_MASK));
++ params->vert_starting_pixel = ((rsz_conf_chan->register_config.
++ rsz_in_start
++ & ISPRSZ_IN_START_VERT_ST_MASK)
++ >> ISPRSZ_IN_START_VERT_ST_SHIFT);
++
++ params->hstph = ((rsz_conf_chan->register_config.rsz_cnt
++ & ISPRSZ_CNT_HSTPH_MASK
++ >> ISPRSZ_CNT_HSTPH_SHIFT));
++ params->vstph = ((rsz_conf_chan->register_config.rsz_cnt
++ & ISPRSZ_CNT_VSTPH_MASK
++ >> ISPRSZ_CNT_VSTPH_SHIFT));
++
++ for (coeffcounter = 0; coeffcounter < MAX_COEF_COUNTER;
++ coeffcounter++) {
++ params->tap4filt_coeffs[2 * coeffcounter] =
++ rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter]
++ & ISPRSZ_HFILT10_COEF0_MASK;
++
++ params->tap4filt_coeffs[2 * coeffcounter + 1] =
++ (rsz_conf_chan->register_config.
++ rsz_coeff_horz[coeffcounter]
++ & ISPRSZ_HFILT10_COEF1_MASK)
++ >> ISPRSZ_HFILT10_COEF1_SHIFT;
++
++ params->tap7filt_coeffs[2 * coeffcounter] =
++ rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter]
++ & ISPRSZ_VFILT10_COEF0_MASK;
++
++ params->tap7filt_coeffs[2 * coeffcounter + 1] =
++ (rsz_conf_chan->register_config.
++ rsz_coeff_vert[coeffcounter]
++ & ISPRSZ_VFILT10_COEF1_MASK)
++ >> ISPRSZ_VFILT10_COEF1_SHIFT;
++
++ }
++
++ params->yenh_params.type = (rsz_conf_chan->register_config.rsz_yehn
++ & ISPRSZ_YENH_ALGO_MASK)
++ >> ISPRSZ_YENH_ALGO_SHIFT;
++
++ params->yenh_params.core = rsz_conf_chan->register_config.rsz_yehn
++ & ISPRSZ_YENH_CORE_MASK;
++
++ params->yenh_params.gain = (rsz_conf_chan->register_config.rsz_yehn
++ & ISPRSZ_YENH_GAIN_MASK)
++ >> ISPRSZ_YENH_GAIN_SHIFT;
++
++ params->yenh_params.slop = (rsz_conf_chan->register_config.rsz_yehn
++ & ISPRSZ_YENH_SLOP_MASK)
++ >> ISPRSZ_YENH_SLOP_SHIFT;
++
++ params->pix_fmt = ((rsz_conf_chan->register_config.rsz_cnt
++ & ISPRSZ_CNT_PIXFMT_MASK)
++ >> SET_BIT_YCPOS);
++
++ if (params->pix_fmt)
++ params->pix_fmt = RSZ_PIX_FMT_UYVY;
++ else
++ params->pix_fmt = RSZ_PIX_FMT_YUYV;
++
++ return 0;
++}
++
++/**
++ * rsz_calculate_crop - Calculate Crop values
++ * @rsz_conf_chan: Structure containing channel configuration
++ * @cropsize: Structure containing crop parameters
++ *
++ * Calculate Crop values
++ **/
++static void rsz_calculate_crop(struct channel_config *rsz_conf_chan,
++ struct rsz_cropsize *cropsize)
++{
++ int luma_enable;
++
++ cropsize->hcrop = 0;
++ cropsize->vcrop = 0;
++
++ luma_enable = (rsz_conf_chan->register_config.rsz_yehn
++ & ISPRSZ_YENH_ALGO_MASK)
++ >> ISPRSZ_YENH_ALGO_SHIFT;
++
++ if (luma_enable) {
++ cropsize->hcrop += 2;
++ }
++}
++
++/**
++ * rsz_vbq_release - Videobuffer queue release
++ * @q: Structure containing the videobuffer queue file handle, and device
++ * structure which contains the actual configuration.
++ * @vb: Structure containing the videobuffer used for resizer processing.
++ **/
++static void rsz_vbq_release(struct videobuf_queue *q,
++ struct videobuf_buffer *vb)
++{
++ struct rsz_fh *fh = q->priv_data;
++ struct videobuf_dmabuf *dma = NULL;
++
++ dma = videobuf_to_dma(q->bufs[vb->i]);
++ videobuf_dma_unmap(q, dma);
++ videobuf_dma_free(dma);
++ ispmmu_unmap(fh->config->buf_address[vb->i]);
++ fh->config->buf_address[vb->i] = 0;
++
++ spin_lock(&fh->vbq_lock);
++ vb->state = VIDEOBUF_NEEDS_INIT;
++ spin_unlock(&fh->vbq_lock);
++
++}
++
++/**
++ * rsz_vbq_setup - Sets up the videobuffer size and validates count.
++ * @q: Structure containing the videobuffer queue file handle, and device
++ * structure which contains the actual configuration.
++ * @cnt: Number of buffers requested
++ * @size: Size in bytes of the buffer used for previewing
++ *
++ * Always returns 0.
++ **/
++static int rsz_vbq_setup(struct videobuf_queue *q, unsigned int *cnt,
++ unsigned int *size)
++{
++ struct rsz_fh *fh = q->priv_data;
++ struct rsz_mult *multipass = fh->multipass;
++ u32 bpp = 1, insize, outsize;
++
++ spin_lock(&fh->vbq_lock);
++
++ if (fh->params->inptyp == RSZ_INTYPE_YCBCR422_16BIT)
++ bpp = 2;
++ if (*cnt <= 0)
++ *cnt = VIDEO_MAX_FRAME;
++ if (*cnt > VIDEO_MAX_FRAME)
++ *cnt = VIDEO_MAX_FRAME;
++
++ outsize = multipass->out_pitch * multipass->out_vsize;
++ insize = multipass->in_pitch * multipass->in_vsize;
++ if (*cnt == 1 && (outsize > insize)) {
++ dev_err(rsz_device, "2 buffers are required for Upscaling "
++ "mode\n");
++ goto err_einval;
++ }
++ if (!fh->params->in_hsize || !fh->params->in_vsize) {
++ dev_err(rsz_device, "Can't setup buffer size\n");
++ goto err_einval;
++ } else {
++ if(outsize > insize)
++ *size = outsize;
++ else
++ *size = insize;
++
++ fh->rsz_bufsize = *size;
++ }
++ spin_unlock(&fh->vbq_lock);
++ return 0;
++err_einval:
++ spin_unlock(&fh->vbq_lock);
++ return -EINVAL;
++}
++/*
++ * This function is work around for the videobuf_iolock API,
++ * For User memory allocated with ioremap (VM_IO flag) the API
++ * get_user_pages fails.
++ *
++ * To fulfill this requirement, we have completely ignored VM layer of
++ * Linux, and configuring the ISP MMU with physical address.
++ */
++static int omap_videobuf_dma_init_user (struct videobuf_dmabuf *dma,
++ unsigned long physp)
++{
++ struct scatterlist *sglist;
++ int len, i = 0;
++
++ if (dma->nr_pages == 0)
++ return -EINVAL;
++
++ len = dma->nr_pages;
++
++ sglist = kcalloc(len, sizeof(*sglist), GFP_KERNEL);
++ if (NULL == sglist)
++ return -ENOMEM;
++ /* */
++ for (i = 0; i < len; i++) {
++ sglist[i].offset = 0;
++ sglist[i].length = PAGE_SIZE;
++ sglist[i].dma_address = (dma_addr_t)physp;
++ physp += PAGE_SIZE;
++ }
++ dma->sglist = sglist;
++ dma->sglen = len;
++ return 0;
++
++}
++static int omap_videobuf_dma_init(struct videobuf_dmabuf *dma,
++ int rw, unsigned long data)
++{
++ int err = 0;
++
++ if(dma->nr_pages == 0)
++ return -EINVAL;
++
++ dma->pages = kmalloc(dma->nr_pages * sizeof(struct page*),
++ GFP_KERNEL);
++ if (NULL == dma->pages)
++ return -ENOMEM;
++
++ dma->varea = (void *) data;
++ err = get_user_pages(current,current->mm,
++ data & PAGE_MASK, dma->nr_pages,
++ rw == READ, 1, /* force */
++ dma->pages, NULL);
++
++ if (err != dma->nr_pages) {
++ dma->nr_pages = (err >= 0) ? err : 0;
++ printk("get_user_pages: err=%d [%d]\n",err,dma->nr_pages);
++ return err < 0 ? err : -EINVAL;
++ }
++ return 0;
++}
++
++static int omap_videobuf_iolock(struct videobuf_queue* q,
++ struct videobuf_buffer *vb,
++ unsigned long asize)
++{
++ int err = 0;
++ unsigned long start, first, last;
++ struct videobuf_dma_sg_memory *mem = vb->priv;
++ struct videobuf_dmabuf *dma;
++ struct vm_area_struct *vma;
++
++ BUG_ON(!mem);
++ MAGIC_CHECK(vb->magic, MAGIC_BUFFER);
++ MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS);
++ MAGIC_CHECK(mem->magic, MAGIC_SG_MEM);
++
++ dma = &mem->dma;
++ dma->direction = PCI_DMA_FROMDEVICE;
++ start = vb->baddr;
++ /* Calculate number of pages required */
++ first = (start & PAGE_MASK) >> PAGE_SHIFT;
++ last = ((start+asize-1) & PAGE_MASK) >> PAGE_SHIFT;
++ dma->offset = start & ~PAGE_MASK;
++ dma->nr_pages = last-first+1;
++
++ /* For kernel direct-mapped memory, take the easy way */
++ if (start >= PAGE_OFFSET) {
++ unsigned long physp = 0;
++ physp = virt_to_phys((void *)start);
++ err = omap_videobuf_dma_init_user(dma, physp);
++ if (err != 0)
++ return err;
++ } else if ((vma = find_vma(current->mm, start)) && (vma->vm_flags & VM_IO)
++ && (vma->vm_pgoff)){
++ /* This will catch, kernel-allocated,
++ mmaped-to-usermode addresses */
++ unsigned long physp = 0;
++ physp = (vma->vm_pgoff << PAGE_SHIFT) + (start -
++ vma->vm_start);
++ err = omap_videobuf_dma_init_user(dma, physp);
++ if (err != 0)
++ return err;
++ }
++ else {
++ down_read(&current->mm->mmap_sem);
++ asize = PAGE_ALIGN(asize);
++ err = omap_videobuf_dma_init(&mem->dma,
++ READ, start);
++ up_read(&current->mm->mmap_sem);
++ if (0 != err)
++ return err;
++
++ err = videobuf_dma_map(q,&mem->dma);
++ if (0 != err)
++ return err;
++ }
++ return 0;
++}
++/**
++ * rsz_vbq_prepare - Videobuffer is prepared and mmapped.
++ * @q: Structure containing the videobuffer queue file handle, and device
++ * structure which contains the actual configuration.
++ * @vb: Structure containing the videobuffer used for resizer processing.
++ * @field: Type of field to set in videobuffer device.
++ *
++ * Returns 0 if successful, or -EINVAL if buffer couldn't get allocated, or
++ * -EIO if the ISP MMU mapping fails
++ **/
++static int rsz_vbq_prepare(struct videobuf_queue *q,
++ struct videobuf_buffer *vb,
++ enum v4l2_field field)
++{
++ struct rsz_fh *fh = q->priv_data;
++ struct channel_config *rsz_conf_chan = fh->config;
++ int err = 0;
++ unsigned int isp_addr, insize, outsize;
++ struct videobuf_dmabuf *dma;
++ struct rsz_mult *multipass = fh->multipass;
++ spin_lock(&fh->vbq_lock);
++ dma = videobuf_to_dma(vb);
++ if (vb->baddr) {
++ if (vb->baddr != (vb->baddr & PAGE_MASK)) {
++ dev_err(rsz_device, "Buffer address should be aligned \
++ to PAGE_SIZE\n");
++ return -EINVAL;
++ }
++ vb->size = fh->rsz_bufsize;
++ vb->bsize = fh->rsz_bufsize;
++ } else {
++ spin_unlock(&fh->vbq_lock);
++ dev_err(rsz_device, "No user buffer allocated\n");
++ goto out;
++ }
++ if (vb->i) {
++ vb->width = fh->params->out_hsize;
++ vb->height = fh->params->out_vsize;
++ } else {
++ vb->width = fh->params->in_hsize;
++ vb->height = fh->params->in_vsize;
++ }
++ vb->field = field;
++ spin_unlock(&fh->vbq_lock);
++
++ outsize = multipass->out_pitch * multipass->out_vsize;
++ insize = multipass->in_pitch * multipass->in_vsize;
++
++ if (vb->state == VIDEOBUF_NEEDS_INIT) {
++ spin_lock(&fh->vbq_lock);
++ if(vb->memory == V4L2_MEMORY_USERPTR)
++ err = omap_videobuf_iolock(q, vb,
++ vb->i?outsize:insize);
++ else
++ err = videobuf_iolock(q, vb, NULL);
++ spin_unlock(&fh->vbq_lock);
++ if(err) {
++ rsz_vbq_release(q, vb);
++ return err;
++ }
++ isp_addr = ispmmu_map_sg(dma->sglist, dma->sglen);
++ if (!isp_addr)
++ err = -EIO;
++ else {
++ if (vb->i) {
++ rsz_conf_chan->buf_address[vb->i] = isp_addr;
++ rsz_conf_chan->register_config.
++ rsz_sdr_outadd
++ = isp_addr;
++ fh->isp_addr_write = isp_addr;
++ rsz_conf_chan->output_buf_index = vb->i;
++ } else {
++ rsz_conf_chan->buf_address[vb->i] = isp_addr;
++ rsz_conf_chan->register_config.
++ rsz_sdr_inadd
++ = isp_addr;
++ rsz_conf_chan->input_buf_index = vb->i;
++ if(outsize < insize && rsz_conf_chan->
++ register_config.
++ rsz_sdr_outadd == 0) {
++ rsz_conf_chan->register_config.
++ rsz_sdr_outadd
++ = isp_addr;
++ rsz_conf_chan->
++ output_buf_index =
++ vb->i;
++ }
++ fh->isp_addr_read = isp_addr;
++ }
++ }
++
++ } else {
++ if(vb->i) {
++ rsz_conf_chan->register_config.
++ rsz_sdr_outadd = rsz_conf_chan->buf_address[vb->i];
++ fh->isp_addr_write = rsz_conf_chan->buf_address[vb->i];
++ rsz_conf_chan->output_buf_index = vb->i;
++ } else {
++ rsz_conf_chan->register_config.
++ rsz_sdr_inadd = rsz_conf_chan->buf_address[vb->i];
++ rsz_conf_chan->input_buf_index = vb->i;
++ if(outsize < insize && rsz_conf_chan->
++ register_config.
++ rsz_sdr_outadd == 0) {
++ rsz_conf_chan->register_config.
++ rsz_sdr_outadd
++ = rsz_conf_chan->buf_address[vb->i];
++ rsz_conf_chan->output_buf_index = vb->i;
++ }
++
++ }
++
++ }
++ if (!err) {
++ spin_lock(&fh->vbq_lock);
++ vb->state = VIDEOBUF_PREPARED;
++ spin_unlock(&fh->vbq_lock);
++ } else
++ rsz_vbq_release(q, vb);
++out:
++ return err;
++}
++
++static void rsz_vbq_queue(struct videobuf_queue *q, struct videobuf_buffer *vb)
++{
++ return;
++}
++
++/**
++ * rsz_open - Initializes and opens the Resizer Wrapper
++ * @inode: Inode structure associated with the Resizer Wrapper
++ * @filp: File structure associated with the Resizer Wrapper
++ *
++ * Returns 0 if successful, -EBUSY if its already opened or the ISP module is
++ * not available, or -ENOMEM if its unable to allocate the device in kernel
++ * space memory.
++ **/
++static int rsz_open(struct inode *inode, struct file *filp)
++{
++ int ret = 0;
++ struct channel_config *rsz_conf_chan;
++ struct rsz_fh *fh;
++ struct device_params *device = device_config;
++ struct rsz_params *params;
++ struct rsz_mult *multipass;
++
++ if ((filp->f_flags & O_NONBLOCK) == O_NONBLOCK) {
++ printk(KERN_DEBUG "omap-resizer: Device is opened in "
++ "non blocking mode\n");
++ }else{
++ printk(KERN_DEBUG "omap-resizer: Device is opened in blocking "
++ "mode\n");
++ }
++ fh = kzalloc(sizeof(struct rsz_fh), GFP_KERNEL);
++ if (NULL == fh)
++ return -ENOMEM;
++
++ isp_get();
++
++ rsz_conf_chan = kzalloc(sizeof(struct channel_config), GFP_KERNEL);
++ if (rsz_conf_chan == NULL) {
++ dev_err(rsz_device, "\n cannot allocate memory to config");
++ ret = -ENOMEM;
++ goto err_enomem0;
++ }
++ params = kzalloc(sizeof(struct rsz_params), GFP_KERNEL);
++ if (params == NULL) {
++ dev_err(rsz_device, "\n cannot allocate memory to params");
++ ret = -ENOMEM;
++ goto err_enomem1;
++ }
++ multipass = kzalloc(sizeof(struct rsz_mult), GFP_KERNEL);
++ if (multipass == NULL) {
++ dev_err(rsz_device, "\n cannot allocate memory to multipass");
++ ret = -ENOMEM;
++ goto err_enomem2;
++ }
++ fh->multipass = multipass;
++ fh->params = params;
++ fh->config = rsz_conf_chan;
++ rsz_conf_chan->config_state = STATE_NOT_CONFIGURED;
++ rsz_conf_chan->status = CHANNEL_FREE;
++ filp->private_data = fh;
++ fh->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ fh->device = device;
++
++ videobuf_queue_sg_init(&fh->vbq, &device->vbq_ops, NULL,
++ &fh->vbq_lock, fh->type,
++ V4L2_FIELD_NONE,
++ sizeof(struct videobuf_buffer), fh);
++
++ spin_lock_init(&fh->vbq_lock);
++ mutex_init(&rsz_conf_chan->chanprotection_mutex);
++ return 0;
++err_enomem2:
++ kfree(params);
++err_enomem1:
++ kfree(rsz_conf_chan);
++err_enomem0:
++ kfree(fh);
++ return ret;
++}
++
++/**
++ * rsz_release - Releases Resizer Wrapper and frees up allocated memory
++ * @inode: Inode structure associated with the Resizer Wrapper
++ * @filp: File structure associated with the Resizer Wrapper
++ *
++ * Returns 0 if successful, or -EBUSY if channel is being used.
++ **/
++static int rsz_release(struct inode *inode, struct file *filp)
++{
++ int i;
++ unsigned int timeout = 0;
++ struct rsz_fh *fh = filp->private_data;
++ struct channel_config *rsz_conf_chan = fh->config;
++ struct rsz_params *params = fh->params;
++ struct rsz_mult *multipass = fh->multipass;
++ struct videobuf_queue *q = &fh->vbq;
++
++ while((rsz_conf_chan->status != CHANNEL_FREE) && (timeout < 20)) {
++ timeout++;
++ schedule();
++ }
++ /* Free memory allocated to the buffers */
++ for (i = 0 ; i < VIDEO_MAX_FRAME ; i ++) {
++ struct videobuf_dmabuf *dma = NULL;
++ if(!q->bufs[i])
++ continue;
++ dma = videobuf_to_dma(q->bufs[i]);
++ videobuf_dma_unmap(q, dma);
++ videobuf_dma_free(dma);
++ }
++
++ videobuf_mmap_free(q);
++ fh->rsz_bufsize = 0;
++ filp->private_data = NULL;
++ kfree(rsz_conf_chan);
++ kfree(params);
++ kfree(multipass);
++ kfree(fh);
++ isp_put();
++ fh->params = NULL;
++ fh->config = NULL;
++ return 0;
++}
++
++/**
++ * rsz_mmap - Memory maps the Resizer Wrapper module.
++ * @file: File structure associated with the Resizer Wrapper
++ * @vma: Virtual memory area structure.
++ *
++ * Returns 0 if successful, or returned value by the videobuf_mmap_mapper()
++ * function.
++ **/
++static int rsz_mmap(struct file *file, struct vm_area_struct *vma)
++{
++ struct rsz_fh *fh = file->private_data;
++
++ return videobuf_mmap_mapper(&fh->vbq, vma);
++}
++
++/**
++ * rsz_ioctl - I/O control function for Resizer Wrapper
++ * @inode: Inode structure associated with the Resizer Wrapper.
++ * @file: File structure associated with the Resizer Wrapper.
++ * @cmd: Type of command to execute.
++ * @arg: Argument to send to requested command.
++ *
++ * Returns 0 if successful, -EBUSY if channel is being used, -1 if bad command
++ * passed or access is denied, -EFAULT if copy_from_user() or copy_to_user()
++ * fails, -EINVAL if parameter validation fails or parameter structure is not
++ * present.
++ **/
++static long rsz_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
++{
++ int ret = 0, i;
++ struct rsz_fh *fh = file->private_data;
++ struct device_params *device = fh->device;
++ struct channel_config *rsz_conf_chan = fh->config;
++
++ if ((_IOC_TYPE(cmd) != RSZ_IOC_BASE)
++ || (_IOC_NR(cmd) > RSZ_IOC_MAXNR)) {
++ dev_err(rsz_device, "Bad command value \n");
++ goto err_minusone;
++ }
++
++ if (_IOC_DIR(cmd) & _IOC_READ)
++ ret = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
++ else if (_IOC_DIR(cmd) & _IOC_WRITE)
++ ret = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
++
++ if (ret) {
++ dev_err(rsz_device, "Access denied\n");
++ goto err_minusone;
++ }
++
++ switch (cmd) {
++ case RSZ_REQBUF:
++ {
++ struct v4l2_requestbuffers req_buf;
++ struct videobuf_queue *q = &fh->vbq;
++ if (copy_from_user(&req_buf, (struct v4l2_requestbuffers *)arg,
++ sizeof(struct v4l2_requestbuffers))) {
++ goto err_efault;
++ }
++ if (mutex_lock_interruptible(&rsz_conf_chan->chanprotection_mutex))
++ goto err_eintr;
++ /* Free memory allocated to the buffers */
++ for (i = 0 ; i < VIDEO_MAX_FRAME ; i ++) {
++ struct videobuf_dmabuf *dma = NULL;
++ if(!q->bufs[i])
++ continue;
++ if(q->bufs[i]->memory != V4L2_MEMORY_MMAP)
++ continue;
++ dma = videobuf_to_dma(q->bufs[i]);
++ videobuf_dma_unmap(q, dma);
++ videobuf_dma_free(dma);
++
++ }
++ videobuf_mmap_free(q);
++
++ ret = videobuf_reqbufs(q, &req_buf);
++ mutex_unlock(&rsz_conf_chan->chanprotection_mutex);
++ break;
++ }
++ case RSZ_QUERYBUF:
++ {
++ struct v4l2_buffer buf;
++ if (copy_from_user(&buf, (struct v4l2_buffer *)arg,
++ sizeof(struct v4l2_buffer))) {
++ goto err_efault;
++ }
++ if (mutex_lock_interruptible(&rsz_conf_chan->chanprotection_mutex))
++ goto err_eintr;
++ ret = videobuf_querybuf(&fh->vbq, &buf);
++ mutex_unlock(&rsz_conf_chan->chanprotection_mutex);
++ if (copy_to_user((struct v4l2_buffer *)arg, &buf,
++ sizeof(struct v4l2_buffer)))
++ ret = -EFAULT;
++
++ break;
++ }
++ case RSZ_QUEUEBUF:
++ {
++ struct v4l2_buffer buf;
++ if (copy_from_user(&buf, (struct v4l2_buffer *)arg,
++ sizeof(struct v4l2_buffer))) {
++ goto err_efault;
++ }
++ if (mutex_lock_interruptible(&rsz_conf_chan->chanprotection_mutex))
++ goto err_eintr;
++ ret = videobuf_qbuf(&fh->vbq, &buf);
++ mutex_unlock(&rsz_conf_chan->chanprotection_mutex);
++ break;
++ }
++ case RSZ_S_PARAM:
++ {
++ struct rsz_params *params = fh->params;
++ if (copy_from_user(params, (struct rsz_params *)arg,
++ sizeof(struct rsz_params))) {
++ goto err_efault;
++ }
++ ret = rsz_set_params(fh->multipass, fh->params, rsz_conf_chan);
++ break;
++ }
++ case RSZ_G_PARAM:
++ ret = rsz_get_params((struct rsz_params *)arg, rsz_conf_chan);
++ break;
++
++ case RSZ_G_STATUS:
++ {
++ struct rsz_status *status;
++ status = (struct rsz_status *)arg;
++ status->chan_busy = rsz_conf_chan->status;
++ status->hw_busy = resizer_busy();
++ status->src = INPUT_RAM;
++ break;
++ }
++ case RSZ_RESIZE:
++ if(file->f_flags & O_NONBLOCK) {
++ if(resizer_busy())
++ return -EBUSY;
++ else {
++ if(!mutex_trylock(&device->reszwrap_mutex))
++ return -EBUSY;
++ }
++ }
++ else {
++ if (mutex_lock_interruptible(&device->reszwrap_mutex))
++ goto err_eintr;
++ }
++ ret = rsz_start((int *)arg, fh);
++ mutex_unlock(&device->reszwrap_mutex);
++ break;
++
++ case RSZ_GET_CROPSIZE:
++ rsz_calculate_crop(rsz_conf_chan, (struct rsz_cropsize *)arg);
++ break;
++
++ case RSZ_S_EXP:
++ if (mutex_lock_interruptible(&rsz_conf_chan->chanprotection_mutex))
++ goto err_eintr;
++ rsz_conf_chan->register_config.sdr_req_exp = *((unsigned int *)arg);
++ mutex_unlock(&rsz_conf_chan->chanprotection_mutex);
++ break;
++ default:
++ dev_err(rsz_device, "resizer_ioctl: Invalid Command Value");
++ ret = -EINVAL;
++ }
++
++out:
++ return (long)ret;
++err_minusone:
++ ret = -1;
++ goto out;
++err_eintr:
++ ret = -EINTR;
++ goto out;
++err_efault:
++ ret = -EFAULT;
++ goto out;
++}
++
++static struct file_operations rsz_fops = {
++ .owner = THIS_MODULE,
++ .open = rsz_open,
++ .release = rsz_release,
++ .mmap = rsz_mmap,
++ .unlocked_ioctl = rsz_unlocked_ioctl,
++};
++
++/**
++ * rsz_isr - Interrupt Service Routine for Resizer wrapper
++ * @status: ISP IRQ0STATUS register value
++ * @arg1: Currently not used
++ * @arg2: Currently not used
++ *
++ * Interrupt Service Routine for Resizer wrapper
++ **/
++static void rsz_isr(unsigned long status, isp_vbq_callback_ptr arg1, void *arg2)
++{
++ if ((status & RESZ_DONE) != RESZ_DONE)
++ return;
++ complete(&(device_config->compl_isr));
++}
++
++/**
++ * resizer_platform_release - Acts when Reference count is zero
++ * @device: Structure containing ISP resizer wrapper global information
++ *
++ * This is called when the reference count goes to zero.
++ **/
++static void resizer_platform_release(struct device *device)
++{
++}
++
++/**
++ * resizer_probe - Checks for device presence
++ * @device: Structure containing details of the current device.
++ *
++ * Always returns 0.
++ **/
++static int __init resizer_probe(struct platform_device *device)
++{
++ return 0;
++}
++
++/**
++ * resizer_remove - Handles the removal of the driver
++ * @omap_resizer_device: Structure containing details of the current device.
++ *
++ * Always returns 0.
++ **/
++static int resizer_remove(struct platform_device *omap_resizer_device)
++{
++ return 0;
++}
++
++static struct class *rsz_class = NULL;
++static struct cdev c_dev;
++static dev_t dev;
++
++static struct platform_device omap_resizer_device = {
++ .name = OMAP_REZR_NAME,
++ .id = 2,
++ .dev = {
++ .release = resizer_platform_release,
++ }
++};
++
++static struct platform_driver omap_resizer_driver = {
++ .probe = resizer_probe,
++ .remove = resizer_remove,
++ .driver = {
++ .bus = &platform_bus_type,
++ .name = OMAP_REZR_NAME,
++ },
++};
++
++/**
++ * omap_rsz_init - Initialization of Resizer Wrapper
++ *
++ * Returns 0 if successful, -ENOMEM if could not allocate memory, -ENODEV if
++ * could not register the wrapper as a character device, or other errors if the
++ * device or driver can't register.
++ **/
++static int __init omap_rsz_init(void)
++{
++ int ret = 0;
++ struct device_params *device;
++
++ device = kzalloc(sizeof(struct device_params), GFP_KERNEL);
++ if (!device) {
++ dev_err(rsz_device, OMAP_REZR_NAME ": could not allocate "
++ "memory\n");
++ return -ENOMEM;
++ }
++ ret = alloc_chrdev_region(&dev, 0, 1, OMAP_REZR_NAME);
++ if (ret < 0) {
++ dev_err(rsz_device, OMAP_REZR_NAME ": intialization failed. "
++ "Could not allocate region "
++ "for character device\n");
++ kfree(device);
++ return -ENODEV;
++ }
++ /* Register the driver in the kernel */
++ /* Initialize of character device */
++ cdev_init(&c_dev, &rsz_fops);
++ c_dev.owner = THIS_MODULE;
++ c_dev.ops = &rsz_fops;
++ /* addding character device */
++ ret = cdev_add(&c_dev, dev, 1);
++ if (ret) {
++ dev_err(rsz_device, OMAP_REZR_NAME ": Error adding "
++ "device - %d\n", ret);
++ goto fail2;
++ }
++ rsz_major = MAJOR(dev);
++ /* register driver as a platform driver */
++ ret = platform_driver_register(&omap_resizer_driver);
++ if (ret) {
++ dev_err(rsz_device, OMAP_REZR_NAME
++ ": failed to register platform driver!\n");
++ goto fail3;
++ }
++ /* Register the drive as a platform device */
++ ret = platform_device_register(&omap_resizer_device);
++ if (ret) {
++ dev_err(rsz_device, OMAP_REZR_NAME
++ ": failed to register platform device!\n");
++ goto fail4;
++ }
++ rsz_class = class_create(THIS_MODULE, OMAP_REZR_NAME);
++ if (!rsz_class) {
++ dev_err(rsz_device, OMAP_REZR_NAME
++ ": Failed to create class!\n");
++ goto fail5;
++ }
++ /* make entry in the devfs */
++ rsz_device = device_create(rsz_class, rsz_device, MKDEV(rsz_major, 0),
++ NULL,OMAP_REZR_NAME);
++ dev_dbg(rsz_device, OMAP_REZR_NAME ": Registered Resizer Wrapper\n");
++
++ device->vbq_ops.buf_setup = rsz_vbq_setup;
++ device->vbq_ops.buf_prepare = rsz_vbq_prepare;
++ device->vbq_ops.buf_release = rsz_vbq_release;
++ device->vbq_ops.buf_queue = rsz_vbq_queue;
++
++ init_completion(&device->compl_isr);
++ mutex_init(&device->reszwrap_mutex);
++ device_config = device;
++ return 0;
++fail5:
++ platform_device_unregister(&omap_resizer_device);
++fail4:
++ platform_driver_unregister(&omap_resizer_driver);
++fail3:
++ cdev_del(&c_dev);
++fail2:
++ unregister_chrdev_region(dev, 1);
++ kfree(device);
++ return ret;
++}
++
++/**
++ * omap_rsz_exit - Close of Resizer Wrapper
++ **/
++void __exit omap_rsz_exit(void)
++{
++ device_destroy(rsz_class, dev);
++ class_destroy(rsz_class);
++ platform_device_unregister(&omap_resizer_device);
++ platform_driver_unregister(&omap_resizer_driver);
++ cdev_del(&c_dev);
++ unregister_chrdev_region(dev, 1);
++ kfree(device_config);
++}
++
++module_init(omap_rsz_init)
++module_exit(omap_rsz_exit)
++
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("OMAP ISP Resizer");
++MODULE_LICENSE("GPL");
+Index: git/drivers/media/video/isp/omap_resizer.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/omap_resizer.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,323 @@
++/*
++ * drivers/media/video/isp/omap_resizer.h
++ *
++ * Include file for Resizer module wrapper in TI's OMAP3430 ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_ISP_RESIZER_WRAP_H
++#define OMAP_ISP_RESIZER_WRAP_H
++
++/* ioctls definition */
++#define RSZ_IOC_BASE 'R'
++#define RSZ_IOC_MAXNR 8
++
++/*Ioctl options which are to be passed while calling the ioctl*/
++#define RSZ_REQBUF _IOWR(RSZ_IOC_BASE, 1,\
++ struct v4l2_requestbuffers)
++#define RSZ_QUERYBUF _IOWR(RSZ_IOC_BASE, 2,\
++ struct v4l2_buffer)
++#define RSZ_S_PARAM _IOWR(RSZ_IOC_BASE, 3,\
++ struct rsz_params)
++#define RSZ_G_PARAM _IOWR(RSZ_IOC_BASE, 4,\
++ struct rsz_params)
++#define RSZ_RESIZE _IOWR(RSZ_IOC_BASE, 5, int)
++#define RSZ_G_STATUS _IOWR(RSZ_IOC_BASE, 6,\
++ struct rsz_status)
++#define RSZ_QUEUEBUF _IOWR(RSZ_IOC_BASE, 7,\
++ struct v4l2_buffer)
++#define RSZ_GET_CROPSIZE _IOWR(RSZ_IOC_BASE, 8,\
++ struct rsz_cropsize)
++
++/* Defines and Constants*/
++
++#define MAX_CHANNELS 16
++#define MAX_IMAGE_WIDTH 2047
++#define MAX_IMAGE_WIDTH_HIGH 2047
++
++#define ALIGNMENT 16
++#define CHANNEL_BUSY 1
++#define CHANNEL_FREE 0
++#define PIXEL_EVEN 2
++#define RATIO_MULTIPLIER 256
++
++/* Bit position Macro */
++/* macro for bit set and clear */
++#define BITSET(variable, bit) (variable) | (1 << bit)
++#define BITRESET(variable, bit) (variable) & ~(0x00000001 << (bit))
++#define SET_BIT_INPUTRAM 28
++#define SET_BIT_CBLIN 29
++#define SET_BIT_INPTYP 27
++#define SET_BIT_YCPOS 26
++#define INPUT_RAM 1
++#define UP_RSZ_RATIO 64
++#define DOWN_RSZ_RATIO 512
++#define UP_RSZ_RATIO1 513
++#define DOWN_RSZ_RATIO1 1024
++#define RSZ_IN_SIZE_VERT_SHIFT 16
++#define MAX_HORZ_PIXEL_8BIT 31
++#define MAX_HORZ_PIXEL_16BIT 15
++#define NUM_PHASES 8
++#define NUM_TAPS 4
++#define NUM_D2PH 4 /* for downsampling
++ * 2+x ~ 4x, number of phases
++ */
++#define NUM_D2TAPS 7 /* for downsampling
++ * 2+x ~ 4x,number of taps
++ */
++#define ALIGN32 32
++#define MAX_COEF_COUNTER 16
++#define COEFF_ADDRESS_OFFSET 0x04
++
++#define RSZ_INTYPE_YCBCR422_16BIT 0
++#define RSZ_INTYPE_PLANAR_8BIT 1
++#define RSZ_PIX_FMT_UYVY 1 /* cb:y:cr:y */
++#define RSZ_PIX_FMT_YUYV 0 /* y:cb:y:cr */
++
++enum config_done {
++ STATE_CONFIGURED, /* Resizer driver configured
++ * by application.
++ */
++ STATE_NOT_CONFIGURED /* Resizer driver not
++ * configured by application.
++ */
++};
++
++/* Structure Definitions */
++
++/* used to luma enhancement options */
++
++struct rsz_yenh {
++ int type; /* represents luma enable or
++ * disable.
++ */
++ unsigned char gain; /* represents gain. */
++ unsigned char slop; /* represents slop. */
++ unsigned char core; /* Represents core value. */
++};
++
++/* Conatins all the parameters for resizing. This structure
++ * is used to configure resiser parameters
++ */
++struct rsz_params {
++ int in_hsize; /* input frame horizontal
++ * size.
++ */
++ int in_vsize; /* input frame vertical size */
++ int in_pitch; /* offset between two rows of
++ * input frame.
++ */
++ int inptyp; /* for determining 16 bit or
++ * 8 bit data.
++ */
++ int vert_starting_pixel; /* for specifying vertical
++ * starting pixel in input.
++ */
++ int horz_starting_pixel; /* for specyfing horizontal
++ * starting pixel in input.
++ */
++ int cbilin; /* # defined, filter with luma
++ * or bi-linear interpolation.
++ */
++ int pix_fmt; /* # defined, UYVY or YUYV */
++ int out_hsize; /* output frame horizontal
++ * size.
++ */
++ int out_vsize; /* output frame vertical
++ * size.
++ */
++ int out_pitch; /* offset between two rows of
++ * output frame.
++ */
++ int hstph; /* for specifying horizontal
++ * starting phase.
++ */
++ int vstph; /* for specifying vertical
++ * starting phase.
++ */
++ u16 tap4filt_coeffs[32]; /* horizontal filter
++ * coefficients.
++ */
++ u16 tap7filt_coeffs[32]; /* vertical filter
++ * coefficients.
++ */
++ struct rsz_yenh yenh_params;
++};
++
++struct rsz_mult {
++ int in_hsize; /* input frame horizontal
++ * size.
++ */
++ int in_vsize; /* input frame vertical size.
++ */
++ int out_hsize; /* output frame horizontal
++ * size.
++ */
++ int out_vsize; /* output frame vertical
++ * size.
++ */
++ int in_pitch; /* offset between two rows of
++ * input frame.
++ */
++ int out_pitch; /* offset between two rows of
++ * output frame.
++ */
++ int end_hsize;
++ int end_vsize;
++ int num_htap; /* 0 = 7tap; 1 = 4tap */
++ int num_vtap; /* 0 = 7tap; 1 = 4tap */
++ int active;
++ int inptyp;
++ int vrsz;
++ int hrsz;
++ int hstph; /* for specifying horizontal
++ * starting phase.
++ */
++ int vstph;
++ int pix_fmt; /* # defined, UYVY or YUYV. */
++ int cbilin; /* # defined, filter with luma
++ * or bi-linear.
++ */
++ u16 tap4filt_coeffs[32]; /* horizontal filter
++ * coefficients.
++ */
++ u16 tap7filt_coeffs[32]; /* vertical filter
++ * coefficients.
++ */
++};
++
++/* Contains the status of hardware and channel */
++struct rsz_status {
++ int chan_busy; /* 1: channel is busy,
++ * 0: channel is not busy
++ */
++ int hw_busy; /* 1: hardware is busy,
++ * 0: hardware is not busy
++ */
++ int src; /* # defined, can be either
++ * SD-RAM or CCDC/PREVIEWER
++ */
++};
++
++/* Passed by application for getting crop size */
++struct rsz_cropsize {
++ unsigned int hcrop; /* Number of pixels per line
++ * cropped in output image.
++ */
++
++ unsigned int vcrop; /* Number of lines cropped
++ * in output image.
++ */
++};
++
++/* Register mapped structure which contains the every register
++ information */
++struct resizer_config {
++ u32 rsz_pcr; /* pcr register mapping
++ * variable.
++ */
++ u32 rsz_in_start; /* in_start register mapping
++ * variable.
++ */
++ u32 rsz_in_size; /* in_size register mapping
++ * variable.
++ */
++ u32 rsz_out_size; /* out_size register mapping
++ * variable.
++ */
++ u32 rsz_cnt; /* rsz_cnt register mapping
++ * variable.
++ */
++ u32 rsz_sdr_inadd; /* sdr_inadd register mapping
++ * variable.
++ */
++ u32 rsz_sdr_inoff; /* sdr_inoff register mapping
++ * variable.
++ */
++ u32 rsz_sdr_outadd; /* sdr_outadd register mapping
++ * variable.
++ */
++ u32 rsz_sdr_outoff; /* sdr_outbuff register
++ * mapping variable.
++ */
++ u32 rsz_coeff_horz[16]; /* horizontal coefficients
++ * mapping array.
++ */
++ u32 rsz_coeff_vert[16]; /* vertical coefficients
++ * mapping array.
++ */
++ u32 rsz_yehn; /* yehn(luma)register mapping
++ * variable.
++ */
++};
++
++/* Channel specific structure contains information regarding
++ the every channel */
++struct channel_config {
++ struct resizer_config register_config; /* Instance of register set
++ * mapping structure
++ */
++ int status; /* Specifies whether the
++ * channel is busy or not
++ */
++ struct mutex chanprotection_mutex; /* Pointer to channel
++ * specific protection
++ */
++ enum config_done config_state;
++ u8 input_buf_index, output_buf_index;
++
++};
++
++/* Global structure which contains information about number of channels
++ and protection variables */
++struct device_params {
++
++ struct mutex reszwrap_mutex; /* Semaphore for array */
++ struct completion compl_isr; /* Completion for interrupt */
++ struct videobuf_queue_ops vbq_ops; /* videobuf queue operations */
++};
++
++/* per-filehandle data structure */
++struct rsz_fh {
++ struct rsz_params *params;
++ struct channel_config *config; /* Pointer to channel
++ * configuration.
++ */
++ enum v4l2_buf_type type;
++ struct videobuf_queue vbq;
++ struct device_params *device;
++ dma_addr_t isp_addr_read; /* Input/Output address */
++ dma_addr_t isp_addr_write; /* Input/Output address */
++ struct rsz_mult *multipass; /* Multipass to support
++ * resizing ration outside
++ * of 0.25x to 4x
++ */
++ spinlock_t vbq_lock; /* spinlock for videobuf
++ * queues.
++ */
++ u32 rsz_bufsize; /* channel specific buffersize
++ */
++};
++
++/* functions definition */
++void rsz_hardware_setup(struct channel_config *rsz_conf_chan);
++int rsz_set_params(struct rsz_mult *multipass, struct rsz_params *, struct channel_config *);
++int rsz_get_params(struct rsz_params *, struct channel_config *);
++void rsz_copy_data(struct rsz_mult *multipass, struct rsz_params *params);
++void rsz_isr(unsigned long status, isp_vbq_callback_ptr arg1, void *arg2);
++void rsz_calculate_crop(struct channel_config *rsz_conf_chan,
++ struct rsz_cropsize *cropsize);
++int rsz_set_multipass(struct rsz_mult *multipass, struct channel_config *rsz_conf_chan);
++int rsz_set_ratio(struct rsz_mult *multipass, struct channel_config *rsz_conf_chan);
++void rsz_config_ratio(struct rsz_mult *multipass, struct channel_config *rsz_conf_chan);
++
++#endif
+Index: git/drivers/media/video/isp/redgamma_table.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/redgamma_table.h 2009-02-12 10:29:26.000000000 -0600
+@@ -0,0 +1,1040 @@
++/*
++ * drivers/media/video/isp/redgamma_table.h
++ *
++ * Gamma Table values for Red for TI's OMAP3430 Camera ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++0,
++0,
++1,
++2,
++3,
++3,
++4,
++5,
++6,
++8,
++10,
++12,
++14,
++16,
++18,
++20,
++22,
++23,
++25,
++26,
++28,
++29,
++31,
++32,
++34,
++35,
++36,
++37,
++39,
++40,
++41,
++42,
++43,
++44,
++45,
++46,
++47,
++48,
++49,
++50,
++51,
++52,
++52,
++53,
++54,
++55,
++56,
++57,
++58,
++59,
++60,
++61,
++62,
++63,
++63,
++64,
++65,
++66,
++66,
++67,
++68,
++69,
++69,
++70,
++71,
++72,
++72,
++73,
++74,
++75,
++75,
++76,
++77,
++78,
++78,
++79,
++80,
++81,
++81,
++82,
++83,
++84,
++84,
++85,
++86,
++87,
++88,
++88,
++89,
++90,
++91,
++91,
++92,
++93,
++94,
++94,
++95,
++96,
++97,
++97,
++98,
++98,
++99,
++99,
++100,
++100,
++101,
++101,
++102,
++103,
++104,
++104,
++105,
++106,
++107,
++108,
++108,
++109,
++110,
++111,
++111,
++112,
++113,
++114,
++114,
++115,
++116,
++117,
++117,
++118,
++119,
++119,
++120,
++120,
++121,
++121,
++122,
++122,
++123,
++123,
++124,
++124,
++125,
++125,
++126,
++126,
++127,
++127,
++128,
++128,
++129,
++129,
++130,
++130,
++131,
++131,
++132,
++132,
++133,
++133,
++134,
++134,
++135,
++135,
++136,
++136,
++137,
++137,
++138,
++138,
++139,
++139,
++140,
++140,
++141,
++141,
++142,
++142,
++143,
++143,
++144,
++144,
++145,
++145,
++146,
++146,
++147,
++147,
++148,
++148,
++149,
++149,
++150,
++150,
++151,
++151,
++152,
++152,
++153,
++153,
++153,
++153,
++154,
++154,
++154,
++154,
++155,
++155,
++156,
++156,
++157,
++157,
++158,
++158,
++158,
++159,
++159,
++159,
++160,
++160,
++160,
++161,
++161,
++162,
++162,
++163,
++163,
++164,
++164,
++164,
++164,
++165,
++165,
++165,
++165,
++166,
++166,
++167,
++167,
++168,
++168,
++169,
++169,
++170,
++170,
++170,
++170,
++171,
++171,
++171,
++171,
++172,
++172,
++173,
++173,
++174,
++174,
++175,
++175,
++176,
++176,
++176,
++176,
++177,
++177,
++177,
++177,
++178,
++178,
++178,
++178,
++179,
++179,
++179,
++179,
++180,
++180,
++180,
++180,
++181,
++181,
++181,
++181,
++182,
++182,
++182,
++182,
++183,
++183,
++183,
++183,
++184,
++184,
++184,
++184,
++185,
++185,
++185,
++185,
++186,
++186,
++186,
++186,
++187,
++187,
++187,
++187,
++188,
++188,
++188,
++188,
++189,
++189,
++189,
++189,
++190,
++190,
++190,
++190,
++191,
++191,
++191,
++191,
++192,
++192,
++192,
++192,
++193,
++193,
++193,
++193,
++194,
++194,
++194,
++194,
++195,
++195,
++195,
++195,
++196,
++196,
++196,
++196,
++197,
++197,
++197,
++197,
++198,
++198,
++198,
++198,
++199,
++199,
++199,
++199,
++200,
++200,
++200,
++200,
++201,
++201,
++201,
++201,
++202,
++202,
++202,
++203,
++203,
++203,
++203,
++204,
++204,
++204,
++204,
++205,
++205,
++205,
++205,
++206,
++206,
++206,
++206,
++207,
++207,
++207,
++207,
++208,
++208,
++208,
++208,
++209,
++209,
++209,
++209,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++210,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++211,
++212,
++212,
++212,
++212,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++213,
++214,
++214,
++214,
++214,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++215,
++216,
++216,
++216,
++216,
++217,
++217,
++217,
++217,
++218,
++218,
++218,
++218,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++219,
++220,
++220,
++220,
++220,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++221,
++222,
++222,
++222,
++222,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++223,
++224,
++224,
++224,
++224,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++225,
++226,
++226,
++226,
++226,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++227,
++228,
++228,
++228,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++229,
++230,
++230,
++230,
++230,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++231,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++232,
++233,
++233,
++233,
++233,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++234,
++235,
++235,
++235,
++235,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++236,
++237,
++237,
++237,
++237,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++238,
++239,
++239,
++239,
++239,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++240,
++241,
++241,
++241,
++241,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++242,
++243,
++243,
++243,
++243,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++244,
++245,
++245,
++245,
++245,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++246,
++247,
++247,
++247,
++247,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++248,
++249,
++249,
++249,
++249,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++250,
++251,
++251,
++251,
++251,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++252,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++253,
++254,
++254,
++254,
++254,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255,
++255
+Index: git/include/linux/omap_resizer.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/include/linux/omap_resizer.h 2009-02-12 10:31:16.000000000 -0600
+@@ -0,0 +1,136 @@
++/*
++ * drivers/media/video/isp/omap_resizer.h
++ *
++ * Include file for Resizer module wrapper in TI's OMAP3430 ISP
++ *
++ * Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package 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 PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++#ifndef OMAP_RESIZER_H
++#define OMAP_RESIZER_H
++
++#include <linux/types.h>
++
++/* ioctls definition */
++#define RSZ_IOC_BASE 'R'
++#define RSZ_IOC_MAXNR 9
++
++/*Ioctl options which are to be passed while calling the ioctl*/
++#define RSZ_REQBUF _IOWR(RSZ_IOC_BASE, 1,\
++ struct v4l2_requestbuffers)
++#define RSZ_QUERYBUF _IOWR(RSZ_IOC_BASE, 2, struct v4l2_buffer)
++#define RSZ_S_PARAM _IOWR(RSZ_IOC_BASE, 3, struct rsz_params)
++#define RSZ_G_PARAM _IOWR(RSZ_IOC_BASE, 4, struct rsz_params)
++#define RSZ_RESIZE _IOWR(RSZ_IOC_BASE, 5, __s32)
++#define RSZ_G_STATUS _IOWR(RSZ_IOC_BASE, 6, struct rsz_status)
++#define RSZ_QUEUEBUF _IOWR(RSZ_IOC_BASE, 7, struct v4l2_buffer)
++#define RSZ_GET_CROPSIZE _IOWR(RSZ_IOC_BASE, 8, struct rsz_cropsize)
++#define RSZ_S_EXP _IOWR(RSZ_IOC_BASE, 9, __s32)
++#define RSZ_INTYPE_YCBCR422_16BIT 0
++#define RSZ_INTYPE_PLANAR_8BIT 1
++#define RSZ_PIX_FMT_UYVY 1 /* cb:y:cr:y */
++#define RSZ_PIX_FMT_YUYV 0 /* y:cb:y:cr */
++
++enum config_done {
++ STATE_CONFIGURED, /* Resizer driver configured
++ * by application.
++ */
++ STATE_NOT_CONFIGURED /* Resizer driver not
++ * configured by application.
++ */
++};
++
++/* Structure Definitions */
++
++/* used to luma enhancement options */
++
++struct rsz_yenh {
++ __s32 type; /* represents luma enable or
++ * disable.
++ */
++ __u8 gain; /* represents gain. */
++ __u8 slop; /* represents slop. */
++ __u8 core; /* Represents core value. */
++};
++
++/* Conatins all the parameters for resizing. This structure
++ * is used to configure resiser parameters
++ */
++struct rsz_params {
++ __s32 in_hsize; /* input frame horizontal
++ * size.
++ */
++ __s32 in_vsize; /* input frame vertical size */
++ __s32 in_pitch; /* offset between two rows of
++ * input frame.
++ */
++ __s32 inptyp; /* for determining 16 bit or
++ * 8 bit data.
++ */
++ __s32 vert_starting_pixel; /* for specifying vertical
++ * starting pixel in input.
++ */
++ __s32 horz_starting_pixel; /* for specyfing horizontal
++ * starting pixel in input.
++ */
++ __s32 cbilin; /* # defined, filter with luma
++ * or bi-linear interpolation.
++ */
++ __s32 pix_fmt; /* # defined, UYVY or YUYV */
++ __s32 out_hsize; /* output frame horizontal
++ * size.
++ */
++ __s32 out_vsize; /* output frame vertical
++ * size.
++ */
++ __s32 out_pitch; /* offset between two rows of
++ * output frame.
++ */
++ __s32 hstph; /* for specifying horizontal
++ * starting phase.
++ */
++ __s32 vstph; /* for specifying vertical
++ * starting phase.
++ */
++ __u16 tap4filt_coeffs[32]; /* horizontal filter
++ * coefficients.
++ */
++ __u16 tap7filt_coeffs[32]; /* vertical filter
++ * coefficients.
++ */
++ struct rsz_yenh yenh_params;
++};
++
++/* Contains the status of hardware and channel */
++struct rsz_status {
++ __s32 chan_busy; /* 1: channel is busy,
++ * 0: channel is not busy
++ */
++ __s32 hw_busy; /* 1: hardware is busy,
++ * 0: hardware is not busy
++ */
++ __s32 src; /* # defined, can be either
++ * SD-RAM or CCDC/PREVIEWER
++ */
++};
++
++/* Passed by application for getting crop size */
++struct rsz_cropsize {
++ __u32 hcrop; /* Number of pixels per line
++ * cropped in output image.
++ */
++
++ __u32 vcrop; /* Number of lines cropped
++ * in output image.
++ */
++};
++
++#endif
+Index: git/drivers/media/video/Kconfig
+===================================================================
+--- git.orig/drivers/media/video/Kconfig 2009-02-12 10:24:15.000000000 -0600
++++ git/drivers/media/video/Kconfig 2009-02-12 10:34:27.000000000 -0600
+@@ -370,6 +370,8 @@
+ To compile this driver as a module, choose M here: the
+ module will be called tvp5150.
+
++source "drivers/media/video/isp/Kconfig"
++
+ config VIDEO_VPX3220
+ tristate "vpx3220a, vpx3216b & vpx3214c video decoders"
+ depends on VIDEO_V4L1 && I2C
+Index: git/drivers/media/video/isp/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/Kconfig 2009-02-12 14:53:17.000000000 -0600
+@@ -0,0 +1,13 @@
++config VIDEO_OMAP34XX_ISP
++ tristate "omap isp driver"
++ depends on ARCH_OMAP34XX
++ select VIDEOBUF_DMA_SG
++
++config VIDEO_OMAP34XX_ISP_PREVIEWER
++ tristate "omap isp previewer"
++ depends on VIDEO_OMAP34XX_ISP && !ARCH_OMAP3410
++
++config VIDEO_OMAP34XX_ISP_RESIZER
++ tristate "omap isp resizer"
++ depends on VIDEO_OMAP34XX_ISP && !ARCH_OMAP3410
++
+Index: git/drivers/media/video/Makefile
+===================================================================
+--- git.orig/drivers/media/video/Makefile 2009-02-12 11:02:15.000000000 -0600
++++ git/drivers/media/video/Makefile 2009-02-12 11:03:13.000000000 -0600
+@@ -18,6 +18,8 @@
+ obj-$(CONFIG_VIDEO_DEV) += v4l1-compat.o
+ endif
+
++obj-y += isp/
++
+ obj-$(CONFIG_VIDEO_TUNER) += tuner.o
+
+ obj-$(CONFIG_VIDEO_BT848) += bt8xx/
+Index: git/drivers/media/video/isp/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/Makefile 2009-02-12 11:13:53.000000000 -0600
+@@ -0,0 +1,9 @@
++# Makefile for OMAP3 ISP driver
++
++obj-$(CONFIG_VIDEO_OMAP34XX_ISP) += isp.o ispccdc.o ispmmu.o
++
++obj-$(CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER) += isppreview.o isph3a.o isphist.o \
++ omap_previewer.o isp_af.o
++
++obj-$(CONFIG_VIDEO_OMAP34XX_ISP_RESIZER) += ispresizer.o omap_resizer.o
++
+Index: git/drivers/media/video/isp/ispccd_lsc.dat
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/media/video/isp/ispccd_lsc.dat 2009-02-12 11:38:30.000000000 -0600
+@@ -0,0 +1,123 @@
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68,
++0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68, 0x40, 0x40, 0x68, 0x68
+Index: git/include/media/videobuf-dma-sg.h
+===================================================================
+--- git.orig/include/media/videobuf-dma-sg.h 2009-02-12 12:03:38.000000000 -0600
++++ git/include/media/videobuf-dma-sg.h 2009-02-12 14:02:41.000000000 -0600
+@@ -68,6 +68,9 @@
+ /* for kernel buffers */
+ void *vmalloc;
+
++ /* Stores the userspace pointer to vmalloc area */
++ void *varea;
++
+ /* for overlay buffers (pci-pci dma) */
+ dma_addr_t bus_addr;
+
diff --git a/packages/linux/linux-omap-2.6.28/beagleboard/defconfig b/packages/linux/linux-omap-2.6.28/beagleboard/defconfig
index 2a0818ab0f..45958e0e07 100644
--- a/packages/linux/linux-omap-2.6.28/beagleboard/defconfig
+++ b/packages/linux/linux-omap-2.6.28/beagleboard/defconfig
@@ -98,7 +98,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap-2.6.28/omap3-pandora/defconfig b/packages/linux/linux-omap-2.6.28/omap3-pandora/defconfig
index 6efe4ed660..5db83f08da 100644
--- a/packages/linux/linux-omap-2.6.28/omap3-pandora/defconfig
+++ b/packages/linux/linux-omap-2.6.28/omap3-pandora/defconfig
@@ -100,7 +100,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap-2.6.28/omap3evm/defconfig b/packages/linux/linux-omap-2.6.28/omap3evm/defconfig
index e5399f3141..da5a8c4b90 100644
--- a/packages/linux/linux-omap-2.6.28/omap3evm/defconfig
+++ b/packages/linux/linux-omap-2.6.28/omap3evm/defconfig
@@ -100,7 +100,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap-2.6.28/overo/defconfig b/packages/linux/linux-omap-2.6.28/overo/defconfig
new file mode 100644
index 0000000000..d462085be7
--- /dev/null
+++ b/packages/linux/linux-omap-2.6.28/overo/defconfig
@@ -0,0 +1,2175 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28-omap1
+# Mon Mar 2 14:56:32 2009
+#
+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_HAVE_LATENCYTOP_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_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_OPROFILE_ARMV7=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+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_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_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_COMPAT_BRK is not set
+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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=y
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY 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"
+CONFIG_CLASSIC_RCU=y
+CONFIG_FREEZER=y
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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
+# CONFIG_ARCH_MSM is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_SMARTREFLEX=y
+# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
+# CONFIG_OMAP_RESET_CLOCKS is not set
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+# CONFIG_OMAP_COMPONENT_VERSION is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MMU_FWK is not set
+# CONFIG_OMAP_MBOX_FWK is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_TICK_GPTIMER=1
+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_OMAP2_DSS=y
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+CONFIG_OMAP2_DSS_RFBI=y
+CONFIG_OMAP2_DSS_VENC=y
+CONFIG_OMAP2_DSS_SDI=y
+CONFIG_OMAP2_DSS_DSI=y
+CONFIG_OMAP2_DSS_USE_DSI_PLL=y
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+CONFIG_MACH_OVERO=y
+# CONFIG_MACH_OMAP3_PANDORA is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_IFAR=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_THUMBEE=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=128
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_LEDS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+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=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+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=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+# CONFIG_ARM_ERRATUM_451034 is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+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_XFRM_STATISTICS 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=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_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=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO 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=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD 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_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_TPROXY=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_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=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_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_NF_DEFRAG_IPV4 is not set
+# CONFIG_NF_CONNTRACK_IPV4 is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_IDLETIMER=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_NF_CONNTRACK_IPV6 is not set
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_TARGET_LOG is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW 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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=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=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=y
+CONFIG_BT_HCIBPA10X=y
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIBRF6150 is not set
+# CONFIG_BT_HCIH4P is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_MAC80211=y
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU 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_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# 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 is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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
+
+#
+# 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
+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_GPIO is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# 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=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_EEPROM_93CX6=y
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=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=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 is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA 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=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_DELAY=m
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=y
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_LIBERTAS_THINFIRM=m
+CONFIG_LIBERTAS_THINFIRM_USB=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8187=y
+# CONFIG_MAC80211_HWSIM is not set
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+# CONFIG_IWLWIFI_LEDS is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_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=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_SMSC95XX 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=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_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=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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_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_TWL4030 is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+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_ELANTECH is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_MADC=m
+CONFIG_TWL4030_PWRBUTTON=y
+CONFIG_TWL4030_POWEROFF=y
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_LP5521 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_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC210X is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_DEBUG_GPIO=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=m
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_TWL4030_BCI_BATTERY is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX 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_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S 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_LM93 is not set
+# CONFIG_SENSORS_MAX1111 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_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 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_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_TSC210X is not set
+CONFIG_SENSORS_OMAP34XX=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+CONFIG_TWL4030_CORE=y
+# CONFIG_TWL4030_POWER is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_MEDIA_ATTACH=y
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_DVB_CAPTURE_DRIVERS=y
+# CONFIG_TTPCI_EEPROM is not set
+
+#
+# Supported USB Adapters
+#
+# CONFIG_DVB_USB is not set
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+# CONFIG_DVB_SIANO_SMS1XXX is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+# CONFIG_DVB_B2C2_FLEXCOP is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+# CONFIG_DVB_STV0288 is not set
+# CONFIG_DVB_STB6000 is not set
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+# CONFIG_DVB_CX24116 is not set
+# CONFIG_DVB_SI21XX is not set
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+# CONFIG_DVB_DRX397XD is not set
+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
+CONFIG_DVB_TDA10048=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+# CONFIG_DVB_OR51211 is not set
+# CONFIG_DVB_OR51132 is not set
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+# CONFIG_DVB_AU8522 is not set
+# CONFIG_DVB_S5H1411 is not set
+
+#
+# Digital terrestrial only tuners/PLL
+#
+# CONFIG_DVB_PLL is not set
+# CONFIG_DVB_TUNER_DIB0070 is not set
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+# CONFIG_DVB_ISL6405 is not set
+CONFIG_DVB_ISL6421=m
+# CONFIG_DVB_LGS8GL5 is not set
+
+#
+# Tools to develop new frontends
+#
+# CONFIG_DVB_DUMMY_FE is not set
+# CONFIG_DVB_AF9013 is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=8
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG=y
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+CONFIG_PANEL_GENERIC=y
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+# CONFIG_PANEL_N800 is not set
+# CONFIG_CTRL_BLIZZARD is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+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
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+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 is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_DRIVERS=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
+# CONFIG_SND_ARM is not set
+# CONFIG_SND_SPI is not set
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+CONFIG_SND_SOC=y
+CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_MCBSP=y
+CONFIG_SND_OMAP_SOC_OVERO=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_TWL4030=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_BRIGHT=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DELL=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# 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
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+CONFIG_OMAP_EHCI_PHY_MODE=y
+# CONFIG_OMAP_EHCI_TLL_MODE 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_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+CONFIG_USB_MUSB_HOST=y
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+# CONFIG_USB_MUSB_OTG is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+CONFIG_USB_MUSB_HDRC_HCD=y
+CONFIG_MUSB_PIO_ONLY=y
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=y
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_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_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 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_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+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 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=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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_OMAP=y
+CONFIG_USB_OMAP=m
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU 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_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_ISP1301_OMAP is not set
+CONFIG_TWL4030_USB=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_OMAP_HS=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+# CONFIG_LEDS_OMAP is not set
+# CONFIG_LEDS_OMAP_PWM is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS 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=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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=y
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO 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_EXT4_FS=m
+# CONFIG_EXT4DEV_COMPAT is not set
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=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=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_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE 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_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_XATTR=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+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
+
+#
+# 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
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_CRYPTD=m
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=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/linux-omap-2.6.28/overo/overo-ehci.patch b/packages/linux/linux-omap-2.6.28/overo/overo-ehci.patch
new file mode 100644
index 0000000000..ff81d98095
--- /dev/null
+++ b/packages/linux/linux-omap-2.6.28/overo/overo-ehci.patch
@@ -0,0 +1,113 @@
+diff --git a/arch/arm/mach-omap2/usb-ehci.c b/arch/arm/mach-omap2/usb-ehci.c
+index 489439d..2c6305b 100644
+--- a/arch/arm/mach-omap2/usb-ehci.c
++++ b/arch/arm/mach-omap2/usb-ehci.c
+@@ -152,9 +152,7 @@ static void setup_ehci_io_mux(void)
+ void __init usb_ehci_init(void)
+ {
+ #if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
+- /* Setup Pin IO MUX for EHCI */
+- if (cpu_is_omap34xx())
+- setup_ehci_io_mux();
++ /* TODO: Setup Pin IO MUX for EHCI - moved this temporarily to U-boot */
+
+ if (platform_device_register(&ehci_device) < 0) {
+ printk(KERN_ERR "Unable to register HS-USB (EHCI) device\n");
+
+diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
+index 1b3266c..8472996 100644
+--- a/drivers/usb/host/ehci-omap.c
++++ b/drivers/usb/host/ehci-omap.c
+@@ -48,16 +48,26 @@
+ * to get the PHY state machine in working state
+ */
+ #define EXTERNAL_PHY_RESET
++#ifdef CONFIG_MACH_OVERO
++#define EXT_PHY_RESET_GPIO_PORT2 (183)
++#else
+ #define EXT_PHY_RESET_GPIO_PORT1 (57)
+ #define EXT_PHY_RESET_GPIO_PORT2 (61)
++#endif
+ #define EXT_PHY_RESET_DELAY (10)
+
++#define PHY_STP_PULLUP_ENABLE (0x10)
++#define PHY_STP_PULLUP_DISABLE (0x90)
++
++
+ /* ISSUE2:
+ * USBHOST supports External charge pump PHYs only
+ * Use the VBUS from Port1 to power VBUS of Port2 externally
+ * So use Port2 as the working ULPI port
+ */
++#ifndef CONFIG_MACH_OVERO
+ #define VBUS_INTERNAL_CHARGEPUMP_HACK
++#endif
+
+ #endif /* CONFIG_OMAP_EHCI_PHY_MODE */
+
+@@ -225,14 +235,43 @@ static int omap_start_ehc(struct platform_device *dev, struct usb_hcd *hcd)
+
+ #ifdef EXTERNAL_PHY_RESET
+ /* Refer: ISSUE1 */
++#ifndef CONFIG_MACH_OVERO
+ gpio_request(EXT_PHY_RESET_GPIO_PORT1, "USB1 PHY reset");
+ gpio_direction_output(EXT_PHY_RESET_GPIO_PORT1, 0);
++#endif
+ gpio_request(EXT_PHY_RESET_GPIO_PORT2, "USB2 PHY reset");
+ gpio_direction_output(EXT_PHY_RESET_GPIO_PORT2, 0);
++ gpio_set_value(EXT_PHY_RESET_GPIO_PORT2, 0);
+ /* Hold the PHY in RESET for enough time till DIR is high */
+ udelay(EXT_PHY_RESET_DELAY);
+ #endif
+
++ /*
++ * The PHY register 0x7 - Interface Control register is
++ * configured to disable the integrated STP pull-up resistor
++ * used for interface protection.
++ *
++ * May not need to be here.
++ */
++ omap_writel((0x7 << EHCI_INSNREG05_ULPI_REGADD_SHIFT) |/* interface reg */
++ (2 << EHCI_INSNREG05_ULPI_OPSEL_SHIFT) |/* Write */
++ (1 << EHCI_INSNREG05_ULPI_PORTSEL_SHIFT) |/* Port1 */
++ (1 << EHCI_INSNREG05_ULPI_CONTROL_SHIFT) |/* Start */
++ (PHY_STP_PULLUP_DISABLE),
++ EHCI_INSNREG05_ULPI);
++
++ while (!(omap_readl(EHCI_INSNREG05_ULPI) & (1<<EHCI_INSNREG05_ULPI_CONTROL_SHIFT)));
++
++ /* Force PHY to HS */
++ omap_writel((0x4 << EHCI_INSNREG05_ULPI_REGADD_SHIFT) |/* function ctrl */
++ (2 << EHCI_INSNREG05_ULPI_OPSEL_SHIFT) |/* Write */
++ (1 << EHCI_INSNREG05_ULPI_PORTSEL_SHIFT) |/* Port1 */
++ (1 << EHCI_INSNREG05_ULPI_CONTROL_SHIFT) |/* Start */
++ (0x40),
++ EHCI_INSNREG05_ULPI);
++
++ while (!(omap_readl(EHCI_INSNREG05_ULPI) & (1<<EHCI_INSNREG05_ULPI_CONTROL_SHIFT)));
++
+ /* Configure TLL for 60Mhz clk for ULPI */
+ ehci_clocks->usbtll_fck_clk = clk_get(&dev->dev, USBHOST_TLL_FCLK);
+ if (IS_ERR(ehci_clocks->usbtll_fck_clk))
+@@ -307,7 +346,9 @@ static int omap_start_ehc(struct platform_device *dev, struct usb_hcd *hcd)
+ * Hold the PHY in RESET for enough time till PHY is settled and ready
+ */
+ udelay(EXT_PHY_RESET_DELAY);
++#ifndef CONFIG_MACH_OVERO
+ gpio_set_value(EXT_PHY_RESET_GPIO_PORT1, 1);
++#endif
+ gpio_set_value(EXT_PHY_RESET_GPIO_PORT2, 1);
+ #endif
+
+@@ -393,7 +434,9 @@ static void omap_stop_ehc(struct platform_device *dev, struct usb_hcd *hcd)
+
+
+ #ifdef EXTERNAL_PHY_RESET
++#ifndef CONFIG_MACH_OVERO
+ gpio_free(EXT_PHY_RESET_GPIO_PORT1);
++#endif
+ gpio_free(EXT_PHY_RESET_GPIO_PORT2);
+ #endif
+
+--
+1.6.0.4.790.gaa14a
diff --git a/packages/linux/linux-omap-pm/0004-DSS-support-for-Beagle-Board.patch b/packages/linux/linux-omap-pm/0004-DSS-support-for-Beagle-Board.patch
index e9fe999baf..769cbcbff0 100644
--- a/packages/linux/linux-omap-pm/0004-DSS-support-for-Beagle-Board.patch
+++ b/packages/linux/linux-omap-pm/0004-DSS-support-for-Beagle-Board.patch
@@ -1457,13 +1457,15 @@ diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board
index fe97bab..61f0fc9 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -43,6 +43,8 @@
- #include <mach/gpmc.h>
- #include <mach/nand.h>
+--- /tmp/board-omap3beagle.c 2009-02-17 22:48:44.000000000 +0100
++++ git/arch/arm/mach-omap2/board-omap3beagle.c 2009-02-17 22:49:05.000000000 +0100
+@@ -45,6 +45,8 @@
#include <mach/mux.h>
+ #include <mach/omap-pm.h>
+ #include <mach/clock.h>
+#include <mach/omapfb.h>
+#include <mach/display.h>
-
+
#include "twl4030-generic-scripts.h"
#include "mmc-twl4030.h"
@@ -238,15 +240,6 @@ static void __init omap3_beagle_init_irq(void)
diff --git a/packages/linux/linux-omap-pm/add-cpufreq-for-omap3evm.diff b/packages/linux/linux-omap-pm/add-cpufreq-for-omap3evm.diff
new file mode 100644
index 0000000000..e9986cf36a
--- /dev/null
+++ b/packages/linux/linux-omap-pm/add-cpufreq-for-omap3evm.diff
@@ -0,0 +1,28 @@
+--- /tmp/board-omap3evm.c 2009-02-27 17:02:00.000000000 +0100
++++ git/arch/arm/mach-omap2/board-omap3evm.c 2009-02-27 17:21:10.000000000 +0100
+@@ -37,11 +37,14 @@
+ #include <mach/common.h>
+ #include <mach/mcspi.h>
+ #include <mach/display.h>
++#include <mach/omap-pm.h>
++#include <mach/clock.h>
+
+ #include "sdram-micron-mt46h32m32lf-6.h"
+ #include "twl4030-generic-scripts.h"
+ #include "mmc-twl4030.h"
+-
++#include "pm.h"
++#include "omap3-opp.h"
+
+ static struct resource omap3evm_smc911x_resources[] = {
+ [0] = {
+@@ -406,7 +409,8 @@
+
+ static void __init omap3_evm_init_irq(void)
+ {
+- omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL, NULL, NULL);
++ omap2_init_common_hw(mt46h32m32lf6_sdrc_params, omap3_mpu_rate_table,
++ omap3_dsp_rate_table, omap3_l3_rate_table);
+ omap_init_irq();
+ omap_gpio_init();
+ omap3evm_init_smc911x();
diff --git a/packages/linux/linux-omap-pm/beagle-cpufreq.diff b/packages/linux/linux-omap-pm/beagle-cpufreq.diff
deleted file mode 100644
index 811f1ed626..0000000000
--- a/packages/linux/linux-omap-pm/beagle-cpufreq.diff
+++ /dev/null
@@ -1,86 +0,0 @@
---- /tmp/board-omap3beagle.c 2009-01-13 19:49:19.000000000 +0100
-+++ git/arch/arm/mach-omap2/board-omap3beagle.c 2009-01-13 19:51:26.000000000 +0100
-@@ -41,13 +41,72 @@
- #include <mach/usb-ehci.h>
- #include <mach/common.h>
- #include <mach/gpmc.h>
-+#include <mach/omap-pm.h>
- #include <mach/nand.h>
- #include <mach/mux.h>
- #include <mach/omapfb.h>
- #include <mach/display.h>
-+#include <mach/clock.h>
-
- #include "twl4030-generic-scripts.h"
- #include "mmc-twl4030.h"
-+#include "pm.h"
-+
-+/* MPU speeds */
-+#define S600M 600000000
-+#define S550M 550000000
-+#define S500M 500000000
-+#define S250M 250000000
-+#define S125M 125000000
-+
-+/* DSP speeds */
-+#define S430M 430000000
-+#define S400M 400000000
-+#define S360M 360000000
-+#define S180M 180000000
-+#define S90M 90000000
-+
-+/* L3 speeds */
-+#define S83M 83000000
-+#define S166M 166000000
-+
-+static struct omap_opp mpu_rate_table[] = {
-+ {0, 0, 0},
-+ /*OPP1*/
-+ {S125M, VDD1_OPP1, 0x18},
-+ /*OPP2*/
-+ {S250M, VDD1_OPP2, 0x20},
-+ /*OPP3*/
-+ {S500M, VDD1_OPP3, 0x30},
-+ /*OPP4*/
-+ {S550M, VDD1_OPP4, 0x36},
-+ /*OPP5*/
-+ {S600M, VDD1_OPP5, 0x3C},
-+};
-+
-+static struct omap_opp l3_rate_table[] = {
-+ {0, 0, 0},
-+ /*OPP1*/
-+ {0, VDD2_OPP1, 0x18},
-+ /*OPP2*/
-+ {S83M, VDD2_OPP2, 0x20},
-+ /*OPP3*/
-+ {S166M, VDD2_OPP3, 0x2C},
-+};
-+
-+struct omap_opp dsp_rate_table[] = {
-+ {0, 0, 0},
-+ /*OPP1*/
-+ {S90M, VDD1_OPP1, 0x18},
-+ /*OPP2*/
-+ {S180M, VDD1_OPP2, 0x20},
-+ /*OPP3*/
-+ {S360M, VDD1_OPP3, 0x30},
-+ /*OPP4*/
-+ {S400M, VDD1_OPP4, 0x36},
-+ /*OPP5*/
-+ {S430M, VDD1_OPP5, 0x3C},
-+};
-
-
- #define GPMC_CS0_BASE 0x60
-@@ -227,7 +286,9 @@
-
- static void __init omap3_beagle_init_irq(void)
- {
-- omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL, NULL, NULL);
-+ omap2_init_common_hw(mt46h32m32lf6_sdrc_params, mpu_rate_table,
-+ dsp_rate_table, l3_rate_table);
-+
- omap_init_irq();
- omap_gpio_init();
- }
diff --git a/packages/linux/linux-omap-pm/beagleboard/defconfig b/packages/linux/linux-omap-pm/beagleboard/defconfig
index ef43e33b40..83327b444e 100644
--- a/packages/linux/linux-omap-pm/beagleboard/defconfig
+++ b/packages/linux/linux-omap-pm/beagleboard/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28-rc8-omap1
-# Mon Jan 12 15:57:49 2009
+# Linux kernel version: 2.6.28-omap1
+# Thu Mar 5 20:20:28 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -98,7 +98,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
@@ -195,6 +195,7 @@ CONFIG_OMAP_MCBSP=y
CONFIG_OMAP_32K_TIMER=y
# CONFIG_OMAP3_DEBOBS is not set
CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_TICK_GPTIMER=12
CONFIG_OMAP_DM_TIMER=y
# CONFIG_OMAP_LL_DEBUG_UART1 is not set
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
@@ -223,7 +224,6 @@ CONFIG_MACH_OMAP3EVM=y
CONFIG_MACH_OMAP3_BEAGLE=y
# CONFIG_MACH_OVERO is not set
# CONFIG_MACH_OMAP3_PANDORA is not set
-CONFIG_OMAP_TICK_GPTIMER=12
#
# Boot options
@@ -384,7 +384,7 @@ CONFIG_XFRM=y
CONFIG_NET_KEY=y
# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
@@ -393,6 +393,7 @@ 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 is not set
# CONFIG_INET_AH is not set
@@ -430,15 +431,178 @@ CONFIG_IPV6_NDISC_NODETYPE=y
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_IPV6_MROUTE is not set
# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=y
+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_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=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_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_IDLETIMER=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+CONFIG_BRIDGE_NF_EBTABLES=y
+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_IP6=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_BRIDGE_EBT_NFLOG=m
# 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_STP=y
+CONFIG_BRIDGE=y
# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
+CONFIG_VLAN_8021Q=m
+# CONFIG_VLAN_8021Q_GVRP 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
@@ -446,7 +610,59 @@ CONFIG_IPV6_NDISC_NODETYPE=y
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_SCHED is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_MULTIQ=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_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_CLS_FLOW=m
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_U32=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+# CONFIG_NET_ACT_IPT is not set
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_ACT_SKBEDIT=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
#
# Network testing
@@ -701,6 +917,7 @@ CONFIG_DM_MULTIPATH=m
CONFIG_DM_DELAY=m
# CONFIG_DM_UEVENT is not set
CONFIG_NETDEVICES=y
+# CONFIG_IFB is not set
CONFIG_DUMMY=m
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
@@ -1503,7 +1720,7 @@ CONFIG_USB_MON=y
CONFIG_USB_EHCI_HCD=y
CONFIG_OMAP_EHCI_PHY_MODE=y
# CONFIG_OMAP_EHCI_TLL_MODE is not set
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+# 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
@@ -2189,6 +2406,10 @@ CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=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-omap-pm/omap3-pandora/defconfig b/packages/linux/linux-omap-pm/omap3-pandora/defconfig
index 6efe4ed660..5db83f08da 100644
--- a/packages/linux/linux-omap-pm/omap3-pandora/defconfig
+++ b/packages/linux/linux-omap-pm/omap3-pandora/defconfig
@@ -100,7 +100,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap-pm/omap3evm/defconfig b/packages/linux/linux-omap-pm/omap3evm/defconfig
index e5399f3141..7a90a53edb 100644
--- a/packages/linux/linux-omap-pm/omap3evm/defconfig
+++ b/packages/linux/linux-omap-pm/omap3evm/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.28-omap1
-# Thu Jan 8 16:06:45 2009
+# Fri Feb 27 17:50:51 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -100,7 +100,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
@@ -195,11 +195,16 @@ CONFIG_OMAP_MCBSP=y
# CONFIG_OMAP_MBOX_FWK is not set
# CONFIG_OMAP_MPU_TIMER is not set
CONFIG_OMAP_32K_TIMER=y
+# CONFIG_OMAP3_DEBOBS is not set
CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_TICK_GPTIMER=12
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
+# CONFIG_OMAP_PM_NONE is not set
+CONFIG_OMAP_PM_NOOP=y
+# CONFIG_OMAP_PM_SRF is not set
CONFIG_OMAP2_DSS=y
CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
# CONFIG_OMAP2_DSS_RFBI is not set
@@ -221,7 +226,6 @@ CONFIG_MACH_OMAP3EVM=y
# CONFIG_MACH_OMAP3_BEAGLE is not set
# CONFIG_MACH_OVERO is not set
# CONFIG_MACH_OMAP3_PANDORA is not set
-CONFIG_OMAP_TICK_GPTIMER=12
#
# Boot options
@@ -328,7 +332,9 @@ 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_IDLE is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
#
# Floating point emulation
@@ -613,7 +619,15 @@ CONFIG_MTD_ONENAND_OMAP2=y
#
# UBI - Unsorted block images
#
-# CONFIG_MTD_UBI is not set
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
@@ -1902,6 +1916,12 @@ CONFIG_JFFS2_RUBIN=y
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_XATTR=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
CONFIG_CRAMFS=m
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
@@ -2167,8 +2187,8 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
#
# Compression
#
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_LZO=y
#
# Random Number Generation
@@ -2181,7 +2201,7 @@ CONFIG_CRYPTO_HW=y
#
CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
-CONFIG_CRC16=m
+CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
diff --git a/packages/linux/linux-omap-pm/register-all-OPPs.diff b/packages/linux/linux-omap-pm/register-all-OPPs.diff
new file mode 100644
index 0000000000..95e6b9bfab
--- /dev/null
+++ b/packages/linux/linux-omap-pm/register-all-OPPs.diff
@@ -0,0 +1,12 @@
+--- /tmp/clock34xx.c 2009-02-18 13:51:18.000000000 +0100
++++ git/arch/arm/mach-omap2/clock34xx.c 2009-02-18 13:51:51.000000000 +0100
+@@ -698,8 +698,7 @@
+ if (!mpu_opps)
+ return;
+
+- /* Avoid registering the 120% Overdrive with CPUFreq */
+- prcm = mpu_opps + MAX_VDD1_OPP - 1;
++ prcm = mpu_opps + MAX_VDD1_OPP;
+ for (; prcm->rate; prcm--) {
+ freq_table[i].index = i;
+ freq_table[i].frequency = prcm->rate / 1000;
diff --git a/packages/linux/linux-omap-pm/usbttyfix.patch b/packages/linux/linux-omap-pm/usbttyfix.patch
new file mode 100644
index 0000000000..997705a31b
--- /dev/null
+++ b/packages/linux/linux-omap-pm/usbttyfix.patch
@@ -0,0 +1,29 @@
+To get USB HOST mode working on USB OTG Port with USB TTY enabled U-boot
+
+Signed-off-by: Syed Mohammed Khasim <khasim@ti.com>
+---
+--- linux-2.6.git/drivers/usb/musb/omap2430.c 2009-01-19 22:42:18.000000000 +0530
++++ linux-2.6.git/drivers/usb/musb/omap2430.c 2009-02-19 12:45:22.000000000 +0530
+@@ -33,6 +33,7 @@
+ #include <linux/list.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
++#include <linux/i2c/twl4030.h>
+
+ #include <asm/mach-types.h>
+ #include <mach/hardware.h>
+@@ -233,6 +234,14 @@ int __init musb_platform_init(struct mus
+ omap_cfg_reg(AE5_2430_USB0HS_STP);
+ #endif
+
++ /* Reset MUSB Controller */
++ omap_writel(SOFTRST,OTG_SYSCONFIG);
++
++#if defined(CONFIG_TWL4030_USB)
++ /* Reset the TWL USB PHY */
++ twl4030_i2c_write_u8(TWL4030_MODULE_USB, 0x60, 0x4);
++#endif
++
+ musb->xceiv = *x;
+ musb_platform_resume(musb);
+
diff --git a/packages/linux/linux-omap-pm_git.bb b/packages/linux/linux-omap-pm_git.bb
index ce9b58480d..0649a2541b 100644
--- a/packages/linux/linux-omap-pm_git.bb
+++ b/packages/linux/linux-omap-pm_git.bb
@@ -7,10 +7,10 @@ COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|
DEFAULT_PREFERENCE = "-1"
-SRCREV = "998bd5675a1e9ef646be771fbade01c585800765"
+SRCREV = "65d02c2c7fe676369b7162459feec60268c7f4ba"
-PV = "2.6.28-pm1+gitr${SRCREV}"
-PR = "r0"
+PV = "2.6.28-pm2+gitr${SRCREV}"
+PR = "r5"
SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm.git;protocol=git;branch=pm \
file://defconfig"
@@ -45,7 +45,9 @@ SRC_URI_append = " \
file://0001-ASoC-Add-support-for-OMAP3-EVM.patch;patch=1 \
file://0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch;patch=1 \
file://dss2.diff;patch=1 \
- file://beagle-cpufreq.diff;patch=1 \
+ file://register-all-OPPs.diff;patch=1 \
+ file://add-cpufreq-for-omap3evm.diff;patch=1 \
+ file://usbttyfix.patch;patch=1 \
"
diff --git a/packages/linux/linux-omap/0001-board-omap3beagle-set-i2c-3-to-100kHz.patch b/packages/linux/linux-omap/0001-board-omap3beagle-set-i2c-3-to-100kHz.patch
new file mode 100644
index 0000000000..d4a9716349
--- /dev/null
+++ b/packages/linux/linux-omap/0001-board-omap3beagle-set-i2c-3-to-100kHz.patch
@@ -0,0 +1,30 @@
+From 8364891aa9a99eac26e6069840c00489764d963f Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@beagleboard.org>
+Date: Thu, 15 Jan 2009 20:11:07 +0100
+Subject: [PATCH] board-omap3beagle: set i2c-3 to 100kHz
+
+Changing it do 100kHz is needed to make more devices works properly. Controlling the TI DLP Pico projector[1] doesn't work properly at 400kHz, 100kHz and lower work fine. EDID readout is unaffected by this change.
+
+[1] http://focus.ti.com/dlpdmd/docs/dlpdiscovery.tsp?sectionId=60&tabId=2234
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index fe97bab..f279404 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -227,7 +227,7 @@ static int __init omap3_beagle_i2c_init(void)
+ #ifdef CONFIG_I2C2_OMAP_BEAGLE
+ omap_register_i2c_bus(2, 400, NULL, 0);
+ #endif
+- omap_register_i2c_bus(3, 400, NULL, 0);
++ omap_register_i2c_bus(3, 100, NULL, 0);
+ return 0;
+ }
+
+--
+1.5.6.5
+
diff --git a/packages/linux/linux-omap/beagleboard/defconfig b/packages/linux/linux-omap/beagleboard/defconfig
index d2f0af0c60..7fb93dfc78 100644
--- a/packages/linux/linux-omap/beagleboard/defconfig
+++ b/packages/linux/linux-omap/beagleboard/defconfig
@@ -98,7 +98,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap/omap3-pandora/defconfig b/packages/linux/linux-omap/omap3-pandora/defconfig
index 6efe4ed660..5db83f08da 100644
--- a/packages/linux/linux-omap/omap3-pandora/defconfig
+++ b/packages/linux/linux-omap/omap3-pandora/defconfig
@@ -100,7 +100,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap/omap3evm/defconfig b/packages/linux/linux-omap/omap3evm/defconfig
index e5399f3141..da5a8c4b90 100644
--- a/packages/linux/linux-omap/omap3evm/defconfig
+++ b/packages/linux/linux-omap/omap3evm/defconfig
@@ -100,7 +100,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap/overo/defconfig b/packages/linux/linux-omap/overo/defconfig
new file mode 100644
index 0000000000..c92e425140
--- /dev/null
+++ b/packages/linux/linux-omap/overo/defconfig
@@ -0,0 +1,1967 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28-omap1
+# Wed Feb 4 12:40:38 2009
+#
+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_HAVE_LATENCYTOP_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_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_OPROFILE_ARMV7=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+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_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_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_COMPAT_BRK is not set
+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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=y
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY 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"
+CONFIG_CLASSIC_RCU=y
+CONFIG_FREEZER=y
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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
+# CONFIG_ARCH_MSM is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_SMARTREFLEX=y
+# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
+# CONFIG_OMAP_RESET_CLOCKS is not set
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+# CONFIG_OMAP_COMPONENT_VERSION is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MMU_FWK is not set
+# CONFIG_OMAP_MBOX_FWK is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_TICK_GPTIMER=1
+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_OMAP2_DSS=y
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+CONFIG_OMAP2_DSS_RFBI=y
+CONFIG_OMAP2_DSS_VENC=y
+CONFIG_OMAP2_DSS_SDI=y
+CONFIG_OMAP2_DSS_DSI=y
+CONFIG_OMAP2_DSS_USE_DSI_PLL=y
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+CONFIG_MACH_OVERO=y
+# CONFIG_MACH_OMAP3_PANDORA is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_IFAR=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_THUMBEE=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=128
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_LEDS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+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=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+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=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+# CONFIG_ARM_ERRATUM_451034 is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+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_XFRM_STATISTICS 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=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_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=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO 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=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD 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_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE 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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=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=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=y
+CONFIG_BT_HCIBPA10X=y
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIBRF6150 is not set
+# CONFIG_BT_HCIH4P is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_MAC80211=y
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU 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_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# 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 is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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
+
+#
+# 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
+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_GPIO is not set
+# CONFIG_MTD_NAND_OMAP2 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_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# 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=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=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=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 is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA 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=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_DELAY=m
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=y
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS 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=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_SMSC95XX 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=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_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=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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_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_TWL4030 is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+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_ELANTECH is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_MADC=m
+CONFIG_TWL4030_PWRBUTTON=y
+CONFIG_TWL4030_POWEROFF=y
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_LP5521 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_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC210X is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_DEBUG_GPIO=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=m
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_TWL4030_BCI_BATTERY is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX 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_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S 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_LM93 is not set
+# CONFIG_SENSORS_MAX1111 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_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 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_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_TSC210X is not set
+CONFIG_SENSORS_OMAP34XX=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+CONFIG_TWL4030_CORE=y
+# CONFIG_TWL4030_POWER is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_MEDIA_ATTACH=y
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_DVB_CAPTURE_DRIVERS=y
+# CONFIG_TTPCI_EEPROM is not set
+
+#
+# Supported USB Adapters
+#
+# CONFIG_DVB_USB is not set
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+# CONFIG_DVB_SIANO_SMS1XXX is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+# CONFIG_DVB_B2C2_FLEXCOP is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+# CONFIG_DVB_STV0288 is not set
+# CONFIG_DVB_STB6000 is not set
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+# CONFIG_DVB_CX24116 is not set
+# CONFIG_DVB_SI21XX is not set
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+# CONFIG_DVB_DRX397XD is not set
+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
+CONFIG_DVB_TDA10048=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+# CONFIG_DVB_OR51211 is not set
+# CONFIG_DVB_OR51132 is not set
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+# CONFIG_DVB_AU8522 is not set
+# CONFIG_DVB_S5H1411 is not set
+
+#
+# Digital terrestrial only tuners/PLL
+#
+# CONFIG_DVB_PLL is not set
+# CONFIG_DVB_TUNER_DIB0070 is not set
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+# CONFIG_DVB_ISL6405 is not set
+CONFIG_DVB_ISL6421=m
+# CONFIG_DVB_LGS8GL5 is not set
+
+#
+# Tools to develop new frontends
+#
+# CONFIG_DVB_DUMMY_FE is not set
+# CONFIG_DVB_AF9013 is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=8
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG=y
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+CONFIG_PANEL_GENERIC=y
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+# CONFIG_PANEL_N800 is not set
+# CONFIG_CTRL_BLIZZARD is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+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
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+# CONFIG_SOUND_OSS_CORE is not set
+# CONFIG_SND is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_BRIGHT=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DELL=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# 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
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+CONFIG_OMAP_EHCI_PHY_MODE=y
+# CONFIG_OMAP_EHCI_TLL_MODE 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_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+CONFIG_USB_MUSB_HOST=y
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+# CONFIG_USB_MUSB_OTG is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+CONFIG_USB_MUSB_HDRC_HCD=y
+CONFIG_MUSB_PIO_ONLY=y
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=y
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_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_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 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_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+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 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=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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_OMAP=y
+CONFIG_USB_OMAP=m
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU 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_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_ISP1301_OMAP is not set
+CONFIG_TWL4030_USB=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_OMAP_HS=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+# CONFIG_LEDS_OMAP is not set
+# CONFIG_LEDS_OMAP_PWM is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS 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=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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=y
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO 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_EXT4_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_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=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=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_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE 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_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+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 is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+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
+
+#
+# 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
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_CRYPTD=m
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=m
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-omap/usbttyfix.patch b/packages/linux/linux-omap/usbttyfix.patch
new file mode 100644
index 0000000000..997705a31b
--- /dev/null
+++ b/packages/linux/linux-omap/usbttyfix.patch
@@ -0,0 +1,29 @@
+To get USB HOST mode working on USB OTG Port with USB TTY enabled U-boot
+
+Signed-off-by: Syed Mohammed Khasim <khasim@ti.com>
+---
+--- linux-2.6.git/drivers/usb/musb/omap2430.c 2009-01-19 22:42:18.000000000 +0530
++++ linux-2.6.git/drivers/usb/musb/omap2430.c 2009-02-19 12:45:22.000000000 +0530
+@@ -33,6 +33,7 @@
+ #include <linux/list.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
++#include <linux/i2c/twl4030.h>
+
+ #include <asm/mach-types.h>
+ #include <mach/hardware.h>
+@@ -233,6 +234,14 @@ int __init musb_platform_init(struct mus
+ omap_cfg_reg(AE5_2430_USB0HS_STP);
+ #endif
+
++ /* Reset MUSB Controller */
++ omap_writel(SOFTRST,OTG_SYSCONFIG);
++
++#if defined(CONFIG_TWL4030_USB)
++ /* Reset the TWL USB PHY */
++ twl4030_i2c_write_u8(TWL4030_MODULE_USB, 0x60, 0x4);
++#endif
++
+ musb->xceiv = *x;
+ musb_platform_resume(musb);
+
diff --git a/packages/linux/linux-omap2-git/omap3evm/defconfig b/packages/linux/linux-omap2-git/omap3evm/defconfig
index e61fad48d9..a0ba3d1e0a 100644
--- a/packages/linux/linux-omap2-git/omap3evm/defconfig
+++ b/packages/linux/linux-omap2-git/omap3evm/defconfig
@@ -95,7 +95,7 @@ CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_MODVERSIONS=y
diff --git a/packages/linux/linux-omap_2.6.28.bb b/packages/linux/linux-omap_2.6.28.bb
index b44a6232c7..9824d7e667 100644
--- a/packages/linux/linux-omap_2.6.28.bb
+++ b/packages/linux/linux-omap_2.6.28.bb
@@ -3,15 +3,16 @@ require linux.inc
DESCRIPTION = "Linux kernel for OMAP processors"
KERNEL_IMAGETYPE = "uImage"
-COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora"
+COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora|overo"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_beagleboard = "1"
+DEFAULT_PREFERENCE_overo = "1"
SRCREV = "79d042a081d3e467c735bb0d9569ed6296f85a3c"
PV = "2.6.28"
-PR = "r11"
+PR = "r14"
SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git;branch=omap-2.6.28;protocol=git \
file://defconfig"
@@ -47,18 +48,24 @@ SRC_URI_append = " \
file://0013-DSS-OMAPFB-remove-extra-spaces.patch;patch=1 \
file://0014-DSS-fix-clk_get_usecount.patch;patch=1 \
file://0001-ASoC-Add-support-for-OMAP3-EVM.patch;patch=1 \
- file://0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch;patch=1 \
file://0001-board-omap3beagle-set-i2c-3-to-100kHz.patch;patch=1 \
+ file://add-resizer-driver.patch;patch=1 \
+ file://usbttyfix.patch;patch=1 \
"
SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
+ file://0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch;patch=1 \
"
SRC_URI_append_omap3evm = " \
file://evm-mcspi-ts.diff;patch=1 \
"
+SRC_URI_append_overo = " \
+ file://overo-ehci.patch;patch=1 \
+"
+
S = "${WORKDIR}/git"
diff --git a/packages/linux/linux-omap_git.bb b/packages/linux/linux-omap_git.bb
index 708abad181..5c082d28ed 100644
--- a/packages/linux/linux-omap_git.bb
+++ b/packages/linux/linux-omap_git.bb
@@ -3,7 +3,7 @@ require linux.inc
DESCRIPTION = "Linux kernel for OMAP processors"
KERNEL_IMAGETYPE = "uImage"
-COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora"
+COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora|overo"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_omap3evm = "1"
diff --git a/packages/linux/linux-omapzoom/omapzoom/defconfig b/packages/linux/linux-omapzoom/omapzoom/defconfig
new file mode 100644
index 0000000000..764589d7a1
--- /dev/null
+++ b/packages/linux/linux-omapzoom/omapzoom/defconfig
@@ -0,0 +1,1832 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.27.10-omap1
+# Tue Mar 3 16:33:19 2009
+#
+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_HAVE_LATENCYTOP_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_ARCH_SUPPORTS_AOUT=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+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_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_RELAY=y
+# CONFIG_NAMESPACES 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_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=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_PROFILING=y
+# CONFIG_MARKERS is not set
+# CONFIG_OPROFILE is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
+# CONFIG_HAVE_IOREMAP_PROT is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_ARCH_TRACEHOOK is not set
+# CONFIG_HAVE_DMA_ATTRS is not set
+# CONFIG_USE_GENERIC_SMP_HELPERS is not set
+CONFIG_HAVE_CLK=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LSF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY 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"
+CONFIG_CLASSIC_RCU=y
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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
+# CONFIG_ARCH_MSM7X00A is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_SMARTREFLEX=y
+# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+# CONFIG_OMAP_COMPONENT_VERSION is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+CONFIG_OMAP_MUX=y
+CONFIG_OMAP_MUX_DEBUG=y
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+
+#
+# McBSP fifo support
+#
+CONFIG_USE_MCBSP_FIFO=y
+# CONFIG_OMAP_MMU_FWK is not set
+# CONFIG_OMAP_MBOX_FWK 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_SERIAL_WAKE=y
+CONFIG_OMAP_DMA_LIBRARY_CHANNELS=32
+CONFIG_OMAP_DISPLAY=y
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+CONFIG_MACH_OMAP_LDP=y
+# CONFIG_MACH_OMAP_ZOOM2 is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+# CONFIG_MACH_OVERO is not set
+CONFIG_OMAP3_PM=y
+# CONFIG_OMAP_VOLT_SR_BYPASS is not set
+# CONFIG_OMAP_VOLT_SR is not set
+CONFIG_OMAP_VOLT_VSEL=y
+# CONFIG_OMAP_VOLT_VMODE is not set
+CONFIG_OMAP3ES2_VDD1_OPP1=y
+# CONFIG_OMAP3ES2_VDD1_OPP2 is not set
+# CONFIG_OMAP3ES2_VDD1_OPP3 is not set
+# CONFIG_OMAP3ES2_VDD1_OPP4 is not set
+# CONFIG_OMAP3ES2_VDD1_OPP5 is not set
+# CONFIG_OMAP3_CORE_133MHZ is not set
+CONFIG_OMAP3_CORE_166MHZ=y
+CONFIG_OMAP3ES2_VDD2_OPP3=y
+# CONFIG_OMAP3ES2_VDD2_OPP2_L3_83MHZ is not set
+CONFIG_OMAP3ES2_VDD2_OPP3_L3_166MHZ=y
+# CONFIG_OMAP3ES2_VDD2_OPP2_L3_66MHZ is not set
+# CONFIG_OMAP3ES2_VDD2_OPP3_L3_133MHZ is not set
+CONFIG_OMAP_TICK_GPTIMER=1
+# CONFIG_TRACK_RESOURCES is not set
+CONFIG_AUTO_POWER_DOMAIN_CTRL=y
+CONFIG_MPU_OFF=y
+CONFIG_OMAP34XX_OFFMODE=y
+CONFIG_OMAP34XX_OSWR=y
+CONFIG_CORE_OFF=y
+CONFIG_CORE_OFF_CPUIDLE=y
+# CONFIG_SYSOFFMODE is not set
+CONFIG_HW_SUP_TRANS=y
+CONFIG_DISABLE_EMUDOMAIN_CONTROL=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_IFAR=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_THUMBEE=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=128
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=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_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# CPUIdle
+#
+
+#
+# CPU idle PM support
+#
+CONFIG_CPU_IDLE=y
+
+#
+# Governors
+#
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# 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_DEBUG is not set
+# CONFIG_SUSPEND is not set
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+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_XFRM_STATISTICS 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=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=m
+# 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=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO 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=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD 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_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE 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_STP=m
+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
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=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 is not set
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=y
+CONFIG_BT_HCIBTSDIO=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIBRF6150 is not set
+# CONFIG_BT_HCIH4P is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_MAC80211=y
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_PID=y
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU 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_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+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
+# 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 is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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
+
+#
+# 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_OMAP_NOR=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
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+CONFIG_MTD_NAND_ECC_SMC=y
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_OMAP_HWECC=y
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA 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_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=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 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=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_OMAP_STI is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=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=m
+
+#
+# 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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+CONFIG_SMC911X=y
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS 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_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_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 is not set
+CONFIG_INPUT_JOYDEV=m
+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_TWL4030=y
+# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_KEYBOARD_GPIO=y
+# 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_SYNAPTICS is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO 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_TSC2005 is not set
+# CONFIG_TOUCHSCREEN_TSC2102 is not set
+# CONFIG_TOUCHSCREEN_TSC210X is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 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_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_TPS65010 is not set
+CONFIG_SENSORS_TLV320AIC23=y
+CONFIG_TWL4030_MADC=y
+CONFIG_TWL4030_USB=y
+# CONFIG_TWL4030_PWRBUTTON is not set
+# CONFIG_TWL4030_POWEROFF is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_LP5521 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_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC2101 is not set
+# CONFIG_SPI_TSC2102 is not set
+# CONFIG_SPI_TSC210X is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 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 is not set
+CONFIG_HDQ_MASTER_OMAP=y
+# CONFIG_W1_MASTER_GPIO 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_SLAVE_DS2760 is not set
+CONFIG_W1_SLAVE_BQ27000=y
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+CONFIG_TWL4030_BCI_BATTERY=y
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+CONFIG_TWL4030_CORE=y
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
+# CONFIG_VIDEO_ALLOW_V4L1 is not set
+CONFIG_VIDEO_V4L1_COMPAT=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=y
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=y
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=y
+CONFIG_MEDIA_TUNER_TDA8290=y
+CONFIG_MEDIA_TUNER_TDA9887=y
+CONFIG_MEDIA_TUNER_TEA5761=y
+CONFIG_MEDIA_TUNER_TEA5767=y
+CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER_XC2028=y
+CONFIG_MEDIA_TUNER_XC5000=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEOBUF_GEN=y
+CONFIG_VIDEOBUF_DMA_SG=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TDA9875 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS5345 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_OV7670 is not set
+# CONFIG_VIDEO_TCM825X is not set
+# CONFIG_VIDEO_OV9640 is not set
+# CONFIG_VIDEO_MT9P012 is not set
+# CONFIG_VIDEO_DW9710 is not set
+CONFIG_VIDEO_OV3640=y
+CONFIG_VIDEO_OV3640_CSI2=y
+# CONFIG_VIDEO_IMX046 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA717X is not set
+# CONFIG_VIDEO_TVP5150 is not set
+
+#
+# Video and audio decoders
+#
+# CONFIG_VIDEO_CX25840 is not set
+
+#
+# MPEG video encoders
+#
+# CONFIG_VIDEO_CX2341X is not set
+
+#
+# Video encoders
+#
+# CONFIG_VIDEO_SAA7127 is not set
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+
+#
+# OMAP2/OMAP3 V4L2 drivers
+#
+CONFIG_VIDEO_OMAP24XX_VIDEOLIB=y
+CONFIG_VIDEO_OMAP24XX_VIDEOOUT=y
+CONFIG_VIDEO_OMAP24XX_TVOUT=y
+CONFIG_VIDEO_OMAP3=y
+CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER=y
+CONFIG_VIDEO_OMAP34XX_ISP_RESIZER=y
+CONFIG_VIDEO_OMAP3_BUFFALLOC=y
+# CONFIG_VIDEO_OMAP2 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
+# CONFIG_USB_GSPCA is not set
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+# CONFIG_SOC_CAMERA is not set
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_TEA5761 is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_USB_SI470X is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL 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_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN=y
+CONFIG_FB_BOTH_ENDIAN=y
+# CONFIG_FB_BIG_ENDIAN is not set
+# CONFIG_FB_LITTLE_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FB_OMAP=y
+# CONFIG_FB_OMAP_720P_STREAMING is not set
+# CONFIG_FB_OMAP_LCD_WVGA is not set
+CONFIG_FB_OMAP_LCD_VGA=y
+# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=28
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_LTV350QV=y
+CONFIG_LCD_ILI9320=y
+CONFIG_LCD_VGG2432A4=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# 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
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+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
+CONFIG_SND_DRIVERS=y
+# 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_ARM=y
+CONFIG_SND_OMAP_AIC23=y
+# CONFIG_SND_OMAP_TSC2101 is not set
+# CONFIG_SND_SX1 is not set
+# CONFIG_SND_OMAP_TSC2102 is not set
+# CONFIG_SND_OMAP24XX_EAC is not set
+CONFIG_SND_OMAP3_TWL4030=y
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW 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_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+CONFIG_USB_MUSB_HOST=y
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+# CONFIG_USB_MUSB_OTG is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_MUSB_USE_SYSTEM_DMA_RX is not set
+# CONFIG_USB_TI_CPPI_DMA is not set
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM 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_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# 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_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
+# CONFIG_USB_ISIGHTFW is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+CONFIG_USB_GADGET_M66592=y
+CONFIG_USB_M66592=y
+# 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_S3C2410 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 is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_OMAP_HS=y
+CONFIG_OMAP_HS_MMC1=y
+# CONFIG_OMAP_HS_MMC2 is not set
+# CONFIG_OMAP_HS_MMC3 is not set
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+CONFIG_LEDS_OMAP=y
+CONFIG_LEDS_OMAP_PWM=y
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=y
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+
+#
+# Voltage and Current regulators
+#
+# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_UIO is not set
+# CONFIG_MPU_BRIDGE 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_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_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=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=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_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_FS_WBUF_VERIFY is not set
+# 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 is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+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_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=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
+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
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_HAVE_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+# CONFIG_FTRACE is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE 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
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+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/linux-omapzoom_git.bb b/packages/linux/linux-omapzoom_git.bb
new file mode 100644
index 0000000000..60d4e8e062
--- /dev/null
+++ b/packages/linux/linux-omapzoom_git.bb
@@ -0,0 +1,23 @@
+require linux.inc
+
+DESCRIPTION = "Linux kernel for OMAP processors"
+KERNEL_IMAGETYPE = "uImage"
+
+COMPATIBLE_MACHINE = "omapzoom"
+
+SRCREV = "26d16dad66b1d3955d8958938f9de5f2e0fce7fb"
+
+#PV = "2.6.27+2.6.28-rc8+${PR}+gitr${SRCREV}"
+PV = "2.6.27.10-${PR}+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "git://git.omapzoom.org/repo/omapkernel.git;protocol=git \
+ file://defconfig"
+
+SRC_URI_append = " \
+"
+
+S = "${WORKDIR}/git"
+
+
+
diff --git a/packages/linux/linux-openezx-devel_svn.bb b/packages/linux/linux-openezx-devel_svn.bb
deleted file mode 100644
index 17156535ea..0000000000
--- a/packages/linux/linux-openezx-devel_svn.bb
+++ /dev/null
@@ -1,64 +0,0 @@
-DESCRIPTION = "OpenEZX 2.6 Linux Development Kernel for the Motorola EZX GSM phones"
-AUTHOR = "The OpenEZX Team <openezx-devel@lists.openezx.org>"
-HOMEPAGE = "http://www.openezx.org"
-
-DEFAULT_PREFERENCE = "-1"
-
-require linux.inc
-
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-
-KERNEL_RELEASE = "2.6.25"
-KERNEL_PATCHES = "kernel-${KERNEL_RELEASE}.x-patches"
-PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
-PR = "r0"
-
-SRC_URI = "\
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${KERNEL_RELEASE}.tar.bz2 \
- svn://svn.openezx.org/branches;module=${KERNEL_PATCHES};proto=http \
-# file://logo_linux_clut224.ppm \
-"
-S = "${WORKDIR}/linux-${KERNEL_RELEASE}"
-
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-# But we can flash it from userspace (flash_unlock /dev/mtdX && flash_eraseall /dev/mtdX && flashcp /boot/zImage /dev/mtdX)
-# so lets make a package of it. What about a postinst that flashes the new kernel?
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(a780|e680|a1200|rorkre2|rokre6)'
-
-# For now the code for serial console is disabled in compress.c
-#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 "
-CMDLINE_CON = "console=tty1 "
-
-CMDLINE_ROOT = "root=/dev/mmcblk0p2 rootfstype=ext2 rootwait=1"
-CMDLINE_NFSROOT = "root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.200:/export/ezx-image rootdelay=1 "
-# Uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0"
-CMDLINE_MEM = "mem=32M@0xA0000000 mem=16M@0xAC000000"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-# Uncomment to use root-over-nfs-over-usb
-#CMDLINE_NFSROOT_USB = "${CMDLINE_CON} ${CMDLINE_NFSROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
-
-# 1024x1024 once was the maximum kernel size for boot-over-usb -- is it still?
-#KERNEL_IMAGE_MAXSIZE = "1294336"
-
-###############################################################
-# module configs specific to this kernel
-#
-#module_autoload_pxaficp_ir = "pxaficp_ir"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
-do_prepatch() {
- mv ${WORKDIR}/${KERNEL_PATCHES}/defconfig-${MACHINE} ${WORKDIR}/defconfig
-# mv ${WORKDIR}/defconfig-${MACHINE} ${WORKDIR}/defconfig
- mv ${WORKDIR}/${KERNEL_PATCHES} ${S}/patches && cd ${S} && quilt push -av
- mv patches patches.openezx
- mv .pc .pc.old
-}
-
-addtask prepatch after do_unpack before do_patch
diff --git a/packages/linux/linux-openmoko-2.6.28/0001-squashfs-with-lzma.patch b/packages/linux/linux-openmoko-2.6.28/0001-squashfs-with-lzma.patch
deleted file mode 100644
index 04d47fe16f..0000000000
--- a/packages/linux/linux-openmoko-2.6.28/0001-squashfs-with-lzma.patch
+++ /dev/null
@@ -1,5342 +0,0 @@
-
-diff -urN linux-2.6.23/fs/squashfs/LzmaDecode.c linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.c
---- linux-2.6.23/fs/squashfs/LzmaDecode.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.c 2007-11-13 19:45:12.000000000 -0500
-@@ -0,0 +1,584 @@
-+/*
-+ LzmaDecode.c
-+ LZMA Decoder (optimized for Speed version)
-+
-+ LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
-+ 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"
-+
-+#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) \
-+ { SizeT 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
-+
-+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size)
-+{
-+ unsigned char prop0;
-+ if (size < LZMA_PROPERTIES_SIZE)
-+ return LZMA_RESULT_DATA_ERROR;
-+ prop0 = propsData[0];
-+ if (prop0 >= (9 * 5 * 5))
-+ return LZMA_RESULT_DATA_ERROR;
-+ {
-+ for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5));
-+ for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9);
-+ propsRes->lc = prop0;
-+ /*
-+ unsigned char remainder = (unsigned char)(prop0 / 9);
-+ propsRes->lc = prop0 % 9;
-+ propsRes->pb = remainder / 5;
-+ propsRes->lp = remainder % 5;
-+ */
-+ }
-+
-+ #ifdef _LZMA_OUT_READ
-+ {
-+ int i;
-+ propsRes->DictionarySize = 0;
-+ for (i = 0; i < 4; i++)
-+ propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8);
-+ if (propsRes->DictionarySize == 0)
-+ propsRes->DictionarySize = 1;
-+ }
-+ #endif
-+ return LZMA_RESULT_OK;
-+}
-+
-+#define kLzmaStreamWasFinishedId (-1)
-+
-+int LzmaDecode(CLzmaDecoderState *vs,
-+ #ifdef _LZMA_IN_CB
-+ ILzmaInCallback *InCallback,
-+ #else
-+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
-+ #endif
-+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed)
-+{
-+ CProb *p = vs->Probs;
-+ SizeT nowPos = 0;
-+ Byte previousByte = 0;
-+ UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1;
-+ UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1;
-+ int lc = vs->Properties.lc;
-+
-+ #ifdef _LZMA_OUT_READ
-+
-+ UInt32 Range = vs->Range;
-+ UInt32 Code = vs->Code;
-+ #ifdef _LZMA_IN_CB
-+ const Byte *Buffer = vs->Buffer;
-+ const Byte *BufferLim = vs->BufferLim;
-+ #else
-+ const Byte *Buffer = inStream;
-+ const Byte *BufferLim = inStream + inSize;
-+ #endif
-+ int state = vs->State;
-+ UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
-+ int len = vs->RemainLen;
-+ UInt32 globalPos = vs->GlobalPos;
-+ UInt32 distanceLimit = vs->DistanceLimit;
-+
-+ Byte *dictionary = vs->Dictionary;
-+ UInt32 dictionarySize = vs->Properties.DictionarySize;
-+ UInt32 dictionaryPos = vs->DictionaryPos;
-+
-+ Byte tempDictionary[4];
-+
-+ #ifndef _LZMA_IN_CB
-+ *inSizeProcessed = 0;
-+ #endif
-+ *outSizeProcessed = 0;
-+ if (len == kLzmaStreamWasFinishedId)
-+ return LZMA_RESULT_OK;
-+
-+ if (dictionarySize == 0)
-+ {
-+ dictionary = tempDictionary;
-+ dictionarySize = 1;
-+ tempDictionary[0] = vs->TempDictionary[0];
-+ }
-+
-+ if (len == kLzmaNeedInitId)
-+ {
-+ {
-+ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
-+ UInt32 i;
-+ for (i = 0; i < numProbs; i++)
-+ p[i] = kBitModelTotal >> 1;
-+ rep0 = rep1 = rep2 = rep3 = 1;
-+ state = 0;
-+ globalPos = 0;
-+ distanceLimit = 0;
-+ dictionaryPos = 0;
-+ dictionary[dictionarySize - 1] = 0;
-+ #ifdef _LZMA_IN_CB
-+ RC_INIT;
-+ #else
-+ RC_INIT(inStream, inSize);
-+ #endif
-+ }
-+ len = 0;
-+ }
-+ 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 /* if !_LZMA_OUT_READ */
-+
-+ int state = 0;
-+ UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
-+ int len = 0;
-+ const Byte *Buffer;
-+ const Byte *BufferLim;
-+ UInt32 Range;
-+ UInt32 Code;
-+
-+ #ifndef _LZMA_IN_CB
-+ *inSizeProcessed = 0;
-+ #endif
-+ *outSizeProcessed = 0;
-+
-+ {
-+ UInt32 i;
-+ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
-+ for (i = 0; i < numProbs; i++)
-+ p[i] = kBitModelTotal >> 1;
-+ }
-+
-+ #ifdef _LZMA_IN_CB
-+ RC_INIT;
-+ #else
-+ RC_INIT(inStream, inSize);
-+ #endif
-+
-+ #endif /* _LZMA_OUT_READ */
-+
-+ 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
-+ if (distanceLimit < dictionarySize)
-+ distanceLimit++;
-+
-+ 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);
-+
-+ #ifdef _LZMA_OUT_READ
-+ if (distanceLimit == 0)
-+ #else
-+ if (nowPos == 0)
-+ #endif
-+ 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;
-+ #ifdef _LZMA_OUT_READ
-+ if (distanceLimit < dictionarySize)
-+ distanceLimit++;
-+ #endif
-+
-+ 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 = kLzmaStreamWasFinishedId;
-+ break;
-+ }
-+ }
-+
-+ len += kMatchMinLen;
-+ #ifdef _LZMA_OUT_READ
-+ if (rep0 > distanceLimit)
-+ #else
-+ if (rep0 > nowPos)
-+ #endif
-+ return LZMA_RESULT_DATA_ERROR;
-+
-+ #ifdef _LZMA_OUT_READ
-+ if (dictionarySize - distanceLimit > (UInt32)len)
-+ distanceLimit += len;
-+ else
-+ distanceLimit = dictionarySize;
-+ #endif
-+
-+ 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->Range = Range;
-+ vs->Code = Code;
-+ vs->DictionaryPos = dictionaryPos;
-+ vs->GlobalPos = globalPos + (UInt32)nowPos;
-+ vs->DistanceLimit = distanceLimit;
-+ 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
-+
-+ #ifdef _LZMA_IN_CB
-+ vs->Buffer = Buffer;
-+ vs->BufferLim = BufferLim;
-+ #else
-+ *inSizeProcessed = (SizeT)(Buffer - inStream);
-+ #endif
-+ *outSizeProcessed = nowPos;
-+ return LZMA_RESULT_OK;
-+}
-diff -urN linux-2.6.23/fs/squashfs/LzmaDecode.h linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.h
---- linux-2.6.23/fs/squashfs/LzmaDecode.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.h 2007-11-13 19:45:12.000000000 -0500
-@@ -0,0 +1,113 @@
-+/*
-+ LzmaDecode.h
-+ LZMA Decoder interface
-+
-+ LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
-+ 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
-+
-+#include "LzmaTypes.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 */
-+
-+#ifdef _LZMA_PROB32
-+#define CProb UInt32
-+#else
-+#define CProb UInt16
-+#endif
-+
-+#define LZMA_RESULT_OK 0
-+#define LZMA_RESULT_DATA_ERROR 1
-+
-+#ifdef _LZMA_IN_CB
-+typedef struct _ILzmaInCallback
-+{
-+ int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize);
-+} ILzmaInCallback;
-+#endif
-+
-+#define LZMA_BASE_SIZE 1846
-+#define LZMA_LIT_SIZE 768
-+
-+#define LZMA_PROPERTIES_SIZE 5
-+
-+typedef struct _CLzmaProperties
-+{
-+ int lc;
-+ int lp;
-+ int pb;
-+ #ifdef _LZMA_OUT_READ
-+ UInt32 DictionarySize;
-+ #endif
-+}CLzmaProperties;
-+
-+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);
-+
-+#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp)))
-+
-+#define kLzmaNeedInitId (-2)
-+
-+typedef struct _CLzmaDecoderState
-+{
-+ CLzmaProperties Properties;
-+ CProb *Probs;
-+
-+ #ifdef _LZMA_IN_CB
-+ const unsigned char *Buffer;
-+ const unsigned char *BufferLim;
-+ #endif
-+
-+ #ifdef _LZMA_OUT_READ
-+ unsigned char *Dictionary;
-+ UInt32 Range;
-+ UInt32 Code;
-+ UInt32 DictionaryPos;
-+ UInt32 GlobalPos;
-+ UInt32 DistanceLimit;
-+ UInt32 Reps[4];
-+ int State;
-+ int RemainLen;
-+ unsigned char TempDictionary[4];
-+ #endif
-+} CLzmaDecoderState;
-+
-+#ifdef _LZMA_OUT_READ
-+#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; }
-+#endif
-+
-+int LzmaDecode(CLzmaDecoderState *vs,
-+ #ifdef _LZMA_IN_CB
-+ ILzmaInCallback *inCallback,
-+ #else
-+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
-+ #endif
-+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
-+
-+#endif
-diff -urN linux-2.6.23/fs/squashfs/LzmaTypes.h linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaTypes.h
---- linux-2.6.23/fs/squashfs/LzmaTypes.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaTypes.h 2007-11-13 19:47:32.000000000 -0500
-@@ -0,0 +1,45 @@
-+/*
-+LzmaTypes.h
-+
-+Types for LZMA Decoder
-+
-+This file written and distributed to public domain by Igor Pavlov.
-+This file is part of LZMA SDK 4.40 (2006-05-01)
-+*/
-+
-+#ifndef __LZMATYPES_H
-+#define __LZMATYPES_H
-+
-+#ifndef _7ZIP_BYTE_DEFINED
-+#define _7ZIP_BYTE_DEFINED
-+typedef unsigned char Byte;
-+#endif
-+
-+#ifndef _7ZIP_UINT16_DEFINED
-+#define _7ZIP_UINT16_DEFINED
-+typedef unsigned short UInt16;
-+#endif
-+
-+#ifndef _7ZIP_UINT32_DEFINED
-+#define _7ZIP_UINT32_DEFINED
-+#ifdef _LZMA_UINT32_IS_ULONG
-+typedef unsigned long UInt32;
-+#else
-+typedef unsigned int UInt32;
-+#endif
-+#endif
-+
-+/* #define _LZMA_NO_SYSTEM_SIZE_T */
-+/* You can use it, if you don't want <stddef.h> */
-+
-+#ifndef _7ZIP_SIZET_DEFINED
-+#define _7ZIP_SIZET_DEFINED
-+#ifdef _LZMA_NO_SYSTEM_SIZE_T
-+typedef UInt32 SizeT;
-+#else
-+#include <stddef.h>
-+typedef size_t SizeT;
-+#endif
-+#endif
-+
-+#endif
-diff -urN linux-2.6.23/fs/squashfs/Makefile linux-2.6.23.sqlzma-ng/fs/squashfs/Makefile
---- linux-2.6.23/fs/squashfs/Makefile 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/Makefile 2007-11-13 19:52:56.000000000 -0500
-@@ -0,0 +1,10 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+
-+obj-$(CONFIG_SQUASHFS) += unlzma.o sqlzma.o squashfs.o
-+unlzma-y += module.o
-+sqlzma-y += uncomp.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-diff -urN linux-2.6.23/fs/squashfs/inode.c linux-2.6.23.sqlzma-ng/fs/squashfs/inode.c
---- linux-2.6.23/fs/squashfs/inode.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/inode.c 2007-11-13 19:14:24.000000000 -0500
-@@ -0,0 +1,2312 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/zlib.h>
-+#include <linux/fs.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/vmalloc.h>
-+#include <linux/smp_lock.h>
-+#include <linux/sched.h>
-+#include <linux/exportfs.h>
-+
-+#include "squashfs.h"
-+#include "sqlzma.h"
-+
-+#undef KeepPreemptive
-+#if defined(CONFIG_PREEMPT) && !defined(UnsquashNoPreempt)
-+#define KeepPreemptive
-+#endif
-+
-+struct sqlzma {
-+#ifdef KeepPreemptive
-+ struct mutex mtx;
-+#endif
-+ unsigned char read_data[SQUASHFS_FILE_MAX_SIZE];
-+ struct sqlzma_un un;
-+};
-+static DEFINE_PER_CPU(struct sqlzma *, sqlzma);
-+
-+#define dpri(fmt, args...) /* printk("%s:%d: " fmt, __func__, __LINE__, ##args) */
-+#define dpri_un(un) dpri("un{%d, {%d %p}, {%d %p}, {%d %p}}\n", \
-+ (un)->un_lzma, (un)->un_a[0].sz, (un)->un_a[0].buf, \
-+ (un)->un_a[1].sz, (un)->un_a[1].buf, \
-+ (un)->un_a[2].sz, (un)->un_a[2].buf)
-+
-+static int squashfs_cached_blks;
-+
-+static void vfs_read_inode(struct inode *i);
-+static struct dentry *squashfs_get_parent(struct dentry *child);
-+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+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_readpage(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static int squashfs_remount(struct super_block *s, int *flags, char *data);
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_get_sb(struct file_system_type *,int, const char *, void *,
-+ struct vfsmount *);
-+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 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 const 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_super_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+ .remount_fs = squashfs_remount
-+};
-+
-+static struct super_operations squashfs_export_super_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+ .read_inode = vfs_read_inode
-+};
-+
-+static struct export_operations squashfs_export_ops = {
-+ .get_parent = squashfs_get_parent
-+};
-+
-+SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN const struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+static const 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, int srclength)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct buffer_head **bh;
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k = 0;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ bh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) *
-+ sizeof(struct buffer_head *), GFP_KERNEL);
-+ if (bh == NULL)
-+ goto read_failure;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index,
-+ compressed ? "" : "un", (unsigned int) c_byte, srclength);
-+
-+ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used)
-+ goto read_failure;
-+
-+ bh[0] = sb_getblk(s, cur_index);
-+ if (bh[0] == NULL)
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ bh[b] = sb_getblk(s, ++cur_index);
-+ if (bh[b] == NULL)
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (index < 0 || (index + 2) > sblk->bytes_used)
-+ goto read_failure;
-+
-+ bh[0] = get_block_length(s, (int *)&cur_index, (int *)&offset,
-+ (int *)&c_byte);
-+ if (bh[0] == NULL)
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used)
-+ goto read_failure;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ bh[b] = sb_getblk(s, ++cur_index);
-+ if (bh[b] == NULL)
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed) {
-+ int zlib_err = Z_STREAM_END;
-+ int rest, start;
-+ enum {Src, Dst};
-+ struct sized_buf sbuf[2];
-+ struct sqlzma *percpu;
-+
-+ /*
-+ * uncompress block
-+ */
-+
-+ for (k = 0; k < b; k++) {
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ }
-+
-+ avail_bytes = 0;
-+ for (k = 0; !avail_bytes && k < b; k++) {
-+ avail_bytes = msblk->devblksize - offset;
-+ if (c_byte < avail_bytes)
-+ avail_bytes = c_byte;
-+ if (avail_bytes)
-+ break;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+ bytes = 0;
-+ if (!avail_bytes)
-+ goto block_release; // nothing to be process
-+
-+ start = k;
-+ /* it disables preemption */
-+ percpu = get_cpu_var(sqlzma);
-+#ifdef KeepPreemptive
-+ put_cpu_var(sqlzma);
-+ mutex_lock(&percpu->mtx);
-+#endif
-+
-+ for (; k < b; k++) {
-+ memcpy(percpu->read_data + bytes, bh[k]->b_data + offset,
-+ avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ avail_bytes = msblk->devblksize - offset;
-+ rest = c_byte - bytes;
-+ if (rest < avail_bytes)
-+ avail_bytes = rest;
-+ }
-+
-+ sbuf[Src].buf = percpu->read_data;
-+ sbuf[Src].sz = bytes;
-+ sbuf[Dst].buf = buffer;
-+ sbuf[Dst].sz = srclength;
-+ dpri_un(&percpu->un);
-+ dpri("src %d %p, dst %d %p\n", sbuf[Src].sz, sbuf[Src].buf,
-+ sbuf[Dst].sz, sbuf[Dst].buf);
-+ zlib_err = sqlzma_un(&percpu->un, sbuf + Src, sbuf + Dst);
-+ bytes = percpu->un.un_reslen;
-+
-+#ifdef KeepPreemptive
-+ mutex_unlock(&percpu->mtx);
-+#else
-+ put_cpu_var(sqlzma);
-+#endif
-+ if (unlikely(zlib_err)) {
-+ dpri("zlib_err %d\n", zlib_err);
-+ goto release_mutex;
-+ }
-+ } else {
-+ int i;
-+
-+ for(i = 0; i < b; i++) {
-+ wait_on_buffer(bh[i]);
-+ if (!buffer_uptodate(bh[i]))
-+ goto block_release;
-+ }
-+
-+ for (bytes = 0; k < b; k++) {
-+ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset);
-+
-+ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ? 3 : 2));
-+
-+ kfree(bh);
-+ return bytes;
-+
-+release_mutex:
-+ //mutex_unlock(&msblk->read_data_mutex);
-+
-+block_release:
-+ for (; k < b; k++)
-+ brelse(bh[k]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ kfree(bh);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *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;
-+
-+ mutex_lock(&msblk->block_cache_mutex);
-+
-+ if (i == squashfs_cached_blks) {
-+ /* read inode header block */
-+ if (msblk->unused_cache_blks == 0) {
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ wait_event(msblk->waitq, msblk->unused_cache_blks);
-+ continue;
-+ }
-+
-+ i = msblk->next_cache;
-+ for (n = 0; n < squashfs_cached_blks; n++) {
-+ if (msblk->block_cache[i].block != SQUASHFS_USED_BLK)
-+ break;
-+ i = (i + 1) % squashfs_cached_blks;
-+ }
-+
-+ msblk->next_cache = (i + 1) % squashfs_cached_blks;
-+
-+ if (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) {
-+ msblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE);
-+ if (msblk->block_cache[i].data == NULL) {
-+ ERROR("Failed to allocate cache block\n");
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ msblk->unused_cache_blks --;
-+ mutex_unlock(&msblk->block_cache_mutex);
-+
-+ msblk->block_cache[i].length = squashfs_read_data(s,
-+ msblk->block_cache[i].data, block, 0, &next_index,
-+ SQUASHFS_METADATA_SIZE);
-+
-+ if (msblk->block_cache[i].length == 0) {
-+ ERROR("Unable to read cache block [%llx:%x]\n", block, offset);
-+ mutex_lock(&msblk->block_cache_mutex);
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->unused_cache_blks ++;
-+ smp_mb();
-+ vfree(msblk->block_cache[i].data);
-+ wake_up(&msblk->waitq);
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+
-+ mutex_lock(&msblk->block_cache_mutex);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ msblk->unused_cache_blks ++;
-+ smp_mb();
-+ wake_up(&msblk->waitq);
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ bytes = msblk->block_cache[i].length - offset;
-+
-+ if (bytes < 1) {
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto out;
-+ } else if (bytes >= 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;
-+ }
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data + offset, bytes);
-+ buffer = (char *) buffer + bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ mutex_unlock(&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, &sfragment_entry, start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ (unsigned int *)&offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ (unsigned int *)&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)
-+{
-+ mutex_lock(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ if (fragment->locked == 0) {
-+ msblk->unused_frag_blks ++;
-+ smp_mb();
-+ wake_up(&msblk->fragment_wait_queue);
-+ }
-+ mutex_unlock(&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;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ while (1) {
-+ mutex_lock(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ if (msblk->unused_frag_blks == 0) {
-+ mutex_unlock(&msblk->fragment_mutex);
-+ wait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks);
-+ continue;
-+ }
-+
-+ i = msblk->next_fragment;
-+ for (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) {
-+ if (msblk->fragment[i].locked == 0)
-+ break;
-+ i = (i + 1) % SQUASHFS_CACHED_FRAGMENTS;
-+ }
-+
-+ msblk->next_fragment = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+
-+ if (msblk->fragment[i].data == NULL) {
-+ msblk->fragment[i].data = vmalloc(sblk->block_size);
-+ if (msblk->fragment[i].data == NULL) {
-+ ERROR("Failed to allocate fragment cache block\n");
-+ mutex_unlock(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->unused_frag_blks --;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ mutex_unlock(&msblk->fragment_mutex);
-+
-+ msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data, start_block, length, NULL,
-+ sblk->block_size);
-+
-+ if (msblk->fragment[i].length == 0) {
-+ ERROR("Unable to read fragment cache block [%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ msblk->unused_frag_blks ++;
-+ smp_mb();
-+ wake_up(&msblk->fragment_wait_queue);
-+ goto out;
-+ }
-+
-+ mutex_lock(&msblk->fragment_mutex);
-+ 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);
-+ mutex_unlock(&msblk->fragment_mutex);
-+ break;
-+ }
-+
-+ if (msblk->fragment[i].locked == 0)
-+ msblk->unused_frag_blks --;
-+ msblk->fragment[i].locked++;
-+ mutex_unlock(&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 void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ 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];
-+}
-+
-+
-+static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)];
-+ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1);
-+ squashfs_inode_t inode;
-+
-+ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino);
-+
-+ if (msblk->swap) {
-+ squashfs_inode_t sinode;
-+
-+ if (!squashfs_get_cached_block(s, &sinode, start, offset,
-+ sizeof(sinode), &start, (unsigned int *)&offset))
-+ goto out;
-+ SQUASHFS_SWAP_INODE_T((&inode), &sinode);
-+ } else if (!squashfs_get_cached_block(s, &inode, start, offset,
-+ sizeof(inode), &start, (unsigned int *)&offset))
-+ goto out;
-+
-+ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode);
-+
-+ return inode;
-+
-+out:
-+ return SQUASHFS_INVALID_BLK;
-+}
-+
-+
-+static void vfs_read_inode(struct inode *i)
-+{
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino);
-+
-+ TRACE("Entered vfs_read_inode\n");
-+
-+ if(inode != SQUASHFS_INVALID_BLK)
-+ (msblk->read_inode)(i, inode);
-+}
-+
-+
-+static struct dentry *squashfs_get_parent(struct dentry *child)
-+{
-+ struct inode *i = child->d_inode;
-+ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
-+ struct dentry *rv;
-+
-+ TRACE("Entered squashfs_get_parent\n");
-+
-+ if(parent == NULL) {
-+ rv = ERR_PTR(-EACCES);
-+ goto out;
-+ }
-+
-+ rv = d_alloc_anon(parent);
-+ if(rv == NULL)
-+ rv = ERR_PTR(-ENOMEM);
-+
-+out:
-+ return rv;
-+}
-+
-+
-+SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s,
-+ squashfs_inode_t inode, unsigned int inode_number)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = iget_locked(s, inode_number);
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if(i && (i->i_state & I_NEW)) {
-+ (msblk->read_inode)(i, inode);
-+ unlock_new_inode(i);
-+ }
-+
-+ return i;
-+}
-+
-+
-+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode)
-+{
-+ struct super_block *s = i->i_sb;
-+ 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_read_inode\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, 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, inodeb, block, offset,
-+ sizeof(*inodeb), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ squashfs_new_inode(msblk, i, inodeb);
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG)
-+ if(!get_fragment_location(s, inodep->fragment, &frag_blk,
-+ &frag_size))
-+ goto failed_read;
-+
-+ 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;
-+ i->i_data.a_ops = &squashfs_aops;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG)
-+ if (!get_fragment_location(s, inodep->fragment, &frag_blk,
-+ &frag_size))
-+ goto failed_read;
-+
-+ 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;
-+ i->i_data.a_ops = &squashfs_aops;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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;
-+ }
-+
-+ return 1;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ make_bad_inode(i);
-+ return 0;
-+}
-+
-+
-+static int read_inode_lookup_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes);
-+
-+ TRACE("In read_inode_lookup_table, length %d\n", length);
-+
-+ /* Allocate inode lookup table */
-+ msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL);
-+ if (msblk->inode_lookup_table == NULL) {
-+ ERROR("Failed to allocate inode lookup table\n");
-+ return 0;
-+ }
-+
-+ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table,
-+ sblk->lookup_table_start, length |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {
-+ ERROR("unable to read inode lookup table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long block;
-+
-+ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) {
-+ /* XXX */
-+ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block),
-+ &msblk->inode_lookup_table[i], 1);
-+ msblk->inode_lookup_table[i] = block;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+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;
-+ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments);
-+
-+ if(length == 0)
-+ return 1;
-+
-+ /* Allocate fragment index table */
-+ msblk->fragment_index = kmalloc(length, GFP_KERNEL);
-+ if (msblk->fragment_index == NULL) {
-+ ERROR("Failed to allocate fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (!squashfs_read_data(s, (char *) msblk->fragment_index,
-+ sblk->fragment_table_start, length |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {
-+ 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++) {
-+ /* XXX */
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int readahead_metadata(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int i;
-+
-+ squashfs_cached_blks = SQUASHFS_CACHED_BLKS;
-+
-+ /* Init inode_table block pointer array */
-+ msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ squashfs_cached_blks, GFP_KERNEL);
-+ if (msblk->block_cache == NULL) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed;
-+ }
-+
-+ for (i = 0; i < squashfs_cached_blks; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+ msblk->unused_cache_blks = squashfs_cached_blks;
-+
-+ return 1;
-+
-+failed:
-+ return 0;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->read_inode = squashfs_read_inode;
-+ 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, err;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_fill_superblock\n");
-+
-+ err = -ENOMEM;
-+ s->s_fs_info = kzalloc(sizeof(struct squashfs_sb_info), GFP_KERNEL);
-+ if (s->s_fs_info == NULL) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ msblk = s->s_fs_info;
-+
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ //mutex_init(&msblk->read_data_mutex);
-+ mutex_init(&msblk->read_page_mutex);
-+ mutex_init(&msblk->block_cache_mutex);
-+ mutex_init(&msblk->fragment_mutex);
-+ mutex_init(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ /* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not
-+ * beyond filesystem end. As we're using squashfs_read_data to read sblk here,
-+ * first set sblk->bytes_used to a useful value */
-+ err = -EINVAL;
-+ sblk->bytes_used = sizeof(struct squashfs_super_block);
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ s->s_magic = sblk->s_magic;
-+ msblk->swap = 0;
-+ dpri("magic 0x%x\n", sblk->s_magic);
-+ switch (sblk->s_magic) {
-+ struct squashfs_super_block ssblk;
-+
-+ case SQUASHFS_MAGIC_SWAP:
-+ /*FALLTHROUGH*/
-+ case SQUASHFS_MAGIC_LZMA_SWAP:
-+ 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;
-+ /*FALLTHROUGH*/
-+ case SQUASHFS_MAGIC:
-+ case SQUASHFS_MAGIC_LZMA:
-+ break;
-+ default:
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+
-+ {
-+ struct sqlzma *p;
-+ dpri("block_size %d\n", sblk->block_size);
-+ BUG_ON(sblk->block_size > sizeof(p->read_data));
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ /* Check the filesystem does not extend beyond the end of the
-+ block device */
-+ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode))
-+ goto failed_mount;
-+
-+ /* Check the root inode for sanity */
-+ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE)
-+ 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 %spresent 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_maxbytes = MAX_LFS_FILESIZE;
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_super_ops;
-+
-+ if (readahead_metadata(s) == 0)
-+ goto failed_mount;
-+
-+ /* Allocate read_page block */
-+ err = -ENOMEM;
-+ msblk->read_page = vmalloc(sblk->block_size);
-+ if (msblk->read_page == NULL) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL);
-+ if (msblk->uid == NULL) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ dpri("swap %d\n", msblk->swap);
-+ err = -EINVAL;
-+ if (msblk->swap) {
-+ unsigned int *suid;
-+
-+ err = -ENOMEM;
-+ suid = kmalloc(sizeof(*suid) * (sblk->no_uids + sblk->no_guids),
-+ GFP_KERNEL);
-+ if (unlikely(!suid))
-+ goto failed_mount;
-+
-+ err = -EINVAL;
-+ if (!squashfs_read_data(s, (char *)suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {
-+ ERROR("unable to read uid/gid table\n");
-+ kfree(suid);
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ kfree(suid);
-+ } 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, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ err = -ENOMEM;
-+ msblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL);
-+ if (msblk->fragment == NULL) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ }
-+
-+ msblk->next_fragment = 0;
-+ msblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS;
-+
-+ /* Allocate and read fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK)
-+ goto allocate_root;
-+
-+ /* Allocate and read inode lookup table */
-+ if (read_inode_lookup_table(s) == 0)
-+ goto failed_mount;
-+
-+ s->s_op = &squashfs_export_super_ops;
-+ s->s_export_op = &squashfs_export_ops;
-+
-+allocate_root:
-+ dpri("alloate_root\n");
-+ root = new_inode(s);
-+ if ((msblk->read_inode)(root, sblk->root_inode) == 0) {
-+ iput(root);
-+ goto failed_mount;
-+ }
-+ insert_inode_hash(root);
-+
-+ s->s_root = d_alloc_root(root);
-+ if (s->s_root == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_fill_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->inode_lookup_table);
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ vfree(msblk->read_page);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ failure:
-+ return err;
-+}
-+
-+
-+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 = sblk->s_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, avail_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) {
-+ bytes = squashfs_get_cached_block(inode->i_sb, NULL, block,
-+ offset, PAGE_CACHE_SIZE, &block,
-+ (unsigned int *)&offset);
-+ if (bytes == 0) {
-+ 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;
-+ }
-+
-+ avail_bytes = min_t(int, i_size_read(inode) - length, PAGE_CACHE_SIZE);
-+
-+ bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, offset,
-+ avail_bytes, &block, (unsigned int *)&offset);
-+ if (bytes == 0)
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static 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;
-+
-+ mutex_lock(&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:
-+ mutex_unlock(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+static 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;
-+
-+ mutex_lock(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if (msblk->meta_index == NULL) {
-+ msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL);
-+ if (msblk->meta_index == NULL) {
-+ 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:
-+ mutex_unlock(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+static void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+ smp_mb();
-+}
-+
-+
-+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;
-+
-+ sblock_list = kmalloc(blocks << 2, GFP_KERNEL);
-+ if (unlikely(!sblock_list))
-+ goto failure;
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, (unsigned int *)offset)) {
-+ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset);
-+ kfree(sblock_list);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ kfree(sblock_list);
-+ } else {
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, (unsigned int *)offset)) {
-+ ERROR("Fail reading 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) {
-+ meta = empty_meta_index(inode, offset + 1, skip);
-+ if (meta == NULL)
-+ goto all_done;
-+ } else {
-+ if(meta->entries == 0)
-+ goto failed;
-+ /* XXX */
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ /* XXX */
-+ 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 = NULL;
-+ long long block;
-+ unsigned int bsize, i;
-+ int bytes;
-+ 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;
-+ int file_end = i_size_read(inode) >> sblk->block_log;
-+ int sparse = 0;
-+
-+ 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 out;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < file_end) {
-+ block_list = kmalloc(SIZE, GFP_KERNEL);
-+ if (block_list == NULL) {
-+ ERROR("Failed to allocate block_list\n");
-+ goto error_out;
-+ }
-+
-+ block = (msblk->read_blocklist)(inode, index, 1, block_list, NULL, &bsize);
-+ if (block == 0)
-+ goto error_out;
-+
-+ if (bsize == 0) { /* hole */
-+ bytes = index == file_end ?
-+ (i_size_read(inode) & (sblk->block_size - 1)) : sblk->block_size;
-+ sparse = 1;
-+ } else {
-+ mutex_lock(&msblk->read_page_mutex);
-+
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL, sblk->block_size);
-+
-+ if (bytes == 0) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block, bsize);
-+ mutex_unlock(&msblk->read_page_mutex);
-+ goto error_out;
-+ }
-+ }
-+ } else {
-+ fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)-> u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size);
-+
-+ if (fragment == 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 error_out;
-+ }
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ data_ptr = fragment->data + SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ }
-+
-+ for (i = start_index; i <= end_index && bytes > 0; i++,
-+ bytes -= PAGE_CACHE_SIZE, data_ptr += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int avail = sparse ? 0 : min_t(unsigned int, bytes, PAGE_CACHE_SIZE);
-+
-+ TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail);
-+
-+ push_page = (i == page->index) ? page :
-+ grab_cache_page_nowait(page->mapping, i);
-+
-+ if (!push_page)
-+ continue;
-+
-+ if (PageUptodate(push_page))
-+ goto skip_page;
-+
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+ memcpy(pageaddr, data_ptr, avail);
-+ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+skip_page:
-+ unlock_page(push_page);
-+ if(i != page->index)
-+ page_cache_release(push_page);
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < file_end) {
-+ if (!sparse)
-+ mutex_unlock(&msblk->read_page_mutex);
-+ kfree(block_list);
-+ } else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+error_out:
-+ SetPageError(page);
-+out:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr, 0, PAGE_CACHE_SIZE);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ if (!PageError(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, &sindex, index_start, index_offset,
-+ sizeof(sindex), &index_start, &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, &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);
-+
-+ str = kmalloc(sizeof(struct squashfs_dir_index) +
-+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL);
-+ if (str == NULL) {
-+ 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, &sindex, index_start, index_offset,
-+ sizeof(sindex), &index_start, &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, 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);
-+
-+ dire = kmalloc(sizeof(struct squashfs_dir_entry) +
-+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL);
-+ if (dire == NULL) {
-+ 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,
-+ (unsigned int *)&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, &sdirh, next_block,
-+ next_offset, sizeof(sdirh), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,
-+ next_offset, sizeof(dirh), &next_block,
-+ (unsigned int *)&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, &sdire, next_block,
-+ next_offset, sizeof(sdire), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, dire, next_block,
-+ next_offset, sizeof(*dire), &next_block,
-+ (unsigned int *)&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,
-+ (unsigned int *)&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);
-+ kfree(dire);
-+ 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);
-+
-+ dire = kmalloc(sizeof(struct squashfs_dir_entry) +
-+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL);
-+ if (dire == NULL) {
-+ ERROR("Failed to allocate squashfs_dir_entry\n");
-+ goto exit_lookup;
-+ }
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_lookup;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, (unsigned int *)&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, &sdirh, next_block,
-+ next_offset, sizeof(sdirh), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,
-+ next_offset, sizeof(dirh), &next_block,
-+ (unsigned int *)&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, &sdire, next_block,
-+ next_offset, sizeof(sdire), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, dire, next_block,
-+ next_offset, sizeof(*dire), &next_block,
-+ (unsigned int *)&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,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_lookup;
-+
-+ 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 = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number);
-+
-+ goto exit_lookup;
-+ }
-+ }
-+ }
-+
-+exit_lookup:
-+ kfree(dire);
-+ if (inode)
-+ return d_splice_alias(inode, dentry);
-+ 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_lookup;
-+}
-+
-+
-+static int squashfs_remount(struct super_block *s, int *flags, char *data)
-+{
-+ *flags |= MS_RDONLY;
-+ return 0;
-+}
-+
-+
-+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)
-+ vfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ vfree(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ vfree(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 void free_sqlzma(void)
-+{
-+ int cpu;
-+ struct sqlzma *p;
-+
-+ for_each_online_cpu(cpu) {
-+ p = per_cpu(sqlzma, cpu);
-+ if (p) {
-+#ifdef KeepPreemptive
-+ mutex_destroy(&p->mtx);
-+#endif
-+ sqlzma_fin(&p->un);
-+ kfree(p);
-+ }
-+ }
-+}
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ struct sqlzma *p;
-+ int cpu;
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ for_each_online_cpu(cpu) {
-+ dpri("%d: %p\n", cpu, per_cpu(sqlzma, cpu));
-+ err = -ENOMEM;
-+ p = kmalloc(sizeof(struct sqlzma), GFP_KERNEL);
-+ if (p) {
-+#ifdef KeepPreemptive
-+ mutex_init(&p->mtx);
-+#endif
-+ err = sqlzma_init(&p->un, 1, 0);
-+ if (unlikely(err)) {
-+ ERROR("Failed to intialize uncompress workspace\n");
-+ break;
-+ }
-+ per_cpu(sqlzma, cpu) = p;
-+ err = 0;
-+ } else
-+ break;
-+ }
-+ if (unlikely(err)) {
-+ free_sqlzma();
-+ goto out;
-+ }
-+
-+ printk(KERN_INFO "squashfs: version 3.3 (2007/10/31) "
-+ "Phillip Lougher\n"
-+ "squashfs: LZMA suppport for slax.org by jro\n");
-+
-+ err = register_filesystem(&squashfs_fs_type);
-+ if (err) {
-+ free_sqlzma();
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ unregister_filesystem(&squashfs_fs_type);
-+ free_sqlzma();
-+ destroy_inodecache();
-+}
-+
-+
-+static struct kmem_cache * 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);
-+ return ei ? &ei->vfs_inode : NULL;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(struct kmem_cache *cachep, void *foo)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ 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);
-+ 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 3.2-r2-CVS, a compressed read-only filesystem, and LZMA suppport for slax.org");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.demon.co.uk>, and LZMA suppport for slax.org by jro");
-+MODULE_LICENSE("GPL");
-diff -urN linux-2.6.23/fs/squashfs/module.c linux-2.6.23.sqlzma-ng/fs/squashfs/module.c
---- linux-2.6.23/fs/squashfs/module.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/module.c 2007-11-13 19:51:33.000000000 -0500
-@@ -0,0 +1,36 @@
-+
-+/*
-+ * Copyright (C) 2006-2007 Junjiro Okajima
-+ * Copyright (C) 2006-2007 Tomas Matejicek, slax.org
-+ *
-+ * LICENSE follows the described one in lzma.txt.
-+ */
-+
-+/* $Id: module.c,v 1.1 2007/11/05 05:43:36 jro Exp $ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+
-+#include "LzmaDecode.c"
-+
-+EXPORT_SYMBOL(LzmaDecodeProperties);
-+EXPORT_SYMBOL(LzmaDecode);
-+
-+#if 0
-+static int __init unlzma_init(void)
-+{
-+ return 0;
-+}
-+
-+static void __exit unlzma_exit(void)
-+{
-+}
-+
-+module_init(unlzma_init);
-+module_exit(unlzma_exit);
-+#endif
-+
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION("$Id: module.c,v 1.1 2007/11/05 05:43:36 jro Exp $");
-+MODULE_DESCRIPTION("LZMA uncompress. "
-+ "A tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");
-diff -urN linux-2.6.23/fs/squashfs/sqlzma.h linux-2.6.23.sqlzma-ng/fs/squashfs/sqlzma.h
---- linux-2.6.23/fs/squashfs/sqlzma.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/sqlzma.h 2007-11-13 19:09:21.000000000 -0500
-@@ -0,0 +1,83 @@
-+/*
-+ * Copyright (C) 2006 Junjiro Okajima
-+ * Copyright (C) 2006 Tomas Matejicek, slax.org
-+ *
-+ * LICENSE follows the described one in lzma.
-+ */
-+
-+/* $Id: sqlzma.h,v 1.15 2007/11/09 14:42:12 jro Exp $ */
-+
-+#ifndef __sqlzma_h__
-+#define __sqlzma_h__
-+
-+#ifndef __KERNEL__
-+#include <stdlib.h>
-+#include <string.h>
-+#include <zlib.h>
-+#ifdef _REENTRANT
-+#include <pthread.h>
-+#endif
-+#else
-+#include <linux/zlib.h>
-+#endif
-+#define _7ZIP_BYTE_DEFINED
-+
-+/*
-+ * detect the compression method automatically by the first byte of compressed
-+ * data.
-+ * according to rfc1950, the first byte of zlib compression must be 0x?8.
-+ */
-+#define is_lzma(c) (c == 0x5d)
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef __KERNEL__
-+/* for mksquashfs only */
-+struct sqlzma_opts {
-+ unsigned int try_lzma:1;
-+ unsigned int dicsize;
-+};
-+int sqlzma_cm(struct sqlzma_opts *opts, z_stream *stream, Bytef *next_in, uInt
-+ avail_in, Bytef *next_out, uInt avail_out);
-+#endif
-+
-+/* ---------------------------------------------------------------------- */
-+/*
-+ * Three patterns for sqlzma uncompression. very dirty code.
-+ * - kernel space (squashfs kernel module)
-+ * - user space with pthread (mksquashfs)
-+ * - user space without pthread (unsquashfs)
-+ */
-+
-+struct sized_buf {
-+ unsigned int sz;
-+ unsigned char *buf;
-+};
-+
-+enum {SQUN_PROB, SQUN_RESULT, SQUN_LAST};
-+struct sqlzma_un {
-+ int un_lzma;
-+ struct sized_buf un_a[SQUN_LAST];
-+ unsigned char un_prob[31960]; /* unlzma 64KB - 1MB */
-+ z_stream un_stream;
-+#define un_cmbuf un_stream.next_in
-+#define un_cmlen un_stream.avail_in
-+#define un_resbuf un_stream.next_out
-+#define un_resroom un_stream.avail_out
-+#define un_reslen un_stream.total_out
-+};
-+
-+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz);
-+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src, struct sized_buf *dst);
-+void sqlzma_fin(struct sqlzma_un *un);
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#ifdef __cplusplus
-+};
-+#endif
-+#endif
-diff -urN linux-2.6.23/fs/squashfs/squashfs.h linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs.h
---- linux-2.6.23/fs/squashfs/squashfs.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs.h 2007-11-13 18:58:41.000000000 -0500
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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, int srclength);
-+extern int squashfs_get_cached_block(struct super_block *s, void *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 inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
-+extern const struct address_space_operations squashfs_symlink_aops;
-+extern const struct address_space_operations squashfs_aops;
-+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.23/fs/squashfs/squashfs2_0.c linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs2_0.c
---- linux-2.6.23/fs/squashfs/squashfs2_0.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs2_0.c 2007-11-13 18:58:41.000000000 -0500
-@@ -0,0 +1,740 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/zlib.h>
-+#include <linux/fs.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.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, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) {
-+ 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 void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ 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];
-+}
-+
-+
-+static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode)
-+{
-+ struct super_block *s = i->i_sb;
-+ 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_read_inode_2\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;
-+
-+ squashfs_new_inode(msblk, i, inodeb, ino);
-+
-+ 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 = 0;
-+
-+ 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;
-+
-+ 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;
-+ i->i_data.a_ops = &squashfs_aops;
-+
-+ 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;
-+
-+ 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;
-+
-+ 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;
-+
-+ 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;
-+
-+ 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: {
-+
-+ 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;
-+ }
-+
-+ return 1;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ 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_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);
-+ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(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 = squashfs_iget(i->i_sb, ino, inode_number);
-+
-+ 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->read_inode = squashfs_read_inode_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.23/fs/squashfs/uncomp.c linux-2.6.23.sqlzma-ng/fs/squashfs/uncomp.c
---- linux-2.6.23/fs/squashfs/uncomp.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/uncomp.c 2007-11-13 19:40:29.000000000 -0500
-@@ -0,0 +1,221 @@
-+/*
-+ * Copyright (C) 2006, 2007 Junjiro Okajima
-+ * Copyright (C) 2006, 2007 Tomas Matejicek, slax.org
-+ *
-+ * LICENSE follows the described one in lzma.txt.
-+ */
-+
-+/* $Id: uncomp.c,v 1.1 2007/11/05 05:43:36 jro Exp $ */
-+
-+/* extract some parts from lzma443/C/7zip/Compress/LZMA_C/LzmaTest.c */
-+
-+#ifndef __KERNEL__
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <assert.h>
-+#include <pthread.h>
-+#define unlikely(x) __builtin_expect(!!(x), 0)
-+#define BUG_ON(x) assert(!(x))
-+/* sqlzma buffers are always larger than a page. true? */
-+#define kmalloc(sz,gfp) malloc(sz)
-+#define kfree(p) free(p)
-+#define zlib_inflate(s, f) inflate(s, f)
-+#define zlib_inflateInit(s) inflateInit(s)
-+#define zlib_inflateReset(s) inflateReset(s)
-+#define zlib_inflateEnd(s) inflateEnd(s)
-+#else
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/vmalloc.h>
-+#ifndef WARN_ON_ONCE
-+#define WARN_ON_ONCE(b) WARN_ON(b)
-+#endif
-+#endif /* __KERNEL__ */
-+
-+#include "sqlzma.h"
-+#include "LzmaDecode.h"
-+
-+static int LzmaUncompress(struct sqlzma_un *un)
-+{
-+ int err, i, ret;
-+ SizeT outSize, inProcessed, outProcessed, srclen;
-+ /* it's about 24-80 bytes structure, if int is 32-bit */
-+ CLzmaDecoderState state;
-+ unsigned char *dst, *src, a[8];
-+ struct sized_buf *sbuf;
-+
-+ /* Decode LZMA properties and allocate memory */
-+ err = -EINVAL;
-+ src = un->un_cmbuf;
-+ ret = LzmaDecodeProperties(&state.Properties, src, LZMA_PROPERTIES_SIZE);
-+ src += LZMA_PROPERTIES_SIZE;
-+ if (unlikely(ret != LZMA_RESULT_OK))
-+ goto out;
-+ i = LzmaGetNumProbs(&state.Properties);
-+ if (unlikely(i <= 0))
-+ i = 1;
-+ i *= sizeof(CProb);
-+ sbuf = un->un_a + SQUN_PROB;
-+ if (unlikely(sbuf->sz < i)) {
-+ if (sbuf->buf && sbuf->buf != un->un_prob)
-+ kfree(sbuf->buf);
-+#ifdef __KERNEL__
-+ printk("%s:%d: %d --> %d\n", __func__, __LINE__, sbuf->sz, i);
-+#else
-+ printf("%d --> %d\n", sbuf->sz, i);
-+#endif
-+ err = -ENOMEM;
-+ sbuf->sz = 0;
-+ sbuf->buf = kmalloc(i, GFP_ATOMIC);
-+ if (unlikely(!sbuf->buf))
-+ goto out;
-+ sbuf->sz = i;
-+ }
-+ state.Probs = (void*)sbuf->buf;
-+
-+ /* Read uncompressed size */
-+ memcpy(a, src, sizeof(a));
-+ src += sizeof(a);
-+ outSize = a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24);
-+
-+ err = -EINVAL;
-+ dst = un->un_resbuf;
-+ if (unlikely(!dst || outSize > un->un_reslen))
-+ goto out;
-+ un->un_reslen = outSize;
-+ srclen = un->un_cmlen - (src - un->un_cmbuf);
-+
-+ /* Decompress */
-+ err = LzmaDecode(&state, src, srclen, &inProcessed, dst, outSize,
-+ &outProcessed);
-+ if (err)
-+ err = -EINVAL;
-+
-+ out:
-+#ifndef __KERNEL__
-+ if (err)
-+ fprintf(stderr, "err %d\n", err);
-+#endif
-+ return err;
-+}
-+
-+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src,
-+ struct sized_buf *dst)
-+{
-+ int err, by_lzma = 0;
-+ if (un->un_lzma && is_lzma(*src->buf)) {
-+ by_lzma = 1;
-+ un->un_cmbuf = src->buf;
-+ un->un_cmlen = src->sz;
-+ un->un_resbuf = dst->buf;
-+ un->un_reslen = dst->sz;
-+
-+ /* this library is thread-safe */
-+ err = LzmaUncompress(un);
-+ goto out;
-+ }
-+
-+ err = zlib_inflateReset(&un->un_stream);
-+ if (unlikely(err != Z_OK))
-+ goto out;
-+ un->un_stream.next_in = src->buf;
-+ un->un_stream.avail_in = src->sz;
-+ un->un_stream.next_out = dst->buf;
-+ un->un_stream.avail_out = dst->sz;
-+ err = zlib_inflate(&un->un_stream, Z_FINISH);
-+ if (err == Z_STREAM_END)
-+ err = 0;
-+
-+ out:
-+ if (err) {
-+#ifdef __KERNEL__
-+ WARN_ON_ONCE(1);
-+#else
-+ char a[64] = "ZLIB ";
-+ if (by_lzma) {
-+ strcpy(a, "LZMA ");
-+#ifdef _REENTRANT
-+ strerror_r(err, a + 5, sizeof(a) - 5);
-+#else
-+ strncat(a, strerror(err), sizeof(a) - 5);
-+#endif
-+ } else
-+ strncat(a, zError(err), sizeof(a) - 5);
-+ fprintf(stderr, "%s: %.*s\n", __func__, sizeof(a), a);
-+#endif
-+ }
-+ return err;
-+}
-+
-+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz)
-+{
-+ int err;
-+
-+ err = -ENOMEM;
-+ un->un_lzma = do_lzma;
-+ memset(un->un_a, 0, sizeof(un->un_a));
-+ un->un_a[SQUN_PROB].buf = un->un_prob;
-+ un->un_a[SQUN_PROB].sz = sizeof(un->un_prob);
-+ if (res_sz) {
-+ un->un_a[SQUN_RESULT].buf = kmalloc(res_sz, GFP_KERNEL);
-+ if (unlikely(!un->un_a[SQUN_RESULT].buf))
-+ return err;
-+ un->un_a[SQUN_RESULT].sz = res_sz;
-+ }
-+
-+ un->un_stream.next_in = NULL;
-+ un->un_stream.avail_in = 0;
-+#ifdef __KERNEL__
-+ un->un_stream.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
-+ if (unlikely(!un->un_stream.workspace))
-+ return err;
-+#else
-+ un->un_stream.opaque = NULL;
-+ un->un_stream.zalloc = Z_NULL;
-+ un->un_stream.zfree = Z_NULL;
-+#endif
-+ err = zlib_inflateInit(&un->un_stream);
-+ if (unlikely(err == Z_MEM_ERROR))
-+ return -ENOMEM;
-+ BUG_ON(err);
-+ return err;
-+}
-+
-+void sqlzma_fin(struct sqlzma_un *un)
-+{
-+ int i;
-+ for (i = 0; i < SQUN_LAST; i++)
-+ if (un->un_a[i].buf && un->un_a[i].buf != un->un_prob)
-+ kfree(un->un_a[i].buf);
-+ BUG_ON(zlib_inflateEnd(&un->un_stream) != Z_OK);
-+}
-+
-+#ifdef __KERNEL__
-+EXPORT_SYMBOL(sqlzma_un);
-+EXPORT_SYMBOL(sqlzma_init);
-+EXPORT_SYMBOL(sqlzma_fin);
-+
-+#if 0
-+static int __init sqlzma_init(void)
-+{
-+ return 0;
-+}
-+
-+static void __exit sqlzma_exit(void)
-+{
-+}
-+
-+module_init(sqlzma_init);
-+module_exit(sqlzma_exit);
-+#endif
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Junjiro Okajima <sfjro at users dot sf dot net>");
-+MODULE_VERSION("$Id: uncomp.c,v 1.1 2007/11/05 05:43:36 jro Exp $");
-+MODULE_DESCRIPTION("LZMA uncompress for squashfs. "
-+ "Some functions for squashfs to support LZMA and "
-+ "a tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");
-+#endif
-diff -urN linux-2.6.23/include/linux/squashfs_fs.h linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs.h
---- linux-2.6.23/include/linux/squashfs_fs.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs.h 2007-11-13 19:12:41.000000000 -0500
-@@ -0,0 +1,937 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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
-+
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 1
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_MAGIC_LZMA 0x71736873
-+#define SQUASHFS_MAGIC_LZMA_SWAP 0x73687371
-+#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 131072
-+#define SQUASHFS_FILE_LOG 17
-+
-+#define SQUASHFS_FILE_MAX_SIZE 1048576
-+
-+/* 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_EXPORT 7
-+
-+#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_EXPORTABLE(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_EXPORT)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking, exportable) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6) | (exportable << 7))
-+
-+/* 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)
-+
-+#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))
-+
-+/* inode lookup table defines */
-+#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t))
-+
-+#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(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 lookup_table_start;
-+} __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;
-+ unsigned 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 pending;
-+} __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)->lookup_table_start, 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_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1)
-+
-+#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)
-+#define SQUASHFS_SWAP_LOOKUP_BLOCKS(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));
-+
-+union squashfs_inode_header_1 {
-+ struct squashfs_base_inode_header_1 base;
-+ struct squashfs_dev_inode_header_1 dev;
-+ struct squashfs_symlink_inode_header_1 symlink;
-+ struct squashfs_reg_inode_header_1 reg;
-+ struct squashfs_dir_inode_header_1 dir;
-+ struct squashfs_ipc_inode_header_1 ipc;
-+};
-+
-+#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.23/include/linux/squashfs_fs_i.h linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_i.h
---- linux-2.6.23/include/linux/squashfs_fs_i.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_i.h 2007-11-13 18:58:41.000000000 -0500
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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.23/include/linux/squashfs_fs_sb.h linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_sb.h
---- linux-2.6.23/include/linux/squashfs_fs_sb.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_sb.h 2007-11-13 19:19:28.000000000 -0500
-@@ -0,0 +1,76 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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;
-+ char *read_page;
-+ //struct mutex read_data_mutex;
-+ struct mutex read_page_mutex;
-+ struct mutex block_cache_mutex;
-+ struct mutex fragment_mutex;
-+ struct mutex meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ //z_stream stream;
-+ long long *inode_lookup_table;
-+ int unused_cache_blks;
-+ int unused_frag_blks;
-+ int (*read_inode)(struct inode *i, 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 --git a/packages/linux/linux-openmoko-2.6.28/0002-squashfs-initrd.patch b/packages/linux/linux-openmoko-2.6.28/0002-squashfs-initrd.patch
deleted file mode 100644
index cd2c678058..0000000000
--- a/packages/linux/linux-openmoko-2.6.28/0002-squashfs-initrd.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-diff -urN linux-2.6.23/init/do_mounts_rd.c linux-2.6.23.sqlzma-ng/init/do_mounts_rd.c
---- linux-2.6.23/init/do_mounts_rd.c 2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.sqlzma-ng/init/do_mounts_rd.c 2007-11-13 18:58:41.000000000 -0500
-@@ -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,18 @@
- 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-openmoko-2.6.28/0003-squashfs-force-O2.patch b/packages/linux/linux-openmoko-2.6.28/0003-squashfs-force-O2.patch
deleted file mode 100644
index 550077b9fa..0000000000
--- a/packages/linux/linux-openmoko-2.6.28/0003-squashfs-force-O2.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-The kernel patch from the squashfs-3.1r2 release did not compile on my
-armeb-linux-gcc 4.1.1 when optimizing for size (-Os). This works around
-that problem by using optimization flag -O2 instead for these two files.
-
-Signed-off-by: Leon Woestenberg <leonw@mailcan.com>
-
-Index: linux-2.6.19/fs/squashfs/Makefile
-===================================================================
---- linux-2.6.19.orig/fs/squashfs/Makefile
-+++ linux-2.6.19/fs/squashfs/Makefile
-@@ -5,3 +5,6 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += inode.o
- squashfs-y += squashfs2_0.o
-+
-+CFLAGS_squashfs2_0.o = "-O2"
-+CFLAGS_inode.o = "-O2"
diff --git a/packages/linux/linux-openmoko-2.6.28/0004-squashfs-Kconfig.patch b/packages/linux/linux-openmoko-2.6.28/0004-squashfs-Kconfig.patch
deleted file mode 100644
index f2b3db9942..0000000000
--- a/packages/linux/linux-openmoko-2.6.28/0004-squashfs-Kconfig.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-diff -urN linux-2.6.23/fs/Kconfig linux-2.6.23.sqlzma-ng/fs/Kconfig
---- linux-2.6.23/fs/Kconfig 2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.sqlzma-ng/fs/Kconfig 2007-11-13 18:58:41.000000000 -0500
-@@ -1364,6 +1364,56 @@
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.3 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.3 (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 1 Mbytes (default
-+ block size 128K). SquashFS 3.3 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 option for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache size.
-+
-+ 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 VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-
diff --git a/packages/linux/linux-openmoko-2.6.28/0005-squashfs-Makefile.patch b/packages/linux/linux-openmoko-2.6.28/0005-squashfs-Makefile.patch
deleted file mode 100644
index b0ec4cebb8..0000000000
--- a/packages/linux/linux-openmoko-2.6.28/0005-squashfs-Makefile.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN linux-2.6.24/fs/Makefile linux-2.6.24.sqlzma-ng/fs/Makefile
---- linux-2.6.24/fs/Makefile 2007-11-13 21:24:14.000000000 -0500
-+++ linux-2.6.24.sqlzma-ng/fs/Makefile 2007-11-13 21:19:15.000000000 -0500
-@@ -72,6 +72,7 @@
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-y += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-
diff --git a/packages/linux/linux-openmoko-2.6.28/defconfig-oe.patch b/packages/linux/linux-openmoko-2.6.28/defconfig-oe.patch
index 109e9ec83d..3f65387b78 100644
--- a/packages/linux/linux-openmoko-2.6.28/defconfig-oe.patch
+++ b/packages/linux/linux-openmoko-2.6.28/defconfig-oe.patch
@@ -10,28 +10,3 @@
#
# Userspace binary formats
-@@ -1634,9 +1631,10 @@
- #
- CONFIG_LEDS_TRIGGERS=y
- CONFIG_LEDS_TRIGGER_TIMER=y
--# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
- CONFIG_LEDS_TRIGGER_BACKLIGHT=y
- # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
-+CONFIG_LEDS_TRIGGER_NETDEV=y
- CONFIG_RTC_LIB=y
- CONFIG_RTC_CLASS=y
- CONFIG_RTC_HCTOSYS=y
-@@ -1822,7 +1820,11 @@
- # CONFIG_SYSV_FS is not set
- # CONFIG_UFS_FS is not set
- CONFIG_NETWORK_FILESYSTEMS=y
--# CONFIG_NFS_FS is not set
-+CONFIG_NFS_FS=m
-+CONFIG_NFS_V3=y
-+CONFIG_NFS_V3_ACL=y
-+# CONFIG_NFS_V4 is not set
-+CONFIG_ROOT_NFS=y
- CONFIG_NFSD=m
- CONFIG_NFSD_V2_ACL=y
- CONFIG_NFSD_V3=y
diff --git a/packages/linux/linux-openmoko-2.6.28/openwrt-ledtrig-netdev.patch b/packages/linux/linux-openmoko-2.6.28/openwrt-ledtrig-netdev.patch
deleted file mode 100644
index e87bccce61..0000000000
--- a/packages/linux/linux-openmoko-2.6.28/openwrt-ledtrig-netdev.patch
+++ /dev/null
@@ -1,474 +0,0 @@
-Add a netdev LED trigger for all Blinkenlights lovers...
-Originally taken from https://dev.openwrt.org/ticket/2776
-Slightly updated for 2.6.24 by Mickey <mickey@openmoko.org>.
-
-Index: git/drivers/leds/ledtrig-netdev.c
-===================================================================
---- /dev/null
-+++ git/drivers/leds/ledtrig-netdev.c
-@@ -0,0 +1,438 @@
-+/*
-+ * LED Kernel Netdev Trigger
-+ *
-+ * Toggles the LED to reflect the link and traffic state of a named net device
-+ *
-+ * Copyright 2007 Oliver Jowett <oliver@opencloud.com>
-+ *
-+ * Derived from ledtrig-timer.c which is:
-+ * 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/module.h>
-+#include <linux/jiffies.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/netdevice.h>
-+#include <linux/timer.h>
-+#include <linux/ctype.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+/*
-+ * Configurable sysfs attributes:
-+ *
-+ * device_name - network device name to monitor
-+ *
-+ * interval - duration of LED blink, in milliseconds
-+ *
-+ * mode - either "none" (LED is off) or a space separated list of one or more of:
-+ * link: LED's normal state reflects whether the link is up (has carrier) or not
-+ * tx: LED blinks on transmitted data
-+ * rx: LED blinks on receive data
-+ *
-+ * Some suggestions:
-+ *
-+ * Simple link status LED:
-+ * $ echo netdev >someled/trigger
-+ * $ echo eth0 >someled/device_name
-+ * $ echo link >someled/mode
-+ *
-+ * Ethernet-style link/activity LED:
-+ * $ echo netdev >someled/trigger
-+ * $ echo eth0 >someled/device_name
-+ * $ echo "link tx rx" >someled/mode
-+ *
-+ * Modem-style tx/rx LEDs:
-+ * $ echo netdev >led1/trigger
-+ * $ echo ppp0 >led1/device_name
-+ * $ echo tx >led1/mode
-+ * $ echo netdev >led2/trigger
-+ * $ echo ppp0 >led2/device_name
-+ * $ echo rx >led2/mode
-+ *
-+ */
-+
-+#define MODE_LINK 1
-+#define MODE_TX 2
-+#define MODE_RX 4
-+
-+struct led_netdev_data {
-+ rwlock_t lock;
-+
-+ struct timer_list timer;
-+ struct notifier_block notifier;
-+
-+ struct led_classdev *led_cdev;
-+ struct net_device *net_dev;
-+
-+ char device_name[IFNAMSIZ];
-+ unsigned interval;
-+ unsigned mode;
-+ unsigned link_up;
-+ unsigned last_activity;
-+};
-+
-+static void set_baseline_state(struct led_netdev_data *trigger_data)
-+{
-+ if ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up)
-+ led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+ else
-+ led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+
-+ if ((trigger_data->mode & (MODE_TX | MODE_RX)) != 0 && trigger_data->link_up)
-+ mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+ else
-+ del_timer(&trigger_data->timer);
-+}
-+
-+static ssize_t led_device_name_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ read_lock(&trigger_data->lock);
-+ sprintf(buf, "%s\n", trigger_data->device_name);
-+ read_unlock(&trigger_data->lock);
-+
-+ return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_device_name_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ if (size < 0 || size >= IFNAMSIZ)
-+ return -EINVAL;
-+
-+ write_lock(&trigger_data->lock);
-+
-+ strcpy(trigger_data->device_name, buf);
-+ if (size > 0 && trigger_data->device_name[size-1] == '\n')
-+ trigger_data->device_name[size-1] = 0;
-+
-+ if (trigger_data->device_name[0] != 0) {
-+ /* check for existing device to update from */
-+ trigger_data->net_dev = dev_get_by_name(&init_net, trigger_data->device_name);
-+ if (trigger_data->net_dev != NULL)
-+ trigger_data->link_up = (dev_get_flags(trigger_data->net_dev) & IFF_LOWER_UP) != 0;
-+ set_baseline_state(trigger_data); /* updates LEDs, may start timers */
-+ }
-+
-+ write_unlock(&trigger_data->lock);
-+ return size;
-+}
-+
-+static DEVICE_ATTR(device_name, 0644, led_device_name_show, led_device_name_store);
-+
-+static ssize_t led_mode_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ read_lock(&trigger_data->lock);
-+
-+ if (trigger_data->mode == 0) {
-+ strcpy(buf, "none\n");
-+ } else {
-+ char *p = buf;
-+ if (trigger_data->mode & MODE_LINK)
-+ strcat(buf, "link ");
-+ if (trigger_data->mode & MODE_TX)
-+ strcat(buf, "tx ");
-+ if (trigger_data->mode & MODE_RX)
-+ strcat(buf, "rx ");
-+ strcat(buf, "\n");
-+ }
-+
-+ read_unlock(&trigger_data->lock);
-+
-+ return strlen(buf)+1;
-+}
-+
-+static ssize_t led_mode_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+ char copybuf[1024];
-+ int new_mode = -1;
-+ char *p, *token;
-+
-+ /* take a copy since we don't want to trash the inbound buffer when using strsep */
-+ strncpy(copybuf, buf, sizeof(copybuf));
-+ copybuf[1023] = 0;
-+ p = copybuf;
-+
-+ while ((token = strsep(&p, " \t\n")) != NULL) {
-+ if (!*token)
-+ continue;
-+
-+ if (new_mode == -1)
-+ new_mode = 0;
-+
-+ if (!strcmp(token, "none"))
-+ new_mode = 0;
-+ else if (!strcmp(token, "tx"))
-+ new_mode |= MODE_TX;
-+ else if (!strcmp(token, "rx"))
-+ new_mode |= MODE_RX;
-+ else if (!strcmp(token, "link"))
-+ new_mode |= MODE_LINK;
-+ else
-+ return -EINVAL;
-+ }
-+
-+ if (new_mode == -1)
-+ return -EINVAL;
-+
-+ write_lock(&trigger_data->lock);
-+ trigger_data->mode = new_mode;
-+ set_baseline_state(trigger_data);
-+ write_unlock(&trigger_data->lock);
-+
-+ return size;
-+}
-+
-+static DEVICE_ATTR(mode, 0644, led_mode_show, led_mode_store);
-+
-+static ssize_t led_interval_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ read_lock(&trigger_data->lock);
-+ sprintf(buf, "%u\n", jiffies_to_msecs(trigger_data->interval));
-+ read_unlock(&trigger_data->lock);
-+
-+ return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_interval_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+ int ret = -EINVAL;
-+ char *after;
-+ unsigned long value = simple_strtoul(buf, &after, 10);
-+ size_t count = after - buf;
-+
-+ if (*after && isspace(*after))
-+ count++;
-+
-+ /* impose some basic bounds on the timer interval */
-+ if (count == size && value >= 5 && value <= 10000) {
-+ write_lock(&trigger_data->lock);
-+ trigger_data->interval = msecs_to_jiffies(value);
-+ set_baseline_state(trigger_data); // resets timer
-+ write_unlock(&trigger_data->lock);
-+ ret = count;
-+ }
-+
-+ return ret;
-+}
-+
-+static DEVICE_ATTR(interval, 0644, led_interval_show, led_interval_store);
-+
-+static int netdev_trig_notify(struct notifier_block *nb,
-+ unsigned long evt,
-+ void *dv)
-+{
-+ struct net_device *dev = dv;
-+ struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier);
-+
-+ if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER)
-+ return NOTIFY_DONE;
-+
-+ write_lock(&trigger_data->lock);
-+
-+ if (strcmp(dev->name, trigger_data->device_name))
-+ goto done;
-+
-+ if (evt == NETDEV_REGISTER) {
-+ if (trigger_data->net_dev != NULL)
-+ dev_put(trigger_data->net_dev);
-+ dev_hold(dev);
-+ trigger_data->net_dev = dev;
-+ trigger_data->link_up = 0;
-+ goto done;
-+ }
-+
-+ if (evt == NETDEV_UNREGISTER && trigger_data->net_dev != NULL) {
-+ dev_put(trigger_data->net_dev);
-+ trigger_data->net_dev = NULL;
-+ goto done;
-+ }
-+
-+ /* UP / DOWN / CHANGE */
-+
-+ trigger_data->link_up = (evt != NETDEV_DOWN && netif_carrier_ok(dev));
-+ set_baseline_state(trigger_data);
-+
-+done:
-+ write_unlock(&trigger_data->lock);
-+ return NOTIFY_DONE;
-+}
-+
-+/* here's the real work! */
-+static void netdev_trig_timer(unsigned long arg)
-+{
-+ struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg;
-+ struct net_device_stats *dev_stats;
-+ unsigned new_activity;
-+
-+ write_lock(&trigger_data->lock);
-+
-+ if (!trigger_data->link_up || !trigger_data->net_dev || (trigger_data->mode & (MODE_TX | MODE_RX)) == 0) {
-+ /* we don't need to do timer work, just reflect link state. */
-+ led_set_brightness(trigger_data->led_cdev, ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up) ? LED_FULL : LED_OFF);
-+ goto no_restart;
-+ }
-+
-+ dev_stats = trigger_data->net_dev->get_stats(trigger_data->net_dev);
-+ new_activity =
-+ ((trigger_data->mode & MODE_TX) ? dev_stats->tx_packets : 0) +
-+ ((trigger_data->mode & MODE_RX) ? dev_stats->rx_packets : 0);
-+
-+ if (trigger_data->mode & MODE_LINK) {
-+ /* base state is ON (link present) */
-+ /* if there's no link, we don't get this far and the LED is off */
-+
-+ /* OFF -> ON always */
-+ /* ON -> OFF on activity */
-+ if (trigger_data->led_cdev->brightness == LED_OFF) {
-+ led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+ } else if (trigger_data->last_activity != new_activity) {
-+ led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+ }
-+ } else {
-+ /* base state is OFF */
-+ /* ON -> OFF always */
-+ /* OFF -> ON on activity */
-+ if (trigger_data->led_cdev->brightness == LED_FULL) {
-+ led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+ } else if (trigger_data->last_activity != new_activity) {
-+ led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+ }
-+ }
-+
-+ trigger_data->last_activity = new_activity;
-+ mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+
-+no_restart:
-+ write_unlock(&trigger_data->lock);
-+}
-+
-+static void netdev_trig_activate(struct led_classdev *led_cdev)
-+{
-+ struct led_netdev_data *trigger_data;
-+ int rc;
-+
-+ trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
-+ if (!trigger_data)
-+ return;
-+
-+ rwlock_init(&trigger_data->lock);
-+
-+ trigger_data->notifier.notifier_call = netdev_trig_notify;
-+ trigger_data->notifier.priority = 10;
-+
-+ setup_timer(&trigger_data->timer, netdev_trig_timer, (unsigned long) trigger_data);
-+
-+ trigger_data->led_cdev = led_cdev;
-+ trigger_data->net_dev = NULL;
-+ trigger_data->device_name[0] = 0;
-+
-+ trigger_data->mode = 0;
-+ trigger_data->interval = msecs_to_jiffies(50);
-+ trigger_data->link_up = 0;
-+ trigger_data->last_activity = 0;
-+
-+ led_cdev->trigger_data = trigger_data;
-+
-+ rc = device_create_file(led_cdev->dev, &dev_attr_device_name);
-+ if (rc)
-+ goto err_out;
-+ rc = device_create_file(led_cdev->dev, &dev_attr_mode);
-+ if (rc)
-+ goto err_out_device_name;
-+ rc = device_create_file(led_cdev->dev, &dev_attr_interval);
-+ if (rc)
-+ goto err_out_mode;
-+
-+ register_netdevice_notifier(&trigger_data->notifier);
-+ return;
-+
-+err_out_mode:
-+ device_remove_file(led_cdev->dev, &dev_attr_mode);
-+err_out_device_name:
-+ device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+err_out:
-+ led_cdev->trigger_data = NULL;
-+ kfree(trigger_data);
-+}
-+
-+static void netdev_trig_deactivate(struct led_classdev *led_cdev)
-+{
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ if (trigger_data) {
-+ unregister_netdevice_notifier(&trigger_data->notifier);
-+
-+ device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+ device_remove_file(led_cdev->dev, &dev_attr_mode);
-+ device_remove_file(led_cdev->dev, &dev_attr_interval);
-+
-+ write_lock(&trigger_data->lock);
-+
-+ if (trigger_data->net_dev) {
-+ dev_put(trigger_data->net_dev);
-+ trigger_data->net_dev = NULL;
-+ }
-+
-+ write_unlock(&trigger_data->lock);
-+
-+ del_timer_sync(&trigger_data->timer);
-+
-+ kfree(trigger_data);
-+ }
-+}
-+
-+static struct led_trigger netdev_led_trigger = {
-+ .name = "netdev",
-+ .activate = netdev_trig_activate,
-+ .deactivate = netdev_trig_deactivate,
-+};
-+
-+static int __init netdev_trig_init(void)
-+{
-+ return led_trigger_register(&netdev_led_trigger);
-+}
-+
-+static void __exit netdev_trig_exit(void)
-+{
-+ led_trigger_unregister(&netdev_led_trigger);
-+}
-+
-+module_init(netdev_trig_init);
-+module_exit(netdev_trig_exit);
-+
-+MODULE_AUTHOR("Oliver Jowett <oliver@opencloud.com>");
-+MODULE_DESCRIPTION("Netdev LED trigger");
-+MODULE_LICENSE("GPL");
-Index: git/drivers/leds/Kconfig
-===================================================================
---- git.orig/drivers/leds/Kconfig
-+++ git/drivers/leds/Kconfig
-@@ -229,4 +229,11 @@ config LEDS_TRIGGER_DEFAULT_ON
- This allows LEDs to be initialised in the ON state.
- If unsure, say Y.
-
-+config LEDS_TRIGGER_NETDEV
-+ tristate "LED Network Device Trigger"
-+ depends on LEDS_TRIGGERS
-+ help
-+ This allows LEDs to be controlled by Network Device activity.
-+ If unsure, say Y.
-+
- endif # NEW_LEDS
-Index: git/drivers/leds/Makefile
-===================================================================
---- git.orig/drivers/leds/Makefile
-+++ git/drivers/leds/Makefile
-@@ -30,5 +30,6 @@ obj-$(CONFIG_LEDS_NEO1973_GTA02) += leds
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
- obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o
- obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV) += ledtrig-netdev.o
- obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
diff --git a/packages/linux/linux-openmoko-2.6.28_git.bb b/packages/linux/linux-openmoko-2.6.28_git.bb
index e37742caa2..0b779384d9 100644
--- a/packages/linux/linux-openmoko-2.6.28_git.bb
+++ b/packages/linux/linux-openmoko-2.6.28_git.bb
@@ -6,19 +6,23 @@ DESCRIPTION_${PN} = "Linux ${KERNEL_RELEASE} kernel for the Openmoko Neo GSM Sma
KERNEL_RELEASE = "2.6.28"
KERNEL_VERSION = "${KERNEL_RELEASE}"
-OEV = "oe1"
+OEV = "oe2"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
-PR = "r2"
+PR = "r0"
SRC_URI = "\
- git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy-tracking \
- file://openwrt-ledtrig-netdev.patch;patch=1 \
+ git://git.openmoko.org/git/kernel.git;protocol=git;branch=stable \
file://defconfig-oe.patch \
"
S = "${WORKDIR}/git"
+CONFIG_NAME_om-gta01 = "gta01_moredrivers_defconfig"
+CONFIG_NAME_om-gta02 = "gta02_packaging_defconfig"
+CONFIG_NAME_om-gta03 = "gta03_defconfig"
+
do_configure_prepend() {
- install -m 644 ./arch/arm/configs/gta02-packaging-defconfig ${WORKDIR}/defconfig-oe
+ install -m 644 ./arch/arm/configs/${CONFIG_NAME} ${WORKDIR}/defconfig-oe
cat ${WORKDIR}/defconfig-oe.patch | patch -p0 -d ${WORKDIR}
}
+
diff --git a/packages/linux/linux-openmoko-devel/0001-squashfs-with-lzma.patch b/packages/linux/linux-openmoko-devel/0001-squashfs-with-lzma.patch
deleted file mode 100644
index 04d47fe16f..0000000000
--- a/packages/linux/linux-openmoko-devel/0001-squashfs-with-lzma.patch
+++ /dev/null
@@ -1,5342 +0,0 @@
-
-diff -urN linux-2.6.23/fs/squashfs/LzmaDecode.c linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.c
---- linux-2.6.23/fs/squashfs/LzmaDecode.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.c 2007-11-13 19:45:12.000000000 -0500
-@@ -0,0 +1,584 @@
-+/*
-+ LzmaDecode.c
-+ LZMA Decoder (optimized for Speed version)
-+
-+ LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
-+ 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"
-+
-+#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) \
-+ { SizeT 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
-+
-+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size)
-+{
-+ unsigned char prop0;
-+ if (size < LZMA_PROPERTIES_SIZE)
-+ return LZMA_RESULT_DATA_ERROR;
-+ prop0 = propsData[0];
-+ if (prop0 >= (9 * 5 * 5))
-+ return LZMA_RESULT_DATA_ERROR;
-+ {
-+ for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5));
-+ for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9);
-+ propsRes->lc = prop0;
-+ /*
-+ unsigned char remainder = (unsigned char)(prop0 / 9);
-+ propsRes->lc = prop0 % 9;
-+ propsRes->pb = remainder / 5;
-+ propsRes->lp = remainder % 5;
-+ */
-+ }
-+
-+ #ifdef _LZMA_OUT_READ
-+ {
-+ int i;
-+ propsRes->DictionarySize = 0;
-+ for (i = 0; i < 4; i++)
-+ propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8);
-+ if (propsRes->DictionarySize == 0)
-+ propsRes->DictionarySize = 1;
-+ }
-+ #endif
-+ return LZMA_RESULT_OK;
-+}
-+
-+#define kLzmaStreamWasFinishedId (-1)
-+
-+int LzmaDecode(CLzmaDecoderState *vs,
-+ #ifdef _LZMA_IN_CB
-+ ILzmaInCallback *InCallback,
-+ #else
-+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
-+ #endif
-+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed)
-+{
-+ CProb *p = vs->Probs;
-+ SizeT nowPos = 0;
-+ Byte previousByte = 0;
-+ UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1;
-+ UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1;
-+ int lc = vs->Properties.lc;
-+
-+ #ifdef _LZMA_OUT_READ
-+
-+ UInt32 Range = vs->Range;
-+ UInt32 Code = vs->Code;
-+ #ifdef _LZMA_IN_CB
-+ const Byte *Buffer = vs->Buffer;
-+ const Byte *BufferLim = vs->BufferLim;
-+ #else
-+ const Byte *Buffer = inStream;
-+ const Byte *BufferLim = inStream + inSize;
-+ #endif
-+ int state = vs->State;
-+ UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
-+ int len = vs->RemainLen;
-+ UInt32 globalPos = vs->GlobalPos;
-+ UInt32 distanceLimit = vs->DistanceLimit;
-+
-+ Byte *dictionary = vs->Dictionary;
-+ UInt32 dictionarySize = vs->Properties.DictionarySize;
-+ UInt32 dictionaryPos = vs->DictionaryPos;
-+
-+ Byte tempDictionary[4];
-+
-+ #ifndef _LZMA_IN_CB
-+ *inSizeProcessed = 0;
-+ #endif
-+ *outSizeProcessed = 0;
-+ if (len == kLzmaStreamWasFinishedId)
-+ return LZMA_RESULT_OK;
-+
-+ if (dictionarySize == 0)
-+ {
-+ dictionary = tempDictionary;
-+ dictionarySize = 1;
-+ tempDictionary[0] = vs->TempDictionary[0];
-+ }
-+
-+ if (len == kLzmaNeedInitId)
-+ {
-+ {
-+ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
-+ UInt32 i;
-+ for (i = 0; i < numProbs; i++)
-+ p[i] = kBitModelTotal >> 1;
-+ rep0 = rep1 = rep2 = rep3 = 1;
-+ state = 0;
-+ globalPos = 0;
-+ distanceLimit = 0;
-+ dictionaryPos = 0;
-+ dictionary[dictionarySize - 1] = 0;
-+ #ifdef _LZMA_IN_CB
-+ RC_INIT;
-+ #else
-+ RC_INIT(inStream, inSize);
-+ #endif
-+ }
-+ len = 0;
-+ }
-+ 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 /* if !_LZMA_OUT_READ */
-+
-+ int state = 0;
-+ UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
-+ int len = 0;
-+ const Byte *Buffer;
-+ const Byte *BufferLim;
-+ UInt32 Range;
-+ UInt32 Code;
-+
-+ #ifndef _LZMA_IN_CB
-+ *inSizeProcessed = 0;
-+ #endif
-+ *outSizeProcessed = 0;
-+
-+ {
-+ UInt32 i;
-+ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp));
-+ for (i = 0; i < numProbs; i++)
-+ p[i] = kBitModelTotal >> 1;
-+ }
-+
-+ #ifdef _LZMA_IN_CB
-+ RC_INIT;
-+ #else
-+ RC_INIT(inStream, inSize);
-+ #endif
-+
-+ #endif /* _LZMA_OUT_READ */
-+
-+ 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
-+ if (distanceLimit < dictionarySize)
-+ distanceLimit++;
-+
-+ 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);
-+
-+ #ifdef _LZMA_OUT_READ
-+ if (distanceLimit == 0)
-+ #else
-+ if (nowPos == 0)
-+ #endif
-+ 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;
-+ #ifdef _LZMA_OUT_READ
-+ if (distanceLimit < dictionarySize)
-+ distanceLimit++;
-+ #endif
-+
-+ 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 = kLzmaStreamWasFinishedId;
-+ break;
-+ }
-+ }
-+
-+ len += kMatchMinLen;
-+ #ifdef _LZMA_OUT_READ
-+ if (rep0 > distanceLimit)
-+ #else
-+ if (rep0 > nowPos)
-+ #endif
-+ return LZMA_RESULT_DATA_ERROR;
-+
-+ #ifdef _LZMA_OUT_READ
-+ if (dictionarySize - distanceLimit > (UInt32)len)
-+ distanceLimit += len;
-+ else
-+ distanceLimit = dictionarySize;
-+ #endif
-+
-+ 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->Range = Range;
-+ vs->Code = Code;
-+ vs->DictionaryPos = dictionaryPos;
-+ vs->GlobalPos = globalPos + (UInt32)nowPos;
-+ vs->DistanceLimit = distanceLimit;
-+ 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
-+
-+ #ifdef _LZMA_IN_CB
-+ vs->Buffer = Buffer;
-+ vs->BufferLim = BufferLim;
-+ #else
-+ *inSizeProcessed = (SizeT)(Buffer - inStream);
-+ #endif
-+ *outSizeProcessed = nowPos;
-+ return LZMA_RESULT_OK;
-+}
-diff -urN linux-2.6.23/fs/squashfs/LzmaDecode.h linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.h
---- linux-2.6.23/fs/squashfs/LzmaDecode.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaDecode.h 2007-11-13 19:45:12.000000000 -0500
-@@ -0,0 +1,113 @@
-+/*
-+ LzmaDecode.h
-+ LZMA Decoder interface
-+
-+ LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
-+ 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
-+
-+#include "LzmaTypes.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 */
-+
-+#ifdef _LZMA_PROB32
-+#define CProb UInt32
-+#else
-+#define CProb UInt16
-+#endif
-+
-+#define LZMA_RESULT_OK 0
-+#define LZMA_RESULT_DATA_ERROR 1
-+
-+#ifdef _LZMA_IN_CB
-+typedef struct _ILzmaInCallback
-+{
-+ int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize);
-+} ILzmaInCallback;
-+#endif
-+
-+#define LZMA_BASE_SIZE 1846
-+#define LZMA_LIT_SIZE 768
-+
-+#define LZMA_PROPERTIES_SIZE 5
-+
-+typedef struct _CLzmaProperties
-+{
-+ int lc;
-+ int lp;
-+ int pb;
-+ #ifdef _LZMA_OUT_READ
-+ UInt32 DictionarySize;
-+ #endif
-+}CLzmaProperties;
-+
-+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);
-+
-+#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp)))
-+
-+#define kLzmaNeedInitId (-2)
-+
-+typedef struct _CLzmaDecoderState
-+{
-+ CLzmaProperties Properties;
-+ CProb *Probs;
-+
-+ #ifdef _LZMA_IN_CB
-+ const unsigned char *Buffer;
-+ const unsigned char *BufferLim;
-+ #endif
-+
-+ #ifdef _LZMA_OUT_READ
-+ unsigned char *Dictionary;
-+ UInt32 Range;
-+ UInt32 Code;
-+ UInt32 DictionaryPos;
-+ UInt32 GlobalPos;
-+ UInt32 DistanceLimit;
-+ UInt32 Reps[4];
-+ int State;
-+ int RemainLen;
-+ unsigned char TempDictionary[4];
-+ #endif
-+} CLzmaDecoderState;
-+
-+#ifdef _LZMA_OUT_READ
-+#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; }
-+#endif
-+
-+int LzmaDecode(CLzmaDecoderState *vs,
-+ #ifdef _LZMA_IN_CB
-+ ILzmaInCallback *inCallback,
-+ #else
-+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
-+ #endif
-+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
-+
-+#endif
-diff -urN linux-2.6.23/fs/squashfs/LzmaTypes.h linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaTypes.h
---- linux-2.6.23/fs/squashfs/LzmaTypes.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/LzmaTypes.h 2007-11-13 19:47:32.000000000 -0500
-@@ -0,0 +1,45 @@
-+/*
-+LzmaTypes.h
-+
-+Types for LZMA Decoder
-+
-+This file written and distributed to public domain by Igor Pavlov.
-+This file is part of LZMA SDK 4.40 (2006-05-01)
-+*/
-+
-+#ifndef __LZMATYPES_H
-+#define __LZMATYPES_H
-+
-+#ifndef _7ZIP_BYTE_DEFINED
-+#define _7ZIP_BYTE_DEFINED
-+typedef unsigned char Byte;
-+#endif
-+
-+#ifndef _7ZIP_UINT16_DEFINED
-+#define _7ZIP_UINT16_DEFINED
-+typedef unsigned short UInt16;
-+#endif
-+
-+#ifndef _7ZIP_UINT32_DEFINED
-+#define _7ZIP_UINT32_DEFINED
-+#ifdef _LZMA_UINT32_IS_ULONG
-+typedef unsigned long UInt32;
-+#else
-+typedef unsigned int UInt32;
-+#endif
-+#endif
-+
-+/* #define _LZMA_NO_SYSTEM_SIZE_T */
-+/* You can use it, if you don't want <stddef.h> */
-+
-+#ifndef _7ZIP_SIZET_DEFINED
-+#define _7ZIP_SIZET_DEFINED
-+#ifdef _LZMA_NO_SYSTEM_SIZE_T
-+typedef UInt32 SizeT;
-+#else
-+#include <stddef.h>
-+typedef size_t SizeT;
-+#endif
-+#endif
-+
-+#endif
-diff -urN linux-2.6.23/fs/squashfs/Makefile linux-2.6.23.sqlzma-ng/fs/squashfs/Makefile
---- linux-2.6.23/fs/squashfs/Makefile 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/Makefile 2007-11-13 19:52:56.000000000 -0500
-@@ -0,0 +1,10 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+
-+obj-$(CONFIG_SQUASHFS) += unlzma.o sqlzma.o squashfs.o
-+unlzma-y += module.o
-+sqlzma-y += uncomp.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-diff -urN linux-2.6.23/fs/squashfs/inode.c linux-2.6.23.sqlzma-ng/fs/squashfs/inode.c
---- linux-2.6.23/fs/squashfs/inode.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/inode.c 2007-11-13 19:14:24.000000000 -0500
-@@ -0,0 +1,2312 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/zlib.h>
-+#include <linux/fs.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/vmalloc.h>
-+#include <linux/smp_lock.h>
-+#include <linux/sched.h>
-+#include <linux/exportfs.h>
-+
-+#include "squashfs.h"
-+#include "sqlzma.h"
-+
-+#undef KeepPreemptive
-+#if defined(CONFIG_PREEMPT) && !defined(UnsquashNoPreempt)
-+#define KeepPreemptive
-+#endif
-+
-+struct sqlzma {
-+#ifdef KeepPreemptive
-+ struct mutex mtx;
-+#endif
-+ unsigned char read_data[SQUASHFS_FILE_MAX_SIZE];
-+ struct sqlzma_un un;
-+};
-+static DEFINE_PER_CPU(struct sqlzma *, sqlzma);
-+
-+#define dpri(fmt, args...) /* printk("%s:%d: " fmt, __func__, __LINE__, ##args) */
-+#define dpri_un(un) dpri("un{%d, {%d %p}, {%d %p}, {%d %p}}\n", \
-+ (un)->un_lzma, (un)->un_a[0].sz, (un)->un_a[0].buf, \
-+ (un)->un_a[1].sz, (un)->un_a[1].buf, \
-+ (un)->un_a[2].sz, (un)->un_a[2].buf)
-+
-+static int squashfs_cached_blks;
-+
-+static void vfs_read_inode(struct inode *i);
-+static struct dentry *squashfs_get_parent(struct dentry *child);
-+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+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_readpage(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static int squashfs_remount(struct super_block *s, int *flags, char *data);
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_get_sb(struct file_system_type *,int, const char *, void *,
-+ struct vfsmount *);
-+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 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 const 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_super_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+ .remount_fs = squashfs_remount
-+};
-+
-+static struct super_operations squashfs_export_super_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+ .read_inode = vfs_read_inode
-+};
-+
-+static struct export_operations squashfs_export_ops = {
-+ .get_parent = squashfs_get_parent
-+};
-+
-+SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN const struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+static const 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, int srclength)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct buffer_head **bh;
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k = 0;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ bh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) *
-+ sizeof(struct buffer_head *), GFP_KERNEL);
-+ if (bh == NULL)
-+ goto read_failure;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index,
-+ compressed ? "" : "un", (unsigned int) c_byte, srclength);
-+
-+ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used)
-+ goto read_failure;
-+
-+ bh[0] = sb_getblk(s, cur_index);
-+ if (bh[0] == NULL)
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ bh[b] = sb_getblk(s, ++cur_index);
-+ if (bh[b] == NULL)
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (index < 0 || (index + 2) > sblk->bytes_used)
-+ goto read_failure;
-+
-+ bh[0] = get_block_length(s, (int *)&cur_index, (int *)&offset,
-+ (int *)&c_byte);
-+ if (bh[0] == NULL)
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used)
-+ goto read_failure;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ bh[b] = sb_getblk(s, ++cur_index);
-+ if (bh[b] == NULL)
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed) {
-+ int zlib_err = Z_STREAM_END;
-+ int rest, start;
-+ enum {Src, Dst};
-+ struct sized_buf sbuf[2];
-+ struct sqlzma *percpu;
-+
-+ /*
-+ * uncompress block
-+ */
-+
-+ for (k = 0; k < b; k++) {
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ }
-+
-+ avail_bytes = 0;
-+ for (k = 0; !avail_bytes && k < b; k++) {
-+ avail_bytes = msblk->devblksize - offset;
-+ if (c_byte < avail_bytes)
-+ avail_bytes = c_byte;
-+ if (avail_bytes)
-+ break;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+ bytes = 0;
-+ if (!avail_bytes)
-+ goto block_release; // nothing to be process
-+
-+ start = k;
-+ /* it disables preemption */
-+ percpu = get_cpu_var(sqlzma);
-+#ifdef KeepPreemptive
-+ put_cpu_var(sqlzma);
-+ mutex_lock(&percpu->mtx);
-+#endif
-+
-+ for (; k < b; k++) {
-+ memcpy(percpu->read_data + bytes, bh[k]->b_data + offset,
-+ avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ avail_bytes = msblk->devblksize - offset;
-+ rest = c_byte - bytes;
-+ if (rest < avail_bytes)
-+ avail_bytes = rest;
-+ }
-+
-+ sbuf[Src].buf = percpu->read_data;
-+ sbuf[Src].sz = bytes;
-+ sbuf[Dst].buf = buffer;
-+ sbuf[Dst].sz = srclength;
-+ dpri_un(&percpu->un);
-+ dpri("src %d %p, dst %d %p\n", sbuf[Src].sz, sbuf[Src].buf,
-+ sbuf[Dst].sz, sbuf[Dst].buf);
-+ zlib_err = sqlzma_un(&percpu->un, sbuf + Src, sbuf + Dst);
-+ bytes = percpu->un.un_reslen;
-+
-+#ifdef KeepPreemptive
-+ mutex_unlock(&percpu->mtx);
-+#else
-+ put_cpu_var(sqlzma);
-+#endif
-+ if (unlikely(zlib_err)) {
-+ dpri("zlib_err %d\n", zlib_err);
-+ goto release_mutex;
-+ }
-+ } else {
-+ int i;
-+
-+ for(i = 0; i < b; i++) {
-+ wait_on_buffer(bh[i]);
-+ if (!buffer_uptodate(bh[i]))
-+ goto block_release;
-+ }
-+
-+ for (bytes = 0; k < b; k++) {
-+ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset);
-+
-+ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ? 3 : 2));
-+
-+ kfree(bh);
-+ return bytes;
-+
-+release_mutex:
-+ //mutex_unlock(&msblk->read_data_mutex);
-+
-+block_release:
-+ for (; k < b; k++)
-+ brelse(bh[k]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ kfree(bh);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *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;
-+
-+ mutex_lock(&msblk->block_cache_mutex);
-+
-+ if (i == squashfs_cached_blks) {
-+ /* read inode header block */
-+ if (msblk->unused_cache_blks == 0) {
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ wait_event(msblk->waitq, msblk->unused_cache_blks);
-+ continue;
-+ }
-+
-+ i = msblk->next_cache;
-+ for (n = 0; n < squashfs_cached_blks; n++) {
-+ if (msblk->block_cache[i].block != SQUASHFS_USED_BLK)
-+ break;
-+ i = (i + 1) % squashfs_cached_blks;
-+ }
-+
-+ msblk->next_cache = (i + 1) % squashfs_cached_blks;
-+
-+ if (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) {
-+ msblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE);
-+ if (msblk->block_cache[i].data == NULL) {
-+ ERROR("Failed to allocate cache block\n");
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ msblk->unused_cache_blks --;
-+ mutex_unlock(&msblk->block_cache_mutex);
-+
-+ msblk->block_cache[i].length = squashfs_read_data(s,
-+ msblk->block_cache[i].data, block, 0, &next_index,
-+ SQUASHFS_METADATA_SIZE);
-+
-+ if (msblk->block_cache[i].length == 0) {
-+ ERROR("Unable to read cache block [%llx:%x]\n", block, offset);
-+ mutex_lock(&msblk->block_cache_mutex);
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->unused_cache_blks ++;
-+ smp_mb();
-+ vfree(msblk->block_cache[i].data);
-+ wake_up(&msblk->waitq);
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+
-+ mutex_lock(&msblk->block_cache_mutex);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ msblk->unused_cache_blks ++;
-+ smp_mb();
-+ wake_up(&msblk->waitq);
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ bytes = msblk->block_cache[i].length - offset;
-+
-+ if (bytes < 1) {
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto out;
-+ } else if (bytes >= 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;
-+ }
-+ mutex_unlock(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data + offset, bytes);
-+ buffer = (char *) buffer + bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ mutex_unlock(&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, &sfragment_entry, start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ (unsigned int *)&offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ (unsigned int *)&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)
-+{
-+ mutex_lock(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ if (fragment->locked == 0) {
-+ msblk->unused_frag_blks ++;
-+ smp_mb();
-+ wake_up(&msblk->fragment_wait_queue);
-+ }
-+ mutex_unlock(&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;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ while (1) {
-+ mutex_lock(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ if (msblk->unused_frag_blks == 0) {
-+ mutex_unlock(&msblk->fragment_mutex);
-+ wait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks);
-+ continue;
-+ }
-+
-+ i = msblk->next_fragment;
-+ for (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) {
-+ if (msblk->fragment[i].locked == 0)
-+ break;
-+ i = (i + 1) % SQUASHFS_CACHED_FRAGMENTS;
-+ }
-+
-+ msblk->next_fragment = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+
-+ if (msblk->fragment[i].data == NULL) {
-+ msblk->fragment[i].data = vmalloc(sblk->block_size);
-+ if (msblk->fragment[i].data == NULL) {
-+ ERROR("Failed to allocate fragment cache block\n");
-+ mutex_unlock(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->unused_frag_blks --;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ mutex_unlock(&msblk->fragment_mutex);
-+
-+ msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data, start_block, length, NULL,
-+ sblk->block_size);
-+
-+ if (msblk->fragment[i].length == 0) {
-+ ERROR("Unable to read fragment cache block [%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ msblk->unused_frag_blks ++;
-+ smp_mb();
-+ wake_up(&msblk->fragment_wait_queue);
-+ goto out;
-+ }
-+
-+ mutex_lock(&msblk->fragment_mutex);
-+ 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);
-+ mutex_unlock(&msblk->fragment_mutex);
-+ break;
-+ }
-+
-+ if (msblk->fragment[i].locked == 0)
-+ msblk->unused_frag_blks --;
-+ msblk->fragment[i].locked++;
-+ mutex_unlock(&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 void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ 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];
-+}
-+
-+
-+static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)];
-+ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1);
-+ squashfs_inode_t inode;
-+
-+ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino);
-+
-+ if (msblk->swap) {
-+ squashfs_inode_t sinode;
-+
-+ if (!squashfs_get_cached_block(s, &sinode, start, offset,
-+ sizeof(sinode), &start, (unsigned int *)&offset))
-+ goto out;
-+ SQUASHFS_SWAP_INODE_T((&inode), &sinode);
-+ } else if (!squashfs_get_cached_block(s, &inode, start, offset,
-+ sizeof(inode), &start, (unsigned int *)&offset))
-+ goto out;
-+
-+ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode);
-+
-+ return inode;
-+
-+out:
-+ return SQUASHFS_INVALID_BLK;
-+}
-+
-+
-+static void vfs_read_inode(struct inode *i)
-+{
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino);
-+
-+ TRACE("Entered vfs_read_inode\n");
-+
-+ if(inode != SQUASHFS_INVALID_BLK)
-+ (msblk->read_inode)(i, inode);
-+}
-+
-+
-+static struct dentry *squashfs_get_parent(struct dentry *child)
-+{
-+ struct inode *i = child->d_inode;
-+ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
-+ struct dentry *rv;
-+
-+ TRACE("Entered squashfs_get_parent\n");
-+
-+ if(parent == NULL) {
-+ rv = ERR_PTR(-EACCES);
-+ goto out;
-+ }
-+
-+ rv = d_alloc_anon(parent);
-+ if(rv == NULL)
-+ rv = ERR_PTR(-ENOMEM);
-+
-+out:
-+ return rv;
-+}
-+
-+
-+SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s,
-+ squashfs_inode_t inode, unsigned int inode_number)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = iget_locked(s, inode_number);
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if(i && (i->i_state & I_NEW)) {
-+ (msblk->read_inode)(i, inode);
-+ unlock_new_inode(i);
-+ }
-+
-+ return i;
-+}
-+
-+
-+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode)
-+{
-+ struct super_block *s = i->i_sb;
-+ 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_read_inode\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, 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, inodeb, block, offset,
-+ sizeof(*inodeb), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ squashfs_new_inode(msblk, i, inodeb);
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG)
-+ if(!get_fragment_location(s, inodep->fragment, &frag_blk,
-+ &frag_size))
-+ goto failed_read;
-+
-+ 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;
-+ i->i_data.a_ops = &squashfs_aops;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG)
-+ if (!get_fragment_location(s, inodep->fragment, &frag_blk,
-+ &frag_size))
-+ goto failed_read;
-+
-+ 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;
-+ i->i_data.a_ops = &squashfs_aops;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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, 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, inodep, block, offset,
-+ sizeof(*inodep), &next_block, &next_offset))
-+ goto failed_read;
-+
-+ 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;
-+ }
-+
-+ return 1;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ make_bad_inode(i);
-+ return 0;
-+}
-+
-+
-+static int read_inode_lookup_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes);
-+
-+ TRACE("In read_inode_lookup_table, length %d\n", length);
-+
-+ /* Allocate inode lookup table */
-+ msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL);
-+ if (msblk->inode_lookup_table == NULL) {
-+ ERROR("Failed to allocate inode lookup table\n");
-+ return 0;
-+ }
-+
-+ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table,
-+ sblk->lookup_table_start, length |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {
-+ ERROR("unable to read inode lookup table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long block;
-+
-+ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) {
-+ /* XXX */
-+ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block),
-+ &msblk->inode_lookup_table[i], 1);
-+ msblk->inode_lookup_table[i] = block;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+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;
-+ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments);
-+
-+ if(length == 0)
-+ return 1;
-+
-+ /* Allocate fragment index table */
-+ msblk->fragment_index = kmalloc(length, GFP_KERNEL);
-+ if (msblk->fragment_index == NULL) {
-+ ERROR("Failed to allocate fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (!squashfs_read_data(s, (char *) msblk->fragment_index,
-+ sblk->fragment_table_start, length |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {
-+ 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++) {
-+ /* XXX */
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int readahead_metadata(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int i;
-+
-+ squashfs_cached_blks = SQUASHFS_CACHED_BLKS;
-+
-+ /* Init inode_table block pointer array */
-+ msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ squashfs_cached_blks, GFP_KERNEL);
-+ if (msblk->block_cache == NULL) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed;
-+ }
-+
-+ for (i = 0; i < squashfs_cached_blks; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+ msblk->unused_cache_blks = squashfs_cached_blks;
-+
-+ return 1;
-+
-+failed:
-+ return 0;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->read_inode = squashfs_read_inode;
-+ 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, err;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_fill_superblock\n");
-+
-+ err = -ENOMEM;
-+ s->s_fs_info = kzalloc(sizeof(struct squashfs_sb_info), GFP_KERNEL);
-+ if (s->s_fs_info == NULL) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ msblk = s->s_fs_info;
-+
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ //mutex_init(&msblk->read_data_mutex);
-+ mutex_init(&msblk->read_page_mutex);
-+ mutex_init(&msblk->block_cache_mutex);
-+ mutex_init(&msblk->fragment_mutex);
-+ mutex_init(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ /* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not
-+ * beyond filesystem end. As we're using squashfs_read_data to read sblk here,
-+ * first set sblk->bytes_used to a useful value */
-+ err = -EINVAL;
-+ sblk->bytes_used = sizeof(struct squashfs_super_block);
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ s->s_magic = sblk->s_magic;
-+ msblk->swap = 0;
-+ dpri("magic 0x%x\n", sblk->s_magic);
-+ switch (sblk->s_magic) {
-+ struct squashfs_super_block ssblk;
-+
-+ case SQUASHFS_MAGIC_SWAP:
-+ /*FALLTHROUGH*/
-+ case SQUASHFS_MAGIC_LZMA_SWAP:
-+ 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;
-+ /*FALLTHROUGH*/
-+ case SQUASHFS_MAGIC:
-+ case SQUASHFS_MAGIC_LZMA:
-+ break;
-+ default:
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+
-+ {
-+ struct sqlzma *p;
-+ dpri("block_size %d\n", sblk->block_size);
-+ BUG_ON(sblk->block_size > sizeof(p->read_data));
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ /* Check the filesystem does not extend beyond the end of the
-+ block device */
-+ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode))
-+ goto failed_mount;
-+
-+ /* Check the root inode for sanity */
-+ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE)
-+ 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 %spresent 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_maxbytes = MAX_LFS_FILESIZE;
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_super_ops;
-+
-+ if (readahead_metadata(s) == 0)
-+ goto failed_mount;
-+
-+ /* Allocate read_page block */
-+ err = -ENOMEM;
-+ msblk->read_page = vmalloc(sblk->block_size);
-+ if (msblk->read_page == NULL) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL);
-+ if (msblk->uid == NULL) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ dpri("swap %d\n", msblk->swap);
-+ err = -EINVAL;
-+ if (msblk->swap) {
-+ unsigned int *suid;
-+
-+ err = -ENOMEM;
-+ suid = kmalloc(sizeof(*suid) * (sblk->no_uids + sblk->no_guids),
-+ GFP_KERNEL);
-+ if (unlikely(!suid))
-+ goto failed_mount;
-+
-+ err = -EINVAL;
-+ if (!squashfs_read_data(s, (char *)suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {
-+ ERROR("unable to read uid/gid table\n");
-+ kfree(suid);
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ kfree(suid);
-+ } 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, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ err = -ENOMEM;
-+ msblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL);
-+ if (msblk->fragment == NULL) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ }
-+
-+ msblk->next_fragment = 0;
-+ msblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS;
-+
-+ /* Allocate and read fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK)
-+ goto allocate_root;
-+
-+ /* Allocate and read inode lookup table */
-+ if (read_inode_lookup_table(s) == 0)
-+ goto failed_mount;
-+
-+ s->s_op = &squashfs_export_super_ops;
-+ s->s_export_op = &squashfs_export_ops;
-+
-+allocate_root:
-+ dpri("alloate_root\n");
-+ root = new_inode(s);
-+ if ((msblk->read_inode)(root, sblk->root_inode) == 0) {
-+ iput(root);
-+ goto failed_mount;
-+ }
-+ insert_inode_hash(root);
-+
-+ s->s_root = d_alloc_root(root);
-+ if (s->s_root == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_fill_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->inode_lookup_table);
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ vfree(msblk->read_page);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ failure:
-+ return err;
-+}
-+
-+
-+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 = sblk->s_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, avail_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) {
-+ bytes = squashfs_get_cached_block(inode->i_sb, NULL, block,
-+ offset, PAGE_CACHE_SIZE, &block,
-+ (unsigned int *)&offset);
-+ if (bytes == 0) {
-+ 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;
-+ }
-+
-+ avail_bytes = min_t(int, i_size_read(inode) - length, PAGE_CACHE_SIZE);
-+
-+ bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, offset,
-+ avail_bytes, &block, (unsigned int *)&offset);
-+ if (bytes == 0)
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static 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;
-+
-+ mutex_lock(&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:
-+ mutex_unlock(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+static 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;
-+
-+ mutex_lock(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if (msblk->meta_index == NULL) {
-+ msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL);
-+ if (msblk->meta_index == NULL) {
-+ 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:
-+ mutex_unlock(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+static void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+ smp_mb();
-+}
-+
-+
-+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;
-+
-+ sblock_list = kmalloc(blocks << 2, GFP_KERNEL);
-+ if (unlikely(!sblock_list))
-+ goto failure;
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, (unsigned int *)offset)) {
-+ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset);
-+ kfree(sblock_list);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ kfree(sblock_list);
-+ } else {
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, (unsigned int *)offset)) {
-+ ERROR("Fail reading 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) {
-+ meta = empty_meta_index(inode, offset + 1, skip);
-+ if (meta == NULL)
-+ goto all_done;
-+ } else {
-+ if(meta->entries == 0)
-+ goto failed;
-+ /* XXX */
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ /* XXX */
-+ 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 = NULL;
-+ long long block;
-+ unsigned int bsize, i;
-+ int bytes;
-+ 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;
-+ int file_end = i_size_read(inode) >> sblk->block_log;
-+ int sparse = 0;
-+
-+ 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 out;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < file_end) {
-+ block_list = kmalloc(SIZE, GFP_KERNEL);
-+ if (block_list == NULL) {
-+ ERROR("Failed to allocate block_list\n");
-+ goto error_out;
-+ }
-+
-+ block = (msblk->read_blocklist)(inode, index, 1, block_list, NULL, &bsize);
-+ if (block == 0)
-+ goto error_out;
-+
-+ if (bsize == 0) { /* hole */
-+ bytes = index == file_end ?
-+ (i_size_read(inode) & (sblk->block_size - 1)) : sblk->block_size;
-+ sparse = 1;
-+ } else {
-+ mutex_lock(&msblk->read_page_mutex);
-+
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL, sblk->block_size);
-+
-+ if (bytes == 0) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block, bsize);
-+ mutex_unlock(&msblk->read_page_mutex);
-+ goto error_out;
-+ }
-+ }
-+ } else {
-+ fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)-> u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size);
-+
-+ if (fragment == 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 error_out;
-+ }
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ data_ptr = fragment->data + SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ }
-+
-+ for (i = start_index; i <= end_index && bytes > 0; i++,
-+ bytes -= PAGE_CACHE_SIZE, data_ptr += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int avail = sparse ? 0 : min_t(unsigned int, bytes, PAGE_CACHE_SIZE);
-+
-+ TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail);
-+
-+ push_page = (i == page->index) ? page :
-+ grab_cache_page_nowait(page->mapping, i);
-+
-+ if (!push_page)
-+ continue;
-+
-+ if (PageUptodate(push_page))
-+ goto skip_page;
-+
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+ memcpy(pageaddr, data_ptr, avail);
-+ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+skip_page:
-+ unlock_page(push_page);
-+ if(i != page->index)
-+ page_cache_release(push_page);
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < file_end) {
-+ if (!sparse)
-+ mutex_unlock(&msblk->read_page_mutex);
-+ kfree(block_list);
-+ } else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+error_out:
-+ SetPageError(page);
-+out:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr, 0, PAGE_CACHE_SIZE);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ if (!PageError(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, &sindex, index_start, index_offset,
-+ sizeof(sindex), &index_start, &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, &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);
-+
-+ str = kmalloc(sizeof(struct squashfs_dir_index) +
-+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL);
-+ if (str == NULL) {
-+ 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, &sindex, index_start, index_offset,
-+ sizeof(sindex), &index_start, &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, 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);
-+
-+ dire = kmalloc(sizeof(struct squashfs_dir_entry) +
-+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL);
-+ if (dire == NULL) {
-+ 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,
-+ (unsigned int *)&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, &sdirh, next_block,
-+ next_offset, sizeof(sdirh), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,
-+ next_offset, sizeof(dirh), &next_block,
-+ (unsigned int *)&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, &sdire, next_block,
-+ next_offset, sizeof(sdire), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, dire, next_block,
-+ next_offset, sizeof(*dire), &next_block,
-+ (unsigned int *)&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,
-+ (unsigned int *)&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);
-+ kfree(dire);
-+ 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);
-+
-+ dire = kmalloc(sizeof(struct squashfs_dir_entry) +
-+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL);
-+ if (dire == NULL) {
-+ ERROR("Failed to allocate squashfs_dir_entry\n");
-+ goto exit_lookup;
-+ }
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_lookup;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, (unsigned int *)&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, &sdirh, next_block,
-+ next_offset, sizeof(sdirh), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,
-+ next_offset, sizeof(dirh), &next_block,
-+ (unsigned int *)&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, &sdire, next_block,
-+ next_offset, sizeof(sdire), &next_block,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, dire, next_block,
-+ next_offset, sizeof(*dire), &next_block,
-+ (unsigned int *)&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,
-+ (unsigned int *)&next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_lookup;
-+
-+ 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 = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number);
-+
-+ goto exit_lookup;
-+ }
-+ }
-+ }
-+
-+exit_lookup:
-+ kfree(dire);
-+ if (inode)
-+ return d_splice_alias(inode, dentry);
-+ 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_lookup;
-+}
-+
-+
-+static int squashfs_remount(struct super_block *s, int *flags, char *data)
-+{
-+ *flags |= MS_RDONLY;
-+ return 0;
-+}
-+
-+
-+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)
-+ vfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ vfree(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ vfree(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 void free_sqlzma(void)
-+{
-+ int cpu;
-+ struct sqlzma *p;
-+
-+ for_each_online_cpu(cpu) {
-+ p = per_cpu(sqlzma, cpu);
-+ if (p) {
-+#ifdef KeepPreemptive
-+ mutex_destroy(&p->mtx);
-+#endif
-+ sqlzma_fin(&p->un);
-+ kfree(p);
-+ }
-+ }
-+}
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ struct sqlzma *p;
-+ int cpu;
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ for_each_online_cpu(cpu) {
-+ dpri("%d: %p\n", cpu, per_cpu(sqlzma, cpu));
-+ err = -ENOMEM;
-+ p = kmalloc(sizeof(struct sqlzma), GFP_KERNEL);
-+ if (p) {
-+#ifdef KeepPreemptive
-+ mutex_init(&p->mtx);
-+#endif
-+ err = sqlzma_init(&p->un, 1, 0);
-+ if (unlikely(err)) {
-+ ERROR("Failed to intialize uncompress workspace\n");
-+ break;
-+ }
-+ per_cpu(sqlzma, cpu) = p;
-+ err = 0;
-+ } else
-+ break;
-+ }
-+ if (unlikely(err)) {
-+ free_sqlzma();
-+ goto out;
-+ }
-+
-+ printk(KERN_INFO "squashfs: version 3.3 (2007/10/31) "
-+ "Phillip Lougher\n"
-+ "squashfs: LZMA suppport for slax.org by jro\n");
-+
-+ err = register_filesystem(&squashfs_fs_type);
-+ if (err) {
-+ free_sqlzma();
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ unregister_filesystem(&squashfs_fs_type);
-+ free_sqlzma();
-+ destroy_inodecache();
-+}
-+
-+
-+static struct kmem_cache * 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);
-+ return ei ? &ei->vfs_inode : NULL;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(struct kmem_cache *cachep, void *foo)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ 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);
-+ 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 3.2-r2-CVS, a compressed read-only filesystem, and LZMA suppport for slax.org");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.demon.co.uk>, and LZMA suppport for slax.org by jro");
-+MODULE_LICENSE("GPL");
-diff -urN linux-2.6.23/fs/squashfs/module.c linux-2.6.23.sqlzma-ng/fs/squashfs/module.c
---- linux-2.6.23/fs/squashfs/module.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/module.c 2007-11-13 19:51:33.000000000 -0500
-@@ -0,0 +1,36 @@
-+
-+/*
-+ * Copyright (C) 2006-2007 Junjiro Okajima
-+ * Copyright (C) 2006-2007 Tomas Matejicek, slax.org
-+ *
-+ * LICENSE follows the described one in lzma.txt.
-+ */
-+
-+/* $Id: module.c,v 1.1 2007/11/05 05:43:36 jro Exp $ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+
-+#include "LzmaDecode.c"
-+
-+EXPORT_SYMBOL(LzmaDecodeProperties);
-+EXPORT_SYMBOL(LzmaDecode);
-+
-+#if 0
-+static int __init unlzma_init(void)
-+{
-+ return 0;
-+}
-+
-+static void __exit unlzma_exit(void)
-+{
-+}
-+
-+module_init(unlzma_init);
-+module_exit(unlzma_exit);
-+#endif
-+
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION("$Id: module.c,v 1.1 2007/11/05 05:43:36 jro Exp $");
-+MODULE_DESCRIPTION("LZMA uncompress. "
-+ "A tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");
-diff -urN linux-2.6.23/fs/squashfs/sqlzma.h linux-2.6.23.sqlzma-ng/fs/squashfs/sqlzma.h
---- linux-2.6.23/fs/squashfs/sqlzma.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/sqlzma.h 2007-11-13 19:09:21.000000000 -0500
-@@ -0,0 +1,83 @@
-+/*
-+ * Copyright (C) 2006 Junjiro Okajima
-+ * Copyright (C) 2006 Tomas Matejicek, slax.org
-+ *
-+ * LICENSE follows the described one in lzma.
-+ */
-+
-+/* $Id: sqlzma.h,v 1.15 2007/11/09 14:42:12 jro Exp $ */
-+
-+#ifndef __sqlzma_h__
-+#define __sqlzma_h__
-+
-+#ifndef __KERNEL__
-+#include <stdlib.h>
-+#include <string.h>
-+#include <zlib.h>
-+#ifdef _REENTRANT
-+#include <pthread.h>
-+#endif
-+#else
-+#include <linux/zlib.h>
-+#endif
-+#define _7ZIP_BYTE_DEFINED
-+
-+/*
-+ * detect the compression method automatically by the first byte of compressed
-+ * data.
-+ * according to rfc1950, the first byte of zlib compression must be 0x?8.
-+ */
-+#define is_lzma(c) (c == 0x5d)
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef __KERNEL__
-+/* for mksquashfs only */
-+struct sqlzma_opts {
-+ unsigned int try_lzma:1;
-+ unsigned int dicsize;
-+};
-+int sqlzma_cm(struct sqlzma_opts *opts, z_stream *stream, Bytef *next_in, uInt
-+ avail_in, Bytef *next_out, uInt avail_out);
-+#endif
-+
-+/* ---------------------------------------------------------------------- */
-+/*
-+ * Three patterns for sqlzma uncompression. very dirty code.
-+ * - kernel space (squashfs kernel module)
-+ * - user space with pthread (mksquashfs)
-+ * - user space without pthread (unsquashfs)
-+ */
-+
-+struct sized_buf {
-+ unsigned int sz;
-+ unsigned char *buf;
-+};
-+
-+enum {SQUN_PROB, SQUN_RESULT, SQUN_LAST};
-+struct sqlzma_un {
-+ int un_lzma;
-+ struct sized_buf un_a[SQUN_LAST];
-+ unsigned char un_prob[31960]; /* unlzma 64KB - 1MB */
-+ z_stream un_stream;
-+#define un_cmbuf un_stream.next_in
-+#define un_cmlen un_stream.avail_in
-+#define un_resbuf un_stream.next_out
-+#define un_resroom un_stream.avail_out
-+#define un_reslen un_stream.total_out
-+};
-+
-+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz);
-+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src, struct sized_buf *dst);
-+void sqlzma_fin(struct sqlzma_un *un);
-+
-+/* ---------------------------------------------------------------------- */
-+
-+#ifdef __cplusplus
-+};
-+#endif
-+#endif
-diff -urN linux-2.6.23/fs/squashfs/squashfs.h linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs.h
---- linux-2.6.23/fs/squashfs/squashfs.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs.h 2007-11-13 18:58:41.000000000 -0500
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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, int srclength);
-+extern int squashfs_get_cached_block(struct super_block *s, void *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 inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
-+extern const struct address_space_operations squashfs_symlink_aops;
-+extern const struct address_space_operations squashfs_aops;
-+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.23/fs/squashfs/squashfs2_0.c linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs2_0.c
---- linux-2.6.23/fs/squashfs/squashfs2_0.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/squashfs2_0.c 2007-11-13 18:58:41.000000000 -0500
-@@ -0,0 +1,740 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/zlib.h>
-+#include <linux/fs.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.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, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) {
-+ 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 void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ 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];
-+}
-+
-+
-+static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode)
-+{
-+ struct super_block *s = i->i_sb;
-+ 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_read_inode_2\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;
-+
-+ squashfs_new_inode(msblk, i, inodeb, ino);
-+
-+ 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 = 0;
-+
-+ 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;
-+
-+ 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;
-+ i->i_data.a_ops = &squashfs_aops;
-+
-+ 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;
-+
-+ 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;
-+
-+ 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;
-+
-+ 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;
-+
-+ 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: {
-+
-+ 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;
-+ }
-+
-+ return 1;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ 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_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);
-+ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(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 = squashfs_iget(i->i_sb, ino, inode_number);
-+
-+ 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->read_inode = squashfs_read_inode_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.23/fs/squashfs/uncomp.c linux-2.6.23.sqlzma-ng/fs/squashfs/uncomp.c
---- linux-2.6.23/fs/squashfs/uncomp.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/fs/squashfs/uncomp.c 2007-11-13 19:40:29.000000000 -0500
-@@ -0,0 +1,221 @@
-+/*
-+ * Copyright (C) 2006, 2007 Junjiro Okajima
-+ * Copyright (C) 2006, 2007 Tomas Matejicek, slax.org
-+ *
-+ * LICENSE follows the described one in lzma.txt.
-+ */
-+
-+/* $Id: uncomp.c,v 1.1 2007/11/05 05:43:36 jro Exp $ */
-+
-+/* extract some parts from lzma443/C/7zip/Compress/LZMA_C/LzmaTest.c */
-+
-+#ifndef __KERNEL__
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <assert.h>
-+#include <pthread.h>
-+#define unlikely(x) __builtin_expect(!!(x), 0)
-+#define BUG_ON(x) assert(!(x))
-+/* sqlzma buffers are always larger than a page. true? */
-+#define kmalloc(sz,gfp) malloc(sz)
-+#define kfree(p) free(p)
-+#define zlib_inflate(s, f) inflate(s, f)
-+#define zlib_inflateInit(s) inflateInit(s)
-+#define zlib_inflateReset(s) inflateReset(s)
-+#define zlib_inflateEnd(s) inflateEnd(s)
-+#else
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/vmalloc.h>
-+#ifndef WARN_ON_ONCE
-+#define WARN_ON_ONCE(b) WARN_ON(b)
-+#endif
-+#endif /* __KERNEL__ */
-+
-+#include "sqlzma.h"
-+#include "LzmaDecode.h"
-+
-+static int LzmaUncompress(struct sqlzma_un *un)
-+{
-+ int err, i, ret;
-+ SizeT outSize, inProcessed, outProcessed, srclen;
-+ /* it's about 24-80 bytes structure, if int is 32-bit */
-+ CLzmaDecoderState state;
-+ unsigned char *dst, *src, a[8];
-+ struct sized_buf *sbuf;
-+
-+ /* Decode LZMA properties and allocate memory */
-+ err = -EINVAL;
-+ src = un->un_cmbuf;
-+ ret = LzmaDecodeProperties(&state.Properties, src, LZMA_PROPERTIES_SIZE);
-+ src += LZMA_PROPERTIES_SIZE;
-+ if (unlikely(ret != LZMA_RESULT_OK))
-+ goto out;
-+ i = LzmaGetNumProbs(&state.Properties);
-+ if (unlikely(i <= 0))
-+ i = 1;
-+ i *= sizeof(CProb);
-+ sbuf = un->un_a + SQUN_PROB;
-+ if (unlikely(sbuf->sz < i)) {
-+ if (sbuf->buf && sbuf->buf != un->un_prob)
-+ kfree(sbuf->buf);
-+#ifdef __KERNEL__
-+ printk("%s:%d: %d --> %d\n", __func__, __LINE__, sbuf->sz, i);
-+#else
-+ printf("%d --> %d\n", sbuf->sz, i);
-+#endif
-+ err = -ENOMEM;
-+ sbuf->sz = 0;
-+ sbuf->buf = kmalloc(i, GFP_ATOMIC);
-+ if (unlikely(!sbuf->buf))
-+ goto out;
-+ sbuf->sz = i;
-+ }
-+ state.Probs = (void*)sbuf->buf;
-+
-+ /* Read uncompressed size */
-+ memcpy(a, src, sizeof(a));
-+ src += sizeof(a);
-+ outSize = a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24);
-+
-+ err = -EINVAL;
-+ dst = un->un_resbuf;
-+ if (unlikely(!dst || outSize > un->un_reslen))
-+ goto out;
-+ un->un_reslen = outSize;
-+ srclen = un->un_cmlen - (src - un->un_cmbuf);
-+
-+ /* Decompress */
-+ err = LzmaDecode(&state, src, srclen, &inProcessed, dst, outSize,
-+ &outProcessed);
-+ if (err)
-+ err = -EINVAL;
-+
-+ out:
-+#ifndef __KERNEL__
-+ if (err)
-+ fprintf(stderr, "err %d\n", err);
-+#endif
-+ return err;
-+}
-+
-+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src,
-+ struct sized_buf *dst)
-+{
-+ int err, by_lzma = 0;
-+ if (un->un_lzma && is_lzma(*src->buf)) {
-+ by_lzma = 1;
-+ un->un_cmbuf = src->buf;
-+ un->un_cmlen = src->sz;
-+ un->un_resbuf = dst->buf;
-+ un->un_reslen = dst->sz;
-+
-+ /* this library is thread-safe */
-+ err = LzmaUncompress(un);
-+ goto out;
-+ }
-+
-+ err = zlib_inflateReset(&un->un_stream);
-+ if (unlikely(err != Z_OK))
-+ goto out;
-+ un->un_stream.next_in = src->buf;
-+ un->un_stream.avail_in = src->sz;
-+ un->un_stream.next_out = dst->buf;
-+ un->un_stream.avail_out = dst->sz;
-+ err = zlib_inflate(&un->un_stream, Z_FINISH);
-+ if (err == Z_STREAM_END)
-+ err = 0;
-+
-+ out:
-+ if (err) {
-+#ifdef __KERNEL__
-+ WARN_ON_ONCE(1);
-+#else
-+ char a[64] = "ZLIB ";
-+ if (by_lzma) {
-+ strcpy(a, "LZMA ");
-+#ifdef _REENTRANT
-+ strerror_r(err, a + 5, sizeof(a) - 5);
-+#else
-+ strncat(a, strerror(err), sizeof(a) - 5);
-+#endif
-+ } else
-+ strncat(a, zError(err), sizeof(a) - 5);
-+ fprintf(stderr, "%s: %.*s\n", __func__, sizeof(a), a);
-+#endif
-+ }
-+ return err;
-+}
-+
-+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz)
-+{
-+ int err;
-+
-+ err = -ENOMEM;
-+ un->un_lzma = do_lzma;
-+ memset(un->un_a, 0, sizeof(un->un_a));
-+ un->un_a[SQUN_PROB].buf = un->un_prob;
-+ un->un_a[SQUN_PROB].sz = sizeof(un->un_prob);
-+ if (res_sz) {
-+ un->un_a[SQUN_RESULT].buf = kmalloc(res_sz, GFP_KERNEL);
-+ if (unlikely(!un->un_a[SQUN_RESULT].buf))
-+ return err;
-+ un->un_a[SQUN_RESULT].sz = res_sz;
-+ }
-+
-+ un->un_stream.next_in = NULL;
-+ un->un_stream.avail_in = 0;
-+#ifdef __KERNEL__
-+ un->un_stream.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
-+ if (unlikely(!un->un_stream.workspace))
-+ return err;
-+#else
-+ un->un_stream.opaque = NULL;
-+ un->un_stream.zalloc = Z_NULL;
-+ un->un_stream.zfree = Z_NULL;
-+#endif
-+ err = zlib_inflateInit(&un->un_stream);
-+ if (unlikely(err == Z_MEM_ERROR))
-+ return -ENOMEM;
-+ BUG_ON(err);
-+ return err;
-+}
-+
-+void sqlzma_fin(struct sqlzma_un *un)
-+{
-+ int i;
-+ for (i = 0; i < SQUN_LAST; i++)
-+ if (un->un_a[i].buf && un->un_a[i].buf != un->un_prob)
-+ kfree(un->un_a[i].buf);
-+ BUG_ON(zlib_inflateEnd(&un->un_stream) != Z_OK);
-+}
-+
-+#ifdef __KERNEL__
-+EXPORT_SYMBOL(sqlzma_un);
-+EXPORT_SYMBOL(sqlzma_init);
-+EXPORT_SYMBOL(sqlzma_fin);
-+
-+#if 0
-+static int __init sqlzma_init(void)
-+{
-+ return 0;
-+}
-+
-+static void __exit sqlzma_exit(void)
-+{
-+}
-+
-+module_init(sqlzma_init);
-+module_exit(sqlzma_exit);
-+#endif
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Junjiro Okajima <sfjro at users dot sf dot net>");
-+MODULE_VERSION("$Id: uncomp.c,v 1.1 2007/11/05 05:43:36 jro Exp $");
-+MODULE_DESCRIPTION("LZMA uncompress for squashfs. "
-+ "Some functions for squashfs to support LZMA and "
-+ "a tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");
-+#endif
-diff -urN linux-2.6.23/include/linux/squashfs_fs.h linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs.h
---- linux-2.6.23/include/linux/squashfs_fs.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs.h 2007-11-13 19:12:41.000000000 -0500
-@@ -0,0 +1,937 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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
-+
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 1
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_MAGIC_LZMA 0x71736873
-+#define SQUASHFS_MAGIC_LZMA_SWAP 0x73687371
-+#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 131072
-+#define SQUASHFS_FILE_LOG 17
-+
-+#define SQUASHFS_FILE_MAX_SIZE 1048576
-+
-+/* 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_EXPORT 7
-+
-+#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_EXPORTABLE(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_EXPORT)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking, exportable) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6) | (exportable << 7))
-+
-+/* 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)
-+
-+#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))
-+
-+/* inode lookup table defines */
-+#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t))
-+
-+#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(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 lookup_table_start;
-+} __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;
-+ unsigned 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 pending;
-+} __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)->lookup_table_start, 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_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1)
-+
-+#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)
-+#define SQUASHFS_SWAP_LOOKUP_BLOCKS(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));
-+
-+union squashfs_inode_header_1 {
-+ struct squashfs_base_inode_header_1 base;
-+ struct squashfs_dev_inode_header_1 dev;
-+ struct squashfs_symlink_inode_header_1 symlink;
-+ struct squashfs_reg_inode_header_1 reg;
-+ struct squashfs_dir_inode_header_1 dir;
-+ struct squashfs_ipc_inode_header_1 ipc;
-+};
-+
-+#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.23/include/linux/squashfs_fs_i.h linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_i.h
---- linux-2.6.23/include/linux/squashfs_fs_i.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_i.h 2007-11-13 18:58:41.000000000 -0500
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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.23/include/linux/squashfs_fs_sb.h linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_sb.h
---- linux-2.6.23/include/linux/squashfs_fs_sb.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.sqlzma-ng/include/linux/squashfs_fs_sb.h 2007-11-13 19:19:28.000000000 -0500
-@@ -0,0 +1,76 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip@lougher.demon.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,
-+ * 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;
-+ char *read_page;
-+ //struct mutex read_data_mutex;
-+ struct mutex read_page_mutex;
-+ struct mutex block_cache_mutex;
-+ struct mutex fragment_mutex;
-+ struct mutex meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ //z_stream stream;
-+ long long *inode_lookup_table;
-+ int unused_cache_blks;
-+ int unused_frag_blks;
-+ int (*read_inode)(struct inode *i, 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 --git a/packages/linux/linux-openmoko-devel/0002-squashfs-initrd.patch b/packages/linux/linux-openmoko-devel/0002-squashfs-initrd.patch
deleted file mode 100644
index cd2c678058..0000000000
--- a/packages/linux/linux-openmoko-devel/0002-squashfs-initrd.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-diff -urN linux-2.6.23/init/do_mounts_rd.c linux-2.6.23.sqlzma-ng/init/do_mounts_rd.c
---- linux-2.6.23/init/do_mounts_rd.c 2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.sqlzma-ng/init/do_mounts_rd.c 2007-11-13 18:58:41.000000000 -0500
-@@ -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,18 @@
- 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-openmoko-devel/0003-squashfs-force-O2.patch b/packages/linux/linux-openmoko-devel/0003-squashfs-force-O2.patch
deleted file mode 100644
index 550077b9fa..0000000000
--- a/packages/linux/linux-openmoko-devel/0003-squashfs-force-O2.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-The kernel patch from the squashfs-3.1r2 release did not compile on my
-armeb-linux-gcc 4.1.1 when optimizing for size (-Os). This works around
-that problem by using optimization flag -O2 instead for these two files.
-
-Signed-off-by: Leon Woestenberg <leonw@mailcan.com>
-
-Index: linux-2.6.19/fs/squashfs/Makefile
-===================================================================
---- linux-2.6.19.orig/fs/squashfs/Makefile
-+++ linux-2.6.19/fs/squashfs/Makefile
-@@ -5,3 +5,6 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += inode.o
- squashfs-y += squashfs2_0.o
-+
-+CFLAGS_squashfs2_0.o = "-O2"
-+CFLAGS_inode.o = "-O2"
diff --git a/packages/linux/linux-openmoko-devel/0004-squashfs-Kconfig.patch b/packages/linux/linux-openmoko-devel/0004-squashfs-Kconfig.patch
deleted file mode 100644
index f2b3db9942..0000000000
--- a/packages/linux/linux-openmoko-devel/0004-squashfs-Kconfig.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-diff -urN linux-2.6.23/fs/Kconfig linux-2.6.23.sqlzma-ng/fs/Kconfig
---- linux-2.6.23/fs/Kconfig 2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.sqlzma-ng/fs/Kconfig 2007-11-13 18:58:41.000000000 -0500
-@@ -1364,6 +1364,56 @@
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.3 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.3 (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 1 Mbytes (default
-+ block size 128K). SquashFS 3.3 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 option for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache size.
-+
-+ 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 VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-
diff --git a/packages/linux/linux-openmoko-devel/0005-squashfs-Makefile.patch b/packages/linux/linux-openmoko-devel/0005-squashfs-Makefile.patch
deleted file mode 100644
index b0ec4cebb8..0000000000
--- a/packages/linux/linux-openmoko-devel/0005-squashfs-Makefile.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN linux-2.6.24/fs/Makefile linux-2.6.24.sqlzma-ng/fs/Makefile
---- linux-2.6.24/fs/Makefile 2007-11-13 21:24:14.000000000 -0500
-+++ linux-2.6.24.sqlzma-ng/fs/Makefile 2007-11-13 21:19:15.000000000 -0500
-@@ -72,6 +72,7 @@
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-y += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-
diff --git a/packages/linux/linux-openmoko-devel/defconfig-oe.patch b/packages/linux/linux-openmoko-devel/defconfig-oe.patch
index 109e9ec83d..3f65387b78 100644
--- a/packages/linux/linux-openmoko-devel/defconfig-oe.patch
+++ b/packages/linux/linux-openmoko-devel/defconfig-oe.patch
@@ -10,28 +10,3 @@
#
# Userspace binary formats
-@@ -1634,9 +1631,10 @@
- #
- CONFIG_LEDS_TRIGGERS=y
- CONFIG_LEDS_TRIGGER_TIMER=y
--# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
- CONFIG_LEDS_TRIGGER_BACKLIGHT=y
- # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
-+CONFIG_LEDS_TRIGGER_NETDEV=y
- CONFIG_RTC_LIB=y
- CONFIG_RTC_CLASS=y
- CONFIG_RTC_HCTOSYS=y
-@@ -1822,7 +1820,11 @@
- # CONFIG_SYSV_FS is not set
- # CONFIG_UFS_FS is not set
- CONFIG_NETWORK_FILESYSTEMS=y
--# CONFIG_NFS_FS is not set
-+CONFIG_NFS_FS=m
-+CONFIG_NFS_V3=y
-+CONFIG_NFS_V3_ACL=y
-+# CONFIG_NFS_V4 is not set
-+CONFIG_ROOT_NFS=y
- CONFIG_NFSD=m
- CONFIG_NFSD_V2_ACL=y
- CONFIG_NFSD_V3=y
diff --git a/packages/linux/linux-openmoko-devel/openwrt-ledtrig-netdev.patch b/packages/linux/linux-openmoko-devel/openwrt-ledtrig-netdev.patch
deleted file mode 100644
index e87bccce61..0000000000
--- a/packages/linux/linux-openmoko-devel/openwrt-ledtrig-netdev.patch
+++ /dev/null
@@ -1,474 +0,0 @@
-Add a netdev LED trigger for all Blinkenlights lovers...
-Originally taken from https://dev.openwrt.org/ticket/2776
-Slightly updated for 2.6.24 by Mickey <mickey@openmoko.org>.
-
-Index: git/drivers/leds/ledtrig-netdev.c
-===================================================================
---- /dev/null
-+++ git/drivers/leds/ledtrig-netdev.c
-@@ -0,0 +1,438 @@
-+/*
-+ * LED Kernel Netdev Trigger
-+ *
-+ * Toggles the LED to reflect the link and traffic state of a named net device
-+ *
-+ * Copyright 2007 Oliver Jowett <oliver@opencloud.com>
-+ *
-+ * Derived from ledtrig-timer.c which is:
-+ * 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/module.h>
-+#include <linux/jiffies.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/netdevice.h>
-+#include <linux/timer.h>
-+#include <linux/ctype.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+/*
-+ * Configurable sysfs attributes:
-+ *
-+ * device_name - network device name to monitor
-+ *
-+ * interval - duration of LED blink, in milliseconds
-+ *
-+ * mode - either "none" (LED is off) or a space separated list of one or more of:
-+ * link: LED's normal state reflects whether the link is up (has carrier) or not
-+ * tx: LED blinks on transmitted data
-+ * rx: LED blinks on receive data
-+ *
-+ * Some suggestions:
-+ *
-+ * Simple link status LED:
-+ * $ echo netdev >someled/trigger
-+ * $ echo eth0 >someled/device_name
-+ * $ echo link >someled/mode
-+ *
-+ * Ethernet-style link/activity LED:
-+ * $ echo netdev >someled/trigger
-+ * $ echo eth0 >someled/device_name
-+ * $ echo "link tx rx" >someled/mode
-+ *
-+ * Modem-style tx/rx LEDs:
-+ * $ echo netdev >led1/trigger
-+ * $ echo ppp0 >led1/device_name
-+ * $ echo tx >led1/mode
-+ * $ echo netdev >led2/trigger
-+ * $ echo ppp0 >led2/device_name
-+ * $ echo rx >led2/mode
-+ *
-+ */
-+
-+#define MODE_LINK 1
-+#define MODE_TX 2
-+#define MODE_RX 4
-+
-+struct led_netdev_data {
-+ rwlock_t lock;
-+
-+ struct timer_list timer;
-+ struct notifier_block notifier;
-+
-+ struct led_classdev *led_cdev;
-+ struct net_device *net_dev;
-+
-+ char device_name[IFNAMSIZ];
-+ unsigned interval;
-+ unsigned mode;
-+ unsigned link_up;
-+ unsigned last_activity;
-+};
-+
-+static void set_baseline_state(struct led_netdev_data *trigger_data)
-+{
-+ if ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up)
-+ led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+ else
-+ led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+
-+ if ((trigger_data->mode & (MODE_TX | MODE_RX)) != 0 && trigger_data->link_up)
-+ mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+ else
-+ del_timer(&trigger_data->timer);
-+}
-+
-+static ssize_t led_device_name_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ read_lock(&trigger_data->lock);
-+ sprintf(buf, "%s\n", trigger_data->device_name);
-+ read_unlock(&trigger_data->lock);
-+
-+ return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_device_name_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ if (size < 0 || size >= IFNAMSIZ)
-+ return -EINVAL;
-+
-+ write_lock(&trigger_data->lock);
-+
-+ strcpy(trigger_data->device_name, buf);
-+ if (size > 0 && trigger_data->device_name[size-1] == '\n')
-+ trigger_data->device_name[size-1] = 0;
-+
-+ if (trigger_data->device_name[0] != 0) {
-+ /* check for existing device to update from */
-+ trigger_data->net_dev = dev_get_by_name(&init_net, trigger_data->device_name);
-+ if (trigger_data->net_dev != NULL)
-+ trigger_data->link_up = (dev_get_flags(trigger_data->net_dev) & IFF_LOWER_UP) != 0;
-+ set_baseline_state(trigger_data); /* updates LEDs, may start timers */
-+ }
-+
-+ write_unlock(&trigger_data->lock);
-+ return size;
-+}
-+
-+static DEVICE_ATTR(device_name, 0644, led_device_name_show, led_device_name_store);
-+
-+static ssize_t led_mode_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ read_lock(&trigger_data->lock);
-+
-+ if (trigger_data->mode == 0) {
-+ strcpy(buf, "none\n");
-+ } else {
-+ char *p = buf;
-+ if (trigger_data->mode & MODE_LINK)
-+ strcat(buf, "link ");
-+ if (trigger_data->mode & MODE_TX)
-+ strcat(buf, "tx ");
-+ if (trigger_data->mode & MODE_RX)
-+ strcat(buf, "rx ");
-+ strcat(buf, "\n");
-+ }
-+
-+ read_unlock(&trigger_data->lock);
-+
-+ return strlen(buf)+1;
-+}
-+
-+static ssize_t led_mode_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+ char copybuf[1024];
-+ int new_mode = -1;
-+ char *p, *token;
-+
-+ /* take a copy since we don't want to trash the inbound buffer when using strsep */
-+ strncpy(copybuf, buf, sizeof(copybuf));
-+ copybuf[1023] = 0;
-+ p = copybuf;
-+
-+ while ((token = strsep(&p, " \t\n")) != NULL) {
-+ if (!*token)
-+ continue;
-+
-+ if (new_mode == -1)
-+ new_mode = 0;
-+
-+ if (!strcmp(token, "none"))
-+ new_mode = 0;
-+ else if (!strcmp(token, "tx"))
-+ new_mode |= MODE_TX;
-+ else if (!strcmp(token, "rx"))
-+ new_mode |= MODE_RX;
-+ else if (!strcmp(token, "link"))
-+ new_mode |= MODE_LINK;
-+ else
-+ return -EINVAL;
-+ }
-+
-+ if (new_mode == -1)
-+ return -EINVAL;
-+
-+ write_lock(&trigger_data->lock);
-+ trigger_data->mode = new_mode;
-+ set_baseline_state(trigger_data);
-+ write_unlock(&trigger_data->lock);
-+
-+ return size;
-+}
-+
-+static DEVICE_ATTR(mode, 0644, led_mode_show, led_mode_store);
-+
-+static ssize_t led_interval_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ read_lock(&trigger_data->lock);
-+ sprintf(buf, "%u\n", jiffies_to_msecs(trigger_data->interval));
-+ read_unlock(&trigger_data->lock);
-+
-+ return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_interval_store(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+ int ret = -EINVAL;
-+ char *after;
-+ unsigned long value = simple_strtoul(buf, &after, 10);
-+ size_t count = after - buf;
-+
-+ if (*after && isspace(*after))
-+ count++;
-+
-+ /* impose some basic bounds on the timer interval */
-+ if (count == size && value >= 5 && value <= 10000) {
-+ write_lock(&trigger_data->lock);
-+ trigger_data->interval = msecs_to_jiffies(value);
-+ set_baseline_state(trigger_data); // resets timer
-+ write_unlock(&trigger_data->lock);
-+ ret = count;
-+ }
-+
-+ return ret;
-+}
-+
-+static DEVICE_ATTR(interval, 0644, led_interval_show, led_interval_store);
-+
-+static int netdev_trig_notify(struct notifier_block *nb,
-+ unsigned long evt,
-+ void *dv)
-+{
-+ struct net_device *dev = dv;
-+ struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier);
-+
-+ if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER)
-+ return NOTIFY_DONE;
-+
-+ write_lock(&trigger_data->lock);
-+
-+ if (strcmp(dev->name, trigger_data->device_name))
-+ goto done;
-+
-+ if (evt == NETDEV_REGISTER) {
-+ if (trigger_data->net_dev != NULL)
-+ dev_put(trigger_data->net_dev);
-+ dev_hold(dev);
-+ trigger_data->net_dev = dev;
-+ trigger_data->link_up = 0;
-+ goto done;
-+ }
-+
-+ if (evt == NETDEV_UNREGISTER && trigger_data->net_dev != NULL) {
-+ dev_put(trigger_data->net_dev);
-+ trigger_data->net_dev = NULL;
-+ goto done;
-+ }
-+
-+ /* UP / DOWN / CHANGE */
-+
-+ trigger_data->link_up = (evt != NETDEV_DOWN && netif_carrier_ok(dev));
-+ set_baseline_state(trigger_data);
-+
-+done:
-+ write_unlock(&trigger_data->lock);
-+ return NOTIFY_DONE;
-+}
-+
-+/* here's the real work! */
-+static void netdev_trig_timer(unsigned long arg)
-+{
-+ struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg;
-+ struct net_device_stats *dev_stats;
-+ unsigned new_activity;
-+
-+ write_lock(&trigger_data->lock);
-+
-+ if (!trigger_data->link_up || !trigger_data->net_dev || (trigger_data->mode & (MODE_TX | MODE_RX)) == 0) {
-+ /* we don't need to do timer work, just reflect link state. */
-+ led_set_brightness(trigger_data->led_cdev, ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up) ? LED_FULL : LED_OFF);
-+ goto no_restart;
-+ }
-+
-+ dev_stats = trigger_data->net_dev->get_stats(trigger_data->net_dev);
-+ new_activity =
-+ ((trigger_data->mode & MODE_TX) ? dev_stats->tx_packets : 0) +
-+ ((trigger_data->mode & MODE_RX) ? dev_stats->rx_packets : 0);
-+
-+ if (trigger_data->mode & MODE_LINK) {
-+ /* base state is ON (link present) */
-+ /* if there's no link, we don't get this far and the LED is off */
-+
-+ /* OFF -> ON always */
-+ /* ON -> OFF on activity */
-+ if (trigger_data->led_cdev->brightness == LED_OFF) {
-+ led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+ } else if (trigger_data->last_activity != new_activity) {
-+ led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+ }
-+ } else {
-+ /* base state is OFF */
-+ /* ON -> OFF always */
-+ /* OFF -> ON on activity */
-+ if (trigger_data->led_cdev->brightness == LED_FULL) {
-+ led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+ } else if (trigger_data->last_activity != new_activity) {
-+ led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+ }
-+ }
-+
-+ trigger_data->last_activity = new_activity;
-+ mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+
-+no_restart:
-+ write_unlock(&trigger_data->lock);
-+}
-+
-+static void netdev_trig_activate(struct led_classdev *led_cdev)
-+{
-+ struct led_netdev_data *trigger_data;
-+ int rc;
-+
-+ trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
-+ if (!trigger_data)
-+ return;
-+
-+ rwlock_init(&trigger_data->lock);
-+
-+ trigger_data->notifier.notifier_call = netdev_trig_notify;
-+ trigger_data->notifier.priority = 10;
-+
-+ setup_timer(&trigger_data->timer, netdev_trig_timer, (unsigned long) trigger_data);
-+
-+ trigger_data->led_cdev = led_cdev;
-+ trigger_data->net_dev = NULL;
-+ trigger_data->device_name[0] = 0;
-+
-+ trigger_data->mode = 0;
-+ trigger_data->interval = msecs_to_jiffies(50);
-+ trigger_data->link_up = 0;
-+ trigger_data->last_activity = 0;
-+
-+ led_cdev->trigger_data = trigger_data;
-+
-+ rc = device_create_file(led_cdev->dev, &dev_attr_device_name);
-+ if (rc)
-+ goto err_out;
-+ rc = device_create_file(led_cdev->dev, &dev_attr_mode);
-+ if (rc)
-+ goto err_out_device_name;
-+ rc = device_create_file(led_cdev->dev, &dev_attr_interval);
-+ if (rc)
-+ goto err_out_mode;
-+
-+ register_netdevice_notifier(&trigger_data->notifier);
-+ return;
-+
-+err_out_mode:
-+ device_remove_file(led_cdev->dev, &dev_attr_mode);
-+err_out_device_name:
-+ device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+err_out:
-+ led_cdev->trigger_data = NULL;
-+ kfree(trigger_data);
-+}
-+
-+static void netdev_trig_deactivate(struct led_classdev *led_cdev)
-+{
-+ struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+ if (trigger_data) {
-+ unregister_netdevice_notifier(&trigger_data->notifier);
-+
-+ device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+ device_remove_file(led_cdev->dev, &dev_attr_mode);
-+ device_remove_file(led_cdev->dev, &dev_attr_interval);
-+
-+ write_lock(&trigger_data->lock);
-+
-+ if (trigger_data->net_dev) {
-+ dev_put(trigger_data->net_dev);
-+ trigger_data->net_dev = NULL;
-+ }
-+
-+ write_unlock(&trigger_data->lock);
-+
-+ del_timer_sync(&trigger_data->timer);
-+
-+ kfree(trigger_data);
-+ }
-+}
-+
-+static struct led_trigger netdev_led_trigger = {
-+ .name = "netdev",
-+ .activate = netdev_trig_activate,
-+ .deactivate = netdev_trig_deactivate,
-+};
-+
-+static int __init netdev_trig_init(void)
-+{
-+ return led_trigger_register(&netdev_led_trigger);
-+}
-+
-+static void __exit netdev_trig_exit(void)
-+{
-+ led_trigger_unregister(&netdev_led_trigger);
-+}
-+
-+module_init(netdev_trig_init);
-+module_exit(netdev_trig_exit);
-+
-+MODULE_AUTHOR("Oliver Jowett <oliver@opencloud.com>");
-+MODULE_DESCRIPTION("Netdev LED trigger");
-+MODULE_LICENSE("GPL");
-Index: git/drivers/leds/Kconfig
-===================================================================
---- git.orig/drivers/leds/Kconfig
-+++ git/drivers/leds/Kconfig
-@@ -229,4 +229,11 @@ config LEDS_TRIGGER_DEFAULT_ON
- This allows LEDs to be initialised in the ON state.
- If unsure, say Y.
-
-+config LEDS_TRIGGER_NETDEV
-+ tristate "LED Network Device Trigger"
-+ depends on LEDS_TRIGGERS
-+ help
-+ This allows LEDs to be controlled by Network Device activity.
-+ If unsure, say Y.
-+
- endif # NEW_LEDS
-Index: git/drivers/leds/Makefile
-===================================================================
---- git.orig/drivers/leds/Makefile
-+++ git/drivers/leds/Makefile
-@@ -30,5 +30,6 @@ obj-$(CONFIG_LEDS_NEO1973_GTA02) += leds
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
- obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o
- obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV) += ledtrig-netdev.o
- obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb
index 4860cca2b6..fb9c4f0498 100644
--- a/packages/linux/linux-openmoko-devel_git.bb
+++ b/packages/linux/linux-openmoko-devel_git.bb
@@ -1,26 +1,25 @@
require linux.inc
require linux-openmoko.inc
-DESCRIPTION_${PN} = "Linux ${KERNEL_RELEASE} kernel for the Openmoko Neo GSM Smartphones"
-
DEFAULT_PREFERENCE = "-1"
-KERNEL_RELEASE = "2.6.28"
+KERNEL_RELEASE = "2.6.29"
KERNEL_VERSION = "${KERNEL_RELEASE}"
OEV = "oe1"
PV = "${KERNEL_RELEASE}-${OEV}+gitr${SRCREV}"
-PR = "r2"
+PR = "r1"
SRC_URI = "\
git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy-tracking \
- file://openwrt-ledtrig-netdev.patch;patch=1 \
- file://defconfig-oe.patch \
"
S = "${WORKDIR}/git"
+CONFIG_NAME_om-gta01 = "gta01_moredrivers_defconfig"
+CONFIG_NAME_om-gta02 = "gta02_packaging_defconfig"
+CONFIG_NAME_om-3d7k = "om_3d7k_defconfig"
+
do_configure_prepend() {
- install -m 644 ./arch/arm/configs/gta02-packaging-defconfig ${WORKDIR}/defconfig-oe
+ install -m 644 ./arch/arm/configs/${CONFIG_NAME} ${WORKDIR}/defconfig-oe
cat ${WORKDIR}/defconfig-oe.patch | patch -p0 -d ${WORKDIR}
}
-
diff --git a/packages/linux/linux-openmoko.inc b/packages/linux/linux-openmoko.inc
index 278a01d5ee..84a77ea586 100644
--- a/packages/linux/linux-openmoko.inc
+++ b/packages/linux/linux-openmoko.inc
@@ -5,13 +5,21 @@ KERNEL_IMAGETYPE = "uImage"
UBOOT_ENTRYPOINT = "30008000"
COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = 'om-gta01|om-gta02'
+COMPATIBLE_MACHINE = "om-gta01|om-gta02|om-3d7k"
-CONFIG_NAME_om-gta01 = "gta01"
-CONFIG_NAME_om-gta02 = "gta02"
+KERNEL_IMAGE_SYMLINK_NAME_om-gta01 = "uImage-GTA01.bin"
+KERNEL_IMAGE_SYMLINK_NAME_om-gta02 = "uImage-GTA02.bin"
+KERNEL_IMAGE_SYMLINK_NAME_om-3d7k = "uImage-OM3D7K.bin"
CMDLINE = "unused -- bootloader passes ATAG list"
+# Do keep OABI compat for om-gta01 to keep the gllin binary working
+ARM_KEEP_OABI_om-gta01 = "1"
+
+# Make sure not to use thumb[-interworking]
+ARM_INSTRUCTION_SET = "arm"
+THUMB_INTERWORKING = "no"
+
###############################################################
# module configs specific to this kernel
#
@@ -24,6 +32,8 @@ module_autoload_g_ether = "g_ether"
module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753"
# audio (GTA02)
module_autoload_snd-soc-neo1973-gta02-wm8753 = "snd-soc-neo1973-gta02-wm8753"
+# audio (GTA03)
+module_autoload_snd-soc-neo1973-gta02-wm8753 = ""
# sd/mmc
module_autoload_s3cmci = "s3cmci"
diff --git a/packages/linux/linux-orion/defconfig b/packages/linux/linux-orion/defconfig
index e2ce06256e..84ddcf0e7e 100644
--- a/packages/linux/linux-orion/defconfig
+++ b/packages/linux/linux-orion/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.27.10
-# Fri Jan 23 22:58:28 2009
+# Linux kernel version: 2.6.28.4
+# Tue Feb 10 18:45:26 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -22,8 +22,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_SUPPORTS_AOUT=y
-CONFIG_ZONE_DMA=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -78,7 +76,9 @@ CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
+CONFIG_AIO=y
CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
@@ -86,15 +86,8 @@ CONFIG_SLAB=y
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
-# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
-# CONFIG_HAVE_IOREMAP_PROT is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
-# CONFIG_HAVE_ARCH_TRACEHOOK is not set
-# CONFIG_HAVE_DMA_ATTRS is not set
-# CONFIG_USE_GENERIC_SMP_HELPERS is not set
-# CONFIG_HAVE_CLK is not set
-CONFIG_PROC_PAGE_MONITOR=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
@@ -127,6 +120,7 @@ CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
#
# System Type
@@ -167,7 +161,7 @@ CONFIG_ARCH_ORION5X=y
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM7X00A is not set
+# CONFIG_ARCH_MSM is not set
#
# Orion Implementations
@@ -177,15 +171,19 @@ CONFIG_ARCH_ORION5X=y
CONFIG_MACH_KUROBOX_PRO=y
CONFIG_MACH_DNS323=y
CONFIG_MACH_TS209=y
+# CONFIG_MACH_TERASTATION_PRO2 is not set
CONFIG_MACH_LINKSTATION_PRO=y
+# CONFIG_MACH_LINKSTATION_MINI is not set
CONFIG_MACH_TS409=y
# CONFIG_MACH_WRT350N_V2 is not set
# CONFIG_MACH_TS78XX is not set
CONFIG_MACH_MV2120=y
+# CONFIG_MACH_EDMINI_V2 is not set
# CONFIG_MACH_MSS2 is not set
# CONFIG_MACH_WNR854T is not set
# CONFIG_MACH_RD88F5181L_GE is not set
# CONFIG_MACH_RD88F5181L_FXO is not set
+# CONFIG_MACH_RD88F6183AP_GE is not set
#
# Boot options
@@ -235,26 +233,30 @@ CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_SPARSEMEM_VMEMMAP_ENABLE is not set
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
CONFIG_ALIGNMENT_TRAP=y
#
@@ -262,11 +264,16 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
+CONFIG_CMDLINE=" debug "
# CONFIG_XIP_KERNEL is not set
# CONFIG_KEXEC is not set
#
+# CPU Power Management
+#
+# CONFIG_CPU_IDLE is not set
+
+#
# Floating point emulation
#
@@ -279,6 +286,8 @@ CONFIG_VFP=y
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
@@ -357,6 +366,7 @@ CONFIG_IPV6_TUNNEL=m
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
CONFIG_LLC=m
@@ -443,12 +453,11 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBFUSB=m
CONFIG_BT_HCIVHCI=m
# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
CONFIG_CFG80211=m
CONFIG_NL80211=y
+CONFIG_WIRELESS_OLD_REGULATORY=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_MAC80211=m
@@ -457,7 +466,9 @@ CONFIG_MAC80211=m
# Rate control algorithm selection
#
CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
CONFIG_MAC80211_RC_DEFAULT="pid"
# CONFIG_MAC80211_MESH is not set
# CONFIG_MAC80211_LEDS is not set
@@ -566,6 +577,7 @@ CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_CAFE is not set
@@ -738,6 +750,7 @@ CONFIG_SATA_MV=y
# CONFIG_PATA_SCH is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
# CONFIG_MD_LINEAR is not set
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
@@ -775,8 +788,25 @@ CONFIG_NETDEVICES=y
# CONFIG_TUN is not set
# CONFIG_VETH is not set
# CONFIG_ARCNET is not set
+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_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
# CONFIG_NET_ETHERNET is not set
-CONFIG_MII=y
+CONFIG_MII=m
CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
@@ -798,6 +828,7 @@ CONFIG_MV643XX_ETH=y
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
+# CONFIG_JME is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
@@ -809,6 +840,7 @@ CONFIG_WLAN_80211=y
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
# CONFIG_LIBERTAS is not set
+# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
# CONFIG_PRISM54 is not set
@@ -833,14 +865,15 @@ CONFIG_P54_USB=m
CONFIG_ZD1211RW=m
CONFIG_ZD1211RW_DEBUG=y
CONFIG_RT2X00=m
-CONFIG_RT2X00_LIB=m
-CONFIG_RT2X00_LIB_USB=m
-CONFIG_RT2X00_LIB_FIRMWARE=y
# CONFIG_RT2400PCI is not set
# CONFIG_RT2500PCI is not set
# CONFIG_RT61PCI is not set
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
# CONFIG_RT2X00_DEBUG is not set
#
@@ -854,6 +887,7 @@ CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_SMSC95XX is not set
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
@@ -922,7 +956,6 @@ CONFIG_INPUT_TOUCHSCREEN=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_USB_COMPOSITE=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
@@ -1060,12 +1093,14 @@ CONFIG_I2C_DEBUG_ALGO=y
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#
-CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
#
@@ -1075,8 +1110,9 @@ CONFIG_SSB_POSSIBLE=y
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
#
# Multimedia devices
@@ -1085,15 +1121,120 @@ CONFIG_SSB_POSSIBLE=y
#
# Multimedia core support
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
+CONFIG_VIDEO_MEDIA=m
#
# Multimedia drivers
#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_BT848 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_VIDEO_STRADIS is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_MXB 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_IVTV is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+CONFIG_USB_M5602=m
+CONFIG_USB_GSPCA_CONEX=m
+CONFIG_USB_GSPCA_ETOMS=m
+CONFIG_USB_GSPCA_FINEPIX=m
+CONFIG_USB_GSPCA_MARS=m
+CONFIG_USB_GSPCA_OV519=m
+CONFIG_USB_GSPCA_PAC207=m
+CONFIG_USB_GSPCA_PAC7311=m
+CONFIG_USB_GSPCA_SONIXB=m
+CONFIG_USB_GSPCA_SONIXJ=m
+CONFIG_USB_GSPCA_SPCA500=m
+CONFIG_USB_GSPCA_SPCA501=m
+CONFIG_USB_GSPCA_SPCA505=m
+CONFIG_USB_GSPCA_SPCA506=m
+CONFIG_USB_GSPCA_SPCA508=m
+CONFIG_USB_GSPCA_SPCA561=m
+CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_SUNPLUS=m
+CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TV8532=m
+CONFIG_USB_GSPCA_VC032X=m
+CONFIG_USB_GSPCA_ZC3XX=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=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
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_USB_S2255=m
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
+# CONFIG_USB_SI470X is not set
+# CONFIG_USB_MR800 is not set
CONFIG_DAB=y
-# CONFIG_USB_DABUSB is not set
+CONFIG_USB_DABUSB=m
#
# Graphics support
@@ -1116,6 +1257,7 @@ CONFIG_DAB=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FONT_8x16=y
CONFIG_SOUND=m
+CONFIG_SOUND_OSS_CORE=y
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
@@ -1162,6 +1304,8 @@ CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
# CONFIG_USB_MON is not set
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
#
# USB Host Controller Drivers
@@ -1179,6 +1323,8 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_SL811_HCD=y
# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
#
# USB Device Class drivers
@@ -1186,13 +1332,14 @@ CONFIG_USB_SL811_HCD=y
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
+# CONFIG_USB_TMC is not set
#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
#
#
-# may also be needed; see USB_STORAGE Help for more information
+# see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
@@ -1282,6 +1429,7 @@ CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
@@ -1300,13 +1448,15 @@ CONFIG_USB_SISUSBVGA_CON=y
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
CONFIG_USB_ISIGHTFW=m
+# CONFIG_USB_VST is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_UWB is not set
CONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
#
-# MMC/SD Card Drivers
+# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_BOUNCE=y
@@ -1314,10 +1464,12 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_TEST is not set
#
-# MMC/SD Host Controller Drivers
+# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_SDHCI is not set
# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
# CONFIG_NEW_LEDS is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
@@ -1350,6 +1502,7 @@ CONFIG_RTC_DRV_M41T80=y
# CONFIG_RTC_DRV_M41T80_WDT is not set
CONFIG_RTC_DRV_S35390A=y
# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
#
# SPI RTC drivers
@@ -1359,12 +1512,15 @@ CONFIG_RTC_DRV_S35390A=y
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
@@ -1383,14 +1539,7 @@ CONFIG_DMA_ENGINE=y
#
# CONFIG_NET_DMA is not set
# CONFIG_DMATEST is not set
-
-#
-# Voltage and Current regulators
-#
# CONFIG_REGULATOR is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REGULATOR_BQ24022 is not set
# CONFIG_UIO is not set
#
@@ -1405,7 +1554,7 @@ 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_EXT4_FS is not set
CONFIG_JBD=y
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
@@ -1420,6 +1569,7 @@ CONFIG_JFS_SECURITY=y
# CONFIG_JFS_DEBUG is not set
CONFIG_JFS_STATISTICS=y
CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
CONFIG_XFS_FS=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
@@ -1464,6 +1614,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
#
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
@@ -1517,6 +1668,7 @@ CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
@@ -1604,15 +1756,15 @@ CONFIG_FRAME_WARN=1024
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_MEMORY_INIT is not set
CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_HAVE_FTRACE=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-# CONFIG_FTRACE is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_DEBUG_USER is not set
@@ -1622,6 +1774,7 @@ CONFIG_HAVE_ARCH_KGDB=y
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=y
@@ -1632,11 +1785,18 @@ CONFIG_CRYPTO=y
#
# Crypto core or helper
#
+# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_CRYPTD is not set
@@ -1708,6 +1868,11 @@ CONFIG_CRYPTO_DES=y
#
CONFIG_CRYPTO_DEFLATE=m
# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
@@ -1715,8 +1880,6 @@ CONFIG_CRYPTO_HW=y
# Library routines
#
CONFIG_BITREVERSE=y
-# CONFIG_GENERIC_FIND_FIRST_BIT is not set
-# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_CRC_CCITT=y
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
diff --git a/packages/linux/linux-orion_2.6.27.10.bb b/packages/linux/linux-orion_2.6.27.10.bb
deleted file mode 100644
index 500d959a9a..0000000000
--- a/packages/linux/linux-orion_2.6.27.10.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Linux Kernel for Marvell Orion based devices"
-SECTION = "kernel"
-LICENSE = "GPL"
-PR = "r6"
-COMPATIBLE_MACHINE = "(dns323|mv2120|kuropro|lspro|tsx09|ts409)"
-
-require linux.inc
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.27.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.gz;patch=1 \
- file://kuropro-foonas-mtd.patch;patch=1 \
- file://fw-and-powerpc-install.patch;patch=1 \
- file://defconfig \
- "
-
-S = "${WORKDIR}/linux-2.6.27"
-
-# Fix the mach-type of orion devices - always passed 526
-SRC_URI_append_dns323 += "file://dns323.patch;patch=1"
-SRC_URI_append_mv2120 += "file://mv2120.patch;patch=1"
-SRC_URI_append_kuropro += "file://kuropro.patch;patch=1"
-SRC_URI_append_lspro += "file://lspro.patch;patch=1"
-SRC_URI_append_tsx09 += "file://tsx09.patch;patch=1"
-SRC_URI_append_ts409 += "file://ts409.patch;patch=1"
-
-KERNEL_IMAGETYPE ?= "uImage"
diff --git a/packages/linux/linux-orion_2.6.28.4.bb b/packages/linux/linux-orion_2.6.28.4.bb
new file mode 100644
index 0000000000..c0a7d3c9af
--- /dev/null
+++ b/packages/linux/linux-orion_2.6.28.4.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Linux Kernel for Marvell Orion based devices"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r0"
+COMPATIBLE_MACHINE = "(dns323|mv2120|kuropro|lspro|tsx09|ts409)"
+
+require linux.inc
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.gz;patch=1 \
+ file://kuropro-foonas-mtd.patch;patch=1 \
+ file://fw-and-powerpc-install.patch;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-2.6.28"
+
+# Fix the mach-type of orion devices - always passed 526
+SRC_URI_append_dns323 += "file://dns323.patch;patch=1"
+SRC_URI_append_mv2120 += "file://mv2120.patch;patch=1"
+SRC_URI_append_kuropro += "file://kuropro.patch;patch=1"
+SRC_URI_append_lspro += "file://lspro.patch;patch=1"
+SRC_URI_append_tsx09 += "file://tsx09.patch;patch=1"
+SRC_URI_append_ts409 += "file://ts409.patch;patch=1"
+
+KERNEL_IMAGETYPE ?= "uImage"
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-akita b/packages/linux/linux-rp-2.6.24/defconfig-akita
index 32bfa9dfcf..07c456473b 100644
--- a/packages/linux/linux-rp-2.6.24/defconfig-akita
+++ b/packages/linux/linux-rp-2.6.24/defconfig-akita
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc8
-# Sun Jan 20 18:29:33 2008
+# Linux kernel version: 2.6.24
+# Sun Feb 1 13:58:56 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -152,12 +152,13 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
# CONFIG_MACH_EM_X270 is not set
# CONFIG_MACH_ZYLONITE is not set
# CONFIG_MACH_ARMCORE is not set
# CONFIG_PXA_SHARPSL_25x is not set
CONFIG_PXA_SHARPSL_27x=y
-# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
CONFIG_MACH_AKITA=y
CONFIG_MACH_SPITZ=y
CONFIG_MACH_BORZOI=y
@@ -203,16 +204,16 @@ CONFIG_SHARP_SCOOP=y
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=m
+CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
+CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
-CONFIG_PCMCIA_PXA2XX=m
+CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
@@ -224,7 +225,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -263,9 +264,6 @@ CONFIG_ATAGS_PROC=y
#
# 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
@@ -645,7 +643,7 @@ CONFIG_BLK_DEV_IDE=y
# 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_IDECS=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
@@ -761,6 +759,7 @@ CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
#
# USB Network Adapters
@@ -772,7 +771,7 @@ CONFIG_USB_RTL8150=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_DM9601=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
@@ -839,6 +838,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
CONFIG_KEYBOARD_SPITZ=y
+CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_PXA27x is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
@@ -1079,11 +1079,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-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 is not set
#
# Sound
@@ -1114,7 +1110,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# Generic devices
#
-# CONFIG_SND_AC97_CODEC is not set
+CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1156,7 +1152,7 @@ CONFIG_SND_SOC_WM8750=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
-# CONFIG_AC97_BUS is not set
+CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
@@ -1444,13 +1440,13 @@ CONFIG_RTC_DRV_SA1100=y
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=y
# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
+CONFIG_JBD=y
# 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
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-c7x0 b/packages/linux/linux-rp-2.6.24/defconfig-c7x0
index 4b54f9fc70..d5807e3ca7 100644
--- a/packages/linux/linux-rp-2.6.24/defconfig-c7x0
+++ b/packages/linux/linux-rp-2.6.24/defconfig-c7x0
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc8
-# Sun Jan 20 18:27:11 2008
+# Linux kernel version: 2.6.24
+# Sun Feb 1 14:11:29 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -152,12 +152,13 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
# CONFIG_MACH_EM_X270 is not set
# CONFIG_MACH_ZYLONITE is not set
# CONFIG_MACH_ARMCORE is not set
CONFIG_PXA_SHARPSL_25x=y
# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
# CONFIG_MACH_POODLE is not set
CONFIG_MACH_CORGI=y
CONFIG_MACH_SHEPHERD=y
@@ -205,16 +206,16 @@ CONFIG_SHARP_SCOOP=y
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=m
+CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
+CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
-CONFIG_PCMCIA_PXA2XX=m
+CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
@@ -226,7 +227,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -259,7 +260,7 @@ CONFIG_CPU_FREQ_PXA25x=y
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=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
@@ -279,9 +280,6 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# 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
@@ -661,7 +659,7 @@ CONFIG_BLK_DEV_IDE=y
# 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_IDECS=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
@@ -777,6 +775,7 @@ CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
#
# USB Network Adapters
@@ -788,7 +787,7 @@ CONFIG_USB_RTL8150=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_DM9601=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
@@ -855,6 +854,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_CORGI=y
# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
@@ -986,6 +986,8 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multimedia devices
@@ -1088,11 +1090,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-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 is not set
#
# Sound
@@ -1123,7 +1121,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# Generic devices
#
-# CONFIG_SND_AC97_CODEC is not set
+CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1165,7 +1163,7 @@ CONFIG_SND_SOC_WM8731=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
-# CONFIG_AC97_BUS is not set
+CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
@@ -1450,13 +1448,13 @@ CONFIG_RTC_DRV_SA1100=y
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=y
# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
+CONFIG_JBD=y
# 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
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-spitz b/packages/linux/linux-rp-2.6.24/defconfig-spitz
index d97e13faf4..413fdb622c 100644
--- a/packages/linux/linux-rp-2.6.24/defconfig-spitz
+++ b/packages/linux/linux-rp-2.6.24/defconfig-spitz
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc8
-# Sun Jan 20 18:32:23 2008
+# Linux kernel version: 2.6.24
+# Sun Feb 1 13:46:44 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -152,12 +152,13 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
# CONFIG_MACH_EM_X270 is not set
# CONFIG_MACH_ZYLONITE is not set
# CONFIG_MACH_ARMCORE is not set
# CONFIG_PXA_SHARPSL_25x is not set
CONFIG_PXA_SHARPSL_27x=y
-# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
CONFIG_MACH_AKITA=y
CONFIG_MACH_SPITZ=y
CONFIG_MACH_BORZOI=y
@@ -224,7 +225,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -263,9 +264,6 @@ CONFIG_ATAGS_PROC=y
#
# 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
@@ -544,20 +542,20 @@ CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
-CONFIG_MTD=m
+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=m
-CONFIG_MTD_BLKDEVS=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
+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
@@ -581,7 +579,7 @@ 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=m
+CONFIG_MTD_ROM=y
# CONFIG_MTD_ABSENT is not set
#
@@ -589,7 +587,7 @@ CONFIG_MTD_ROM=m
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=m
+CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_PLATRAM is not set
#
@@ -606,14 +604,14 @@ CONFIG_MTD_SHARP_SL=m
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=m
+CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
# 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=m
+CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=m
+CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ALAUDA is not set
@@ -761,6 +759,7 @@ CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
#
# USB Network Adapters
@@ -772,7 +771,7 @@ CONFIG_USB_RTL8150=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_DM9601=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
@@ -1080,11 +1079,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-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 is not set
#
# Sound
@@ -1115,7 +1110,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# Generic devices
#
-# CONFIG_SND_AC97_CODEC is not set
+CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1157,7 +1152,7 @@ CONFIG_SND_SOC_WM8750=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
-# CONFIG_AC97_BUS is not set
+CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
@@ -1451,7 +1446,7 @@ CONFIG_EXT3_FS=y
CONFIG_JBD=y
# 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
@@ -1502,7 +1497,7 @@ CONFIG_TMPFS=y
# 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=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
@@ -1731,10 +1726,10 @@ CONFIG_CRC_CCITT=y
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_LZO_COMPRESS=m
-CONFIG_LZO_DECOMPRESS=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-tosa b/packages/linux/linux-rp-2.6.24/defconfig-tosa
index d62547505c..b39c9f0914 100644
--- a/packages/linux/linux-rp-2.6.24/defconfig-tosa
+++ b/packages/linux/linux-rp-2.6.24/defconfig-tosa
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24
-# Wed Jun 4 12:21:16 2008
+# Sun Feb 8 12:31:04 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -158,6 +158,7 @@ CONFIG_PXA_SHARPSL=y
# CONFIG_MACH_ARMCORE is not set
CONFIG_PXA_SHARPSL_25x=y
# CONFIG_PXA_SHARPSL_27x is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
# CONFIG_MACH_POODLE is not set
# CONFIG_MACH_CORGI is not set
# CONFIG_MACH_SHEPHERD is not set
@@ -757,7 +758,25 @@ CONFIG_NETDEV_10000=y
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
#
# USB Network Adapters
@@ -828,7 +847,6 @@ CONFIG_INPUT_POWER=y
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
-# CONFIG_SHARPSL_RC is not set
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
@@ -837,6 +855,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_SHARPSL_RC is not set
CONFIG_KEYBOARD_TOSA=y
# CONFIG_KEYBOARD_TOSA_USE_EXT_KEYCODES is not set
CONFIG_KEYBOARD_GPIO=y
@@ -998,6 +1017,8 @@ CONFIG_MFD_CORE=y
# CONFIG_MFD_TC6387XB is not set
CONFIG_MFD_TC6393XB=y
# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multimedia devices
diff --git a/packages/linux/linux-rp-2.6.26/defconfig-akita b/packages/linux/linux-rp-2.6.26/defconfig-akita
index 0106fa5710..f863b28483 100644
--- a/packages/linux/linux-rp-2.6.26/defconfig-akita
+++ b/packages/linux/linux-rp-2.6.26/defconfig-akita
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc8
-# Sun Jan 20 18:29:33 2008
+# Linux kernel version: 2.6.26
+# Tue Feb 3 01:08:10 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -21,6 +21,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
@@ -42,46 +43,56 @@ CONFIG_SYSVIPC_SYSCTL=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_GROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_SYSCTL_SYSCALL_CHECK=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_COMPAT_BRK=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_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
@@ -105,6 +116,7 @@ CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
#
# System Type
@@ -133,6 +145,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -142,22 +155,30 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM7X00A is not set
#
# Intel PXA2xx/PXA3xx Implementations
#
+# CONFIG_ARCH_GUMSTIX is not set
# 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_ARCH_PXA_ESERIES is not set
# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_COLIBRI is not set
# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_LITTLETON is not set
# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
# CONFIG_PXA_SHARPSL_25x is not set
CONFIG_PXA_SHARPSL_27x=y
-# CONFIG_MACH_HX2750 is not set
CONFIG_MACH_AKITA=y
CONFIG_MACH_SPITZ=y
CONFIG_MACH_BORZOI=y
@@ -181,6 +202,7 @@ CONFIG_CPU_32=y
CONFIG_CPU_XSCALE=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_NOIFAR=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
CONFIG_CPU_CP15=y
@@ -203,16 +225,16 @@ CONFIG_SHARP_SCOOP=y
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=m
+CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
+CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
-CONFIG_PCMCIA_PXA2XX=m
+CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
@@ -224,7 +246,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -234,6 +256,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
@@ -263,9 +286,6 @@ CONFIG_ATAGS_PROC=y
#
# 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
@@ -278,13 +298,12 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
CONFIG_APM_EMULATION=y
-CONFIG_INPUT_APMPOWER=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
#
# Networking
@@ -301,6 +320,7 @@ CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -342,17 +362,20 @@ 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_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
#
# Core Netfilter Configuration
#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
# CONFIG_NF_CONNTRACK is not set
CONFIG_NETFILTER_XTABLES=m
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
@@ -360,20 +383,25 @@ CONFIG_NETFILTER_XTABLES=m
# 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_RATEEST is not set
# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_IPRANGE 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_OWNER is not set
# CONFIG_NETFILTER_XT_MATCH_POLICY 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_RATEEST 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
@@ -388,20 +416,16 @@ CONFIG_NETFILTER_XTABLES=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_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=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
@@ -410,7 +434,7 @@ CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
+# IPv6: Netfilter Configuration
#
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
@@ -435,6 +459,7 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
CONFIG_IRDA=m
#
@@ -469,15 +494,6 @@ CONFIG_IRCOMM=m
# CONFIG_KS959_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
@@ -525,8 +541,6 @@ CONFIG_IEEE80211=m
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
# CONFIG_NET_9P is not set
@@ -541,8 +555,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
# CONFIG_CONNECTOR is not set
CONFIG_MTD=y
@@ -552,6 +564,7 @@ CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
#
# User Modules And Translation Layers
@@ -636,17 +649,19 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_ATA_OVER_ETH is not set
CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
-# Please see Documentation/ide.txt for help/info on IDE drives
+# Please see Documentation/ide/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_IDECS=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
@@ -657,11 +672,8 @@ CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
-CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-CONFIG_IDE_ARCH_OBSOLETE_INIT=y
# CONFIG_BLK_DEV_HD is not set
#
@@ -750,7 +762,11 @@ CONFIG_MII=m
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_DEBUG is not set
CONFIG_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
@@ -758,6 +774,8 @@ CONFIG_PCMCIA_SPECTRUM=m
CONFIG_AIRO_CS=m
# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_IWLWIFI_LEDS is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
@@ -803,7 +821,6 @@ CONFIG_PPP_BSDCOMP=m
# CONFIG_PPPOL2TP 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
@@ -826,7 +843,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
+CONFIG_INPUT_APMPOWER=y
#
# Input Device Drivers
@@ -840,6 +857,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
CONFIG_KEYBOARD_SPITZ=y
+CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_PXA27x is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
@@ -856,6 +874,7 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
@@ -878,6 +897,7 @@ CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -909,6 +929,7 @@ CONFIG_HW_RANDOM=m
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
+# CONFIG_IPWIRELESS is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
CONFIG_I2C=y
@@ -916,13 +937,6 @@ CONFIG_I2C_BOARDINFO=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_GPIO is not set
@@ -934,29 +948,39 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
#
# Miscellaneous I2C Chip support
#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 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_SPI is not set
+CONFIG_HAVE_GPIO_LIB=y
#
-# SPI support
+# GPIO Support
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# SPI GPIO expanders:
#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
@@ -972,16 +996,42 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
# CONFIG_HTC_ASIC3 is not set
# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multimedia devices
#
+
+#
+# Multimedia core support
+#
CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
@@ -992,6 +1042,7 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_EM28XX is not set
# CONFIG_VIDEO_USBVISION is not set
@@ -1010,9 +1061,12 @@ CONFIG_USB_STV680=m
# CONFIG_USB_ZC0301 is not set
# CONFIG_USB_PWC is not set
# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_SOC_CAMERA is not set
+# CONFIG_VIDEO_PXA27x is not set
CONFIG_RADIO_ADAPTERS=y
CONFIG_USB_DSBR=m
-# CONFIG_DVB_CORE is not set
+# CONFIG_USB_SI470X is not set
CONFIG_DAB=y
CONFIG_USB_DABUSB=m
@@ -1031,8 +1085,8 @@ 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_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_DEFERRED_IO is not set
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
@@ -1044,12 +1098,11 @@ CONFIG_FB_CFB_IMAGEBLIT=y
#
# 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_SMARTPANEL is not set
# CONFIG_FB_PXA_PARAMETERS is not set
# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
+# CONFIG_FB_AM200EPD is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
@@ -1080,11 +1133,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-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 is not set
#
# Sound
@@ -1115,7 +1164,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# Generic devices
#
-# CONFIG_SND_AC97_CODEC is not set
+CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1149,7 +1198,11 @@ CONFIG_SND_PXA2XX_SOC_I2S=m
CONFIG_SND_PXA2XX_SOC_SPITZ=m
#
-# SoC Audio support for SuperH
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# SoC Audio for the Texas Instruments OMAP
#
CONFIG_SND_SOC_WM8750=m
@@ -1157,7 +1210,7 @@ CONFIG_SND_SOC_WM8750=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
-# CONFIG_AC97_BUS is not set
+CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
@@ -1182,6 +1235,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
#
# Miscellaneous USB options
@@ -1190,13 +1244,16 @@ CONFIG_USB_DEVICEFS=y
CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
#
# USB Host Controller Drivers
#
+# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_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
@@ -1210,6 +1267,7 @@ CONFIG_USB_SL811_CS=m
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1229,7 +1287,9 @@ 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_ONETOUCH is not set
# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
# CONFIG_USB_LIBUSUAL is not set
#
@@ -1242,11 +1302,8 @@ CONFIG_USB_MON=y
#
# USB port drivers
#
-
-#
-# USB Serial Converter support
-#
CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
@@ -1267,6 +1324,7 @@ CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
+# CONFIG_USB_SERIAL_IUU is not set
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
@@ -1286,9 +1344,11 @@ 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_MOTOROLA is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
@@ -1299,7 +1359,6 @@ 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
@@ -1323,16 +1382,8 @@ CONFIG_USB_IDMOUSE=m
# 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_ISIGHTFW is not set
CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AMD5536UDC is not set
@@ -1358,6 +1409,7 @@ 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_PRINTER is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
@@ -1368,6 +1420,7 @@ CONFIG_MMC_UNSAFE_RESUME=y
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
#
# MMC/SD Host Controller Drivers
@@ -1380,7 +1433,6 @@ CONFIG_LEDS_CLASS=y
# LED drivers
#
CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
# CONFIG_LEDS_GPIO is not set
#
@@ -1390,6 +1442,7 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_IDE_DISK=y
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
@@ -1418,6 +1471,8 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
#
# SPI RTC drivers
@@ -1427,9 +1482,10 @@ CONFIG_RTC_INTF_DEV=y
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_V3020 is not set
@@ -1438,6 +1494,7 @@ CONFIG_RTC_INTF_DEV=y
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_SA1100=y
+# CONFIG_UIO is not set
#
# File systems
@@ -1445,22 +1502,19 @@ CONFIG_RTC_DRV_SA1100=y
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=y
# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
+CONFIG_JBD=y
# 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_DNOTIFY=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
@@ -1519,12 +1573,11 @@ 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_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
@@ -1532,12 +1585,10 @@ 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
@@ -1622,10 +1673,6 @@ CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=y
# CONFIG_DLM is not set
-CONFIG_INSTRUMENTATION=y
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-# CONFIG_MARKERS is not set
#
# Kernel hacking
@@ -1633,42 +1680,16 @@ CONFIG_OPROFILE=m
# CONFIG_PRINTK_TIME is not set
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1677,54 +1698,91 @@ CONFIG_DEBUG_ERRORS=y
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=m
CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
CONFIG_CRYPTO_HMAC=m
# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MICHAEL_MIC=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_XTS is not set
-# CONFIG_CRYPTO_CRYPTD 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_WP512=m
+
+#
+# Ciphers
+#
CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_LZO=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_HW is not set
#
# Library routines
#
CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
# CONFIG_CRC_ITU_T is not set
diff --git a/packages/linux/linux-rp-2.6.26/defconfig-c7x0 b/packages/linux/linux-rp-2.6.26/defconfig-c7x0
index b9b653cc3b..8b62decdce 100644
--- a/packages/linux/linux-rp-2.6.26/defconfig-c7x0
+++ b/packages/linux/linux-rp-2.6.26/defconfig-c7x0
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc8
-# Sun Jan 20 18:27:11 2008
+# Linux kernel version: 2.6.26
+# Tue Feb 3 01:27:59 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -21,6 +21,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
@@ -42,46 +43,56 @@ CONFIG_SYSVIPC_SYSCTL=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_GROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_SYSCTL_SYSCALL_CHECK=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_COMPAT_BRK=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_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
+CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
@@ -105,6 +116,7 @@ CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
#
# System Type
@@ -133,6 +145,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -142,22 +155,30 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM7X00A is not set
#
# Intel PXA2xx/PXA3xx Implementations
#
+# CONFIG_ARCH_GUMSTIX is not set
# 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_ARCH_PXA_ESERIES is not set
# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_COLIBRI is not set
# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_LITTLETON is not set
# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
CONFIG_PXA_SHARPSL_25x=y
# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_HX2750 is not set
# CONFIG_MACH_POODLE is not set
CONFIG_MACH_CORGI=y
CONFIG_MACH_SHEPHERD=y
@@ -183,6 +204,7 @@ CONFIG_CPU_32=y
CONFIG_CPU_XSCALE=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_NOIFAR=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
CONFIG_CPU_CP15=y
@@ -205,16 +227,16 @@ CONFIG_SHARP_SCOOP=y
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=m
+CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
+CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
-CONFIG_PCMCIA_PXA2XX=m
+CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
@@ -226,7 +248,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -236,6 +258,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
@@ -252,7 +275,6 @@ CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
-CONFIG_CPU_FREQ_PXA25x=y
#
# CPU Frequency scaling
@@ -263,6 +285,7 @@ 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_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
@@ -271,6 +294,7 @@ 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_PXA=y
#
# Floating point emulation
@@ -279,9 +303,6 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# 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
@@ -294,13 +315,12 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
CONFIG_APM_EMULATION=y
-CONFIG_INPUT_APMPOWER=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
#
# Networking
@@ -317,6 +337,7 @@ CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -358,17 +379,20 @@ 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_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
#
# Core Netfilter Configuration
#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
# CONFIG_NF_CONNTRACK is not set
CONFIG_NETFILTER_XTABLES=m
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
@@ -376,20 +400,25 @@ CONFIG_NETFILTER_XTABLES=m
# 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_RATEEST is not set
# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_IPRANGE 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_OWNER is not set
# CONFIG_NETFILTER_XT_MATCH_POLICY 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_RATEEST 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
@@ -404,20 +433,16 @@ CONFIG_NETFILTER_XTABLES=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_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=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
@@ -426,7 +451,7 @@ CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
+# IPv6: Netfilter Configuration
#
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
@@ -451,6 +476,7 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
CONFIG_IRDA=m
#
@@ -485,15 +511,6 @@ CONFIG_IRCOMM=m
# CONFIG_KS959_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
@@ -541,8 +558,6 @@ CONFIG_IEEE80211=m
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
# CONFIG_NET_9P is not set
@@ -557,8 +572,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
# CONFIG_CONNECTOR is not set
CONFIG_MTD=y
@@ -568,6 +581,7 @@ CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
#
# User Modules And Translation Layers
@@ -652,17 +666,19 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_ATA_OVER_ETH is not set
CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
-# Please see Documentation/ide.txt for help/info on IDE drives
+# Please see Documentation/ide/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_IDECS=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
@@ -673,11 +689,8 @@ CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
-CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-CONFIG_IDE_ARCH_OBSOLETE_INIT=y
# CONFIG_BLK_DEV_HD is not set
#
@@ -766,7 +779,11 @@ CONFIG_MII=m
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
+CONFIG_LIBERTAS=m
+# CONFIG_LIBERTAS_USB is not set
+CONFIG_LIBERTAS_CS=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_DEBUG is not set
CONFIG_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
@@ -774,6 +791,8 @@ CONFIG_PCMCIA_SPECTRUM=m
CONFIG_AIRO_CS=m
# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_IWLWIFI_LEDS is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
@@ -819,7 +838,6 @@ CONFIG_PPP_BSDCOMP=m
# CONFIG_PPPOL2TP 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
@@ -842,7 +860,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
+CONFIG_INPUT_APMPOWER=y
#
# Input Device Drivers
@@ -856,6 +874,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_CORGI=y
# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
@@ -871,6 +890,7 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
@@ -893,6 +913,7 @@ CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -924,6 +945,7 @@ CONFIG_HW_RANDOM=m
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
+# CONFIG_IPWIRELESS is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
CONFIG_I2C=y
@@ -931,13 +953,6 @@ CONFIG_I2C_BOARDINFO=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_GPIO is not set
@@ -949,29 +964,39 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
#
# Miscellaneous I2C Chip support
#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 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_SPI is not set
+CONFIG_HAVE_GPIO_LIB=y
#
-# SPI support
+# GPIO Support
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# SPI GPIO expanders:
#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
@@ -987,14 +1012,42 @@ CONFIG_SSB_POSSIBLE=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multimedia devices
#
+
+#
+# Multimedia core support
+#
CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
@@ -1005,6 +1058,7 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_EM28XX is not set
# CONFIG_VIDEO_USBVISION is not set
@@ -1023,9 +1077,11 @@ CONFIG_USB_STV680=m
# CONFIG_USB_ZC0301 is not set
# CONFIG_USB_PWC is not set
# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_SOC_CAMERA is not set
CONFIG_RADIO_ADAPTERS=y
CONFIG_USB_DSBR=m
-# CONFIG_DVB_CORE is not set
+# CONFIG_USB_SI470X is not set
CONFIG_DAB=y
CONFIG_USB_DABUSB=m
@@ -1044,8 +1100,8 @@ 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_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_DEFERRED_IO is not set
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
@@ -1059,6 +1115,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_PXA is not set
# CONFIG_FB_MBX is not set
CONFIG_FB_W100=y
+# CONFIG_FB_AM200EPD is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
@@ -1089,11 +1146,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-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 is not set
#
# Sound
@@ -1124,7 +1177,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# Generic devices
#
-# CONFIG_SND_AC97_CODEC is not set
+CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1158,7 +1211,11 @@ CONFIG_SND_PXA2XX_SOC_I2S=m
CONFIG_SND_PXA2XX_SOC_CORGI=m
#
-# SoC Audio support for SuperH
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# SoC Audio for the Texas Instruments OMAP
#
CONFIG_SND_SOC_WM8731=m
@@ -1166,7 +1223,7 @@ CONFIG_SND_SOC_WM8731=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
-# CONFIG_AC97_BUS is not set
+CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
@@ -1191,6 +1248,7 @@ CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
#
# Miscellaneous USB options
@@ -1199,13 +1257,16 @@ CONFIG_USB_DEVICEFS=y
CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
#
# USB Host Controller Drivers
#
+# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_CS=m
# CONFIG_USB_R8A66597_HCD is not set
@@ -1215,6 +1276,7 @@ CONFIG_USB_SL811_CS=m
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1234,7 +1296,9 @@ 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_ONETOUCH is not set
# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
# CONFIG_USB_LIBUSUAL is not set
#
@@ -1247,11 +1311,8 @@ CONFIG_USB_MON=y
#
# USB port drivers
#
-
-#
-# USB Serial Converter support
-#
CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
@@ -1272,6 +1333,7 @@ CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
+# CONFIG_USB_SERIAL_IUU is not set
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
@@ -1291,9 +1353,11 @@ 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_MOTOROLA is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
@@ -1304,7 +1368,6 @@ 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
@@ -1328,16 +1391,8 @@ CONFIG_USB_IDMOUSE=m
# 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_ISIGHTFW is not set
CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AMD5536UDC is not set
@@ -1364,6 +1419,7 @@ 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_PRINTER is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
@@ -1374,6 +1430,7 @@ CONFIG_MMC_UNSAFE_RESUME=y
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
#
# MMC/SD Host Controller Drivers
@@ -1386,7 +1443,6 @@ CONFIG_LEDS_CLASS=y
# LED drivers
#
CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
# CONFIG_LEDS_GPIO is not set
#
@@ -1396,6 +1452,7 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_IDE_DISK=y
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
@@ -1424,6 +1481,8 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
#
# SPI RTC drivers
@@ -1433,9 +1492,10 @@ CONFIG_RTC_INTF_DEV=y
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_V3020 is not set
@@ -1444,6 +1504,7 @@ CONFIG_RTC_INTF_DEV=y
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_SA1100=y
+# CONFIG_UIO is not set
#
# File systems
@@ -1451,22 +1512,19 @@ CONFIG_RTC_DRV_SA1100=y
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=y
# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
+CONFIG_JBD=y
# 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_DNOTIFY=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
@@ -1525,12 +1583,11 @@ 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_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
@@ -1538,12 +1595,10 @@ 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
@@ -1628,10 +1683,6 @@ CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=y
# CONFIG_DLM is not set
-CONFIG_INSTRUMENTATION=y
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-# CONFIG_MARKERS is not set
#
# Kernel hacking
@@ -1639,42 +1690,16 @@ CONFIG_OPROFILE=m
# CONFIG_PRINTK_TIME is not set
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1683,54 +1708,91 @@ CONFIG_DEBUG_ERRORS=y
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=m
CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
CONFIG_CRYPTO_HMAC=m
# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MICHAEL_MIC=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_XTS is not set
-# CONFIG_CRYPTO_CRYPTD 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_WP512=m
+
+#
+# Ciphers
+#
CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_LZO=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_HW is not set
#
# Library routines
#
CONFIG_BITREVERSE=y
+# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
# CONFIG_CRC_ITU_T is not set
diff --git a/packages/linux/linux-rp-2.6.26/defconfig-collie b/packages/linux/linux-rp-2.6.26/defconfig-collie
index e80885f332..10163d814d 100644
--- a/packages/linux/linux-rp-2.6.26/defconfig-collie
+++ b/packages/linux/linux-rp-2.6.26/defconfig-collie
@@ -762,7 +762,11 @@ CONFIG_MII=m
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
+CONFIG_LIBERTAS=m
+# CONFIG_LIBERTAS_USB is not set
+CONFIG_LIBERTAS_CS=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_DEBUG is not set
CONFIG_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
@@ -1229,7 +1233,7 @@ CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_SYSFS is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
diff --git a/packages/linux/linux-rp-2.6.26/defconfig-poodle b/packages/linux/linux-rp-2.6.26/defconfig-poodle
index 274789fe56..9d5e340114 100644
--- a/packages/linux/linux-rp-2.6.26/defconfig-poodle
+++ b/packages/linux/linux-rp-2.6.26/defconfig-poodle
@@ -767,7 +767,11 @@ CONFIG_MII=m
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
+CONFIG_LIBERTAS=m
+# CONFIG_LIBERTAS_USB is not set
+CONFIG_LIBERTAS_CS=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_DEBUG is not set
CONFIG_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
diff --git a/packages/linux/linux-rp-2.6.26/defconfig-spitz b/packages/linux/linux-rp-2.6.26/defconfig-spitz
index 775efafc39..fd2285d4fb 100644
--- a/packages/linux/linux-rp-2.6.26/defconfig-spitz
+++ b/packages/linux/linux-rp-2.6.26/defconfig-spitz
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.26-rc4
-# Sun Jun 1 18:56:45 2008
+# Linux kernel version: 2.6.26
+# Tue Feb 3 01:16:06 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -60,7 +60,6 @@ CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -247,7 +246,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
+# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -287,9 +286,6 @@ CONFIG_ATAGS_PROC=y
#
# 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
@@ -559,25 +555,23 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
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
# CONFIG_CONNECTOR is not set
-CONFIG_MTD=m
+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
# CONFIG_MTD_AR7_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_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
@@ -601,7 +595,7 @@ 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=m
+CONFIG_MTD_ROM=y
# CONFIG_MTD_ABSENT is not set
#
@@ -609,7 +603,7 @@ CONFIG_MTD_ROM=m
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=m
+CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_PLATRAM is not set
#
@@ -626,14 +620,14 @@ CONFIG_MTD_SHARP_SL=m
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=m
+CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
# 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=m
+CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=m
+CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ALAUDA is not set
@@ -680,7 +674,6 @@ CONFIG_IDE_PROC_FS=y
#
# CONFIG_BLK_DEV_PLATFORM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD_ONLY is not set
# CONFIG_BLK_DEV_HD is not set
#
@@ -769,7 +762,11 @@ CONFIG_MII=m
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_DEBUG is not set
CONFIG_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
@@ -860,6 +857,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
CONFIG_KEYBOARD_SPITZ=y
+CONFIG_SHARPSL_RC=y
# CONFIG_KEYBOARD_PXA27x is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
@@ -973,7 +971,6 @@ CONFIG_HAVE_GPIO_LIB=y
#
# GPIO Support
#
-# CONFIG_DEBUG_GPIO is not set
#
# I2C GPIO expanders:
@@ -1045,6 +1042,7 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_EM28XX is not set
# CONFIG_VIDEO_USBVISION is not set
@@ -1135,11 +1133,7 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-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 is not set
#
# Sound
@@ -1388,8 +1382,8 @@ CONFIG_USB_IDMOUSE=m
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AMD5536UDC is not set
@@ -1478,6 +1472,7 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
#
# SPI RTC drivers
@@ -1561,7 +1556,7 @@ CONFIG_TMPFS=y
# 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=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
@@ -1690,41 +1685,11 @@ 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_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT 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_WRITECOUNT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not set
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_LL is not set
#
# Security options
@@ -1824,10 +1789,10 @@ CONFIG_CRC_CCITT=y
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_LZO_COMPRESS=m
-CONFIG_LZO_DECOMPRESS=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-rp.inc b/packages/linux/linux-rp.inc
index cb2e85e49a..e2af859069 100644
--- a/packages/linux/linux-rp.inc
+++ b/packages/linux/linux-rp.inc
@@ -68,24 +68,6 @@ module_autoload_collie-ts_collie = "collie-ts"
module_autoload_leds-locomo_collie = "leds-locomo"
module_autoload_power_collie = "power"
-
-#package kernel cmdline
-PACKAGES_append += "kernel-cmdline"
-FILES_kernel-cmdline = "/boot/kernel-cmdline*"
-PKG_kernel-cmdline = "kernel-cmdline-${KERNEL_VERSION}"
-RRECOMMENDS_kernel-base += "kernel-cmdline"
-
-pkg_postinst_kernel-cmdline () {
- cd /boot; update-alternatives --install /boot/kernel-cmdline kernel-cmdline kernel-cmdline-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true
-}
-
-pkg_postrm_kernel-cmdline () {
- cd /boot; update-alternatives --remove kernel-cmdline kernel-cmdline-${KERNEL_VERSION} || true
-}
-do_install_append () {
- echo "${CMDLINE_CON} ${CMDLINE_MEM} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"> "${D}/boot/kernel-cmdline-${KERNEL_VERSION}"
-}
-
do_configure() {
rm -f ${S}/.config
@@ -165,10 +147,6 @@ do_configure() {
yes '' | oe_runmake oldconfig
}
-#collie dosn't need to deploy kernel. The kernel is in the rootfs and
-# linux-kexecboot kernel is flashed
-do_deploy_collie() {
-}
# wlan-ng stuff need compiled kernel sources
do_rm_work() {
diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb
index ebc969f1bf..2293eea80e 100644
--- a/packages/linux/linux-rp_2.6.23.bb
+++ b/packages/linux/linux-rp_2.6.23.bb
@@ -1,6 +1,6 @@
require linux-rp.inc
-PR = "r34"
+PR = "r35"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb
index 4b2db7e99b..7b06916e1c 100644
--- a/packages/linux/linux-rp_2.6.24.bb
+++ b/packages/linux/linux-rp_2.6.24.bb
@@ -1,11 +1,15 @@
require linux-rp.inc
-PR = "r18"
+PR = "r22"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_collie = "1"
DEFAULT_PREFERENCE_qemux86 = "1"
DEFAULT_PREFERENCE_tosa = "1"
+DEFAULT_PREFERENCE_poodle = "1"
+DEFAULT_PREFERENCE_c7x0 = "1"
+DEFAULT_PREFERENCE_akita = "1"
+DEFAULT_PREFERENCE_spitz = "1"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
@@ -52,7 +56,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
file://sharpsl-rc-r1.patch;patch=1 \
file://sharpsl-rc-r2.patch;patch=1 \
file://squashfs3.3.patch;patch=1;status=external \
- ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
+# ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
file://hostap-monitor-mode.patch;patch=1;status=unmergable \
file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable \
diff --git a/packages/linux/linux-rp_2.6.25+2.6.26-rc4.bb b/packages/linux/linux-rp_2.6.25+2.6.26-rc4.bb
index 3f9eac86a5..1ce1e01c78 100644
--- a/packages/linux/linux-rp_2.6.25+2.6.26-rc4.bb
+++ b/packages/linux/linux-rp_2.6.25+2.6.26-rc4.bb
@@ -1,6 +1,6 @@
require linux-rp.inc
-PR = "r5"
+PR = "r6"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_qemuarm = "1"
diff --git a/packages/linux/linux-rp_2.6.26.bb b/packages/linux/linux-rp_2.6.26.bb
index dd126285ea..baf15a1237 100644
--- a/packages/linux/linux-rp_2.6.26.bb
+++ b/packages/linux/linux-rp_2.6.26.bb
@@ -1,12 +1,14 @@
require linux-rp.inc
-PR = "r5"
+PR = "r9"
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_qemuarm = "-1"
DEFAULT_PREFERENCE_qemux86 = "-1"
DEFAULT_PREFERENCE_spitz = "1"
DEFAULT_PREFERENCE_collie = "1"
+DEFAULT_PREFERENCE_akita = "1"
+DEFAULT_PREFERENCE_c7x0 = "1"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
@@ -37,7 +39,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2 \
${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \
${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \
file://zaurus-i2c-init.patch;patch=1;status=upstream \
- ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
+# ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
file://hostap-monitor-mode.patch;patch=1;status=unmergable \
file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable \
diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc
index 672d326c9a..984efac4d3 100644
--- a/packages/linux/linux.inc
+++ b/packages/linux/linux.inc
@@ -124,13 +124,19 @@ do_configure_prepend() {
echo "CONFIG_ROOT_NFS=y" >> ${S}/.config
echo "CONFIG_CMDLINE=\"${CMDLINE_NFSROOT_USB}\"" >> ${S}/.config
fi
- yes '' | oe_runmake oldconfig
+ yes '' | oe_runmake oldconfig
}
do_configure_append_avr32() {
sed -i -e s:-mno-pic::g arch/avr32/Makefile
}
+do_configure_append() {
+ if test -e scripts/Makefile.fwinst ; then
+ sed -i -e "s:-m0644:-m 0644:g" scripts/Makefile.fwinst
+ fi
+}
+
do_compile_append() {
if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then
if test -e arch/${ARCH}/boot/compressed/vmlinux ; then
diff --git a/packages/linux/linux/defconfig b/packages/linux/linux/defconfig
new file mode 100644
index 0000000000..7e3e549061
--- /dev/null
+++ b/packages/linux/linux/defconfig
@@ -0,0 +1,989 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28
+# Mon Jan 12 20:23:50 2009
+#
+# CONFIG_PPC64 is not set
+
+#
+# Processor support
+#
+CONFIG_6xx=y
+# CONFIG_PPC_85xx 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_PPC_FPU=y
+# CONFIG_ALTIVEC is not set
+CONFIG_PPC_STD_MMU=y
+CONFIG_PPC_STD_MMU_32=y
+# CONFIG_PPC_MM_SLICES is not set
+# CONFIG_SMP is not set
+CONFIG_NOT_COHERENT_CACHE=y
+CONFIG_PPC32=y
+CONFIG_WORD_SIZE=32
+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
+CONFIG_IRQ_PER_CPU=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=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_ARCH_NO_VIRT_TO_BUS is not set
+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_OF=y
+# CONFIG_PPC_UDBG_16550 is not set
+# CONFIG_GENERIC_TBSYNC is not set
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+# CONFIG_DEFAULT_UIMAGE is not set
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-isobel-gcn"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_COMPAT_BRK=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_AIO=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_TRACEPOINTS=y
+CONFIG_MARKERS=y
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
+
+#
+# Platform support
+#
+CONFIG_PPC_MULTIPLATFORM=y
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_CHRP is not set
+# CONFIG_MPC5121_ADS is not set
+# CONFIG_MPC5121_GENERIC is not set
+# CONFIG_PPC_MPC52xx is not set
+# CONFIG_PPC_PMAC is not set
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PPC_82xx is not set
+# CONFIG_PQ2ADS is not set
+# CONFIG_PPC_83xx is not set
+# CONFIG_PPC_86xx is not set
+CONFIG_EMBEDDED6xx=y
+# CONFIG_LINKSTATION is not set
+# CONFIG_STORCENTER is not set
+# CONFIG_MPC7448HPC2 is not set
+# CONFIG_PPC_HOLLY is not set
+# CONFIG_PPC_PRPMC2800 is not set
+# CONFIG_PPC_C2K is not set
+CONFIG_GAMECUBE=y
+# CONFIG_WII is not set
+CONFIG_FLIPPER_PIC=y
+CONFIG_GAMECUBE_COMMON=y
+CONFIG_GAMECUBE_RSW=y
+CONFIG_GAMECUBE_UDBG=y
+CONFIG_USBGECKO_UDBG=y
+# CONFIG_GAMECUBE_VIDEO_UDBG is not set
+# CONFIG_IPIC is not set
+# CONFIG_MPIC is not set
+# CONFIG_MPIC_WEIRD is not set
+# CONFIG_PPC_I8259 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_FSL_ULI1575 is not set
+
+#
+# Kernel options
+#
+# CONFIG_HIGHMEM is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=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_SCHED_HRTICK is not set
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_RCU is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
+CONFIG_BINFMT_MISC=m
+# CONFIG_IOMMU_HELPER is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_HAS_WALK_MEMORY=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
+CONFIG_KEXEC=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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_MIGRATION is not set
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_PROC_DEVICETREE=y
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_EXTRA_TARGETS=""
+# CONFIG_PM is not set
+# CONFIG_SECCOMP is not set
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_PCI is not set
+# CONFIG_PCI_DOMAINS is not set
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+# CONFIG_HAS_RAPIDIO is not set
+
+#
+# Advanced setup
+#
+CONFIG_ADVANCED_OPTIONS=y
+# CONFIG_LOWMEM_SIZE_BOOL is not set
+CONFIG_LOWMEM_SIZE=0x30000000
+# CONFIG_PAGE_OFFSET_BOOL is not set
+CONFIG_PAGE_OFFSET=0xc0000000
+# CONFIG_KERNEL_START_BOOL is not set
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_PHYSICAL_START=0x00000000
+# CONFIG_TASK_SIZE_BOOL is not set
+CONFIG_TASK_SIZE=0xc0000000
+# CONFIG_CONSISTENT_START_BOOL is not set
+CONFIG_CONSISTENT_START=0xff100000
+# CONFIG_CONSISTENT_SIZE_BOOL is not set
+CONFIG_CONSISTENT_SIZE=0x00200000
+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 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=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_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+# CONFIG_WIRELESS is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_STANDALONE is not set
+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
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+CONFIG_OF_DEVICE=y
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+CONFIG_GAMECUBE_DI=y
+CONFIG_GAMECUBE_ARAM=y
+CONFIG_GAMECUBE_SD=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_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=2
+CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_MISC_DEVICES=y
+CONFIG_GAMECUBE_GQR=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+CONFIG_GAMECUBE_BBA=y
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 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
+# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+CONFIG_INPUT_JOYDEV=y
+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 is not set
+CONFIG_INPUT_JOYSTICK=y
+# CONFIG_JOYSTICK_ANALOG is not set
+# CONFIG_JOYSTICK_A3D is not set
+# CONFIG_JOYSTICK_ADI is not set
+# CONFIG_JOYSTICK_COBRA is not set
+# CONFIG_JOYSTICK_GF2K is not set
+# CONFIG_JOYSTICK_GRIP is not set
+# CONFIG_JOYSTICK_GRIP_MP is not set
+# CONFIG_JOYSTICK_GUILLEMOT is not set
+# CONFIG_JOYSTICK_INTERACT is not set
+# CONFIG_JOYSTICK_SIDEWINDER is not set
+# CONFIG_JOYSTICK_TMDC is not set
+# CONFIG_JOYSTICK_IFORCE is not set
+# CONFIG_JOYSTICK_WARRIOR is not set
+# CONFIG_JOYSTICK_MAGELLAN is not set
+# CONFIG_JOYSTICK_SPACEORB is not set
+# CONFIG_JOYSTICK_SPACEBALL is not set
+# CONFIG_JOYSTICK_STINGER is not set
+# CONFIG_JOYSTICK_TWIDJOY is not set
+# CONFIG_JOYSTICK_ZHENHUA is not set
+# CONFIG_JOYSTICK_JOYDUMP is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
+# CONFIG_GAMEPORT is not set
+CONFIG_GAMECUBE_SI=y
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+# CONFIG_SERIAL_USBGECKO is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=64
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+
+#
+# EXI support
+#
+CONFIG_GAMECUBE_EXI=y
+# CONFIG_SPI is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+# CONFIG_GPIOLIB is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_OF is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_GAMECUBE=y
+# CONFIG_FB_IBM_GXT4500 is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+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 is not set
+CONFIG_LOGO_GAMECUBE_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+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 is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_DRIVERS=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
+CONFIG_SND_PPC=y
+CONFIG_SND_GAMECUBE=y
+CONFIG_SND_GAMECUBE_MIC=m
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+# CONFIG_HID_PID is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+# CONFIG_USB_SUPPORT is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_EDAC is not set
+CONFIG_RTC_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
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+CONFIG_RTC_DRV_GCN=y
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PPC is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_UIO is not set
+# CONFIG_STAGING 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_EXT4_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_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA 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=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_GCDVD_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_KCORE=y
+CONFIG_PROC_SYSCTL=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE 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_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=y
+# 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
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+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
+# CONFIG_DLM is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_HAVE_LMB=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# 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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS 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=y
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_LATENCYTOP=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_BOOT_TRACER=y
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_CODE_PATCHING_SELFTEST is not set
+# CONFIG_FTR_FIXUP_SELFTEST is not set
+# CONFIG_MSI_BITMAP_SELFTEST is not set
+# CONFIG_XMON is not set
+# CONFIG_IRQSTACKS is not set
+# CONFIG_VIRQ_DEBUG is not set
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_BOOTX_TEXT 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 is not set
+# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
+# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
+# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
+# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
+# CONFIG_PPC_EARLY_DEBUG_44x is not set
+# CONFIG_PPC_EARLY_DEBUG_40x is not set
+# CONFIG_PPC_EARLY_DEBUG_CPM is not set
+CONFIG_PPC_EARLY_DEBUG_USBGECKO=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+# CONFIG_PPC_CLOCK is not set
+# CONFIG_VIRTUALIZATION is not set
diff --git a/packages/linux/linux/patch-2.6.28-gc b/packages/linux/linux/patch-2.6.28-gc
new file mode 100644
index 0000000000..e13666396b
--- /dev/null
+++ b/packages/linux/linux/patch-2.6.28-gc
@@ -0,0 +1,32569 @@
+diff --git a/Documentation/exi.txt b/Documentation/exi.txt
+new file mode 100644
+index 0000000..a330c56
+--- /dev/null
++++ b/Documentation/exi.txt
+@@ -0,0 +1,81 @@
++The Expansion Interface (EXI)
++-----------------------------
++
++[Introductory information goes here...]
++
++
++Device drivers
++--------------
++
++Outlined below is the recommended practice when writing EXI device drivers.
++
++The bus driver already handles quite an amount of stuff, although some of
++it might have to be implemented by individual device drivers. If in doubt,
++see include/linux/exi.h.
++
++
++Registration
++------------
++
++Declare a struct exi_driver. Initialize at least the name, id_table,
++probe and remove fields:
++
++
++ static struct exi_device_id frob_id_tbl[] __devinitdata = {
++ { .dev_id = EXI_ID_FROB0, },
++ { .dev_id = EXI_ID_FROB1, },
++ { .dev_id = EXI_ID_FROB2, },
++ };
++
++ static struct exi_driver frob_driver = {
++ .name = "frob",
++ .id_table = frob_id_tbl,
++ .probe = frob_probe,
++ .remove = __devexit_p(frob_remove),
++ };
++
++
++`name' distinguishes the driver from others registered with the bus.
++It should be short, unique, yet remain informative.
++
++`id_table' is a pointer to a table of device IDs the driver claims to
++support. These should be taken directly from include/linux/exi_ids.h.
++This table should be marked __devinitdata.
++
++`probe' is a pointer to a function that's called once the driver is bound
++to a device it claims to support. This should be marked __devinit.
++
++`remove' is a pointer to a function that's called when either the driver
++unregisters with the bus, or a device bound to that specific driver is
++physically unplugged from the bus. This should be marked __devexit and
++created with __devexit_p().
++
++From within the driver's initialization function, register the driver with
++the bus by calling exi_driver_register() with the driver structure declared
++previously:
++
++ static int __init frob_init(void)
++ {
++ return exi_driver_register(&frob_driver);
++ }
++
++
++Deregistration
++--------------
++
++If the driver may be compiled as a loadable kernel module, then all you
++have to do is call exi_driver_unregister() in the driver's exit function:
++
++ static void __exit frob_exit(void)
++ {
++ exi_driver_unregister(&frob_driver);
++ }
++
++Device Private Data
++-------------------
++
++The functions exi_set_drvdata()/exi_get_drvdata() are available for the
++sole purpose of setting and getting driver private data for an EXI device.
++These are simply helpers around the driver-model functions that do the
++actual work. Use them. That way, you don't have to worry (or worry less)
++about changes to the driver-model API.
+diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
+index 525c13a..79074d6 100644
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -584,7 +584,7 @@ config PPC_PCI_CHOICE
+ config PCI
+ bool "PCI support" if PPC_PCI_CHOICE
+ default y if !40x && !CPM2 && !8xx && !PPC_83xx \
+- && !PPC_85xx && !PPC_86xx
++ && !PPC_85xx && !PPC_86xx && !GAMECUBE_COMMON
+ default PCI_PERMEDIA if !4xx && !CPM2 && !8xx
+ default PCI_QSPAN if !4xx && !CPM2 && 8xx
+ select ARCH_SUPPORTS_MSI
+diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
+index 15eb278..fc6a8da 100644
+--- a/arch/powerpc/Kconfig.debug
++++ b/arch/powerpc/Kconfig.debug
+@@ -224,6 +224,14 @@ config PPC_EARLY_DEBUG_CPM
+ using a CPM-based serial port. This assumes that the bootwrapper
+ has run, and set up the CPM in a particular way.
+
++config PPC_EARLY_DEBUG_USBGECKO
++ bool "Early debugging through the USB Gecko adapter"
++ depends on GAMECUBE_COMMON
++ select USBGECKO_UDBG
++ help
++ Select this to enable early debugging for Nintendo GameCube/Wii
++ consoles via an external USB Gecko adapter.
++
+ endchoice
+
+ config PPC_EARLY_DEBUG_44x_PHYSLOW
+diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
+index 3d3daa6..d685ea2 100644
+--- a/arch/powerpc/boot/Makefile
++++ b/arch/powerpc/boot/Makefile
+@@ -60,17 +60,16 @@ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
+ gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
+ 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \
+ cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
+- fsl-soc.c mpc8xx.c pq2.c
++ fsl-soc.c mpc8xx.c pq2.c ugecon.c
+ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \
+ cuboot-ebony.c treeboot-ebony.c prpmc2800.c \
+- ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
+ cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \
+ cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
+ fixed-head.S ep88xc.c ep405.c cuboot-c2k.c \
+ cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
+ cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
+ virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \
+- cuboot-acadia.c
++ cuboot-acadia.c gamecube.c wii.c
+ src-boot := $(src-wlib) $(src-plat) empty.c
+
+ src-boot := $(addprefix $(obj)/, $(src-boot))
+@@ -272,6 +271,8 @@ image-$(CONFIG_KSI8560) += cuImage.ksi8560
+ image-$(CONFIG_STORCENTER) += cuImage.storcenter
+ image-$(CONFIG_MPC7448HPC2) += cuImage.mpc7448hpc2
+ image-$(CONFIG_PPC_C2K) += cuImage.c2k
++image-$(CONFIG_GAMECUBE) += dtbImage.gamecube
++image-$(CONFIG_WII) += dtbImage.wii
+
+ # For 32-bit powermacs, build the COFF and miboot images
+ # as well as the ELF images.
+diff --git a/arch/powerpc/boot/dts/gamecube.dts b/arch/powerpc/boot/dts/gamecube.dts
+new file mode 100644
+index 0000000..c45c97e
+--- /dev/null
++++ b/arch/powerpc/boot/dts/gamecube.dts
+@@ -0,0 +1,129 @@
++/*
++ * arch/powerpc/boot/dts/gamecube.dts
++ *
++ * Nintendo GameCube platform device tree source
++ * Copyright (C) 2007-2009 The GameCube Linux Team
++ * Copyright (C) 2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++/ {
++ model = "NintendoGameCube";
++ compatible = "nintendo,gamecube";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ chosen {
++ bootargs = "root=/dev/nfs nfsroot=192.168.001.253:/nfsroot/cube,nfsvers=3,udp ip=on video=gcn-vifb:tv=auto force_keyboard_port=4";
++ linux,stdout-path = "/exi@0c006800/usbgecko@0c006814";
++ };
++
++ memory {
++ device_type = "memory";
++ /* 24M minus framebuffer memory area (640*576*2*2) */
++ reg = <00000000 01698000>;
++ };
++
++ cpus {
++ #address-cells = <1>;
++ #size-cells = <0>;
++
++ PowerPC,gekko@0 {
++ device_type = "cpu";
++ reg = <0>;
++ clock-frequency = <1cf7c580>; /* 486MHz */
++ bus-frequency = <9a7ec80>; /* 162MHz core-to-bus 3x */
++ timebase-frequency = <269fb20>; /* 162MHz / 4 */
++ /* Following required by dtc but not used */
++ i-cache-line-size = <20>;
++ d-cache-line-size = <20>;
++ i-cache-size = <8000>;
++ d-cache-size = <8000>;
++ };
++ };
++
++ pic: pic@0c003000 {
++ #interrupt-cells = <1>;
++ compatible = "nintendo,flipper-pic";
++ reg = <0c003000 8>;
++ interrupt-controller;
++ };
++
++ /* External Interface bus */
++ exi@0c006800 {
++ #address-cells = <1>;
++ #size-cells = <1>;
++ compatible = "nintendo,flipper-exi";
++ reg = <0c006800 40>;
++ interrupts = <04>;
++ interrupt-parent = <&pic>;
++
++ udbg_console: usbgecko@0c006814 {
++ compatible = "usbgecko,usbgecko";
++ reg = <0c006814 14>;
++ virtual-reg = <cc006814>;
++ };
++ };
++
++ /* devices contained int the flipper chipset */
++ soc {
++ #address-cells = <1>;
++ #size-cells = <1>;
++ #interrupt-cells = <1>;
++ model = "flipper";
++ compatible = "nintendo,flipper";
++ clock-frequency = <9a7ec80>; /* 162MHz */
++ ranges = <0c000000 0c000000 00010000>;
++
++ video@0c002000 {
++ compatible = "nintendo,flipper-video";
++ reg = <0c002000 100>;
++ interrupts = <08>;
++ interrupt-parent = <&pic>;
++ xfb-start = <01698000>; /* end-of-ram - xfb-size */
++ xfb-size = <168000>;
++ };
++
++ resetswitch@0c003000 {
++ compatible = "nintendo,flipper-resetswitch";
++ reg = <0c003000 4>;
++ interrupts = <01>;
++ interrupt-parent = <&pic>;
++ };
++
++ auxram@0c005000 {
++ compatible = "nintendo,flipper-auxram";
++ reg = <0c005000 200>; /* DSP */
++ interrupts = <06>;
++ interrupt-parent = <&pic>;
++ };
++
++ audio@0c005000 {
++ compatible = "nintendo,flipper-audio";
++ reg = <0c005000 200 /* DSP */
++ 0c006c00 20>; /* AI */
++ interrupts = <06>;
++ interrupt-parent = <&pic>;
++ };
++
++ disk@0c006000 {
++ compatible = "nintendo,flipper-disk";
++ reg = <0c006000 40>;
++ interrupts = <02>;
++ interrupt-parent = <&pic>;
++ };
++
++ serial@0c006400 {
++ compatible = "nintendo,flipper-serial";
++ reg = <0c006400 100>;
++ interrupts = <03>;
++ interrupt-parent = <&pic>;
++ };
++ };
++};
++
+diff --git a/arch/powerpc/boot/dts/wii.dts b/arch/powerpc/boot/dts/wii.dts
+new file mode 100644
+index 0000000..fdfbc2c
+--- /dev/null
++++ b/arch/powerpc/boot/dts/wii.dts
+@@ -0,0 +1,162 @@
++/*
++ * arch/powerpc/boot/dts/wii.dts
++ *
++ * Nintendo Wii platform device tree source
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++
++/memreserve/ 01698000-017fffff; /* framebuffer, see video@0c002000 */
++/memreserve/ 01800000-0fffffff; /* memory hole */
++/memreserve/ 10000000-10003fff; /* DSP */
++
++/ {
++ model = "NintendoWii";
++ compatible = "nintendo,wii";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ chosen {
++ /* ramdisk */
++ /* bootargs = "nobats root=/dev/ram0 video=gcnfb:tv=NTSC ip=on force_keyboard_port=4"; */
++
++ /* nfsroot */
++ /* bootargs = "nobats root=/dev/nfs nfsroot=192.168.001.253:/nfsroot/cube ip=on video=gcnfb:tv=NTSC force_keyboard_port=4"; */
++
++ /* root filesystem on 2nd partition of SD card, whiite style */
++ bootargs = "nobats root=/dev/rvlsda2 video=gcnfb:tv=NTSC force_keyboard_port=4 placeholder_for_additional_kernel_options_targetted_at_hexedit_lovers";
++ linux,stdout-path = "/exi@0d006800/usbgecko@0d006814";
++ };
++
++ memory {
++ device_type = "memory";
++ /* mem1 + hole + mem2 - ioh */
++ reg = <00000000 133e0000>;
++ };
++
++ cpus {
++ #cpus = <1>;
++ #address-cells = <1>;
++ #size-cells = <0>;
++
++ PowerPC,broadway@0 {
++ device_type = "cpu";
++ reg = <0>;
++ clock-frequency = <2b73a840>; /* 729MHz */
++ bus-frequency = <e7be2c0>; /* 243MHz core-to-bus 3x */
++ timebase-frequency = <39ef8b0>; /* 243MHz / 4 */
++ /* Following required by dtc but not used */
++ i-cache-line-size = <20>;
++ d-cache-line-size = <20>;
++ i-cache-size = <8000>;
++ d-cache-size = <8000>;
++ };
++ };
++
++ pic: pic@0c003000 {
++ #interrupt-cells = <1>;
++ compatible = "nintendo,flipper-pic";
++ reg = <0c003000 8>;
++ interrupt-controller;
++ };
++
++ /* External Interface bus */
++ exi@0d006800 {
++ #address-cells = <1>;
++ #size-cells = <1>;
++ compatible = "nintendo,hollywood-exi";
++ reg = <0d006800 40>;
++ interrupts = <04>;
++ interrupt-parent = <&pic>;
++
++ udbg_console: usbgecko@0d006814 {
++ compatible = "usbgecko,usbgecko";
++ reg = <0d006814 14>;
++ virtual-reg = <cd006814>;
++ };
++ };
++
++ /* devices contained in the hollywood chipset */
++ soc {
++ #address-cells = <1>;
++ #size-cells = <1>;
++ #interrupt-cells = <1>;
++ model = "hollywood";
++ compatible = "nintendo,hollywood";
++ clock-frequency = <e7be2c0>; /* 243MHz */
++ ranges = <0c000000 0c000000 00010000
++ 0d000000 0d000000 00010000
++ 0d800000 0d800000 00001000
++ 133e0000 133e0000 00020000>;
++
++ video@0c002000 {
++ compatible = "nintendo,hollywood-video";
++ reg = <0c002000 100>;
++ interrupts = <08>;
++ interrupt-parent = <&pic>;
++ xfb-start = <01698000>; /* end-of-mem1 - xfb-size */
++ xfb-size = <168000>; /* 640x576x2 x 2 bytes */
++ };
++
++ resetswitch@0c003000 {
++ compatible = "nintendo,hollywood-resetswitch";
++ reg = <0c003000 4>;
++ interrupts = <01>;
++ interrupt-parent = <&pic>;
++ };
++
++ audio@0c005000 {
++ compatible = "nintendo,hollywood-audio";
++ reg = <0c005000 200 /* DSP */
++ 0d006c00 20>; /* AI */
++ interrupts = <06>;
++ interrupt-parent = <&pic>;
++ };
++
++ serial@0d006400 {
++ compatible = "nintendo,hollywood-serial";
++ reg = <0d006400 100>;
++ interrupts = <03>;
++ interrupt-parent = <&pic>;
++ };
++
++ gpio0: starlet-gpio@0d8000c0 {
++ compatible = "nintendo,starlet-gpio";
++ reg = <0d8000c0 4>;
++ gpio-controller;
++ #gpio-cells = <2>;
++ };
++
++ starlet-ipc@0d000000 {
++ compatible = "nintendo,starlet-ipc";
++ reg = <0d000000 40 /* IPC */
++ 133e0000 20000>; /* MEM2 ioh 128K */
++ interrupts = <0e>;
++ interrupt-parent = <&pic>;
++
++ };
++
++ starlet-es {
++ compatible = "nintendo,starlet-es";
++ };
++
++ starlet-sd {
++ compatible = "nintendo,starlet-sd";
++ };
++
++ starlet-keyboard {
++ compatible = "nintendo,starlet-keyboard";
++ };
++
++ starlet-hcd {
++ compatible = "nintendo,starlet-hcd";
++ };
++ };
++};
+diff --git a/arch/powerpc/boot/gamecube.c b/arch/powerpc/boot/gamecube.c
+new file mode 100644
+index 0000000..f3e3c0d
+--- /dev/null
++++ b/arch/powerpc/boot/gamecube.c
+@@ -0,0 +1,77 @@
++/*
++ * arch/powerpc/boot/gamecube.c
++ *
++ * Nintendo GameCube/Wii platforms
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 <stddef.h>
++#include "stdio.h"
++#include "types.h"
++#include "io.h"
++#include "ops.h"
++
++#include "ugecon.h"
++
++BSS_STACK(8192);
++
++/*
++ * We enter with the MMU enabled and some legacy memory mappings active.
++ *
++ * We leave the MMU enabled, but we switch to an identity mapped memory
++ * scheme as expected by the start code.
++ *
++ */
++asm ("\n\
++.text\n\
++.globl _zimage_start\n\
++_zimage_start:\n\
++\n\
++ isync\n\
++ /* IBAT3,DBAT3 for first 16Mbytes */\n\
++ li 8, 0x01ff /* 16MB */\n\
++ li 9, 0x0002 /* rw */\n\
++ mtspr 0x216, 8 /* IBAT3U */\n\
++ mtspr 0x217, 9 /* IBAT3L */\n\
++ mtspr 0x21e, 8 /* DBAT3U */\n\
++ mtspr 0x21f, 9 /* DBAT3L */\n\
++\n\
++ sync\n\
++ isync\n\
++\n\
++ li 3, 0\n\
++ li 4, 0\n\
++ li 5, 0\n\
++\n\
++ bcl- 20,4*cr7+so,1f\n\
++1:\n\
++ mflr 8\n\
++ clrlwi 8, 8, 3\n\
++ addi 8, 8, 2f - 1b\n\
++ mtlr 8\n\
++ blr\n\
++2:\n\
++ b _zimage_start_lib\n\
++");
++
++/*
++ *
++ */
++void platform_init(unsigned long r3, unsigned long r4, unsigned long r5)
++{
++ u32 heapsize = 16*1024*1024 - (u32)_end;
++
++ simple_alloc_init(_end, heapsize, 32, 64);
++ fdt_init(_dtb_start);
++
++ if (!ug_grab_io_base() && ug_is_adapter_present())
++ console_ops.write = ug_console_write;
++}
++
+diff --git a/arch/powerpc/boot/ugecon.c b/arch/powerpc/boot/ugecon.c
+new file mode 100644
+index 0000000..b485eab
+--- /dev/null
++++ b/arch/powerpc/boot/ugecon.c
+@@ -0,0 +1,128 @@
++/*
++ * arch/powerpc/boot/ugecon.c
++ *
++ * USB Gecko bootwrapper console.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 <stddef.h>
++#include "stdio.h"
++#include "types.h"
++#include "io.h"
++#include "ops.h"
++
++
++#define EXI_CLK_32MHZ 5
++
++#define EXI_CSR 0x00
++#define EXI_CSR_CLKMASK (0x7<<4)
++#define EXI_CSR_CLK_32MHZ (EXI_CLK_32MHZ<<4)
++#define EXI_CSR_CSMASK (0x7<<7)
++#define EXI_CSR_CS_0 (0x1<<7) /* Chip Select 001 */
++
++#define EXI_CR 0x0c
++#define EXI_CR_TSTART (1<<0)
++#define EXI_CR_WRITE (1<<2)
++#define EXI_CR_READ_WRITE (2<<2)
++#define EXI_CR_TLEN(len) (((len)-1)<<4)
++
++#define EXI_DATA 0x10
++
++
++/* virtual address base for input/output, retrieved from device tree */
++static void *ug_io_base;
++
++
++static u32 ug_io_transaction(u32 in)
++{
++ u32 *csr_reg = ug_io_base + EXI_CSR;
++ u32 *data_reg = ug_io_base + EXI_DATA;
++ u32 *cr_reg = ug_io_base + EXI_CR;
++ u32 csr, data, cr;
++
++ /* select */
++ csr = EXI_CSR_CLK_32MHZ | EXI_CSR_CS_0;
++ out_be32(csr_reg, csr);
++
++ /* read/write */
++ data = in;
++ out_be32(data_reg, data);
++ cr = EXI_CR_TLEN(2) | EXI_CR_READ_WRITE | EXI_CR_TSTART;
++ out_be32(cr_reg, cr);
++
++ while (in_be32(cr_reg) & EXI_CR_TSTART)
++ barrier();
++
++ /* deselect */
++ out_be32(csr_reg, 0);
++
++ data = in_be32(data_reg);
++ return data;
++}
++
++static int ug_is_txfifo_ready(void)
++{
++ return ug_io_transaction(0xc0000000) & 0x04000000;
++}
++
++static void ug_raw_putc(char ch)
++{
++ ug_io_transaction(0xb0000000 | (ch << 20));
++}
++
++static void ug_putc(char ch)
++{
++ int count = 16;
++
++ if (!ug_io_base)
++ return;
++
++ while (!ug_is_txfifo_ready() && count--)
++ barrier();
++ if (count)
++ ug_raw_putc(ch);
++}
++
++void ug_console_write(const char *buf, int len)
++{
++ char *b = (char *)buf;
++
++ while (len--) {
++ if (*b == '\n')
++ ug_putc('\r');
++ ug_putc(*b++);
++ }
++}
++
++int ug_is_adapter_present(void)
++{
++ if (!ug_io_base)
++ return 0;
++
++ return ug_io_transaction(0x90000000) == 0x04700000;
++}
++
++int ug_grab_io_base(void)
++{
++ u32 v;
++ void *devp;
++
++ devp = finddevice("/exi/usbgecko");
++ if (devp == NULL)
++ goto err_out;
++ if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v))
++ goto err_out;
++
++ ug_io_base = (u8 *)v;
++ return 0;
++
++err_out:
++ return -1;
++}
+diff --git a/arch/powerpc/boot/ugecon.h b/arch/powerpc/boot/ugecon.h
+new file mode 100644
+index 0000000..1fdb590
+--- /dev/null
++++ b/arch/powerpc/boot/ugecon.h
+@@ -0,0 +1,25 @@
++/*
++ * arch/powerpc/boot/ugecon.h
++ *
++ * USB Gecko early bootwrapper console.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __UGECON_H
++#define __UGECON_H
++
++extern int ug_grab_io_base(void);
++extern int ug_is_adapter_present(void);
++
++extern void ug_putc(char ch);
++extern void ug_console_write(const char *buf, int len);
++
++#endif /* __UGECON_H */
++
+diff --git a/arch/powerpc/boot/wii.c b/arch/powerpc/boot/wii.c
+new file mode 100644
+index 0000000..b702514
+--- /dev/null
++++ b/arch/powerpc/boot/wii.c
+@@ -0,0 +1,78 @@
++/*
++ * arch/powerpc/boot/wii.c
++ *
++ * Nintendo Wii platform
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 <stddef.h>
++#include "stdio.h"
++#include "types.h"
++#include "io.h"
++#include "ops.h"
++
++#include "ugecon.h"
++
++
++BSS_STACK(8192);
++
++/*
++ * We enter with the MMU enabled and some legacy memory mappings active.
++ *
++ * We leave the MMU enabled, but we switch to an identity mapped memory
++ * scheme as expected by the start code.
++ *
++ */
++asm ("\n\
++.text\n\
++.globl _zimage_start\n\
++_zimage_start:\n\
++\n\
++ isync\n\
++ /* IBAT3,DBAT3 for first 16Mbytes */\n\
++ li 8, 0x01ff /* 16MB */\n\
++ li 9, 0x0002 /* rw */\n\
++ mtspr 0x216, 8 /* IBAT3U */\n\
++ mtspr 0x217, 9 /* IBAT3L */\n\
++ mtspr 0x21e, 8 /* DBAT3U */\n\
++ mtspr 0x21f, 9 /* DBAT3L */\n\
++\n\
++ sync\n\
++ isync\n\
++\n\
++ li 3, 0\n\
++ li 4, 0\n\
++ li 5, 0\n\
++\n\
++ bcl- 20,4*cr7+so,1f\n\
++1:\n\
++ mflr 8\n\
++ clrlwi 8, 8, 3\n\
++ addi 8, 8, 2f - 1b\n\
++ mtlr 8\n\
++ blr\n\
++2:\n\
++ b _zimage_start_lib\n\
++");
++
++/*
++ *
++ */
++void platform_init(unsigned long r3, unsigned long r4, unsigned long r5)
++{
++ u32 heapsize = 16*1024*1024 - (u32)_end;
++
++ simple_alloc_init(_end, heapsize, 32, 64);
++ fdt_init(_dtb_start);
++
++ if (!ug_grab_io_base() && ug_is_adapter_present())
++ console_ops.write = ug_console_write;
++}
++
+diff --git a/arch/powerpc/configs/gamecube_defconfig b/arch/powerpc/configs/gamecube_defconfig
+new file mode 100644
+index 0000000..7e3e549
+--- /dev/null
++++ b/arch/powerpc/configs/gamecube_defconfig
+@@ -0,0 +1,989 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.28
++# Mon Jan 12 20:23:50 2009
++#
++# CONFIG_PPC64 is not set
++
++#
++# Processor support
++#
++CONFIG_6xx=y
++# CONFIG_PPC_85xx 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_PPC_FPU=y
++# CONFIG_ALTIVEC is not set
++CONFIG_PPC_STD_MMU=y
++CONFIG_PPC_STD_MMU_32=y
++# CONFIG_PPC_MM_SLICES is not set
++# CONFIG_SMP is not set
++CONFIG_NOT_COHERENT_CACHE=y
++CONFIG_PPC32=y
++CONFIG_WORD_SIZE=32
++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
++CONFIG_MMU=y
++CONFIG_GENERIC_CMOS_UPDATE=y
++CONFIG_GENERIC_TIME=y
++CONFIG_GENERIC_TIME_VSYSCALL=y
++CONFIG_GENERIC_CLOCKEVENTS=y
++CONFIG_GENERIC_HARDIRQS=y
++# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
++CONFIG_IRQ_PER_CPU=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=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_ARCH_NO_VIRT_TO_BUS is not set
++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_OF=y
++# CONFIG_PPC_UDBG_16550 is not set
++# CONFIG_GENERIC_TBSYNC is not set
++CONFIG_AUDIT_ARCH=y
++CONFIG_GENERIC_BUG=y
++# CONFIG_DEFAULT_UIMAGE is not set
++# CONFIG_PPC_DCR_NATIVE is not set
++# CONFIG_PPC_DCR_MMIO is not set
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION="-isobel-gcn"
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_CGROUPS is not set
++CONFIG_GROUP_SCHED=y
++CONFIG_FAIR_GROUP_SCHED=y
++# CONFIG_RT_GROUP_SCHED is not set
++CONFIG_USER_SCHED=y
++# CONFIG_CGROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++# CONFIG_NAMESPACES 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_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++CONFIG_KALLSYMS_ALL=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++# CONFIG_ELF_CORE is not set
++CONFIG_COMPAT_BRK=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_AIO=y
++# CONFIG_VM_EVENT_COUNTERS is not set
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++CONFIG_TRACEPOINTS=y
++CONFIG_MARKERS=y
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
++CONFIG_HAVE_IOREMAP_PROT=y
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_ARCH_TRACEHOOK=y
++# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_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"
++CONFIG_CLASSIC_RCU=y
++# CONFIG_FREEZER is not set
++
++#
++# Platform support
++#
++CONFIG_PPC_MULTIPLATFORM=y
++CONFIG_CLASSIC32=y
++# CONFIG_PPC_CHRP is not set
++# CONFIG_MPC5121_ADS is not set
++# CONFIG_MPC5121_GENERIC is not set
++# CONFIG_PPC_MPC52xx is not set
++# CONFIG_PPC_PMAC is not set
++# CONFIG_PPC_CELL is not set
++# CONFIG_PPC_CELL_NATIVE is not set
++# CONFIG_PPC_82xx is not set
++# CONFIG_PQ2ADS is not set
++# CONFIG_PPC_83xx is not set
++# CONFIG_PPC_86xx is not set
++CONFIG_EMBEDDED6xx=y
++# CONFIG_LINKSTATION is not set
++# CONFIG_STORCENTER is not set
++# CONFIG_MPC7448HPC2 is not set
++# CONFIG_PPC_HOLLY is not set
++# CONFIG_PPC_PRPMC2800 is not set
++# CONFIG_PPC_C2K is not set
++CONFIG_GAMECUBE=y
++# CONFIG_WII is not set
++CONFIG_FLIPPER_PIC=y
++CONFIG_GAMECUBE_COMMON=y
++CONFIG_GAMECUBE_RSW=y
++CONFIG_GAMECUBE_UDBG=y
++CONFIG_USBGECKO_UDBG=y
++# CONFIG_GAMECUBE_VIDEO_UDBG is not set
++# CONFIG_IPIC is not set
++# CONFIG_MPIC is not set
++# CONFIG_MPIC_WEIRD is not set
++# CONFIG_PPC_I8259 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_FSL_ULI1575 is not set
++
++#
++# Kernel options
++#
++# CONFIG_HIGHMEM is not set
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=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_SCHED_HRTICK is not set
++# CONFIG_PREEMPT_NONE is not set
++# CONFIG_PREEMPT_VOLUNTARY is not set
++CONFIG_PREEMPT=y
++# CONFIG_PREEMPT_RCU is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++# CONFIG_HAVE_AOUT is not set
++CONFIG_BINFMT_MISC=m
++# CONFIG_IOMMU_HELPER is not set
++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
++CONFIG_ARCH_HAS_WALK_MEMORY=y
++CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
++CONFIG_KEXEC=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_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_MIGRATION is not set
++# CONFIG_RESOURCES_64BIT is not set
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_FORCE_MAX_ZONEORDER=11
++CONFIG_PROC_DEVICETREE=y
++# CONFIG_CMDLINE_BOOL is not set
++CONFIG_EXTRA_TARGETS=""
++# CONFIG_PM is not set
++# CONFIG_SECCOMP is not set
++CONFIG_ISA_DMA_API=y
++
++#
++# Bus options
++#
++CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_ISA_DMA=y
++# CONFIG_PCI is not set
++# CONFIG_PCI_DOMAINS is not set
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++# CONFIG_PCCARD is not set
++# CONFIG_HAS_RAPIDIO is not set
++
++#
++# Advanced setup
++#
++CONFIG_ADVANCED_OPTIONS=y
++# CONFIG_LOWMEM_SIZE_BOOL is not set
++CONFIG_LOWMEM_SIZE=0x30000000
++# CONFIG_PAGE_OFFSET_BOOL is not set
++CONFIG_PAGE_OFFSET=0xc0000000
++# CONFIG_KERNEL_START_BOOL is not set
++CONFIG_KERNEL_START=0xc0000000
++CONFIG_PHYSICAL_START=0x00000000
++# CONFIG_TASK_SIZE_BOOL is not set
++CONFIG_TASK_SIZE=0xc0000000
++# CONFIG_CONSISTENT_START_BOOL is not set
++CONFIG_CONSISTENT_START=0xff100000
++# CONFIG_CONSISTENT_SIZE_BOOL is not set
++CONFIG_CONSISTENT_SIZE=0x00200000
++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 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=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_LRO is not set
++# CONFIG_INET_DIAG is not set
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++# CONFIG_PHONET is not set
++# CONFIG_WIRELESS is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++# CONFIG_STANDALONE is not set
++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
++# CONFIG_CONNECTOR is not set
++# CONFIG_MTD is not set
++CONFIG_OF_DEVICE=y
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_FD is not set
++CONFIG_GAMECUBE_DI=y
++CONFIG_GAMECUBE_ARAM=y
++CONFIG_GAMECUBE_SD=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_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=2
++CONFIG_BLK_DEV_RAM_SIZE=4096
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_GAMECUBE_GQR=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++# CONFIG_SCSI_DMA is not set
++# CONFIG_SCSI_NETLINK is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++# CONFIG_MACINTOSH_DRIVERS is not set
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++# CONFIG_MII is not set
++CONFIG_GAMECUBE_BBA=y
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 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
++# CONFIG_IWLWIFI_LEDS is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++# CONFIG_INPUT_MOUSEDEV is not set
++CONFIG_INPUT_JOYDEV=y
++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 is not set
++CONFIG_INPUT_JOYSTICK=y
++# CONFIG_JOYSTICK_ANALOG is not set
++# CONFIG_JOYSTICK_A3D is not set
++# CONFIG_JOYSTICK_ADI is not set
++# CONFIG_JOYSTICK_COBRA is not set
++# CONFIG_JOYSTICK_GF2K is not set
++# CONFIG_JOYSTICK_GRIP is not set
++# CONFIG_JOYSTICK_GRIP_MP is not set
++# CONFIG_JOYSTICK_GUILLEMOT is not set
++# CONFIG_JOYSTICK_INTERACT is not set
++# CONFIG_JOYSTICK_SIDEWINDER is not set
++# CONFIG_JOYSTICK_TMDC is not set
++# CONFIG_JOYSTICK_IFORCE is not set
++# CONFIG_JOYSTICK_WARRIOR is not set
++# CONFIG_JOYSTICK_MAGELLAN is not set
++# CONFIG_JOYSTICK_SPACEORB is not set
++# CONFIG_JOYSTICK_SPACEBALL is not set
++# CONFIG_JOYSTICK_STINGER is not set
++# CONFIG_JOYSTICK_TWIDJOY is not set
++# CONFIG_JOYSTICK_ZHENHUA is not set
++# CONFIG_JOYSTICK_JOYDUMP is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_I8042 is not set
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_LIBPS2 is not set
++# CONFIG_SERIO_RAW is not set
++# CONFIG_SERIO_XILINX_XPS_PS2 is not set
++# CONFIG_GAMEPORT is not set
++CONFIG_GAMECUBE_SI=y
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_DEVKMEM is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++# CONFIG_SERIAL_UARTLITE is not set
++# CONFIG_SERIAL_USBGECKO is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=64
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++
++#
++# EXI support
++#
++CONFIG_GAMECUBE_EXI=y
++# CONFIG_SPI is not set
++CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
++# CONFIG_GPIOLIB is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_REGULATOR is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS 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_OF is not set
++# CONFIG_FB_VGA16 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_GAMECUBE=y
++# CONFIG_FB_IBM_GXT4500 is not set
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++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 is not set
++CONFIG_LOGO_GAMECUBE_CLUT224=y
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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 is not set
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++CONFIG_SND_DRIVERS=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
++CONFIG_SND_PPC=y
++CONFIG_SND_GAMECUBE=y
++CONFIG_SND_GAMECUBE_MIC=m
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
++CONFIG_HID_COMPAT=y
++# CONFIG_USB_SUPPORT is not set
++# CONFIG_MMC is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_ACCESSIBILITY is not set
++# CONFIG_EDAC is not set
++CONFIG_RTC_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
++
++#
++# SPI RTC drivers
++#
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++CONFIG_RTC_DRV_GCN=y
++
++#
++# on-CPU RTC drivers
++#
++# CONFIG_RTC_DRV_PPC is not set
++# CONFIG_DMADEVICES is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING 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_EXT4_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_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA 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=y
++CONFIG_JOLIET=y
++# CONFIG_ZISOFS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_GCDVD_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_KCORE=y
++CONFIG_PROC_SYSCTL=y
++# CONFIG_PROC_PAGE_MONITOR is not set
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE 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_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++CONFIG_ROOT_NFS=y
++# CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_REGISTER_V4 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++CONFIG_CIFS=y
++# 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
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++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
++# CONFIG_DLM is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_HAVE_LMB=y
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# CONFIG_MAGIC_SYSRQ is not set
++# 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_DETECT_SOFTLOCKUP=y
++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
++CONFIG_SCHED_DEBUG=y
++CONFIG_SCHEDSTATS=y
++# CONFIG_TIMER_STATS is not set
++# CONFIG_DEBUG_OBJECTS 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=y
++CONFIG_DEBUG_MUTEXES=y
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++CONFIG_STACKTRACE=y
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_WRITECOUNT is not set
++# CONFIG_DEBUG_MEMORY_INIT is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
++# CONFIG_FAULT_INJECTION is not set
++CONFIG_LATENCYTOP=y
++CONFIG_SYSCTL_SYSCALL_CHECK=y
++CONFIG_NOP_TRACER=y
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_RING_BUFFER=y
++CONFIG_TRACING=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_PREEMPT_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++CONFIG_CONTEXT_SWITCH_TRACER=y
++CONFIG_BOOT_TRACER=y
++# CONFIG_STACK_TRACER is not set
++# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++# CONFIG_KGDB is not set
++# CONFIG_DEBUG_STACKOVERFLOW is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
++# CONFIG_DEBUG_PAGEALLOC is not set
++# CONFIG_CODE_PATCHING_SELFTEST is not set
++# CONFIG_FTR_FIXUP_SELFTEST is not set
++# CONFIG_MSI_BITMAP_SELFTEST is not set
++# CONFIG_XMON is not set
++# CONFIG_IRQSTACKS is not set
++# CONFIG_VIRQ_DEBUG is not set
++# CONFIG_BDI_SWITCH is not set
++# CONFIG_BOOTX_TEXT 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 is not set
++# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
++# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
++# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
++# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
++# CONFIG_PPC_EARLY_DEBUG_44x is not set
++# CONFIG_PPC_EARLY_DEBUG_40x is not set
++# CONFIG_PPC_EARLY_DEBUG_CPM is not set
++CONFIG_PPC_EARLY_DEBUG_USBGECKO=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++# CONFIG_CRYPTO is not set
++# CONFIG_PPC_CLOCK is not set
++# CONFIG_VIRTUALIZATION is not set
+diff --git a/arch/powerpc/configs/wii_defconfig b/arch/powerpc/configs/wii_defconfig
+new file mode 100644
+index 0000000..64d7f19
+--- /dev/null
++++ b/arch/powerpc/configs/wii_defconfig
+@@ -0,0 +1,1224 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.28
++# Mon Jan 12 20:19:45 2009
++#
++# CONFIG_PPC64 is not set
++
++#
++# Processor support
++#
++CONFIG_6xx=y
++# CONFIG_PPC_85xx 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_PPC_FPU=y
++# CONFIG_ALTIVEC is not set
++CONFIG_PPC_STD_MMU=y
++CONFIG_PPC_STD_MMU_32=y
++# CONFIG_PPC_MM_SLICES is not set
++# CONFIG_SMP is not set
++CONFIG_NOT_COHERENT_CACHE=y
++CONFIG_PPC32=y
++CONFIG_WORD_SIZE=32
++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
++CONFIG_MMU=y
++CONFIG_GENERIC_CMOS_UPDATE=y
++CONFIG_GENERIC_TIME=y
++CONFIG_GENERIC_TIME_VSYSCALL=y
++CONFIG_GENERIC_CLOCKEVENTS=y
++CONFIG_GENERIC_HARDIRQS=y
++# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
++CONFIG_IRQ_PER_CPU=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=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_GENERIC_GPIO=y
++# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
++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_OF=y
++# CONFIG_PPC_UDBG_16550 is not set
++# CONFIG_GENERIC_TBSYNC is not set
++CONFIG_AUDIT_ARCH=y
++CONFIG_GENERIC_BUG=y
++# CONFIG_DEFAULT_UIMAGE is not set
++# CONFIG_PPC_DCR_NATIVE is not set
++# CONFIG_PPC_DCR_MMIO is not set
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION="-isobel-wii"
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_CGROUPS is not set
++CONFIG_GROUP_SCHED=y
++CONFIG_FAIR_GROUP_SCHED=y
++# CONFIG_RT_GROUP_SCHED is not set
++CONFIG_USER_SCHED=y
++# CONFIG_CGROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++# CONFIG_NAMESPACES 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_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++CONFIG_KALLSYMS_ALL=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++# CONFIG_ELF_CORE is not set
++CONFIG_COMPAT_BRK=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_AIO=y
++# CONFIG_VM_EVENT_COUNTERS is not set
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++CONFIG_TRACEPOINTS=y
++CONFIG_MARKERS=y
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
++CONFIG_HAVE_IOREMAP_PROT=y
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_ARCH_TRACEHOOK=y
++# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_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"
++CONFIG_CLASSIC_RCU=y
++# CONFIG_FREEZER is not set
++
++#
++# Platform support
++#
++CONFIG_PPC_MULTIPLATFORM=y
++CONFIG_CLASSIC32=y
++# CONFIG_PPC_CHRP is not set
++# CONFIG_MPC5121_ADS is not set
++# CONFIG_MPC5121_GENERIC is not set
++# CONFIG_PPC_MPC52xx is not set
++# CONFIG_PPC_PMAC is not set
++# CONFIG_PPC_CELL is not set
++# CONFIG_PPC_CELL_NATIVE is not set
++# CONFIG_PPC_82xx is not set
++# CONFIG_PQ2ADS is not set
++# CONFIG_PPC_83xx is not set
++# CONFIG_PPC_86xx is not set
++CONFIG_EMBEDDED6xx=y
++# CONFIG_LINKSTATION is not set
++# CONFIG_STORCENTER is not set
++# CONFIG_MPC7448HPC2 is not set
++# CONFIG_PPC_HOLLY is not set
++# CONFIG_PPC_PRPMC2800 is not set
++# CONFIG_PPC_C2K is not set
++# CONFIG_GAMECUBE is not set
++CONFIG_WII=y
++CONFIG_FLIPPER_PIC=y
++CONFIG_GAMECUBE_COMMON=y
++CONFIG_GAMECUBE_RSW=y
++CONFIG_GAMECUBE_UDBG=y
++CONFIG_USBGECKO_UDBG=y
++# CONFIG_GAMECUBE_VIDEO_UDBG is not set
++CONFIG_WII_GPIO=y
++# CONFIG_IPIC is not set
++# CONFIG_MPIC is not set
++# CONFIG_MPIC_WEIRD is not set
++# CONFIG_PPC_I8259 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_FSL_ULI1575 is not set
++
++#
++# Kernel options
++#
++# CONFIG_HIGHMEM is not set
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=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_SCHED_HRTICK is not set
++# CONFIG_PREEMPT_NONE is not set
++# CONFIG_PREEMPT_VOLUNTARY is not set
++CONFIG_PREEMPT=y
++# CONFIG_PREEMPT_RCU is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++# CONFIG_HAVE_AOUT is not set
++CONFIG_BINFMT_MISC=m
++# CONFIG_IOMMU_HELPER is not set
++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
++CONFIG_ARCH_HAS_WALK_MEMORY=y
++CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
++CONFIG_KEXEC=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_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_MIGRATION is not set
++# CONFIG_RESOURCES_64BIT is not set
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_FORCE_MAX_ZONEORDER=11
++CONFIG_PROC_DEVICETREE=y
++# CONFIG_CMDLINE_BOOL is not set
++CONFIG_EXTRA_TARGETS=""
++# CONFIG_PM is not set
++# CONFIG_SECCOMP is not set
++CONFIG_ISA_DMA_API=y
++
++#
++# Bus options
++#
++CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_ISA_DMA=y
++# CONFIG_PCI is not set
++# CONFIG_PCI_DOMAINS is not set
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++# CONFIG_PCCARD is not set
++# CONFIG_HAS_RAPIDIO is not set
++
++#
++# Advanced setup
++#
++CONFIG_ADVANCED_OPTIONS=y
++# CONFIG_LOWMEM_SIZE_BOOL is not set
++CONFIG_LOWMEM_SIZE=0x30000000
++# CONFIG_PAGE_OFFSET_BOOL is not set
++CONFIG_PAGE_OFFSET=0xc0000000
++# CONFIG_KERNEL_START_BOOL is not set
++CONFIG_KERNEL_START=0xc0000000
++CONFIG_PHYSICAL_START=0x00000000
++# CONFIG_TASK_SIZE_BOOL is not set
++CONFIG_TASK_SIZE=0xc0000000
++# CONFIG_CONSISTENT_START_BOOL is not set
++CONFIG_CONSISTENT_START=0xff100000
++# CONFIG_CONSISTENT_SIZE_BOOL is not set
++CONFIG_CONSISTENT_SIZE=0x00200000
++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 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=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_LRO is not set
++# CONFIG_INET_DIAG is not set
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++CONFIG_BT=y
++CONFIG_BT_L2CAP=y
++# CONFIG_BT_SCO is not set
++CONFIG_BT_RFCOMM=y
++# CONFIG_BT_RFCOMM_TTY is not set
++# CONFIG_BT_BNEP is not set
++CONFIG_BT_HIDP=y
++
++#
++# Bluetooth device drivers
++#
++CONFIG_BT_HCIBTUSB=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
++# CONFIG_PHONET is not set
++CONFIG_WIRELESS=y
++# CONFIG_CFG80211 is not set
++CONFIG_WIRELESS_OLD_REGULATORY=y
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++# CONFIG_STANDALONE is not set
++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
++# CONFIG_CONNECTOR is not set
++# CONFIG_MTD is not set
++CONFIG_OF_DEVICE=y
++CONFIG_OF_GPIO=y
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_FD is not set
++CONFIG_GAMECUBE_SD=y
++CONFIG_WII_SD=y
++CONFIG_WII_MEM2=m
++# 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=2
++CONFIG_BLK_DEV_RAM_SIZE=4096
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_GAMECUBE_GQR=m
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=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
++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_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++# CONFIG_MACINTOSH_DRIVERS is not set
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 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
++# CONFIG_IWLWIFI_LEDS 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=y
++CONFIG_USB_NET_AX8817X=y
++# CONFIG_USB_NET_CDCETHER is not set
++# CONFIG_USB_NET_DM9601 is not set
++# CONFIG_USB_NET_SMSC95XX is not set
++# 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_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++CONFIG_INPUT_FF_MEMLESS=m
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
++CONFIG_INPUT_JOYDEV=y
++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 is not set
++CONFIG_INPUT_MOUSE=y
++# CONFIG_MOUSE_PS2 is not set
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_BCM5974 is not set
++# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_MOUSE_GPIO is not set
++CONFIG_INPUT_JOYSTICK=y
++# CONFIG_JOYSTICK_ANALOG is not set
++# CONFIG_JOYSTICK_A3D is not set
++# CONFIG_JOYSTICK_ADI is not set
++# CONFIG_JOYSTICK_COBRA is not set
++# CONFIG_JOYSTICK_GF2K is not set
++# CONFIG_JOYSTICK_GRIP is not set
++# CONFIG_JOYSTICK_GRIP_MP is not set
++# CONFIG_JOYSTICK_GUILLEMOT is not set
++# CONFIG_JOYSTICK_INTERACT is not set
++# CONFIG_JOYSTICK_SIDEWINDER is not set
++# CONFIG_JOYSTICK_TMDC is not set
++# CONFIG_JOYSTICK_IFORCE is not set
++# CONFIG_JOYSTICK_WARRIOR is not set
++# CONFIG_JOYSTICK_MAGELLAN is not set
++# CONFIG_JOYSTICK_SPACEORB is not set
++# CONFIG_JOYSTICK_SPACEBALL is not set
++# CONFIG_JOYSTICK_STINGER is not set
++# CONFIG_JOYSTICK_TWIDJOY is not set
++# CONFIG_JOYSTICK_ZHENHUA is not set
++# CONFIG_JOYSTICK_JOYDUMP is not set
++# CONFIG_JOYSTICK_XPAD is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++CONFIG_INPUT_MISC=y
++# 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_CM109 is not set
++CONFIG_INPUT_UINPUT=y
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_I8042 is not set
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_LIBPS2 is not set
++# CONFIG_SERIO_RAW is not set
++# CONFIG_SERIO_XILINX_XPS_PS2 is not set
++# CONFIG_GAMEPORT is not set
++CONFIG_GAMECUBE_SI=y
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_DEVKMEM is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++# CONFIG_SERIAL_UARTLITE is not set
++# CONFIG_SERIAL_USBGECKO is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=64
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++CONFIG_NVRAM=y
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++
++#
++# EXI support
++#
++CONFIG_GAMECUBE_EXI=y
++# CONFIG_SPI is not set
++CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_DEBUG_GPIO is not set
++CONFIG_GPIO_SYSFS=y
++
++#
++# Memory mapped GPIO expanders:
++#
++# CONFIG_GPIO_XILINX is not set
++
++#
++# I2C GPIO expanders:
++#
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_REGULATOR is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS 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_OF is not set
++# CONFIG_FB_VGA16 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_GAMECUBE=y
++# CONFIG_FB_IBM_GXT4500 is not set
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# 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
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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 is not set
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++CONFIG_SND_DRIVERS=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
++CONFIG_SND_PPC=y
++CONFIG_SND_GAMECUBE=y
++CONFIG_SND_GAMECUBE_MIC=m
++# CONFIG_SND_USB is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_HID_PID is not set
++# CONFIG_USB_HIDDEV is not set
++
++#
++# Special HID drivers
++#
++CONFIG_HID_COMPAT=y
++CONFIG_HID_A4TECH=m
++CONFIG_HID_APPLE=m
++CONFIG_HID_BELKIN=m
++CONFIG_HID_BRIGHT=m
++CONFIG_HID_CHERRY=m
++CONFIG_HID_CHICONY=m
++CONFIG_HID_CYPRESS=m
++CONFIG_HID_DELL=m
++CONFIG_HID_EZKEY=m
++CONFIG_HID_GYRATION=m
++CONFIG_HID_LOGITECH=m
++# CONFIG_LOGITECH_FF is not set
++# CONFIG_LOGIRUMBLEPAD2_FF is not set
++CONFIG_HID_MICROSOFT=m
++CONFIG_HID_MONTEREY=m
++CONFIG_HID_PANTHERLORD=m
++# CONFIG_PANTHERLORD_FF is not set
++CONFIG_HID_PETALYNX=m
++CONFIG_HID_SAMSUNG=m
++CONFIG_HID_SONY=m
++CONFIG_HID_SUNPLUS=m
++CONFIG_THRUSTMASTER_FF=m
++CONFIG_ZEROPLUS_FF=m
++CONFIG_USB_SUPPORT=y
++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
++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_OTG_WHITELIST is not set
++# CONFIG_USB_OTG_BLACKLIST_HUB is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++CONFIG_USB_WII_HCD=y
++# CONFIG_USB_HWA_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++CONFIG_USB_LIBUSUAL=y
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# 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_SEVSEG 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
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++# CONFIG_USB_GADGET is not set
++# CONFIG_MMC is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_ACCESSIBILITY is not set
++# CONFIG_EDAC is not set
++CONFIG_RTC_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
++
++#
++# SPI RTC drivers
++#
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++CONFIG_RTC_DRV_GCN=y
++
++#
++# on-CPU RTC drivers
++#
++# CONFIG_RTC_DRV_PPC is not set
++# CONFIG_DMADEVICES is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING 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_EXT4_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_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA 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=y
++CONFIG_JOLIET=y
++# CONFIG_ZISOFS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_GCDVD_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_KCORE=y
++CONFIG_PROC_SYSCTL=y
++# CONFIG_PROC_PAGE_MONITOR is not set
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE 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_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++CONFIG_ROOT_NFS=y
++# CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_REGISTER_V4 is not set
++# 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
++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
++# CONFIG_DLM is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_HAVE_LMB=y
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++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_DETECT_SOFTLOCKUP=y
++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
++CONFIG_SCHED_DEBUG=y
++CONFIG_SCHEDSTATS=y
++# CONFIG_TIMER_STATS is not set
++# CONFIG_DEBUG_OBJECTS 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=y
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++CONFIG_STACKTRACE=y
++# 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_WRITECOUNT is not set
++# CONFIG_DEBUG_MEMORY_INIT is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
++# CONFIG_FAULT_INJECTION is not set
++CONFIG_LATENCYTOP=y
++CONFIG_SYSCTL_SYSCALL_CHECK=y
++CONFIG_NOP_TRACER=y
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_RING_BUFFER=y
++CONFIG_TRACING=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_PREEMPT_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++CONFIG_CONTEXT_SWITCH_TRACER=y
++CONFIG_BOOT_TRACER=y
++# CONFIG_STACK_TRACER is not set
++# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++# CONFIG_KGDB is not set
++# CONFIG_DEBUG_STACKOVERFLOW is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
++# CONFIG_DEBUG_PAGEALLOC is not set
++# CONFIG_CODE_PATCHING_SELFTEST is not set
++# CONFIG_FTR_FIXUP_SELFTEST is not set
++# CONFIG_MSI_BITMAP_SELFTEST is not set
++# CONFIG_XMON is not set
++# CONFIG_IRQSTACKS is not set
++# CONFIG_VIRQ_DEBUG is not set
++# CONFIG_BDI_SWITCH is not set
++# CONFIG_BOOTX_TEXT 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 is not set
++# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
++# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
++# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
++# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
++# CONFIG_PPC_EARLY_DEBUG_44x is not set
++# CONFIG_PPC_EARLY_DEBUG_40x is not set
++# CONFIG_PPC_EARLY_DEBUG_CPM is not set
++CONFIG_PPC_EARLY_DEBUG_USBGECKO=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++# CONFIG_CRYPTO is not set
++# CONFIG_PPC_CLOCK is not set
++CONFIG_PPC_LIB_RHEAP=y
++# CONFIG_VIRTUALIZATION is not set
+diff --git a/arch/powerpc/include/asm/starlet.h b/arch/powerpc/include/asm/starlet.h
+new file mode 100644
+index 0000000..b8f77c7
+--- /dev/null
++++ b/arch/powerpc/include/asm/starlet.h
+@@ -0,0 +1,234 @@
++/*
++ * arch/powerpc/include/asm/starlet.h
++ *
++ * Nintendo Wii starlet processor definitions
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __ASM_POWERPC_STARLET_H
++#define __ASM_POWERPC_STARLET_H
++
++#include <linux/types.h>
++#include <linux/spinlock_types.h>
++#include <linux/platform_device.h>
++#include <linux/dmapool.h>
++#include <linux/dma-mapping.h>
++#include <linux/list.h>
++#include <linux/scatterlist.h>
++#include <linux/timer.h>
++#include <asm/rheap.h>
++
++#define STARLET_EINVAL -4
++
++
++#define STARLET_IPC_DMA_ALIGN 0x1f /* 32 bytes */
++
++struct starlet_ipc_request;
++
++/* input/output heap */
++struct starlet_ioh {
++ spinlock_t lock;
++ rh_info_t *rheap;
++ unsigned long base_phys;
++ void *base;
++ size_t size;
++};
++
++/* pseudo-scatterlist support for the input/output heap */
++struct starlet_ioh_sg {
++ void *buf;
++ size_t len;
++ dma_addr_t dma_addr;
++};
++
++/* inter-process communication device abstraction */
++struct starlet_ipc_device {
++ unsigned long flags;
++
++ void __iomem *io_base;
++ int irq;
++
++ struct dma_pool *dma_pool; /* to allocate requests */
++ struct starlet_ioh *ioh; /* to allocate special io buffers */
++
++ unsigned int random_id;
++
++ spinlock_t list_lock;
++ struct list_head outstanding_list;
++ unsigned long nr_outstanding;
++ struct list_head pending_list;
++ unsigned long nr_pending;
++
++ struct timer_list timer;
++
++ struct starlet_ipc_request *req; /* for requests causing a ios reboot */
++
++ struct device *dev;
++};
++
++/* iovec entry suitable for ioctlv */
++struct starlet_iovec {
++ dma_addr_t dma_addr;
++ u32 dma_len;
++};
++
++typedef int (*starlet_ipc_callback_t)(struct starlet_ipc_request *req);
++
++struct starlet_ipc_request {
++ /* begin starlet firmware request format */
++ u32 cmd; /* 0x00 */
++ s32 result; /* 0x04 */
++ union { /* 0x08 */
++ s32 fd;
++ u32 req_cmd;
++ };
++ union {
++ struct {
++ dma_addr_t pathname; /* 0x0c */
++ u32 mode; /* 0x10 */
++ } open;
++ struct {
++ u32 request; /* 0x0c */
++ dma_addr_t ibuf; /* 0x10 */
++ u32 ilen; /* 0x14 */
++ dma_addr_t obuf; /* 0x18 */
++ u32 olen; /* 0x1c */
++ } ioctl;
++ struct {
++ u32 request; /* 0x0c */
++ u32 argc_in; /* 0x10 */
++ u32 argc_io; /* 0x14 */
++ dma_addr_t iovec_da; /* 0x18 */
++ } ioctlv;
++ u32 argv[5]; /* 0x0c,0x10,0x14,0x18,0x1c */
++ };
++ /* end starlet firmware request format */
++
++ /*
++ * A signature is used to discard bogus requests from earlier
++ * IPC instances.
++ */
++ unsigned int sig;
++
++ dma_addr_t dma_addr; /* request dma address */
++
++ /* ioctlv related data */
++ struct starlet_iovec *iovec;
++ size_t iovec_size;
++
++ unsigned sgl_nents_in;
++ unsigned sgl_nents_io;
++ union {
++ struct scatterlist *sgl_in;
++ struct starlet_ioh_sg *ioh_sgl_in;
++ };
++ union {
++ struct scatterlist *sgl_io;
++ struct starlet_ioh_sg *ioh_sgl_io;
++ };
++
++ void *done_data;
++ starlet_ipc_callback_t done;
++
++ starlet_ipc_callback_t complete;
++
++ unsigned long jiffies;
++
++ struct list_head node; /* for queueing */
++
++ struct starlet_ipc_device *ipc_dev;
++};
++
++
++
++/* from starlet-malloc.c */
++
++extern int starlet_malloc_lib_bootstrap(struct resource *mem);
++
++extern void *starlet_kzalloc(size_t size, gfp_t flags);
++extern void starlet_kfree(void *ptr);
++
++extern void *starlet_ioh_kzalloc(size_t size);
++extern void starlet_ioh_kfree(void *ptr);
++
++extern unsigned long starlet_ioh_virt_to_phys(void *ptr);
++
++extern void starlet_ioh_sg_init_table(struct starlet_ioh_sg *sgl,
++ unsigned int nents);
++extern void starlet_ioh_sg_set_buf(struct starlet_ioh_sg *sg,
++ void *buf, size_t len);
++
++#define starlet_ioh_for_each_sg(sgl, sg, nr, __i) \
++ for (__i = 0, sg = (sgl); __i < nr; __i++, sg++)
++
++extern int starlet_ioh_dma_map_sg(struct device *dev,
++ struct starlet_ioh_sg *sgl, int nents,
++ enum dma_data_direction direction);
++extern void starlet_ioh_dma_unmap_sg(struct device *dev,
++ struct starlet_ioh_sg *sgl, int nents,
++ enum dma_data_direction direction);
++/* from starlet-ipc.c */
++
++extern struct starlet_ipc_device *starlet_ipc_get_device(void);
++
++extern struct starlet_ipc_request *
++starlet_ipc_alloc_request(struct starlet_ipc_device *ipc_dev, gfp_t flags);
++extern void starlet_ipc_free_request(struct starlet_ipc_request *req);
++
++
++extern int starlet_open(const char *pathname, int flags);
++extern int starlet_close(int fd);
++
++extern int starlet_ioctl(int fd, int request,
++ void *ibuf, size_t ilen,
++ void *obuf, size_t olen);
++extern int starlet_ioctl_nowait(int fd, int request,
++ void *ibuf, size_t ilen,
++ void *obuf, size_t olen,
++ starlet_ipc_callback_t callback,
++ void *arg);
++
++extern int starlet_ioctlv(int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_out,
++ struct scatterlist *sgl_out);
++extern int starlet_ioctlv_nowait(int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_out,
++ struct scatterlist *sgl_out,
++ starlet_ipc_callback_t callback,
++ void *arg);
++extern int starlet_ioctlv_and_reboot(int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_out,
++ struct scatterlist *sgl_out);
++
++extern int starlet_ioh_ioctlv(int fd, int request,
++ unsigned int nents_in,
++ struct starlet_ioh_sg *ioh_sgl_in,
++ unsigned int nents_io,
++ struct starlet_ioh_sg *ioh_sgl_io);
++extern int starlet_ioh_ioctlv_nowait(int fd, int request,
++ unsigned int nents_in,
++ struct starlet_ioh_sg *ioh_sgl_in,
++ unsigned int nents_io,
++ struct starlet_ioh_sg *ioh_sgl_io,
++ starlet_ipc_callback_t callback,
++ void *arg);
++
++/* from starlet-stm.c */
++
++extern void starlet_stm_restart(void);
++extern void starlet_stm_power_off(void);
++
++#endif /* __ASM_POWERPC_STARLET_H */
+diff --git a/arch/powerpc/include/asm/udbg.h b/arch/powerpc/include/asm/udbg.h
+index 6418cee..11ecd37 100644
+--- a/arch/powerpc/include/asm/udbg.h
++++ b/arch/powerpc/include/asm/udbg.h
+@@ -50,6 +50,7 @@ extern void __init udbg_init_btext(void);
+ extern void __init udbg_init_44x_as1(void);
+ extern void __init udbg_init_40x_realmode(void);
+ extern void __init udbg_init_cpm(void);
++extern void __init udbg_init_usbgecko(void);
+
+ #endif /* __KERNEL__ */
+ #endif /* _ASM_POWERPC_UDBG_H */
+diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
+index 7e87195..daf94a5 100644
+--- a/arch/powerpc/kernel/cputable.c
++++ b/arch/powerpc/kernel/cputable.c
+@@ -644,11 +644,11 @@ static struct cpu_spec __initdata cpu_specs[] = {
+ .machine_check = machine_check_generic,
+ .platform = "ppc750",
+ },
+- { /* 750CL */
+- .pvr_mask = 0xfffff0f0,
+- .pvr_value = 0x00087010,
+- .cpu_name = "750CL",
+- .cpu_features = CPU_FTRS_750CL,
++ { /* 745/755 */
++ .pvr_mask = 0xfffff000,
++ .pvr_value = 0x00083000,
++ .cpu_name = "745/755",
++ .cpu_features = CPU_FTRS_750,
+ .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
+ .icache_bsize = 32,
+ .dcache_bsize = 32,
+@@ -658,11 +658,11 @@ static struct cpu_spec __initdata cpu_specs[] = {
+ .machine_check = machine_check_generic,
+ .platform = "ppc750",
+ },
+- { /* 745/755 */
+- .pvr_mask = 0xfffff000,
+- .pvr_value = 0x00083000,
+- .cpu_name = "745/755",
+- .cpu_features = CPU_FTRS_750,
++ { /* 750CL (and "Broadway") */
++ .pvr_mask = 0xfffff0e0,
++ .pvr_value = 0x00087000,
++ .cpu_name = "750CL",
++ .cpu_features = CPU_FTRS_750CL,
+ .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE,
+ .icache_bsize = 32,
+ .dcache_bsize = 32,
+diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
+index 0c32682..ae6825a 100644
+--- a/arch/powerpc/kernel/head_32.S
++++ b/arch/powerpc/kernel/head_32.S
+@@ -159,6 +159,9 @@ __after_mmu_off:
+ #ifdef CONFIG_PPC_EARLY_DEBUG_CPM
+ bl setup_cpm_bat
+ #endif
++#ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO
++ bl setup_usbgecko_bat
++#endif
+
+ /*
+ * Call setup_cpu for CPU 0 and initialize 6xx Idle
+@@ -1253,6 +1256,24 @@ setup_cpm_bat:
+ blr
+ #endif
+
++#ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO
++setup_usbgecko_bat:
++ /* prepare a BAT for early io */
++ lis r8, 0x0c00
++ ori r8, r8, 0x002a /* uncached, guarded ,rw */
++ lis r11, 0xcc00
++ ori r11, r11, 0x3 /* 128K */
++#ifdef CONFIG_WII
++ oris r8, r8, 0x0100
++ oris r11, r11, 0x0100
++#endif
++ mtspr SPRN_DBAT1L, r8
++ mtspr SPRN_DBAT1U, r11
++ sync
++ isync
++ blr
++#endif
++
+ #ifdef CONFIG_8260
+ /* Jump into the system reset for the rom.
+ * We first disable the MMU, and then jump to the ROM reset address.
+diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh
+index ea3a2ec..980cd4e 100644
+--- a/arch/powerpc/kernel/prom_init_check.sh
++++ b/arch/powerpc/kernel/prom_init_check.sh
+@@ -17,7 +17,7 @@
+ # it to the list below:
+
+ WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush
+-_end enter_prom memcpy memset reloc_offset __secondary_hold
++_end enter_prom memcmp memcpy memset reloc_offset __secondary_hold
+ __secondary_hold_acknowledge __secondary_hold_spinloop __start
+ strcmp strcpy strlcpy strlen strncmp strstr logo_linux_clut224
+ reloc_got2 kernstart_addr memstart_addr"
+diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
+index 7d6c9bb..a85bfb0 100644
+--- a/arch/powerpc/kernel/udbg.c
++++ b/arch/powerpc/kernel/udbg.c
+@@ -59,6 +59,8 @@ void __init udbg_early_init(void)
+ udbg_init_40x_realmode();
+ #elif defined(CONFIG_PPC_EARLY_DEBUG_CPM)
+ udbg_init_cpm();
++#elif defined(CONFIG_PPC_EARLY_DEBUG_USBGECKO)
++ udbg_init_usbgecko();
+ #endif
+
+ #ifdef CONFIG_PPC_EARLY_DEBUG
+diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
+index c31d6d2..62f8954 100644
+--- a/arch/powerpc/mm/pgtable_32.c
++++ b/arch/powerpc/mm/pgtable_32.c
+@@ -199,9 +199,19 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
+ * mem_init() sets high_memory so only do the check after that.
+ */
+ if (mem_init_done && (p < virt_to_phys(high_memory))) {
+- printk("__ioremap(): phys addr 0x%llx is RAM lr %p\n",
+- (unsigned long long)p, __builtin_return_address(0));
+- return NULL;
++ /*
++ * On some systems, though, we may want to remap normal RAM
++ * that we have memreserve'd at the device tree.
++ * But we can't do that safely if we are using BATs.
++ *
++ */
++ if (!__map_without_bats) {
++ printk(KERN_WARNING
++ "__ioremap(): phys addr 0x%llx is RAM lr %p\n",
++ (unsigned long long)p,
++ __builtin_return_address(0));
++ return NULL;
++ }
+ }
+
+ if (size == 0)
+diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
+index 548efa5..36e041c 100644
+--- a/arch/powerpc/platforms/Kconfig.cputype
++++ b/arch/powerpc/platforms/Kconfig.cputype
+@@ -250,7 +250,7 @@ config NR_CPUS
+
+ config NOT_COHERENT_CACHE
+ bool
+- depends on 4xx || 8xx || E200 || PPC_MPC512x
++ depends on 4xx || 8xx || E200 || PPC_MPC512x || GAMECUBE_COMMON
+ default y
+
+ config CHECK_CACHE_COHERENCY
+diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig
+index 4f9f818..d5a76c3 100644
+--- a/arch/powerpc/platforms/embedded6xx/Kconfig
++++ b/arch/powerpc/platforms/embedded6xx/Kconfig
+@@ -90,3 +90,90 @@ config MPC10X_OPENPIC
+ config MPC10X_STORE_GATHERING
+ bool "Enable MPC10x store gathering"
+ depends on MPC10X_BRIDGE
++
++config GAMECUBE
++ bool "Nintendo-GameCube"
++ depends on EMBEDDED6xx
++ select GAMECUBE_COMMON
++ help
++ Select GAMECUBE if configuring for the Nintendo GameCube.
++ More information at: <http://gc-linux.sourceforge.net/>
++
++config WII
++ bool "Nintendo-Wii"
++ depends on EMBEDDED6xx
++ select GAMECUBE_COMMON
++ select PPC_LIB_RHEAP
++ help
++ Select WII if configuring for the Nintendo Wii.
++ More information at: <http://gc-linux.sourceforge.net/>
++
++config FLIPPER_PIC
++ bool
++ default n
++
++config GAMECUBE_COMMON
++ bool
++ select NOT_COHERENT_CACHE
++ select FLIPPER_PIC
++ default n
++
++config GAMECUBE_UDBG
++ bool "Nintendo GameCube/Wii udbg support"
++ depends on GAMECUBE_COMMON
++ default n
++ help
++ If you say yes to this option, you will be able to choose between
++ several udbg drivers available for the Nintendo GameCube/Wii.
++
++ If in doubt, say N here.
++
++choice
++ prompt "Nintendo GameCube/Wii udbg drivers"
++ depends on GAMECUBE_UDBG
++
++config USBGECKO_UDBG
++ bool "USB Gecko udbg console for the Nintendo GameCube/Wii"
++ help
++ If you say yes to this option, support will be included for the
++ USB Gecko adapter as an udbg console.
++ The USB Gecko is a EXI to USB Serial converter that can be plugged
++ into a memcard slot in the Nintendo GameCube/Wii.
++
++ This driver bypasses the EXI layer completely.
++
++ If in doubt, say N here.
++
++config GAMECUBE_VIDEO_UDBG
++ bool "Nintendo GameCube/Wii framebuffer udbg console"
++ select FONTS
++ select FONT_8x16
++ help
++ If you say yes to this option, support will be included for a
++ framebuffer based udbg console for the Nintendo GameCube/Wii.
++
++ If in doubt, say N here.
++
++endchoice
++
++config GAMECUBE_RSW
++ bool "Nintendo GameCube/Wii reset switch/button"
++ depends on GAMECUBE_COMMON
++ default y
++ help
++ If you say yes to this option, support will be included for the
++ reset switch/button of the Nintendo GameCube/Wii.
++
++ If in doubt, say Y here.
++
++config WII_GPIO
++ bool "Nintendo Wii GPIO support"
++ depends on GPIOLIB
++ default y
++ help
++ If you say yes to this option, support will be included for the
++ Nintendo Wii GPIO lines that control, for example, the sensor
++ bar IR leds, the front led, or the eject switch of the disk unit.
++
++ If in doubt, say Y here.
++
+diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile
+index 0773c08..8a080ba 100644
+--- a/arch/powerpc/platforms/embedded6xx/Makefile
++++ b/arch/powerpc/platforms/embedded6xx/Makefile
+@@ -7,3 +7,12 @@ obj-$(CONFIG_STORCENTER) += storcenter.o
+ obj-$(CONFIG_PPC_HOLLY) += holly.o
+ obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o
+ obj-$(CONFIG_PPC_C2K) += c2k.o
++obj-$(CONFIG_GAMECUBE) += gamecube.o gamecube_dev.o
++obj-$(CONFIG_WII) += wii.o wii_dev.o \
++ starlet-ipc.o starlet-malloc.o \
++ starlet-stm.o starlet-es.o
++obj-$(CONFIG_FLIPPER_PIC) += flipper-pic.o
++obj-$(CONFIG_USBGECKO_UDBG) += usbgecko_udbg.o
++obj-$(CONFIG_GAMECUBE_VIDEO_UDBG) += gcnvi_udbg.o
++obj-$(CONFIG_GAMECUBE_RSW) += gcn-rsw.o
++obj-$(CONFIG_WII_GPIO) += starlet-gpio.o
+diff --git a/arch/powerpc/platforms/embedded6xx/flipper-pic.c b/arch/powerpc/platforms/embedded6xx/flipper-pic.c
+new file mode 100644
+index 0000000..d836103
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/flipper-pic.c
+@@ -0,0 +1,217 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/flipper-pic.c
++ *
++ * Nintendo GameCube/Wii interrupt controller support.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/irq.h>
++#include <linux/of.h>
++#include <asm/io.h>
++
++#include "flipper-pic.h"
++
++
++#define DRV_MODULE_NAME "flipper-pic"
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++/*
++ * IRQ chip hooks.
++ *
++ */
++
++static void flipper_pic_mask_and_ack(unsigned int virq)
++{
++ int irq = virq_to_hw(virq);
++ void __iomem *io_base = get_irq_chip_data(virq);
++
++ clear_bit(irq, io_base + FLIPPER_IMR);
++ set_bit(irq, io_base + FLIPPER_ICR);
++}
++
++static void flipper_pic_ack(unsigned int virq)
++{
++ int irq = virq_to_hw(virq);
++ void __iomem *io_base = get_irq_chip_data(virq);
++
++ set_bit(irq, io_base + FLIPPER_ICR);
++}
++
++static void flipper_pic_mask(unsigned int virq)
++{
++ int irq = virq_to_hw(virq);
++ void __iomem *io_base = get_irq_chip_data(virq);
++
++ clear_bit(irq, io_base + FLIPPER_IMR);
++}
++
++static void flipper_pic_unmask(unsigned int virq)
++{
++ int irq = virq_to_hw(virq);
++ void __iomem *io_base = get_irq_chip_data(virq);
++
++ set_bit(irq, io_base + FLIPPER_IMR);
++}
++
++
++static struct irq_chip flipper_pic = {
++ .typename = "flipper-pic",
++ .ack = flipper_pic_ack,
++ .mask_ack = flipper_pic_mask_and_ack,
++ .mask = flipper_pic_mask,
++ .unmask = flipper_pic_unmask,
++};
++
++/*
++ * IRQ host hooks.
++ *
++ */
++
++static struct irq_host *flipper_irq_host;
++
++static int flipper_pic_map(struct irq_host *h, unsigned int virq,
++ irq_hw_number_t hwirq)
++{
++ set_irq_chip_data(virq, h->host_data);
++ set_irq_chip_and_handler(virq, &flipper_pic, handle_level_irq);
++ return 0;
++}
++
++static void flipper_pic_unmap(struct irq_host *h, unsigned int irq)
++{
++ set_irq_chip_data(irq, NULL);
++ set_irq_chip(irq, NULL);
++}
++
++static int flipper_pic_match(struct irq_host *h, struct device_node *np)
++{
++ return 1;
++}
++
++
++static struct irq_host_ops flipper_irq_host_ops = {
++ .map = flipper_pic_map,
++ .unmap = flipper_pic_unmap,
++ .match = flipper_pic_match,
++};
++
++/*
++ * Platform hooks.
++ *
++ */
++
++struct irq_host * __init flipper_pic_init(struct device_node *np)
++{
++ struct irq_host *irq_host;
++ struct resource res;
++ void __iomem *io_base;
++ int retval;
++
++ retval = of_address_to_resource(np, 0, &res);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return NULL;
++ }
++ io_base = ioremap(res.start, res.end - res.start + 1);
++
++ drv_printk(KERN_INFO, "controller at 0x%08x mapped to 0x%p\n",
++ res.start, io_base);
++
++ /* mask and ack all IRQs */
++ out_be32(io_base + FLIPPER_IMR, 0x00000000);
++ out_be32(io_base + FLIPPER_ICR, 0xffffffff);
++
++ irq_host = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR, FLIPPER_NR_IRQS,
++ &flipper_irq_host_ops, -1);
++ if (!irq_host) {
++ drv_printk(KERN_ERR, "failed to allocate irq_host\n");
++ return NULL;
++ }
++
++ irq_host->host_data = io_base;
++
++ return irq_host;
++}
++
++unsigned int flipper_pic_get_irq(void)
++{
++ void __iomem *io_base = flipper_irq_host->host_data;
++ int irq;
++ u32 irq_status;
++
++ irq_status = in_be32(io_base + FLIPPER_ICR) &
++ in_be32(io_base + FLIPPER_IMR);
++ if (irq_status == 0)
++ return -1; /* no more IRQs pending */
++
++ __asm__ __volatile__("cntlzw %0,%1" : "=r"(irq) : "r"(irq_status));
++ return irq_linear_revmap(flipper_irq_host, 31 - irq);
++}
++
++/*
++ * Probe function.
++ *
++ */
++
++void __init flipper_pic_probe(void)
++{
++ struct device_node *np;
++
++ np = of_find_compatible_node(NULL, NULL, "nintendo,flipper-pic");
++ BUG_ON(!np);
++
++ flipper_irq_host = flipper_pic_init(np);
++ BUG_ON(!flipper_irq_host);
++
++ irq_set_default_host(flipper_irq_host);
++
++ of_node_put(np);
++}
++
++/*
++ * Misc functions related to the flipper chipset.
++ *
++ */
++
++/*
++ * Resets the platform.
++ */
++void flipper_platform_reset(void)
++{
++ void __iomem *io_base;
++
++ if (flipper_irq_host && flipper_irq_host->host_data) {
++ io_base = flipper_irq_host->host_data;
++ out_8(io_base + FLIPPER_RESET, 0x00);
++ }
++}
++
++/*
++ * Returns non-zero if the reset button is pressed.
++ */
++int flipper_is_reset_button_pressed(void)
++{
++ void __iomem *io_base;
++ u32 icr;
++
++ if (flipper_irq_host && flipper_irq_host->host_data) {
++ io_base = flipper_irq_host->host_data;
++ icr = in_be32(io_base + FLIPPER_ICR);
++ drv_printk(KERN_INFO, "%x\n", icr);
++ return !(icr & FLIPPER_ICR_RSS);
++ }
++ return 0;
++}
++
+diff --git a/arch/powerpc/platforms/embedded6xx/flipper-pic.h b/arch/powerpc/platforms/embedded6xx/flipper-pic.h
+new file mode 100644
+index 0000000..483bee7
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/flipper-pic.h
+@@ -0,0 +1,41 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/flipper-pic.h
++ *
++ * Nintendo GameCube/Wii interrupt controller support.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __FLIPPER_PIC_H
++#define __FLIPPER_PIC_H
++
++#define FLIPPER_NR_IRQS 32
++
++/*
++ * Each interrupt has a corresponding bit in both
++ * the Interrupt Cause (ICR) and Interrupt Mask (IMR) registers.
++ *
++ * Enabling/disabling an interrupt line involves asserting/clearing
++ * the corresponding bit in IMR. ACK'ing a request simply involves
++ * asserting the corresponding bit in ICR.
++ */
++#define FLIPPER_ICR 0x00
++#define FLIPPER_ICR_RSS (1<<16) /* reset switch state */
++
++#define FLIPPER_IMR 0x04
++
++#define FLIPPER_RESET 0x24
++
++unsigned int flipper_pic_get_irq(void);
++void __init flipper_pic_probe(void);
++
++void flipper_platform_reset(void);
++int flipper_is_reset_button_pressed(void);
++
++#endif
+diff --git a/arch/powerpc/platforms/embedded6xx/gamecube.c b/arch/powerpc/platforms/embedded6xx/gamecube.c
+new file mode 100644
+index 0000000..b3b4db9
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/gamecube.c
+@@ -0,0 +1,111 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/gamecube.c
++ *
++ * Nintendo GameCube board-specific support
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/irq.h>
++#include <linux/kexec.h>
++#include <linux/seq_file.h>
++
++#include <asm/io.h>
++#include <asm/machdep.h>
++#include <asm/prom.h>
++#include <asm/time.h>
++#include <asm/udbg.h>
++
++#include "flipper-pic.h"
++#include "usbgecko_udbg.h"
++
++
++static void gamecube_restart(char *cmd)
++{
++ local_irq_disable();
++ flipper_platform_reset();
++ /* spin until power button pressed */
++ for (;;)
++ cpu_relax();
++}
++
++static void gamecube_power_off(void)
++{
++ local_irq_disable();
++ /* spin until power button pressed */
++ for (;;)
++ cpu_relax();
++}
++
++static void gamecube_halt(void)
++{
++ gamecube_restart(NULL);
++}
++
++static void gamecube_show_cpuinfo(struct seq_file *m)
++{
++ seq_printf(m, "vendor\t\t: IBM\n");
++ seq_printf(m, "machine\t\t: Nintendo GameCube\n");
++}
++
++static void gamecube_setup_arch(void)
++{
++}
++
++static void __init gamecube_init_early(void)
++{
++ ug_udbg_init();
++}
++
++static int __init gamecube_probe(void)
++{
++ unsigned long dt_root;
++
++ dt_root = of_get_flat_dt_root();
++ if (!of_flat_dt_is_compatible(dt_root, "nintendo,gamecube"))
++ return 0;
++
++ return 1;
++}
++
++static void gamecube_shutdown(void)
++{
++ /* currently not used */
++}
++
++#ifdef CONFIG_KEXEC
++static int gamecube_kexec_prepare(struct kimage *image)
++{
++ return 0;
++}
++#endif /* CONFIG_KEXEC */
++
++
++define_machine(gamecube) {
++ .name = "gamecube",
++ .probe = gamecube_probe,
++ .setup_arch = gamecube_setup_arch,
++ .init_early = gamecube_init_early,
++ .show_cpuinfo = gamecube_show_cpuinfo,
++ .restart = gamecube_restart,
++ .power_off = gamecube_power_off,
++ .halt = gamecube_halt,
++ .init_IRQ = flipper_pic_probe,
++ .get_irq = flipper_pic_get_irq,
++ .calibrate_decr = generic_calibrate_decr,
++ .progress = udbg_progress,
++ .machine_shutdown = gamecube_shutdown,
++#ifdef CONFIG_KEXEC
++ .machine_kexec_prepare = gamecube_kexec_prepare,
++ .machine_kexec = default_machine_kexec,
++#endif
++};
++
+diff --git a/arch/powerpc/platforms/embedded6xx/gamecube_dev.c b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c
+new file mode 100644
+index 0000000..13e1f73
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c
+@@ -0,0 +1,34 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/gamecube_dev.c
++ *
++ * Nintendo GameCube platform device setup.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/of_platform.h>
++
++#include <asm/machdep.h>
++
++static struct of_device_id gamecube_of_bus[] = {
++ { .compatible = "nintendo,flipper", },
++ { },
++};
++
++static int __init gamecube_device_probe(void)
++{
++ if (!machine_is(gamecube))
++ return 0;
++
++ of_platform_bus_probe(NULL, gamecube_of_bus, NULL);
++ return 0;
++}
++device_initcall(gamecube_device_probe);
+diff --git a/arch/powerpc/platforms/embedded6xx/gcn-rsw.c b/arch/powerpc/platforms/embedded6xx/gcn-rsw.c
+new file mode 100644
+index 0000000..0bb20f0
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/gcn-rsw.c
+@@ -0,0 +1,308 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/gcn-rsw.c
++ *
++ * Nintendo GameCube/Wii reset switch (RSW) driver.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004 Stefan Esser
++ * Copyright (C) 2004,2005,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/module.h>
++#include <linux/init.h>
++#include <linux/of_platform.h>
++#include <linux/interrupt.h>
++#include <linux/io.h>
++#include <linux/spinlock.h>
++#include <linux/delay.h>
++#include <linux/reboot.h>
++#include <linux/kexec.h>
++
++/* for flipper hardware registers */
++#include "flipper-pic.h"
++
++#define DRV_MODULE_NAME "gcn-rsw"
++#define DRV_DESCRIPTION "Nintendo GameCube/Wii Reset SWitch (RSW) driver"
++#define DRV_AUTHOR "Stefan Esser <se@nopiracy.de>, " \
++ "Albert Herranz"
++
++static char rsw_driver_version[] = "1.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++#define RSW_NORMAL_TIMEOUT 3 /* seconds */
++#define RSW_EMERGENCY_PUSHES 10
++
++enum rsw_state {
++ IDLE = 0, /* nothing to do */
++ NORMAL_RESET, /* reboot requested */
++ EMERGENCY_RESET, /* try emergency reboot */
++};
++
++struct rsw_drvdata {
++ enum rsw_state state;
++ struct timer_list timer;
++ unsigned long jiffies;
++ int pushes;
++ int timeout;
++ spinlock_t lock;
++
++ void __iomem *io_base;
++ unsigned int irq;
++
++ struct device *dev;
++};
++
++
++/*
++ * Tells if the reset button is pressed.
++ */
++static int rsw_is_button_pressed(void __iomem *io_base)
++{
++ u32 icr = in_be32(io_base + FLIPPER_ICR);
++
++ drv_printk(KERN_INFO, "%x\n", icr);
++ return !(icr & FLIPPER_ICR_RSS);
++}
++
++/*
++ * Invokes a normal system restart.
++ */
++static void rsw_normal_restart(unsigned long dummy)
++{
++ ctrl_alt_del();
++}
++
++/*
++ * Performs a low level system restart.
++ */
++static void rsw_emergency_restart(void)
++{
++#ifdef CONFIG_KEXEC
++ struct kimage *image;
++ image = xchg(&kexec_image, 0);
++ if (image)
++ machine_kexec(image);
++#endif
++ machine_restart(NULL);
++}
++
++/*
++ * Handles the interrupt associated to the reset button.
++ */
++static irqreturn_t rsw_handler(int irq, void *data)
++{
++ struct rsw_drvdata *drvdata = (struct rsw_drvdata *)data;
++ unsigned long flags;
++
++ if (!rsw_is_button_pressed(drvdata->io_base)) {
++ /* nothing to do */
++ return IRQ_HANDLED;
++ }
++
++ spin_lock_irqsave(&drvdata->lock, flags);
++
++ /* someone pushed the reset button */
++ switch (drvdata->state) {
++ case IDLE:
++ drvdata->state = NORMAL_RESET;
++ printk(KERN_EMERG "Rebooting in %d seconds...\n",
++ drvdata->timeout);
++ printk(KERN_WARNING
++ "Push the Reset button again to cancel reboot!\n");
++
++ /* schedule a reboot in a few seconds */
++ init_timer(&drvdata->timer);
++ drvdata->timer.expires = jiffies + drvdata->timeout * HZ;
++ drvdata->timer.function =
++ (void (*)(unsigned long))rsw_normal_restart;
++ add_timer(&drvdata->timer);
++ drvdata->jiffies = jiffies;
++ break;
++ case NORMAL_RESET:
++ if (time_before(jiffies,
++ drvdata->jiffies + drvdata->timeout * HZ)) {
++ /* the reset button was hit again before deadline */
++ del_timer(&drvdata->timer);
++ drvdata->state = IDLE;
++ printk(KERN_EMERG "Reboot cancelled!\n");
++ } else {
++ /*
++ * Time expired. System should be now restarting.
++ * Go to emergency mode in case something goes bad.
++ */
++ drvdata->state = EMERGENCY_RESET;
++ drvdata->pushes = 0;
++ printk(KERN_WARNING
++ "SWITCHED TO EMERGENCY RESET MODE!\n"
++ "Push %d times the Reset button to force"
++ " a hard reset!\n"
++ "NOTE THAT THIS COULD CAUSE DATA LOSS!\n",
++ RSW_EMERGENCY_PUSHES);
++ }
++ break;
++ case EMERGENCY_RESET:
++ /* force a hard reset if the user insists ... */
++ if (++drvdata->pushes >= RSW_EMERGENCY_PUSHES) {
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++ rsw_emergency_restart();
++ return IRQ_HANDLED;
++ } else {
++ printk(KERN_INFO "%d/%d\n", drvdata->pushes,
++ RSW_EMERGENCY_PUSHES);
++ }
++ break;
++ }
++
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * Setup routines.
++ *
++ */
++
++static int rsw_init(struct rsw_drvdata *drvdata, struct resource *mem, int irq)
++{
++ int retval;
++
++ drvdata->io_base = ioremap(mem->start, mem->end - mem->start + 1);
++ drvdata->irq = irq;
++
++ spin_lock_init(&drvdata->lock);
++ drvdata->state = IDLE;
++ drvdata->timeout = RSW_NORMAL_TIMEOUT;
++
++ retval = request_irq(drvdata->irq, rsw_handler, 0,
++ DRV_MODULE_NAME, drvdata);
++ if (retval) {
++ drv_printk(KERN_ERR, "request of IRQ %d failed\n",
++ drvdata->irq);
++ }
++ return retval;
++}
++
++static void rsw_exit(struct rsw_drvdata *drvdata)
++{
++ free_irq(drvdata->irq, drvdata);
++ if (drvdata->io_base) {
++ iounmap(drvdata->io_base);
++ drvdata->io_base = NULL;
++ }
++}
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int rsw_do_probe(struct device *dev, struct resource *mem, int irq)
++{
++ struct rsw_drvdata *drvdata;
++ int retval;
++
++ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
++ if (!drvdata) {
++ drv_printk(KERN_ERR, "failed to allocate rsw_drvdata\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, drvdata);
++ drvdata->dev = dev;
++
++ retval = rsw_init(drvdata, mem, irq);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ }
++ return retval;
++}
++
++static int rsw_do_remove(struct device *dev)
++{
++ struct rsw_drvdata *drvdata = dev_get_drvdata(dev);
++
++ if (drvdata) {
++ rsw_exit(drvdata);
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int __init rsw_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource mem;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &mem);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENODEV;
++ }
++
++ return rsw_do_probe(&odev->dev,
++ &mem, irq_of_parse_and_map(odev->node, 0));
++}
++
++static int __exit rsw_of_remove(struct of_device *odev)
++{
++ return rsw_do_remove(&odev->dev);
++}
++
++static struct of_device_id rsw_of_match[] = {
++ {.compatible = "nintendo,flipper-resetswitch"},
++ {.compatible = "nintendo,hollywood-resetswitch"},
++ {},
++};
++
++MODULE_DEVICE_TABLE(of, rsw_of_match);
++
++static struct of_platform_driver rsw_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = rsw_of_match,
++ .probe = rsw_of_probe,
++ .remove = rsw_of_remove,
++};
++
++/*
++ * Kernel module hooks.
++ *
++ */
++
++static int __init rsw_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ rsw_driver_version);
++
++ return of_register_platform_driver(&rsw_of_driver);
++}
++
++static void __exit rsw_exit_module(void)
++{
++ of_unregister_platform_driver(&rsw_of_driver);
++}
++
++module_init(rsw_init_module);
++module_exit(rsw_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
+diff --git a/arch/powerpc/platforms/embedded6xx/gcnvi_udbg.c b/arch/powerpc/platforms/embedded6xx/gcnvi_udbg.c
+new file mode 100644
+index 0000000..6b63e48
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/gcnvi_udbg.c
+@@ -0,0 +1,315 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/gcnvi_udbg.c
++ *
++ * Nintendo GameCube/Wii framebuffer udbg output support.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * Based on arch/ppc/platforms/gcn-con.c
++ *
++ * Nintendo GameCube early debug console
++ * Copyright (C) 2004-2005 The GameCube Linux Team
++ *
++ * Based on console.c by tmbinc.
++ *
++ * This program is free software; you can redistribute 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/io.h>
++#include <linux/string.h>
++#include <linux/console.h>
++#include <linux/font.h>
++#include <asm/prom.h>
++#include <asm/udbg.h>
++#include <mm/mmu_decl.h>
++
++#include "gcnvi_udbg.h"
++
++/*
++ * Console settings.
++ *
++ */
++#define SCREEN_WIDTH 640
++#define SCREEN_HEIGHT 480
++
++#define FONT_XSIZE 8
++#define FONT_YSIZE 16
++#define FONT_XFACTOR 1
++#define FONT_YFACTOR 1
++#define FONT_XGAP 2
++#define FONT_YGAP 0
++
++#define COLOR_WHITE 0xFF80FF80
++#define COLOR_BLACK 0x00800080
++
++struct console_data {
++ unsigned char *framebuffer;
++ int xres, yres, stride;
++
++ const unsigned char *font;
++
++ int cursor_x, cursor_y;
++ int foreground, background;
++
++ int border_left, border_right, border_top, border_bottom;
++
++ int scrolled_lines;
++};
++
++static struct console_data *default_console;
++
++#if 0
++static int console_set_color(int background, int foreground)
++{
++ default_console->foreground = foreground;
++ default_console->background = background;
++ return 0;
++}
++#endif
++
++static void console_drawc(struct console_data *con, int x, int y,
++ unsigned char c)
++{
++ int ax, ay;
++ unsigned long *ptr;
++ unsigned long color, color2x[2];
++ int bits;
++
++ x >>= 1;
++ ptr = (unsigned long *)(con->framebuffer + con->stride * y + x * 4);
++
++ for (ay = 0; ay < FONT_YSIZE; ay++) {
++#if FONT_XFACTOR == 2
++ for (ax = 0; ax < 8; ax++) {
++ if ((con->font[c * FONT_YSIZE + ay] << ax) & 0x80)
++ color = con->foreground;
++ else
++ color = con->background;
++#if FONT_YFACTOR == 2
++ /* pixel doubling: we write u32 */
++ ptr[ay * 2 * con->stride / 4 + ax] = color;
++ /* line doubling */
++ ptr[(ay * 2 + 1) * con->stride / 4 + ax] = color;
++#else
++ ptr[ay * con->stride / 4 + ax] = color;
++#endif
++ }
++#else
++ for (ax = 0; ax < 4; ax++) {
++ bits = (con->font[c * FONT_YSIZE + ay] << (ax * 2));
++ if (bits & 0x80)
++ color2x[0] = con->foreground;
++ else
++ color2x[0] = con->background;
++ if (bits & 0x40)
++ color2x[1] = con->foreground;
++ else
++ color2x[1] = con->background;
++ ptr[ay * con->stride / 4 + ax] =
++ (color2x[0] & 0xFFFF00FF) |
++ (color2x[1] & 0x0000FF00);
++ }
++#endif
++ }
++}
++
++static void console_putc(struct console_data *con, char c)
++{
++ int cnt;
++ unsigned long *ptr;
++
++ switch (c) {
++ case '\n':
++ con->cursor_y += FONT_YSIZE * FONT_YFACTOR + FONT_YGAP;
++ con->cursor_x = con->border_left;
++ break;
++ default:
++ console_drawc(con, con->cursor_x, con->cursor_y, c);
++ con->cursor_x += FONT_XSIZE * FONT_XFACTOR + FONT_XGAP;
++ if ((con->cursor_x + (FONT_XSIZE * FONT_XFACTOR)) >
++ con->border_right) {
++ con->cursor_y += FONT_YSIZE * FONT_YFACTOR + FONT_YGAP;
++ con->cursor_x = con->border_left;
++ }
++ }
++ if ((con->cursor_y + FONT_YSIZE * FONT_YFACTOR) >= con->border_bottom) {
++ memcpy(con->framebuffer,
++ con->framebuffer +
++ con->stride * (FONT_YSIZE * FONT_YFACTOR + FONT_YGAP),
++ con->stride * con->yres - FONT_YSIZE);
++ cnt = (con->stride * (FONT_YSIZE*FONT_YFACTOR + FONT_YGAP)) / 4;
++ ptr = (unsigned long *)(con->framebuffer +
++ con->stride * (con->yres - FONT_YSIZE));
++ while (cnt--)
++ *ptr++ = con->background;
++ con->cursor_y -= FONT_YSIZE * FONT_YFACTOR + FONT_YGAP;
++ }
++}
++
++static void console_init(struct console_data *con, void *framebuffer,
++ int xres, int yres, int stride)
++{
++ int c;
++ unsigned long *p;
++
++ con->framebuffer = framebuffer;
++ con->xres = xres;
++ con->yres = yres;
++ con->border_left = 0;
++ con->border_top = 0;
++ con->border_right = con->xres;
++ con->border_bottom = con->yres;
++ con->stride = stride;
++ con->cursor_x = con->cursor_y = 0;
++
++ con->font = font_vga_8x16.data;
++
++ con->foreground = COLOR_WHITE;
++ con->background = COLOR_BLACK;
++
++ con->scrolled_lines = 0;
++
++ /* clear screen */
++ c = con->xres * con->yres / 2;
++ p = (unsigned long *)con->framebuffer;
++ while (c--)
++ *p++ = con->background;
++
++ default_console = con;
++}
++
++/*
++ * Video hardware setup.
++ *
++ */
++
++/* Hardware registers */
++#define VI_TFBL 0x1c
++#define VI_TFBR 0x20
++#define VI_BFBL 0x24
++#define VI_BFBR 0x28
++#define VI_DPV 0x2c
++
++/* NTSC settings (640x480) */
++static const u32 vi_Mode640X480NtscYUV16[32] = {
++ 0x0F060001, 0x476901AD, 0x02EA5140, 0x00030018,
++ 0x00020019, 0x410C410C, 0x40ED40ED, 0x00435A4E,
++ 0x00000000, 0x00435A4E, 0x00000000, 0x00000000,
++ 0x110701AE, 0x10010001, 0x00010001, 0x00010001,
++ 0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
++ 0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
++ 0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
++ 0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF
++};
++
++static void vi_setup_video(void __iomem *io_base, unsigned long xfb_start)
++{
++ const u32 *regs = vi_Mode640X480NtscYUV16;
++ int i;
++
++ /* initialize video registers */
++ for (i = 0; i < 7; i++)
++ out_be32(io_base + i * sizeof(__u32), regs[i]);
++
++ out_be32(io_base + VI_TFBR, regs[VI_TFBR / sizeof(__u32)]);
++ out_be32(io_base + VI_BFBR, regs[VI_BFBR / sizeof(__u32)]);
++ out_be32(io_base + VI_DPV, regs[VI_DPV / sizeof(__u32)]);
++ for (i = 16; i < 32; i++)
++ out_be32(io_base + i * sizeof(__u32), regs[i]);
++
++ /* set framebuffer address, interlaced mode */
++ out_be32(io_base + VI_TFBL, 0x10000000 | (xfb_start >> 5));
++ xfb_start += 2 * SCREEN_WIDTH; /* line length */
++ out_be32(io_base + VI_BFBL, 0x10000000 | (xfb_start >> 5));
++}
++
++/*
++ * Retrieves and prepares the virtual address needed to access the hardware.
++ */
++static void __iomem *vi_setup_io_base(struct device_node *np)
++{
++ phys_addr_t paddr;
++ const unsigned int *reg;
++ void *io_base = NULL;
++
++ reg = of_get_property(np, "reg", NULL);
++ if (reg) {
++ paddr = of_translate_address(np, reg);
++ if (paddr)
++ io_base = ioremap(paddr, reg[1]);
++ }
++ return io_base;
++}
++
++/*
++ * udbg functions.
++ *
++ */
++
++/* OF bindings */
++static struct of_device_id gcnvi_udbg_ids[] __initdata = {
++ { .compatible = "nintendo,hollywood-video", },
++ { .compatible = "nintendo,gamecube-video", },
++};
++
++static struct console_data gcnvi_udbg_console;
++
++/*
++ * Transmits a character.
++ */
++void gcnvi_udbg_putc(char ch)
++{
++ if (default_console)
++ console_putc(default_console, ch);
++}
++
++/*
++ * Initializes udbg support.
++ */
++void __init gcnvi_udbg_init(void)
++{
++ unsigned long xfb_start = 0, xfb_size = 0;
++ struct device_node *np = NULL;
++ const unsigned long *prop;
++ void *screen_base;
++ void *io_base;
++
++ for_each_matching_node(np, gcnvi_udbg_ids) {
++ if (np)
++ break;
++ }
++ if (!np)
++ return;
++
++ prop = of_get_property(np, "xfb-start", NULL);
++ if (prop) {
++ xfb_start = *prop;
++ prop = of_get_property(np, "xfb-size", NULL);
++ if (prop)
++ xfb_size = *prop;
++ }
++ io_base = vi_setup_io_base(np);
++
++ of_node_put(np);
++
++ if (!prop || !io_base)
++ return;
++
++ if (xfb_size < 2 * SCREEN_WIDTH * SCREEN_HEIGHT)
++ return;
++
++ screen_base = ioremap_nocache(xfb_start, xfb_size);
++ if (!screen_base)
++ return;
++
++ vi_setup_video(io_base, xfb_start);
++ console_init(&gcnvi_udbg_console, screen_base,
++ SCREEN_WIDTH, SCREEN_HEIGHT, 2 * SCREEN_WIDTH);
++
++ udbg_putc = gcnvi_udbg_putc;
++ printk(KERN_INFO "gcnvi_udbg: ready\n");
++}
+diff --git a/arch/powerpc/platforms/embedded6xx/gcnvi_udbg.h b/arch/powerpc/platforms/embedded6xx/gcnvi_udbg.h
+new file mode 100644
+index 0000000..daba549
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/gcnvi_udbg.h
+@@ -0,0 +1,30 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/gcnvi_udbg.h
++ *
++ * Nintendo GameCube/Wii framebuffer udbg output support.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __GCNVI_UDBG_H
++#define __GCNVI_UDBG_H
++
++#ifdef CONFIG_GAMECUBE_VIDEO_UDBG
++
++extern void __init gcnvi_udbg_init(void);
++
++#else
++
++static inline void __init gcnvi_udbg_init(void)
++{
++}
++
++#endif /* CONFIG_GAMECUBE_VIDEO_UDBG */
++
++#endif /* __GCNVI_UDBG_H */
+diff --git a/arch/powerpc/platforms/embedded6xx/starlet-es.c b/arch/powerpc/platforms/embedded6xx/starlet-es.c
+new file mode 100644
+index 0000000..a975f64
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/starlet-es.c
+@@ -0,0 +1,592 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/starlet-es.c
++ *
++ * Nintendo Wii starlet ES routines
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define DEBUG
++
++#include <linux/kernel.h>
++#include <linux/of_platform.h>
++#include <linux/scatterlist.h>
++#include <asm/starlet.h>
++
++#define DRV_MODULE_NAME "starlet-es"
++#define DRV_DESCRIPTION "Nintendo Wii starlet ES driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++static const char starlet_es_driver_version[] = "0.2i";
++
++#define DBG(fmt, arg...) pr_debug(fmt, ##arg)
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++struct starlet_es_device {
++ int fd;
++
++ struct device *dev;
++};
++
++struct starlet_es_ticket_limit {
++ u32 tag;
++ u32 value;
++} __attribute__((packed));
++
++struct starlet_es_ticket_view {
++ u32 view;
++ u64 ticketid;
++ u32 devicetype;
++ u64 title;
++ u16 access_mask;
++ u8 reserved[0x3c];
++ u8 cidx_mask[0x40];
++ u16 padding;
++ struct starlet_es_ticket_limit limits[8];
++} __attribute__((packed));
++
++#if 0
++struct starlet_es_ticket {
++ char issuer[0x40];
++ u8 fill[63]; /* TODO: not really fill */
++ u8 title_key[16];
++ u8 fill2;
++ u64 ticketid;
++ u32 devicetype;
++ u64 title;
++ u16 access_mask;
++ u8 reserved[0x3c];
++ u8 cidx_mask[0x40];
++ u16 padding;
++ struct starlet_es_ticket_limit limits[8];
++} __attribute__((packed));
++#endif
++
++/*
++ * /dev/es
++ *
++ */
++
++#define ES_IOCTLV_LAUNCHTITLE 0x08
++#define ES_IOCTLV_GETTITLECOUNT 0x0e
++#define ES_IOCTLV_GETTITLES 0x0f
++#define ES_IOCTLV_GETTICKETVIEWCOUNT 0x12
++#define ES_IOCTLV_GETTICKETVIEWS 0x13
++
++static const char dev_es[] = "/dev/es";
++
++/*
++ * Handy small buffer routines.
++ * We use a small static aligned buffer to avoid allocations for short-lived
++ * operations involving 1 to 4 byte data transfers to/from IOS.
++ *
++ */
++
++static u32 es_small_buf[L1_CACHE_BYTES / sizeof(u32)]
++ __attribute__ ((aligned(STARLET_IPC_DMA_ALIGN + 1)));
++static const size_t es_small_buf_size = sizeof(es_small_buf_size);
++static DEFINE_MUTEX(es_small_buf_lock);
++
++static u32 *es_small_buf_get(void)
++{
++ u32 *buf;
++
++ if (!mutex_trylock(&es_small_buf_lock))
++ buf = starlet_kzalloc(es_small_buf_size, GFP_KERNEL);
++ else {
++ memset(es_small_buf, 0, es_small_buf_size);
++ buf = es_small_buf;
++ }
++
++ return buf;
++}
++
++static void es_small_buf_put(u32 *buf)
++{
++ if (buf == es_small_buf)
++ mutex_unlock(&es_small_buf_lock);
++ else
++ starlet_kfree(buf);
++}
++
++#if 0
++static void es_small_buf_dump(void)
++{
++ int i;
++ size_t nelems = sizeof(es_small_buf) / sizeof(u32);
++
++ drv_printk(KERN_INFO, "es_small_buf[%d]= {\n", nelems);
++ for (i = 0; i < nelems; i++)
++ drv_printk(KERN_INFO, "%08x, ", es_small_buf[i]);
++ drv_printk(KERN_INFO, "\n}\n");
++
++}
++#endif
++
++/*
++ *
++ *
++ */
++
++static struct starlet_es_device *starlet_es_device_instance;
++
++/**
++ *
++ */
++struct starlet_es_device *starlet_es_get_device(void)
++{
++ if (!starlet_es_device_instance)
++ drv_printk(KERN_ERR, "uninitialized device instance!\n");
++ return starlet_es_device_instance;
++}
++EXPORT_SYMBOL_GPL(starlet_es_get_device);
++
++/**
++ *
++ */
++int starlet_es_get_title_count(unsigned long *count)
++{
++ struct starlet_es_device *es_dev = starlet_es_get_device();
++ struct scatterlist io[1];
++ u32 *count_buf;
++ int error;
++
++ if (!es_dev)
++ return -ENODEV;
++
++ count_buf = es_small_buf_get();
++ if (!count_buf)
++ return -ENOMEM;
++
++ *count_buf = 0;
++ sg_init_one(io, count_buf, sizeof(*count_buf));
++
++ error = starlet_ioctlv(es_dev->fd, ES_IOCTLV_GETTITLECOUNT,
++ 0, NULL, 1, io);
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ else
++ *count = *count_buf;
++
++ es_small_buf_put(count_buf);
++
++ return error;
++}
++
++/**
++ *
++ */
++int starlet_es_get_titles(u64 *titles, unsigned long count)
++{
++ struct starlet_es_device *es_dev = starlet_es_get_device();
++ struct scatterlist in[1], io[1];
++ u32 *count_buf;
++ int error;
++
++ if (!es_dev)
++ return -ENODEV;
++
++ count_buf = es_small_buf_get();
++ if (!count_buf)
++ return -ENOMEM;
++
++ *count_buf = count;
++ sg_init_one(in, count_buf, sizeof(*count_buf));
++ sg_init_one(io, titles, sizeof(*titles)*count);
++
++ error = starlet_ioctlv(es_dev->fd, ES_IOCTLV_GETTITLES,
++ 1, in, 1, io);
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ es_small_buf_put(count_buf);
++
++ return error;
++}
++
++/**
++ *
++ */
++int starlet_es_get_ticket_view_count(u64 title, unsigned long *count)
++{
++ struct starlet_es_device *es_dev = starlet_es_get_device();
++ struct scatterlist in[1], io[1];
++ u64 *title_buf;
++ u32 *count_buf;
++ int error;
++
++ if (!es_dev)
++ return -ENODEV;
++
++ title_buf = starlet_kzalloc(sizeof(*title_buf), GFP_KERNEL);
++ if (!title_buf)
++ return -ENOMEM;
++
++ count_buf = es_small_buf_get();
++ if (!count_buf) {
++ starlet_kfree(title_buf);
++ return -ENOMEM;
++ }
++
++ *title_buf = title;
++ sg_init_one(in, title_buf, sizeof(*title_buf));
++ sg_init_one(io, count_buf, sizeof(*count_buf));
++
++ error = starlet_ioctlv(es_dev->fd, ES_IOCTLV_GETTICKETVIEWCOUNT,
++ 1, in, 1, io);
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ else
++ *count = *count_buf;
++
++ starlet_kfree(title_buf);
++ es_small_buf_put(count_buf);
++
++ return error;
++}
++
++/**
++ *
++ */
++int starlet_es_get_ticket_views(u64 title,
++ struct starlet_es_ticket_view *views,
++ unsigned long count)
++{
++ struct starlet_es_device *es_dev = starlet_es_get_device();
++ struct scatterlist in[2], io[1];
++ u32 *count_buf;
++ u64 *title_buf;
++ int error;
++
++ if (!es_dev)
++ return -ENODEV;
++
++ title_buf = starlet_kzalloc(sizeof(*title_buf), GFP_KERNEL);
++ if (!title_buf)
++ return -ENOMEM;
++
++ count_buf = es_small_buf_get();
++ if (!count_buf) {
++ starlet_kfree(title_buf);
++ return -ENOMEM;
++ }
++
++ *title_buf = title;
++ *count_buf = count;
++ sg_init_table(in, 2);
++ sg_set_buf(&in[0], title_buf, sizeof(*title_buf));
++ sg_set_buf(&in[1], count_buf, sizeof(*count_buf));
++
++ sg_init_one(io, views, sizeof(*views)*count);
++
++ error = starlet_ioctlv(es_dev->fd, ES_IOCTLV_GETTICKETVIEWS,
++ 2, in, 1, io);
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ es_small_buf_put(count_buf);
++ starlet_kfree(title_buf);
++
++ return error;
++}
++
++/**
++ *
++ */
++int starlet_es_launch_title_view(u64 title, struct starlet_es_ticket_view *view)
++{
++ struct starlet_es_device *es_dev = starlet_es_get_device();
++ struct scatterlist in[2];
++ u64 *title_buf;
++ int error;
++
++ if (!es_dev)
++ return -ENODEV;
++
++ title_buf = starlet_kzalloc(sizeof(*title_buf), GFP_KERNEL);
++ if (!title_buf)
++ return -ENOMEM;
++
++ *title_buf = title;
++ sg_init_table(in, 2);
++ sg_set_buf(&in[0], title_buf, sizeof(*title_buf));
++ sg_set_buf(&in[1], view, sizeof(*view));
++
++ error = starlet_ioctlv_and_reboot(es_dev->fd,
++ ES_IOCTLV_LAUNCHTITLE,
++ 2, in, 0, NULL);
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ starlet_kfree(title_buf);
++
++ return error;
++}
++
++
++
++/*
++ * Setup routines.
++ *
++ */
++
++#define STARLET_ES_IOS_MIN 30
++#define STARLET_ES_IOS_MAX 36
++
++static int starlet_es_find_newest_title(struct starlet_es_device *es_dev,
++ u64 *title,
++ u64 title_min, u64 title_max)
++{
++ u64 *titles;
++ u64 candidate;
++ unsigned long count;
++ int found, i;
++ int error;
++
++ error = starlet_es_get_title_count(&count);
++ if (error)
++ return error;
++
++ titles = starlet_kzalloc(sizeof(*titles)*count, GFP_KERNEL);
++ if (!titles) {
++ DBG("%s: out of memory\n", __func__);
++ return -ENOMEM;
++ }
++
++ error = starlet_es_get_titles(titles, count);
++ if (error) {
++ starlet_kfree(titles);
++ return error;
++ }
++
++ found = 0;
++ candidate = title_min;
++ for (i = 0; i < count; i++) {
++ if (titles[i] > candidate && titles[i] <= title_max) {
++ candidate = titles[i];
++ found = 1;
++ }
++ }
++
++ starlet_kfree(titles);
++
++ if (!found)
++ return 0;
++
++ *title = candidate;
++
++ return 1;
++}
++
++static int starlet_es_launch_title(struct starlet_es_device *es_dev, u64 title)
++{
++ struct starlet_es_ticket_view *views;
++ unsigned long count;
++ int error;
++
++ error = starlet_es_get_ticket_view_count(title, &count);
++ if (error)
++ return error;
++
++ views = starlet_kzalloc(sizeof(*views)*count, GFP_KERNEL);
++ if (!views) {
++ DBG("%s: out of memory\n", __func__);
++ return -ENOMEM;
++ }
++
++ error = starlet_es_get_ticket_views(title, views, count);
++ if (error) {
++ starlet_kfree(views);
++ return error;
++ }
++
++ drv_printk(KERN_INFO, "launching IOS%u\n", (u32)(title & 0xffffffff));
++ error = starlet_es_launch_title_view(title, views); /* first view */
++
++ starlet_kfree(views);
++
++ return error;
++}
++
++static int starlet_es_load_preferred(struct starlet_es_device *es_dev,
++ u64 ios_min, u64 ios_max)
++{
++ u64 title;
++ int error;
++
++ error = starlet_es_find_newest_title(es_dev, &title, ios_min, ios_max);
++ if (!error)
++ return -EINVAL;
++ if (error > 0)
++ error = starlet_es_launch_title(es_dev, title);
++
++ return error;
++}
++
++static int starlet_nwc24_stop_scheduler(void)
++{
++ void *obuf;
++ const size_t osize = 0x20;
++ int fd;
++ int error = 0;
++
++ obuf = es_small_buf_get();
++ if (!obuf)
++ return -ENOMEM;
++
++ fd = starlet_open("/dev/net/kd/request", 0);
++ if (fd >= 0) {
++ error = starlet_ioctl(fd, 1, NULL, 0, obuf, osize);
++ starlet_close(fd);
++ }
++
++ es_small_buf_put(obuf);
++
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ return error;
++}
++
++static int starlet_es_init(struct starlet_es_device *es_dev)
++{
++ u64 ios_min, ios_max;
++ int error;
++
++ error = starlet_open(dev_es, 0);
++ if (error >= 0) {
++ starlet_es_device_instance = es_dev;
++ es_dev->fd = error;
++
++ ios_min = 0x100000000ULL | STARLET_ES_IOS_MIN;
++ ios_max = 0x100000000ULL | STARLET_ES_IOS_MAX;
++
++ error = starlet_es_load_preferred(es_dev, ios_min, ios_max);
++ if (error) {
++ drv_printk(KERN_WARNING, "unable to load preferred"
++ " IOS version (min %llx, max %llx)\n",
++ ios_min, ios_max);
++ }
++ }
++
++ /*
++ * Try to disable the Nintendo Wifi Connect 24 scheduler.
++ * And do this even if we failed to load our preferred IOS.
++ *
++ * When the scheduler kicks in, starlet IPC calls from Broadway fail.
++ */
++ starlet_nwc24_stop_scheduler();
++
++ return error;
++}
++
++static void starlet_es_exit(struct starlet_es_device *es_dev)
++{
++ starlet_es_device_instance = NULL;
++ starlet_close(es_dev->fd);
++ es_dev->fd = -1;
++}
++
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int starlet_es_do_probe(struct device *dev)
++{
++ struct starlet_es_device *es_dev;
++ int retval;
++
++ es_dev = kzalloc(sizeof(*es_dev), GFP_KERNEL);
++ if (!es_dev) {
++ drv_printk(KERN_ERR, "failed to allocate es_dev\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, es_dev);
++ es_dev->dev = dev;
++
++ retval = starlet_es_init(es_dev);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(es_dev);
++ }
++ return retval;
++}
++
++static int starlet_es_do_remove(struct device *dev)
++{
++ struct starlet_es_device *es_dev = dev_get_drvdata(dev);
++
++ if (es_dev) {
++ starlet_es_exit(es_dev);
++ dev_set_drvdata(dev, NULL);
++ kfree(es_dev);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int starlet_es_of_probe(struct of_device *odev,
++ const struct of_device_id *dev_id)
++{
++ return starlet_es_do_probe(&odev->dev);
++}
++
++static int starlet_es_of_remove(struct of_device *odev)
++{
++ return starlet_es_do_remove(&odev->dev);
++}
++
++static struct of_device_id starlet_es_of_match[] = {
++ { .compatible = "nintendo,starlet-es" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, starlet_es_of_match);
++
++static struct of_platform_driver starlet_es_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = starlet_es_of_match,
++ .probe = starlet_es_of_probe,
++ .remove = starlet_es_of_remove,
++};
++
++/*
++ * Kernel module interface hooks.
++ *
++ */
++
++static int __init starlet_es_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ starlet_es_driver_version);
++
++ return of_register_platform_driver(&starlet_es_of_driver);
++}
++
++static void __exit starlet_es_exit_module(void)
++{
++ of_unregister_platform_driver(&starlet_es_of_driver);
++}
++
++module_init(starlet_es_init_module);
++module_exit(starlet_es_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/arch/powerpc/platforms/embedded6xx/starlet-gpio.c b/arch/powerpc/platforms/embedded6xx/starlet-gpio.c
+new file mode 100644
+index 0000000..abdae88
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/starlet-gpio.c
+@@ -0,0 +1,134 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/starlet-gpio.c
++ *
++ * Nintendo Wii starlet GPIO driver
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/io.h>
++#include <linux/kernel.h>
++#include <linux/of.h>
++#include <linux/of_gpio.h>
++#include <linux/of_platform.h>
++
++struct stgpio_chip {
++ struct of_mm_gpio_chip mmchip;
++ spinlock_t lock;
++};
++
++struct stgpio_regs {
++ __be32 out, dir, in;
++};
++
++
++static inline struct stgpio_chip *
++to_stgpio_chip(struct of_mm_gpio_chip *mm_gc)
++{
++ return container_of(mm_gc, struct stgpio_chip, mmchip);
++}
++
++static int stgpio_get(struct gpio_chip *gc, unsigned int gpio)
++{
++ struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
++ struct stgpio_regs __iomem *regs = mm_gc->regs;
++ u32 pin_mask = 1 << (31 - gpio);
++ unsigned int val;
++
++ val = !!(in_be32(&regs->in) & pin_mask);
++
++ pr_debug("%s: gpio: %d val: %d\n", __func__, gpio, val);
++
++ return val;
++}
++
++static void stgpio_set(struct gpio_chip *gc, unsigned int gpio, int val)
++{
++ struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
++ struct stgpio_chip *st_gc = to_stgpio_chip(mm_gc);
++ struct stgpio_regs __iomem *regs = mm_gc->regs;
++ u32 pin_mask = 1 << (31 - gpio);
++ u32 data;
++ unsigned long flags;
++
++ spin_lock_irqsave(&st_gc->lock, flags);
++ data = in_be32(&regs->in) & ~pin_mask;
++ if (val)
++ data |= pin_mask;
++ out_be32(&regs->out, data);
++ spin_unlock_irqrestore(&st_gc->lock, flags);
++
++ pr_debug("%s: gpio: %d val: %d\n", __func__, gpio, val);
++}
++
++static int stgpio_dir_in(struct gpio_chip *gc, unsigned int gpio)
++{
++ struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
++ struct stgpio_regs __iomem *regs = mm_gc->regs;
++ u32 pin_mask = 1 << (31 - gpio);
++
++ clrbits32(&regs->dir, pin_mask);
++
++ return 0;
++}
++
++static int stgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
++{
++ struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
++ struct stgpio_regs __iomem *regs = mm_gc->regs;
++ u32 pin_mask = 1 << (31 - gpio);
++
++ setbits32(&regs->dir, pin_mask);
++ stgpio_set(gc, gpio, val);
++
++ return 0;
++}
++
++int stgpio_add32(struct device_node *np)
++{
++ struct of_mm_gpio_chip *mm_gc;
++ struct of_gpio_chip *of_gc;
++ struct gpio_chip *gc;
++ struct stgpio_chip *st_gc;
++
++ st_gc = kzalloc(sizeof(*st_gc), GFP_KERNEL);
++ if (!st_gc)
++ return -ENOMEM;
++
++ spin_lock_init(&st_gc->lock);
++ mm_gc = &st_gc->mmchip;
++ of_gc = &mm_gc->of_gc;
++ gc = &of_gc->gc;
++
++ of_gc->gpio_cells = 1;
++
++ gc->ngpio = 32;
++ gc->direction_input = stgpio_dir_in;
++ gc->direction_output = stgpio_dir_out;
++ gc->get = stgpio_get;
++ gc->set = stgpio_set;
++
++ return of_mm_gpiochip_add(np, mm_gc);
++}
++
++static int stgpio_init(void)
++{
++ struct device_node *np;
++ int error;
++
++ for_each_compatible_node(np, NULL, "nintendo,starlet-gpio") {
++ error = stgpio_add32(np);
++ if (error < 0)
++ printk(KERN_ERR "starlet-gpio: error %d adding gpios"
++ " for %s\n", error, np->full_name);
++ }
++ return 0; /* whatever */
++}
++arch_initcall(stgpio_init);
++
+diff --git a/arch/powerpc/platforms/embedded6xx/starlet-ipc.c b/arch/powerpc/platforms/embedded6xx/starlet-ipc.c
+new file mode 100644
+index 0000000..fa91b7a
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/starlet-ipc.c
+@@ -0,0 +1,1488 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/starlet-ipc.c
++ *
++ * Nintendo Wii starlet IPC driver
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define DEBUG
++
++/*#define DBG(fmt, arg...) pr_debug(fmt, ##arg)*/
++#define DBG(fmt, arg...) drv_printk(KERN_INFO, fmt, ##arg)
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/of_platform.h>
++#include <linux/ioport.h>
++#include <linux/interrupt.h>
++#include <linux/jiffies.h>
++#include <linux/dmapool.h>
++#include <linux/dma-mapping.h>
++#include <linux/random.h>
++#include <linux/scatterlist.h>
++#include <linux/string.h>
++#include <asm/io.h>
++#include <asm/bitops.h>
++
++#include <asm/starlet.h>
++
++
++#define DRV_MODULE_NAME "starlet-ipc"
++#define DRV_DESCRIPTION "Nintendo Wii starlet IPC driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++static char starlet_ipc_driver_version[] = "0.2i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++/*
++ * Hardware registers
++ */
++#define STARLET_IPC_TXBUF 0x00 /* data from cpu to starlet */
++
++#define STARLET_IPC_CSR 0x04
++#define STARLET_IPC_CSR_TSTART (1<<0) /* start transmit */
++#define STARLET_IPC_CSR_TBEI (1<<1) /* tx buf empty int */
++#define STARLET_IPC_CSR_RBFI (1<<2) /* rx buf full int */
++#define STARLET_IPC_CSR_INT (1<<3) /* interrupt ack */
++#define STARLET_IPC_CSR_RBFIMASK (1<<4) /* rx buf full int mask */
++#define STARLET_IPC_CSR_TBEIMASK (1<<5) /* tx buf empty int mask */
++
++#define STARLET_IPC_RXBUF 0x08 /* data from starlet to cpu */
++
++#define STARLET_IPC_ISR 0x30
++
++/* IOS calls */
++#define STARLET_IOS_OPEN 0x01
++#define STARLET_IOS_CLOSE 0x02
++#define STARLET_IOS_IOCTL 0x06
++#define STARLET_IOS_IOCTLV 0x07
++
++
++/* starlet_ipc_device flags */
++enum {
++ __TX_INUSE = 0, /* tx buffer in use flag */
++ __REBOOT, /* request causes IOS reboot */
++};
++
++/*
++ *
++ * Hardware.
++ */
++
++/*
++ * Update control and status register.
++ */
++static inline void starlet_ipc_update_csr(void __iomem *io_base, u32 val)
++{
++ u32 csr;
++
++ csr = in_be32(io_base + STARLET_IPC_CSR);
++ /* preserve interrupt masks */
++ csr &= STARLET_IPC_CSR_RBFIMASK | STARLET_IPC_CSR_TBEIMASK;
++ csr |= val;
++ out_be32(io_base + STARLET_IPC_CSR, csr);
++}
++
++/*
++ * Put data for starlet in the transmit fifo.
++ */
++static inline void starlet_ipc_sendto(void __iomem *io_base, u32 data)
++{
++ out_be32(io_base + STARLET_IPC_TXBUF, data);
++}
++
++/*
++ * Get data from starlet out the receive fifo.
++ */
++static inline u32 starlet_ipc_recvfrom(void __iomem *io_base)
++{
++ return in_be32(io_base + STARLET_IPC_RXBUF);
++}
++
++/*
++ * Issue an end-of-interrupt sequence.
++ */
++static void starlet_ipc_eoi(void __iomem *io_base)
++{
++ starlet_ipc_update_csr(io_base, STARLET_IPC_CSR_INT);
++}
++
++/*
++ * Calm the hardware down.
++ */
++static void starlet_ipc_quiesce(struct starlet_ipc_device *ipc_dev)
++{
++ u32 csr;
++
++ /* ack and disable MBOX? and REPLY interrupts */
++ csr = in_be32(ipc_dev->io_base + STARLET_IPC_CSR);
++ csr &= ~(STARLET_IPC_CSR_TBEIMASK | STARLET_IPC_CSR_RBFIMASK);
++ csr |= STARLET_IPC_CSR_TBEI | STARLET_IPC_CSR_RBFI;
++ out_be32(ipc_dev->io_base + STARLET_IPC_CSR, csr);
++}
++
++/*
++ * Request routines.
++ *
++ */
++
++#if 0
++
++#define __case_string(_s) \
++case _s: \
++ str = #_s; \
++ break;
++
++static char *stipc_cmd_string(u32 cmd)
++{
++ char *str = "unknown";
++
++ switch (cmd) {
++__case_string(STARLET_IOS_OPEN)
++__case_string(STARLET_IOS_CLOSE)
++__case_string(STARLET_IOS_IOCTL)
++__case_string(STARLET_IOS_IOCTLV)
++ }
++ return str;
++}
++
++static void starlet_ipc_pretty_print_request(struct starlet_ipc_request *req)
++{
++ drv_printk(KERN_INFO, "\n"
++ " struct starlet_ipc_request = {\n"
++ " cmd = %s (0x%08x)\n"
++ " result = %d (0x%08x)%s\n"
++ " seconds_elapsed = %u\n"
++ " dma_addr = %p\n"
++ " };\n"
++ ,
++ stipc_cmd_string(req->cmd), req->cmd,
++ req->result, req->result,
++ (req->result == 0xdeadbeef) ? " /* pending */" : "",
++ jiffies_to_msecs(jiffies - req->jiffies) / 1000,
++ (void *)req->dma_addr
++ );
++}
++
++#endif
++
++static void starlet_ipc_debug_print_request(struct starlet_ipc_request *req)
++{
++#if 0
++ DBG("cmd=%x, result=%x, fd=%x, dma_addr=%p\n",
++ req->cmd, req->result, req->fd, (void *)req->dma_addr);
++#endif
++}
++
++struct starlet_ipc_request *
++starlet_ipc_alloc_request(struct starlet_ipc_device *ipc_dev, gfp_t flags)
++{
++ struct starlet_ipc_request *req;
++ dma_addr_t dma_addr;
++
++ req = dma_pool_alloc(ipc_dev->dma_pool, flags, &dma_addr);
++ if (req) {
++ memset(req, 0, sizeof(*req));
++ req->ipc_dev = ipc_dev;
++ req->result = 0xdeadbeef;
++ req->sig = ipc_dev->random_id;
++ req->dma_addr = dma_addr;
++ INIT_LIST_HEAD(&req->node);
++ }
++ return req;
++}
++
++void starlet_ipc_free_request(struct starlet_ipc_request *req)
++{
++ dma_pool_free(req->ipc_dev->dma_pool, req, req->dma_addr);
++}
++
++static void starlet_ipc_start_request(struct starlet_ipc_request *req)
++{
++ struct starlet_ipc_device *ipc_dev = req->ipc_dev;
++ void __iomem *io_base = ipc_dev->io_base;
++ unsigned long flags;
++
++ starlet_ipc_debug_print_request(req);
++
++ spin_lock_irqsave(&ipc_dev->list_lock, flags);
++ list_add_tail(&req->node, &ipc_dev->outstanding_list);
++ ipc_dev->nr_outstanding++;
++ req->jiffies = jiffies;
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++
++ starlet_ipc_sendto(io_base, (u32) req->dma_addr);
++ starlet_ipc_update_csr(io_base, STARLET_IPC_CSR_TSTART);
++}
++
++static void starlet_ipc_complete_request(struct starlet_ipc_request *req)
++{
++ struct starlet_ipc_device *ipc_dev = req->ipc_dev;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ipc_dev->list_lock, flags);
++ list_del_init(&req->node);
++ ipc_dev->nr_outstanding--;
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++
++ starlet_ipc_debug_print_request(req);
++
++ /* per request completion callback */
++ if (req->complete)
++ req->complete(req);
++
++ /* async callback */
++ if (req->done)
++ req->done(req);
++}
++
++static void starlet_ipc_submit_request(struct starlet_ipc_request *req)
++{
++ struct starlet_ipc_device *ipc_dev = req->ipc_dev;
++ unsigned long flags;
++
++ if (test_and_set_bit(__TX_INUSE, &ipc_dev->flags)) {
++ spin_lock_irqsave(&ipc_dev->list_lock, flags);
++ list_add_tail(&req->node, &ipc_dev->pending_list);
++ ipc_dev->nr_pending++;
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++ } else {
++ starlet_ipc_start_request(req);
++ }
++}
++
++static struct starlet_ipc_request *
++starlet_ipc_find_request_by_bus_addr(struct starlet_ipc_device *ipc_dev,
++ dma_addr_t req_bus_addr)
++{
++ struct starlet_ipc_request *req;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ipc_dev->list_lock, flags);
++ list_for_each_entry(req, &ipc_dev->outstanding_list, node) {
++ if (req && req->sig != ipc_dev->random_id) {
++ drv_printk(KERN_ERR, "IPC trash detected\n");
++ ipc_dev->nr_outstanding = 0;
++ INIT_LIST_HEAD(&ipc_dev->outstanding_list);
++ INIT_LIST_HEAD(&req->node);
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++ return NULL;
++ }
++ if (req && req_bus_addr == req->dma_addr) {
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++ return req;
++ }
++ }
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++ return NULL;
++}
++
++/*
++ * Interrupt handlers.
++ *
++ */
++
++/*
++ * Transmit Buffer Empty Interrupt dispatcher.
++ */
++static int starlet_ipc_dispatch_tbei(struct starlet_ipc_device *ipc_dev)
++{
++ void __iomem *io_base = ipc_dev->io_base;
++ struct starlet_ipc_request *req = NULL;
++ struct list_head *pending = &ipc_dev->pending_list;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ipc_dev->list_lock, flags);
++ if (!list_empty(pending)) {
++ req = list_entry(pending->next, struct starlet_ipc_request,
++ node);
++ list_del_init(&req->node);
++ ipc_dev->nr_pending--;
++ }
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++ if (req) {
++ starlet_ipc_start_request(req);
++ } else {
++ if (!test_and_clear_bit(__TX_INUSE, &ipc_dev->flags)) {
++ /* we get two consecutive TBEIs on reboot */
++ if (test_and_clear_bit(__REBOOT, &ipc_dev->flags)) {
++ req = ipc_dev->req;
++ ipc_dev->req = NULL;
++ if (req) {
++ starlet_ipc_complete_request(req);
++ req->result = 0;
++ }
++ starlet_ipc_eoi(io_base);
++ }
++ }
++ }
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * Receive Buffer Full Interrupt dispatcher.
++ */
++static int starlet_ipc_dispatch_rbfi(struct starlet_ipc_device *ipc_dev)
++{
++ void __iomem *io_base = ipc_dev->io_base;
++ struct starlet_ipc_request *req;
++ unsigned long req_bus_addr;
++
++ req_bus_addr = starlet_ipc_recvfrom(io_base);
++ if (!req_bus_addr)
++ return IRQ_NONE;
++
++ req = starlet_ipc_find_request_by_bus_addr(ipc_dev, req_bus_addr);
++ if (req) {
++ starlet_ipc_complete_request(req);
++ } else {
++ drv_printk(KERN_WARNING, "unknown request, bus=%p\n",
++ (void *)req_bus_addr);
++ }
++ starlet_ipc_eoi(io_base);
++ return IRQ_HANDLED;
++}
++
++typedef int (*ipc_handler_t) (struct starlet_ipc_device *);
++
++static int
++starlet_ipc_cond_dispatch_irq(struct starlet_ipc_device *ipc_dev,
++ u32 irqmask, u32 irq, ipc_handler_t handler)
++{
++ void __iomem *io_base = ipc_dev->io_base;
++ u32 csr;
++ int retval = IRQ_NONE;
++
++ csr = in_be32(io_base + STARLET_IPC_CSR);
++ if ((csr & (irqmask | irq)) == (irqmask | irq)) {
++ /* early ack */
++ starlet_ipc_update_csr(io_base, irq);
++ out_be32(io_base + STARLET_IPC_ISR, 0x40000000); /* huh? */
++ retval = handler(ipc_dev);
++ }
++ return retval;
++}
++
++static irqreturn_t starlet_ipc_handler(int irq, void *data)
++{
++ struct starlet_ipc_device *ipc_dev = (struct starlet_ipc_device *)data;
++ int handled = 0;
++ int retval;
++
++ /* starlet acked a request */
++ retval = starlet_ipc_cond_dispatch_irq(ipc_dev,
++ STARLET_IPC_CSR_TBEIMASK,
++ STARLET_IPC_CSR_TBEI,
++ starlet_ipc_dispatch_tbei);
++ if (retval == IRQ_HANDLED)
++ handled++;
++
++ /* starlet delivered a reply */
++ retval = starlet_ipc_cond_dispatch_irq(ipc_dev,
++ STARLET_IPC_CSR_RBFIMASK,
++ STARLET_IPC_CSR_RBFI,
++ starlet_ipc_dispatch_rbfi);
++ if (retval == IRQ_HANDLED)
++ handled++;
++
++ if (!handled)
++ return IRQ_NONE;
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * IPC Calls.
++ *
++ */
++
++static int starlet_ipc_call_done(struct starlet_ipc_request *req)
++{
++ complete(req->done_data);
++ return 0;
++}
++
++static int starlet_ipc_call(struct starlet_ipc_request *req)
++{
++ DECLARE_COMPLETION(complete);
++
++ req->done_data = &complete;
++ req->done = starlet_ipc_call_done;
++ starlet_ipc_submit_request(req);
++ wait_for_completion(&complete);
++ return req->result;
++}
++
++static void starlet_ipc_call_nowait(struct starlet_ipc_request *req,
++ starlet_ipc_callback_t callback, void *arg)
++{
++ req->done_data = arg;
++ req->done = callback;
++ starlet_ipc_submit_request(req);
++}
++
++/*
++ *
++ * IOS High level interfaces.
++ */
++
++static struct starlet_ipc_device *starlet_ipc_device_instance;
++
++/**
++ *
++ */
++struct starlet_ipc_device *starlet_ipc_get_device(void)
++{
++ if (!starlet_ipc_device_instance)
++ drv_printk(KERN_ERR, "uninitialized device instance!\n");
++ return starlet_ipc_device_instance;
++}
++EXPORT_SYMBOL_GPL(starlet_ipc_get_device);
++
++/**
++ *
++ */
++int starlet_open(const char *pathname, int flags)
++{
++#define STSD_OPEN_BUF_SIZE 64
++ static char open_buf[STSD_OPEN_BUF_SIZE]
++ __attribute__ ((aligned(STARLET_IPC_DMA_ALIGN + 1)));
++ static DEFINE_MUTEX(open_buf_lock);
++
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ dma_addr_t dma_addr;
++ char *local_pathname = NULL;
++ size_t len;
++ int error = -ENOMEM;
++
++ if (!ipc_dev)
++ return -ENODEV;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_KERNEL);
++ if (req) {
++ len = strlen(pathname) + 1;
++ if (len < sizeof(open_buf)) {
++ if (mutex_trylock(&open_buf_lock))
++ local_pathname = open_buf;
++ }
++ if (!local_pathname) {
++ local_pathname = starlet_kzalloc(len, GFP_KERNEL);
++ if (!local_pathname) {
++ starlet_ipc_free_request(req);
++ return -ENOMEM;
++ }
++ }
++
++ strncpy(local_pathname, pathname, len-1);
++ local_pathname[len-1] = 0;
++ dma_addr = dma_map_single(ipc_dev->dev, local_pathname, len,
++ DMA_TO_DEVICE);
++
++ req->cmd = STARLET_IOS_OPEN;
++ req->open.pathname = dma_addr; /* bus address */
++ req->open.mode = flags;
++ error = starlet_ipc_call(req);
++
++ dma_unmap_single(ipc_dev->dev, dma_addr, len, DMA_TO_DEVICE);
++
++ if (local_pathname == open_buf)
++ mutex_unlock(&open_buf_lock);
++ else
++ starlet_kfree(local_pathname);
++
++ starlet_ipc_free_request(req);
++ }
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_open);
++
++/*
++ *
++ */
++int starlet_close(int fd)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error = -ENOMEM;
++
++ if (!ipc_dev)
++ return -ENODEV;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_KERNEL);
++ if (req) {
++ req->cmd = STARLET_IOS_CLOSE;
++ req->fd = fd;
++ error = starlet_ipc_call(req);
++ starlet_ipc_free_request(req);
++ }
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_close);
++
++
++/*
++ * starlet_ioctl*
++ *
++ */
++
++static int starlet_ioctl_dma_complete(struct starlet_ipc_request *req)
++{
++ return 0;
++}
++
++/*
++ *
++ */
++int starlet_ioctl_dma_prepare(struct starlet_ipc_request *req,
++ int fd, int request,
++ dma_addr_t ibuf, size_t ilen,
++ dma_addr_t obuf, size_t olen)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++
++ if (!ipc_dev)
++ return -ENODEV;
++
++ req->cmd = STARLET_IOS_IOCTL;
++ req->fd = fd;
++ req->ioctl.request = (u32) request;
++ req->ioctl.ibuf = ibuf;
++ req->ioctl.ilen = ilen;
++ req->ioctl.obuf = obuf;
++ req->ioctl.olen = olen;
++ req->complete = starlet_ioctl_dma_complete;
++
++ return 0;
++}
++
++/*
++ *
++ */
++int starlet_ioctl_dma(int fd, int request,
++ dma_addr_t ibuf, size_t ilen,
++ dma_addr_t obuf, size_t olen)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctl_dma_prepare(req, fd, request,
++ ibuf, ilen,
++ obuf, olen);
++ if (!error)
++ error = starlet_ipc_call(req);
++ starlet_ipc_free_request(req);
++
++ if (error)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctl_dma);
++
++/**
++ *
++ */
++int starlet_ioctl_dma_nowait(int fd, int request,
++ dma_addr_t ibuf, size_t ilen,
++ dma_addr_t obuf, size_t olen,
++ starlet_ipc_callback_t callback, void *arg)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctl_dma_prepare(req,
++ fd, request,
++ ibuf, ilen,
++ obuf, olen);
++ if (!error)
++ starlet_ipc_call_nowait(req, callback, arg);
++ else
++ starlet_ipc_free_request(req);
++
++ if (error)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctl_dma_nowait);
++
++static int starlet_ioctl_complete(struct starlet_ipc_request *req)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ dma_addr_t ibuf_ba, obuf_ba;
++ size_t ilen, olen;
++
++ ibuf_ba = req->ioctl.ibuf;
++ ilen = req->ioctl.ilen;
++ obuf_ba = req->ioctl.obuf;
++ olen = req->ioctl.olen;
++
++ if (ibuf_ba)
++ dma_unmap_single(ipc_dev->dev, ibuf_ba, ilen, DMA_TO_DEVICE);
++ if (obuf_ba)
++ dma_unmap_single(ipc_dev->dev, obuf_ba, olen, DMA_FROM_DEVICE);
++
++ return 0;
++}
++
++/*
++ *
++ */
++int starlet_ioctl_prepare(struct starlet_ipc_request *req,
++ int fd, int request,
++ void *ibuf, size_t ilen,
++ void *obuf, size_t olen)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ dma_addr_t ibuf_ba, obuf_ba;
++ int error;
++
++ if (!ipc_dev)
++ return -ENODEV;
++
++ BUG_ON(!IS_ALIGNED((unsigned long)ibuf, STARLET_IPC_DMA_ALIGN+1));
++ BUG_ON(!IS_ALIGNED((unsigned long)obuf, STARLET_IPC_DMA_ALIGN+1));
++
++ ibuf_ba = (ibuf) ? dma_map_single(ipc_dev->dev, ibuf, ilen,
++ DMA_TO_DEVICE) : 0;
++ obuf_ba = (obuf) ? dma_map_single(ipc_dev->dev, obuf, olen,
++ DMA_FROM_DEVICE) : 0;
++
++ error = starlet_ioctl_dma_prepare(req, fd, request,
++ ibuf_ba, ilen, obuf_ba, olen);
++ if (!error) {
++ req->complete = starlet_ioctl_complete;
++ if (ibuf)
++ dma_unmap_single(ipc_dev->dev, ibuf_ba, ilen,
++ DMA_TO_DEVICE);
++ if (obuf)
++ dma_unmap_single(ipc_dev->dev, obuf_ba, olen,
++ DMA_FROM_DEVICE);
++ }
++ return error;
++}
++
++/**
++ *
++ */
++int starlet_ioctl(int fd, int request,
++ void *ibuf, size_t ilen,
++ void *obuf, size_t olen)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctl_prepare(req, fd, request,
++ ibuf, ilen, obuf, olen);
++ if (!error)
++ error = starlet_ipc_call(req);
++ starlet_ipc_free_request(req);
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctl);
++
++/**
++ *
++ */
++int starlet_ioctl_nowait(int fd, int request,
++ void *ibuf, size_t ilen,
++ void *obuf, size_t olen,
++ starlet_ipc_callback_t callback, void *arg)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctl_prepare(req, fd, request,
++ ibuf, ilen, obuf, olen);
++ if (!error)
++ starlet_ipc_call_nowait(req, callback, arg);
++ else
++ starlet_ipc_free_request(req);
++
++ if (error)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctl_nowait);
++
++
++static int starlet_ioctlv_complete(struct starlet_ipc_request *req)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_iovec *iovec = req->iovec;
++ dma_addr_t iovec_da = req->ioctlv.iovec_da;
++ size_t iovec_size = req->iovec_size;
++
++#if 0
++ unsigned int nents;
++ DBG("%s: nents_in=%u, nents_io=%u\n", __func__,
++ req->sgl_nents_in, req->sgl_nents_io);
++#endif
++
++ if (req->sgl_nents_in > 0)
++ dma_unmap_sg(ipc_dev->dev, req->sgl_in, req->sgl_nents_in,
++ DMA_TO_DEVICE);
++ if (req->sgl_nents_io > 0)
++ dma_unmap_sg(ipc_dev->dev, req->sgl_io, req->sgl_nents_io,
++ DMA_BIDIRECTIONAL);
++ if (iovec) {
++ dma_unmap_single(ipc_dev->dev,
++ iovec_da, iovec_size, DMA_TO_DEVICE);
++
++#if 0
++ struct starlet_iovec *p;
++ p = iovec;
++ nents = req->sgl_nents_in;
++ while (nents--) {
++ DBG("%s: in: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)p->dma_addr, p->dma_len);
++ p++;
++ }
++ nents = req->sgl_nents_io;
++ while (nents--) {
++ DBG("%s: io: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)p->dma_addr, p->dma_len);
++ p++;
++ }
++#endif
++
++ starlet_kfree(iovec);
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++int starlet_ioctlv_prepare(struct starlet_ipc_request *req,
++ int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_io,
++ struct scatterlist *sgl_io)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_iovec *iovec, *p;
++ dma_addr_t iovec_da = 0;
++ size_t iovec_size = 0;
++ struct scatterlist *sg;
++ unsigned int nents, i;
++
++ if (!ipc_dev)
++ return -ENODEV;
++
++ BUG_ON(nents_in > 0 && !sgl_in);
++ BUG_ON(nents_io > 0 && !sgl_io);
++
++ nents = nents_in + nents_io;
++ if (nents > 0) {
++ iovec_size = nents * sizeof(*iovec);
++ iovec = starlet_kzalloc(iovec_size, GFP_ATOMIC);
++ if (!iovec)
++ return -ENOMEM;
++ } else {
++ iovec = NULL;
++ }
++
++ p = iovec;
++ if (nents_in > 0) {
++ nents_in = dma_map_sg(ipc_dev->dev, sgl_in, nents_in,
++ DMA_TO_DEVICE);
++ for_each_sg(sgl_in, sg, nents_in, i) {
++#if 0
++ DBG("%s: in: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)sg_dma_address(sg), sg_dma_len(sg));
++#endif
++ p->dma_addr = sg_dma_address(sg);
++ p->dma_len = sg_dma_len(sg);
++ p++;
++ }
++ }
++ if (nents_io > 0) {
++ nents_io = dma_map_sg(ipc_dev->dev, sgl_io, nents_io,
++ DMA_BIDIRECTIONAL);
++ for_each_sg(sgl_io, sg, nents_io, i) {
++#if 0
++ DBG("%s: io: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)sg_dma_address(sg), sg_dma_len(sg));
++#endif
++ p->dma_addr = sg_dma_address(sg);
++ p->dma_len = sg_dma_len(sg);
++ p++;
++ }
++ }
++
++ if (iovec)
++ iovec_da = dma_map_single(ipc_dev->dev,
++ iovec, iovec_size,
++ DMA_TO_DEVICE);
++
++ req->iovec = iovec;
++ req->iovec_size = iovec_size;
++ req->sgl_nents_in = nents_in;
++ req->sgl_in = sgl_in;
++ req->sgl_nents_io = nents_io;
++ req->sgl_io = sgl_io;
++
++ req->cmd = STARLET_IOS_IOCTLV;
++ req->fd = fd;
++ req->ioctlv.request = request;
++ req->ioctlv.argc_in = nents_in;
++ req->ioctlv.argc_io = nents_io;
++ req->ioctlv.iovec_da = iovec_da;
++ req->complete = starlet_ioctlv_complete;
++
++#if 0
++ DBG("%s: fd=%d, request=%d,"
++ " argc_in=%u, argc_io=%u, iovec_da=%08x\n" , __func__,
++ req->fd, req->ioctlv.request,
++ req->ioctlv.argc_in, req->ioctlv.argc_io,
++ req->ioctlv.iovec_da);
++#endif
++ return 0;
++}
++
++/**
++ *
++ */
++int starlet_ioctlv(int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_io,
++ struct scatterlist *sgl_io)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctlv_prepare(req, fd, request,
++ nents_in, sgl_in,
++ nents_io, sgl_io);
++ if (!error)
++ error = starlet_ipc_call(req);
++ starlet_ipc_free_request(req);
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctlv);
++
++/**
++ *
++ */
++int starlet_ioctlv_nowait(int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_io,
++ struct scatterlist *sgl_io,
++ starlet_ipc_callback_t callback, void *arg)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctlv_prepare(req, fd, request,
++ nents_in, sgl_in,
++ nents_io, sgl_io);
++ if (!error)
++ starlet_ipc_call_nowait(req, callback, arg);
++ else
++ starlet_ipc_free_request(req);
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctlv_nowait);
++
++/**
++ *
++ */
++int starlet_ioctlv_and_reboot(int fd, int request,
++ unsigned int nents_in,
++ struct scatterlist *sgl_in,
++ unsigned int nents_io,
++ struct scatterlist *sgl_io)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioctlv_prepare(req, fd, request,
++ nents_in, sgl_in,
++ nents_io, sgl_io);
++ if (!error) {
++ ipc_dev->req = req;
++ set_bit(__REBOOT, &ipc_dev->flags);
++ error = starlet_ipc_call(req);
++ }
++ starlet_ipc_free_request(req);
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioctlv_and_reboot);
++
++/*
++ * starlet_ioh_ioctlv*
++ *
++ */
++
++static int starlet_ioh_ioctlv_complete(struct starlet_ipc_request *req)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_iovec *iovec = req->iovec;
++ dma_addr_t iovec_da = req->ioctlv.iovec_da;
++ size_t iovec_size = req->iovec_size;
++
++#if 0
++ unsigned int nents;
++ DBG("%s: nents_in=%u, nents_io=%u\n", __func__,
++ req->sgl_nents_in, req->sgl_nents_io);
++#endif
++
++ if (req->sgl_nents_in > 0)
++ starlet_ioh_dma_unmap_sg(ipc_dev->dev,
++ req->ioh_sgl_in, req->sgl_nents_in,
++ DMA_TO_DEVICE);
++ if (req->sgl_nents_io > 0)
++ starlet_ioh_dma_unmap_sg(ipc_dev->dev,
++ req->ioh_sgl_io, req->sgl_nents_io,
++ DMA_BIDIRECTIONAL);
++ if (iovec) {
++ dma_unmap_single(ipc_dev->dev,
++ iovec_da, iovec_size, DMA_TO_DEVICE);
++
++ { /* begin debug */
++#if 0
++ struct starlet_iovec *p;
++ p = iovec;
++ nents = req->sgl_nents_in;
++ while (nents--) {
++ DBG("%s: in: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)p->dma_addr, p->dma_len);
++ p++;
++ }
++ nents = req->sgl_nents_io;
++ while (nents--) {
++ DBG("%s: io: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)p->dma_addr, p->dma_len);
++ p++;
++ }
++#endif
++ } /* end debug */
++
++ starlet_kfree(iovec);
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++int starlet_ioh_ioctlv_prepare(struct starlet_ipc_request *req,
++ int fd, int request,
++ unsigned int nents_in,
++ struct starlet_ioh_sg *ioh_sgl_in,
++ unsigned int nents_io,
++ struct starlet_ioh_sg *ioh_sgl_io)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_iovec *iovec, *p;
++ dma_addr_t iovec_da = 0;
++ size_t iovec_size = 0;
++ struct starlet_ioh_sg *ioh_sg;
++ unsigned int nents, i;
++
++ if (!ipc_dev)
++ return -ENODEV;
++
++ BUG_ON(nents_in > 0 && !ioh_sgl_in);
++ BUG_ON(nents_io > 0 && !ioh_sgl_io);
++
++ nents = nents_in + nents_io;
++ if (nents > 0) {
++ iovec_size = nents * sizeof(*iovec);
++ iovec = starlet_kzalloc(iovec_size, GFP_ATOMIC);
++ if (!iovec)
++ return -ENOMEM;
++ } else {
++ iovec = NULL;
++ }
++
++ p = iovec;
++ if (nents_in > 0) {
++ nents_in = starlet_ioh_dma_map_sg(ipc_dev->dev,
++ ioh_sgl_in, nents_in,
++ DMA_TO_DEVICE);
++ starlet_ioh_for_each_sg(ioh_sgl_in, ioh_sg, nents_in, i) {
++#if 0
++ DBG("%s: in: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)ioh_sg->dma_addr, ioh_sg->len);
++#endif
++ p->dma_addr = ioh_sg->dma_addr;
++ p->dma_len = ioh_sg->len;
++ p++;
++ }
++ }
++ if (nents_io > 0) {
++ nents_io = starlet_ioh_dma_map_sg(ipc_dev->dev,
++ ioh_sgl_io, nents_io,
++ DMA_BIDIRECTIONAL);
++ starlet_ioh_for_each_sg(ioh_sgl_io, ioh_sg, nents_io, i) {
++#if 0
++ DBG("%s: io: dma_addr=%p, dma_len=%u\n", __func__,
++ (void *)ioh_sg->dma_addr, ioh_sg->len);
++#endif
++ p->dma_addr = ioh_sg->dma_addr;
++ p->dma_len = ioh_sg->len;
++ p++;
++ }
++ }
++
++ if (iovec)
++ iovec_da = dma_map_single(ipc_dev->dev,
++ iovec, iovec_size,
++ DMA_TO_DEVICE);
++
++ req->iovec = iovec;
++ req->iovec_size = iovec_size;
++ req->sgl_nents_in = nents_in;
++ req->ioh_sgl_in = ioh_sgl_in;
++ req->sgl_nents_io = nents_io;
++ req->ioh_sgl_io = ioh_sgl_io;
++
++ req->cmd = STARLET_IOS_IOCTLV;
++ req->fd = fd;
++ req->ioctlv.request = request;
++ req->ioctlv.argc_in = nents_in;
++ req->ioctlv.argc_io = nents_io;
++ req->ioctlv.iovec_da = iovec_da;
++ req->complete = starlet_ioh_ioctlv_complete;
++
++ return 0;
++}
++
++/**
++ *
++ */
++int starlet_ioh_ioctlv(int fd, int request,
++ unsigned int nents_in,
++ struct starlet_ioh_sg *ioh_sgl_in,
++ unsigned int nents_io,
++ struct starlet_ioh_sg *ioh_sgl_io)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioh_ioctlv_prepare(req, fd, request,
++ nents_in, ioh_sgl_in,
++ nents_io, ioh_sgl_io);
++ if (!error)
++ error = starlet_ipc_call(req);
++ starlet_ipc_free_request(req);
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioh_ioctlv);
++
++/**
++ *
++ */
++int starlet_ioh_ioctlv_nowait(int fd, int request,
++ unsigned int nents_in,
++ struct starlet_ioh_sg *ioh_sgl_in,
++ unsigned int nents_io,
++ struct starlet_ioh_sg *ioh_sgl_io,
++ starlet_ipc_callback_t callback, void *arg)
++{
++ struct starlet_ipc_device *ipc_dev = starlet_ipc_get_device();
++ struct starlet_ipc_request *req;
++ int error;
++
++ req = starlet_ipc_alloc_request(ipc_dev, GFP_ATOMIC);
++ if (!req)
++ return -ENOMEM;
++
++ error = starlet_ioh_ioctlv_prepare(req, fd, request,
++ nents_in, ioh_sgl_in,
++ nents_io, ioh_sgl_io);
++ if (!error)
++ starlet_ipc_call_nowait(req, callback, arg);
++ else
++ starlet_ipc_free_request(req);
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++EXPORT_SYMBOL_GPL(starlet_ioh_ioctlv_nowait);
++
++
++/*
++ * This "watchdog" code may be used to detect misbehaving requests.
++ *
++ * Note that some requests can take a lot of time to complete.
++ * For example, a keyboard event, which is delivered every time a key is
++ * pressed or released (or a keyboard is connected/disconnected), may take an
++ * arbitrary amount of time to arrive.
++ *
++ */
++
++#define STARLET_IPC_WATCHDOG_TIME (60 * HZ)
++
++static void starlet_ipc_watchdog(unsigned long arg)
++{
++#if 0
++ struct starlet_ipc_device *ipc_dev = (struct starlet_ipc_device *)arg;
++ struct starlet_ipc_request *req;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ipc_dev->list_lock, flags);
++ list_for_each_entry(req, &ipc_dev->outstanding_list, node) {
++ if (req &&
++ time_after(jiffies,
++ req->jiffies + STARLET_IPC_WATCHDOG_TIME)) {
++ drv_printk(KERN_INFO, "request on the outstanding"
++ " list for too long\n");
++ starlet_ipc_pretty_print_request(req);
++ }
++ }
++ spin_unlock_irqrestore(&ipc_dev->list_lock, flags);
++
++ mod_timer(&ipc_dev->timer, jiffies + STARLET_IPC_WATCHDOG_TIME);
++#endif
++}
++
++/*
++ * Setup routines.
++ *
++ */
++
++/*
++ * Place here any desired hardware cleanups while drivers get written.
++ */
++static void starlet_fixups(void)
++{
++ static u32 buf[8]
++ __attribute__ ((aligned(STARLET_IPC_DMA_ALIGN + 1)));
++ struct scatterlist in[6], io[1];
++ int fd;
++ void *gpio;
++
++ /* close any open file descriptors, just in case */
++ for (fd = 0; fd < 24; fd++)
++ starlet_close(fd);
++
++ /*
++ * Hey! We are super-green. And you?
++ */
++
++ /* try to stop the dvd unit motor */
++ fd = starlet_open("/dev/di", 0);
++ if (fd >= 0) {
++ buf[0] = 0xe3000000; /* stop motor command */
++ buf[1] = 0;
++ buf[2] = 0;
++ starlet_ioctl(fd, buf[0],
++ buf, sizeof(buf),
++ buf, sizeof(buf));
++ starlet_close(fd);
++ }
++
++ /* try to disconnect the wiimote */
++ fd = starlet_open("/dev/usb/oh1/57e/305", 2);
++ if (fd >= 0) {
++ /*
++ * This assumes big endianness and 4 byte dma alignment.
++ */
++ buf[0] = 0x20000000; /* bmRequestType 0x20 */
++ buf[1] = 0x00000000; /* bRequest 0x00 */
++ buf[2] = 0x00000000; /* wValue 0x00, 0x00 */
++ buf[3] = 0x00000000; /* wIndex 0x00, 0x00 */
++ buf[4] = 0x03000000; /* wLength 0x03, 0x00 */
++ buf[5] = 0x00000000; /* timeout? 0x00 */
++ buf[6] = 0x030c0000; /* payload 0x03, 0x0c, 0x00 */
++ sg_init_table(in, 6);
++ sg_set_buf(&in[0], &buf[0], 1);
++ sg_set_buf(&in[1], &buf[1], 1);
++ sg_set_buf(&in[2], &buf[2], 2);
++ sg_set_buf(&in[3], &buf[3], 2);
++ sg_set_buf(&in[4], &buf[4], 2);
++ sg_set_buf(&in[5], &buf[5], 1);
++ sg_init_table(io, 1);
++ sg_set_buf(&io[0], &buf[6], 3);
++ starlet_ioctlv(fd, 0, 6, in, 1, io);
++ starlet_close(fd);
++ }
++
++ /*
++ * Try to turn off the front led and sensor bar.
++ * (not strictly starlet-only stuff but anyway...)
++ */
++ gpio = ioremap(0x0d8000c0, 4);
++ if (gpio) {
++ out_be32(gpio, in_be32(gpio) & ~0x120);
++ iounmap(gpio);
++ }
++}
++
++static int starlet_ipc_init(struct starlet_ipc_device *ipc_dev,
++ struct resource *mem, int irq)
++{
++ size_t size, io_size;
++ int error;
++
++ ipc_dev->random_id = get_random_int();
++
++ error = starlet_malloc_lib_bootstrap(&mem[1]);
++ if (error)
++ return error;
++
++ io_size = mem[0].end - mem[0].start + 1;
++ ipc_dev->io_base = ioremap(mem[0].start, io_size);
++ ipc_dev->irq = irq;
++
++ size = max((size_t)64, sizeof(struct starlet_ipc_request));
++ ipc_dev->dma_pool = dma_pool_create(DRV_MODULE_NAME,
++ ipc_dev->dev,
++ size, STARLET_IPC_DMA_ALIGN + 1, 0);
++ if (!ipc_dev->dma_pool) {
++ drv_printk(KERN_ERR, "dma_pool_create failed\n");
++ iounmap(ipc_dev->io_base);
++ return -ENOMEM;
++ }
++ spin_lock_init(&ipc_dev->list_lock);
++ INIT_LIST_HEAD(&ipc_dev->pending_list);
++ INIT_LIST_HEAD(&ipc_dev->outstanding_list);
++
++ starlet_ipc_device_instance = ipc_dev;
++
++ init_timer(&ipc_dev->timer);
++ ipc_dev->timer.function = starlet_ipc_watchdog;
++ ipc_dev->timer.data = (unsigned long)ipc_dev;
++ ipc_dev->timer.expires = jiffies + STARLET_IPC_WATCHDOG_TIME;
++ add_timer(&ipc_dev->timer);
++
++ error = request_irq(ipc_dev->irq, starlet_ipc_handler, 0,
++ DRV_MODULE_NAME, ipc_dev);
++ if (error) {
++ drv_printk(KERN_ERR, "request of IRQ %d failed\n", irq);
++ starlet_ipc_device_instance = NULL;
++ dma_pool_destroy(ipc_dev->dma_pool);
++ iounmap(ipc_dev->io_base);
++ return error;
++ }
++
++ /* ack and enable RBFI and TBEI interrupts */
++ out_be32(ipc_dev->io_base + STARLET_IPC_CSR,
++ STARLET_IPC_CSR_TBEIMASK | STARLET_IPC_CSR_RBFIMASK |
++ STARLET_IPC_CSR_TBEI | STARLET_IPC_CSR_RBFI);
++
++ starlet_fixups();
++
++ return error;
++}
++
++static void starlet_ipc_exit(struct starlet_ipc_device *ipc_dev)
++{
++ starlet_ipc_device_instance = NULL;
++ starlet_ipc_quiesce(ipc_dev);
++
++ del_timer(&ipc_dev->timer);
++
++ free_irq(ipc_dev->irq, ipc_dev);
++ dma_pool_destroy(ipc_dev->dma_pool);
++ iounmap(ipc_dev->io_base);
++ ipc_dev->io_base = NULL;
++}
++
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int starlet_ipc_do_probe(struct device *dev, struct resource *mem,
++ int irq)
++{
++ struct starlet_ipc_device *ipc_dev;
++ int retval;
++
++ ipc_dev = kzalloc(sizeof(*ipc_dev), GFP_KERNEL);
++ if (!ipc_dev) {
++ drv_printk(KERN_ERR, "failed to allocate ipc_dev\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, ipc_dev);
++ ipc_dev->dev = dev;
++
++ retval = starlet_ipc_init(ipc_dev, mem, irq);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(ipc_dev);
++ }
++ return retval;
++}
++
++static int starlet_ipc_do_remove(struct device *dev)
++{
++ struct starlet_ipc_device *ipc_dev = dev_get_drvdata(dev);
++
++ if (ipc_dev) {
++ starlet_ipc_exit(ipc_dev);
++ dev_set_drvdata(dev, NULL);
++ kfree(ipc_dev);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++static int starlet_ipc_do_shutdown(struct device *dev)
++{
++ struct starlet_ipc_device *ipc_dev = dev_get_drvdata(dev);
++
++ if (ipc_dev) {
++ /*
++ * We can't shutdown IPC as we need it to reboot the
++ * machine.
++ * Thus, no starlet_ipc_quiesce(ipc_dev); here, sorry.
++ */
++ return 0;
++ }
++ return -ENODEV;
++}
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int starlet_ipc_of_probe(struct of_device *odev,
++ const struct of_device_id *dev_id)
++{
++ struct resource mem[2];
++ int error;
++
++ error = of_address_to_resource(odev->node, 0, &mem[0]);
++ if (error) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENODEV;
++ }
++ error = of_address_to_resource(odev->node, 1, &mem[1]);
++ if (error) {
++ drv_printk(KERN_ERR, "missing ioh memory area (%d)\n", error);
++ return -ENODEV;
++ }
++
++ return starlet_ipc_do_probe(&odev->dev, mem,
++ irq_of_parse_and_map(odev->node, 0));
++}
++
++static int starlet_ipc_of_remove(struct of_device *odev)
++{
++ return starlet_ipc_do_remove(&odev->dev);
++}
++
++static int starlet_ipc_of_shutdown(struct of_device *odev)
++{
++ return starlet_ipc_do_shutdown(&odev->dev);
++}
++
++static struct of_device_id starlet_ipc_of_match[] = {
++ { .compatible = "nintendo,starlet-ipc" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, starlet_ipc_of_match);
++
++static struct of_platform_driver starlet_ipc_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = starlet_ipc_of_match,
++ .probe = starlet_ipc_of_probe,
++ .remove = starlet_ipc_of_remove,
++ .shutdown = starlet_ipc_of_shutdown,
++};
++
++/*
++ * Kernel module interface hooks.
++ *
++ */
++
++static int __init starlet_ipc_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ starlet_ipc_driver_version);
++
++ return of_register_platform_driver(&starlet_ipc_of_driver);
++}
++
++static void __exit starlet_ipc_exit_module(void)
++{
++ of_unregister_platform_driver(&starlet_ipc_of_driver);
++}
++
++module_init(starlet_ipc_init_module);
++module_exit(starlet_ipc_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/arch/powerpc/platforms/embedded6xx/starlet-malloc.c b/arch/powerpc/platforms/embedded6xx/starlet-malloc.c
+new file mode 100644
+index 0000000..d9c9dcd
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/starlet-malloc.c
+@@ -0,0 +1,365 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/starlet-malloc.c
++ *
++ * Nintendo Wii starlet memory allocation library
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++/*
++ * Notes from the trenches:
++ *
++ * writes from broadway to mem2
++ * - 8 or 16 bit writes to mem2 modify 64 bits
++ * - writing 0xaa results in 0xaaffffffaaffffff being written
++ * - writing 0xaabb results in 0xaabbffffaabbffff being written
++ * - 32 bit writes work fine
++ * writes from starlet to mem1
++ * - data must be 4 byte aligned, length must be 4 byte aligned
++ *
++ * write protected area (reads after writes do not return written info)
++ * 0x13620000 - 0x14000000
++ *
++ */
++
++#define DEBUG
++
++#define DBG(fmt, arg...) pr_debug(fmt, ##arg)
++
++#include <linux/kernel.h>
++#include <linux/resource.h>
++#include <asm/starlet.h>
++
++
++#define LIB_MODULE_NAME "starlet-malloc"
++#define LIB_DESCRIPTION "Nintendo Wii starlet malloc library"
++#define LIB_AUTHOR "Albert Herranz"
++
++static char starlet_malloc_lib_version[] = "0.1i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level LIB_MODULE_NAME ": " format , ## arg)
++
++
++#define STARLET_IOH_ALIGN 31
++
++/*
++ * Simple aligned kzalloc and free.
++ *
++ * Based on the idea proposed by Satya Kiran Popuri
++ * http://www.cs.uic.edu/~spopuri/amalloc.html
++ */
++
++/**
++ *
++ */
++static void *kzalloc_aligned(size_t size, gfp_t flags, size_t align)
++{
++ void *ptr, *aligned_ptr;
++ size_t aligned_size;
++
++ /* not a power of two */
++ if (align & (align - 1))
++ return NULL;
++
++ /* worst case allocation size */
++ aligned_size = size + align - 1;
++
++ /* add extra space to store allocation delta */
++ aligned_size += sizeof(size_t);
++
++ /* allocate all space */
++ ptr = kzalloc(aligned_size, flags);
++ if (!ptr)
++ return NULL;
++
++ /* calculate the aligned address, making room for the delta value */
++ aligned_ptr = PTR_ALIGN(ptr + sizeof(size_t), align);
++
++ /* save the delta before the address returned to caller */
++ *((size_t *)aligned_ptr - 1) = aligned_ptr - ptr;
++
++ return aligned_ptr;
++}
++
++static void kfree_aligned(void *aligned_ptr)
++{
++ void *ptr;
++ size_t delta;
++
++ if (!aligned_ptr)
++ return;
++
++ /* retrieve extra allocation delta */
++ delta = *((size_t *)aligned_ptr - 1);
++
++ /* calculate original allocation area start */
++ ptr = aligned_ptr - delta;
++
++ kfree(ptr);
++}
++
++
++/**
++ *
++ */
++void *starlet_kzalloc(size_t size, gfp_t flags)
++{
++ return kzalloc_aligned(size, flags, STARLET_IPC_DMA_ALIGN+1);
++}
++
++/**
++ *
++ */
++void starlet_kfree(void *ptr)
++{
++ kfree_aligned(ptr);
++}
++
++
++
++/*
++ * Functions for special input/output buffer allocations.
++ *
++ * Starlet seems to have a limitation when doing non-32 bit writes to MEM1.
++ * This can cause up to a 3 byte data loss when starlet delivers
++ * data of an unaligned size.
++ * Writes to MEM2 don't have such a limitation.
++ *
++ * We use special buffers when we need to retrieve data of an unaligned size
++ * from starlet.
++ *
++ */
++
++static int starlet_ioh_init(struct starlet_ioh *ioh, struct resource *mem)
++{
++ size_t size = mem->end - mem->start + 1;
++ rh_info_t *rheap;
++ int error = -ENOMEM;
++
++ ioh->base = ioremap_flags(mem->start, size, _PAGE_GUARDED);
++ if (!ioh->base) {
++ drv_printk(KERN_ERR, "unable to ioremap ioh area\n");
++ goto err;
++ }
++ ioh->base_phys = mem->start;
++ ioh->size = size;
++
++ {
++ void *first = NULL, *last = NULL;
++ u32 *p;
++
++ p = ioh->base + size;
++ do {
++ p--;
++ *p = 0xdeadbabe;
++ } while (p != ioh->base);
++ __dma_sync(ioh->base, size, DMA_TO_DEVICE);
++
++ p = ioh->base + size;
++ do {
++ p--;
++ if (*p != 0xdeadbabe) {
++ if (!last)
++ last = p;
++ first = p;
++ }
++ } while (p != ioh->base);
++
++ if (first)
++ drv_printk(KERN_INFO, "unreliable writes from"
++ " %p to %p\n", first, last);
++ }
++
++ rheap = rh_create(STARLET_IOH_ALIGN+1);
++ if (IS_ERR(rheap)) {
++ error = PTR_ERR(rheap);
++ goto err_rh_create;
++ }
++ ioh->rheap = rheap;
++
++ error = rh_attach_region(rheap, 0, size);
++ if (error)
++ goto err_rh_attach_region;
++
++ spin_lock_init(&ioh->lock);
++
++ drv_printk(KERN_INFO, "ioh at 0x%08lx, mapped to 0x%p, size %uk\n",
++ ioh->base_phys, ioh->base, ioh->size / 1024);
++
++ return 0;
++
++err_rh_create:
++ iounmap(ioh->base);
++err_rh_attach_region:
++ rh_destroy(ioh->rheap);
++err:
++ return error;
++}
++
++static struct starlet_ioh *starlet_ioh;
++
++/**
++ *
++ */
++static struct starlet_ioh *starlet_ioh_get(void)
++{
++ if (unlikely(!starlet_ioh))
++ drv_printk(KERN_ERR, "uninitialized ioh instance!\n");
++ return starlet_ioh;
++}
++
++unsigned long starlet_ioh_virt_to_phys(void *ptr)
++{
++ struct starlet_ioh *ioh = starlet_ioh_get();
++ unsigned long offset;
++
++ if (!ioh || !ptr)
++ return 0;
++
++ offset = ptr - ioh->base;
++ return ioh->base_phys + offset;
++}
++
++/**
++ *
++ */
++void *starlet_ioh_kzalloc_aligned(size_t size, size_t align)
++{
++ struct starlet_ioh *ioh = starlet_ioh_get();
++ unsigned long offset;
++ void *ptr;
++ unsigned long flags;
++
++ if (!ioh)
++ return NULL;
++
++ spin_lock_irqsave(&ioh->lock, flags);
++ offset = rh_alloc_align(ioh->rheap, size, align, NULL);
++ spin_unlock_irqrestore(&ioh->lock, flags);
++
++ if (IS_ERR_VALUE(offset))
++ return NULL;
++
++ ptr = ioh->base + offset;
++ memset(ptr, 0, size);
++
++ return ptr;
++}
++
++/**
++ *
++ */
++void *starlet_ioh_kzalloc(size_t size)
++{
++ return starlet_ioh_kzalloc_aligned(size, STARLET_IOH_ALIGN+1);
++}
++
++/**
++ *
++ */
++void starlet_ioh_kfree(void *ptr)
++{
++ struct starlet_ioh *ioh = starlet_ioh_get();
++ unsigned long offset;
++ unsigned long flags;
++
++ if (!ioh || !ptr)
++ return;
++
++ offset = ptr - ioh->base;
++
++ spin_lock_irqsave(&ioh->lock, flags);
++ rh_free(ioh->rheap, offset);
++ spin_unlock_irqrestore(&ioh->lock, flags);
++}
++
++int starlet_ioh_dma_map_sg(struct device *dev, struct starlet_ioh_sg *sgl,
++ int nents, enum dma_data_direction direction)
++{
++ struct starlet_ioh_sg *sg;
++ int i;
++
++ BUG_ON(direction == DMA_NONE);
++
++ starlet_ioh_for_each_sg(sgl, sg, nents, i) {
++ if (!sg->buf || sg->len == 0)
++ continue;
++ __dma_sync(sg->buf, sg->len, direction);
++ }
++ return nents;
++}
++
++void starlet_ioh_dma_unmap_sg(struct device *dev, struct starlet_ioh_sg *sgl,
++ int nents, enum dma_data_direction direction)
++{
++ /* nothing to do */
++}
++
++void starlet_ioh_sg_init_table(struct starlet_ioh_sg *sgl, unsigned int nents)
++{
++ memset(sgl, 0, nents * sizeof(*sgl));
++}
++
++/**
++ *
++ * @buf: must have been allocated using one of the starlet_ioh_* alloc
++ * functions.
++ */
++void starlet_ioh_sg_set_buf(struct starlet_ioh_sg *sg, void *buf, size_t len)
++{
++ struct starlet_ioh *ioh = starlet_ioh_get();
++ unsigned long offset;
++
++ if (buf && len) {
++ offset = buf - ioh->base;
++
++ sg->buf = buf;
++ sg->len = len;
++ sg->dma_addr = ioh->base_phys + offset;
++ } else {
++ sg->buf = NULL;
++ sg->len = 0;
++ sg->dma_addr = 0;
++ }
++}
++
++
++/**
++ *
++ */
++int starlet_malloc_lib_bootstrap(struct resource *mem)
++{
++ struct starlet_ioh *ioh;
++ int error;
++
++ if (starlet_ioh) {
++ drv_printk(KERN_WARNING, "already bootstrapped\n");
++ return 0;
++ }
++
++ drv_printk(KERN_INFO, "%s - version %s\n", LIB_DESCRIPTION,
++ starlet_malloc_lib_version);
++
++ ioh = kzalloc(sizeof(*ioh), GFP_KERNEL);
++ if (!ioh) {
++ drv_printk(KERN_ERR, "failed to allocate ioh\n");
++ return -ENOMEM;
++ }
++
++ error = starlet_ioh_init(ioh, mem);
++ if (error)
++ kfree(ioh);
++ else
++ starlet_ioh = ioh;
++
++ return error;
++}
++
++
+diff --git a/arch/powerpc/platforms/embedded6xx/starlet-stm.c b/arch/powerpc/platforms/embedded6xx/starlet-stm.c
+new file mode 100644
+index 0000000..a765964
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/starlet-stm.c
+@@ -0,0 +1,93 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/starlet-stm.c
++ *
++ * Nintendo Wii starlet STM routines
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define DBG(fmt, arg...) drv_printk(KERN_INFO, fmt, ##arg)
++
++#include <linux/kernel.h>
++#include <linux/dma-mapping.h>
++#include <asm/starlet.h>
++
++
++/*
++ * /dev/stm/immediate
++ *
++ */
++
++#define STARLET_STM_HOTRESET 0x2001
++#define STARLET_STM_SHUTDOWN 0x2003
++
++#define STARLET_DEV_STM_IMMEDIATE "/dev/stm/immediate"
++
++#define drv_printk(level, format, arg...) \
++ printk(level "starlet-stm: " format , ## arg)
++
++
++static const char dev_stm_immediate[] = STARLET_DEV_STM_IMMEDIATE;
++
++/* private aligned buffer for restart/power_off operations */
++static u32 starlet_stm_buf[(STARLET_IPC_DMA_ALIGN+1)/sizeof(u32)]
++ __attribute__ ((aligned(STARLET_IPC_DMA_ALIGN+1)));
++
++/*
++ *
++ */
++static void starlet_stm_common_restart(int request, u32 value)
++{
++ u32 *buf = starlet_stm_buf;
++ size_t len = sizeof(starlet_stm_buf);
++ int fd;
++ int error;
++
++ /* REVISIT, use polled ipc calls here */
++
++
++ drv_printk(KERN_INFO, "trying IPC restart...\n");
++
++ fd = starlet_open(dev_stm_immediate, 0);
++ if (fd < 0) {
++ drv_printk(KERN_ERR, "failed to open %s\n", dev_stm_immediate);
++ error = fd;
++ goto done;
++ }
++
++ *buf = value;
++ error = starlet_ioctl(fd, request, buf, len, buf, len);
++ if (error < 0)
++ drv_printk(KERN_ERR, "ioctl %d failed\n", request);
++ starlet_close(fd);
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++}
++
++/*
++ *
++ */
++void starlet_stm_restart(void)
++{
++ starlet_stm_common_restart(STARLET_STM_HOTRESET, 0);
++}
++/*EXPORT_SYMBOL_GPL(starlet_stm_restart);*/
++
++/*
++ *
++ */
++void starlet_stm_power_off(void)
++{
++ starlet_stm_common_restart(STARLET_STM_SHUTDOWN, 0);
++}
++/*EXPORT_SYMBOL_GPL(starlet_stm_power_off);*/
++
++
+diff --git a/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c
+new file mode 100644
+index 0000000..0b17477
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c
+@@ -0,0 +1,318 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c
++ *
++ * udbg serial input/output routines for the USB Gecko adapter.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 <asm/io.h>
++#include <asm/prom.h>
++#include <asm/udbg.h>
++
++#include <mm/mmu_decl.h>
++
++#include "usbgecko_udbg.h"
++
++
++#define EXI_CLK_32MHZ 5
++
++#define EXI_CSR 0x00
++#define EXI_CSR_CLKMASK (0x7<<4)
++#define EXI_CSR_CLK_32MHZ (EXI_CLK_32MHZ<<4)
++#define EXI_CSR_CSMASK (0x7<<7)
++#define EXI_CSR_CS_0 (0x1<<7) /* Chip Select 001 */
++
++#define EXI_CR 0x0c
++#define EXI_CR_TSTART (1<<0)
++#define EXI_CR_WRITE (1<<2)
++#define EXI_CR_READ_WRITE (2<<2)
++#define EXI_CR_TLEN(len) (((len)-1)<<4)
++
++#define EXI_DATA 0x10
++
++#define UG_READ_ATTEMPTS 100
++#define UG_WRITE_ATTEMPTS 100
++
++
++static void __iomem *ug_io_base;
++
++/*
++ * Performs one input/output transaction between the spi host and the usbgecko.
++ */
++static u32 ug_io_transaction(u32 in)
++{
++ u32 __iomem *csr_reg = ug_io_base + EXI_CSR;
++ u32 __iomem *data_reg = ug_io_base + EXI_DATA;
++ u32 __iomem *cr_reg = ug_io_base + EXI_CR;
++ u32 csr, data, cr;
++
++ /* select */
++ csr = EXI_CSR_CLK_32MHZ | EXI_CSR_CS_0;
++ out_be32(csr_reg, csr);
++
++ /* read/write */
++ data = in;
++ out_be32(data_reg, data);
++ cr = EXI_CR_TLEN(2) | EXI_CR_READ_WRITE | EXI_CR_TSTART;
++ out_be32(cr_reg, cr);
++
++ while (in_be32(cr_reg) & EXI_CR_TSTART)
++ barrier();
++
++ /* deselect */
++ out_be32(csr_reg, 0);
++
++ /* result */
++ data = in_be32(data_reg);
++
++ return data;
++}
++
++/*
++ * Returns true if an usbgecko adapter is found.
++ */
++static int ug_is_adapter_present(void)
++{
++ if (!ug_io_base)
++ return 0;
++
++ return ug_io_transaction(0x90000000) == 0x04700000;
++}
++
++/*
++ * Returns true if the TX fifo is ready for transmission.
++ */
++static int ug_is_txfifo_ready(void)
++{
++ return ug_io_transaction(0xc0000000) & 0x04000000;
++}
++
++/*
++ * Tries to transmit a character.
++ * If the TX fifo is not ready the result is undefined.
++ */
++static void ug_raw_putc(char ch)
++{
++ ug_io_transaction(0xb0000000 | (ch << 20));
++}
++
++/*
++ * Transmits a character.
++ * It silently fails if the TX fifo is not ready after a number of retries.
++ */
++static void ug_putc(char ch)
++{
++ int count = UG_WRITE_ATTEMPTS;
++
++ if (!ug_io_base)
++ return;
++
++ if (ch == '\n')
++ ug_putc('\r');
++
++ while (!ug_is_txfifo_ready() && count--)
++ barrier();
++ if (count)
++ ug_raw_putc(ch);
++}
++
++#if 0
++/*
++ * Trasmits a null terminated character string.
++ */
++static void ug_puts(char *s)
++{
++ while (*s)
++ ug_putc(*s++);
++}
++#endif
++
++/*
++ * Returns true if the RX fifo is ready for transmission.
++ */
++static int ug_is_rxfifo_ready(void)
++{
++ return ug_io_transaction(0xd0000000) & 0x04000000;
++}
++
++/*
++ * Tries to receive a character.
++ * If a character is unavailable the function returns -1.
++ */
++static int ug_raw_getc(void)
++{
++ u32 data = ug_io_transaction(0xa0000000);
++ if (data & 0x08000000)
++ return (data >> 16) & 0xff;
++ else
++ return -1;
++}
++
++/*
++ * Receives a character.
++ * It fails if the RX fifo is not ready after a number of retries.
++ */
++static int ug_getc(void)
++{
++ int count = UG_READ_ATTEMPTS;
++
++ if (!ug_io_base)
++ return -1;
++
++ while (!ug_is_rxfifo_ready() && count--)
++ barrier();
++ return ug_raw_getc();
++}
++
++/*
++ * udbg functions.
++ *
++ */
++
++/*
++ * Transmits a character.
++ */
++void ug_udbg_putc(char ch)
++{
++ ug_putc(ch);
++}
++
++/*
++ * Receives a character. Waits until a character is available.
++ */
++static int ug_udbg_getc(void)
++{
++ int ch;
++
++ while ((ch = ug_getc()) == -1)
++ barrier();
++ return ch;
++}
++
++/*
++ * Receives a character. If a character is not available, returns -1.
++ */
++static int ug_udbg_getc_poll(void)
++{
++ if (!ug_is_rxfifo_ready())
++ return -1;
++ return ug_getc();
++}
++
++/*
++ * Retrieves and prepares the virtual address needed to access the hardware.
++ */
++static void __iomem *ug_udbg_setup_io_base(struct device_node *np)
++{
++ phys_addr_t paddr;
++ const unsigned int *reg;
++
++ reg = of_get_property(np, "reg", NULL);
++ if (reg) {
++ paddr = of_translate_address(np, reg);
++ if (paddr) {
++ ug_io_base = ioremap(paddr, reg[1]);
++ return ug_io_base;
++ }
++ }
++ return NULL;
++}
++
++/*
++ * USB Gecko udbg support initialization.
++ */
++void __init ug_udbg_init(void)
++{
++ struct device_node *np = NULL;
++ struct device_node *stdout;
++ const char *path;
++
++ if (ug_io_base)
++ udbg_printf("%s: early -> final\n", __func__);
++
++ if (!of_chosen) {
++ udbg_printf("%s: missing of_chosen\n", __func__);
++ goto done;
++ }
++
++ path = of_get_property(of_chosen, "linux,stdout-path", NULL);
++ if (!path) {
++ udbg_printf("%s: missing %s property", __func__,
++ "linux,stdout-path");
++ goto done;
++ }
++
++ stdout = of_find_node_by_path(path);
++ if (!stdout) {
++ udbg_printf("%s: missing path %s", __func__, path);
++ goto done;
++ }
++
++ for (np = NULL;
++ (np = of_find_compatible_node(np, NULL, "usbgecko,usbgecko"));)
++ if (np == stdout)
++ break;
++
++ of_node_put(stdout);
++ if (!np) {
++ udbg_printf("%s: stdout is not an usbgecko", __func__);
++ goto done;
++ }
++
++ if (!ug_udbg_setup_io_base(np)) {
++ udbg_printf("%s: failed to setup io base", __func__);
++ goto done;
++ }
++
++ if (!ug_is_adapter_present()) {
++ udbg_printf("usbgecko_udbg: not found\n");
++ ug_io_base = NULL;
++ } else {
++ udbg_putc = ug_udbg_putc;
++ udbg_getc = ug_udbg_getc;
++ udbg_getc_poll = ug_udbg_getc_poll;
++ udbg_printf("usbgecko_udbg: ready\n");
++ }
++
++done:
++ if (np)
++ of_node_put(np);
++ return;
++}
++
++#ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO
++
++/*
++ * USB Gecko early debug support initialization for udbg.
++ *
++ */
++void __init udbg_init_usbgecko(void)
++{
++ unsigned long vaddr, paddr;
++
++#if defined(CONFIG_GAMECUBE)
++ paddr = 0x0c000000;
++#elif defined(CONFIG_WII)
++ paddr = 0x0d000000;
++#else
++#error Invalid platform for USB Gecko based early debugging.
++#endif
++
++ vaddr = 0xc0000000 | paddr;
++ setbat(1, vaddr, paddr, 128*1024, _PAGE_IO);
++
++ ug_io_base = (void __iomem *)(vaddr | 0x6814);
++
++ udbg_putc = ug_udbg_putc;
++ udbg_getc = ug_udbg_getc;
++ udbg_getc_poll = ug_udbg_getc_poll;
++}
++
++#endif /* CONFIG_PPC_EARLY_DEBUG_USBGECKO */
+diff --git a/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h
+new file mode 100644
+index 0000000..98034ee
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h
+@@ -0,0 +1,36 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h
++ *
++ * udbg serial input/output routines for the USB Gecko adapter.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __USBGECKO_UDBG_H
++#define __USBGECKO_UDBG_H
++
++#ifdef CONFIG_USBGECKO_UDBG
++
++extern void __init ug_udbg_init(void);
++
++#else
++
++static inline void __init ug_udbg_init(void)
++{
++}
++
++#endif /* CONFIG_USBGECKO_UDBG */
++
++#ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO
++
++void __init udbg_init_usbgecko(void);
++
++#endif /* CONFIG_PPC_EARLY_DEBUG_USBGECKO */
++
++#endif /* __USBGECKO_UDBG_H */
+diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c
+new file mode 100644
+index 0000000..7a7176d
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/wii.c
+@@ -0,0 +1,115 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/wii.c
++ *
++ * Nintendo Wii board-specific support
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/irq.h>
++#include <linux/seq_file.h>
++#include <linux/kexec.h>
++
++#include <asm/io.h>
++#include <asm/machdep.h>
++#include <asm/prom.h>
++#include <asm/time.h>
++#include <asm/starlet.h>
++#include <asm/udbg.h>
++
++#include "flipper-pic.h"
++#include "gcnvi_udbg.h"
++#include "usbgecko_udbg.h"
++
++
++static void wii_restart(char *cmd)
++{
++ starlet_stm_restart();
++ local_irq_disable();
++ /* spin until power button pressed */
++ for (;;)
++ cpu_relax();
++}
++
++static void wii_power_off(void)
++{
++ starlet_stm_power_off();
++ local_irq_disable();
++ /* spin until power button pressed */
++ for (;;)
++ cpu_relax();
++}
++
++static void wii_halt(void)
++{
++ wii_restart(NULL);
++}
++
++static void wii_show_cpuinfo(struct seq_file *m)
++{
++ seq_printf(m, "vendor\t\t: IBM\n");
++ seq_printf(m, "machine\t\t: Nintendo Wii\n");
++}
++
++static void __init wii_setup_arch(void)
++{
++ ug_udbg_init();
++ gcnvi_udbg_init();
++}
++
++static void __init wii_init_early(void)
++{
++}
++
++static int __init wii_probe(void)
++{
++ unsigned long dt_root;
++
++ dt_root = of_get_flat_dt_root();
++ if (!of_flat_dt_is_compatible(dt_root, "nintendo,wii"))
++ return 0;
++
++ return 1;
++}
++
++#ifdef CONFIG_KEXEC
++static void wii_shutdown(void)
++{
++ /* currently not used */
++}
++
++static int wii_kexec_prepare(struct kimage *image)
++{
++ return 0;
++}
++#endif /* CONFIG_KEXEC */
++
++
++define_machine(wii) {
++ .name = "wii",
++ .probe = wii_probe,
++ .setup_arch = wii_setup_arch,
++ .init_early = wii_init_early,
++ .show_cpuinfo = wii_show_cpuinfo,
++ .restart = wii_restart,
++ .power_off = wii_power_off,
++ .halt = wii_halt,
++ .init_IRQ = flipper_pic_probe,
++ .get_irq = flipper_pic_get_irq,
++ .calibrate_decr = generic_calibrate_decr,
++ .progress = udbg_progress,
++#ifdef CONFIG_KEXEC
++ .machine_shutdown = wii_shutdown,
++ .machine_kexec_prepare = wii_kexec_prepare,
++ .machine_kexec = default_machine_kexec,
++#endif
++};
++
+diff --git a/arch/powerpc/platforms/embedded6xx/wii_dev.c b/arch/powerpc/platforms/embedded6xx/wii_dev.c
+new file mode 100644
+index 0000000..c5ed8b5
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/wii_dev.c
+@@ -0,0 +1,44 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/wii_dev.c
++ *
++ * Nintendo Wii platform device setup.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/of_platform.h>
++
++#include <asm/machdep.h>
++
++static struct of_device_id wii_of_bus[] = {
++ { .compatible = "nintendo,hollywood", },
++ { },
++};
++
++static int __init wii_device_probe(void)
++{
++ struct device_node *np;
++
++ if (!machine_is(wii))
++ return 0;
++
++ of_platform_bus_probe(NULL, wii_of_bus, NULL);
++
++ np = of_find_compatible_node(NULL, NULL, "nintendo,hollywood-mem2");
++ if (np) {
++ of_platform_device_create(np, NULL, NULL);
++ of_node_put(np);
++ }
++
++ return 0;
++}
++device_initcall(wii_device_probe);
++
+diff --git a/drivers/Kconfig b/drivers/Kconfig
+index 2f557f5..08d2933 100644
+--- a/drivers/Kconfig
++++ b/drivers/Kconfig
+@@ -50,6 +50,8 @@ source "drivers/char/Kconfig"
+
+ source "drivers/i2c/Kconfig"
+
++source "drivers/exi/Kconfig"
++
+ source "drivers/spi/Kconfig"
+
+ source "drivers/gpio/Kconfig"
+diff --git a/drivers/Makefile b/drivers/Makefile
+index fceb71a..d53f062 100644
+--- a/drivers/Makefile
++++ b/drivers/Makefile
+@@ -97,6 +97,8 @@ obj-$(CONFIG_DMA_ENGINE) += dma/
+ obj-$(CONFIG_DCA) += dca/
+ obj-$(CONFIG_HID) += hid/
+ obj-$(CONFIG_PPC_PS3) += ps3/
++obj-$(CONFIG_GAMECUBE_EXI) += exi/
++obj-$(CONFIG_GAMECUBE_SI) += input/si/
+ obj-$(CONFIG_OF) += of/
+ obj-$(CONFIG_SSB) += ssb/
+ obj-$(CONFIG_VIRTIO) += virtio/
+diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
+index 0344a8a..7dd9143 100644
+--- a/drivers/block/Kconfig
++++ b/drivers/block/Kconfig
+@@ -56,6 +56,93 @@ config AMIGA_Z2RAM
+ To compile this driver as a module, choose M here: the
+ module will be called z2ram.
+
++config GAMECUBE_SD
++ tristate "Nintendo GameCube/Wii MMC/SD card"
++ depends on GAMECUBE_EXI
++ help
++ This enables support for using SD and MMC cards through
++ the Nintendo SD Card Adapter (DOL-019) or compatible hardware.
++
++ You probably want to compile FAT support, and the required
++ codepages, or mount will complain. See Filesystems -> DOS/FAT/NT
++ filesystems and Filesystems -> Native Language Support
++
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called gcn-sd.
++
++config GAMECUBE_ARAM
++ tristate "Nintendo GameCube Auxiliary RAM (ARAM)"
++ depends on GAMECUBE
++ help
++ This enables support for using the 16MB of ARAM found in the
++ Nintendo GameCube as a block device.
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called gcn-aram.
++
++config GAMECUBE_DI
++ tristate "Nintendo GameCube Disk Interface (DI)"
++ depends on GAMECUBE
++ help
++ This enables support for using the DVD drive unit found
++ in the Nintendo GameCube.
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called gcn-di.
++
++config GAMECUBE_DVD
++ tristate "Nintendo Gamecube DVD"
++ depends on GAMECUBE && !GAMECUBE_DI && BROKEN
++ help
++ This enables support for using the mini-DVD drive on the
++ Nintendo Gamecube.
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called gcn-dvd
++
++config GAMECUBE_MEMCARD
++ tristate "Nintendo GameCube/Wii memory card (EXPERIMENTAL)"
++ depends on GAMECUBE_EXI && EXPERIMENTAL && BROKEN
++ help
++ This enables support for using memory cards compatible with the
++ Nintendo GameCube.
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called gcn-memcard.
++
++config WII_MEM2
++ tristate "Nintendo Wii MEM2"
++ depends on WII
++ help
++ This enables support for using the MEM2 found in the
++ Nintendo Wii as a block device.
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called rvl-mem2.
++
++ config WII_SD
++ tristate "Nintendo Wii front slot MMC/SD"
++ depends on WII
++ help
++ This enables support for MMC/SD cards using the front SD card
++ slot of the Nintendo Wii.
++
++ You probably want to compile FAT support, and the required
++ codepages, or mount will complain. See Filesystems -> DOS/FAT/NT
++ filesystems and Filesystems -> Native Language Support
++
++ Say Y if you want to include this driver in the kernel.
++
++ To compile this driver as a module, choose M here: the
++ module will be called rvl-stsd.
++
+ config BLK_DEV_XD
+ tristate "XT hard disk support"
+ depends on ISA && ISA_DMA_API
+diff --git a/drivers/block/Makefile b/drivers/block/Makefile
+index 204332b..1af7546 100644
+--- a/drivers/block/Makefile
++++ b/drivers/block/Makefile
+@@ -11,6 +11,13 @@ obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o
+ obj-$(CONFIG_PS3_DISK) += ps3disk.o
+ obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o
+ obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o
++obj-$(CONFIG_GAMECUBE_SD) += gcn-sd.o
++obj-$(CONFIG_GAMECUBE_ARAM) += gcn-aram.o
++obj-$(CONFIG_GAMECUBE_DI) += gcn-di/
++obj-$(CONFIG_GAMECUBE_DVD) += gcn-dvd/
++obj-$(CONFIG_GAMECUBE_MEMCARD) += gcn-memcard.o
++obj-$(CONFIG_WII_MEM2) += rvl-mem2.o
++obj-$(CONFIG_WII_SD) += rvl-stsd.o
+ obj-$(CONFIG_BLK_DEV_RAM) += brd.o
+ obj-$(CONFIG_BLK_DEV_LOOP) += loop.o
+ obj-$(CONFIG_BLK_DEV_XD) += xd.o
+diff --git a/drivers/block/gcn-aram.c b/drivers/block/gcn-aram.c
+new file mode 100644
+index 0000000..bc2774d
+--- /dev/null
++++ b/drivers/block/gcn-aram.c
+@@ -0,0 +1,597 @@
++/*
++ * drivers/block/gcn-aram.c
++ *
++ * Nintendo GameCube Auxiliary RAM (ARAM) block driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2005,2007,2008,2009 Albert Herranz
++ *
++ * Based on previous work by Franz Lehner.
++ *
++ * This program is free software; you can redistribute 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/blkdev.h>
++#include <linux/dma-mapping.h>
++#include <linux/fcntl.h> /* O_ACCMODE */
++#include <linux/hdreg.h> /* HDIO_GETGEO */
++#include <linux/interrupt.h>
++#include <linux/major.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <linux/io.h>
++
++
++#define DRV_MODULE_NAME "gcn-aram"
++#define DRV_DESCRIPTION "Nintendo GameCube Auxiliary RAM (ARAM) block driver"
++#define DRV_AUTHOR "Todd Jeffreys <todd@voidpointer.org>, " \
++ "Albert Herranz"
++
++static char aram_driver_version[] = "4.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++/*
++ * Hardware.
++ */
++#define ARAM_DMA_ALIGN 0x1f /* 32 bytes */
++
++#define DSP_CSR 0x00a
++#define DSP_CSR_RES (1<<0)
++#define DSP_CSR_PIINT (1<<1)
++#define DSP_CSR_HALT (1<<2)
++#define DSP_CSR_AIDINT (1<<3)
++#define DSP_CSR_AIDINTMASK (1<<4)
++#define DSP_CSR_ARINT (1<<5)
++#define DSP_CSR_ARINTMASK (1<<6)
++#define DSP_CSR_DSPINT (1<<7)
++#define DSP_CSR_DSPINTMASK (1<<8)
++#define DSP_CSR_DSPDMA (1<<9)
++#define DSP_CSR_RESETXXX (1<<11)
++
++#define AR_SIZE 0x012
++
++#define AR_MODE 0x016
++#define AR_MODE_ACCELERATOR (1 << 0)
++
++#define AR_REFRESH 0x01a
++
++#define AR_DMA_MMADDR 0x020
++
++#define AR_DMA_ARADDR 0x024
++
++#define AR_DMA_CNT_H 0x028
++#define AR_READ (1 << 31)
++#define AR_WRITE 0
++
++#define AR_DMA_CNT_L 0x02a
++
++#define AR_DMA_CNT AR_DMA_CNT_H
++
++/*
++ * Driver settings
++ */
++#define ARAM_NAME DRV_MODULE_NAME
++#define ARAM_MAJOR Z2RAM_MAJOR /* we share the major */
++
++#define ARAM_SECTOR_SIZE PAGE_SIZE
++
++#define ARAM_BUFFERSIZE (16*1024*1024)
++
++/*
++ * Driver data.
++ */
++struct aram_drvdata {
++ spinlock_t lock;
++
++ spinlock_t io_lock;
++ void __iomem *io_base;
++ int irq;
++
++ struct block_device_operations fops;
++ struct gendisk *disk;
++ struct request_queue *queue;
++
++ struct request *req;
++ dma_addr_t dma_addr;
++ size_t dma_len;
++
++ int ref_count;
++
++ struct device *dev;
++};
++
++
++static inline enum dma_data_direction rq_dir_to_dma_dir(struct request *req)
++{
++ if (rq_data_dir(req) == READ)
++ return DMA_FROM_DEVICE;
++ else
++ return DMA_TO_DEVICE;
++}
++
++static inline int rq_dir_to_aram_dir(struct request *req)
++{
++ if (rq_data_dir(req) == READ)
++ return AR_READ;
++ else
++ return AR_WRITE;
++}
++
++static void aram_start_dma_transfer(struct aram_drvdata *drvdata,
++ unsigned long aram_addr)
++{
++ void __iomem *io_base = drvdata->io_base;
++ dma_addr_t dma_addr = drvdata->dma_addr;
++ size_t dma_len = drvdata->dma_len;
++
++ /* DMA transfers require proper alignment */
++ BUG_ON((dma_addr & ARAM_DMA_ALIGN) != 0 ||
++ (dma_len & ARAM_DMA_ALIGN) != 0);
++
++ out_be32(io_base + AR_DMA_MMADDR, dma_addr);
++ out_be32(io_base + AR_DMA_ARADDR, aram_addr);
++
++ /* writing the low-word kicks off the DMA */
++ out_be32(io_base + AR_DMA_CNT,
++ rq_dir_to_aram_dir(drvdata->req) | dma_len);
++}
++
++static irqreturn_t aram_irq_handler(int irq, void *dev0)
++{
++ struct aram_drvdata *drvdata = dev0;
++ struct request *req;
++ u16 __iomem *csr_reg = drvdata->io_base + DSP_CSR;
++ u16 csr;
++ unsigned long flags;
++
++ spin_lock_irqsave(&drvdata->io_lock, flags);
++
++ csr = in_be16(csr_reg);
++
++ /*
++ * Do nothing if the interrupt is not targetted for us.
++ * We share this interrupt with the sound driver.
++ */
++ if (!(csr & DSP_CSR_ARINT)) {
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++ return IRQ_NONE;
++ }
++
++ /* strictly ack the ARAM interrupt, and nothing more */
++ csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT);
++ out_be16(csr_reg, csr);
++
++ /* pick up current request being serviced */
++ req = drvdata->req;
++ drvdata->req = NULL;
++
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++
++ if (req) {
++ __blk_end_request(req, 0, req->current_nr_sectors << 9);
++ dma_unmap_single(drvdata->dev,
++ drvdata->dma_addr, drvdata->dma_len,
++ rq_dir_to_dma_dir(req));
++ spin_lock(&drvdata->lock);
++ blk_start_queue(drvdata->queue);
++ spin_unlock(&drvdata->lock);
++ } else {
++ drv_printk(KERN_ERR, "ignoring interrupt, no request\n");
++ }
++
++ return IRQ_HANDLED;
++}
++
++static void aram_do_request(struct request_queue *q)
++{
++ struct aram_drvdata *drvdata = q->queuedata;
++ struct request *req;
++ unsigned long aram_addr;
++ size_t len;
++ unsigned long flags;
++
++ req = elv_next_request(q);
++ while (req) {
++ spin_lock_irqsave(&drvdata->io_lock, flags);
++
++ /* we schedule a single request each time */
++ if (drvdata->req) {
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++ blk_stop_queue(q);
++ break;
++ }
++
++ blkdev_dequeue_request(req);
++
++ /* ignore requests that we can't handle */
++ if (!blk_fs_request(req)) {
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++ continue;
++ }
++
++ /* store the request being handled */
++ drvdata->req = req;
++ blk_stop_queue(q);
++
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++
++ /* calculate the ARAM address and length */
++ aram_addr = req->sector << 9;
++ len = req->current_nr_sectors << 9;
++
++ /* give up if the request goes out of bounds */
++ if (aram_addr + len > ARAM_BUFFERSIZE) {
++ drv_printk(KERN_ERR, "bad access: block=%lu,"
++ " size=%u\n", (unsigned long)req->sector,
++ len);
++ /* XXX correct? the request is already dequeued */
++ end_request(req, 0);
++ continue;
++ }
++
++ BUG_ON(req->nr_phys_segments != 1);
++
++ /* perform DMA mappings */
++ drvdata->dma_len = len;
++ drvdata->dma_addr = dma_map_single(drvdata->dev,
++ req->buffer, len,
++ rq_dir_to_dma_dir(req));
++
++ /* start the DMA transfer */
++ aram_start_dma_transfer(drvdata, aram_addr);
++ break;
++ }
++}
++
++/*
++ * Block device hooks.
++ *
++ */
++
++static int aram_open(struct block_device *bdev, fmode_t mode)
++{
++ struct aram_drvdata *drvdata = bdev->bd_disk->private_data;
++ unsigned long flags;
++ int retval = 0;
++
++ spin_lock_irqsave(&drvdata->lock, flags);
++
++ /* only allow a minor of 0 to be opened */
++ if (MINOR(bdev->bd_dev)) {
++ retval = -ENODEV;
++ goto out;
++ }
++
++ /* honor exclusive open mode */
++ if (drvdata->ref_count == -1 ||
++ (drvdata->ref_count && (mode & FMODE_EXCL))) {
++ retval = -EBUSY;
++ goto out;
++ }
++
++ if ((mode & FMODE_EXCL))
++ drvdata->ref_count = -1;
++ else
++ drvdata->ref_count++;
++
++out:
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++ return retval;
++}
++
++static int aram_release(struct gendisk *disk, fmode_t mode)
++{
++ struct aram_drvdata *drvdata = disk->private_data;
++ unsigned long flags;
++
++ spin_lock_irqsave(&drvdata->lock, flags);
++ if (drvdata->ref_count > 0)
++ drvdata->ref_count--;
++ else
++ drvdata->ref_count = 0;
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++
++ return 0;
++}
++
++static int aram_getgeo(struct block_device *bdev, struct hd_geometry *geo)
++{
++ geo->cylinders = get_capacity(bdev->bd_disk) / (4 * 16);
++ geo->heads = 4;
++ geo->sectors = 16;
++ return 0;
++}
++
++static struct block_device_operations aram_fops = {
++ .owner = THIS_MODULE,
++ .open = aram_open,
++ .release = aram_release,
++ .getgeo = aram_getgeo,
++};
++
++
++/*
++ * Setup routines.
++ *
++ */
++
++static int aram_init_blk_dev(struct aram_drvdata *drvdata)
++{
++ struct gendisk *disk;
++ struct request_queue *queue;
++ int retval;
++
++ drvdata->ref_count = 0;
++
++ retval = register_blkdev(ARAM_MAJOR, ARAM_NAME);
++ if (retval)
++ goto err_register_blkdev;
++
++ retval = -ENOMEM;
++ spin_lock_init(&drvdata->lock);
++ spin_lock_init(&drvdata->io_lock);
++ queue = blk_init_queue(aram_do_request, &drvdata->lock);
++ if (!queue)
++ goto err_blk_init_queue;
++
++ blk_queue_hardsect_size(queue, ARAM_SECTOR_SIZE);
++ blk_queue_dma_alignment(queue, ARAM_DMA_ALIGN);
++ blk_queue_max_phys_segments(queue, 1);
++ blk_queue_max_hw_segments(queue, 1);
++ queue->queuedata = drvdata;
++ drvdata->queue = queue;
++
++ disk = alloc_disk(1);
++ if (!disk)
++ goto err_alloc_disk;
++
++ disk->major = ARAM_MAJOR;
++ disk->first_minor = 0;
++ disk->fops = &aram_fops;
++ strcpy(disk->disk_name, ARAM_NAME);
++ disk->queue = drvdata->queue;
++ set_capacity(disk, ARAM_BUFFERSIZE >> 9);
++ disk->private_data = drvdata;
++ drvdata->disk = disk;
++
++ add_disk(drvdata->disk);
++
++ retval = 0;
++ goto out;
++
++err_alloc_disk:
++ blk_cleanup_queue(drvdata->queue);
++err_blk_init_queue:
++ unregister_blkdev(ARAM_MAJOR, ARAM_NAME);
++err_register_blkdev:
++out:
++ return retval;
++}
++
++static void aram_exit_blk_dev(struct aram_drvdata *drvdata)
++{
++ if (drvdata->disk) {
++ del_gendisk(drvdata->disk);
++ put_disk(drvdata->disk);
++ }
++ if (drvdata->queue)
++ blk_cleanup_queue(drvdata->queue);
++ unregister_blkdev(ARAM_MAJOR, ARAM_NAME);
++}
++
++static void aram_quiesce(struct aram_drvdata *drvdata)
++{
++ u16 __iomem *csr_reg = drvdata->io_base + DSP_CSR;
++ u16 csr;
++ unsigned long flags;
++
++ /*
++ * Disable ARAM interrupts, but do not accidentally ack non-ARAM ones.
++ */
++ spin_lock_irqsave(&drvdata->io_lock, flags);
++ csr = in_be16(csr_reg);
++ csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT | DSP_CSR_ARINTMASK);
++ out_be16(csr_reg, csr);
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++
++ /* wait until pending transfers are finished */
++ while (in_be16(csr_reg) & DSP_CSR_DSPDMA)
++ cpu_relax();
++}
++
++static int aram_init_irq(struct aram_drvdata *drvdata)
++{
++ u16 __iomem *csr_reg = drvdata->io_base + DSP_CSR;
++ u16 csr;
++ unsigned long flags;
++ int retval;
++
++ retval = request_irq(drvdata->irq, aram_irq_handler,
++ IRQF_DISABLED | IRQF_SHARED,
++ DRV_MODULE_NAME, drvdata);
++ if (retval) {
++ drv_printk(KERN_ERR, "request of IRQ %d failed\n",
++ drvdata->irq);
++ goto out;
++ }
++
++ /*
++ * Enable ARAM interrupts, and route them to the processor.
++ * Make sure to preserve the AI and DSP interrupts.
++ */
++ spin_lock_irqsave(&drvdata->io_lock, flags);
++ csr = in_be16(csr_reg);
++ csr |= (DSP_CSR_ARINT | DSP_CSR_ARINTMASK | DSP_CSR_PIINT);
++ csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT);
++ out_be16(csr_reg, csr);
++ spin_unlock_irqrestore(&drvdata->io_lock, flags);
++
++out:
++ return retval;
++}
++
++static void aram_exit_irq(struct aram_drvdata *drvdata)
++{
++ aram_quiesce(drvdata);
++
++ free_irq(drvdata->irq, drvdata);
++}
++
++static int aram_init(struct aram_drvdata *drvdata,
++ struct resource *mem, int irq)
++{
++ int retval;
++
++ drvdata->io_base = ioremap(mem->start, mem->end - mem->start + 1);
++ drvdata->irq = irq;
++
++ retval = aram_init_blk_dev(drvdata);
++ if (!retval) {
++ retval = aram_init_irq(drvdata);
++ if (retval)
++ aram_exit_blk_dev(drvdata);
++ }
++ return retval;
++}
++
++static void aram_exit(struct aram_drvdata *drvdata)
++{
++ aram_exit_blk_dev(drvdata);
++ aram_exit_irq(drvdata);
++ if (drvdata->io_base) {
++ iounmap(drvdata->io_base);
++ drvdata->io_base = NULL;
++ }
++}
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int aram_do_probe(struct device *dev, struct resource *mem,
++ int irq)
++{
++ struct aram_drvdata *drvdata;
++ int retval;
++
++ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
++ if (!drvdata) {
++ drv_printk(KERN_ERR, "failed to allocate aram_drvdata\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, drvdata);
++ drvdata->dev = dev;
++
++ retval = aram_init(drvdata, mem, irq);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ }
++ return retval;
++}
++
++static int aram_do_remove(struct device *dev)
++{
++ struct aram_drvdata *drvdata = dev_get_drvdata(dev);
++
++ if (drvdata) {
++ aram_exit(drvdata);
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++static int aram_do_shutdown(struct device *dev)
++{
++ struct aram_drvdata *drvdata = dev_get_drvdata(dev);
++
++ if (drvdata)
++ aram_quiesce(drvdata);
++ return 0;
++}
++
++
++/*
++ * OF platform device routines.
++ *
++ */
++
++static int __init aram_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource res;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &res);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENODEV;
++ }
++
++ return aram_do_probe(&odev->dev,
++ &res, irq_of_parse_and_map(odev->node, 0));
++}
++
++static int __exit aram_of_remove(struct of_device *odev)
++{
++ return aram_do_remove(&odev->dev);
++}
++
++static int aram_of_shutdown(struct of_device *odev)
++{
++ return aram_do_shutdown(&odev->dev);
++}
++
++
++static struct of_device_id aram_of_match[] = {
++ { .compatible = "nintendo,flipper-auxram" },
++ { },
++};
++
++
++MODULE_DEVICE_TABLE(of, aram_of_match);
++
++static struct of_platform_driver aram_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = aram_of_match,
++ .probe = aram_of_probe,
++ .remove = aram_of_remove,
++ .shutdown = aram_of_shutdown,
++};
++
++/*
++ * Module interfaces.
++ *
++ */
++
++static int __init aram_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ aram_driver_version);
++
++ return of_register_platform_driver(&aram_of_driver);
++}
++
++static void __exit aram_exit_module(void)
++{
++ of_unregister_platform_driver(&aram_of_driver);
++}
++
++module_init(aram_init_module);
++module_exit(aram_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/block/gcn-di/Makefile b/drivers/block/gcn-di/Makefile
+new file mode 100644
+index 0000000..09a410d
+--- /dev/null
++++ b/drivers/block/gcn-di/Makefile
+@@ -0,0 +1,50 @@
++obj-$(CONFIG_GAMECUBE_DI) += gcn-di.o
++
++$(obj)/gcn-di.o: $(obj)/drive_20010608.h \
++ $(obj)/drive_20010831.h \
++ $(obj)/drive_20020402.h \
++ $(obj)/drive_20020823.h
++
++#CONFIG_GAMECUBE_DI_BUILD_FIRMWARE=y
++
++ifeq ($(CONFIG_GAMECUBE_DI_BUILD_FIRMWARE),y)
++
++ASMN102 = mn10200-linux-as
++LDMN102 = mn10200-linux-ld
++OCMN102 = mn10200-linux-objcopy
++
++quiet_cmd_build_difw = BLD FW $@
++cmd_build_difw = \
++ $(CPP) -DDRIVE_MODEL=$(DRIVE_MODEL) $< > $(obj)/$(@F).s; \
++ $(ASMN102) -o $(obj)/$(@F).o $(obj)/$(@F).s; \
++ $(LDMN102) --section-start absolute=0 -Ttext=0x40d000 \
++ -o $(obj)/$(@F).elf -e 0x40d000 $(obj)/$(@F).o; \
++ $(OCMN102) -I elf32-mn10200 -O binary $(obj)/$(@F).elf \
++ $(obj)/$(@F).bin; \
++ (echo -n "static "; cat $(obj)/$(@F).bin | scripts/bin2c "$(subst .h,,$(@F))_firmware") > $@; \
++ rm -f $(obj)/$(@F).o $(obj)/$(@F).elf $(obj)/$(@F).bin $(obj)/$(@F).s
++
++
++targets += drive_20010608.h
++$(obj)/drive_20010608.h: DRIVE_MODEL := 0x20010608
++$(obj)/drive_20010608.h: $(src)/drive_all.S FORCE
++ $(call if_changed,build_difw)
++
++targets += drive_20010831.h
++$(obj)/drive_20010831.h: DRIVE_MODEL := 0x20010831
++$(obj)/drive_20010831.h: $(src)/drive_all.S FORCE
++ $(call if_changed,build_difw)
++
++targets += drive_20020402.h
++$(obj)/drive_20020402.h: DRIVE_MODEL := 0x20020402
++$(obj)/drive_20020402.h: $(src)/drive_all.S FORCE
++ $(call if_changed,build_difw)
++
++targets += drive_20020823.h
++$(obj)/drive_20020823.h: DRIVE_MODEL := 0x20020823
++$(obj)/drive_20020823.h: $(src)/drive_all.S FORCE
++ $(call if_changed,build_difw)
++
++endif
++
++
+diff --git a/drivers/block/gcn-di/drive_20010608.h b/drivers/block/gcn-di/drive_20010608.h
+new file mode 100644
+index 0000000..7c3e9d8
+--- /dev/null
++++ b/drivers/block/gcn-di/drive_20010608.h
+@@ -0,0 +1,25 @@
++static const char drive_20010608_firmware[] =
++ "\xf7\x10\xff\xf7\xf4\x74\x25\xd0\x40\xf7\x20\x4c\x80\xf4\x74\x42"
++ "\x9d\x08\xf7\x20\xd6\xfc\xf4\x74\x45\xb1\x08\xf7\x20\xd2\xfc\x80"
++ "\x0c\xc4\xda\xfc\xfe\xc8\xda\xfc\xf5\x00\x01\xe9\x70\xc8\xda\xfc"
++ "\xf5\x00\x02\xe9\x75\xf4\x74\x02\xed\x40\x80\x02\xf0\x20\xc8\x78"
++ "\x80\xc0\x90\x81\xdc\xa8\x80\xf5\x30\x00\xf4\x44\x41\xd1\x40\xf8"
++ "\xaa\x00\x10\xf4\xd0\x3c\xd1\x40\xf0\x01\xdc\xa8\x80\xf5\x30\x00"
++ "\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x41\xd1\x40\x10\xfe\xf7\x48\xee"
++ "\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xa9\x80\xfd\x79\x00\xea\x0c\xcc"
++ "\xa9\x80\xc4\xa4\x81\xcc\xaa\x80\xc4\x88\x81\xdc\xa8\x80\xf8\xe0"
++ "\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10\x03\xfe\xc8\xda\xfc"
++ "\xf7\x00\xfe\xff\xf7\x31\xd2\xfc\xea\x0b\xc8\xda\xfc\xf7\x00\xfd"
++ "\xff\xf7\x31\xd6\xfc\xc4\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4"
++ "\x44\xfc\xf4\x7d\x45\xb1\x08\xe9\x07\xf4\x75\x0c\xd1\x40\xea\x0c"
++ "\xf4\x7d\x42\x9d\x08\xe9\x05\xf4\x75\x35\xd1\x40\xf2\x7c\xd0\x04"
++ "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\x51\x20\x71\x34\xf4\x7d\xb9"
++ "\x85\x08\xe9\x13\x80\x00\x85\x00\xd8\x00\xe8\x02\x85\x0c\xc5\xda"
++ "\xfc\xf4\x75\x40\xd1\x40\x14\xfe\x80\x01\xea\xea\xf7\x10\xff\xf7"
++ "\xf4\xc9\x40\xd1\x40\xd9\x00\xe8\x17\x21\xf4\x79\x00\xf0\x00\xe9"
++ "\x05\x80\x00\xf5\x10\x09\xd9\x06\xe9\x06\x61\x06\xd5\x06\x41\x06"
++ "\xf4\xe0\x1b\xe0\xc7\xf4\xe0\x96\xcc\xc7\x00\x00\x74\x0a\x08\x00"
++ "\x01\x00\x00\x00"
++ ;
++
++const int drive_20010608_firmware_size = 324;
+diff --git a/drivers/block/gcn-di/drive_20010831.h b/drivers/block/gcn-di/drive_20010831.h
+new file mode 100644
+index 0000000..16df341
+--- /dev/null
++++ b/drivers/block/gcn-di/drive_20010831.h
+@@ -0,0 +1,25 @@
++static const char drive_20010831_firmware[] =
++ "\xf7\x10\xff\xf7\xf4\x74\x25\xd0\x40\xf7\x20\x4c\x80\xf4\x74\x39"
++ "\x9e\x08\xf7\x20\xd6\xfc\xf4\x74\x02\xb3\x08\xf7\x20\xd2\xfc\x80"
++ "\x0c\xc4\xda\xfc\xfe\xc8\xda\xfc\xf5\x00\x01\xe9\x70\xc8\xda\xfc"
++ "\xf5\x00\x02\xe9\x75\xf4\x74\x02\xed\x40\x80\x02\xf0\x20\xc8\x78"
++ "\x80\xc0\x92\x81\xdc\xaa\x80\xf5\x30\x00\xf4\x44\x41\xd1\x40\xf8"
++ "\xaa\x00\x10\xf4\xd0\x3c\xd1\x40\xf0\x01\xdc\xaa\x80\xf5\x30\x00"
++ "\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x41\xd1\x40\x10\xfe\xf7\x48\xee"
++ "\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xab\x80\xfd\x79\x00\xea\x0c\xcc"
++ "\xab\x80\xc4\xa6\x81\xcc\xac\x80\xc4\x8a\x81\xdc\xaa\x80\xf8\xe0"
++ "\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10\x03\xfe\xc8\xda\xfc"
++ "\xf7\x00\xfe\xff\xf7\x31\xd2\xfc\xea\x0b\xc8\xda\xfc\xf7\x00\xfd"
++ "\xff\xf7\x31\xd6\xfc\xc4\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4"
++ "\x44\xfc\xf4\x7d\x02\xb3\x08\xe9\x07\xf4\x75\x0c\xd1\x40\xea\x0c"
++ "\xf4\x7d\x39\x9e\x08\xe9\x05\xf4\x75\x35\xd1\x40\xf2\x7c\xd0\x04"
++ "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\x51\x20\x71\x34\xf4\x7d\x7f"
++ "\x86\x08\xe9\x13\x80\x00\x85\x00\xd8\x00\xe8\x02\x85\x0c\xc5\xda"
++ "\xfc\xf4\x75\x40\xd1\x40\x14\xfe\x80\x01\xea\xea\xf7\x10\xff\xf7"
++ "\xf4\xc9\x40\xd1\x40\xd9\x00\xe8\x17\x21\xf4\x79\x00\xf0\x00\xe9"
++ "\x05\x80\x00\xf5\x10\x09\xd9\x06\xe9\x06\x61\x06\xd5\x06\x41\x06"
++ "\xf4\xe0\xd8\xe1\xc7\xf4\xe0\x4a\xce\xc7\x00\x00\xa4\x0a\x08\x00"
++ "\x01\x00\x00\x00"
++ ;
++
++const int drive_20010831_firmware_size = 324;
+diff --git a/drivers/block/gcn-di/drive_20020402.h b/drivers/block/gcn-di/drive_20020402.h
+new file mode 100644
+index 0000000..dc80971
+--- /dev/null
++++ b/drivers/block/gcn-di/drive_20020402.h
+@@ -0,0 +1,25 @@
++static const char drive_20020402_firmware[] =
++ "\xf7\x10\xff\xf7\xf4\x74\x25\xd0\x40\xf7\x20\x4c\x80\xf4\x74\xd6"
++ "\x9c\x08\xf7\x20\xd6\xfc\xf4\x74\x28\xae\x08\xf7\x20\xd2\xfc\x80"
++ "\x0c\xc4\xda\xfc\xfe\xc8\xda\xfc\xf5\x00\x01\xe9\x70\xc8\xda\xfc"
++ "\xf5\x00\x02\xe9\x75\xf4\x74\xf9\xec\x40\x80\x02\xf0\x20\xc8\x84"
++ "\x80\xc0\x9c\x81\xdc\xb4\x80\xf5\x30\x00\xf4\x44\x41\xd1\x40\xf8"
++ "\xaa\x00\x10\xf4\xd0\x3c\xd1\x40\xf0\x01\xdc\xb4\x80\xf5\x30\x00"
++ "\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x41\xd1\x40\x10\xfe\xf7\x48\xee"
++ "\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xb5\x80\xfd\x79\x00\xea\x0c\xcc"
++ "\xb5\x80\xc4\xb0\x81\xcc\xb6\x80\xc4\x94\x81\xdc\xb4\x80\xf8\xe0"
++ "\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10\x03\xfe\xc8\xda\xfc"
++ "\xf7\x00\xfe\xff\xf7\x31\xd2\xfc\xea\x0b\xc8\xda\xfc\xf7\x00\xfd"
++ "\xff\xf7\x31\xd6\xfc\xc4\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4"
++ "\x44\xfc\xf4\x7d\x28\xae\x08\xe9\x07\xf4\x75\x0c\xd1\x40\xea\x0c"
++ "\xf4\x7d\xd6\x9c\x08\xe9\x05\xf4\x75\x35\xd1\x40\xf2\x7c\xd0\x04"
++ "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\x51\x20\x71\x34\xf4\x7d\xc1"
++ "\x85\x08\xe9\x13\x80\x00\x85\x00\xd8\x00\xe8\x02\x85\x0c\xc5\xda"
++ "\xfc\xf4\x75\x40\xd1\x40\x14\xfe\x80\x01\xea\xea\xf7\x10\xff\xf7"
++ "\xf4\xc9\x40\xd1\x40\xd9\x00\xe8\x17\x21\xf4\x79\x00\xf0\x00\xe9"
++ "\x05\x80\x00\xf5\x10\x09\xd9\x06\xe9\x06\x61\x06\xd5\x06\x41\x06"
++ "\xf4\xe0\xfe\xdc\xc7\xf4\xe0\x14\xcc\xc7\x00\x00\x74\x0a\x08\x00"
++ "\x01\x00\x00\x00"
++ ;
++
++const int drive_20020402_firmware_size = 324;
+diff --git a/drivers/block/gcn-di/drive_20020823.h b/drivers/block/gcn-di/drive_20020823.h
+new file mode 100644
+index 0000000..f20b5cc
+--- /dev/null
++++ b/drivers/block/gcn-di/drive_20020823.h
+@@ -0,0 +1,25 @@
++static const char drive_20020823_firmware[] =
++ "\xf7\x10\xff\xf7\xf4\x74\x25\xd0\x40\xf7\x20\x4c\x80\xf4\x74\x32"
++ "\x9d\x08\xf7\x20\xd6\xfc\xf4\x74\x75\xae\x08\xf7\x20\xd2\xfc\x80"
++ "\x0c\xc4\xda\xfc\xfe\xc8\xda\xfc\xf5\x00\x01\xe9\x70\xc8\xda\xfc"
++ "\xf5\x00\x02\xe9\x75\xf4\x74\xf5\xec\x40\x80\x02\xf0\x20\xc8\x80"
++ "\x80\xc0\x98\x81\xdc\xb0\x80\xf5\x30\x00\xf4\x44\x41\xd1\x40\xf8"
++ "\xaa\x00\x10\xf4\xd0\x3c\xd1\x40\xf0\x01\xdc\xb0\x80\xf5\x30\x00"
++ "\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x41\xd1\x40\x10\xfe\xf7\x48\xee"
++ "\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xb1\x80\xfd\x79\x00\xea\x0c\xcc"
++ "\xb1\x80\xc4\xac\x81\xcc\xb2\x80\xc4\x90\x81\xdc\xb0\x80\xf8\xe0"
++ "\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10\x03\xfe\xc8\xda\xfc"
++ "\xf7\x00\xfe\xff\xf7\x31\xd2\xfc\xea\x0b\xc8\xda\xfc\xf7\x00\xfd"
++ "\xff\xf7\x31\xd6\xfc\xc4\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4"
++ "\x44\xfc\xf4\x7d\x75\xae\x08\xe9\x07\xf4\x75\x0c\xd1\x40\xea\x0c"
++ "\xf4\x7d\x32\x9d\x08\xe9\x05\xf4\x75\x35\xd1\x40\xf2\x7c\xd0\x04"
++ "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\x51\x20\x71\x34\xf4\x7d\xc1"
++ "\x85\x08\xe9\x13\x80\x00\x85\x00\xd8\x00\xe8\x02\x85\x0c\xc5\xda"
++ "\xfc\xf4\x75\x40\xd1\x40\x14\xfe\x80\x01\xea\xea\xf7\x10\xff\xf7"
++ "\xf4\xc9\x40\xd1\x40\xd9\x00\xe8\x17\x21\xf4\x79\x00\xf0\x00\xe9"
++ "\x05\x80\x00\xf5\x10\x09\xd9\x06\xe9\x06\x61\x06\xd5\x06\x41\x06"
++ "\xf4\xe0\x4b\xdd\xc7\xf4\xe0\x6d\xcc\xc7\x00\x00\x74\x0a\x08\x00"
++ "\x01\x00\x00\x00"
++ ;
++
++const int drive_20020823_firmware_size = 324;
+diff --git a/drivers/block/gcn-di/drive_all.S b/drivers/block/gcn-di/drive_all.S
+new file mode 100644
+index 0000000..e9d91a0
+--- /dev/null
++++ b/drivers/block/gcn-di/drive_all.S
+@@ -0,0 +1,415 @@
++/*
++ * DVD+/-R compatible "cactus" firmware extensions
++ * Copyright (C) 2005-2009 The GameCube Linux Team
++ * Copyright (C) 2005,2006,2009 Albert Herranz
++ *
++ * Originally based on analysis of Cobra 1.0 drive code released by tmbinc
++ * on dextrose.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 code is compatible with binutils 2.15 limited mn10200 support.
++ * And it intentionally lacks the audio fix and DRE recovery features.
++ *
++ */
++
++
++.equ UNICR, 0xfc44
++.equ UNID, (1<<0)
++.equ ADB0, 0xfcd2
++.equ ADB1, 0xfcd6
++.equ ADBCTL, 0xfcda
++.equ ADB0CK, (1<<0)
++.equ ADB1CK, (1<<1)
++.equ ADB0ON, (1<<2)
++.equ ADB1ON, (1<<3)
++
++
++.equ irq_handler_vector, 0x804c /* 04, 06, 08, Panasonic Q */
++.equ irq_depth, 0x805b /* 04, 06, 08, Panasonic Q */
++
++.equ fake_command, 0xaa
++.equ set_drive_status_command, 0xee /* same as in gcn-di.c */
++.equ enable_extensions_command, 0x55 /* same as in gcn-di.c */
++
++.equ get_drive_status_command, 0xe0
++
++
++#if DRIVE_MODEL == 0x20020402 /* 04 */
++
++ .equ cmdbuf0, 0x80b4
++ .equ drive_status, 0x81b0
++ .equ drive_status2, 0x8194
++
++ .equ bert, 0x8084
++ .equ ernie, 0x819c
++ .equ cactus, 0x40ecf9
++
++ .section absolute
++
++ .equ adb1_break_address, 0x089cd6
++ .org 0x089d4e
++ adb1_fixup_exit:
++
++ .equ adb0_break_address, 0x08ae28
++ .org 0x08ae33
++ adb0_fixup_exit:
++
++ .equ disable_extensions_when_called_from, 0x0885c1 /* 04, 08 */
++
++#elif DRIVE_MODEL == 0x20010608 /* 06 */
++
++ .equ cmdbuf0, 0x80a8
++ .equ drive_status, 0x81a4
++ .equ drive_status2, 0x8188
++
++ .equ bert, 0x8078
++ .equ ernie, 0x8190
++ .equ cactus, 0x40ed02
++
++ .section absolute
++
++ .equ adb1_break_address, 0x089d42
++ .org 0x089dd0
++ adb1_fixup_exit:
++
++ .equ adb0_break_address, 0x08b145
++ .org 0x08b150
++ adb0_fixup_exit:
++
++ .equ disable_extensions_when_called_from, 0x0885b9
++
++#elif DRIVE_MODEL == 0x20020823 /* 08 */
++
++ .equ cmdbuf0, 0x80b0
++ .equ drive_status, 0x81ac
++ .equ drive_status2, 0x8190
++
++ .equ bert, 0x8080
++ .equ ernie, 0x8198
++ .equ cactus, 0x40ecf5
++
++ .section absolute
++
++ .equ adb1_break_address, 0x089d32
++ .org 0x089da7
++ adb1_fixup_exit:
++
++ .equ adb0_break_address, 0x08ae75
++ .org 0x08ae80
++ adb0_fixup_exit:
++
++ .equ disable_extensions_when_called_from, 0x0885c1 /* 04, 08 */
++
++#elif DRIVE_MODEL == 0x20010831 /* Panasonic Q */
++
++ .equ cmdbuf0, 0x80aa
++ .equ drive_status, 0x81a6
++ .equ drive_status2, 0x818a
++
++ .equ bert, 0x8078
++ .equ ernie, 0x8192
++ .equ cactus, 0x40ed02
++
++ .section absolute
++
++ .equ adb1_break_address, 0x089e39
++ .org 0x089f84
++ adb1_fixup_exit:
++
++ .equ adb0_break_address, 0x08b302
++ .org 0x08b30d
++ adb0_fixup_exit:
++
++ .equ disable_extensions_when_called_from, 0x08867f
++
++#else
++ #error Sorry, unsupported drive.
++#endif
++
++
++ .section .text
++ .global _start
++ .global _exit
++
++/*
++ * We are launched now through the 'func' debug command.
++ */
++_start:
++_main:
++ /* disable interrupts, do not disturb */
++ and 0xf7ff, psw
++
++ /* replace the current irq handler with ours */
++ mov our_irq_handler, a0
++ mov a0, (irq_handler_vector)
++
++ /* setup our extending functions ... */
++ mov adb1_break_address, a0
++ mov a0, (ADB1)
++ mov adb0_break_address, a0
++ mov a0, (ADB0)
++
++ /* ... and enable them */
++ mov ADB1ON|ADB0ON, d0
++ movb d0, (ADBCTL)
++
++ rts
++
++
++our_irq_handler:
++ /* check for Address Break 0 */
++ mov (ADBCTL), d0
++ and ADB0CK, d0
++ bne adb0_break_handler
++
++ /* check for Address Break 1 */
++ mov (ADBCTL), d0
++ and ADB1CK, d0
++ bne adb1_break_handler
++
++ /* XXX not sure about this one... */
++// mov 0x0c, d0
++// movb d0, (0x819a)
++
++ /* tell the drive to please accept the disk */
++ mov cactus, a0
++ mov 2, d0
++ bset d0, (a0)
++
++ /* this seems to avoid errors if the drive idles for too long */
++ mov (bert), d0
++ mov d0, (ernie)
++
++ /* save current command ... */
++ mov cmdbuf0, a0
++ movbu (0, a0), d0
++ movb d0, (saved_cmdbuf0)
++
++ /* ... and place a temporary fake command, to detect new commands */
++ mov fake_command, d0
++ movb d0, (a0)
++
++ /* call the original handler */
++ mov (saved_irq_handler), a0
++ jsr (a0)
++
++ /* if our fake command changed, we assume a new command has arrived */
++ mov cmdbuf0, a0
++ movbu (0, a0), d0
++ cmp fake_command, d0
++ bne extra_command_parser
++
++ /* if there is no new command, restore the previously saved command */
++ movb (saved_cmdbuf0), d0
++ movb d0, (a0)
++
++ rts
++
++
++extra_command_parser:
++ /* "set drive status" command */
++ cmp set_drive_status_command, d0
++ beq set_drive_status
++
++ /* "enable extensions" command */
++ cmp enable_extensions_command, d0
++ bne done
++
++enable_or_disable_extensions:
++ /* 0x55, 0xZZ, 0x00, 0x00 */
++ /* ZZ=0 disable, otherwise enable */
++ movbu (cmdbuf0+1), d0
++ jsr di_enable_or_disable_extensions
++ jmp get_drive_status
++
++set_drive_status:
++ /* 0xee, 0xZZ, 0xYY, 0x00 */
++ /* ZZ=drive_status, YY=drive_status2 */
++ movbu (cmdbuf0+1), d0
++ movb d0, (drive_status)
++ movbu (cmdbuf0+2), d0
++ movb d0, (drive_status2)
++
++
++get_drive_status:
++ /*
++ * This saves us an invalid command error and updates the status
++ * accordingly. In fact, our extended command becomes a "get status"
++ * command.
++ */
++ mov cmdbuf0, a0
++ mov get_drive_status_command, d0
++ movb d0, (a0)
++ sub d0, d0
++ movb d0, (1,a0)
++ movb d0, (2,a0)
++ movb d0, (3,a0)
++
++done:
++ rts
++
++
++/*
++ * This is how the stacks look like when our interrupt handler is called.
++ *
++ * Our interrupt handler is in fact not the real interrupt handler, but
++ * just a subroutine called by the real interrupt handler.
++ * That's why we just RTS and not RTI from our interrupt handler.
++ *
++ * | | | |
++ * 00| d0 0| <- old a3 | |
++ * 02| 8| | |
++ * 04| d1 6| | |
++ * 06| 4| | |
++ * 08| d2 2| | |
++ * 0a| 0| | |
++ * 0c| d3 8| | |
++ * 0e| 6| | |
++ * 10| a0 4| | |
++ * 12| 2| | |
++ * 14| a1 0| | |
++ * 16| 8| | |
++ * 18| a2 6| | |
++ * 1a| 4| | |
++ * 1c| MDR 2| | |
++ * 1e| PSW | | |
++ * 20| PC lo | | PC lo | <- a3
++ * 22| PC hi | | PC hi |
++ * : : | old a3 |
++ * | ... | | |
++ * +--------+ +--------+ <- (0x8ea1c) for drive 04
++ * normal context stack interrupt context stack
++ *
++ */
++
++adb0_break_handler:
++ mov (ADBCTL), d0
++ and ~ADB0CK, d0
++ mov (ADB0), a1
++ jmp address_break_handler
++
++adb1_break_handler:
++ mov (ADBCTL), d0
++ and ~ADB1CK, d0
++ mov (ADB1), a1
++
++address_break_handler:
++ /* ack the interrupt */
++ movb d0, (ADBCTL)
++ movbu (UNICR), d0
++ and ~UNID, d0
++ movb d0, (UNICR)
++
++ cmp adb0_break_address, a1
++ bne 1f
++ mov adb0_fixup, a1
++ jmp 2f
++
++1:
++ cmp adb1_break_address, a1
++ bne 2f
++ mov adb1_fixup, a1
++
++2:
++ /* point to the previous stack pointer */
++ mov a3, a0
++ add 4, a0
++
++ /*
++ * Special case. When entering interrupt context the first time,
++ * the old stack is pushed in the interrupt stack before calling us.
++ */
++ movbu (irq_depth), d0
++ cmp 1, d0
++ bne 1f
++ mov (4, a3), a0 /* get the old stack pointer */
++1:
++ /* overwrite the original return address (look at the stack layout) */
++ mov a1, (0x20, a0)
++
++ /*
++ * We disable the extensions when an original disc is found.
++ *
++ * We do that by checking if we were called from a piece of
++ * code reached only when original discs are inserted. Tricky.
++ */
++
++ /* 0x20 + 0x10 + 0x04 = 0x34 */
++ mov (0x34, a0), a1
++ cmp disable_extensions_when_called_from, a1
++ bne 9f /* else, do nothing */
++
++di_disable_extensions:
++ mov 0, d0
++
++di_enable_or_disable_extensions:
++ /* enable additional media if extensions are enabled */
++ mov 0, d1
++ cmp 0, d0
++ beq 1f
++ mov ADB0ON|ADB1ON, d1
++1:
++ movb d1, (ADBCTL)
++
++ mov enable_extensions, a1
++ movb d0, (a1)
++
++9:
++ rts
++
++di_enable_extensions:
++ mov 1, d0
++ jmp di_enable_or_disable_extensions
++
++
++adb0_fixup:
++ /* disable interrupts, XXX really needed here...? */
++ and 0xf7ff, psw
++
++ /* check if we need to tweak things or not */
++ movbu (enable_extensions), d1
++ cmp 0, d1
++ beq 1f
++
++ /* deal with the dvd seed */
++ mov (a0), d1
++ cmp 0x00f000, d1 /* controller setup */
++ bne 2f
++ mov 0x00, d0 /* seed 0x00 for normal DVD */
++ movb d0, (0x09, a0)
++2:
++ /* skip the extra field */
++ cmp 0x06, d1 /* transfer sector buffer */
++ bne 1f
++ mov (0x06, a0), d1
++ add 6, d1 /* skip it */
++ mov d1, (0x06, a0)
++1:
++ jmp adb0_fixup_exit
++
++
++adb1_fixup:
++ jmp adb1_fixup_exit
++
++
++.align 2
++saved_irq_handler:
++#if DRIVE_MODEL != 0x20010831
++ .long 0x00080A74 /* 04, 06, 08 */
++#else
++ .long 0x00080AA4 /* Panasonic Q */
++#endif
++enable_extensions:
++ .byte 0x01
++saved_cmdbuf0:
++ .byte 0x00
++
++_exit:
++
+diff --git a/drivers/block/gcn-di/gcn-di.c b/drivers/block/gcn-di/gcn-di.c
+new file mode 100644
+index 0000000..9f6564f
+--- /dev/null
++++ b/drivers/block/gcn-di/gcn-di.c
+@@ -0,0 +1,2363 @@
++/*
++ * drivers/block/gcn-di/gcn-di.c
++ *
++ * Nintendo GameCube Disk Interface (DI) driver
++ * Copyright (C) 2005-2009 The GameCube Linux Team
++ * Copyright (C) 2005,2006,2007,2009 Albert Herranz
++ *
++ * Portions based on previous work by Scream|CT.
++ *
++ * This program is free software; you can redistribute 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/blkdev.h>
++#include <linux/cdrom.h>
++#include <linux/delay.h>
++#include <linux/dma-mapping.h>
++#include <linux/fcntl.h>
++#include <linux/hdreg.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <linux/proc_fs.h>
++#include <linux/seq_file.h>
++#include <linux/timer.h>
++#include <linux/io.h>
++
++#define DI_DEBUG
++
++#define DRV_MODULE_NAME "gcn-di"
++#define DRV_DESCRIPTION "Nintendo GameCube Disk Interface (DI) driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++static char di_driver_version[] = "1.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++#ifdef DI_DEBUG
++# define DBG(fmt, args...) \
++ printk(KERN_ERR "%s: " fmt, __func__ , ## args)
++#else
++# define DBG(fmt, args...)
++#endif
++
++
++/*
++ * Hardware.
++ */
++#define DI_DMA_ALIGN 0x1f /* 32 bytes */
++
++/* DI Status Register */
++#define DI_SR 0x00
++#define DI_SR_BRK (1<<0)
++#define DI_SR_DEINTMASK (1<<1)
++#define DI_SR_DEINT (1<<2)
++#define DI_SR_TCINTMASK (1<<3)
++#define DI_SR_TCINT (1<<4)
++#define DI_SR_BRKINTMASK (1<<5)
++#define DI_SR_BRKINT (1<<6)
++
++/* DI Cover Register */
++#define DI_CVR 0x04
++#define DI_CVR_CVR (1<<0)
++#define DI_CVR_CVRINTMASK (1<<1)
++#define DI_CVR_CVRINT (1<<2)
++
++/* DI Command Buffers */
++#define DI_CMDBUF0 0x08
++#define DI_CMDBUF1 0x0c
++#define DI_CMDBUF2 0x10
++
++/* DI DMA Memory Address Register */
++#define DI_MAR 0x14
++
++/* DI DMA Transfer Length Register */
++#define DI_LENGTH 0x18
++
++/* DI Control Register */
++#define DI_CR 0x1c
++#define DI_CR_TSTART (1<<0)
++#define DI_CR_DMA (1<<1)
++#define DI_CR_RW (1<<2)
++
++/* DI Immediate Data Buffer */
++#define DI_DATA 0x20
++
++/* DI Configuration Register */
++#define DI_CFG 0x24
++
++
++/* drive status, status */
++#define DI_STATUS(s) ((u8)((s)>>24))
++
++#define DI_STATUS_READY 0x00
++#define DI_STATUS_COVER_OPENED 0x01
++#define DI_STATUS_DISK_CHANGE 0x02
++#define DI_STATUS_NO_DISK 0x03
++#define DI_STATUS_MOTOR_STOP 0x04
++#define DI_STATUS_DISK_ID_NOT_READ 0x05
++
++/* drive status, error */
++#define DI_ERROR(s) ((u32)((s)&0x00ffffff))
++
++#define DI_ERROR_NO_ERROR 0x000000
++#define DI_ERROR_MOTOR_STOPPED 0x020400
++#define DI_ERROR_DISK_ID_NOT_READ 0x020401
++#define DI_ERROR_MEDIUM_NOT_PRESENT 0x023a00
++#define DI_ERROR_SEEK_INCOMPLETE 0x030200
++#define DI_ERROR_UNRECOVERABLE_READ 0x031100
++#define DI_ERROR_INVALID_COMMAND 0x052000
++#define DI_ERROR_BLOCK_OUT_OF_RANGE 0x052100
++#define DI_ERROR_INVALID_FIELD 0x052400
++#define DI_ERROR_MEDIUM_CHANGED 0x062800
++
++#define di_may_retry(s) ((DI_STATUS(s) == DI_STATUS_READY || \
++ DI_STATUS(s) == DI_STATUS_DISK_ID_NOT_READ) \
++ && \
++ (DI_ERROR(s) != DI_ERROR_SEEK_INCOMPLETE))
++
++/* DI Sector Size */
++#define DI_SECTOR_SHIFT 11
++#define DI_SECTOR_SIZE (1 << DI_SECTOR_SHIFT) /*2048*/
++#define DI_MAX_SECTORS 712880
++
++
++/* Driver Settings */
++#define DI_NAME DRV_MODULE_NAME
++#define DI_MAJOR 60
++
++#define DI_COMMAND_TIMEOUT 20 /* seconds */
++#define DI_COMMAND_RETRIES 10 /* times */
++
++#define DI_MOTOR_OFF_TIMEOUT 10
++
++#define KERNEL_SECTOR_SHIFT 9
++#define KERNEL_SECTOR_SIZE (1 << KERNEL_SECTOR_SHIFT) /*512*/
++
++
++/*
++ * Drive Information.
++ */
++struct di_drive_info {
++ u16 rev;
++ u16 code;
++ u32 date;
++ u8 pad[0x18];
++};
++
++/*
++ * Disk ID.
++ */
++struct di_disk_id {
++ u8 id[32];
++};
++
++/*
++ * An operation code.
++ */
++struct di_opcode {
++ u16 op;
++#define DI_OP(id, flags) (((u8)(id)<<8)|((u8)(flags)))
++#define DI_OP_ID(op) ((u8)((op)>>8))
++#define DI_OP_FLAGS(op) ((u8)(op))
++
++#define DI_DIR_READ 0x00
++#define DI_DIR_WRITE DI_CR_RW
++#define DI_MODE_IMMED 0x00
++#define DI_MODE_DMA DI_CR_DMA
++#define DI_IGNORE_ERRORS (1<<7)
++
++ char *name;
++
++ u32 cmdbuf0;
++};
++
++/*
++ * Drive code container.
++ */
++struct di_drive_code {
++ u32 address;
++ size_t len;
++ void *code;
++};
++
++struct di_device;
++
++/*
++ * A Disk Interface command.
++ */
++struct di_command {
++ u16 opidx;
++
++ u32 cmdbuf0;
++ u32 cmdbuf1;
++ u32 cmdbuf2;
++
++ void *data;
++ size_t len;
++
++ dma_addr_t dma_addr;
++ size_t dma_len;
++
++ void *done_data;
++ void (*done)(struct di_command *cmd);
++
++ u16 retries;
++ u16 max_retries;
++
++ u32 result;
++
++ struct di_device *ddev;
++};
++
++#define di_result_ok(result) ((result) == DI_SR_TCINT)
++#define di_command_ok(cmd) (di_result_ok((cmd)->result))
++
++enum {
++ __DI_INTEROPERABLE = 0,
++ __DI_MEDIA_CHANGED,
++ __DI_START_QUEUE,
++ __DI_RESETTING,
++ __DI_AVOID_DEBUG,
++};
++
++/*
++ * The Disk Interface device.
++ */
++struct di_device {
++ spinlock_t lock;
++
++ int irq;
++
++ spinlock_t io_lock;
++ void __iomem *io_base;
++
++ struct di_command *cmd;
++ struct di_command *failed_cmd;
++
++ struct di_command status;
++ u32 drive_status;
++
++ struct gendisk *disk;
++ struct request_queue *queue;
++ spinlock_t queue_lock;
++
++ struct request *req;
++ struct di_command req_cmd;
++
++ struct di_drive_code *drive_code;
++
++ u32 model;
++ unsigned long flags;
++#define DI_INTEROPERABLE (1<<__DI_INTEROPERABLE)
++#define DI_MEDIA_CHANGED (1<<__DI_MEDIA_CHANGED)
++#define DI_START_QUEUE (1<<__DI_START_QUEUE)
++#define DI_RESETTING (1<<__DI_RESETTING)
++#define DI_AVOID_DEBUG (1<<__DI_AVOID_DEBUG)
++
++ unsigned long nr_sectors;
++
++ struct timer_list motor_off_timer;
++
++#ifdef CONFIG_PROC_FS
++ struct proc_dir_entry *proc;
++#endif /* CONFIG_PROC_FS */
++
++ int ref_count;
++
++ struct device *dev;
++};
++
++
++static struct di_drive_info di_drive_info
++ __attribute__ ((aligned(DI_DMA_ALIGN+1)));
++
++/*
++ * We do not accept original media with this driver, as there is currently no
++ * general need for that.
++ * If you ever develop an application (a media player for example) which works
++ * with original media, just change di_accept_gods and recompile.
++ */
++static const int di_accept_gods;
++
++/*
++ * Drive firmware extensions.
++ *
++ */
++
++#define DI_DRIVE_CODE_BASE 0x40d000
++#define DI_DRIVE_IRQ_VECTOR 0x00804c
++
++/*
++ * Drive 04 (20020402) firmware extensions.
++ */
++
++#include "drive_20020402.h"
++
++static struct di_drive_code drive_20020402 = {
++ .address = DI_DRIVE_CODE_BASE,
++ .len = sizeof(drive_20020402_firmware),
++ .code = (u8 *)drive_20020402_firmware,
++};
++
++/*
++ * Drive 06 (20010608) firmware extensions.
++ */
++
++#include "drive_20010608.h"
++
++static struct di_drive_code drive_20010608 = {
++ .address = DI_DRIVE_CODE_BASE,
++ .len = sizeof(drive_20010608_firmware),
++ .code = (u8 *)drive_20010608_firmware,
++};
++
++/*
++ * Drive 08 (20020823) firmware extensions.
++ */
++
++#include "drive_20020823.h"
++
++static struct di_drive_code drive_20020823 = {
++ .address = DI_DRIVE_CODE_BASE,
++ .len = sizeof(drive_20020823_firmware),
++ .code = (u8 *)drive_20020823_firmware,
++};
++
++/*
++ * Panasonic Q (20010831) firmware extensions.
++ */
++
++#include "drive_20010831.h"
++
++static struct di_drive_code drive_20010831 = {
++ .address = DI_DRIVE_CODE_BASE,
++ .len = sizeof(drive_20010831_firmware),
++ .code = (u8 *)drive_20010831_firmware,
++};
++
++
++/*
++ * Drive operations table, incomplete.
++ * We just include here some of the available functions, in no particular
++ * order.
++ */
++#define CMDBUF(a, b, c, d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
++
++static struct di_opcode di_opcodes[] = {
++
++#define DI_OP_NOP 0
++ [DI_OP_NOP] = {
++ .op = DI_OP(DI_OP_NOP, 0),
++ .name = "NOP",
++ .cmdbuf0 = 0,
++ },
++
++#define DI_OP_INQ (DI_OP_NOP+1)
++ [DI_OP_INQ] = {
++ .op = DI_OP(DI_OP_INQ, DI_DIR_READ | DI_MODE_DMA),
++ .name = "INQ",
++ .cmdbuf0 = 0x12000000,
++ },
++
++#define DI_OP_STOPMOTOR (DI_OP_INQ+1)
++ [DI_OP_STOPMOTOR] = {
++ .op = DI_OP(DI_OP_STOPMOTOR, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "STOPMOTOR",
++ .cmdbuf0 = 0xe3000000,
++ },
++
++#define DI_OP_READDISKID (DI_OP_STOPMOTOR+1)
++ [DI_OP_READDISKID] = {
++ .op = DI_OP(DI_OP_READDISKID, DI_DIR_READ | DI_MODE_DMA),
++ .name = "READDISKID",
++ .cmdbuf0 = 0xa8000040,
++ },
++
++#define DI_OP_READSECTOR (DI_OP_READDISKID+1)
++ [DI_OP_READSECTOR] = {
++ .op = DI_OP(DI_OP_READSECTOR, DI_DIR_READ | DI_MODE_DMA),
++ .name = "READSECTOR",
++ .cmdbuf0 = 0xa8000000,
++ },
++
++#define DI_OP_ENABLE1 (DI_OP_READSECTOR+1)
++ [DI_OP_ENABLE1] = {
++ .op = DI_OP(DI_OP_ENABLE1, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "MATSHITA",
++ .cmdbuf0 = 0,
++ },
++
++#define DI_OP_ENABLE2 (DI_OP_ENABLE1+1)
++ [DI_OP_ENABLE2] = {
++ .op = DI_OP(DI_OP_ENABLE2, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "DVD-GAME",
++ .cmdbuf0 = 0,
++ },
++
++/*
++ * The following commands are available in debug mode only.
++ */
++
++#define DI_OP_READMEM (DI_OP_ENABLE2+1)
++ [DI_OP_READMEM] = {
++ .op = DI_OP(DI_OP_READMEM, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "READMEM",
++ .cmdbuf0 = 0xfe010000,
++ },
++
++#define DI_OP_WRITEMEM (DI_OP_READMEM+1)
++ [DI_OP_WRITEMEM] = {
++ .op = DI_OP(DI_OP_WRITEMEM, DI_DIR_READ | DI_MODE_DMA),
++ .name = "WRITEMEM",
++ .cmdbuf0 = 0xfe010100,
++ },
++
++#define DI_OP_FUNC (DI_OP_WRITEMEM+1)
++ [DI_OP_FUNC] = {
++ .op = DI_OP(DI_OP_FUNC, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "FUNC",
++ .cmdbuf0 = 0xfe120000,
++ },
++
++#define DI_OP_GETSTATUS (DI_OP_FUNC+1)
++ [DI_OP_GETSTATUS] = {
++ .op = DI_OP(DI_OP_GETSTATUS, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "GETSTATUS",
++ .cmdbuf0 = 0xe0000000,
++ },
++
++/* thanks to blackcheck for pointing this one */
++#define DI_OP_SPINMOTOR (DI_OP_GETSTATUS+1)
++ [DI_OP_SPINMOTOR] = {
++ .op = DI_OP(DI_OP_SPINMOTOR, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "SPINMOTOR",
++ .cmdbuf0 = 0xfe110001,
++#define DI_SPINMOTOR_MASK 0x0000ff00
++#define DI_SPINMOTOR_DOWN 0x00000000
++#define DI_SPINMOTOR_UP 0x00000100
++#define DI_SPINMOTOR_CHECKDISK 0x00008000
++ },
++
++/*
++ * The following commands are part of the firmware extensions.
++ */
++
++#define DI_OP_SETSTATUS (DI_OP_SPINMOTOR+1)
++ [DI_OP_SETSTATUS] = {
++ .op = DI_OP(DI_OP_SETSTATUS, DI_DIR_READ | DI_MODE_IMMED),
++ .name = "SETSTATUS",
++ .cmdbuf0 = 0xee000000,
++#define DI_SETSTATUS_MASK 0x00ff0000
++#define DI_SETSTATUS_SHIFT 16
++ },
++
++#define DI_OP_ENABLEEXTENSIONS (DI_OP_SETSTATUS+1)
++ [DI_OP_ENABLEEXTENSIONS] = {
++ .op = DI_OP(DI_OP_ENABLEEXTENSIONS, DI_DIR_READ|DI_MODE_IMMED|
++ DI_IGNORE_ERRORS),
++ .name = "ENABLEEXTENSIONS",
++ .cmdbuf0 = 0x55000000,
++#define DI_ENABLEEXTENSIONS_MASK 0x00ff0000
++#define DI_ENABLEEXTENSIONS_SHIFT 16
++ },
++
++#define DI_OP_MAXOP DI_OP_ENABLEEXTENSIONS
++};
++
++#define DI_OP_CUSTOM ((u16)~0)
++
++
++static void di_reset(struct di_device *ddev);
++static int di_run_command(struct di_command *cmd);
++
++/*
++ * Returns the operation code related data for a command.
++ */
++static inline struct di_opcode *di_get_opcode(struct di_command *cmd)
++{
++ BUG_ON(cmd->opidx > DI_OP_MAXOP && cmd->opidx != DI_OP_CUSTOM);
++
++ if (cmd->opidx == DI_OP_CUSTOM)
++ return cmd->data;
++ else
++ return &di_opcodes[cmd->opidx];
++}
++
++/*
++ * Returns the operation code for a command.
++ */
++static inline u16 di_op(struct di_command *cmd)
++{
++ return di_get_opcode(cmd)->op;
++}
++
++
++/*
++ * Basic initialization for all commands.
++ */
++static void di_op_basic(struct di_command *cmd,
++ struct di_device *ddev, u16 opidx)
++{
++ struct di_opcode *opcode;
++
++ memset(cmd, 0, sizeof(*cmd));
++ cmd->ddev = ddev;
++ cmd->opidx = opidx;
++ cmd->max_retries = cmd->retries = 0;
++ opcode = di_get_opcode(cmd);
++ if (opcode)
++ cmd->cmdbuf0 = opcode->cmdbuf0;
++}
++
++/*
++ * Builds an "Inquiry" command.
++ */
++static void di_op_inq(struct di_command *cmd,
++ struct di_device *ddev,
++ struct di_drive_info *drive_info)
++{
++ di_op_basic(cmd, ddev, DI_OP_INQ);
++ cmd->cmdbuf2 = sizeof(*drive_info);
++ cmd->data = drive_info;
++ cmd->len = sizeof(*drive_info);
++}
++
++/*
++ * Builds a "Stop Motor" command.
++ */
++static inline void di_op_stopmotor(struct di_command *cmd,
++ struct di_device *ddev)
++{
++ di_op_basic(cmd, ddev, DI_OP_STOPMOTOR);
++}
++
++/*
++ * Builds a "Read Disc ID" command.
++ */
++static void di_op_readdiskid(struct di_command *cmd,
++ struct di_device *ddev,
++ struct di_disk_id *disk_id)
++{
++ di_op_basic(cmd, ddev, DI_OP_READDISKID);
++ cmd->cmdbuf2 = sizeof(*disk_id);
++ cmd->data = disk_id;
++ cmd->len = sizeof(*disk_id);
++ cmd->max_retries = cmd->retries = DI_COMMAND_RETRIES;
++}
++
++/*
++ * Builds a "Read Sector" command.
++ */
++static void di_op_readsector(struct di_command *cmd,
++ struct di_device *ddev,
++ u32 sector, void *data, size_t len)
++{
++ di_op_basic(cmd, ddev, DI_OP_READSECTOR);
++ cmd->cmdbuf1 = sector;
++ cmd->cmdbuf2 = len;
++ cmd->data = data;
++ cmd->len = len;
++ cmd->max_retries = cmd->retries = DI_COMMAND_RETRIES;
++}
++
++/*
++ * Builds the first enable command.
++ */
++static void di_op_enable1(struct di_command *cmd, struct di_device *ddev)
++{
++ di_op_basic(cmd, ddev, DI_OP_ENABLE1);
++ cmd->cmdbuf0 = CMDBUF(0xff, 0x01, 'M', 'A');
++ cmd->cmdbuf1 = CMDBUF('T', 'S', 'H', 'I');
++ cmd->cmdbuf2 = CMDBUF('T', 'A', 0x02, 0x00);
++}
++
++/*
++ * Builds the second enable command.
++ */
++static void di_op_enable2(struct di_command *cmd, struct di_device *ddev)
++{
++ di_op_basic(cmd, ddev, DI_OP_ENABLE2);
++ cmd->cmdbuf0 = CMDBUF(0xff, 0x00, 'D', 'V');
++ cmd->cmdbuf1 = CMDBUF('D', '-', 'G', 'A');
++ cmd->cmdbuf2 = CMDBUF('M', 'E', 0x03, 0x00);
++}
++
++/*
++ * Builds a "Read Memory" command.
++ * Requires debug mode enabled.
++ */
++static inline void di_op_readmem(struct di_command *cmd,
++ struct di_device *ddev)
++{
++ di_op_basic(cmd, ddev, DI_OP_READMEM);
++ cmd->cmdbuf2 = 0x00010000;
++}
++
++/*
++ * Builds a "Invoke func" command.
++ * Requires debug mode enabled.
++ */
++static inline void di_op_func(struct di_command *cmd,
++ struct di_device *ddev, u32 address)
++{
++ di_op_basic(cmd, ddev, DI_OP_FUNC);
++ cmd->cmdbuf1 = address;
++ cmd->cmdbuf2 = CMDBUF('f', 'u', 'n', 'c');
++}
++
++/*
++ * Builds a "Write Memory" command.
++ * Requires debug mode enabled.
++ */
++static inline void di_op_writemem(struct di_command *cmd,
++ struct di_device *ddev)
++{
++ di_op_basic(cmd, ddev, DI_OP_WRITEMEM);
++}
++
++/*
++ * Builds a "get drive status" command.
++ */
++static inline void di_op_getstatus(struct di_command *cmd,
++ struct di_device *ddev)
++{
++ di_op_basic(cmd, ddev, DI_OP_GETSTATUS);
++}
++
++/*
++ * Builds a "spin motor" command.
++ * Requires debug mode enabled.
++ */
++static void di_op_spinmotor(struct di_command *cmd,
++ struct di_device *ddev, u32 flags)
++{
++ di_op_basic(cmd, ddev, DI_OP_SPINMOTOR);
++ cmd->cmdbuf0 |= (flags & DI_SPINMOTOR_MASK);
++}
++
++/*
++ * Builds a "set drive status" command.
++ * Requires debug mode enabled.
++ */
++static void di_op_setstatus(struct di_command *cmd,
++ struct di_device *ddev, u8 status)
++{
++ di_op_basic(cmd, ddev, DI_OP_SETSTATUS);
++ cmd->cmdbuf0 |= ((status << DI_SETSTATUS_SHIFT) & DI_SETSTATUS_MASK);
++}
++
++/*
++ * Builds a "enable extensions" command.
++ * The extended firmware will transparently disable the extensions when
++ * original media is found.
++ * Requires debug mode enabled.
++ */
++static void di_op_enableextensions(struct di_command *cmd,
++ struct di_device *ddev, u8 enable)
++{
++ di_op_basic(cmd, ddev, DI_OP_ENABLEEXTENSIONS);
++ cmd->cmdbuf0 |= ((enable << DI_ENABLEEXTENSIONS_SHIFT) &
++ DI_ENABLEEXTENSIONS_MASK);
++}
++
++/*
++ * Builds a customized command.
++ */
++static inline void di_op_custom(struct di_command *cmd,
++ struct di_device *ddev,
++ struct di_opcode *opcode)
++{
++ di_op_basic(cmd, ddev, DI_OP_NOP);
++ cmd->opidx = DI_OP_CUSTOM;
++ cmd->data = opcode;
++}
++
++
++/*
++ * Returns the printable form of the status part of a drive status.
++ */
++static char *di_printable_status(u32 drive_status)
++{
++ char *s = "unknown";
++
++ switch (DI_STATUS(drive_status)) {
++ case DI_STATUS_READY:
++ s = "ready";
++ break;
++ case DI_STATUS_COVER_OPENED:
++ s = "cover opened";
++ break;
++ case DI_STATUS_DISK_CHANGE:
++ s = "disk change";
++ break;
++ case DI_STATUS_NO_DISK:
++ s = "no disk";
++ break;
++ case DI_STATUS_MOTOR_STOP:
++ s = "motor stop";
++ break;
++ case DI_STATUS_DISK_ID_NOT_READ:
++ s = "disk id not read";
++ break;
++ }
++ return s;
++}
++
++/*
++ * Returns the printable form of the error part of a drive status.
++ */
++static char *di_printable_error(u32 drive_status)
++{
++ char *s = "unknown";
++
++ switch (DI_ERROR(drive_status)) {
++ case DI_ERROR_NO_ERROR:
++ s = "no error";
++ break;
++ case DI_ERROR_MOTOR_STOPPED:
++ s = "motor stopped";
++ break;
++ case DI_ERROR_DISK_ID_NOT_READ:
++ s = "disk id not read";
++ break;
++ case DI_ERROR_MEDIUM_NOT_PRESENT:
++ s = "medium not present";
++ break;
++ case DI_ERROR_SEEK_INCOMPLETE:
++ s = "seek incomplete";
++ break;
++ case DI_ERROR_UNRECOVERABLE_READ:
++ s = "unrecoverable read";
++ break;
++ case DI_ERROR_INVALID_COMMAND:
++ s = "invalid command";
++ break;
++ case DI_ERROR_BLOCK_OUT_OF_RANGE:
++ s = "block out of range";
++ break;
++ case DI_ERROR_INVALID_FIELD:
++ s = "invalid field";
++ break;
++ case DI_ERROR_MEDIUM_CHANGED:
++ s = "medium changed";
++ break;
++ }
++
++ return s;
++}
++
++/*
++ * Prints the given drive status, only if debug enabled.
++ */
++static inline void di_debug_print_drive_status(u32 drive_status)
++{
++ DBG("%08x, [%s, %s]\n", drive_status,
++ di_printable_status(drive_status),
++ di_printable_error(drive_status));
++}
++
++/*
++ * Prints the given drive status.
++ */
++static void di_print_drive_status(u32 drive_status)
++{
++ drv_printk(KERN_INFO, "drive_status=%08x, [%s, %s]\n", drive_status,
++ di_printable_status(drive_status),
++ di_printable_error(drive_status));
++}
++
++/*
++ * Prints the given disk identifier.
++ */
++static void di_print_disk_id(struct di_disk_id *disk_id)
++{
++ drv_printk(KERN_INFO, "disk_id = [%s]\n", disk_id->id);
++}
++
++/*
++ *
++ * I/O.
++ */
++
++/*
++ * Converts a request direction into a DMA data direction.
++ */
++static inline
++enum dma_data_direction di_opidx_to_dma_dir(struct di_command *cmd)
++{
++ u16 op = di_op(cmd);
++
++ if ((op & DI_DIR_WRITE))
++ return DMA_TO_DEVICE;
++ else
++ return DMA_FROM_DEVICE;
++}
++
++/*
++ * Starts a DMA transfer.
++ */
++static void di_start_dma_transfer_raw(struct di_device *ddev,
++ dma_addr_t data, size_t len, int mode)
++{
++ void __iomem *io_base = ddev->io_base;
++ u32 __iomem *sr_reg = io_base + DI_SR;
++ unsigned long flags;
++
++ BUG_ON((data & DI_DMA_ALIGN) != 0 ||
++ (len & DI_DMA_ALIGN) != 0);
++
++ /* setup address and length of transfer */
++ out_be32(io_base + DI_LENGTH, len);
++ out_be32(io_base + DI_MAR, data);
++
++ /* enable the Transfer Complete interrupt */
++ spin_lock_irqsave(&ddev->io_lock, flags);
++ out_be32(sr_reg, in_be32(sr_reg) | DI_SR_TCINTMASK);
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ /* start the transfer */
++ out_be32(io_base + DI_CR, DI_CR_TSTART | DI_CR_DMA | (mode&0x4));
++}
++
++/*
++ * Internal. Busy-waits until a DMA transfer finishes or timeouts.
++ */
++static int __wait_for_dma_transfer_or_timeout(u32 __iomem *cr_reg,
++ int secs)
++{
++ unsigned long timeout = jiffies + secs*HZ;
++
++ /* busy-wait for transfer complete */
++ while ((in_be32(cr_reg) & DI_CR_TSTART) &&
++ time_before(jiffies, timeout))
++ cpu_relax();
++
++ return (in_be32(cr_reg) & DI_CR_TSTART) ? -EBUSY : 0;
++}
++
++/*
++ * Busy-waits until DMA transfers are finished.
++ */
++static void di_wait_for_dma_transfer_raw(struct di_device *ddev)
++{
++ u32 __iomem *cr_reg = ddev->io_base + DI_CR;
++ u32 __iomem *sr_reg = ddev->io_base + DI_SR;
++ unsigned long flags;
++
++ /* we don't want TCINTs to disturb us while waiting */
++ spin_lock_irqsave(&ddev->io_lock, flags);
++ out_be32(sr_reg, in_be32(sr_reg) & ~DI_SR_TCINTMASK);
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ /* if the drive got stuck, reset it */
++ if (__wait_for_dma_transfer_or_timeout(cr_reg, DI_COMMAND_TIMEOUT)) {
++ DBG("dvd stuck!\n");
++ di_reset(ddev);
++ }
++
++ /* ack and enable the Transfer Complete interrupt */
++ spin_lock_irqsave(&ddev->io_lock, flags);
++ out_be32(sr_reg, in_be32(sr_reg) | (DI_SR_TCINT|DI_SR_TCINTMASK));
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ return;
++}
++
++/*
++ * Quiesces the hardware to a calm and known state.
++ */
++static void di_quiesce(struct di_device *ddev)
++{
++ void __iomem *io_base = ddev->io_base;
++ u32 __iomem *cr_reg = io_base + DI_CR;
++ u32 __iomem *sr_reg = io_base + DI_SR;
++ u32 __iomem *cvr_reg = io_base + DI_CVR;
++ u32 sr, cvr;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ddev->io_lock, flags);
++
++ /* ack and mask dvd io interrupts */
++ sr = in_be32(sr_reg);
++ sr |= DI_SR_BRKINT | DI_SR_TCINT | DI_SR_DEINT;
++ sr &= ~(DI_SR_BRKINTMASK | DI_SR_TCINTMASK | DI_SR_DEINTMASK);
++ out_be32(sr_reg, sr);
++
++ /* ack and mask dvd cover interrupts */
++ cvr = in_be32(cvr_reg);
++ out_be32(cvr_reg, (cvr | DI_CVR_CVRINT) & ~DI_CVR_CVRINTMASK);
++
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ /* busy-wait for transfer complete */
++ __wait_for_dma_transfer_or_timeout(cr_reg, DI_COMMAND_TIMEOUT);
++}
++
++/*
++ * Command engine.
++ *
++ */
++
++/*
++ * Outputs the command buffers, and optionally starts a transfer.
++ */
++static void di_prepare_command(struct di_command *cmd, int tstart)
++{
++ struct di_opcode *opcode = di_get_opcode(cmd);
++ void __iomem *io_base = cmd->ddev->io_base;
++
++ /*DBG("buf0 = 0x%08x, buf1 = 0x%08x, buf2 = 0x%08x\n",
++ cmd->cmdbuf0, cmd->cmdbuf1, cmd->cmdbuf2);*/
++
++ out_be32(io_base + DI_CMDBUF0, cmd->cmdbuf0);
++ out_be32(io_base + DI_CMDBUF1, cmd->cmdbuf1);
++ out_be32(io_base + DI_CMDBUF2, cmd->cmdbuf2);
++
++ cmd->ddev->drive_status = 0;
++
++ if (tstart)
++ out_be32(io_base + DI_CR, DI_CR_TSTART | (opcode->op & 0x6));
++}
++
++static void di_command_done(struct di_command *cmd);
++
++/*
++ * Starts a command by using the immediate mode.
++ */
++static int di_start_command(struct di_command *cmd)
++{
++ struct di_device *ddev = cmd->ddev;
++ unsigned long flags;
++ int retval = 1;
++
++ spin_lock_irqsave(&ddev->lock, flags);
++
++ BUG_ON(ddev->cmd);
++
++ ddev->cmd = cmd;
++ cmd->dma_len = 0; /* no dma here */
++ di_prepare_command(cmd, 1);
++
++ spin_unlock_irqrestore(&ddev->lock, flags);
++
++ return retval;
++}
++
++/*
++ * Starts a command by using the DMA mode.
++ */
++static int di_start_dma_command(struct di_command *cmd)
++{
++ struct di_device *ddev = cmd->ddev;
++ unsigned long flags;
++ int retval = 1;
++
++ spin_lock_irqsave(&ddev->lock, flags);
++
++ BUG_ON(ddev->cmd);
++
++ ddev->cmd = cmd;
++ cmd->dma_len = cmd->len;
++ cmd->dma_addr = dma_map_single(ddev->dev,
++ cmd->data, cmd->len,
++ di_opidx_to_dma_dir(cmd));
++
++ di_prepare_command(cmd, 0);
++ di_start_dma_transfer_raw(ddev, cmd->dma_addr, cmd->dma_len,
++ di_op(cmd) & DI_DIR_WRITE);
++
++ spin_unlock_irqrestore(&ddev->lock, flags);
++
++ return retval;
++}
++
++/*
++ * Completes a "get drive status" command, after a failed command.
++ */
++static void di_complete_getstatus(struct di_command *cmd)
++{
++ struct di_device *ddev = cmd->ddev;
++ void __iomem *io_base = ddev->io_base;
++ u32 __iomem *data_reg = io_base + DI_DATA;
++
++ ddev->drive_status = in_be32(data_reg);
++}
++
++/*
++ * Called after a transfer is completed.
++ */
++static void di_complete_transfer(struct di_device *ddev, u32 result)
++{
++ struct di_command *cmd;
++ struct di_opcode *opcode;
++ u32 drive_status;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ddev->lock, flags);
++
++ /* do nothing if we have nothing to complete */
++ cmd = ddev->cmd;
++ if (!cmd) {
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ goto out;
++ }
++
++ /* free the command slot */
++ ddev->cmd = NULL;
++ spin_unlock_irqrestore(&ddev->lock, flags);
++
++ /* deal with caches after a dma transfer */
++ if (cmd->dma_len) {
++ dma_unmap_single(ddev->dev,
++ cmd->dma_addr, cmd->dma_len,
++ di_opidx_to_dma_dir(cmd));
++ }
++
++ opcode = di_get_opcode(cmd);
++
++ /*
++ * If a command fails we check the drive status. Depending on that
++ * we may or not retry later the command.
++ */
++ cmd->result = result;
++ if (!di_command_ok(cmd)) {
++ /* the MATSHITA command always reports failure, ignore it */
++ if (DI_OP_ID(opcode->op) != DI_OP_ENABLE1) {
++ BUG_ON(ddev->failed_cmd != NULL);
++
++ ddev->failed_cmd = cmd;
++
++ /*
++ * Issue immediately a "get drive status"
++ * after a failed command.
++ */
++ cmd = &ddev->status;
++ di_op_getstatus(cmd, ddev);
++ cmd->done = di_complete_getstatus;
++ di_run_command(cmd);
++ goto out;
++ }
++ } else {
++ if (cmd->retries != cmd->max_retries) {
++ DBG("command %s succeeded after %d retries :-)\n",
++ opcode->name, cmd->max_retries - cmd->retries);
++ }
++ }
++
++ /* complete a successful command, or the MATSHITA one */
++ di_command_done(cmd);
++
++ spin_lock_irqsave(&ddev->lock, flags);
++ if (ddev->failed_cmd) {
++ cmd = ddev->failed_cmd;
++ ddev->failed_cmd = NULL;
++ spin_unlock_irqrestore(&ddev->lock, flags);
++
++ drive_status = ddev->drive_status;
++ opcode = di_get_opcode(cmd);
++
++ /* retry a previously failed command if appropiate */
++ if (cmd->retries > 0) {
++ if (di_may_retry(drive_status)) {
++ DBG("command %s failed, %d retries left\n",
++ opcode->name, cmd->retries);
++ di_debug_print_drive_status(drive_status);
++
++ cmd->retries--;
++ di_run_command(cmd);
++ goto out;
++ } else {
++ DBG("command %s failed,"
++ " aborting due to drive status\n",
++ opcode->name);
++ }
++ } else {
++ if (!(opcode->op & DI_IGNORE_ERRORS))
++ DBG("command %s failed\n", opcode->name);
++ }
++
++ if (!(opcode->op & DI_IGNORE_ERRORS))
++ di_print_drive_status(drive_status);
++
++ /* complete the failed command */
++ di_command_done(cmd);
++
++ /* update the driver status */
++ switch (DI_ERROR(drive_status)) {
++ case DI_ERROR_MOTOR_STOPPED:
++ case DI_ERROR_MEDIUM_NOT_PRESENT:
++ case DI_ERROR_MEDIUM_CHANGED:
++ set_bit(__DI_MEDIA_CHANGED, &ddev->flags);
++ break;
++ default:
++ break;
++ }
++
++ } else {
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ }
++
++ /* start the block layer queue if someone requested it */
++ if (test_and_clear_bit(__DI_START_QUEUE, &ddev->flags)) {
++ spin_lock_irqsave(&ddev->queue_lock, flags);
++ blk_start_queue(ddev->queue);
++ spin_unlock_irqrestore(&ddev->queue_lock, flags);
++ }
++
++out:
++ return;
++}
++
++/*
++ * Calls any done hooks.
++ */
++static void di_command_done(struct di_command *cmd)
++{
++ /* if specified, call the completion routine */
++ if (cmd->done)
++ cmd->done(cmd);
++}
++
++/*
++ * Completion routine.
++ */
++static void di_wait_done(struct di_command *cmd)
++{
++ complete(cmd->done_data);
++}
++
++/*
++ * Runs a command.
++ */
++static int di_run_command(struct di_command *cmd)
++{
++ struct di_opcode *opcode = di_get_opcode(cmd);
++ int retval;
++
++ if (cmd->retries > cmd->max_retries)
++ cmd->retries = cmd->max_retries;
++
++ if (!(opcode->op & DI_MODE_DMA))
++ retval = di_start_command(cmd);
++ else
++ retval = di_start_dma_command(cmd);
++ return retval;
++}
++
++/*
++ * Runs a command and waits.
++ * Might sleep if called from user context.
++ */
++static int di_run_command_and_wait(struct di_command *cmd)
++{
++ DECLARE_COMPLETION(complete);
++
++ cmd->done_data = &complete;
++ cmd->done = di_wait_done;
++ if (di_run_command(cmd) > 0)
++ wait_for_completion(&complete);
++ return cmd->result;
++}
++
++/*
++ * Interrupt handler for DI interrupts.
++ */
++static irqreturn_t di_irq_handler(int irq, void *dev0)
++{
++ struct di_device *ddev = dev0;
++ void __iomem *io_base = ddev->io_base;
++ u32 __iomem *sr_reg = io_base + DI_SR;
++ u32 __iomem *cvr_reg = io_base + DI_CVR;
++ u32 sr, cvr, reason, mask;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ddev->io_lock, flags);
++
++ sr = in_be32(sr_reg);
++ mask = sr & (DI_SR_BRKINTMASK | DI_SR_TCINTMASK | DI_SR_DEINTMASK);
++ reason = sr; /* & (mask << 1); */
++ if (reason) {
++ out_be32(sr_reg, sr | reason);
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ if (reason & DI_SR_TCINT)
++ di_complete_transfer(ddev, DI_SR_TCINT);
++ if (reason & DI_SR_BRKINT) {
++ DBG("BRKINT\n");
++ di_complete_transfer(ddev, DI_SR_BRKINT);
++ }
++ if (reason & DI_SR_DEINT)
++ di_complete_transfer(ddev, DI_SR_DEINT);
++
++ spin_lock_irqsave(&ddev->io_lock, flags);
++ }
++
++ cvr = in_be32(cvr_reg);
++ mask = cvr & DI_CVR_CVRINTMASK;
++ reason = cvr; /* & (mask << 1); */
++ if ((reason & DI_CVR_CVRINT)) {
++ out_be32(cvr_reg, cvr | DI_CVR_CVRINT);
++ set_bit(__DI_MEDIA_CHANGED, &ddev->flags);
++ if (test_and_clear_bit(__DI_RESETTING, &ddev->flags)) {
++ if (!test_bit(__DI_AVOID_DEBUG, &ddev->flags)) {
++ if (ddev->flags & DI_INTEROPERABLE) {
++ DBG("extensions loaded"
++ " and hopefully working\n");
++ }
++ }
++ } else {
++ DBG("dvd cover interrupt\n");
++ }
++ }
++
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * Hard-resets the drive.
++ */
++static void di_reset(struct di_device *ddev)
++{
++ u32 __iomem *reset_reg = (u32 __iomem *)0xcc003024;
++ u32 reset;
++
++#define FLIPPER_RESET_DVD 0x00000004
++
++ /* set flags, but preserve the alien firmware flag */
++ ddev->flags = (ddev->flags & DI_AVOID_DEBUG) |
++ DI_RESETTING | DI_MEDIA_CHANGED;
++
++ reset = in_be32(reset_reg);
++ out_be32(reset_reg, (reset & ~FLIPPER_RESET_DVD) | 1);
++ mdelay(500);
++ out_be32(reset_reg, (reset | FLIPPER_RESET_DVD) | 1);
++ mdelay(500);
++
++ DBG("drive reset\n");
++}
++
++
++/*
++ * Misc routines.
++ *
++ */
++
++/*
++ * Retrieves (and prints out) the laser unit model.
++ */
++static u32 di_retrieve_drive_model(struct di_device *ddev)
++{
++ struct di_command cmd;
++
++ memset(&di_drive_info, 0, sizeof(di_drive_info));
++ di_op_inq(&cmd, ddev, &di_drive_info);
++ di_run_command_and_wait(&cmd);
++
++ drv_printk(KERN_INFO, "laser unit: rev=%x, code=%x, date=%x\n",
++ di_drive_info.rev, di_drive_info.code,
++ di_drive_info.date);
++
++ ddev->model = di_drive_info.date;
++ return ddev->model;
++}
++
++/*
++ * Gets the current drive status.
++ */
++static u32 di_get_drive_status(struct di_device *ddev)
++{
++ void __iomem *io_base = ddev->io_base;
++ u32 __iomem *data_reg = io_base + DI_DATA;
++ struct di_command cmd;
++ u32 drive_status;
++
++ di_op_getstatus(&cmd, ddev);
++ di_run_command_and_wait(&cmd);
++ drive_status = in_be32(data_reg);
++
++ return drive_status;
++}
++
++/*
++ * Checks if the drive is in a ready state.
++ */
++static int di_is_drive_ready(struct di_device *ddev)
++{
++ u32 drive_status;
++ int result = 0;
++
++ drive_status = di_get_drive_status(ddev);
++ if (DI_STATUS(drive_status) == DI_STATUS_DISK_ID_NOT_READ ||
++ DI_STATUS(drive_status) == DI_STATUS_READY) {
++ result = 1;
++ }
++
++ return result;
++}
++
++/*
++ *
++ * Firmware handling.
++ */
++
++/*
++ * Reads a long word from drive addressable memory.
++ * Requires debug mode enabled.
++ */
++static int di_fw_read_meml(struct di_device *ddev,
++ unsigned long *data, unsigned long address)
++{
++ void __iomem *io_base = ddev->io_base;
++ struct di_command cmd;
++ int result = -1;
++
++ di_op_readmem(&cmd, ddev);
++ cmd.cmdbuf1 = address;
++ di_run_command_and_wait(&cmd);
++ if (di_command_ok(&cmd)) {
++ *data = in_be32(io_base + DI_DATA);
++ result = 0;
++ }
++ return result;
++}
++
++/*
++ * Retrieves the current active interrupt handler for the drive.
++ * Requires debug mode enabled.
++ */
++static unsigned long di_fw_get_irq_handler(struct di_device *ddev)
++{
++ unsigned long data = 0;
++
++ di_fw_read_meml(ddev, &data, DI_DRIVE_IRQ_VECTOR);
++ return data;
++}
++
++/*
++ * Patches drive addressable memory.
++ * Requires debug mode enabled.
++ */
++static void di_fw_patch_mem(struct di_device *ddev, u32 address,
++ void *data, size_t len)
++{
++ struct di_command cmd;
++ struct di_opcode opcode;
++ int chunk_size;
++ const int max_chunk_size = 3 * sizeof(cmd.cmdbuf0);
++
++ while (len > 0) {
++ /* we can write in groups of 12 bytes at max */
++ if (len > max_chunk_size)
++ chunk_size = max_chunk_size;
++ else
++ chunk_size = len;
++
++ /* prepare for writing to drive's memory ... */
++ di_op_writemem(&cmd, ddev);
++ cmd.cmdbuf1 = address;
++ cmd.cmdbuf2 = chunk_size << 16;
++ di_run_command_and_wait(&cmd);
++ if (!di_command_ok(&cmd))
++ break;
++
++ /* ... and actually write to it */
++ opcode.op = DI_OP(DI_OP_CUSTOM, DI_DIR_READ | DI_MODE_IMMED);
++ opcode.name = "custom write";
++ di_op_custom(&cmd, ddev, &opcode);
++ memcpy(&cmd.cmdbuf0, data, chunk_size);
++ di_run_command(&cmd);
++
++ /*
++ * We can't rely on drive operating as expected here, so we
++ * explicitly poll for end of transfer and timeout eventually.
++ * Anyway, we assume everything was ok.
++ */
++ di_wait_for_dma_transfer_raw(ddev);
++ di_complete_transfer(ddev, DI_SR_TCINT);
++
++ /* ok, next chunk */
++ address += chunk_size;
++ data += chunk_size;
++ len -= chunk_size;
++ }
++}
++
++/*
++ * Runs a series of patches.
++ * Requires debug mode enabled.
++ */
++static void di_fw_patch(struct di_device *ddev,
++ struct di_drive_code *section, int nr_sections)
++{
++ while (nr_sections > 0) {
++ di_fw_patch_mem(ddev, section->address,
++ section->code, section->len);
++ section++;
++ nr_sections--;
++ }
++}
++
++/*
++ * Selects the appropiate drive code for each drive.
++ */
++static int di_select_drive_code(struct di_device *ddev)
++{
++ ddev->drive_code = NULL;
++
++ switch (ddev->model) {
++ case 0x20020402:
++ ddev->drive_code = &drive_20020402;
++ break;
++ case 0x20010608:
++ ddev->drive_code = &drive_20010608;
++ break;
++ case 0x20020823:
++ ddev->drive_code = &drive_20020823;
++ break;
++ case 0x20010831:
++ ddev->drive_code = &drive_20010831;
++ break;
++ default:
++ drv_printk(KERN_ERR, "sorry, drive %x is not yet"
++ " supported\n",
++ di_drive_info.date);
++ break;
++ }
++
++ return (ddev->drive_code) ? 0 : -EINVAL;
++}
++
++/*
++ *
++ */
++static u8 parking_code[] = {
++ 0xa0, /* sub d0, d0 */
++ 0xc4, 0xda, 0xfc, /* movb d0, (ADBCTL) */
++ 0xf4, 0x74, 0x74, 0x0a, 0x08, /* mov 0x080a74, a0 */ /* fixup */
++ 0xf7, 0x20, 0x4c, 0x80, /* mov a0, (0x804c) */
++ 0xfe, /* rts */
++};
++
++/*
++ * Parks (disables) any existing alien drive code.
++ * Requires debug mode enabled.
++ */
++static u32 di_park_firmware(struct di_device *ddev)
++{
++ struct di_command cmd;
++ u32 irq_handler, original_irq_handler;
++ u32 load_address;
++
++ /* calculate an appropiate load address for the parking code */
++ irq_handler = le32_to_cpu(di_fw_get_irq_handler(ddev));
++ load_address = (irq_handler >= 0x400000) ? 0x008502 : 0x40c600;
++
++ /* get the original interrupt handler */
++ irq_handler = (ddev->model != 0x20010831) ? 0x00080A74 : 0x00080AA4;
++ original_irq_handler = irq_handler;
++
++ /* fix the parking code to match our drive model */
++ cpu_to_le32s(&irq_handler);
++ memcpy(parking_code + 6, &irq_handler, 3);
++
++ /* load and call it */
++ di_fw_patch_mem(ddev, load_address, parking_code, sizeof(parking_code));
++ di_op_func(&cmd, ddev, load_address);
++ di_run_command_and_wait(&cmd);
++
++ /*
++ * Check if the parking code did its job.
++ * The drive should be running now under the original irq handler.
++ */
++ irq_handler = le32_to_cpu(di_fw_get_irq_handler(ddev));
++ if (irq_handler != original_irq_handler) {
++ drv_printk(KERN_ERR, "parking failed!\n");
++ di_reset(ddev);
++ } else {
++ DBG("parking done, irq handler = %08x\n", irq_handler);
++ }
++
++ /* drive is not patched anymore here */
++ clear_bit(__DI_INTEROPERABLE, &ddev->flags);
++
++ return di_get_drive_status(ddev);
++}
++
++/*
++ * Spins down the drive, immediatelly.
++ */
++static void di_spin_down_drive(struct di_device *ddev)
++{
++ struct di_command cmd;
++
++ di_op_stopmotor(&cmd, ddev);
++ di_run_command_and_wait(&cmd);
++}
++
++/*
++ * Enables the "debug" command set.
++ */
++static int di_enable_debug_commands(struct di_device *ddev)
++{
++ struct di_command cmd;
++
++ /* send these two consecutive enable commands */
++ di_op_enable1(&cmd, ddev);
++ di_run_command_and_wait(&cmd);
++ di_op_enable2(&cmd, ddev);
++ return di_run_command_and_wait(&cmd);
++}
++
++/*
++ * Tries to determine if firmware extensions are currently installed.
++ * Requires debug mode enabled.
++ */
++static int di_has_alien_drive_code(struct di_device *ddev)
++{
++ unsigned long address;
++ int result = 1;
++
++ /*
++ * We assume that alien drive code is in place if the interrupt handler
++ * is not pointing to ROM address space.
++ */
++ address = di_fw_get_irq_handler(ddev);
++ address = le32_to_cpu(address);
++ if (address) {
++ if ((address & 0xffff0000) == 0x00080000)
++ result = 0;
++ }
++ return result;
++}
++
++/*
++ * Enables some workarounds and/or special behaviours depending on
++ * the drive firmware found.
++ * Requires debug mode enabled.
++ */
++static void di_init_alien_drive_code_quirks(struct di_device *ddev)
++{
++ unsigned long fingerprint;
++
++ /*
++ * Test if a xenogc/duoq is installed.
++ */
++ if (!di_fw_read_meml(ddev, &fingerprint, 0x40c60a)) {
++ if (fingerprint == 0xf710fff7) {
++ drv_printk(KERN_INFO, "drivechip: xenogc/duoq\n");
++ set_bit(__DI_AVOID_DEBUG, &ddev->flags);
++ }
++ }
++}
++
++/*
++ * Configures the drive to accept DVD-R and DVD+R media.
++ */
++static void di_make_interoperable(struct di_device *ddev)
++{
++ struct di_command cmd;
++
++ if (!ddev->drive_code || test_bit(__DI_AVOID_DEBUG, &ddev->flags))
++ return;
++
++ /* calm things down */
++ di_spin_down_drive(ddev);
++
++ /* disable any alien drive code */
++ di_enable_debug_commands(ddev);
++ di_park_firmware(ddev);
++
++ /* re-enable debug commands */
++ di_enable_debug_commands(ddev);
++
++ /* load our own drive code extensions */
++ di_fw_patch(ddev, ddev->drive_code, 1);
++
++ /*
++ * The drive will become interoperable now.
++ * Here we go...!
++ */
++ set_bit(__DI_INTEROPERABLE, &ddev->flags);
++ di_op_func(&cmd, ddev, DI_DRIVE_CODE_BASE);
++ di_run_command_and_wait(&cmd);
++
++ /* this checks if drive is still working... */
++ di_get_drive_status(ddev);
++}
++
++/*
++ * Ensures that the debug features of the drive firmware are working.
++ */
++static int di_probe_debug_features(struct di_device *ddev)
++{
++ int result;
++
++ /* do nothing on unknown drive models */
++ if (!ddev->drive_code)
++ return -EINVAL;
++
++ result = di_enable_debug_commands(ddev);
++ if (!di_result_ok(result)) {
++ DBG("uhmm, debug commands seem banned...\n");
++ DBG("... let's hard reset the drive!\n");
++
++ di_reset(ddev);
++ result = di_enable_debug_commands(ddev);
++ }
++
++ return di_result_ok(result) ? 0 : -EINVAL;
++}
++
++/*
++ * Probes the existing firmware features and determines the best operation
++ * mode.
++ */
++static void di_probe_firmware(struct di_device *ddev)
++{
++ if (di_probe_debug_features(ddev)) {
++ /* we can't use debug features, thus try to avoid them */
++ drv_printk(KERN_INFO, "firmware: debug features do not work,"
++ " using standard command set\n");
++ set_bit(__DI_AVOID_DEBUG, &ddev->flags);
++ } else {
++ if (di_has_alien_drive_code(ddev)) {
++ drv_printk(KERN_INFO, "firmware: patched drive\n");
++ /* enable some workarounds if required */
++ di_init_alien_drive_code_quirks(ddev);
++ } else {
++ drv_printk(KERN_INFO, "firmware: unpatched drive\n");
++ }
++ }
++}
++
++/*
++ * Stops the drive's motor, according to a previous schedule.
++ */
++static void di_motor_off(unsigned long ddev0)
++{
++ struct di_device *ddev = (struct di_device *)ddev0;
++ struct di_command *cmd;
++ unsigned long flags;
++
++ /* postpone a bit the motor off if there are pending commands */
++ spin_lock_irqsave(&ddev->lock, flags);
++ if (!ddev->cmd) {
++ ddev->cmd = cmd = &ddev->status;
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ di_op_stopmotor(cmd, ddev);
++ di_prepare_command(cmd, 1);
++ } else {
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ mod_timer(&ddev->motor_off_timer, jiffies + 1*HZ);
++ }
++}
++
++/*
++ * Cancels a previously scheduled motor off.
++ */
++static inline void di_cancel_motor_off(struct di_device *ddev)
++{
++ del_timer(&ddev->motor_off_timer);
++}
++
++/*
++ * Stops the drive's motor after the specified amount of seconds has elapsed.
++ */
++static void di_schedule_motor_off(struct di_device *ddev, unsigned int secs)
++{
++ del_timer(&ddev->motor_off_timer);
++ ddev->motor_off_timer.expires = jiffies + secs*HZ;
++ ddev->motor_off_timer.data = (unsigned long)ddev;
++ add_timer(&ddev->motor_off_timer);
++}
++
++/*
++ * Spins up the drive.
++ */
++static void di_spin_up_drive(struct di_device *ddev, u8 enable_extensions)
++{
++ struct di_command cmd;
++ u32 drive_status;
++ unsigned int attempts = 2;
++
++ /* do nothing if the drive is already spinning */
++ if (di_is_drive_ready(ddev))
++ goto out;
++
++ if (test_bit(__DI_AVOID_DEBUG, &ddev->flags)) {
++ /* don't use debug commands, let's hope a drivechip is there */
++ di_reset(ddev);
++ } else {
++ while (attempts-- > 0) {
++ if (!test_bit(__DI_INTEROPERABLE, &ddev->flags))
++ di_make_interoperable(ddev);
++
++ /*
++ * We only re-enable the extensions if the drive is not
++ * in a pending read disk id state. Otherwise, we assume
++ * that the drive has already accepted the disk.
++ */
++ drive_status = di_get_drive_status(ddev);
++ if (DI_STATUS(drive_status) !=
++ DI_STATUS_DISK_ID_NOT_READ) {
++ di_op_enableextensions(&cmd, ddev,
++ enable_extensions);
++ di_run_command_and_wait(&cmd);
++ }
++
++ /* the spin motor command requires the debug mode */
++ di_enable_debug_commands(ddev);
++ di_op_spinmotor(&cmd, ddev, DI_SPINMOTOR_UP);
++ di_run_command_and_wait(&cmd);
++
++ if (!ddev->drive_status) {
++ di_op_setstatus(&cmd, ddev,
++ DI_STATUS_DISK_ID_NOT_READ+1);
++ cmd.cmdbuf0 |= 0x00000300; /* XXX cheqmate */
++ di_run_command_and_wait(&cmd);
++ } else {
++ if (DI_ERROR(ddev->drive_status) !=
++ DI_ERROR_MEDIUM_NOT_PRESENT)
++ di_reset(ddev);
++ continue;
++ }
++ break;
++ }
++ }
++out:
++ return;
++}
++
++
++/*
++ * Block layer hooks.
++ *
++ */
++
++static int di_read_toc(struct di_device *ddev)
++{
++ static struct di_disk_id disk_id
++ __attribute__ ((aligned(DI_DMA_ALIGN+1)));
++ struct di_command cmd;
++ int accepted_media = 0;
++ int retval = 0;
++ const u8 enable_extensions = 1;
++
++ di_cancel_motor_off(ddev);
++
++ /* spin up the drive if needed */
++ if ((ddev->flags & DI_MEDIA_CHANGED))
++ di_spin_up_drive(ddev, enable_extensions);
++
++ /* check that disk id can be read and that the media is appropiate */
++ memset(&disk_id, 0, sizeof(disk_id));
++ di_op_readdiskid(&cmd, ddev, &disk_id);
++ di_run_command_and_wait(&cmd);
++ if (di_command_ok(&cmd)) {
++ if (disk_id.id[0] && memcmp(disk_id.id, "GBL", 3) &&
++ !di_accept_gods) {
++ di_print_disk_id(&disk_id);
++ drv_printk(KERN_ERR, "sorry, gamecube media"
++ " support is disabled\n");
++ } else {
++ accepted_media = 1;
++ }
++ } else {
++ set_bit(__DI_MEDIA_CHANGED, &ddev->flags);
++ }
++
++ if (accepted_media) {
++ /*
++ * This is currently hardcoded. Scream|CT got this number
++ * by reading up to where the lens physically allowed.
++ *
++ * This is currently causing us problems.
++ * For example, recent 'mount' versions will read 4k from
++ * the end of the device when guessing filesystem types.
++ * The end of device we are reporting is not the real one,
++ * so the drive will fail to read that part if it was not
++ * burned.
++ *
++ * As a temporary solution, specify always a filesystem
++ * type when using mount, or fill the whole disk when
++ * burning.
++ */
++ ddev->nr_sectors = DI_MAX_SECTORS; /* in DVD sectors */
++ clear_bit(__DI_MEDIA_CHANGED, &ddev->flags);
++
++ DBG("media ready for operation\n");
++ } else {
++ ddev->nr_sectors = 0;
++ retval = -ENOMEDIUM;
++
++ di_spin_down_drive(ddev);
++
++ DBG("media NOT ready\n");
++ }
++
++ /* transform to kernel sectors */
++ ddev->nr_sectors <<= (DI_SECTOR_SHIFT - KERNEL_SECTOR_SHIFT);
++ set_capacity(ddev->disk, ddev->nr_sectors);
++
++ return retval;
++}
++
++
++static void di_request_done(struct di_command *cmd)
++{
++ struct di_device *ddev = cmd->ddev;
++ struct request *req;
++ unsigned long flags;
++ int error = (cmd->result & DI_SR_TCINT) ? 0 : -EIO;
++
++ spin_lock_irqsave(&ddev->lock, flags);
++
++ req = ddev->req;
++ ddev->req = NULL;
++
++ spin_unlock_irqrestore(&ddev->lock, flags);
++
++ if (req) {
++ __blk_end_request(req, error, req->current_nr_sectors << 9);
++ spin_lock_irqsave(&ddev->queue_lock, flags);
++ blk_start_queue(ddev->queue);
++ spin_unlock_irqrestore(&ddev->queue_lock, flags);
++ }
++}
++
++static void di_do_request(struct request_queue *q)
++{
++ struct di_device *ddev = q->queuedata;
++ struct di_command *cmd = &ddev->req_cmd;
++ struct request *req;
++ unsigned long start;
++ unsigned long flags;
++ size_t len;
++
++ while ((req = elv_next_request(q))) {
++ /* keep our reads within limits */
++ if (req->sector + req->current_nr_sectors > ddev->nr_sectors) {
++ drv_printk(KERN_ERR, "reading past end\n");
++ end_request(req, 0);
++ continue;
++ }
++
++ /* it doesn't make sense to write to this device */
++ if (rq_data_dir(req) == WRITE) {
++ drv_printk(KERN_ERR, "write attempted\n");
++ end_request(req, 0);
++ continue;
++ }
++
++ /* it is not a good idea to open the lid ... */
++ if ((ddev->flags & DI_MEDIA_CHANGED)) {
++ drv_printk(KERN_ERR, "media changed, aborting\n");
++ end_request(req, 0);
++ continue;
++ }
++
++ spin_lock_irqsave(&ddev->lock, flags);
++
++ /* we can schedule just a single request each time */
++ if (ddev->req || ddev->cmd) {
++ blk_stop_queue(q);
++ if (ddev->cmd)
++ set_bit(__DI_START_QUEUE, &ddev->flags);
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ break;
++ }
++
++ blkdev_dequeue_request(req);
++
++ /* ignore requests that we can't handle */
++ if (!blk_fs_request(req)) {
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ continue;
++ }
++
++ /* store the request being handled ... */
++ ddev->req = req;
++ blk_stop_queue(q);
++
++ spin_unlock_irqrestore(&ddev->lock, flags);
++
++ /* ... and launch the corresponding read sector command */
++ start = req->sector << KERNEL_SECTOR_SHIFT;
++ len = req->current_nr_sectors << KERNEL_SECTOR_SHIFT;
++
++ di_op_readsector(cmd, ddev, start >> 2,
++ req->buffer, len);
++ cmd->done_data = cmd;
++ cmd->done = di_request_done;
++ di_run_command(cmd);
++ }
++}
++
++/*
++ * Block device hooks.
++ *
++ */
++
++static int di_open(struct block_device *bdev, fmode_t mode)
++{
++ struct di_device *ddev = bdev->bd_disk->private_data;
++ struct di_command *cmd;
++ DECLARE_COMPLETION(complete);
++ unsigned long flags;
++ int retval = 0;
++
++ /* this is a read only device */
++ if (mode & FMODE_WRITE) {
++ retval = -EROFS;
++ goto out;
++ }
++
++ /*
++ * If we have a pending command, that's a previously scheduled
++ * motor off. Wait for it to terminate before going on.
++ */
++ spin_lock_irqsave(&ddev->lock, flags);
++ if (ddev->cmd && ddev->ref_count == 0) {
++ cmd = ddev->cmd;
++ cmd->done_data = &complete;
++ cmd->done = di_wait_done;
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ wait_for_completion(&complete);
++ } else {
++ spin_unlock_irqrestore(&ddev->lock, flags);
++ }
++
++ /* this will take care of validating the media */
++ check_disk_change(bdev);
++ if (!ddev->nr_sectors) {
++ retval = -ENOMEDIUM;
++ goto out;
++ }
++
++ spin_lock_irqsave(&ddev->queue_lock, flags);
++
++ /* honor exclusive open mode */
++ if (ddev->ref_count == -1 ||
++ (ddev->ref_count && (mode & FMODE_EXCL))) {
++ retval = -EBUSY;
++ goto out_unlock;
++ }
++
++ if ((mode & FMODE_EXCL))
++ ddev->ref_count = -1;
++ else
++ ddev->ref_count++;
++
++out_unlock:
++ spin_unlock_irqrestore(&ddev->queue_lock, flags);
++out:
++ return retval;
++
++}
++
++static int di_release(struct gendisk *disk, fmode_t mode)
++{
++ struct di_device *ddev = disk->private_data;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ddev->queue_lock, flags);
++
++ if (ddev->ref_count > 0)
++ ddev->ref_count--;
++ else
++ ddev->ref_count = 0;
++
++ spin_unlock_irqrestore(&ddev->queue_lock, flags);
++
++ if (ddev->ref_count == 0) {
++ /*
++ * We do not immediately stop the motor, which saves us
++ * a spin down/spin up in applications that re-open quickly
++ * the device, like mount when -t is not specified.
++ */
++ di_schedule_motor_off(ddev, 1);
++
++ set_bit(__DI_MEDIA_CHANGED, &ddev->flags);
++ }
++
++ return 0;
++}
++
++static int di_revalidate_disk(struct gendisk *disk)
++{
++ struct di_device *ddev = disk->private_data;
++ di_read_toc(ddev);
++ return 0;
++}
++
++static int di_media_changed(struct gendisk *disk)
++{
++ struct di_device *ddev = disk->private_data;
++ return (ddev->flags & DI_MEDIA_CHANGED) ? 1 : 0;
++}
++
++static int di_ioctl(struct block_device *bdev, fmode_t mode,
++ unsigned int cmd, unsigned long arg)
++{
++ switch (cmd) {
++ case CDROMMULTISESSION:
++ /* struct cdrom_multisession */
++ break;
++ case CDROMSTART:
++ break;
++ case CDROMSTOP:
++ break;
++ case CDROMREADTOCHDR:
++ /* struct cdrom_tochdr */
++ break;
++ case CDROMREADTOCENTRY:
++ /* struct cdrom_tocentry */
++ break;
++ case CDROMREADMODE2:
++ case CDROMREADMODE1:
++ case CDROMREADRAW:
++ /* struct cdrom_read (1-2048, 2-2336,RAW-2352) */
++ break;
++ case CDROM_GET_MCN:
++ /* retrieve the universal product code */
++ /* struct cdrom_mcn */
++ break;
++ case CDROMRESET:
++ /* reset the drive */
++ break;
++ case BLKRAGET:
++ case BLKFRAGET:
++ case BLKROGET:
++ case BLKBSZGET:
++ case BLKSSZGET:
++ case BLKSECTGET:
++ case BLKGETSIZE:
++ case BLKGETSIZE64:
++ case BLKFLSBUF:
++ return ioctl_by_bdev(bdev, cmd, arg);
++ default:
++ return -EINVAL;
++ }
++ return -EINVAL;
++}
++
++static struct block_device_operations di_fops = {
++ .owner = THIS_MODULE,
++ .open = di_open,
++ .release = di_release,
++ .revalidate_disk = di_revalidate_disk,
++ .media_changed = di_media_changed,
++ .ioctl = di_ioctl,
++};
++
++/*
++ * Setup routines.
++ *
++ */
++
++static int di_init_irq(struct di_device *ddev)
++{
++ void __iomem *io_base = ddev->io_base;
++ u32 __iomem *sr_reg = io_base + DI_SR;
++ u32 __iomem *cvr_reg = io_base + DI_CVR;
++ u32 sr, cvr;
++ unsigned long flags;
++ int retval;
++
++ init_timer(&ddev->motor_off_timer);
++ ddev->motor_off_timer.function =
++ (void (*)(unsigned long))di_motor_off;
++
++ ddev->flags = 0;
++ set_bit(__DI_MEDIA_CHANGED, &ddev->flags);
++
++ /* calm down things a bit first */
++ di_quiesce(ddev);
++
++ /* request interrupt */
++ retval = request_irq(ddev->irq, di_irq_handler, 0,
++ DRV_MODULE_NAME, ddev);
++ if (retval) {
++ drv_printk(KERN_ERR, "request of irq%d failed\n", ddev->irq);
++ goto out;
++ }
++
++ spin_lock_irqsave(&ddev->io_lock, flags);
++
++ sr = in_be32(sr_reg);
++ sr |= DI_SR_BRKINT | DI_SR_TCINT | DI_SR_DEINT;
++ sr |= DI_SR_BRKINTMASK | DI_SR_TCINTMASK | DI_SR_DEINTMASK;
++ out_be32(sr_reg, sr);
++
++ cvr = in_be32(cvr_reg);
++ out_be32(cvr_reg, cvr | DI_CVR_CVRINT | DI_CVR_CVRINTMASK);
++
++ spin_unlock_irqrestore(&ddev->io_lock, flags);
++
++ di_retrieve_drive_model(ddev);
++ di_select_drive_code(ddev);
++
++ di_probe_firmware(ddev);
++
++ di_schedule_motor_off(ddev, DI_MOTOR_OFF_TIMEOUT);
++
++out:
++ return retval;
++}
++
++static void di_exit_irq(struct di_device *ddev)
++{
++ /* stop DVD motor */
++ di_cancel_motor_off(ddev);
++ di_spin_down_drive(ddev);
++
++ di_quiesce(ddev);
++
++ free_irq(ddev->irq, ddev);
++}
++
++static int di_init_blk_dev(struct di_device *ddev)
++{
++ struct gendisk *disk;
++ struct request_queue *queue;
++ int retval;
++
++ spin_lock_init(&ddev->lock);
++ spin_lock_init(&ddev->io_lock);
++
++ ddev->ref_count = 0;
++
++ retval = register_blkdev(DI_MAJOR, DI_NAME);
++ if (retval) {
++ drv_printk(KERN_ERR, "error registering major %d\n", DI_MAJOR);
++ goto err_register_blkdev;
++ }
++
++ retval = -ENOMEM;
++ spin_lock_init(&ddev->queue_lock);
++ queue = blk_init_queue(di_do_request, &ddev->queue_lock);
++ if (!queue) {
++ drv_printk(KERN_ERR, "error initializing queue\n");
++ goto err_blk_init_queue;
++ }
++
++ blk_queue_hardsect_size(queue, DI_SECTOR_SIZE);
++ blk_queue_dma_alignment(queue, DI_DMA_ALIGN);
++ blk_queue_max_phys_segments(queue, 1);
++ blk_queue_max_hw_segments(queue, 1);
++ queue->queuedata = ddev;
++ ddev->queue = queue;
++
++ disk = alloc_disk(1);
++ if (!disk) {
++ drv_printk(KERN_ERR, "error allocating disk\n");
++ goto err_alloc_disk;
++ }
++
++ disk->major = DI_MAJOR;
++ disk->first_minor = 0;
++ disk->fops = &di_fops;
++ strcpy(disk->disk_name, DI_NAME);
++ disk->queue = ddev->queue;
++ disk->private_data = ddev;
++ ddev->disk = disk;
++
++ set_disk_ro(ddev->disk, 1);
++ add_disk(ddev->disk);
++
++ retval = 0;
++ goto out;
++
++err_alloc_disk:
++ blk_cleanup_queue(ddev->queue);
++err_blk_init_queue:
++ unregister_blkdev(DI_MAJOR, DI_NAME);
++err_register_blkdev:
++out:
++ return retval;
++}
++
++static void di_exit_blk_dev(struct di_device *ddev)
++{
++ if (ddev->disk) {
++ del_gendisk(ddev->disk);
++ put_disk(ddev->disk);
++ }
++ if (ddev->queue)
++ blk_cleanup_queue(ddev->queue);
++ unregister_blkdev(DI_MAJOR, DI_NAME);
++}
++
++static int di_init_proc(struct di_device *ddev)
++{
++#ifdef CONFIG_PROC_FS
++#endif /* CONFIG_PROC_FS */
++ return 0;
++}
++
++static void di_exit_proc(struct di_device *ddev)
++{
++#ifdef CONFIG_PROC_FS
++#endif /* CONFIG_PROC_FS */
++}
++
++static int di_init(struct di_device *ddev, struct resource *mem, int irq)
++{
++ int retval;
++
++ ddev->io_base = ioremap(mem->start, mem->end - mem->start + 1);
++ ddev->irq = irq;
++
++ retval = di_init_blk_dev(ddev);
++ if (!retval) {
++ retval = di_init_irq(ddev);
++ if (retval)
++ di_exit_blk_dev(ddev);
++ else
++ di_init_proc(ddev);
++ }
++ return retval;
++}
++
++static void di_exit(struct di_device *ddev)
++{
++ di_exit_blk_dev(ddev);
++ di_exit_irq(ddev);
++ di_exit_proc(ddev);
++ if (ddev->io_base) {
++ iounmap(ddev->io_base);
++ ddev->io_base = NULL;
++ }
++}
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int di_do_probe(struct device *dev,
++ struct resource *mem, int irq)
++{
++ struct di_device *ddev;
++ int retval;
++
++ ddev = kzalloc(sizeof(*ddev), GFP_KERNEL);
++ if (!ddev) {
++ drv_printk(KERN_ERR, "failed to allocate di_device\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, ddev);
++ ddev->dev = dev;
++
++ retval = di_init(ddev, mem, irq);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(ddev);
++ }
++ return retval;
++}
++
++static int di_do_remove(struct device *dev)
++{
++ struct di_device *ddev = dev_get_drvdata(dev);
++
++ if (ddev) {
++ di_exit(ddev);
++ dev_set_drvdata(dev, NULL);
++ kfree(ddev);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++static int di_do_shutdown(struct device *dev)
++{
++ struct di_device *ddev = dev_get_drvdata(dev);
++
++ if (ddev)
++ di_quiesce(ddev);
++ return 0;
++}
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int __init di_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource res;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &res);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENODEV;
++ }
++
++ return di_do_probe(&odev->dev,
++ &res, irq_of_parse_and_map(odev->node, 0));
++}
++
++static int __exit di_of_remove(struct of_device *odev)
++{
++ return di_do_remove(&odev->dev);
++}
++
++static int di_of_shutdown(struct of_device *odev)
++{
++ return di_do_shutdown(&odev->dev);
++}
++
++
++static struct of_device_id di_of_match[] = {
++ { .compatible = "nintendo,flipper-disk" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, di_of_match);
++
++static struct of_platform_driver di_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = di_of_match,
++ .probe = di_of_probe,
++ .remove = di_of_remove,
++ .shutdown = di_of_shutdown,
++};
++
++/*
++ * Module interface hooks.
++ *
++ */
++
++static int __init di_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ di_driver_version);
++
++ return of_register_platform_driver(&di_of_driver);
++}
++
++static void __exit di_exit_module(void)
++{
++ of_unregister_platform_driver(&di_of_driver);
++}
++
++module_init(di_init_module);
++module_exit(di_exit_module);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
+diff --git a/drivers/block/gcn-dvd/Makefile b/drivers/block/gcn-dvd/Makefile
+new file mode 100644
+index 0000000..1f3ebca
+--- /dev/null
++++ b/drivers/block/gcn-dvd/Makefile
+@@ -0,0 +1,3 @@
++obj-$(CONFIG_GAMECUBE_DVD) := gcn-dvd.o
++
++gcn-dvd-objs := main.o request.o
+diff --git a/drivers/block/gcn-dvd/main.c b/drivers/block/gcn-dvd/main.c
+new file mode 100644
+index 0000000..d07333e
+--- /dev/null
++++ b/drivers/block/gcn-dvd/main.c
+@@ -0,0 +1,810 @@
++/*
++ * drivers/block/gcn-dvd/main.c
++ *
++ * Nintendo GameCube DVD driver
++ * Copyright (C) 2005 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/major.h>
++#include <linux/vmalloc.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/blkdev.h>
++#include <linux/delay.h>
++#include <linux/cdrom.h>
++#include <linux/wait.h>
++#include <asm/setup.h>
++#include <asm/bitops.h>
++#include <asm/pgtable.h>
++#include <asm/cacheflush.h>
++#include <asm/cache.h>
++#include <linux/interrupt.h>
++#include <linux/dma-mapping.h>
++
++#include <linux/fcntl.h> /* O_ACCMODE */
++#include <linux/hdreg.h> /* HDIO_GETGEO */
++
++#include <asm/io.h>
++
++#include "request.h"
++
++#define DEVICE_NAME "DVD"
++#define DVD_MAJOR 60
++
++#define LINUX_SECTOR_SIZE 512
++#define LINUX_SECTOR_SHIFT 9
++#define DVD_SECTOR_SIZE 2048
++#define DVD_SECTOR_SHIFT 11
++#define DVD_MAX_SECTORS 712880
++
++#define DMA_ALIGNMENT_MASK 0x1F
++
++#define DVD_REGISTER_INIT ((void* __iomem)0xCC003024)
++
++#define DVD_REGISTER_BLOCK_BASE 0xCC006000
++#define DVD_REGISTER_BLOCK_LENGTH 0x40
++
++#define DVD_GAMECODE_U32 0x80000000 /* Gamecode */
++#define DVD_COMPANY_U16 0x80000004 /* Game company id */
++#define DVD_DISK_ID_U8 0x80000006 /* Disk id */
++#define DVD_DISK_VERSION_U8 0x80000007 /* Disk version */
++
++#define DVD_IRQ 2
++
++/* DI Status Register */
++#define DI_DISR ((void * __iomem)0xCC006000)
++#define DI_DISR_BRKINT (1<<6)
++#define DI_DISR_BRKINTMASK (1<<5)
++#define DI_DISR_TCINT (1<<4)
++#define DI_DISR_TCINTMASK (1<<3)
++#define DI_DISR_DEINT (1<<2)
++#define DI_DISR_DEINTMASK (1<<1)
++#define DI_DISR_BRK (1<<0)
++
++/* DI Cover Register */
++#define DI_DICVR ((void * __iomem)0xCC006004)
++#define DI_DICVR_CVRINT (1<<2)
++#define DI_DICVR_CVRINTMASK (1<<1)
++#define DI_DICVR_CVR (1<<0)
++
++/* DI Command Buffer 0 */
++#define DI_DICMDBUF0 ((void * __iomem)0xCC006008)
++#define DI_DICMDBUF0_CMD 24
++#define DI_DICMDBUF0_SUBCMD1 16
++#define DI_DICMDBUF0_SUBCMD2 0
++
++/* DI Command Buffer 1 */
++#define DI_DICMDBUF1 ((void * __iomem)0xCC00600C)
++
++/* DI Command Buffer 2 */
++#define DI_DICMDBUF2 ((void * __iomem)0xCC006010)
++
++/* DMA Memory Address Register */
++#define DI_DIMAR ((void * __iomem)0xCC006014)
++
++/* DI DMA Transfer Length Register */
++#define DI_DILENGTH ((void * __iomem)0xCC006018)
++
++/* DI Control Register */
++#define DI_DICR ((void * __iomem)0xCC00601C)
++#define DI_DICR_RW (1<<2)
++#define DI_DICR_DMA (1<<1)
++#define DI_DICR_TSTART (1<<0)
++
++/* DI Immediate Data Buffer */
++#define DI_DIIMMBUF ((void * __iomem)0xCC006020)
++
++#define DI_CMD_REZERO 0x01
++#define DI_CMD_INQUIRY 0x12
++#define DI_CMD_READ 0xA8
++#define DI_CMD_SEEK 0xAB
++#define DI_CMD_READTOC 0x43
++#define DI_CMD_STOP 0xE3
++/* This is a fake command, don't send to the hardware */
++#define DI_CMD_INITIALIZE 0xFF
++
++#define IS_CMD_TYPE(cmd,type) (((cmd) >> DI_DICMDBUF0_CMD) == (type))
++
++static struct gendisk *dvd_gendisk;
++static struct request_queue *dvd_queue;
++static spinlock_t dvd_queue_lock = SPIN_LOCK_UNLOCKED;
++static struct _taginterrupt_queue
++{
++ spinlock_t lock;
++ int drive_initialized;
++ struct list_head queue;
++} interrupt_queue;
++
++static struct _tagdvdinfo {
++ spinlock_t lock;
++ unsigned long refCount;
++ unsigned int media_changed;
++ unsigned long numDVDSectors;
++ unsigned long numLinuxSectors;
++
++ /* disc info */
++ struct _tagdvdid
++ {
++ u32 gamecode;
++ u16 company;
++ u8 id;
++ u8 version;
++ } disc;
++} dvd_info;
++
++#define LOCK(flags) spin_lock_irqsave(&dvd_info.lock,flags)
++#define UNLOCK(flags) spin_unlock_irqrestore(&dvd_info.lock,flags)
++
++/* Must be 0x20 in size = 32 bytes */
++#pragma pack(1)
++
++struct gc_dvd_drive_info
++{
++ u32 head;
++ u32 middle;
++ u32 last;
++ u8 padding[20];
++};
++
++struct gc_dvd_disc_info
++{
++ u16 revision;
++ u16 device_code;
++ u32 release_date;
++ u8 padding[24];
++};
++
++#pragma pack()
++
++struct dma_buffer
++{
++ size_t size;
++ void *ptr;
++ void *alignedPtr;
++ dma_addr_t handle;
++};
++
++#ifdef DEBUG
++#define DPRINTK(fmt,args...) printk(KERN_INFO "%s (%u): " fmt,__FUNCTION__,__LINE__,## args)
++#else
++#define DPRINTK(fmt,args...)
++#endif
++
++static int alloc_dma_buffer(size_t size,struct dma_buffer *pRet)
++{
++ /* allocate space for the aligned memory */
++ pRet->size = DMA_ALIGNMENT_MASK + size;
++ if (!(pRet->ptr = kmalloc(pRet->size,GFP_KERNEL | GFP_DMA))) {
++ DPRINTK("Cannot allocate DMA memory of size %i\n",pRet->size);
++ return -ENOMEM;
++ }
++
++ /* align the pointer */
++ if ((unsigned long)pRet->ptr & DMA_ALIGNMENT_MASK) {
++ pRet->alignedPtr = (void*)(((unsigned long)pRet->ptr + DMA_ALIGNMENT_MASK) & ~DMA_ALIGNMENT_MASK);
++ /* adjust the size if not aligned */
++ pRet->size -= (pRet->alignedPtr - pRet->ptr);
++ }
++ else {
++ pRet->alignedPtr = pRet->ptr;
++ }
++ /* get the dma mapping */
++ pRet->handle = virt_to_phys(pRet->alignedPtr);
++ return 0;
++}
++
++inline static void sync_dma_buffer(struct dma_buffer *pRet)
++{
++ __dma_sync(pRet->alignedPtr, pRet->size, DMA_FROM_DEVICE);
++}
++
++inline static void free_dma_buffer(struct dma_buffer *pRet)
++{
++ kfree(pRet->ptr);
++}
++
++/* hardware talk */
++static void gc_dvd_enable_interrupts(int enable)
++{
++ unsigned long outval;
++ /* enable main interrupts */
++ if (enable) {
++ outval = DI_DISR_BRKINT | DI_DISR_TCINT | DI_DISR_DEINT |
++ DI_DISR_BRKINTMASK | DI_DISR_TCINTMASK | DI_DISR_DEINTMASK;
++ }
++ else {
++ outval = DI_DISR_BRKINT | DI_DISR_TCINT | DI_DISR_DEINT;
++ }
++
++ writel(outval,DI_DISR);
++
++ /* This enables cover interrupts */
++ if (enable) {
++ outval = DI_DICVR_CVRINT | DI_DICVR_CVRINTMASK;
++ }
++ else {
++ outval = DI_DICVR_CVRINT;
++ }
++
++ writel(outval,DI_DICVR);
++}
++
++static void gc_dvd_execute_queue_command(struct gc_dvd_command *cmd)
++{
++ u32 val;
++ /* if they're doing a read and the drive is not initialized */
++ if (!interrupt_queue.drive_initialized &&
++ IS_CMD_TYPE(cmd->r_DI_DICMDBUF0,DI_CMD_READ)) {
++ /* insert an initialize queue item BEFORE this one */
++ static struct gc_dvd_command init_cmd = {
++ .r_DI_DICMDBUF0 = DI_CMD_INITIALIZE << DI_DICMDBUF0_CMD,
++ .completion_routine = NULL,
++ .param = NULL,
++ };
++
++ /* insert before this item */
++ list_add_tail(&init_cmd.list,&cmd->list);
++ /* now execute the initialize routine */
++ val = (readl(DVD_REGISTER_INIT) & ~4) | 1;
++ writel(val,DVD_REGISTER_INIT);
++ udelay(100);
++ val |= (4 | 1);
++ writel(val,DVD_REGISTER_INIT);
++ udelay(100);
++ /* it will return an interrupt when we're done, our
++ queue item will pick it up */
++ }
++ else if (cmd) {
++ writel(cmd->r_DI_DICMDBUF0,DI_DICMDBUF0);
++ writel(cmd->r_DI_DICMDBUF1,DI_DICMDBUF1);
++ writel(cmd->r_DI_DICMDBUF2,DI_DICMDBUF2);
++ writel((unsigned long)cmd->r_DI_DIMAR,DI_DIMAR);
++ writel(cmd->r_DI_DILENGTH,DI_DILENGTH);
++ writel(cmd->r_DI_DICR,DI_DICR);
++ }
++}
++
++static int gc_dvd_queue_command(struct gc_dvd_command *cmd)
++{
++ unsigned long flags;
++ int execute_immediately;
++
++ spin_lock_irqsave(&interrupt_queue.lock,flags);
++
++ cmd->int_status = is_still_running;
++ /* add to the tail of the list */
++ execute_immediately = list_empty(&interrupt_queue.queue);
++
++ list_add_tail(&cmd->list,&interrupt_queue.queue);
++
++ if (execute_immediately) {
++ gc_dvd_execute_queue_command(cmd);
++ }
++ /* release lock so interrupt handler can get it */
++ spin_unlock_irqrestore(&interrupt_queue.lock,flags);
++ return 0;
++}
++
++/* This function is called from an IRQ context, we just wake up the queue */
++static void gc_dvd_queue_completion_wake_up(struct gc_dvd_command *cmd)
++{
++ wake_up_interruptible(((wait_queue_head_t*)cmd->param));
++}
++
++static int gc_dvd_execute_blocking_command(unsigned int di_cmd,unsigned int sz,struct dma_buffer *buf)
++{
++ struct gc_dvd_command cmd;
++ wait_queue_head_t wait_queue;
++
++ if ((sz > 0) && alloc_dma_buffer(sz,buf)) {
++ return -ENOMEM;
++ }
++
++ init_waitqueue_head(&wait_queue);
++
++ cmd.flags = 0;
++ cmd.r_DI_DICMDBUF0 = di_cmd;
++ cmd.r_DI_DICMDBUF1 = 0;
++ cmd.r_DI_DICMDBUF2 = sz;
++ cmd.r_DI_DIMAR = (sz > 0) ? (void*)buf->handle : NULL;
++ cmd.r_DI_DILENGTH = sz;
++ cmd.r_DI_DICR = DI_DICR_TSTART | ((sz > 0) ? DI_DICR_DMA : 0);
++ cmd.completion_routine = gc_dvd_queue_completion_wake_up;
++ cmd.param = &wait_queue;
++
++ gc_dvd_queue_command(&cmd);
++ /* wait for it to finish */
++ while (wait_event_interruptible(wait_queue,cmd.int_status !=
++ is_still_running)) ;
++
++ return cmd.int_status;
++}
++
++static inline void gc_dvd_stop_motor(void)
++{
++ gc_dvd_execute_blocking_command(DI_CMD_STOP << DI_DICMDBUF0_CMD,0,NULL);
++}
++
++static int gc_dvd_inquiry(void)
++{
++
++ /* get status on disk */
++ struct dma_buffer buf;
++ struct gc_dvd_drive_info *pdi;
++ int is;
++
++ is = gc_dvd_execute_blocking_command(DI_CMD_INQUIRY << DI_DICMDBUF0_CMD,
++ sizeof(struct gc_dvd_drive_info),
++ &buf);
++ if (is == -ENOMEM) {
++ return is;
++ }
++ else if (is != is_transfer_complete) {
++ printk(KERN_ERR "Gamecube DVD: error in inquiry cmd\n");
++ is = -ENODEV;
++ }
++ else {
++ sync_dma_buffer(&buf);
++
++ pdi = (struct gc_dvd_drive_info*)buf.alignedPtr;
++ printk(KERN_INFO "Gamecube DVD: 0x%x, 0x%x,0x%x\n",pdi->head,pdi->middle,pdi->last);
++
++ is = 0;
++ }
++
++ free_dma_buffer(&buf);
++ return is;
++}
++
++static int gc_dvd_read_toc(void)
++{
++ struct dma_buffer buf;
++ struct gc_dvd_disc_info *pdi;
++ int i;
++
++ i = gc_dvd_execute_blocking_command(DI_CMD_READ << DI_DICMDBUF0_CMD | 0x40,
++ sizeof(struct gc_dvd_disc_info),
++ &buf);
++ if (i != is_transfer_complete) {
++ dvd_info.numDVDSectors = 0;
++
++ if (i != -ENOMEM) {
++ free_dma_buffer(&buf);
++ }
++ else {
++ i = -ENOMEDIUM;
++ }
++
++ printk(KERN_ERR "Gamecube DVD: error reading TOC - missing medium?\n");
++ }
++ else {
++ sync_dma_buffer(&buf);
++
++ pdi = (struct gc_dvd_disc_info*)buf.alignedPtr;
++ printk(KERN_INFO "Gamecube DVD: revision: %u, device_code %u, release_date: %u\n",pdi->revision,pdi->device_code,pdi->release_date);
++
++ dvd_info.numDVDSectors = DVD_MAX_SECTORS;
++ /* reset media_changed flag */
++ dvd_info.media_changed = 0;
++
++ free_dma_buffer(&buf);
++
++ i = 0;
++ }
++ /* inform the kernel of the size */
++ dvd_info.numLinuxSectors = dvd_info.numDVDSectors << (DVD_SECTOR_SHIFT - LINUX_SECTOR_SHIFT);
++ set_capacity(dvd_gendisk,dvd_info.numLinuxSectors);
++ return i;
++}
++
++/* Handlers */
++static int gc_dvd_revalidate(struct gendisk *disk)
++{
++ gc_dvd_read_toc();
++ return 0;
++}
++
++static int gc_dvd_open(struct inode *inode,struct file *filp)
++{
++ unsigned long flags;
++ /* we are read only */
++ if (filp->f_mode & FMODE_WRITE) {
++ return -EROFS;
++ }
++
++ /* check the disc, only allow minor of 0 to be opened */
++ if (iminor(inode)) {
++ return -ENODEV;
++ }
++
++ /* update information about the disc */
++ LOCK(flags);
++ if (dvd_info.refCount > 0) {
++ /* we only let one at a time */
++ UNLOCK(flags);
++ return -EBUSY;
++ }
++ else {
++ check_disk_change(inode->i_bdev);
++ /* revalidate should be called if necessary, check results here */
++ if (dvd_info.numDVDSectors == 0) {
++ UNLOCK(flags);
++ return -ENOMEDIUM;
++ }
++ }
++ dvd_info.refCount++;
++ UNLOCK(flags);
++ return 0;
++}
++static int gc_dvd_release(struct inode *inode,struct file *filp)
++{
++ unsigned long flags;
++
++ gc_dvd_stop_motor();
++
++ LOCK(flags);
++ dvd_info.refCount--;
++ /* force a media change so we re-read the toc and initialize the disc */
++ dvd_info.media_changed = 1;
++ UNLOCK(flags);
++ return 0;
++}
++
++static int gc_dvd_ioctl(struct inode *inode,struct file *filp,
++ unsigned int cmd,unsigned long arg)
++{
++ switch (cmd)
++ {
++ case CDROMMULTISESSION:
++ /* struct cdrom_multisession */
++ break;
++
++ case CDROMSTART:
++ break;
++
++ case CDROMSTOP:
++ break;
++
++ case CDROMREADTOCHDR:
++ /* struct cdrom_tochdr */
++ break;
++
++ case CDROMREADTOCENTRY:
++ /* struct cdrom_tocentry */
++ break;
++
++ case CDROMREADMODE2:
++ case CDROMREADMODE1:
++ case CDROMREADRAW:
++ /* struct cdrom_read (1-2048, 2-2336,RAW-2352) */
++ break;
++
++ case CDROM_GET_MCN:
++ /* retrieve the universal product code */
++ /* struct cdrom_mcn */
++ break;
++
++ case CDROMRESET:
++ /* reset the drive */
++ break;
++
++ case BLKRAGET:
++ case BLKFRAGET:
++ case BLKROGET:
++ case BLKBSZGET:
++ case BLKSSZGET:
++ case BLKSECTGET:
++ case BLKGETSIZE:
++ case BLKGETSIZE64:
++ case BLKFLSBUF:
++ return ioctl_by_bdev(inode->i_bdev,cmd,arg);
++ default:
++ return -ENOTTY;
++ }
++ return -ENOTTY;
++}
++
++static int gc_dvd_media_changed(struct gendisk *disk)
++{
++ /* return 1 if the disc has changed */
++ return (dvd_info.media_changed ? 1 : 0);
++}
++
++static void gc_dvd_read_request_callback(struct gc_dvd_command *cmd)
++{
++ unsigned long flags;
++ struct request *req = (struct request*)cmd->param;
++ struct request_queue *rqueue = req->q;
++ int status;
++
++ /* since this was performed via DMA, invalidate the cache */
++ if (cmd->int_status == is_transfer_complete) {
++ __dma_sync(req->buffer, cmd->r_DI_DILENGTH, DMA_FROM_DEVICE);
++ }
++ /* free this item so another request can get it */
++ gc_dvd_request_release_data(cmd);
++ /* now end the request and send back to block layer */
++ spin_lock_irqsave(rqueue->queue_lock,flags);
++ status = is_transfer_complete;
++ if (!end_that_request_first(req,
++ status, req->current_nr_sectors)) {
++ add_disk_randomness(req->rq_disk);
++ end_that_request_last(req, status);
++ }
++ /* start queue back up */
++ blk_start_queue(rqueue);
++ spin_unlock_irqrestore(rqueue->queue_lock,flags);
++}
++
++static void gc_dvd_do_request(request_queue_t *q)
++{
++ struct request *req;
++ unsigned long start;
++ unsigned long len;
++ struct gc_dvd_command *cmd;
++
++ while ((req = elv_next_request(q))) {
++ /* check if they are reading beyond the limits */
++ if ((req->sector + req->current_nr_sectors) > dvd_info.numLinuxSectors) {
++ printk(KERN_ERR "Gamecube DVD: reading past end\n");
++ end_request(req,0);
++ }
++ else if (rq_data_dir(req) == WRITE) {
++ printk(KERN_ERR "Gamecube DVD: write attempted\n");
++ end_request(req,0);
++ }
++ else if (dvd_info.media_changed) {
++ DPRINTK("media changed in read routine, aborting\n");
++ end_request(req,0);
++ }
++ else if (req->current_nr_sectors >= (1 << (DVD_SECTOR_SHIFT - LINUX_SECTOR_SHIFT))) {
++ /* now schedule the read */
++ if (gc_dvd_request_get_data(&cmd) || !cmd) {
++ /* we're full, stop the queue */
++ blk_stop_queue(q);
++ return;
++ }
++ else {
++ /* remove item from the queue */
++ blkdev_dequeue_request(req);
++
++ /* setup my structure */
++ start = req->sector << LINUX_SECTOR_SHIFT;
++ len = req->current_nr_sectors << LINUX_SECTOR_SHIFT;
++
++ cmd->flags = 0;
++ cmd->r_DI_DICMDBUF0 = DI_CMD_READ << DI_DICMDBUF0_CMD;
++ cmd->r_DI_DICMDBUF1 = start >> (DVD_SECTOR_SHIFT - LINUX_SECTOR_SHIFT);
++ cmd->r_DI_DICMDBUF2 = len;
++ cmd->r_DI_DIMAR = (void*)virt_to_phys(req->buffer);
++ cmd->r_DI_DILENGTH = len;
++ cmd->r_DI_DICR = DI_DICR_TSTART | DI_DICR_DMA;
++ cmd->completion_routine = gc_dvd_read_request_callback;
++ cmd->param = req;
++ gc_dvd_queue_command(cmd);
++ }
++ }
++ }
++}
++
++static struct block_device_operations dvd_fops =
++{
++ .owner = THIS_MODULE,
++ .open = gc_dvd_open,
++ .release = gc_dvd_release,
++ .revalidate_disk = gc_dvd_revalidate,
++ .media_changed = gc_dvd_media_changed,
++ .ioctl = gc_dvd_ioctl,
++};
++
++static irqreturn_t gc_dvd_irq_handler(int irq,void *dev_id,struct pt_regs *regs)
++{
++ unsigned int reason;
++ unsigned long flags;
++ struct gc_dvd_command *cur_item;
++#define REASON_FLAG_COVER 0x80000000
++ /* try the main status */
++ if ((reason=readl(DI_DISR)) & (DI_DISR_BRKINT | DI_DISR_TCINT | DI_DISR_DEINT)) {
++ /* acknowledge the interrupt */
++ writel(reason | DI_DISR_BRKINT | DI_DISR_TCINT | DI_DISR_DEINT,DI_DISR);
++ }
++ else if ((reason=readl(DI_DICVR)) & (DI_DICVR_CVRINT)) {
++ /* acknowlegde the interrupt */
++ writel(reason | DI_DICVR_CVRINT,DI_DICVR);
++ /* set media changed flag */
++ if (!(reason & DI_DICVR_CVR)) {
++ dvd_info.media_changed = 1;
++ }
++ /* set flag to be used later on */
++ reason |= REASON_FLAG_COVER;
++ }
++ else {
++ /* not for us, get out of here */
++ return IRQ_NONE;
++ }
++ /* ok we have an interrupt, now process our queue */
++ /* lock our structure */
++ spin_lock_irqsave(&interrupt_queue.lock,flags);
++ /* now look at our structure and call appropriate callback if necessary */
++ if (!list_empty(&interrupt_queue.queue)) {
++ /* first unlink the queue item */
++ cur_item = (struct gc_dvd_command*)interrupt_queue.queue.next;
++ list_del(&cur_item->list);
++ /* do special checks on the command type to keep track of drive state */
++ if (IS_CMD_TYPE(cur_item->r_DI_DICMDBUF0,DI_CMD_STOP)) {
++ interrupt_queue.drive_initialized = 0;
++ }
++ else if (IS_CMD_TYPE(cur_item->r_DI_DICMDBUF0,DI_CMD_INITIALIZE)) {
++ interrupt_queue.drive_initialized = 1;
++ }
++ /* now execute the next request if we have one */
++ if (!list_empty(&interrupt_queue.queue)) {
++ gc_dvd_execute_queue_command((struct gc_dvd_command*)
++ interrupt_queue.queue.next);
++ }
++ /* unlock the lock */
++ spin_unlock_irqrestore(&interrupt_queue.lock,flags);
++ /* determine the correct interrupt status */
++ if (reason & REASON_FLAG_COVER) {
++ if (reason & DI_DICVR_CVR) {
++ cur_item->int_status = is_cover_opened;
++ }
++ else {
++ cur_item->int_status = is_cover_closed;
++ }
++ }
++ else if (reason & DI_DISR_TCINT) {
++ cur_item->int_status = is_transfer_complete;
++ }
++ else if (reason & DI_DISR_DEINT) {
++ cur_item->int_status = is_error;
++ }
++ else if (reason & DI_DISR_BRKINT) {
++ cur_item->int_status = is_break;
++ }
++ /* call the callback */
++ if (cur_item->completion_routine) {
++ cur_item->completion_routine(cur_item);
++ }
++ }
++ else {
++ spin_unlock_irqrestore(&interrupt_queue.lock,flags);
++ DPRINTK("Received interrupt but nothing was waiting for it\n");
++ }
++
++ return IRQ_HANDLED;
++}
++
++static int __init gc_dvd_init(void)
++{
++ int ret;
++
++ printk(KERN_INFO "Gamecube DVD driver: init\n");
++
++ /* initialize the refcount */
++ memset(&dvd_info,0,sizeof(dvd_info));
++ dvd_info.media_changed = 1;
++
++ /* initialize the interrupt_queue */
++ spin_lock_init(&interrupt_queue.lock);
++ interrupt_queue.drive_initialized = 0;
++ INIT_LIST_HEAD(&interrupt_queue.queue);
++
++ spin_lock_init(&dvd_info.lock);
++
++ /* initial the request queue */
++ gc_dvd_request_init();
++ /* first reserve our memory region to we can query hardware */
++ if (check_mem_region(DVD_REGISTER_BLOCK_BASE,DVD_REGISTER_BLOCK_LENGTH) ||
++ !request_mem_region(DVD_REGISTER_BLOCK_BASE,DVD_REGISTER_BLOCK_LENGTH,"Gamecube DVD")) {
++ printk(KERN_ERR "Couldn't reserve memory area for DVD\n");
++ return -ENOMEM;
++ }
++
++ if ((ret=request_irq(DVD_IRQ,gc_dvd_irq_handler,SA_INTERRUPT,"Gamecube DVD",0))) {
++ printk(KERN_ERR "Unable to reserve DVD IRQ\n");
++ goto delete_mem_region;
++ }
++
++ /* enable interrupts */
++ gc_dvd_enable_interrupts(1);
++ /* query the drive first */
++ if ((ret=gc_dvd_inquiry())) {
++ goto delete_irq;
++ }
++ /* now stop the dvd motor */
++ gc_dvd_stop_motor();
++
++ if ((ret=register_blkdev(DVD_MAJOR,DEVICE_NAME))) {
++ goto delete_irq;
++ }
++
++ if (!(dvd_gendisk = alloc_disk(1))) {
++ ret = -ENOMEM;
++ goto unreg_blkdev;
++ }
++
++ if (!(dvd_queue = blk_init_queue(gc_dvd_do_request,&dvd_queue_lock))) {
++ ret = -ENOMEM;
++ goto delete_gendisk;
++ }
++
++ dvd_gendisk->major = DVD_MAJOR;
++ dvd_gendisk->first_minor = 0;
++ dvd_gendisk->fops = &dvd_fops;
++ strcpy(dvd_gendisk->disk_name,"dvd");
++
++ dvd_gendisk->queue = dvd_queue;
++
++ /* ok now setup the desired parameters, like block size, hardsect size,
++ max hardware sectors to read at once, read ahead, etc */
++ /* Hardware sector size */
++ blk_queue_hardsect_size(dvd_queue,DVD_SECTOR_SIZE);
++ /* Maximum sectors that can be read per request, hardware limit */
++ blk_queue_max_phys_segments(dvd_queue,1);
++ blk_queue_max_hw_segments(dvd_queue,1);
++ /* Max size of coalesced segment */
++ /* blk_queue_max_segment_size(dvd_queue,size); */
++ /* Set the dma alignment */
++ blk_queue_dma_alignment(dvd_queue,DMA_ALIGNMENT_MASK);
++
++ set_disk_ro(dvd_gendisk,1);
++ add_disk(dvd_gendisk);
++
++ return 0;
++
++ delete_gendisk:
++ del_gendisk(dvd_gendisk);
++ put_disk(dvd_gendisk);
++ dvd_gendisk = NULL;
++ unreg_blkdev:
++ unregister_blkdev(DVD_MAJOR,DEVICE_NAME);
++ delete_irq:
++ free_irq(DVD_IRQ,0);
++ delete_mem_region:
++ release_mem_region(DVD_REGISTER_BLOCK_BASE,DVD_REGISTER_BLOCK_LENGTH);
++ return ret;
++}
++
++static void __exit gc_dvd_exit(void)
++{
++ printk(KERN_INFO "Gamecube DVD driver: exit\n");
++
++ /* TODO send a break/interrupt to the device */
++ gc_dvd_stop_motor();
++ gc_dvd_enable_interrupts(0);
++
++ free_irq(DVD_IRQ, 0);
++
++ release_mem_region(DVD_REGISTER_BLOCK_BASE,DVD_REGISTER_BLOCK_LENGTH);
++
++ blk_unregister_region(MKDEV(DVD_MAJOR,0),256);
++ unregister_blkdev(DVD_MAJOR,DEVICE_NAME);
++
++ if (dvd_gendisk) {
++ del_gendisk(dvd_gendisk);
++ put_disk(dvd_gendisk);
++
++ dvd_gendisk = NULL;
++ }
++
++ if (dvd_queue) {
++ blk_cleanup_queue(dvd_queue);
++
++ dvd_queue = NULL;
++ }
++}
++
++MODULE_AUTHOR("Scream|CT");
++MODULE_DESCRIPTION("Gamecube DVD driver");
++MODULE_LICENSE("GPL");
++
++module_init(gc_dvd_init);
++module_exit(gc_dvd_exit);
+diff --git a/drivers/block/gcn-dvd/request.c b/drivers/block/gcn-dvd/request.c
+new file mode 100644
+index 0000000..19203e3
+--- /dev/null
++++ b/drivers/block/gcn-dvd/request.c
+@@ -0,0 +1,70 @@
++/*
++ * drivers/block/gcn-dvd/request.c
++ *
++ * Nintendo GameCube DVD driver
++ * Copyright (C) 2005 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/types.h>
++#include <linux/errno.h>
++#include <linux/list.h>
++#include <linux/spinlock.h>
++#include "request.h"
++
++struct data_item
++{
++ struct list_head list;
++ struct gc_dvd_command data;
++};
++
++// define array of data items
++static struct data_item data[MAX_ITEMS];
++static spinlock_t lock;
++static struct list_head lfree;
++
++void gc_dvd_request_init(void)
++{
++ int i;
++
++ INIT_LIST_HEAD(&lfree);
++ spin_lock_init(&lock);
++
++ for (i=0;i<MAX_ITEMS;++i) {
++ list_add_tail(&data[i].list,&lfree);
++ }
++}
++
++int gc_dvd_request_get_data(struct gc_dvd_command **ppcmd)
++{
++ unsigned long flags;
++ struct data_item *pdi;
++ // get the first object and remove from the free list
++ spin_lock_irqsave(&lock,flags);
++ if (list_empty(&lfree)) {
++ spin_unlock_irqrestore(&lock,flags);
++ return -ENOMEM;
++ }
++ pdi = (struct data_item*)lfree.next;
++ list_del(&pdi->list);
++ spin_unlock_irqrestore(&lock,flags);
++ // return it
++ *ppcmd = &pdi->data;
++ return 0;
++}
++
++void gc_dvd_request_release_data(struct gc_dvd_command *pcmd)
++{
++ unsigned long flags;
++ struct data_item *pdi;
++ /* return the item */
++ spin_lock_irqsave(&lock,flags);
++ pdi = (struct data_item*)((u8*)pcmd - sizeof(struct list_head));
++ list_add_tail(&pdi->list,&lfree);
++ spin_unlock_irqrestore(&lock,flags);
++}
+diff --git a/drivers/block/gcn-dvd/request.h b/drivers/block/gcn-dvd/request.h
+new file mode 100644
+index 0000000..f0fdd0b
+--- /dev/null
++++ b/drivers/block/gcn-dvd/request.h
+@@ -0,0 +1,45 @@
++/*
++ * drivers/block/gcn-dvd/request.h
++ *
++ * Nintendo GameCube DVD driver
++ * Copyright (C) 2005 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 __request___
++#define __request___
++
++#define MAX_ITEMS 8
++
++enum gc_dvd_interrupt_status { is_still_running,
++ is_transfer_complete,
++ is_error,
++ is_break,
++ is_cover_closed,
++ is_cover_opened};
++
++struct gc_dvd_command
++{
++ struct list_head list;
++ u32 flags;
++ enum gc_dvd_interrupt_status int_status;
++ u32 r_DI_DICMDBUF0;
++ u32 r_DI_DICMDBUF1;
++ u32 r_DI_DICMDBUF2;
++ void *r_DI_DIMAR;
++ u32 r_DI_DILENGTH;
++ u32 r_DI_DICR;
++ void *param;
++ void (*completion_routine)(struct gc_dvd_command *cmd);
++};
++
++void gc_dvd_request_init(void);
++int gc_dvd_request_get_data(struct gc_dvd_command **ppcmd);
++void gc_dvd_request_release_data(struct gc_dvd_command *pcmd);
++
++#endif
+diff --git a/drivers/block/gcn-memcard.c b/drivers/block/gcn-memcard.c
+new file mode 100644
+index 0000000..e14e614
+--- /dev/null
++++ b/drivers/block/gcn-memcard.c
+@@ -0,0 +1,569 @@
++/*
++ * drivers/block/gcn-memcard.c
++ *
++ * Nintendo GameCube Memory Card block driver
++ * Copyright (C) 2004 The GameCube Linux Team
++ *
++ * Based on work from Torben Nielsen.
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++#define DEVICE_NAME "memcard"
++
++#include <linux/major.h>
++#include <linux/vmalloc.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/blkdev.h>
++#include <linux/delay.h>
++#include <linux/interrupt.h>
++#include <linux/fcntl.h> /* O_ACCMODE */
++#include <linux/hdreg.h> /* HDIO_GETGEO */
++
++#include <linux/exi.h>
++
++#include <asm/setup.h>
++#include <asm/bitops.h>
++#include <asm/pgtable.h>
++#include <asm/cacheflush.h>
++
++#define MEMCARD_MAX_UNITS 2
++
++static int major_num = 0;
++module_param(major_num, int, 0);
++
++#define TRUE (1)
++#define FALSE (0)
++
++static int curr_card_sector[MEMCARD_MAX_UNITS] = { -1, -1 };
++static int card_sector_mask[MEMCARD_MAX_UNITS] = { 0, 0 };
++static int current_device = -1;
++static spinlock_t memcard_lock = SPIN_LOCK_UNLOCKED;
++
++
++
++static struct block_device_operations memcard_fops;
++static struct gendisk *memcard_gendisk[MEMCARD_MAX_UNITS];
++
++static unsigned char *card_sector_buffer[MEMCARD_MAX_UNITS];
++
++#define MEMCARD_READ 1
++#define MEMCARD_WRITE 0
++#define ALLOW_WRITE
++#define CARD_SECTOR_SIZE 0x2000
++
++/*#define CARD_DBG printk*/
++#define CARD_DBG(format, arg...); { }
++
++/* MemCard commands originally by Costis */
++
++
++#define CARD_FILENAME 32
++#define CARD_MAXFILES 127
++#define CARD_MAXICONS 8
++#define CARD_READSIZE 512
++#define CARD_SECTORSIZE 8192
++#define CARD_SLOTA 0
++#define CARD_SLOTB 1
++#define CARD_SYSAREA 5
++#define CARD_WRITESIZE 128
++
++
++#define EXI_CONTROL_TYPE_READ 0
++#define EXI_CONTROL_TYPE_WRITE 1
++#define EXI_STATUS0 *(unsigned long*)0xCC006800
++
++#define EXI_DMABUF0 *(unsigned long*)0xCC006804
++#define EXI_DMALEN0 *(unsigned long*)0xCC006808
++#define EXI_DMACNT0 *(unsigned long*)0xCC00680C
++
++#define EXI_CONTROL_DMA 2
++#define EXI_CONTROL_ENABLE 1
++
++static int exi_probe(unsigned long channel)
++{
++ if (*(unsigned long *) (&EXI_STATUS0 + (channel * 5)) & 0x1000)
++ return 1;
++ else
++ return 0;
++}
++
++static unsigned long exi_retrieve_id(unsigned long channel,
++ unsigned long device)
++{
++ unsigned long tID;
++
++ if (exi_probe(channel)) {
++
++ /* Select the specified EXI channel and device. */
++ exi_select(channel, device, 0);
++
++ /* Send the EXI ID command (0x0000) */
++ tID = 0;
++ exi_write(channel, (unsigned char *) &tID, 2);
++ /* Read the actual ID data (4 bytes) */
++ exi_read(channel, (unsigned char *) &tID, 4);
++ /* Deselect the selected EXI device. */
++ exi_deselect(channel);
++
++ return tID;
++ } else {
++ return 0;
++ }
++}
++
++
++/*
++ Determines if a memcard is present in the given slot.
++*/
++
++static int card_is_present(unsigned long channel)
++{
++
++ unsigned long id;
++
++ id = exi_retrieve_id(channel, 0);
++
++ if (id & 0xffff0000 || id & 3)
++ return 0;
++
++ return id;
++}
++
++
++/**
++ Channel must be from 0 to 2.
++ Buffer must be aligned to a 32-bit offset.
++ Size must be a multiple of 32 bytes.
++ Type must be either EXI_CONTROL_TYPE_READ or EXI_CONTROL_TYPE_WRITE.
++*/
++static void exi_dma(unsigned long channel, unsigned char *abuffer,
++ unsigned long size, unsigned long type)
++{
++ /* EXI DMA Operation */
++ *(unsigned long *) (&EXI_DMABUF0 + (channel * 5)) =
++ (unsigned long) abuffer & 0x3FFFFE0;
++ *(unsigned long *) (&EXI_DMALEN0 + (channel * 5)) =
++ size & 0x3FFFFE0;
++ *(unsigned long *) (&EXI_DMACNT0 + (channel * 5)) =
++ EXI_CONTROL_ENABLE | EXI_CONTROL_DMA | (type << 2);
++
++ /* Wait until the EXI DMA operation has been completed. */
++ while (*(volatile unsigned long *) (&EXI_DMACNT0 + channel * 5) &
++ EXI_CONTROL_ENABLE);
++
++ return;
++}
++
++
++static unsigned char card_read_status(unsigned long channel)
++{
++ unsigned char cbuf[4];
++
++ /* Select the specified EXI channel and device. */
++ exi_select(channel, 0, 4);
++
++ /* Send the EXI ID command (0x83xx) */
++ cbuf[0] = 0x83; /* Command Byte */
++ cbuf[1] = 0x00;
++ exi_write(channel, cbuf, 2);
++ /* Read the actual ID data (2 bytes) */
++ exi_read(channel, cbuf, 1);
++
++ /* Deselect the selected EXI device. */
++ exi_deselect(channel);
++
++ return cbuf[0];
++}
++
++static void card_read_array(unsigned long channel, unsigned char *abuf,
++ unsigned long address, unsigned long size)
++{
++ int i;
++ unsigned char cbuf[4];
++ unsigned char *bbuf = abuf;
++
++ for (i = 0; i < size / CARD_READSIZE; i++) {
++
++ /* Check if the card is ready */
++ while (!(card_read_status(channel) & 1));
++
++ /* Select the specified EXI channel and device. */
++ exi_select(channel, 0, 4);
++
++ /* Send the EXI Sector Read command (0x52xxxxxx) */
++ cbuf[0] = 0x52; /* Command Byte */
++ cbuf[1] = (address >> 17) & 0x3F;
++ cbuf[2] = (address >> 9) & 0xFF;
++ cbuf[3] = (address >> 7) & 3;
++ exi_write(channel, cbuf, 4);
++
++ cbuf[0] = address & 0x7F;
++ exi_write(channel, cbuf, 1);
++
++ cbuf[0] = 0;
++ cbuf[1] = 0;
++ cbuf[2] = 0;
++ cbuf[3] = 0;
++ exi_write(channel, cbuf, 4);
++
++ exi_dma(channel, bbuf, CARD_READSIZE,
++ EXI_CONTROL_TYPE_READ);
++
++ /* Deselect the selected EXI device. */
++ exi_deselect(channel);
++
++ address += CARD_READSIZE;
++ bbuf += CARD_READSIZE;
++ }
++}
++
++static void card_sector_erase(unsigned long channel, unsigned long sector)
++{
++ unsigned char cbuf[3];
++
++ /* Check if the card is ready */
++ while (!(card_read_status(channel) & 1));
++
++ /* Select the specified EXI channel and device. */
++ exi_select(channel, 0, 4);
++
++ /* Send the EXI Sector Erase command (0xF1xxxx) */
++ cbuf[0] = 0xF1; // Command Byte
++ cbuf[1] = (sector >> 17) & 0x7F;
++ cbuf[2] = (sector >> 9) & 0xFF;
++ exi_write(channel, cbuf, 3);
++
++ /* Deselect the selected EXI device. */
++ exi_deselect(channel);
++
++ /* Wait till the erase is finished */
++ while (card_read_status(channel) & 0x8000);
++}
++
++static void card_sector_program(unsigned long channel, unsigned char *abuf,
++ unsigned long address, unsigned long size)
++{
++ int i;
++ unsigned char cbuf[4];
++ unsigned char *bbuf = abuf;
++
++ for (i = 0; i < size / CARD_WRITESIZE; i++) {
++
++ /* Check if the card is ready */
++ while (!(card_read_status(channel) & 1));
++
++ /* Select the specified EXI channel and device. */
++ exi_select(channel, 0, 4);
++
++ /* Send the EXI Sector Program command (0xF2xxxxxx) */
++ cbuf[0] = 0xF2; /* Command Byte */
++ cbuf[1] = (address >> 17) & 0x3F;
++ cbuf[2] = (address >> 9) & 0xFF;
++ cbuf[3] = (address >> 7) & 3;
++ exi_write(channel, cbuf, 4);
++
++ cbuf[0] = address & 0x7F;
++ exi_write(channel, cbuf, 1);
++
++ exi_dma(channel, bbuf, CARD_WRITESIZE,
++ EXI_CONTROL_TYPE_WRITE);
++
++ /* Deselect the selected EXI device. */
++ exi_deselect(channel);
++
++ /* Wait till the write is finished */
++ while (card_read_status(channel) & 0x8000);
++
++ address += CARD_WRITESIZE;
++ bbuf += CARD_WRITESIZE;
++ }
++}
++
++/**
++ Block device handling
++ */
++
++static int memcard_buffersize(int channel)
++{
++ return card_is_present(channel) << 17;
++}
++
++static void card_flush(int channel)
++{
++ int i, mask;
++ unsigned long start = curr_card_sector[channel] * CARD_SECTOR_SIZE;
++ CARD_DBG("card_flush(%d)\n", channel);
++ if (curr_card_sector[channel] == -1)
++ return;
++ CARD_DBG("Flush channel = %d mask = %x\n", channel,
++ card_sector_mask[channel]);
++ for (i = 0, mask = ~card_sector_mask[channel]; i < 16; i++) {
++ if (mask & 1) {
++ CARD_DBG("card_flush: read block %d\n", i);
++ }
++ }
++ CARD_DBG("card_flush: writing out ch = %d, start = %08lx\n",
++ channel, start);
++ flush_dcache_range((unsigned long) card_sector_buffer[channel],
++ (unsigned long) card_sector_buffer[channel] +
++ CARD_SECTOR_SIZE);
++
++ card_sector_erase(channel, start);
++ card_sector_program(channel, card_sector_buffer[channel], start,
++ CARD_SECTOR_SIZE);
++ card_sector_mask[channel] = 0;
++ curr_card_sector[channel] = -1;
++}
++
++static void do_memcard_request(request_queue_t * q)
++{
++ struct request *req;
++ blk_stop_queue(q);
++ spin_lock(&memcard_lock);
++
++ while ((req = elv_next_request(q)) != NULL) {
++ unsigned long start = req->sector << 9;
++ unsigned long len = req->current_nr_sectors << 9;
++ int channel = req->rq_disk->first_minor;
++
++ if (start + len > memcard_buffersize(channel)) {
++ printk(KERN_ERR DEVICE_NAME
++ ": bad access: block=%lu, count=%u\n",
++ (unsigned long) req->sector,
++ req->current_nr_sectors);
++ end_request(req, 0);
++ continue;
++ }
++
++ if (rq_data_dir(req) == READ) {
++ CARD_DBG
++ ("do_memcard_request: READ(%s,%lu,%lu), channel = %d\n",
++ req->rq_disk->disk_name,
++ (unsigned long) req->sector,
++ (unsigned long) req->current_nr_sectors,
++ channel);
++
++ card_flush(channel);
++ flush_dcache_range((unsigned long) req->buffer,
++ (unsigned long) req->buffer +
++ len);
++ card_read_array(channel, req->buffer, start, len);
++ invalidate_dcache_range((unsigned long) req->
++ buffer,
++ (unsigned long) req->
++ buffer + len);
++
++ } else {
++ int i;
++ CARD_DBG
++ ("do_memcard_request: WRITE channel = %d\n",
++ channel);
++ for (i = 0; i < req->current_nr_sectors; i++) {
++ int new_card_sector =
++ (req->sector + i) >> 4;
++ int card_sector_idx =
++ (req->sector + i) & 0xf;
++ if (new_card_sector !=
++ curr_card_sector[channel]) {
++ card_flush(channel);
++ curr_card_sector[channel] =
++ new_card_sector;
++ }
++ card_sector_mask[channel] |=
++ 1 << card_sector_idx;
++ CARD_DBG("update block %d, sector %d\n",
++ card_sector_idx, new_card_sector);
++ memcpy(card_sector_buffer[channel] +
++ (card_sector_idx << 9),
++ req->buffer + (i << 9), 1 << 9);
++ if (card_sector_idx == 0xF)
++ card_flush(channel);
++ }
++ }
++
++
++ end_request(req, 1);
++ }
++
++ spin_unlock(&memcard_lock);
++ blk_start_queue(q);
++
++}
++
++
++static int memcard_open(struct inode *inode, struct file *filp)
++{
++ CARD_DBG("MEMCARD Open device\n");
++
++ int device;
++ int rc = -ENOMEM;
++
++ device = iminor(inode);
++
++ if (current_device != -1 && current_device != device) {
++ rc = -EBUSY;
++ goto err_out;
++ }
++
++ if (memcard_buffersize(device) == 0) {
++ rc = -ENODEV;
++ goto err_out;
++ }
++
++ return 0;
++
++ err_out:
++ CARD_DBG("MEMCARD Open device Error %d\n", rc);
++
++ return rc;
++
++}
++
++static int memcard_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ CARD_DBG("MEMCARD IOCTL\n");
++
++ if (cmd == HDIO_GETGEO) {
++ long size;
++ struct hd_geometry geo;
++ /*
++ * get geometry: we have to fake one... trim the size to a
++ * multiple of 1024 (0.5M): tell we have 32 sectors, 32 heads,
++ * whatever cylinders.
++ */
++ size = memcard_buffersize(iminor(inode));
++ geo.heads = 32;
++ geo.sectors = 32;
++ geo.start = 0;
++ geo.cylinders = size / (geo.heads * geo.sectors);
++
++ if (copy_to_user((void *) arg, &geo, sizeof(geo)))
++ return -EFAULT;
++ return 0;
++ }
++
++ return -EINVAL;
++}
++
++static int memcard_release(struct inode *inode, struct file *filp)
++{
++ CARD_DBG("MEMCARD Close device\n");
++ card_flush(iminor(inode));
++ if (current_device == -1)
++ return 0;
++
++ return 0;
++}
++
++
++static int memcard_revalidate(struct gendisk *disk)
++{
++ CARD_DBG("MEMCARD Revalidate\n");
++ set_capacity(disk, memcard_buffersize(disk->first_minor) >> 9);
++ return 0;
++}
++
++static struct block_device_operations memcard_fops = {
++ .owner = THIS_MODULE,
++ .open = memcard_open,
++ .release = memcard_release,
++ .revalidate_disk = memcard_revalidate,
++ .ioctl = memcard_ioctl,
++};
++
++
++static struct request_queue *memcard_queue[MEMCARD_MAX_UNITS];
++
++int __init memcard_init(void)
++{
++ int ret;
++ int i;
++
++ CARD_DBG("MemCard Block Device Driver Init\n");
++
++ ret = -EBUSY;
++ major_num = register_blkdev(major_num, DEVICE_NAME);
++ if (major_num <= 0)
++ goto err;
++
++ ret = -ENOMEM;
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++) {
++ memcard_gendisk[i] = alloc_disk(1);
++ if (!memcard_gendisk[i])
++ goto out_disk;
++ }
++
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++) {
++ memcard_queue[i] =
++ blk_init_queue(do_memcard_request, &memcard_lock);
++ if (!memcard_queue[i])
++ goto out_queue;
++ }
++
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++) {
++ memcard_gendisk[i]->major = major_num;
++ memcard_gendisk[i]->first_minor = i;
++ memcard_gendisk[i]->fops = &memcard_fops;
++ sprintf(memcard_gendisk[i]->disk_name, "memcard%d", i);
++ strcpy(memcard_gendisk[i]->devfs_name,
++ memcard_gendisk[i]->disk_name);
++
++ memcard_gendisk[i]->queue = memcard_queue[i];
++ set_capacity(memcard_gendisk[i],
++ memcard_buffersize(i) >> 9);
++
++ add_disk(memcard_gendisk[i]);
++ }
++
++ spin_lock_init(&memcard_lock);
++
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++) {
++ card_sector_buffer[i] = kmalloc(CARD_SECTOR_SIZE, GFP_KERNEL);
++ }
++
++ return 0;
++
++ out_queue:
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++)
++ put_disk(memcard_gendisk[i]);
++ out_disk:
++ unregister_blkdev(major_num, DEVICE_NAME);
++ err:
++ return ret;
++}
++
++
++void __exit memcard_cleanup(void)
++{
++ int i;
++ blk_unregister_region(MKDEV(major_num, 0), 256);
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++) {
++ del_gendisk(memcard_gendisk[i]);
++ put_disk(memcard_gendisk[i]);
++ }
++
++ if (unregister_blkdev(major_num, DEVICE_NAME) != 0)
++ printk(KERN_ERR DEVICE_NAME
++ ": unregister of device failed\n");
++
++ for (i = 0; i < MEMCARD_MAX_UNITS; i++) {
++ blk_cleanup_queue(memcard_queue[i]);
++ kfree(card_sector_buffer[i]);
++ }
++
++
++ CARD_DBG("Removed gc_memcard\n");
++ return;
++}
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Torben Nielsen");
++module_init(memcard_init);
++module_exit(memcard_cleanup);
+diff --git a/drivers/block/gcn-sd.c b/drivers/block/gcn-sd.c
+new file mode 100644
+index 0000000..be489bc
+--- /dev/null
++++ b/drivers/block/gcn-sd.c
+@@ -0,0 +1,1709 @@
++/*
++ * drivers/block/gcn-sd.c
++ *
++ * MMC/SD card block driver for the Nintendo GameCube/Wii
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004,2005 Rob Reylink
++ * Copyright (C) 2005 Todd Jeffreys
++ * Copyright (C) 2005,2006,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 is a block device driver for the Nintendo SD Card Adapter (DOL-019)
++ * and compatible hardware.
++ * The driver has been tested with SPI-enabled MMC cards and SD cards.
++ *
++ * The following table shows the device major and minors needed to access
++ * MMC/SD cards:
++ *
++ * +------+-------------+-------+-------+
++ * | Slot | Target | Major | Minor |
++ * +======+=============+=======+=======+
++ * | A | disk | 61 | 0 |
++ * | A | partition 1 | 61 | 1 |
++ * | A | partition 2 | 61 | 2 |
++ * | A | partition 3 | 61 | 3 |
++ * | A | partition 4 | 61 | 4 |
++ * | A | partition 5 | 61 | 5 |
++ * | A | partition 6 | 61 | 6 |
++ * | A | partition 7 | 61 | 7 |
++ * +------+-------------+-------+-------+
++ * | B | disk | 61 | 8 |
++ * | B | partition 1 | 61 | 9 |
++ * | B | partition 2 | 61 | 10 |
++ * | B | partition 3 | 61 | 11 |
++ * | B | partition 4 | 61 | 12 |
++ * | B | partition 5 | 61 | 13 |
++ * | B | partition 6 | 61 | 14 |
++ * | B | partition 7 | 61 | 15 |
++ * +------+-------------+-------+-------+
++ *
++ * For example, run "mknod /dev/gcnsdb1 b 61 9" to create a device file
++ * to access the 1st partition on the card inserted in memcard slot B.
++ *
++ */
++
++#define SD_DEBUG
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/kthread.h>
++#include <linux/major.h>
++#include <linux/blkdev.h>
++#include <linux/hdreg.h>
++#include <linux/crc-ccitt.h>
++
++/*
++ * The existing Linux MMC layer does not support SPI operation yet.
++ * Anyway, we try to recycle here some common code.
++ */
++#include <linux/mmc/host.h>
++#include <linux/mmc/card.h>
++#include <linux/mmc/mmc.h>
++#include <linux/mmc/sd.h>
++
++#include <linux/exi.h>
++
++#define DRV_MODULE_NAME "gcn-sd"
++#define DRV_DESCRIPTION "MMC/SD card block driver for the Nintendo GameCube/Wii"
++#define DRV_AUTHOR "Rob Reylink, " \
++ "Todd Jeffreys, " \
++ "Albert Herranz"
++
++static char sd_driver_version[] = "4.1i";
++
++#define sd_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++#ifdef SD_DEBUG
++# define DBG(fmt, args...) \
++ printk(KERN_ERR "%s: " fmt, __func__ , ## args)
++#else
++# define DBG(fmt, args...)
++#endif
++
++
++/*
++ *
++ * EXI related definitions.
++ */
++#define SD_SLOTA_CHANNEL 0 /* EXI0xxx */
++#define SD_SLOTA_DEVICE 0 /* chip select, EXI0CSB0 */
++
++#define SD_SLOTB_CHANNEL 1 /* EXI1xxx */
++#define SD_SLOTB_DEVICE 0 /* chip select, EXI1CSB0 */
++
++#define SD_SPI_CLK 16000000
++#define SD_SPI_CLK_IDX EXI_CLK_16MHZ
++
++
++/*
++ *
++ * MMC/SD related definitions.
++ */
++
++/* cycles in 8 clock units */
++#define SD_IDLE_CYCLES 80
++#define SD_FINISH_CYCLES 8
++
++/* several times in 8 clock units */
++#define MMC_SPI_N_CR 8 /* card response time */
++
++/* data start and stop tokens */
++#define MMC_SPI_TOKEN_START_SINGLE_BLOCK_READ 0xfe
++#define MMC_SPI_TOKEN_START_MULTIPLE_BLOCK_READ 0xfe
++#define MMC_SPI_TOKEN_START_SINGLE_BLOCK_WRITE 0xfe
++#define MMC_SPI_TOKEN_START_MULTIPLE_BLOCK_WRITE 0xfc
++#define MMC_SPI_TOKEN_STOP_MULTIPLE_BLOCK_WRITE 0xfd
++
++/* data response */
++#define DR_SPI_MASK 0x1f
++#define DR_SPI_DATA_ACCEPTED 0x05
++#define DR_SPI_DATA_REJECTED_CRC_ERROR 0x0b
++#define DR_SPI_DATA_REJECTED_WRITE_ERROR 0x0d
++
++/* this is still a missing command in the current MMC framework ... */
++#define MMC_READ_OCR 58
++
++/*
++ * OCR Bit positions to 10s of Vdd mV.
++ */
++static const unsigned short mmc_ocr_bit_to_vdd[] = {
++ 150, 155, 160, 165, 170, 180, 190, 200,
++ 210, 220, 230, 240, 250, 260, 270, 280,
++ 290, 300, 310, 320, 330, 340, 350, 360
++};
++
++static const unsigned int tran_exp[] = {
++ 10000, 100000, 1000000, 10000000,
++ 0, 0, 0, 0
++};
++
++static const unsigned char tran_mant[] = {
++ 0, 10, 12, 13, 15, 20, 25, 30,
++ 35, 40, 45, 50, 55, 60, 70, 80,
++};
++
++static const unsigned int tacc_exp[] = {
++ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
++};
++
++static const unsigned int tacc_mant[] = {
++ 0, 10, 12, 13, 15, 20, 25, 30,
++ 35, 40, 45, 50, 55, 60, 70, 80,
++};
++
++/*
++ *
++ * Driver settings.
++ */
++#define MMC_SHIFT 3 /* 8 partitions */
++
++#define SD_MAJOR 61
++#define SD_NAME "gcnsd"
++
++#define KERNEL_SECTOR_SHIFT 9
++#define KERNEL_SECTOR_SIZE (1 << KERNEL_SECTOR_SHIFT) /*512 */
++
++enum {
++ __SD_MEDIA_CHANGED = 0,
++ __SD_BAD_CARD,
++};
++
++
++/*
++ * Raw MMC/SD command.
++ */
++struct sd_command {
++ u8 cmd;
++ u32 arg;
++ u8 crc;
++} __attribute__ ((__packed__)); /* do not add padding, please */
++
++/*
++ * MMC/SD host.
++ *
++ * We have one host for each memory card slot. And a host can only drive a
++ * single card each time.
++ */
++struct sd_host {
++ spinlock_t lock;
++
++ int refcnt;
++ unsigned long flags;
++#define SD_MEDIA_CHANGED (1<<__SD_MEDIA_CHANGED)
++#define SD_BAD_CARD (1<<__SD_BAD_CARD)
++
++ /* card related info */
++ struct mmc_card card;
++
++ /* timeouts in 8 clock cycles */
++ unsigned long read_timeout;
++ unsigned long write_timeout;
++
++ /* operations condition register */
++ u32 ocr_avail; /* just 3.3V for the GameCube */
++ u32 ocr;
++
++ /* last card response */
++ u8 resp;
++
++ /* frequency */
++ unsigned int clock;
++ u8 exi_clock;
++
++ /* command buffer */
++ struct sd_command cmd;
++
++ spinlock_t queue_lock;
++ struct request_queue *queue;
++
++ struct gendisk *disk;
++
++ struct task_struct *io_thread;
++ struct mutex io_mutex;
++
++ struct exi_device *exi_device;
++};
++
++static void sd_kill(struct sd_host *host);
++
++
++static void sd_card_set_bad(struct sd_host *host)
++{
++ set_bit(__SD_BAD_CARD, &host->flags);
++}
++
++static int sd_card_is_bad(struct sd_host *host)
++{
++ return test_bit(__SD_BAD_CARD, &host->flags);
++}
++
++/*
++ *
++ * MMC/SD data structures manipulation.
++ */
++
++/*
++ * FIXME: use a faster method (table)
++ * (the in-kernel crc 16 (ccitt crc) tables seem not compatible with us)
++ */
++static u16 crc_xmodem_update(u16 crc, u8 data)
++{
++ int i;
++
++ crc = crc ^ ((u16) data << 8);
++
++ for (i = 0; i < 8; i++) {
++ if (crc & 0x8000)
++ crc = (crc << 1) ^ 0x1021;
++ else
++ crc <<= 1;
++ }
++
++ return crc;
++}
++
++#define UNSTUFF_BITS(resp, start, size) \
++ ({ \
++ const int __size = size; \
++ const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
++ const int __off = 3 - ((start) / 32); \
++ const int __shft = (start) & 31; \
++ u32 __res; \
++ \
++ __res = resp[__off] >> __shft; \
++ if (__size + __shft > 32) \
++ __res |= resp[__off-1] << ((32 - __shft) % 32); \
++ __res & __mask; \
++ })
++
++/*
++ * Given the decoded CSD structure, decode the raw CID to our CID structure.
++ */
++static void mmc_decode_cid(struct mmc_card *card)
++{
++ u32 *resp = card->raw_cid;
++
++ memset(&card->cid, 0, sizeof(struct mmc_cid));
++
++ if (mmc_card_sd(card)) {
++ card->cid.manfid = UNSTUFF_BITS(resp, 120, 8);
++ card->cid.oemid = UNSTUFF_BITS(resp, 104, 16);
++ card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
++ card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
++ card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
++ card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
++ card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
++ card->cid.hwrev = UNSTUFF_BITS(resp, 60, 4);
++ card->cid.fwrev = UNSTUFF_BITS(resp, 56, 4);
++ card->cid.serial = UNSTUFF_BITS(resp, 24, 32);
++ card->cid.year = UNSTUFF_BITS(resp, 12, 8);
++ card->cid.month = UNSTUFF_BITS(resp, 8, 4);
++ card->cid.year += 2000;
++ } else {
++ /*
++ * The selection of the format here is guesswork based upon
++ * information people have sent to date.
++ */
++ switch (card->csd.mmca_vsn) {
++ case 0: /* MMC v1.0 - v1.2 */
++ case 1: /* MMC v1.4 */
++ card->cid.manfid = UNSTUFF_BITS(resp, 104, 24);
++ card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
++ card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
++ card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
++ card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
++ card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
++ card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 8);
++ card->cid.prod_name[6] = UNSTUFF_BITS(resp, 48, 8);
++ card->cid.hwrev = UNSTUFF_BITS(resp, 44, 4);
++ card->cid.fwrev = UNSTUFF_BITS(resp, 40, 4);
++ card->cid.serial = UNSTUFF_BITS(resp, 16, 24);
++ card->cid.month = UNSTUFF_BITS(resp, 12, 4);
++ card->cid.year = UNSTUFF_BITS(resp, 8, 4);
++ card->cid.year += 1997;
++ break;
++ case 2: /* MMC v2.0 - v2.2 */
++ case 3: /* MMC v3.1 - v3.3 */
++ card->cid.manfid = UNSTUFF_BITS(resp, 120, 8);
++ card->cid.oemid = UNSTUFF_BITS(resp, 104, 16);
++ card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
++ card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
++ card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
++ card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
++ card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
++ card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 8);
++ card->cid.serial = UNSTUFF_BITS(resp, 16, 32);
++ card->cid.month = UNSTUFF_BITS(resp, 12, 4);
++ card->cid.year = UNSTUFF_BITS(resp, 8, 4);
++ card->cid.year += 1997;
++ break;
++ default:
++ sd_printk(KERN_ERR, "card has unknown MMCA"
++ " version %d\n", card->csd.mmca_vsn);
++ break;
++ }
++ }
++}
++
++/*
++ * Given a 128-bit response, decode to our card CSD structure.
++ */
++static void mmc_decode_csd(struct mmc_card *card)
++{
++ struct mmc_csd *csd = &card->csd;
++ unsigned int e, m, csd_struct;
++ u32 *resp = card->raw_csd;
++
++ /*
++ * We only understand CSD structure v1.0, v1.1 and v2.
++ * v2 has extra information in bits 15, 11 and 10.
++ */
++ csd_struct = UNSTUFF_BITS(resp, 126, 2);
++ if (csd_struct != 0 && csd_struct != 1 && csd_struct != 2) {
++ sd_printk(KERN_ERR, "unrecognised CSD structure"
++ " version %d\n", csd_struct);
++ return;
++ }
++
++ csd->mmca_vsn = UNSTUFF_BITS(resp, 122, 4);
++
++ /* TAAC */
++ m = UNSTUFF_BITS(resp, 115, 4);
++ e = UNSTUFF_BITS(resp, 112, 3);
++ csd->tacc_ns = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
++
++ /* NSAC */
++ csd->tacc_clks = UNSTUFF_BITS(resp, 104, 8) * 100;
++
++ /* TRAN_SPEED */
++ m = UNSTUFF_BITS(resp, 99, 4);
++ e = UNSTUFF_BITS(resp, 96, 3);
++ csd->max_dtr = tran_exp[e] * tran_mant[m];
++
++ /* CCC */
++ csd->cmdclass = UNSTUFF_BITS(resp, 84, 12);
++
++ /* READ_BL_LEN */
++ csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
++
++ /* C_SIZE */
++ m = UNSTUFF_BITS(resp, 62, 12);
++
++ /* C_SIZE_MULT */
++ e = UNSTUFF_BITS(resp, 47, 3);
++
++ csd->capacity = (1 + m) << (e + 2); /* in card blocks */
++}
++
++#if 0
++static void sd_print_cid(struct mmc_cid *cid)
++{
++ sd_printk(KERN_INFO,
++ "manfid = %d\n"
++ "oemid = %d\n"
++ "prod_name = %s\n"
++ "hwrev = %d\n"
++ "fwrev = %d\n"
++ "serial = %08x\n"
++ "year = %d\n"
++ "month = %d\n",
++ cid->manfid,
++ cid->oemid,
++ cid->prod_name,
++ cid->hwrev, cid->fwrev, cid->serial, cid->year, cid->month);
++}
++#endif
++
++/* */
++static inline unsigned int ms_to_cycles(unsigned int ms, unsigned int clock)
++{
++ return ms * (clock / 1000);
++}
++
++/* */
++static unsigned int sd_set_clock(struct sd_host *host, unsigned int clock)
++{
++ if (clock >= 32000000) {
++ host->clock = 32000000;
++ host->exi_clock = EXI_CLK_32MHZ;
++ } else if (clock >= 16000000) {
++ host->clock = 16000000;
++ host->exi_clock = EXI_CLK_16MHZ;
++ } else if (clock >= 8000000) {
++ host->clock = 8000000;
++ host->exi_clock = EXI_CLK_8MHZ;
++ } else if (clock >= 4000000) {
++ host->clock = 4000000;
++ host->exi_clock = EXI_CLK_4MHZ;
++ } else if (clock >= 2000000) {
++ host->clock = 2000000;
++ host->exi_clock = EXI_CLK_2MHZ;
++ } else {
++ host->clock = 1000000;
++ host->exi_clock = EXI_CLK_1MHZ;
++ }
++ return host->clock;
++}
++
++/* */
++static void sd_calc_timeouts(struct sd_host *host)
++{
++ /*
++ * FIXME: calculate timeouts from card information
++ * (use safe defaults for now)
++ */
++ host->read_timeout = ms_to_cycles(100, host->clock);
++ host->write_timeout = ms_to_cycles(250, host->clock);
++}
++
++/*
++ *
++ * SPI I/O support routines, including some handy SPI to EXI language
++ * translations.
++ */
++
++/* */
++static inline void spi_cs_low(struct sd_host *host)
++{
++ exi_dev_take(host->exi_device);
++ exi_dev_select(host->exi_device);
++}
++
++/* */
++static inline void spi_cs_high(struct sd_host *host)
++{
++ exi_dev_deselect(host->exi_device);
++ exi_dev_give(host->exi_device);
++}
++
++/* */
++static inline void spi_write(struct sd_host *host, void *data, size_t len)
++{
++ exi_dev_write(host->exi_device, data, len);
++}
++
++/* */
++static inline void spi_read(struct sd_host *host, void *data, size_t len)
++{
++ /*
++ * Houston, we have a problem.
++ *
++ * The EXI hardware implementation seems to use a shift register which
++ * outputs data from the MSB to the MOSI line and inputs data from
++ * the MISO line into the LSB.
++ * When a read operation is performed, data from the MISO line
++ * is entered into the shift register LSB as expected. But also the
++ * data already present in the shift register is sent out through the
++ * MOSI line from the MSB.
++ * This is in fact the "feature" that enabled tmbinc to dump the IPL.
++ *
++ * When interfacing with SD cards, this causes us a serious problem.
++ *
++ * We are required to send all ones (1s) while reading data from
++ * the SD card. Otherwise, the card can interpret the data sent as
++ * commands (if they start with the bit pattern 01 for example).
++ *
++ * If we use the EXI immediate mode transfer, we can workaround the
++ * situation by writing all 1s to the DATA register before reading
++ * (this is indeed automatically done by the EXI layer).
++ * But we simply can't do that when using EXI DMA transfers (these
++ * kind of transfers do not allow bidirectional operation).
++ *
++ * Given that no EXI DMA read transfers seem reliable, we fallback
++ * to the "interrupt-driven" immediate mode of the EXI layer.
++ * This will help reducing CPU monopolization on large reads.
++ *
++ */
++ exi_dev_transfer(host->exi_device, data, len, EXI_OP_READ, EXI_CMD_IDI);
++}
++
++/* cycles are expressed in 8 clock cycles */
++static void spi_burn_cycles(struct sd_host *host, int cycles)
++{
++ u8 d;
++
++ while (cycles-- > 0) {
++ d = 0xff;
++ spi_write(host, &d, sizeof(d));
++ }
++}
++
++/* cycles are expressed in 8 clock cycles */
++static int spi_wait_for_resp(struct sd_host *host,
++ u8 resp, u8 resp_mask, unsigned long cycles)
++{
++ u8 data;
++
++ while (cycles-- > 0) {
++ spi_read(host, &data, sizeof(data));
++ if ((data & resp_mask) == resp) {
++ host->resp = data;
++ return data;
++ }
++ }
++ return -ENODATA;
++}
++
++/*
++ *
++ */
++static int sd_read_data(struct sd_host *host, void *data, size_t len, int token)
++{
++ int retval = 0;
++
++ if (token) {
++ retval = spi_wait_for_resp(host, token, 0xff,
++ host->read_timeout);
++ if (retval < 0)
++ goto out;
++ }
++ spi_read(host, data, len);
++ retval = 0;
++
++out:
++ return retval;
++}
++
++/*
++ *
++ */
++static int sd_write_data(struct sd_host *host, void *data, size_t len,
++ int token)
++{
++ u16 crc;
++ u8 t, *d;
++ size_t l;
++ int retval = 0;
++
++ /* FIXME, rewrite this a bit */
++ {
++ crc = 0;
++ d = data;
++ l = len;
++
++ while (l-- > 0)
++ crc = crc_xmodem_update(crc, *d++);
++ }
++
++ /* send the write block token */
++ t = token;
++ spi_write(host, &t, sizeof(t));
++
++ /* send the data */
++ spi_write(host, data, len);
++
++ /* send the crc */
++ spi_write(host, &crc, sizeof(crc));
++
++ /* get the card data response */
++ retval = spi_wait_for_resp(host, 0x01, 0x11, host->write_timeout);
++ if (retval < 0)
++ goto out;
++ if ((retval & DR_SPI_MASK) != DR_SPI_DATA_ACCEPTED) {
++ DBG("data response=%02x\n", retval);
++ retval = -EIO;
++ goto out;
++ }
++
++ /* wait for the busy signal to clear */
++ retval = spi_wait_for_resp(host, 0xff, 0xff, host->write_timeout);
++ if (retval < 0)
++ goto out;
++
++ retval = 0;
++
++out:
++ return retval;
++}
++
++/*
++ *
++ * MMC/SD command transactions related routines.
++ */
++
++/* */
++static inline void sd_cmd(struct sd_command *cmd, u8 opcode, u32 arg)
++{
++ cmd->cmd = 0x40 | opcode;
++ cmd->arg = arg;
++ cmd->crc = 0x01; /* FIXME, crc is not currently used */
++}
++
++/* */
++static inline void sd_cmd_go_idle_state(struct sd_command *cmd)
++{
++ cmd->cmd = 0x40;
++ cmd->arg = 0;
++ cmd->crc = 0x95;
++}
++
++/* */
++static inline void sd_debug_print_cmd(struct sd_command *cmd)
++{
++ DBG("cmd = %d, arg = %08x, crc = %02x\n",
++ cmd->cmd & ~0x40, cmd->arg, cmd->crc);
++}
++
++/*
++ *
++ */
++static int sd_start_command(struct sd_host *host, struct sd_command *cmd)
++{
++ int retval = 0;
++
++ /* select the card by driving CS low */
++ spi_cs_low(host);
++
++ /* send the command through the MOSI line */
++ spi_write(host, cmd, sizeof(*cmd));
++
++ /*
++ * Wait for the card response.
++ * Card responses come in the MISO line and have the most significant
++ * bit cleared.
++ */
++ retval = spi_wait_for_resp(host, 0x00, 0x80, MMC_SPI_N_CR);
++
++ if (retval > 0 && !(retval & 0x01) && cmd->cmd != 0x40)
++ DBG("command = %d, response = 0x%02x\n", cmd->cmd & ~0x40,
++ retval);
++
++ return retval;
++}
++
++/*
++ *
++ */
++static void sd_end_command(struct sd_host *host)
++{
++ /* wait 8 clock cycles as dictated by the specification */
++ spi_burn_cycles(host, SD_FINISH_CYCLES);
++
++ /* deselect the card by driving CS high */
++ spi_cs_high(host);
++}
++
++/*
++ *
++ */
++static int sd_run_no_data_command(struct sd_host *host, struct sd_command *cmd)
++{
++ int retval;
++
++ /* send command, wait for response, and burn extra cycles */
++ retval = sd_start_command(host, cmd);
++ sd_end_command(host);
++
++ return retval;
++}
++
++/*
++ *
++ */
++static int sd_generic_read(struct sd_host *host,
++ u8 opcode, u32 arg,
++ void *data, size_t len, int token)
++{
++ struct sd_command *cmd = &host->cmd;
++ u16 crc, calc_crc = 0xffff;
++ u8 *d;
++ size_t l;
++ int retval;
++
++ /* build raw command */
++ sd_cmd(cmd, opcode, arg);
++
++ /* select card, send command and wait for response */
++ retval = sd_start_command(host, cmd);
++ if (retval < 0)
++ goto out;
++ if (retval != 0x00) {
++ retval = -EIO;
++ goto out;
++ }
++
++ /* wait for read token, then read data */
++ retval = sd_read_data(host, data, len, token);
++ if (retval < 0)
++ goto out;
++
++ /* read trailing crc */
++ spi_read(host, &crc, sizeof(crc));
++
++ retval = 0;
++
++ /* FIXME, rewrite this a bit */
++ {
++ calc_crc = 0;
++ d = data;
++ l = len;
++
++ while (l-- > 0)
++ calc_crc = crc_xmodem_update(calc_crc, *d++);
++
++ if (calc_crc != crc)
++ retval = -EIO;
++ }
++
++out:
++ /* burn extra cycles and deselect card */
++ sd_end_command(host);
++
++ if (retval < 0) {
++ DBG("read, offset=%d, len=%d\n", arg, len);
++ DBG("crc=%04x, calc_crc=%04x, %s\n", crc, calc_crc,
++ (retval < 0) ? "failed" : "ok");
++ }
++
++ return retval;
++}
++
++/*
++ *
++ */
++static int sd_generic_write(struct sd_host *host,
++ u8 opcode, u32 arg,
++ void *data, size_t len, int token)
++{
++ struct sd_command *cmd = &host->cmd;
++ int retval;
++
++ /* build raw command */
++ sd_cmd(cmd, opcode, arg);
++
++ /* select card, send command and wait for response */
++ retval = sd_start_command(host, cmd);
++ if (retval < 0)
++ goto out;
++ if (retval != 0x00) {
++ retval = -EIO;
++ goto out;
++ }
++
++ /* send data token, data and crc, get data response */
++ retval = sd_write_data(host, data, len, token);
++ if (retval < 0)
++ goto out;
++
++ retval = 0;
++
++out:
++ /* burn extra cycles and deselect card */
++ sd_end_command(host);
++
++ if (retval < 0)
++ DBG("write, offset=%d, len=%d\n", arg, len);
++
++ return retval;
++}
++
++/*
++ *
++ */
++static int sd_read_ocr(struct sd_host *host)
++{
++ struct sd_command *cmd = &host->cmd;
++ int retval;
++
++ memset(&host->ocr, 0, sizeof(host->ocr));
++
++ sd_cmd(cmd, MMC_READ_OCR, 0);
++
++ /* select card, send command and wait for response */
++ retval = sd_start_command(host, cmd);
++ if (retval < 0)
++ goto out;
++
++ /* the OCR contents come immediately after the card response */
++ spi_read(host, &host->ocr, sizeof(host->ocr));
++ retval = 0;
++
++out:
++ /* burn extra cycles and deselect card */
++ sd_end_command(host);
++ return retval;
++}
++
++/*
++ *
++ */
++static inline int sd_read_csd(struct sd_host *host)
++{
++ memset(&host->card.raw_csd, 0, sizeof(host->card.raw_csd));
++ return sd_generic_read(host, MMC_SEND_CSD, 0,
++ &host->card.raw_csd,
++ sizeof(host->card.raw_csd),
++ MMC_SPI_TOKEN_START_SINGLE_BLOCK_READ);
++}
++
++/*
++ *
++ */
++static inline int sd_read_cid(struct sd_host *host)
++{
++ memset(&host->card.raw_cid, 0, sizeof(host->card.raw_cid));
++ return sd_generic_read(host, MMC_SEND_CID, 0,
++ &host->card.raw_cid,
++ sizeof(host->card.raw_cid),
++ MMC_SPI_TOKEN_START_SINGLE_BLOCK_READ);
++}
++
++/*
++ *
++ */
++static inline int sd_read_single_block(struct sd_host *host,
++ unsigned long start,
++ void *data, size_t len)
++{
++ int retval;
++ int attempts = 3;
++
++ if (test_bit(__SD_MEDIA_CHANGED, &host->flags))
++ attempts = 1;
++
++ while (attempts > 0) {
++ retval = sd_generic_read(host, MMC_READ_SINGLE_BLOCK, start,
++ data, len,
++ MMC_SPI_TOKEN_START_SINGLE_BLOCK_READ);
++ if (retval >= 0)
++ break;
++ attempts--;
++ DBG("start=%lu, data=%p, len=%d, retval = %d\n", start, data,
++ len, retval);
++ }
++ return retval;
++}
++
++/*
++ *
++ */
++static inline int sd_write_single_block(struct sd_host *host,
++ unsigned long start,
++ void *data, size_t len)
++{
++ int retval;
++
++ retval = sd_generic_write(host, MMC_WRITE_BLOCK, start,
++ data, len,
++ MMC_SPI_TOKEN_START_SINGLE_BLOCK_WRITE);
++ if (retval < 0)
++ DBG("start=%lu, data=%p, len=%d, retval = %d\n", start, data,
++ len, retval);
++
++ return retval;
++}
++
++/*
++ *
++ */
++static int sd_reset_sequence(struct sd_host *host)
++{
++ struct sd_command *cmd = &host->cmd;
++ u8 d;
++ int i;
++ int retval = 0;
++
++ host->card.state = 0;
++
++ /*
++ * Wait at least 80 dummy clock cycles with the card deselected
++ * and with the MOSI line continuously high.
++ */
++ exi_dev_take(host->exi_device);
++ exi_dev_deselect(host->exi_device);
++ for (i = 0; i < SD_IDLE_CYCLES; i++) {
++ d = 0xff;
++ exi_dev_write(host->exi_device, &d, sizeof(d));
++ }
++ exi_dev_give(host->exi_device);
++
++ /*
++ * Send a CMD0, card must ack with "idle state" (0x01).
++ * This puts the card into SPI mode and soft resets it.
++ * CRC checking is disabled by default.
++ */
++ for (i = 0; i < 255; i++) {
++ /* CMD0 */
++ sd_cmd_go_idle_state(cmd);
++ retval = sd_run_no_data_command(host, cmd);
++ if (retval < 0) {
++ retval = -ENODEV;
++ goto out;
++ }
++ if (retval == R1_SPI_IDLE)
++ break;
++ }
++ if (retval != R1_SPI_IDLE) {
++ retval = -ENODEV;
++ goto out;
++ }
++
++ /*
++ * Send a ACMD41 to activate card initialization process.
++ * SD card must ack with "ok" (0x00).
++ * MMC card will report "invalid command" (0x04).
++ */
++ for (i = 0; i < 0xffff; i++) {
++ /* ACMD41 = CMD55 + CMD41 */
++ sd_cmd(cmd, MMC_APP_CMD, 0);
++ retval = sd_run_no_data_command(host, cmd);
++ if (retval < 0) {
++ retval = -ENODEV;
++ goto out;
++ }
++
++ sd_cmd(cmd, SD_APP_OP_COND, 0);
++ retval = sd_run_no_data_command(host, cmd);
++ if (retval < 0) {
++ retval = -ENODEV;
++ goto out;
++ }
++ if (retval == 0x00) {
++ /* we found a SD card */
++ mmc_card_set_present(&host->card);
++ host->card.type = MMC_TYPE_SD;
++ break;
++ }
++ if ((retval & R1_SPI_ILLEGAL_COMMAND)) {
++ /* this looks like a MMC card */
++ break;
++ }
++ }
++
++ /*
++ * MMC cards require CMD1 to activate card initialization process.
++ * MMC card must ack with "ok" (0x00)
++ */
++ if (!mmc_card_sd(&host->card)) {
++ for (i = 0; i < 0xffff; i++) {
++ sd_cmd(cmd, MMC_SEND_OP_COND, 0);
++ retval = sd_run_no_data_command(host, cmd);
++ if (retval < 0) {
++ retval = -ENODEV;
++ goto out;
++ }
++ if (retval == 0x00) {
++ /* we found a MMC card */
++ mmc_card_set_present(&host->card);
++ break;
++ }
++ }
++ if (retval != 0x00) {
++ DBG("MMC card, bad, retval=%02x\n", retval);
++ sd_card_set_bad(host);
++ }
++ }
++
++out:
++ return retval;
++}
++
++/*
++ *
++ */
++static int sd_welcome_card(struct sd_host *host)
++{
++ int retval;
++
++ /* soft reset the card */
++ retval = sd_reset_sequence(host);
++ if (retval < 0 || sd_card_is_bad(host))
++ goto out;
++
++ /* read Operating Conditions Register */
++ retval = sd_read_ocr(host);
++ if (retval < 0)
++ goto err_bad_card;
++
++ /* refuse to drive cards reporting voltage ranges out of scope */
++ if (!(host->ocr & host->ocr_avail)) {
++ sd_printk(KERN_WARNING, "reported OCR (%08x)"
++ " indicates that it is not safe to use this"
++ " card with a GameCube\n", host->ocr);
++ retval = -ENODEV;
++ goto err_bad_card;
++ }
++
++ /* read and decode the Card Specific Data */
++ retval = sd_read_csd(host);
++ if (retval < 0)
++ goto err_bad_card;
++ mmc_decode_csd(&host->card);
++
++ /* calculate some card access related timeouts */
++ sd_calc_timeouts(host);
++
++ /* read and decode the Card Identification Data */
++ retval = sd_read_cid(host);
++ if (retval < 0)
++ goto err_bad_card;
++ mmc_decode_cid(&host->card);
++
++ sd_printk(KERN_INFO, "slot%d: descr \"%s\", size %luk, block %ub,"
++ " serial %08x\n",
++ to_channel(exi_get_exi_channel(host->exi_device)),
++ host->card.cid.prod_name,
++ (unsigned long)((host->card.csd.capacity *
++ (1 << host->card.csd.read_blkbits)) / 1024),
++ 1 << host->card.csd.read_blkbits,
++ host->card.cid.serial);
++
++ retval = 0;
++ goto out;
++
++err_bad_card:
++ sd_card_set_bad(host);
++out:
++ return retval;
++}
++
++/*
++ *
++ * Block layer.
++ */
++
++/*
++ * Performs a read request.
++ */
++static int sd_read_request(struct sd_host *host, struct request *req)
++{
++ int i;
++ unsigned long nr_blocks; /* in card blocks */
++ size_t block_len; /* in bytes */
++ unsigned long start;
++ void *buf = req->buffer;
++ int retval;
++
++ /*
++ * It seems that some cards do not accept single block reads for the
++ * read block length reported by the card.
++ * For now, we perform only 512 byte single block reads.
++ */
++
++ start = req->sector << KERNEL_SECTOR_SHIFT;
++#if 0
++ nr_blocks = req->current_nr_sectors >>
++ (host->card.csd.read_blkbits - KERNEL_SECTOR_SHIFT);
++ block_len = 1 << host->card.csd.read_blkbits;
++#else
++ nr_blocks = req->current_nr_sectors;
++ block_len = 1 << KERNEL_SECTOR_SHIFT;
++#endif
++
++ for (i = 0; i < nr_blocks; i++) {
++ retval = sd_read_single_block(host, start, buf, block_len);
++ if (retval < 0)
++ break;
++
++ start += block_len;
++ buf += block_len;
++ }
++
++ /* number of kernel sectors transferred */
++#if 0
++ retval = i << (host->card.csd.read_blkbits - KERNEL_SECTOR_SHIFT);
++#else
++ retval = i;
++#endif
++
++ return retval;
++}
++
++/*
++ * Performs a write request.
++ */
++static int sd_write_request(struct sd_host *host, struct request *req)
++{
++ int i;
++ unsigned long nr_blocks; /* in card blocks */
++ size_t block_len; /* in bytes */
++ unsigned long start;
++ void *buf = req->buffer;
++ int retval;
++
++ /* FIXME?, maybe should use 2^WRITE_BL_LEN blocks */
++
++ /* kernel sectors and card write blocks are both 512 bytes long */
++ start = req->sector << KERNEL_SECTOR_SHIFT;
++ nr_blocks = req->current_nr_sectors;
++ block_len = 1 << KERNEL_SECTOR_SHIFT;
++
++ for (i = 0; i < nr_blocks; i++) {
++ retval = sd_write_single_block(host, start, buf, block_len);
++ if (retval < 0)
++ break;
++
++ start += block_len;
++ buf += block_len;
++ }
++
++ /* number of kernel sectors transferred */
++ retval = i;
++
++ return retval;
++}
++
++/*
++ * Verifies if a request should be dispatched or not.
++ *
++ * Returns:
++ * <0 in case of error.
++ * 0 if request passes the checks
++ * >0 if request can be ignored
++ */
++static int sd_check_request(struct sd_host *host, struct request *req)
++{
++ unsigned long nr_sectors;
++
++ if (test_bit(__SD_MEDIA_CHANGED, &host->flags)) {
++ sd_printk(KERN_ERR, "media changed, aborting\n");
++ return -ENOMEDIUM;
++ }
++
++ /* unit is kernel sectors */
++ nr_sectors =
++ host->card.csd.capacity << (host->card.csd.read_blkbits -
++ KERNEL_SECTOR_SHIFT);
++
++ /* keep our reads within limits */
++ if (req->sector + req->current_nr_sectors > nr_sectors) {
++ sd_printk(KERN_ERR, "reading past end, aborting\n");
++ return -EINVAL;
++ }
++
++ if (!blk_fs_request(req))
++ return 1;
++
++ return 0;
++}
++
++/*
++ * Request dispatcher.
++ */
++static int sd_do_request(struct sd_host *host, struct request *req)
++{
++ int retval;
++
++ retval = sd_check_request(host, req);
++ if (retval)
++ return 0;
++
++ switch (rq_data_dir(req)) {
++ case WRITE:
++ retval = sd_write_request(host, req);
++ break;
++ case READ:
++ retval = sd_read_request(host, req);
++ break;
++ }
++
++ return retval;
++}
++
++/*
++ * Input/Output thread.
++ */
++static int sd_io_thread(void *param)
++{
++ struct sd_host *host = param;
++ struct request *req;
++ unsigned long flags;
++ int nr_sectors;
++ int error;
++
++#if 0
++ /*
++ * We are going to perfom badly due to the read problem explained
++ * above. At least, be nice with other processes trying to use the
++ * cpu.
++ */
++ set_user_nice(current, 0);
++#endif
++
++ current->flags |= PF_NOFREEZE|PF_MEMALLOC;
++
++ mutex_lock(&host->io_mutex);
++ for (;;) {
++ req = NULL;
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ spin_lock_irqsave(&host->queue_lock, flags);
++ if (!blk_queue_plugged(host->queue))
++ req = elv_next_request(host->queue);
++ spin_unlock_irqrestore(&host->queue_lock, flags);
++
++ if (!req) {
++ if (kthread_should_stop()) {
++ set_current_state(TASK_RUNNING);
++ break;
++ }
++ mutex_unlock(&host->io_mutex);
++ schedule();
++ mutex_lock(&host->io_mutex);
++ continue;
++ }
++ set_current_state(TASK_INTERRUPTIBLE);
++ nr_sectors = sd_do_request(host, req);
++ error = (nr_sectors < 0) ? nr_sectors : 0;
++
++ spin_lock_irqsave(&host->queue_lock, flags);
++ __blk_end_request(req, error, nr_sectors << 9);
++ spin_unlock_irqrestore(&host->queue_lock, flags);
++ }
++ mutex_unlock(&host->io_mutex);
++
++ return 0;
++}
++
++/*
++ * Block layer request function.
++ * Wakes up the IO thread.
++ */
++static void sd_request_func(struct request_queue *q)
++{
++ struct sd_host *host = q->queuedata;
++ wake_up_process(host->io_thread);
++}
++
++/*
++ *
++ * Driver interface.
++ */
++
++static DECLARE_MUTEX(open_lock);
++
++/*
++ * Opens the drive device.
++ */
++static int sd_open(struct block_device *bdev, fmode_t mode)
++{
++ struct sd_host *host = bdev->bd_disk->private_data;
++ int retval = 0;
++
++ if (!host || !host->exi_device)
++ return -ENXIO;
++
++ /* honor exclusive open mode */
++ if (host->refcnt == -1 ||
++ (host->refcnt && (mode & FMODE_EXCL))) {
++ retval = -EBUSY;
++ goto out;
++ }
++
++ /* this takes care of revalidating the media if needed */
++ check_disk_change(bdev);
++ if (!host->card.csd.capacity) {
++ retval = -ENOMEDIUM;
++ goto out;
++ }
++
++ down(&open_lock);
++
++ if ((mode & FMODE_EXCL))
++ host->refcnt = -1;
++ else
++ host->refcnt++;
++
++ up(&open_lock);
++
++out:
++ return retval;
++
++}
++
++/*
++ * Releases the drive device.
++ */
++static int sd_release(struct gendisk *disk, fmode_t mode)
++{
++ struct sd_host *host = disk->private_data;
++
++ if (!host)
++ return -ENXIO;
++
++ down(&open_lock);
++
++ if (host->refcnt > 0)
++ host->refcnt--;
++ else
++ host->refcnt = 0;
++
++ up(&open_lock);
++
++ /* lazy removal of unreferenced zombies */
++ if (!host->refcnt && !host->exi_device)
++ kfree(host);
++
++ return 0;
++}
++
++/*
++ * Checks if media changed.
++ */
++static int sd_media_changed(struct gendisk *disk)
++{
++ struct sd_host *host = disk->private_data;
++ unsigned int last_serial;
++ int retval;
++
++ /* report a media change for zombies */
++ if (!host)
++ return 1;
++
++ /* report a media change if someone forced it */
++ if (test_bit(__SD_MEDIA_CHANGED, &host->flags))
++ return 1;
++
++ /* check if the serial number of the card changed */
++ last_serial = host->card.cid.serial;
++ retval = sd_read_cid(host);
++ if (!retval && last_serial == host->card.cid.serial && last_serial)
++ clear_bit(__SD_MEDIA_CHANGED, &host->flags);
++ else
++ set_bit(__SD_MEDIA_CHANGED, &host->flags);
++
++ return (host->flags & SD_MEDIA_CHANGED) ? 1 : 0;
++}
++
++/*
++ * Checks if media is still valid.
++ */
++static int sd_revalidate_disk(struct gendisk *disk)
++{
++ struct sd_host *host = disk->private_data;
++ int retval = 0;
++
++ /* report missing medium for zombies */
++ if (!host) {
++ retval = -ENOMEDIUM;
++ goto out;
++ }
++
++ /* the block layer likes to call us multiple times... */
++ if (!sd_media_changed(host->disk))
++ goto out;
++
++ /* get the card into a known status */
++ retval = sd_welcome_card(host);
++ if (retval < 0 || sd_card_is_bad(host)) {
++ retval = -ENOMEDIUM;
++ goto out;
++ }
++
++ /* inform the block layer about various sizes */
++ blk_queue_hardsect_size(host->queue, 1 << KERNEL_SECTOR_SHIFT);
++ set_capacity(host->disk, host->card.csd.capacity <<
++ (host->card.csd.read_blkbits - KERNEL_SECTOR_SHIFT));
++
++ clear_bit(__SD_MEDIA_CHANGED, &host->flags);
++
++out:
++ return retval;
++}
++
++static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
++{
++ geo->cylinders = get_capacity(bdev->bd_disk) / (4 * 16);
++ geo->heads = 4;
++ geo->sectors = 16;
++ return 0;
++}
++
++
++static struct block_device_operations sd_fops = {
++ .owner = THIS_MODULE,
++ .open = sd_open,
++ .release = sd_release,
++ .revalidate_disk = sd_revalidate_disk,
++ .media_changed = sd_media_changed,
++ .getgeo = sd_getgeo,
++};
++
++/*
++ * Initializes the block layer interfaces.
++ */
++static int sd_init_blk_dev(struct sd_host *host)
++{
++ struct gendisk *disk;
++ struct request_queue *queue;
++ int channel;
++ int retval;
++
++ channel = to_channel(exi_get_exi_channel(host->exi_device));
++
++ /* queue */
++ retval = -ENOMEM;
++ spin_lock_init(&host->queue_lock);
++ queue = blk_init_queue(sd_request_func, &host->queue_lock);
++ if (!queue) {
++ sd_printk(KERN_ERR, "error initializing queue\n");
++ goto err_blk_init_queue;
++ }
++ blk_queue_dma_alignment(queue, EXI_DMA_ALIGN);
++ blk_queue_max_phys_segments(queue, 1);
++ blk_queue_max_hw_segments(queue, 1);
++ blk_queue_max_sectors(queue, 8);
++ queue->queuedata = host;
++ host->queue = queue;
++
++ /* disk */
++ disk = alloc_disk(1 << MMC_SHIFT);
++ if (!disk) {
++ sd_printk(KERN_ERR, "error allocating disk\n");
++ goto err_alloc_disk;
++ }
++ disk->major = SD_MAJOR;
++ disk->first_minor = channel << MMC_SHIFT;
++ disk->fops = &sd_fops;
++ sprintf(disk->disk_name, "%s%c", SD_NAME, 'a' + channel);
++ disk->private_data = host;
++ disk->queue = host->queue;
++ host->disk = disk;
++
++ retval = 0;
++ goto out;
++
++err_alloc_disk:
++ blk_cleanup_queue(host->queue);
++ host->queue = NULL;
++err_blk_init_queue:
++out:
++ return retval;
++}
++
++/*
++ * Exits the block layer interfaces.
++ */
++static void sd_exit_blk_dev(struct sd_host *host)
++{
++ blk_cleanup_queue(host->queue);
++ put_disk(host->disk);
++}
++
++
++/*
++ * Initializes and launches the IO thread.
++ */
++static int sd_init_io_thread(struct sd_host *host)
++{
++ int channel;
++ int result = 0;
++
++ channel = to_channel(exi_get_exi_channel(host->exi_device));
++
++ mutex_init(&host->io_mutex);
++ host->io_thread = kthread_run(sd_io_thread, host,
++ "ksdiod/%c", 'a' + channel);
++ if (IS_ERR(host->io_thread)) {
++ sd_printk(KERN_ERR, "error creating io thread\n");
++ result = PTR_ERR(host->io_thread);
++ }
++ return result;
++}
++
++/*
++ * Terminates and waits for the IO thread to complete.
++ */
++static void sd_exit_io_thread(struct sd_host *host)
++{
++ if (!IS_ERR(host->io_thread)) {
++ wake_up_process(host->io_thread);
++ kthread_stop(host->io_thread);
++ host->io_thread = ERR_PTR(-EINVAL);
++ }
++}
++
++/*
++ * Initializes a host.
++ */
++static int sd_init(struct sd_host *host)
++{
++ int retval;
++
++ spin_lock_init(&host->lock);
++
++ host->refcnt = 0;
++ set_bit(__SD_MEDIA_CHANGED, &host->flags);
++
++ host->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
++ sd_set_clock(host, SD_SPI_CLK);
++ sd_calc_timeouts(host);
++
++ retval = sd_init_blk_dev(host);
++ if (!retval) {
++ retval = sd_revalidate_disk(host->disk);
++ if (retval < 0 || !mmc_card_present(&host->card)) {
++ retval = -ENODEV;
++ goto err_blk_dev;
++ }
++
++ retval = sd_init_io_thread(host);
++ if (retval)
++ goto err_blk_dev;
++
++ add_disk(host->disk);
++ }
++
++ return retval;
++
++err_blk_dev:
++ sd_exit_blk_dev(host);
++ return retval;
++}
++
++/*
++ * Deinitializes (exits) a host.
++ */
++static void sd_exit(struct sd_host *host)
++{
++ del_gendisk(host->disk);
++ sd_exit_io_thread(host);
++ sd_exit_blk_dev(host);
++}
++
++/*
++ * Terminates a host.
++ */
++static void sd_kill(struct sd_host *host)
++{
++ if (host->refcnt > 0) {
++ sd_printk(KERN_ERR, "hey! card removed while in use!\n");
++ set_bit(__SD_MEDIA_CHANGED, &host->flags);
++ }
++
++ sd_exit(host);
++ host->exi_device = NULL;
++
++ /* release the host immediately when not in use */
++ if (!host->refcnt)
++ kfree(host);
++}
++
++
++/*
++ * EXI layer interface.
++ *
++ */
++
++/*
++ * Checks if the given EXI device is a MMC/SD card and makes it available
++ * if true.
++ */
++static int sd_probe(struct exi_device *exi_device)
++{
++ struct sd_host *host;
++ int retval;
++
++ /* don't try to drive a device which already has a real identifier */
++ if (exi_device->eid.id != EXI_ID_NONE)
++ return -ENODEV;
++
++ host = kzalloc(sizeof(*host), GFP_KERNEL);
++ if (!host)
++ return -ENOMEM;
++
++ host->exi_device = exi_device_get(exi_device);
++ WARN_ON(exi_get_drvdata(exi_device));
++ exi_set_drvdata(exi_device, host);
++ retval = sd_init(host);
++ if (retval) {
++ exi_set_drvdata(exi_device, NULL);
++ host->exi_device = NULL;
++ kfree(host);
++ exi_device_put(exi_device);
++ }
++ return retval;
++}
++
++/*
++ * Makes unavailable the MMC/SD card identified by the EXI device `exi_device'.
++ */
++static void sd_remove(struct exi_device *exi_device)
++{
++ struct sd_host *host = exi_get_drvdata(exi_device);
++
++ WARN_ON(!host);
++ WARN_ON(!host->exi_device);
++
++ exi_set_drvdata(exi_device, NULL);
++ if (host)
++ sd_kill(host);
++ exi_device_put(exi_device);
++}
++
++static struct exi_device_id sd_eid_table[] = {
++ [0] = {
++ .channel = SD_SLOTA_CHANNEL,
++ .device = SD_SLOTA_DEVICE,
++ .id = EXI_ID_NONE,
++ },
++ [1] = {
++ .channel = SD_SLOTB_CHANNEL,
++ .device = SD_SLOTB_DEVICE,
++ .id = EXI_ID_NONE,
++ },
++ {.id = 0}
++};
++
++static struct exi_driver sd_driver = {
++ .name = DRV_MODULE_NAME,
++ .eid_table = sd_eid_table,
++ .frequency = SD_SPI_CLK_IDX,
++ .probe = sd_probe,
++ .remove = sd_remove,
++};
++
++
++/*
++ * Kernel module interface.
++ *
++ */
++
++/*
++ *
++ */
++static int __init sd_init_module(void)
++{
++ int retval = 0;
++
++ sd_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ sd_driver_version);
++
++ if (register_blkdev(SD_MAJOR, DRV_MODULE_NAME)) {
++ sd_printk(KERN_ERR, "unable to register major %d\n", SD_MAJOR);
++ retval = -EIO;
++ goto out;
++ }
++
++ retval = exi_driver_register(&sd_driver);
++
++out:
++ return retval;
++}
++
++/*
++ *
++ */
++static void __exit sd_exit_module(void)
++{
++ unregister_blkdev(SD_MAJOR, DRV_MODULE_NAME);
++ exi_driver_unregister(&sd_driver);
++}
++
++module_init(sd_init_module);
++module_exit(sd_exit_module);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/block/rvl-mem2.c b/drivers/block/rvl-mem2.c
+new file mode 100644
+index 0000000..01339f5
+--- /dev/null
++++ b/drivers/block/rvl-mem2.c
+@@ -0,0 +1,384 @@
++/*
++ * drivers/block/rvl-mem2.c
++ *
++ * Nintendo Wii MEM2 block driver
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * Based on gcn-aram.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; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/major.h>
++#include <linux/of_platform.h>
++#include <linux/blkdev.h>
++#include <linux/fcntl.h> /* O_ACCMODE */
++#include <linux/hdreg.h> /* HDIO_GETGEO */
++#include <linux/io.h>
++
++
++#define DRV_MODULE_NAME "rvl-mem2"
++#define DRV_DESCRIPTION "Nintendo Wii MEM2 block driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++static char mem2_driver_version[] = "0.1-isobel";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++/*
++ * Driver settings
++ */
++#define MEM2_NAME DRV_MODULE_NAME
++#define MEM2_MAJOR Z2RAM_MAJOR
++
++#define MEM2_SECTOR_SIZE PAGE_SIZE
++
++
++struct mem2_drvdata {
++ spinlock_t lock;
++
++ void __iomem *io_base;
++ size_t size;
++
++ struct block_device_operations fops;
++ struct gendisk *disk;
++ struct request_queue *queue;
++
++ int ref_count;
++
++ struct device *dev;
++};
++
++/*
++ *
++ */
++
++/*
++ * Performs block layer requests.
++ */
++static void mem2_do_request(struct request_queue *q)
++{
++ struct mem2_drvdata *drvdata = q->queuedata;
++ struct request *req;
++ unsigned long mem2_addr;
++ size_t len;
++ int error;
++
++ req = elv_next_request(q);
++ while (req) {
++ if (blk_fs_request(req)) {
++ /* calculate the MEM2 address and length */
++ mem2_addr = req->sector << 9;
++ len = req->current_nr_sectors << 9;
++
++ /* give up if the request goes out of bounds */
++ if (mem2_addr + len > drvdata->size) {
++ drv_printk(KERN_ERR, "bad access: block=%lu,"
++ " size=%u\n",
++ (unsigned long)req->sector, len);
++ error = -EIO;
++ } else {
++ switch (rq_data_dir(req)) {
++ case READ:
++ memcpy(req->buffer,
++ drvdata->io_base + mem2_addr,
++ len);
++ break;
++ case WRITE:
++ memcpy(drvdata->io_base + mem2_addr,
++ req->buffer, len);
++ break;
++ }
++ error = 0;
++ }
++ blk_end_request(req, error, len);
++ } else {
++ end_request(req, 0);
++ }
++ req = elv_next_request(q);
++ }
++}
++
++/*
++ * Opens the MEM2 device.
++ */
++static int mem2_open(struct block_device *bdev, fmode_t mode)
++{
++ struct mem2_drvdata *drvdata = bdev->bd_disk->private_data;
++ unsigned long flags;
++ int retval = 0;
++
++ spin_lock_irqsave(&drvdata->lock, flags);
++
++ /* only allow a minor of 0 to be opened */
++ if (MINOR(bdev->bd_dev)) {
++ retval = -ENODEV;
++ goto out;
++ }
++
++ /* honor exclusive open mode */
++ if (drvdata->ref_count == -1 ||
++ (drvdata->ref_count && (mode & FMODE_EXCL))) {
++ retval = -EBUSY;
++ goto out;
++ }
++
++ if ((mode & FMODE_EXCL))
++ drvdata->ref_count = -1;
++ else
++ drvdata->ref_count++;
++
++out:
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++ return retval;
++}
++
++/*
++ * Closes the MEM2 device.
++ */
++static int mem2_release(struct gendisk *disk, fmode_t mode)
++{
++ struct mem2_drvdata *drvdata = disk->private_data;
++ unsigned long flags;
++
++ spin_lock_irqsave(&drvdata->lock, flags);
++ if (drvdata->ref_count > 0)
++ drvdata->ref_count--;
++ else
++ drvdata->ref_count = 0;
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++
++ return 0;
++}
++
++static int mem2_getgeo(struct block_device *bdev, struct hd_geometry *geo)
++{
++ geo->cylinders = get_capacity(bdev->bd_disk) / (4 * 16);
++ geo->heads = 4;
++ geo->sectors = 16;
++ return 0;
++}
++
++
++static struct block_device_operations mem2_fops = {
++ .owner = THIS_MODULE,
++ .open = mem2_open,
++ .release = mem2_release,
++ .getgeo = mem2_getgeo,
++};
++
++
++/*
++ *
++ */
++static int mem2_init_blk_dev(struct mem2_drvdata *drvdata)
++{
++ struct gendisk *disk;
++ struct request_queue *queue;
++ int retval;
++
++ drvdata->ref_count = 0;
++
++ retval = register_blkdev(MEM2_MAJOR, MEM2_NAME);
++ if (retval)
++ goto err_register_blkdev;
++
++ retval = -ENOMEM;
++ spin_lock_init(&drvdata->lock);
++ queue = blk_init_queue(mem2_do_request, &drvdata->lock);
++ if (!queue)
++ goto err_blk_init_queue;
++
++ blk_queue_hardsect_size(queue, MEM2_SECTOR_SIZE);
++ blk_queue_max_phys_segments(queue, 1);
++ blk_queue_max_hw_segments(queue, 1);
++ queue->queuedata = drvdata;
++ drvdata->queue = queue;
++
++ disk = alloc_disk(1);
++ if (!disk)
++ goto err_alloc_disk;
++
++ disk->major = MEM2_MAJOR;
++ disk->first_minor = 0;
++ disk->fops = &mem2_fops;
++ strcpy(disk->disk_name, MEM2_NAME);
++ disk->queue = drvdata->queue;
++ set_capacity(disk, drvdata->size >> 9);
++ disk->private_data = drvdata;
++ drvdata->disk = disk;
++
++ add_disk(drvdata->disk);
++
++ retval = 0;
++ goto out;
++
++err_alloc_disk:
++ blk_cleanup_queue(drvdata->queue);
++err_blk_init_queue:
++ unregister_blkdev(MEM2_MAJOR, MEM2_NAME);
++err_register_blkdev:
++out:
++ return retval;
++}
++
++/*
++ *
++ */
++static void mem2_exit_blk_dev(struct mem2_drvdata *drvdata)
++{
++ if (drvdata->disk) {
++ del_gendisk(drvdata->disk);
++ put_disk(drvdata->disk);
++ }
++ if (drvdata->queue)
++ blk_cleanup_queue(drvdata->queue);
++ unregister_blkdev(MEM2_MAJOR, MEM2_NAME);
++}
++
++/*
++ *
++ */
++static int mem2_init(struct mem2_drvdata *drvdata, struct resource *mem)
++{
++ int retval;
++ size_t size;
++
++ size = mem->end - mem->start + 1;
++ drvdata->size = size;
++ drvdata->io_base = ioremap(mem->start, size);
++ if (!drvdata->io_base) {
++ drv_printk(KERN_ERR, "failed to ioremap MEM2\n");
++ return -EIO;
++ }
++
++ retval = mem2_init_blk_dev(drvdata);
++ if (retval)
++ iounmap(drvdata->io_base);
++ return retval;
++}
++
++/*
++ *
++ */
++static void mem2_exit(struct mem2_drvdata *drvdata)
++{
++ if (drvdata->io_base)
++ iounmap(drvdata->io_base);
++ mem2_exit_blk_dev(drvdata);
++}
++
++/*
++ *
++ */
++static int mem2_do_probe(struct device *dev, struct resource *mem)
++{
++ struct mem2_drvdata *drvdata;
++ int retval;
++
++ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
++ if (!drvdata) {
++ drv_printk(KERN_ERR, "failed to allocate mem2_drvdata\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, drvdata);
++ drvdata->dev = dev;
++
++ retval = mem2_init(drvdata, mem);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ }
++ return retval;
++}
++
++/*
++ *
++ */
++static int mem2_do_remove(struct device *dev)
++{
++ struct mem2_drvdata *drvdata = dev_get_drvdata(dev);
++
++ if (drvdata) {
++ mem2_exit(drvdata);
++ dev_set_drvdata(dev, NULL);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++/*
++ * Driver model probe function.
++ */
++static int __init mem2_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource res;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &res);
++ if (retval) {
++ drv_printk(KERN_ERR, "no memory range found\n");
++ return -ENODEV;
++ }
++
++ return mem2_do_probe(&odev->dev, &res);
++}
++
++/*
++ * Driver model remove function.
++ */
++static int __exit mem2_of_remove(struct of_device *odev)
++{
++ return mem2_do_remove(&odev->dev);
++}
++
++static struct of_device_id mem2_of_match[] = {
++ { .compatible = "nintendo,hollywood-mem2" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, mem2_of_match);
++
++static struct of_platform_driver mem2_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = mem2_of_match,
++ .probe = mem2_of_probe,
++ .remove = mem2_of_remove,
++};
++
++/*
++ * Module initialization function.
++ */
++static int __init mem2_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ mem2_driver_version);
++
++ return of_register_platform_driver(&mem2_of_driver);
++}
++
++/*
++ * Module deinitialization funtion.
++ */
++static void __exit mem2_exit_module(void)
++{
++ of_unregister_platform_driver(&mem2_of_driver);
++}
++
++module_init(mem2_init_module);
++module_exit(mem2_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/block/rvl-stsd.c b/drivers/block/rvl-stsd.c
+new file mode 100644
+index 0000000..d3b7044
+--- /dev/null
++++ b/drivers/block/rvl-stsd.c
+@@ -0,0 +1,2294 @@
++/*
++ * drivers/block/rvl-stsd.c
++ *
++ * Block driver for the Nintendo Wii SD front slot.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * Based on drivers/block/gcn-sd.c
++ *
++ * Copyright (C) 2004-2008 The GameCube Linux Team
++ * Copyright (C) 2004,2005 Rob Reylink
++ * Copyright (C) 2005 Todd Jeffreys
++ * Copyright (C) 2005,2006,2007,2008 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define DEBUG
++
++/*#define DBG(fmt, arg...) pr_debug(fmt, ##arg)*/
++#define DBG(fmt, arg...) drv_printk(KERN_ERR, fmt, ##arg)
++
++#include <linux/blkdev.h>
++#include <linux/delay.h>
++#include <linux/dma-mapping.h>
++#include <linux/hdreg.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/kthread.h>
++#include <linux/major.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <asm/starlet.h>
++
++/*
++ * We are not a native MMC driver...
++ * But anyway, we try to recycle here some of the available code.
++ */
++#include <linux/mmc/host.h>
++#include <linux/mmc/card.h>
++#include <linux/mmc/mmc.h>
++#include <linux/mmc/sd.h>
++#include <linux/mmc/sdio.h>
++#include "../mmc/host/sdhci.h"
++
++#define DRV_MODULE_NAME "rvl-stsd"
++#define DRV_DESCRIPTION "Block driver for the Nintendo Wii SD front slot"
++#define DRV_AUTHOR "Albert Herranz"
++
++static char stsd_driver_version[] = "0.3i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++/*
++ * Driver settings.
++ */
++#define MMC_SHIFT 3 /* 8 partitions */
++
++#define STSD_MAJOR 62
++#define STSD_NAME "rvlsd"
++
++#define KERNEL_SECTOR_SHIFT 9
++#define KERNEL_SECTOR_SIZE (1 << KERNEL_SECTOR_SHIFT) /*512 */
++
++#define STSD_MAX_SECTORS 16
++
++
++/*
++ * IOS-related constants.
++ */
++
++/* ioctls */
++#define STSD_IOCTL_SETHSR 1
++#define STSD_IOCTL_GETHSR 2
++#define STSD_IOCTL_RESET 4
++#define STSD_IOCTL_SETCLOCK 6
++#define STSD_IOCTL_SENDCMD 7
++#define STSD_IOCTL_GETSTATUS 11
++#define STSD_IOCTL_GETOCR 12
++
++#define STSD_IOCTLV_SENDCMD 7
++
++/* SD command types */
++#define STSD_CMDTYPE_BC 1
++#define STSD_CMDTYPE_BCR 2
++#define STSD_CMDTYPE_AC 3
++#define STSD_CMDTYPE_ADTC 4
++
++/* SD response types */
++#define STSD_RSPTYPE_NONE 0
++#define STSD_RSPTYPE_R1 1
++#define STSD_RSPTYPE_R1B 2
++#define STSD_RSPTYPE_R2 3
++#define STSD_RSPTYPE_R3 4
++#define STSD_RSPTYPE_R4 5
++#define STSD_RSPTYPE_R5 6
++#define STSD_RSPTYPE_R6 7
++#define STSD_RSPTYPE_R7 8
++
++/* card status bits */
++#define STSD_STATUS_CARD_INSERTED (1<<0)
++#define STSD_STATUS_CARD_INITIALIZED (1<<16)
++
++/* IOS errors */
++#define STSD_ERR_INVALID_CARD 0xc1000020
++
++/*
++ * Hardware registers.
++ */
++
++/*
++ * Simplified SD Host Controller Specification
++ * Version 2.00
++ * February 8, 2007
++ */
++
++/*
++ * SD Host Standard Registers
++ *
++ */
++
++/* we are recycling the stuff already in "../mmc/host/sdhci.h" */
++
++/* TMCLK*2^a a=[13..27] */
++#define STSD_TIMEOUT_CONTROL_DIV(a) (((a)-13)&0xf)
++
++static char stsd_dev_sdio_slot0[] = "/dev/sdio/slot0";
++
++/*
++ * Used to get/set the host controller hardware register values through IOS.
++ */
++struct stsd_reg_query {
++ u32 addr;
++ u32 _unk1;
++ u32 _unk2;
++ u32 size;
++ u32 data;
++ u32 _unk3;
++};
++
++/*
++ * Used to send commands to an SD card through IOS.
++ */
++struct stsd_command {
++ u32 opcode;
++ u32 cmdtype;
++ u32 rsptype;
++ u32 arg;
++ u32 blk_count;
++ u32 blk_size;
++ dma_addr_t dma_addr;
++ u32 is_dma;
++ u32 _unk2;
++};
++
++struct stsd_xfer {
++ size_t size;
++ enum dma_data_direction direction;
++
++ struct starlet_ioh_sg in[2], io[1];
++ struct stsd_command *cmd;
++
++ /* one-time initialized members */
++ void *reply;
++ size_t reply_len;
++ dma_addr_t dma_addr;
++ void *bounce_buf;
++ size_t bounce_buf_size;
++ size_t blk_size;
++};
++
++enum {
++ __STSD_MEDIA_CHANGED = 0,
++ __STSD_BAD_CARD,
++ __STSD_MANUAL_SETUP,
++ __STSD_SDHC,
++};
++
++struct stsd_host {
++ spinlock_t lock;
++ unsigned long flags;
++#define STSD_MEDIA_CHANGED (1<<__STSD_MEDIA_CHANGED)
++#define STSD_BAD_CARD (1<<__STSD_BAD_CARD)
++#define STSD_MANUAL_SETUP (1<<__STSD_MANUAL_SETUP)
++#define STSD_SDHC (1<<__STSD_SDHC)
++
++ /* u32 ocr; */
++ unsigned int f_max;
++ unsigned int clock;
++ u32 bus_width;
++
++ u16 status;
++
++ /* card related info */
++ struct mmc_card card;
++
++ int refcnt;
++
++ spinlock_t queue_lock;
++ struct request_queue *queue;
++ struct gendisk *disk;
++ unsigned int max_phys_segments;
++
++ struct stsd_xfer *xfer;
++
++ struct task_struct *io_thread;
++ struct mutex io_mutex;
++
++ int fd;
++ struct device *dev;
++};
++
++
++static const unsigned int tran_exp[] = {
++ 10000, 100000, 1000000, 10000000,
++ 0, 0, 0, 0
++};
++
++static const unsigned char tran_mant[] = {
++ 0, 10, 12, 13, 15, 20, 25, 30,
++ 35, 40, 45, 50, 55, 60, 70, 80,
++};
++
++static const unsigned int tacc_exp[] = {
++ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
++};
++
++static const unsigned int tacc_mant[] = {
++ 0, 10, 12, 13, 15, 20, 25, 30,
++ 35, 40, 45, 50, 55, 60, 70, 80,
++};
++
++
++/*
++ * debug section
++ *
++ */
++
++#if defined(DEBUG) && 0
++
++#define __case_string(_s) \
++case _s: \
++ str = #_s; \
++ break;
++
++static char *stsd_opcode_string(u32 opcode)
++{
++ char *str = "unknown";
++
++ switch (opcode) {
++__case_string(MMC_GO_IDLE_STATE)
++__case_string(MMC_SEND_OP_COND)
++__case_string(MMC_ALL_SEND_CID)
++__case_string(MMC_SET_RELATIVE_ADDR)
++__case_string(MMC_SET_DSR)
++__case_string(MMC_SWITCH)
++__case_string(MMC_SELECT_CARD)
++__case_string(MMC_SEND_EXT_CSD)
++__case_string(MMC_SEND_CSD)
++__case_string(MMC_SEND_CID)
++__case_string(MMC_READ_DAT_UNTIL_STOP)
++__case_string(MMC_STOP_TRANSMISSION)
++__case_string(MMC_SEND_STATUS)
++__case_string(MMC_GO_INACTIVE_STATE)
++__case_string(MMC_SPI_READ_OCR)
++__case_string(MMC_SPI_CRC_ON_OFF)
++__case_string(MMC_SET_BLOCKLEN)
++__case_string(MMC_READ_SINGLE_BLOCK)
++__case_string(MMC_READ_MULTIPLE_BLOCK)
++__case_string(MMC_WRITE_DAT_UNTIL_STOP)
++__case_string(MMC_SET_BLOCK_COUNT)
++__case_string(MMC_WRITE_BLOCK)
++__case_string(MMC_WRITE_MULTIPLE_BLOCK)
++__case_string(MMC_PROGRAM_CID)
++__case_string(MMC_PROGRAM_CSD)
++__case_string(MMC_SET_WRITE_PROT)
++__case_string(MMC_CLR_WRITE_PROT)
++__case_string(MMC_SEND_WRITE_PROT)
++__case_string(MMC_ERASE_GROUP_START)
++__case_string(MMC_ERASE_GROUP_END)
++__case_string(MMC_ERASE)
++__case_string(MMC_FAST_IO)
++__case_string(MMC_GO_IRQ_STATE)
++__case_string(MMC_LOCK_UNLOCK)
++/*__case_string(SD_SEND_RELATIVE_ADDR)*/
++/*__case_string(SD_SEND_IF_COND)*/
++/*__case_string(SD_SWITCH)*/
++__case_string(SD_IO_SEND_OP_COND)
++__case_string(SD_IO_RW_DIRECT)
++__case_string(SD_IO_RW_EXTENDED)
++ }
++
++ return str;
++}
++
++static char *stsd_rsptype_string(u32 rsptype)
++{
++ char *str = "unknown";
++
++ switch (rsptype) {
++__case_string(STSD_RSPTYPE_NONE)
++__case_string(STSD_RSPTYPE_R1)
++__case_string(STSD_RSPTYPE_R1B)
++__case_string(STSD_RSPTYPE_R2)
++__case_string(STSD_RSPTYPE_R3)
++__case_string(STSD_RSPTYPE_R4)
++__case_string(STSD_RSPTYPE_R5)
++__case_string(STSD_RSPTYPE_R6)
++__case_string(STSD_RSPTYPE_R7)
++ }
++
++ return str;
++}
++
++static char *stsd_cmdtype_string(u32 cmdtype)
++{
++ char *str = "unknown";
++
++ switch (cmdtype) {
++__case_string(STSD_CMDTYPE_BC)
++__case_string(STSD_CMDTYPE_BCR)
++__case_string(STSD_CMDTYPE_AC)
++__case_string(STSD_CMDTYPE_ADTC)
++ }
++
++ return str;
++}
++
++static char *stsd_statusbit_string(u32 statusbit)
++{
++ char *str = "unknown";
++
++ switch (statusbit) {
++__case_string(R1_OUT_OF_RANGE)
++__case_string(R1_ADDRESS_ERROR)
++__case_string(R1_BLOCK_LEN_ERROR)
++__case_string(R1_ERASE_SEQ_ERROR)
++__case_string(R1_ERASE_PARAM)
++__case_string(R1_WP_VIOLATION)
++__case_string(R1_CARD_IS_LOCKED)
++__case_string(R1_LOCK_UNLOCK_FAILED)
++__case_string(R1_COM_CRC_ERROR)
++__case_string(R1_ILLEGAL_COMMAND)
++__case_string(R1_CARD_ECC_FAILED)
++__case_string(R1_CC_ERROR)
++__case_string(R1_ERROR)
++__case_string(R1_UNDERRUN)
++__case_string(R1_OVERRUN)
++__case_string(R1_CID_CSD_OVERWRITE)
++__case_string(R1_WP_ERASE_SKIP)
++__case_string(R1_CARD_ECC_DISABLED)
++__case_string(R1_ERASE_RESET)
++__case_string(R1_READY_FOR_DATA)
++__case_string(R1_APP_CMD)
++ }
++
++ return str;
++}
++
++static char *stsd_card_state_string(u32 status)
++{
++ char *str = "unknown";
++
++ switch (R1_CURRENT_STATE(status)) {
++ case 0:
++ str = "IDLE";
++ break;
++ case 1:
++ str = "READY";
++ break;
++ case 2:
++ str = "IDENT";
++ break;
++ case 3:
++ str = "STANDBY";
++ break;
++ case 4:
++ str = "TRANSFER";
++ break;
++ case 5:
++ str = "SEND";
++ break;
++ case 6:
++ str = "RECEIVE";
++ break;
++ case 7:
++ str = "PROGRAM";
++ break;
++ case 8:
++ str = "DISCONNECT";
++ break;
++ }
++
++ return str;
++}
++static void stsd_print_status(u32 status)
++{
++ u32 i, bit;
++
++ drv_printk(KERN_INFO, "card state %s\n",
++ stsd_card_state_string(status));
++
++ i = 13;
++ for (i = 13; i <= 31; i++) {
++ bit = 1 << i;
++ if ((status & bit))
++ drv_printk(KERN_INFO, "%02d %s\n", i,
++ stsd_statusbit_string(bit));
++ }
++ bit = 1 << 8;
++ if ((status & bit))
++ drv_printk(KERN_INFO, "%02d %s\n", 8,
++ stsd_statusbit_string(bit));
++ bit = 1 << 5;
++ if ((status & bit))
++ drv_printk(KERN_INFO, "%02d %s\n", 5,
++ stsd_statusbit_string(bit));
++}
++
++static void stsd_print_cid(struct mmc_cid *cid)
++{
++ drv_printk(KERN_INFO,
++ "manfid = %d\n"
++ "oemid = %d\n"
++ "prod_name = %s\n"
++ "hwrev = %d\n"
++ "fwrev = %d\n"
++ "serial = %08x\n"
++ "year = %d\n"
++ "month = %d\n",
++ cid->manfid,
++ cid->oemid,
++ cid->prod_name,
++ cid->hwrev, cid->fwrev, cid->serial, cid->year, cid->month);
++}
++
++static void stsd_print_csd(struct mmc_csd *csd)
++{
++ drv_printk(KERN_INFO,
++ "mmca_vsn = %d\n"
++ "cmdclass = %d\n"
++ "tacc_clks = %d\n"
++ "tacc_ns = %d\n"
++ "r2w_factor = %d\n"
++ "max_dtr = %d\n"
++ "read_blkbits = %d\n"
++ "write_blkbits = %d\n"
++ "capacity = %d\n"
++ "read_partial = %d\n"
++ "read_misalign = %d\n"
++ "write_partial = %d\n"
++ "write_misalign = %d\n",
++ csd->mmca_vsn,
++ csd->cmdclass,
++ csd->tacc_clks,
++ csd->tacc_ns,
++ csd->r2w_factor,
++ csd->max_dtr,
++ csd->read_blkbits,
++ csd->write_blkbits,
++ csd->capacity,
++ csd->read_partial,
++ csd->read_misalign,
++ csd->write_partial,
++ csd->write_misalign);
++}
++
++static void stsd_dump_hs_regs(struct stsd_host *host)
++{
++ drv_printk(KERN_DEBUG, "============== REGISTER DUMP ==============\n");
++
++ drv_printk(KERN_DEBUG, "Sys addr: 0x%08x | Version: 0x%08x\n",
++ stsd_hsr_in_u32(host, SDHCI_DMA_ADDRESS),
++ stsd_hsr_in_u16(host, SDHCI_HOST_VERSION));
++ drv_printk(KERN_DEBUG, "Blk size: 0x%08x | Blk cnt: 0x%08x\n",
++ stsd_hsr_in_u16(host, SDHCI_BLOCK_SIZE),
++ stsd_hsr_in_u16(host, SDHCI_BLOCK_COUNT));
++ drv_printk(KERN_DEBUG, "Argument: 0x%08x | Trn mode: 0x%08x\n",
++ stsd_hsr_in_u32(host, SDHCI_ARGUMENT),
++ stsd_hsr_in_u16(host, SDHCI_TRANSFER_MODE));
++ drv_printk(KERN_DEBUG, "Present: 0x%08x | Host ctl: 0x%08x\n",
++ stsd_hsr_in_u32(host, SDHCI_PRESENT_STATE),
++ stsd_hsr_in_u8(host, SDHCI_HOST_CONTROL));
++ drv_printk(KERN_DEBUG, "Power: 0x%08x | Blk gap: 0x%08x\n",
++ stsd_hsr_in_u8(host, SDHCI_POWER_CONTROL),
++ stsd_hsr_in_u8(host, SDHCI_BLOCK_GAP_CONTROL));
++ drv_printk(KERN_DEBUG, "Wake-up: 0x%08x | Clock: 0x%08x\n",
++ stsd_hsr_in_u8(host, SDHCI_WAKE_UP_CONTROL),
++ stsd_hsr_in_u16(host, SDHCI_CLOCK_CONTROL));
++ drv_printk(KERN_DEBUG, "Timeout: 0x%08x | Int stat: 0x%08x\n",
++ stsd_hsr_in_u8(host, SDHCI_TIMEOUT_CONTROL),
++ stsd_hsr_in_u32(host, SDHCI_INT_STATUS));
++ drv_printk(KERN_DEBUG, "Int enab: 0x%08x | Sig enab: 0x%08x\n",
++ stsd_hsr_in_u32(host, SDHCI_INT_ENABLE),
++ stsd_hsr_in_u32(host, SDHCI_SIGNAL_ENABLE));
++ drv_printk(KERN_DEBUG, "AC12 err: 0x%08x | Slot int: 0x%08x\n",
++ stsd_hsr_in_u16(host, SDHCI_ACMD12_ERR),
++ stsd_hsr_in_u16(host, SDHCI_SLOT_INT_STATUS));
++ drv_printk(KERN_DEBUG, "Caps: 0x%08x | Max curr: 0x%08x\n",
++ stsd_hsr_in_u32(host, SDHCI_CAPABILITIES),
++ stsd_hsr_in_u32(host, SDHCI_MAX_CURRENT));
++
++ drv_printk(KERN_DEBUG, "===========================================\n");
++}
++
++#endif /* DEBUG */
++
++/*
++ *
++ * MMC/SD data structures manipulation.
++ * Borrowed from MMC layer.
++ */
++
++#define UNSTUFF_BITS(resp, start, size) \
++ ({ \
++ const int __size = size; \
++ const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
++ const int __off = 3 - ((start) / 32); \
++ const int __shft = (start) & 31; \
++ u32 __res; \
++ \
++ __res = resp[__off] >> __shft; \
++ if (__size + __shft > 32) \
++ __res |= resp[__off-1] << ((32 - __shft) % 32); \
++ __res & __mask; \
++ })
++
++/*
++ * Given the decoded CSD structure, decode the raw CID to our CID structure.
++ */
++static void mmc_decode_cid(struct mmc_card *card)
++{
++ u32 *resp = card->raw_cid;
++
++ memset(&card->cid, 0, sizeof(struct mmc_cid));
++
++ /*
++ * SD doesn't currently have a version field so we will
++ * have to assume we can parse this.
++ */
++ card->cid.manfid = UNSTUFF_BITS(resp, 120, 8);
++ card->cid.oemid = UNSTUFF_BITS(resp, 104, 16);
++ card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
++ card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
++ card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
++ card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
++ card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
++ card->cid.hwrev = UNSTUFF_BITS(resp, 60, 4);
++ card->cid.fwrev = UNSTUFF_BITS(resp, 56, 4);
++ card->cid.serial = UNSTUFF_BITS(resp, 24, 32);
++ card->cid.year = UNSTUFF_BITS(resp, 12, 8);
++ card->cid.month = UNSTUFF_BITS(resp, 8, 4);
++
++ card->cid.year += 2000; /* SD cards year offset */
++}
++
++/*
++ * Given a 128-bit response, decode to our card CSD structure.
++ */
++static int mmc_decode_csd(struct mmc_card *card)
++{
++ struct mmc_csd *csd = &card->csd;
++ unsigned int e, m, csd_struct;
++ u32 *resp = card->raw_csd;
++
++ csd_struct = UNSTUFF_BITS(resp, 126, 2);
++
++ switch (csd_struct) {
++ case 0:
++ m = UNSTUFF_BITS(resp, 115, 4);
++ e = UNSTUFF_BITS(resp, 112, 3);
++ csd->tacc_ns = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
++ csd->tacc_clks = UNSTUFF_BITS(resp, 104, 8) * 100;
++
++ m = UNSTUFF_BITS(resp, 99, 4);
++ e = UNSTUFF_BITS(resp, 96, 3);
++ csd->max_dtr = tran_exp[e] * tran_mant[m];
++ csd->cmdclass = UNSTUFF_BITS(resp, 84, 12);
++
++ e = UNSTUFF_BITS(resp, 47, 3);
++ m = UNSTUFF_BITS(resp, 62, 12);
++ csd->capacity = (1 + m) << (e + 2);
++
++ csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
++ csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
++ csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
++ csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
++ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
++ csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
++ csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
++ break;
++ case 1:
++ /*
++ * This is a block-addressed SDHC card. Most
++ * interesting fields are unused and have fixed
++ * values. To avoid getting tripped by buggy cards,
++ * we assume those fixed values ourselves.
++ */
++ mmc_card_set_blockaddr(card);
++
++ csd->tacc_ns = 0; /* Unused */
++ csd->tacc_clks = 0; /* Unused */
++
++ m = UNSTUFF_BITS(resp, 99, 4);
++ e = UNSTUFF_BITS(resp, 96, 3);
++ csd->max_dtr = tran_exp[e] * tran_mant[m];
++ csd->cmdclass = UNSTUFF_BITS(resp, 84, 12);
++
++ m = UNSTUFF_BITS(resp, 48, 22);
++ csd->capacity = (1 + m) << 10;
++
++ csd->read_blkbits = 9;
++ csd->read_partial = 0;
++ csd->write_misalign = 0;
++ csd->read_misalign = 0;
++ csd->r2w_factor = 4; /* Unused */
++ csd->write_blkbits = 9;
++ csd->write_partial = 0;
++ break;
++ default:
++ printk(KERN_ERR "unrecognised CSD structure version %d\n",
++ csd_struct);
++ return -EINVAL;
++ }
++
++ /*stsd_print_csd(csd);*/
++
++ return 0;
++}
++
++/*
++ * REVISIT maybe get rid of this and specify the rsptype directly
++ */
++static u32 stsd_opcode_to_rsptype(u32 opcode)
++{
++ u32 rsptype = STSD_RSPTYPE_R1;
++
++ switch (opcode) {
++ case MMC_GO_IDLE_STATE:
++ case MMC_SET_DSR:
++ case MMC_GO_INACTIVE_STATE:
++ rsptype = STSD_RSPTYPE_NONE;
++ break;
++ case MMC_SWITCH:
++ case MMC_STOP_TRANSMISSION:
++ case MMC_SET_WRITE_PROT:
++ case MMC_CLR_WRITE_PROT:
++ case MMC_ERASE:
++ case MMC_LOCK_UNLOCK:
++ rsptype = STSD_RSPTYPE_R1B;
++ break;
++ case MMC_ALL_SEND_CID:
++ case MMC_SEND_CSD:
++ case MMC_SEND_CID:
++ rsptype = STSD_RSPTYPE_R2;
++ break;
++ case MMC_SEND_OP_COND:
++ case SD_APP_OP_COND:
++ rsptype = STSD_RSPTYPE_R3;
++ break;
++ case MMC_FAST_IO:
++ case SD_IO_SEND_OP_COND:
++ rsptype = STSD_RSPTYPE_R4;
++ break;
++ case MMC_GO_IRQ_STATE:
++ case SD_IO_RW_DIRECT:
++ case SD_IO_RW_EXTENDED:
++ rsptype = STSD_RSPTYPE_R5;
++ break;
++ case SD_SEND_RELATIVE_ADDR:
++ rsptype = STSD_RSPTYPE_R6;
++ break;
++ case SD_SEND_IF_COND:
++ /* WEIRD */
++ /*rsptype = STSD_RSPTYPE_R7;*/
++ rsptype = STSD_RSPTYPE_R6;
++ break;
++ default:
++ break;
++ }
++
++ return rsptype;
++}
++
++static inline void stsd_card_set_bad(struct stsd_host *host)
++{
++ set_bit(__STSD_BAD_CARD, &host->flags);
++}
++
++static inline void stsd_card_unset_bad(struct stsd_host *host)
++{
++ clear_bit(__STSD_BAD_CARD, &host->flags);
++}
++
++static inline int stsd_card_is_bad(struct stsd_host *host)
++{
++ return test_bit(__STSD_BAD_CARD, &host->flags);
++}
++
++static inline void stsd_card_set_sdhc(struct stsd_host *host)
++{
++ set_bit(__STSD_SDHC, &host->flags);
++}
++
++static inline void stsd_card_unset_sdhc(struct stsd_host *host)
++{
++ clear_bit(__STSD_SDHC, &host->flags);
++}
++
++static inline int stsd_card_is_sdhc(struct stsd_host *host)
++{
++ return test_bit(__STSD_SDHC, &host->flags);
++}
++
++static inline void stsd_card_set_manual_setup(struct stsd_host *host)
++{
++ set_bit(__STSD_MANUAL_SETUP, &host->flags);
++}
++
++static inline void stsd_card_unset_manual_setup(struct stsd_host *host)
++{
++ clear_bit(__STSD_MANUAL_SETUP, &host->flags);
++}
++
++static inline int stsd_card_needs_manual_setup(struct stsd_host *host)
++{
++ return test_bit(__STSD_MANUAL_SETUP, &host->flags);
++}
++
++static inline int stsd_card_status_is_inserted(u32 status)
++{
++ return (status & STSD_STATUS_CARD_INSERTED)
++ == STSD_STATUS_CARD_INSERTED;
++}
++
++static inline int stsd_card_status_is_initialized(u32 status)
++{
++ return (status & STSD_STATUS_CARD_INITIALIZED)
++ == STSD_STATUS_CARD_INITIALIZED;
++}
++
++/*
++ * Hardware.
++ *
++ */
++
++/*
++ * Handy small buffer routines.
++ * We use a small static aligned buffer to avoid allocations for short-lived
++ * operations involving 1 to 4 byte data transfers to/from IOS.
++ *
++ */
++
++static u32 stsd_small_buf[L1_CACHE_BYTES / sizeof(u32)]
++ __attribute__ ((aligned(STARLET_IPC_DMA_ALIGN + 1)));
++static const size_t stsd_small_buf_size = sizeof(stsd_small_buf_size);
++static DEFINE_MUTEX(stsd_small_buf_lock);
++
++static u32 *stsd_small_buf_get(void)
++{
++ u32 *buf;
++
++ if (!mutex_trylock(&stsd_small_buf_lock))
++ buf = starlet_kzalloc(stsd_small_buf_size, GFP_NOIO);
++ else {
++ memset(stsd_small_buf, 0, stsd_small_buf_size);
++ buf = stsd_small_buf;
++ }
++
++ return buf;
++}
++
++void stsd_small_buf_put(u32 *buf)
++{
++ if (buf == stsd_small_buf)
++ mutex_unlock(&stsd_small_buf_lock);
++ else
++ starlet_kfree(buf);
++}
++
++
++/*
++ * SD Host Standard Registers accessors.
++ *
++ */
++
++/*
++ * @data must be aligned
++ * @size must be between 1 and 4
++ */
++static int __stsd_hsr_in(struct stsd_host *host,
++ u32 addr, u32 *data, size_t size)
++{
++ struct stsd_reg_query *query;
++ int error;
++
++ query = starlet_kzalloc(sizeof(*query), GFP_ATOMIC);
++ if (!query)
++ return -ENOMEM;
++
++ query->addr = addr;
++ query->size = size;
++
++ error = starlet_ioctl(host->fd, STSD_IOCTL_GETHSR,
++ query, sizeof(*query), data, sizeof(*data));
++
++ starlet_kfree(query);
++
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ return error;
++}
++
++static int __stsd_hsr_out(struct stsd_host *host,
++ u32 addr, u32 *data, size_t size)
++{
++ struct stsd_reg_query *query;
++ int error;
++
++ query = starlet_kzalloc(sizeof(*query), GFP_ATOMIC);
++ if (!query)
++ return -ENOMEM;
++
++ query->addr = addr;
++ query->size = size;
++ query->data = *data;
++
++ error = starlet_ioctl(host->fd, STSD_IOCTL_SETHSR,
++ query, sizeof(*query), NULL, 0);
++
++ starlet_kfree(query);
++
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ return error;
++}
++
++
++static int stsd_hsr_in(struct stsd_host *host,
++ u32 reg, void *buf, size_t size)
++{
++ u32 *local_buf;
++ int error;
++
++ /* we do 8, 16 and 32 bits reads */
++ if (size > 4)
++ return -EINVAL;
++
++ local_buf = stsd_small_buf_get();
++ if (!local_buf)
++ return -ENOMEM;
++
++ error = __stsd_hsr_in(host, reg, local_buf, size);
++ if (!error) {
++ switch (size) {
++ case 1:
++ *(u8 *)buf = *local_buf & 0xff;
++ break;
++ case 2:
++ *(u16 *)buf = *local_buf & 0xffff;
++ break;
++ case 4:
++ *(u32 *)buf = *local_buf;
++ break;
++ default:
++ BUG();
++ break;
++ }
++ }
++
++ stsd_small_buf_put(local_buf);
++
++ return error;
++}
++
++static int stsd_hsr_out(struct stsd_host *host,
++ u32 reg, void *buf, size_t size)
++{
++ u32 *local_buf;
++ int error;
++
++ /* we do 8, 16 and 32 bits reads */
++ if (size > 4)
++ return -EINVAL;
++
++ local_buf = stsd_small_buf_get();
++ if (!local_buf)
++ return -ENOMEM;
++
++ switch (size) {
++ case 1:
++ *local_buf = *(u8 *)buf;
++ break;
++ case 2:
++ *local_buf = *(u16 *)buf;
++ break;
++ case 4:
++ *local_buf = *(u32 *)buf;
++ break;
++ default:
++ BUG();
++ break;
++ }
++ error = __stsd_hsr_out(host, reg, local_buf, size);
++
++ stsd_small_buf_put(local_buf);
++
++ return error;
++}
++
++#define __declare_stsd_hsr_wait_for_resp(_type) \
++static int stsd_hsr_wait_for_resp_##_type(struct stsd_host *host, \
++ u32 reg, _type resp, _type resp_mask, \
++ unsigned long jiffies) \
++{ \
++ _type val; \
++ int error; \
++ \
++ unsigned long cycles = 10; \
++ while (cycles-- > 0) { \
++ error = stsd_hsr_in(host, reg, &val, sizeof(val)); \
++ if (error) \
++ return error; \
++ if ((val & resp_mask) == resp) \
++ return 0; \
++ mdelay(10); \
++ } \
++ return -ENODATA; \
++}
++
++__declare_stsd_hsr_wait_for_resp(u8);
++__declare_stsd_hsr_wait_for_resp(u16);
++
++#define __declare_stsd_hsr_in(_type) \
++static inline _type stsd_hsr_in_##_type(struct stsd_host *host, u32 reg) \
++{ \
++ _type val; \
++ \
++ stsd_hsr_in(host, reg, &val, sizeof(val)); \
++ return val; \
++}
++
++__declare_stsd_hsr_in(u8);
++__declare_stsd_hsr_in(u16);
++__declare_stsd_hsr_in(u32);
++
++#define __declare_stsd_hsr_out(_type) \
++static inline void stsd_hsr_out_##_type(struct stsd_host *host, u32 reg,\
++ _type val) \
++{ \
++ stsd_hsr_out(host, reg, &val, sizeof(val)); \
++}
++
++__declare_stsd_hsr_out(u8);
++__declare_stsd_hsr_out(u16);
++__declare_stsd_hsr_out(u32);
++
++
++
++/*
++ * Ioctl helpers.
++ *
++ */
++
++static int stsd_ioctl_small_read(struct stsd_host *host, int request,
++ void *buf, size_t size)
++{
++ void *local_buf;
++ int error;
++
++ /* we do 8, 16 and 32 bits reads */
++ if (size > stsd_small_buf_size) {
++ error = -EINVAL;
++ goto done;
++ }
++
++ local_buf = stsd_small_buf_get();
++ if (!local_buf) {
++ error = -ENOMEM;
++ goto done;
++ }
++
++ error = starlet_ioctl(host->fd, request,
++ NULL, 0, local_buf, size);
++ if (!error)
++ memcpy(buf, local_buf, size);
++
++ stsd_small_buf_put(local_buf);
++
++done:
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ return error;
++}
++
++static int stsd_ioctl_small_write(struct stsd_host *host, int request,
++ void *buf, size_t size)
++{
++ void *local_buf;
++ int error;
++
++ /* we do 8, 16 and 32 bits writes */
++ if (size > stsd_small_buf_size) {
++ error = -EINVAL;
++ goto done;
++ }
++
++ local_buf = stsd_small_buf_get();
++ if (!local_buf) {
++ error = -ENOMEM;
++ goto done;
++ }
++
++ memcpy(local_buf, buf, size);
++ error = starlet_ioctl(host->fd, request,
++ local_buf, size, NULL, 0);
++
++ stsd_small_buf_put(local_buf);
++
++done:
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ return error;
++}
++
++
++/*
++ * Hardware interfaces.
++ *
++ */
++
++static int stsd_get_status(struct stsd_host *host, u32 *status)
++{
++ int error;
++
++ error = stsd_ioctl_small_read(host, STSD_IOCTL_GETSTATUS,
++ status, sizeof(*status));
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ return error;
++}
++
++static void stsd_set_bus_width(struct stsd_host *host, int width)
++{
++ u8 hcr;
++
++ hcr = stsd_hsr_in_u8(host, SDHCI_HOST_CONTROL);
++ if (width == 4) {
++ hcr |= SDHCI_CTRL_4BITBUS;
++ } else {
++ hcr &= ~SDHCI_CTRL_4BITBUS;
++ width = 1;
++ }
++ stsd_hsr_out_u8(host, SDHCI_HOST_CONTROL, hcr);
++ host->bus_width = width;
++}
++
++static int stsd_set_clock(struct stsd_host *host, unsigned int clock)
++{
++ int error;
++ u32 divisor;
++
++ for (divisor = 1; divisor <= 32; divisor <<= 1) {
++ if (host->f_max / divisor <= clock)
++ break;
++ }
++
++ error = stsd_ioctl_small_write(host, STSD_IOCTL_SETCLOCK,
++ &divisor, sizeof(divisor));
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ else
++ host->clock = clock;
++
++ return error;
++}
++
++static int stsd_reset_card(struct stsd_host *host)
++{
++ struct mmc_card *card = &host->card;
++ int error;
++ u32 status;
++
++ stsd_card_unset_bad(host);
++ stsd_card_unset_sdhc(host);
++ stsd_card_unset_manual_setup(host);
++
++ memset(&card->cid, 0, sizeof(struct mmc_cid));
++ memset(&card->csd, 0, sizeof(struct mmc_csd));
++ host->card.rca = 0;
++
++ error = stsd_ioctl_small_read(host, STSD_IOCTL_RESET,
++ &status, sizeof(status));
++ if (error) {
++ if (error != STSD_ERR_INVALID_CARD)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ } else {
++ host->card.rca = status >> 16;
++ host->status = status & 0xffff;
++ }
++
++ return error;
++}
++
++#if 0
++static int stsd_get_ocr(struct stsd_host *host)
++{
++ int error;
++ u32 ocr;
++
++ error = stsd_ioctl_small_read(host, STSD_IOCTL_GETOCR,
++ &ocr, sizeof(ocr));
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ else
++ host->ocr = ocr;
++
++ return error;
++}
++#endif
++
++/*
++ * Command engine.
++ *
++ */
++
++static int stsd_send_command(struct stsd_host *host,
++ u32 opcode, u32 type, u32 arg,
++ void *buf, size_t buf_len)
++{
++ struct scatterlist in[2], io[1];
++ struct stsd_command *cmd;
++ u32 *reply;
++ size_t reply_len;
++ int error;
++
++ reply_len = 4 * sizeof(u32);
++ if (buf_len > reply_len)
++ return -EINVAL;
++
++ cmd = starlet_kzalloc(sizeof(*cmd), GFP_NOIO);
++ if (!cmd)
++ return -ENOMEM;
++
++ reply = starlet_kzalloc(reply_len, GFP_NOIO);
++ if (!reply) {
++ starlet_kfree(cmd);
++ return -ENOMEM;
++ }
++
++ cmd->opcode = opcode;
++ cmd->arg = arg;
++
++ cmd->cmdtype = type;
++ cmd->rsptype = stsd_opcode_to_rsptype(opcode);
++ if (opcode == MMC_SELECT_CARD && arg == 0)
++ cmd->rsptype = STSD_RSPTYPE_NONE;
++
++ if (stsd_card_needs_manual_setup(host)) {
++ /*
++ * We need to use ioctlvs, instead of ioctls, to drive
++ * manually initialized cards.
++ * This makes IOS "cooperative" :)
++ */
++ sg_init_table(in, 2);
++ sg_set_buf(&in[0], cmd, sizeof(*cmd));
++ sg_set_buf(&in[1], reply, 0);
++
++ sg_init_table(io, 1);
++ sg_set_buf(&io[0], reply, reply_len);
++
++ error = starlet_ioctlv(host->fd, STSD_IOCTL_SENDCMD,
++ 2, in, 1, io);
++ } else {
++ error = starlet_ioctl(host->fd, STSD_IOCTL_SENDCMD,
++ cmd, sizeof(*cmd), reply, reply_len);
++ }
++
++ if (error) {
++ DBG("%s: error=%d (%08x), opcode=%d\n", __func__,
++ error, error, opcode);
++ } else {
++ if (buf)
++ memcpy(buf, reply, buf_len);
++ }
++
++ starlet_kfree(reply);
++ starlet_kfree(cmd);
++
++ return error;
++}
++
++static int stsd_send_app_command(struct stsd_host *host,
++ u32 opcode, u32 type, u32 arg,
++ void *buf, size_t buf_len)
++{
++ int error;
++
++ error = stsd_send_command(host, MMC_APP_CMD, STSD_CMDTYPE_AC,
++ host->card.rca << 16, NULL, 0);
++ if (!error) {
++ error = stsd_send_command(host, opcode, type, arg,
++ buf, buf_len);
++ }
++ return error;
++}
++
++
++/*
++ * Command helpers.
++ *
++ */
++
++
++static int stsd_cmd_read_cxd(struct stsd_host *host, int request, void *buf)
++{
++ int error;
++ u32 *q, savedq;
++ u8 *p, crc;
++ const size_t size = 128/8*sizeof(u8);
++
++ error = stsd_send_command(host, request, STSD_CMDTYPE_AC,
++ host->card.rca << 16, buf, size);
++
++ if (!error) {
++ /*
++ * WEIRD,
++ * starlet sends CSD and CID contents in a very special way.
++ *
++ * If the 128 bit register value is:
++ * 0123456789abcdef
++ * starlet will send it as:
++ * bcde789a3456f012
++ * with byte f (the crc field) zeroed.
++ */
++
++ /* bcde789a3456f012 -> f0123456789abcde */
++ q = buf;
++ savedq = q[0];
++ q[0] = q[3];
++ q[3] = savedq;
++ savedq = q[1];
++ q[1] = q[2];
++ q[2] = savedq;
++
++ /* f0123456789abcde -> 0123456789abcdef */
++ p = buf;
++ crc = p[0];
++ memcpy(p, p+1, size-1);
++ p[size-1] = crc;
++ }
++ return error;
++}
++
++static int stsd_cmd_read_csd(struct stsd_host *host)
++{
++ return stsd_cmd_read_cxd(host, MMC_SEND_CSD, host->card.raw_csd);
++}
++
++static int stsd_cmd_read_cid(struct stsd_host *host)
++{
++ return stsd_cmd_read_cxd(host, MMC_SEND_CID, host->card.raw_cid);
++}
++
++static int stsd_cmd_all_send_cid(struct stsd_host *host)
++{
++ const size_t size = 128/8*sizeof(u8);
++
++ /* WEIRD, don't use CMDTYPE_BCR for MMC_ALL_SEND_CID */
++ return stsd_send_command(host, MMC_ALL_SEND_CID, 0,
++ host->card.rca << 16,
++ host->card.raw_cid, size);
++}
++
++static int stsd_cmd_set_relative_addr(struct stsd_host *host, unsigned int rca)
++{
++ int error;
++ u32 reply;
++
++ error = stsd_send_command(host, MMC_SET_RELATIVE_ADDR, STSD_CMDTYPE_AC,
++ rca, &reply, sizeof(reply));
++ if (!error) {
++ host->card.rca = reply >> 16;
++ /* DBG("rca=%d, new_rca=%x\n", rca, host->card.rca); */
++ }
++ return error;
++}
++
++
++static int stsd_cmd_select_card(struct stsd_host *host)
++{
++ return stsd_send_command(host, MMC_SELECT_CARD, STSD_CMDTYPE_AC,
++ host->card.rca << 16,
++ NULL, 0);
++}
++
++static int stsd_cmd_deselect_card(struct stsd_host *host)
++{
++ return stsd_send_command(host, MMC_SELECT_CARD, STSD_CMDTYPE_AC,
++ 0,
++ NULL, 0);
++}
++
++static int stsd_cmd_set_block_len(struct stsd_host *host, unsigned int len)
++{
++ return stsd_send_command(host, MMC_SET_BLOCKLEN, STSD_CMDTYPE_AC,
++ len,
++ NULL, 0);
++}
++
++static int stsd_app_cmd_set_bus_width(struct stsd_host *host, int width)
++{
++ int error;
++ u16 val;
++
++ if (width == 4)
++ val = SD_BUS_WIDTH_4;
++ else
++ val = SD_BUS_WIDTH_1;
++
++ error = stsd_send_app_command(host, SD_APP_SET_BUS_WIDTH,
++ STSD_CMDTYPE_AC,
++ val, NULL, 0);
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ return error;
++}
++
++
++
++static int stsd_setup_host_controller(struct stsd_host *host)
++{
++ const u32 mask = SDHCI_INT_RESPONSE | SDHCI_INT_DATA_END |
++ SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE |
++ SDHCI_INT_TIMEOUT | SDHCI_INT_CRC |
++ SDHCI_INT_END_BIT | SDHCI_INT_INDEX |
++ SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC |
++ SDHCI_INT_ACMD12ERR;
++ u8 rst, pwr, clk_idx;
++ int error;
++
++ /*
++ * Reset host controller.
++ */
++
++ /* write 1 to the Reset All bit in the Software Reset register ... */
++ rst = SDHCI_RESET_ALL;
++ stsd_hsr_out_u8(host, SDHCI_SOFTWARE_RESET, rst);
++
++ /* ... then wait for the Reset All bit to be cleared */
++ error = stsd_hsr_wait_for_resp_u8(host, SDHCI_SOFTWARE_RESET,
++ 0, rst,
++ 100*(HZ/1000));
++ if (error) {
++ drv_printk(KERN_ERR, "host controller didn't get out of"
++ " reset\n");
++ goto done;
++ }
++
++ /*
++ * Setup interrupt sources.
++ */
++
++ /* ack the interrupt sources that IOS uses ... */
++ stsd_hsr_out_u32(host, SDHCI_INT_ENABLE, mask);
++ stsd_hsr_in_u32(host, SDHCI_INT_ENABLE);
++ /* ... then unmask them */
++ stsd_hsr_out_u32(host, SDHCI_SIGNAL_ENABLE, mask);
++ stsd_hsr_in_u32(host, SDHCI_SIGNAL_ENABLE);
++
++ /*
++ * Setup bus power.
++ */
++
++ /* FIXME, we should use capabilities register here */
++ /* for now use 3.3V setting */
++ pwr = SDHCI_POWER_330;
++
++ /* turn on bus power and use selected voltage setting */
++ stsd_hsr_out_u8(host, SDHCI_POWER_CONTROL, pwr & ~SDHCI_POWER_ON);
++ stsd_hsr_out_u8(host, SDHCI_POWER_CONTROL, pwr | SDHCI_POWER_ON);
++
++ /*
++ * Initialize clocks.
++ */
++
++ /* FIXME, we should use capabilities register here */
++ /* for now use index 01h which is base clock divided by 2 */
++ clk_idx = 1;
++
++ /* disable clock signalling... */
++ stsd_hsr_out_u16(host, SDHCI_CLOCK_CONTROL, 0);
++ /* ... then enable internal clock ... */
++ stsd_hsr_out_u16(host, SDHCI_CLOCK_CONTROL,
++ SDHCI_CLOCK_INT_EN |
++ (clk_idx << SDHCI_DIVIDER_SHIFT));
++ /* ... and wait until it gets stable */
++ error = stsd_hsr_wait_for_resp_u16(host, SDHCI_CLOCK_CONTROL,
++ SDHCI_CLOCK_INT_STABLE,
++ SDHCI_CLOCK_INT_STABLE,
++ 1*HZ);
++ if (error) {
++ drv_printk(KERN_ERR, "internal clock didn't get stable\n");
++ goto done;
++ }
++
++ /* SD clock can be enabled now */
++ stsd_hsr_out_u16(host, SDHCI_CLOCK_CONTROL,
++ SDHCI_CLOCK_INT_EN |
++ SDHCI_CLOCK_CARD_EN |
++ (1 << SDHCI_DIVIDER_SHIFT));
++
++ /*
++ * Setup timeout.
++ */
++
++ /* setup timeout to TMCLK * 2^27 */
++ stsd_hsr_out_u8(host, SDHCI_TIMEOUT_CONTROL,
++ STSD_TIMEOUT_CONTROL_DIV(27));
++
++done:
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ return error;
++}
++
++static int stsd_setup_card(struct stsd_host *host)
++{
++ const u8 check_pattern = 0xaa;
++ u32 arg;
++ u32 resp[4];
++ int i;
++ int error;
++
++ /* WEIRD, don't use CMDTYPE_BC for MMC_GO_IDLE_STATE */
++ error = stsd_send_command(host, MMC_GO_IDLE_STATE, 0,
++ 0, NULL, 0);
++ if (error)
++ goto done;
++
++#define STSD_VHS(a) ((((a)&0x0f)<<8))
++#define STSD_VHS_27_36 STSD_VHS(0x1)
++
++ /* WEIRD, don't use CMDTYPE_BC for SD_SEND_IF_COND */
++ arg = STSD_VHS_27_36 | check_pattern;
++ error = stsd_send_command(host, SD_SEND_IF_COND, 0,
++ arg, &resp, sizeof(resp));
++ if (error)
++ goto done;
++
++ if ((resp[0] & 0xff) != check_pattern) {
++ DBG("arg=0x%x, resp[0]=0x%x\n", arg, resp[0]);
++ error = -ENODEV;
++ goto done;
++ }
++
++ /*
++ * At this point we have identified a v2.00 SD Memory Card.
++ *
++ */
++
++ /*
++ * Get OCR
++ */
++
++#define STSD_OCR_HCS (1<<30) /* Host Capacity Support */
++#define STSD_OCR_CCS (1<<30) /* Card Capacity Support */
++
++ for (i = 0; i < 100; i++) {
++ /* WEIRD, don't use CMDTYPE_BCR for MMC_APP_CMD */
++ error = stsd_send_command(host, MMC_APP_CMD, STSD_CMDTYPE_AC,
++ 0, NULL, 0);
++ if (error)
++ goto done;
++
++ /* WEIRD, don't use CMDTYPE_BCR for SD_APP_OP_COND */
++ error = stsd_send_command(host, SD_APP_OP_COND, 0,
++ STSD_OCR_HCS|
++ MMC_VDD_32_33|MMC_VDD_33_34,
++ &resp, sizeof(resp));
++ if (error)
++ goto done;
++
++ if ((resp[0] & MMC_CARD_BUSY) != 0) {
++ /* card power up completed */
++ break;
++ }
++
++ error = -ETIMEDOUT;
++ mdelay(10);
++ }
++ if (error) {
++ drv_printk(KERN_ERR, "timed out while trying to get OCR\n");
++ goto done;
++ }
++
++ if ((resp[0] & STSD_OCR_CCS) != 0) {
++ /* high capacity card */
++ stsd_card_set_sdhc(host);
++ }
++
++ error = stsd_cmd_all_send_cid(host);
++ if (error)
++ goto done;
++
++ error = stsd_cmd_set_relative_addr(host, 0);
++ if (error)
++ goto done;
++
++done:
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ return error;
++}
++
++static int stsd_reopen_sdio(struct stsd_host *host)
++{
++ int error = 0;
++
++ starlet_close(host->fd);
++ host->fd = starlet_open(stsd_dev_sdio_slot0, 1);
++ if (host->fd < 0) {
++ drv_printk(KERN_ERR, "unable to re-open %s\n",
++ stsd_dev_sdio_slot0);
++ error = -ENODEV;
++ }
++ return error;
++}
++
++
++static int stsd_welcome_card(struct stsd_host *host)
++{
++ size_t block_len; /* in bytes */
++ u32 status;
++ int error;
++
++ mutex_lock(&host->io_mutex);
++
++ /*
++ * Re-open the sdio device if things look wrong.
++ */
++ error = stsd_get_status(host, &status);
++ if (error == STARLET_EINVAL) {
++ error = stsd_reopen_sdio(host);
++ if (error)
++ goto err_bad_card;
++ }
++
++ /*
++ * Try a normal initialization sequence first, and revert to
++ * manual mode if that fails.
++ */
++
++ stsd_reset_card(host);
++
++ error = stsd_get_status(host, &status);
++ if (error)
++ goto err_bad_card;
++ if (!stsd_card_status_is_inserted(status)) {
++ drv_printk(KERN_ERR, "no card found\n");
++ goto err_bad_card;
++ }
++
++ if (!stsd_card_status_is_initialized(status)) {
++ /* manual initialization, needed for SDHC support */
++ stsd_card_set_manual_setup(host);
++
++ error = stsd_reopen_sdio(host);
++ if (error)
++ goto err_bad_card;
++
++ error = stsd_setup_host_controller(host);
++ if (error)
++ goto err_bad_card;
++
++ error = stsd_setup_card(host);
++ if (error)
++ goto err_bad_card;
++ }
++
++#if 0
++ /* read Operating Conditions Register */
++ error = stsd_get_ocr(host);
++ if (error < 0)
++ goto err_bad_card;
++#endif
++
++ error = stsd_cmd_deselect_card(host);
++ if (error)
++ goto err_bad_card;
++
++ /* read and decode the Card Specific Data */
++ error = stsd_cmd_read_csd(host);
++ if (error)
++ goto err_bad_card;
++ mmc_decode_csd(&host->card);
++
++ /* read and decode the Card Identification Data */
++ error = stsd_cmd_read_cid(host);
++ if (error)
++ goto err_bad_card;
++ mmc_decode_cid(&host->card);
++
++ error = stsd_cmd_select_card(host);
++ if (error)
++ goto err_bad_card;
++
++ stsd_set_clock(host, host->card.csd.max_dtr);
++
++ /* FIXME check if card supports 4 bit bus width */
++ stsd_set_bus_width(host, 4);
++ error = stsd_app_cmd_set_bus_width(host, 4);
++ if (error)
++ goto err_bad_card;
++
++ /* setup block length */
++ block_len = KERNEL_SECTOR_SIZE;
++ error = stsd_cmd_set_block_len(host, block_len);
++ if (error)
++ goto err_bad_card;
++
++#if 0
++ mmc_card_set_present(&host->card);
++#endif
++
++ mutex_unlock(&host->io_mutex);
++
++ drv_printk(KERN_INFO, "descr \"%s\", size %luk, block %ub,"
++ " serial %08x\n",
++ host->card.cid.prod_name,
++ (unsigned long)((host->card.csd.capacity / 1024) *
++ (1 << host->card.csd.read_blkbits)),
++ 1 << host->card.csd.read_blkbits,
++ host->card.cid.serial);
++
++ error = 0;
++ goto out;
++
++err_bad_card:
++ mutex_unlock(&host->io_mutex);
++ stsd_card_set_bad(host);
++out:
++ return error;
++}
++
++
++/*
++ * Block layer helper routines.
++ *
++ */
++
++static int stsd_do_block_transfer(struct stsd_host *host, int write,
++ unsigned long start,
++ void *buf, size_t nr_blocks)
++{
++ struct stsd_xfer *xfer = host->xfer;
++ struct stsd_command *cmd = xfer->cmd;
++ int error;
++
++ xfer->direction = (write) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
++ xfer->size = nr_blocks * xfer->blk_size;
++
++ if (xfer->size > xfer->bounce_buf_size) {
++ drv_printk(KERN_ERR, "oops, request size %d > %d\n",
++ xfer->size, xfer->bounce_buf_size);
++ return -ENOMEM;
++ }
++
++ /*
++ * This is stupid.
++ * Starlet expects the buffer to be an input iovec (from starlet
++ * point of view) even for reads. Thus, map the buffer explicitly here.
++ */
++ if (write)
++ memcpy(xfer->bounce_buf, buf, xfer->size);
++ __dma_sync(xfer->bounce_buf, xfer->size, xfer->direction);
++/*
++ xfer->dma_addr = dma_map_single(host->dev, buf,
++ xfer->size, xfer->direction);
++*/
++
++ starlet_ioh_sg_init_table(xfer->in, 2);
++ starlet_ioh_sg_set_buf(&xfer->in[0], cmd, sizeof(*cmd));
++ starlet_ioh_sg_set_buf(&xfer->in[1], xfer->bounce_buf, xfer->size);
++
++ starlet_ioh_sg_init_table(xfer->io, 1);
++ starlet_ioh_sg_set_buf(&xfer->io[0], xfer->reply, xfer->reply_len);
++
++ cmd->opcode = (write) ? MMC_WRITE_MULTIPLE_BLOCK :
++ MMC_READ_MULTIPLE_BLOCK;
++ cmd->arg = start;
++ cmd->cmdtype = STSD_CMDTYPE_AC; /* STSD_CMDTYPE_ADTC */
++ cmd->rsptype = stsd_opcode_to_rsptype(cmd->opcode);
++ cmd->blk_count = nr_blocks;
++ cmd->blk_size = xfer->blk_size;
++ cmd->dma_addr = xfer->dma_addr; /* bounce buf */
++ cmd->is_dma = 1;
++
++ error = starlet_ioh_ioctlv(host->fd, STSD_IOCTLV_SENDCMD,
++ 2, xfer->in, 1, xfer->io);
++/*
++ dma_unmap_single(host->dev,
++ xfer->dma_addr, xfer->size, xfer->direction);
++*/
++
++ if (!write)
++ memcpy(buf, xfer->bounce_buf, xfer->size);
++
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++
++ return error;
++}
++
++/*
++ * Returns >0 if a request should be dispatched.
++ */
++static int stsd_check_request(struct stsd_host *host, struct request *req)
++{
++ unsigned long nr_sectors;
++
++ if (test_bit(__STSD_MEDIA_CHANGED, &host->flags)) {
++ drv_printk(KERN_ERR, "media changed, aborting\n");
++ return -ENOMEDIUM;
++ }
++
++ /* unit is kernel sectors */
++ nr_sectors =
++ host->card.csd.capacity << (host->card.csd.read_blkbits -
++ KERNEL_SECTOR_SHIFT);
++
++ /* keep our reads within limits */
++ if (req->sector + req->current_nr_sectors > nr_sectors) {
++ drv_printk(KERN_ERR, "reading past end, aborting\n");
++ return -EINVAL;
++ }
++
++ if (!blk_fs_request(req))
++ return 0;
++
++ return 1;
++}
++
++static int stsd_do_request(struct stsd_host *host, struct request *req)
++{
++ unsigned long nr_blocks; /* in card blocks */
++ unsigned long start;
++ int write;
++ int uptodate;
++ int error;
++
++ uptodate = stsd_check_request(host, req);
++ if (uptodate <= 0)
++ return uptodate;
++
++ write = (rq_data_dir(req) == READ) ? 0 : 1;
++
++ start = req->sector;
++ if (!stsd_card_is_sdhc(host))
++ start <<= KERNEL_SECTOR_SHIFT;
++ nr_blocks = req->current_nr_sectors;
++
++ error = stsd_do_block_transfer(host, write,
++ start, req->buffer, nr_blocks);
++ if (error)
++ DBG("%s: error=%d (%08x), start=%lu, \n", __func__,
++ error, error, start);
++
++ return error;
++}
++
++static int stsd_io_thread(void *param)
++{
++ struct stsd_host *host = param;
++ struct request *req;
++ unsigned long flags;
++ int error;
++
++ current->flags |= PF_NOFREEZE|PF_MEMALLOC;
++
++ mutex_lock(&host->io_mutex);
++ for (;;) {
++ req = NULL;
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ spin_lock_irqsave(&host->queue_lock, flags);
++ if (!blk_queue_plugged(host->queue))
++ req = elv_next_request(host->queue);
++ spin_unlock_irqrestore(&host->queue_lock, flags);
++
++ if (!req) {
++ if (kthread_should_stop()) {
++ set_current_state(TASK_RUNNING);
++ break;
++ }
++ mutex_unlock(&host->io_mutex);
++ schedule();
++ mutex_lock(&host->io_mutex);
++ continue;
++ }
++ set_current_state(TASK_INTERRUPTIBLE);
++ error = stsd_do_request(host, req);
++
++ spin_lock_irqsave(&host->queue_lock, flags);
++ __blk_end_request(req, error, blk_rq_bytes(req));
++ spin_unlock_irqrestore(&host->queue_lock, flags);
++ }
++ mutex_unlock(&host->io_mutex);
++
++ return 0;
++}
++
++static void stsd_request_func(struct request_queue *q)
++{
++ struct stsd_host *host = q->queuedata;
++
++ wake_up_process(host->io_thread);
++}
++
++/*
++ * Block device hooks.
++ *
++ */
++
++static DECLARE_MUTEX(open_lock);
++
++static int stsd_open(struct block_device *bdev, fmode_t mode)
++{
++ struct stsd_host *host = bdev->bd_disk->private_data;
++ int error = 0;
++
++ if (!host || host->fd < 0)
++ return -ENXIO;
++
++ /* honor exclusive open mode */
++ if (host->refcnt == -1 ||
++ (host->refcnt && (mode & FMODE_EXCL))) {
++ error = -EBUSY;
++ goto out;
++ }
++
++ /* this takes care of revalidating the media if needed */
++ check_disk_change(bdev);
++ if (!host->card.csd.capacity) {
++ error = -ENOMEDIUM;
++ goto out;
++ }
++
++ down(&open_lock);
++
++ if ((mode & FMODE_EXCL))
++ host->refcnt = -1;
++ else
++ host->refcnt++;
++
++ up(&open_lock);
++
++out:
++ return error;
++
++}
++
++static int stsd_release(struct gendisk *disk, fmode_t mode)
++{
++ struct stsd_host *host = disk->private_data;
++
++ if (!host)
++ return -ENXIO;
++
++ down(&open_lock);
++
++ if (host->refcnt > 0)
++ host->refcnt--;
++ else
++ host->refcnt = 0;
++
++ up(&open_lock);
++
++ if (!host->refcnt && host->fd == -1)
++ kfree(host);
++
++ return 0;
++}
++
++static int stsd_media_changed(struct gendisk *disk)
++{
++ struct stsd_host *host = disk->private_data;
++ unsigned int last_serial;
++ int error;
++
++ /* report a media change for zombies */
++ if (!host)
++ return 1;
++
++ /* report a media change if someone forced it */
++ if (test_bit(__STSD_MEDIA_CHANGED, &host->flags))
++ return 1;
++
++ /* REVISIT use the starlet provided iotcl to check the status */
++
++ mutex_lock(&host->io_mutex);
++
++ /* check if the serial number of the card changed */
++ last_serial = host->card.cid.serial;
++ error = stsd_cmd_deselect_card(host);
++ if (!error) {
++ error = stsd_cmd_read_cid(host);
++ if (!error)
++ error = stsd_cmd_select_card(host);
++ }
++
++ mutex_unlock(&host->io_mutex);
++
++ if (!error && last_serial == host->card.cid.serial && last_serial)
++ clear_bit(__STSD_MEDIA_CHANGED, &host->flags);
++ else
++ set_bit(__STSD_MEDIA_CHANGED, &host->flags);
++
++ return (host->flags & STSD_MEDIA_CHANGED) ? 1 : 0;
++}
++
++static int stsd_revalidate_disk(struct gendisk *disk)
++{
++ struct stsd_host *host = disk->private_data;
++ int error = 0;
++
++ /* report missing medium for zombies */
++ if (!host) {
++ error = -ENOMEDIUM;
++ goto out;
++ }
++
++ /* the block layer likes to call us multiple times... */
++ if (!stsd_media_changed(host->disk))
++ goto out;
++
++ /* get the card into a known status */
++ error = stsd_welcome_card(host);
++ if (error < 0 || stsd_card_is_bad(host)) {
++ drv_printk(KERN_ERR, "card welcome failed\n");
++ if (stsd_card_is_bad(host))
++ drv_printk(KERN_ERR, "stsd_card_is_bad() true\n");
++ if (error < 0)
++ drv_printk(KERN_ERR, "error = %d\n", error);
++ error = -ENOMEDIUM;
++ /* FALL THROUGH */
++ }
++
++ /* inform the block layer about various sizes */
++ blk_queue_hardsect_size(host->queue, KERNEL_SECTOR_SIZE);
++ set_capacity(host->disk, host->card.csd.capacity <<
++ (host->card.csd.read_blkbits - KERNEL_SECTOR_SHIFT));
++
++ clear_bit(__STSD_MEDIA_CHANGED, &host->flags);
++
++out:
++ if (error)
++ DBG("%s: error=%d (%08x)\n", __func__, error, error);
++ return error;
++}
++
++static int stsd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
++{
++ geo->cylinders = get_capacity(bdev->bd_disk) / (4 * 16);
++ geo->heads = 4;
++ geo->sectors = 16;
++ return 0;
++}
++
++static struct block_device_operations stsd_fops = {
++ .owner = THIS_MODULE,
++ .open = stsd_open,
++ .release = stsd_release,
++ .revalidate_disk = stsd_revalidate_disk,
++ .media_changed = stsd_media_changed,
++ .getgeo = stsd_getgeo,
++};
++
++/*
++ * Setup routines.
++ *
++ */
++
++static int stsd_init_xfer(struct stsd_host *host)
++{
++ struct stsd_xfer *xfer;
++
++ xfer = starlet_kzalloc(sizeof(*xfer), GFP_KERNEL);
++ if (!xfer)
++ return -ENOMEM;
++
++ xfer->reply_len = 4 * sizeof(u32);
++ xfer->reply = starlet_ioh_kzalloc(xfer->reply_len);
++ if (!xfer->reply) {
++ starlet_kfree(xfer);
++ return -ENOMEM;
++ }
++ xfer->cmd = starlet_ioh_kzalloc(sizeof(*xfer->cmd));
++ if (!xfer->cmd) {
++ starlet_ioh_kfree(xfer->reply);
++ starlet_kfree(xfer);
++ return -ENOMEM;
++ }
++ xfer->bounce_buf_size = STSD_MAX_SECTORS * KERNEL_SECTOR_SIZE;
++ xfer->bounce_buf = starlet_ioh_kzalloc(xfer->bounce_buf_size);
++ if (!xfer->bounce_buf) {
++ starlet_ioh_kfree(xfer->cmd);
++ starlet_ioh_kfree(xfer->reply);
++ starlet_kfree(xfer);
++ return -ENOMEM;
++ }
++ xfer->dma_addr = starlet_ioh_virt_to_phys(xfer->bounce_buf);
++
++ xfer->blk_size = KERNEL_SECTOR_SIZE;
++
++ host->xfer = xfer;
++
++ return 0;
++}
++
++static void stsd_exit_xfer(struct stsd_host *host)
++{
++ struct stsd_xfer *xfer = host->xfer;
++
++ starlet_ioh_kfree(xfer->cmd);
++ starlet_ioh_kfree(xfer->reply);
++ starlet_kfree(host->xfer);
++}
++
++static int stsd_init_blk_dev(struct stsd_host *host)
++{
++ struct gendisk *disk;
++ struct request_queue *queue;
++ int error;
++
++ mutex_init(&host->io_mutex);
++
++ /* queue */
++ error = -ENOMEM;
++ spin_lock_init(&host->queue_lock);
++ queue = blk_init_queue(stsd_request_func, &host->queue_lock);
++ if (!queue) {
++ drv_printk(KERN_ERR, "error initializing queue\n");
++ goto err_blk_init_queue;
++ }
++ host->max_phys_segments = 1;
++ blk_queue_max_phys_segments(queue, host->max_phys_segments);
++ blk_queue_max_hw_segments(queue, host->max_phys_segments);
++ blk_queue_max_sectors(queue, STSD_MAX_SECTORS); /* 16 * 512 = 8K */
++ blk_queue_dma_alignment(queue, STARLET_IPC_DMA_ALIGN);
++ queue->queuedata = host;
++ host->queue = queue;
++
++ /* disk */
++ disk = alloc_disk(1 << MMC_SHIFT);
++ if (!disk) {
++ drv_printk(KERN_ERR, "error allocating disk\n");
++ goto err_alloc_disk;
++ }
++ disk->major = STSD_MAJOR;
++ disk->first_minor = 0 << MMC_SHIFT;
++ disk->fops = &stsd_fops;
++ sprintf(disk->disk_name, "%s%c", STSD_NAME, 'a');
++ disk->private_data = host;
++ disk->queue = host->queue;
++ host->disk = disk;
++
++ error = 0;
++ goto out;
++
++err_alloc_disk:
++ blk_cleanup_queue(host->queue);
++ host->queue = NULL;
++err_blk_init_queue:
++out:
++ return error;
++}
++
++static void stsd_exit_blk_dev(struct stsd_host *host)
++{
++ blk_cleanup_queue(host->queue);
++ put_disk(host->disk);
++}
++
++static int stsd_init_io_thread(struct stsd_host *host)
++{
++ int result = 0;
++
++ host->io_thread = kthread_run(stsd_io_thread, host, "ksdio");
++ if (IS_ERR(host->io_thread)) {
++ drv_printk(KERN_ERR, "error creating io thread\n");
++ result = PTR_ERR(host->io_thread);
++ }
++ return result;
++}
++
++static void stsd_exit_io_thread(struct stsd_host *host)
++{
++ if (!IS_ERR(host->io_thread)) {
++ wake_up_process(host->io_thread);
++ kthread_stop(host->io_thread);
++ host->io_thread = ERR_PTR(-EINVAL);
++ }
++}
++
++static int stsd_init(struct stsd_host *host)
++{
++ int error;
++
++ host->refcnt = 0;
++ spin_lock_init(&host->lock);
++ set_bit(__STSD_MEDIA_CHANGED, &host->flags);
++ host->f_max = 25000000; /* 25MHz */
++
++ host->fd = starlet_open(stsd_dev_sdio_slot0, 0);
++ if (host->fd < 0) {
++ drv_printk(KERN_ERR, "unable to open %s\n",
++ stsd_dev_sdio_slot0);
++ return -ENODEV;
++ }
++
++ error = stsd_init_blk_dev(host);
++ if (error)
++ goto out;
++
++ error = stsd_init_xfer(host);
++ if (error)
++ goto err_blk_dev;
++
++ error = stsd_revalidate_disk(host->disk);
++#if 0
++ if (error < 0 || !mmc_card_present(&host->card)) {
++ error = -ENODEV;
++ goto err_xfer;
++ }
++#endif
++
++ error = stsd_init_io_thread(host);
++ if (error)
++ goto err_xfer;
++
++ add_disk(host->disk);
++
++ return 0;
++
++err_xfer:
++ stsd_exit_xfer(host);
++err_blk_dev:
++ stsd_exit_blk_dev(host);
++out:
++ return error;
++}
++
++static void stsd_exit(struct stsd_host *host)
++{
++ del_gendisk(host->disk);
++ stsd_exit_io_thread(host);
++ stsd_exit_xfer(host);
++ stsd_exit_blk_dev(host);
++ if (host->fd >= 0)
++ starlet_close(host->fd);
++ host->fd = -1;
++
++}
++
++static void stsd_kill(struct stsd_host *host)
++{
++ if (host->refcnt > 0) {
++ drv_printk(KERN_ERR, "hey! card removed while in use!\n");
++ set_bit(__STSD_MEDIA_CHANGED, &host->flags);
++ }
++
++ stsd_exit(host);
++
++ /* release the host immediately when not in use */
++ if (!host->refcnt)
++ kfree(host);
++}
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int __devinit stsd_do_probe(struct device *dev)
++{
++ struct stsd_host *host;
++ int error;
++
++ host = kzalloc(sizeof(*host), GFP_KERNEL);
++ if (!host) {
++ drv_printk(KERN_ERR, "%s: failed to allocate stsd_host\n",
++ __func__);
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, host);
++ host->dev = dev;
++
++ error = stsd_init(host);
++ if (error) {
++ kfree(host);
++ dev_set_drvdata(dev, NULL);
++ }
++
++ return error;
++}
++
++static int __devexit stsd_do_remove(struct device *dev)
++{
++ struct stsd_host *host = dev_get_drvdata(dev);
++
++ if (!host)
++ return -ENODEV;
++
++ stsd_kill(host);
++ dev_set_drvdata(dev, NULL);
++
++ return 0;
++}
++
++/*
++ * OF platform device routines.
++ *
++ */
++
++static int __init stsd_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ return stsd_do_probe(&odev->dev);
++}
++
++static int __exit stsd_of_remove(struct of_device *odev)
++{
++ return stsd_do_remove(&odev->dev);
++}
++
++static struct of_device_id stsd_of_match[] = {
++ { .compatible = "nintendo,starlet-sd" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, stsd_of_match);
++
++static struct of_platform_driver stsd_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = stsd_of_match,
++ .probe = stsd_of_probe,
++ .remove = stsd_of_remove,
++};
++
++
++/*
++ * Kernel module interface.
++ *
++ */
++
++static int __init stsd_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ stsd_driver_version);
++
++ if (register_blkdev(STSD_MAJOR, DRV_MODULE_NAME)) {
++ drv_printk(KERN_ERR, "unable to register major %d\n",
++ STSD_MAJOR);
++ return -EIO;
++ }
++
++ return of_register_platform_driver(&stsd_of_driver);
++}
++
++static void __exit stsd_exit_module(void)
++{
++ of_unregister_platform_driver(&stsd_of_driver);
++ unregister_blkdev(STSD_MAJOR, DRV_MODULE_NAME);
++}
++
++module_init(stsd_init_module);
++module_exit(stsd_exit_module);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/exi/Kconfig b/drivers/exi/Kconfig
+new file mode 100644
+index 0000000..c810782
+--- /dev/null
++++ b/drivers/exi/Kconfig
+@@ -0,0 +1,20 @@
++#
++# Nintendo GameCube EXI (Expansion Interface) support.
++#
++
++if GAMECUBE_COMMON
++
++menu "EXI support"
++
++config GAMECUBE_EXI
++ bool "Nintendo GameCube/Wii External Interface (EXI)"
++ default y
++ help
++ On the External Interface sit the memory card slots,
++ serial ports I & II, the Mask ROM, RTC, SRAM and UART.
++
++ If in doubt, say Y here.
++
++endmenu
++
++endif
+diff --git a/drivers/exi/Makefile b/drivers/exi/Makefile
+new file mode 100644
+index 0000000..eb80bce
+--- /dev/null
++++ b/drivers/exi/Makefile
+@@ -0,0 +1,5 @@
++#
++# Makefile for the EXI bus core.
++#
++
++obj-$(CONFIG_GAMECUBE_EXI) += exi-driver.o exi-hw.o
+diff --git a/drivers/exi/exi-driver.c b/drivers/exi/exi-driver.c
+new file mode 100644
+index 0000000..ae173a5
+--- /dev/null
++++ b/drivers/exi/exi-driver.c
+@@ -0,0 +1,515 @@
++/*
++ * drivers/exi/exi-driver.c
++ *
++ * Nintendo GameCube EXternal Interface (EXI) driver model routines.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004 Arthur Othieno <a.othieno@bluewin.ch>
++ * Copyright (C) 2004,2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2005,2006,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/delay.h>
++#include <linux/exi.h>
++#include <linux/init.h>
++#include <linux/kthread.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++
++#define DRV_MODULE_NAME "exi"
++#define DRV_DESCRIPTION "Nintendo GameCube/Wii EXternal Interface (EXI) driver"
++#define DRV_AUTHOR "Arthur Othieno <a.othieno@bluewin.ch>, " \
++ "Todd Jeffreys <todd@voidpointer.org>, " \
++ "Albert Herranz"
++
++static char exi_driver_version[] = "4.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++struct exi_map_id_to_name {
++ unsigned int id;
++ char *name;
++};
++
++
++static void exi_bus_device_release(struct device *dev);
++static int exi_bus_match(struct device *dev, struct device_driver *drv);
++
++
++static struct bus_type exi_bus_type = {
++ .name = "exi",
++ .match = exi_bus_match,
++};
++EXPORT_SYMBOL(exi_bus_type);
++
++static struct device exi_bus_devices[EXI_MAX_CHANNELS] = {
++ [0] = {
++ .bus_id = "exi0",
++ .release = exi_bus_device_release,
++ .parent = NULL
++ },
++ [1] = {
++ .bus_id = "exi1",
++ .release = exi_bus_device_release,
++ .parent = NULL
++ },
++ [2] = {
++ .bus_id = "exi2",
++ .release = exi_bus_device_release,
++ .parent = NULL
++ },
++};
++
++static struct exi_device exi_devices[EXI_MAX_CHANNELS][EXI_DEVICES_PER_CHANNEL];
++
++static struct exi_map_id_to_name exi_map_id_to_name[] = {
++ { .id = EXI_ID_NONE, .name = "(external card)" },
++ { .id = 0xffff1698, .name = "GameCube Mask ROM/RTC/SRAM/UART" },
++ { .id = 0xfffff308, .name = "Wii Mask ROM/RTC/SRAM/UART" },
++ { .id = 0x00000004, .name = "Memory Card 59" },
++ { .id = 0x00000008, .name = "Memory Card 123" },
++ { .id = 0x00000010, .name = "Memory Card 251" },
++ { .id = 0x00000020, .name = "Memory Card 507" },
++ { .id = 0x00000040, .name = "Memory Card 1019" },
++ { .id = 0x00000080, .name = "Memory Card 2043" },
++ { .id = 0x01010000, .name = "USB Adapter" },
++ { .id = 0x01020000, .name = "NPDP GDEV" },
++ { .id = 0x02020000, .name = "Modem" },
++ { .id = 0x03010000, .name = "Marlin?" },
++ { .id = 0x04020200, .name = "BroadBand Adapter (DOL-015)" },
++ { .id = 0x04120000, .name = "AD16" },
++ { .id = 0x05070000, .name = "IS Viewer" },
++ { .id = 0x0a000000, .name = "Microphone (DOL-022)" },
++ { .id = 0 }
++};
++
++/*
++ * Internal. Return the friendly name of an exi identifier.
++ */
++static const char *exi_name_id(unsigned int id)
++{
++ struct exi_map_id_to_name *map = exi_map_id_to_name;
++
++ while (map->id) {
++ if (map->id == id)
++ return map->name;
++ map++;
++ }
++ return "Unknown";
++}
++
++/*
++ * Internal. Check if an exi device matches a given exi device id.
++ */
++static int exi_device_match_one(const struct exi_device_id *eid,
++ const struct exi_device *exi_device)
++{
++ /*
++ * We allow drivers to claim devices that do not provide
++ * EXI identifiers by matching directly on channel/device.
++ * These drivers must use EXI_ID_NONE on their eids.
++ */
++ if (eid->id == exi_device->eid.id || eid->id == EXI_ID_NONE) {
++ /* match against channel and device */
++ if (exi_device->eid.channel == eid->channel &&
++ exi_device->eid.device == eid->device) {
++ return 1;
++ }
++ }
++ return 0;
++}
++
++/*
++ * Internal. Check if an exi device matches a given set of exi device ids.
++ * Return the exi device identifier or %NULL if there is no match.
++ */
++static const struct exi_device_id *
++exi_device_match(const struct exi_device_id *eids,
++ const struct exi_device *exi_device)
++{
++ while (eids && eids->id) {
++ if (exi_device_match_one(eids, exi_device))
++ return eids;
++ eids++;
++ }
++ return NULL;
++}
++
++/*
++ * Internal. Used to check if an exi device is supported by an exi driver.
++ */
++static int exi_bus_match(struct device *dev, struct device_driver *drv)
++{
++ struct exi_device *exi_device = to_exi_device(dev);
++ struct exi_driver *exi_driver = to_exi_driver(drv);
++ const struct exi_device_id *eids = exi_driver->eid_table;
++
++ if (eids && exi_device_match(eids, exi_device))
++ return 1;
++ return 0;
++}
++
++/*
++ * Internal. Bus device release.
++ */
++static void exi_bus_device_release(struct device *dev)
++{
++ drv_printk(KERN_WARNING, "exi_bus_device_release called!\n");
++}
++
++static void exi_device_release(struct device *dev);
++
++/*
++ * Internal. Initialize an exi_device structure.
++ */
++static void exi_device_init(struct exi_device *exi_device,
++ unsigned int channel, unsigned int device)
++{
++ memset(exi_device, 0, sizeof(*exi_device));
++
++ exi_device->eid.id = EXI_ID_INVALID;
++ exi_device->eid.channel = channel;
++ exi_device->eid.device = device;
++ exi_device->frequency = EXI_FREQ_SCAN;
++
++ exi_device->exi_channel = to_exi_channel(channel);
++
++ exi_device->dev.parent = &exi_bus_devices[channel];
++ exi_device->dev.bus = &exi_bus_type;
++ sprintf(exi_device->dev.bus_id, "exi%01x:%01x", channel, device);
++ exi_device->dev.platform_data = to_exi_channel(channel);
++ exi_device->dev.release = exi_device_release;
++}
++
++/*
++ * Internal. Device release.
++ */
++static void exi_device_release(struct device *dev)
++{
++ struct exi_device *exi_device = to_exi_device(dev);
++ unsigned int channel, device;
++
++ channel = exi_device->eid.channel;
++ device = exi_device->eid.device;
++
++ exi_device_init(exi_device, channel, device);
++}
++
++/**
++ * exi_device_get - Increments the reference count of the exi device
++ * @exi_device: device being referenced
++ *
++ * Each live reference to an exi device should be refcounted.
++ * A pointer to the device with the incremented reference counter
++ * is returned.
++ */
++struct exi_device *exi_device_get(struct exi_device *exi_device)
++{
++ if (exi_device)
++ get_device(&exi_device->dev);
++ return exi_device;
++}
++EXPORT_SYMBOL(exi_device_get);
++
++/**
++ * exi_device_put - Releases a use of the exi device
++ * @exi_device: device that's been disconnected
++ *
++ * Must be called when a user of a device is finished with it.
++ */
++void exi_device_put(struct exi_device *exi_device)
++{
++ if (exi_device)
++ put_device(&exi_device->dev);
++}
++EXPORT_SYMBOL(exi_device_put);
++
++/**
++ * exi_get_exi_device - Returns a reference to an exi device
++ * @exi_channel: exi channel where the device is located
++ * @device: device number within the channel
++ */
++struct exi_device *exi_get_exi_device(struct exi_channel *exi_channel,
++ int device)
++{
++ /* REVISIT, take a ref here? */
++ return &exi_devices[to_channel(exi_channel)][device];
++}
++EXPORT_SYMBOL(exi_get_exi_device);
++
++/*
++ * Internal. Call device driver probe function on match.
++ */
++static int exi_device_probe(struct device *dev)
++{
++ struct exi_device *exi_device = to_exi_device(dev);
++ struct exi_driver *exi_driver = to_exi_driver(dev->driver);
++ const struct exi_device_id *eid;
++ int retval = -ENODEV;
++
++ if (!exi_driver->eid_table)
++ goto out;
++
++ eid = exi_device_match(exi_driver->eid_table, exi_device);
++ if (eid) {
++ exi_device->frequency = exi_driver->frequency;
++ if (exi_driver->probe)
++ retval = exi_driver->probe(exi_device);
++ }
++ if (retval >= 0)
++ retval = 0;
++
++out:
++ return retval;
++}
++
++/*
++ * Internal. Call device driver remove function.
++ */
++static int exi_device_remove(struct device *dev)
++{
++ struct exi_device *exi_device = to_exi_device(dev);
++ struct exi_driver *exi_driver = to_exi_driver(dev->driver);
++
++ if (exi_driver->remove)
++ exi_driver->remove(exi_device);
++
++ return 0;
++}
++
++
++/**
++ * exi_driver_register - register an EXI device driver.
++ * @driver: driver structure to register.
++ *
++ * Registers an EXI device driver with the bus
++ * and consequently with the driver model core.
++ */
++int exi_driver_register(struct exi_driver *driver)
++{
++ driver->driver.name = driver->name;
++ driver->driver.bus = &exi_bus_type;
++ driver->driver.probe = exi_device_probe;
++ driver->driver.remove = exi_device_remove;
++
++ return driver_register(&driver->driver);
++}
++EXPORT_SYMBOL(exi_driver_register);
++
++/**
++ * exi_driver_unregister - unregister an EXI device driver.
++ * @driver: driver structure to unregister.
++ *
++ * Unregisters an EXI device driver with the bus
++ * and consequently with the driver model core.
++ */
++void exi_driver_unregister(struct exi_driver *driver)
++{
++ driver_unregister(&driver->driver);
++}
++EXPORT_SYMBOL(exi_driver_unregister);
++
++
++/*
++ * Internal. Re-scan a given device.
++ */
++static void exi_device_rescan(struct exi_device *exi_device)
++{
++ unsigned int id;
++ int error;
++
++ /* now ID the device */
++ id = exi_get_id(exi_device);
++
++ if (exi_device->eid.id != EXI_ID_INVALID) {
++ /* device removed or changed */
++ drv_printk(KERN_INFO, "about to remove [%s] id=0x%08x %s\n",
++ exi_device->dev.bus_id,
++ exi_device->eid.id,
++ exi_name_id(exi_device->eid.id));
++ device_unregister(&exi_device->dev);
++ drv_printk(KERN_INFO, "remove completed\n");
++ exi_device->eid.id = EXI_ID_INVALID;
++ }
++
++ if (id != EXI_ID_INVALID) {
++ /* a new device has been found */
++ drv_printk(KERN_INFO, "about to add [%s] id=0x%08x %s\n",
++ exi_device->dev.bus_id,
++ id, exi_name_id(id));
++ exi_device->eid.id = id;
++ error = device_register(&exi_device->dev);
++ if (error) {
++ drv_printk(KERN_INFO, "add failed (%d)\n", error);
++ exi_device->eid.id = EXI_ID_INVALID;
++ } else
++ drv_printk(KERN_INFO, "add completed\n");
++ }
++
++ exi_update_ext_status(exi_get_exi_channel(exi_device));
++}
++
++/*
++ * Internal. Re-scan a given exi channel, looking for added, changed and
++ * removed exi devices.
++ */
++static void exi_channel_rescan(struct exi_channel *exi_channel)
++{
++ struct exi_device *exi_device;
++ unsigned int channel, device;
++
++ /* add the exi devices underneath the parents */
++ for (device = 0; device < EXI_DEVICES_PER_CHANNEL; ++device) {
++ channel = to_channel(exi_channel);
++ exi_device = &exi_devices[channel][device];
++ exi_device_rescan(exi_device);
++ }
++}
++
++/*
++ * Internal. Scans all the exi channels looking for exi devices.
++ */
++static void exi_bus_rescan(void)
++{
++ struct exi_channel *exi_channel;
++ unsigned int channel;
++
++ for (channel = 0; channel < EXI_MAX_CHANNELS; ++channel) {
++ exi_channel = to_exi_channel(channel);
++ exi_channel_rescan(exi_channel);
++ }
++}
++
++
++static struct task_struct *exi_bus_task;
++wait_queue_head_t exi_bus_waitq;
++
++/*
++ * Internal. Looks for new, changed or removed devices.
++ */
++static int exi_bus_thread(void *__unused)
++{
++ struct exi_channel *exi_channel;
++ struct exi_device *exi_device;
++ unsigned int channel;
++ int is_loaded, was_loaded;
++
++ while (!kthread_should_stop()) {
++ /* scan the memcard slot channels for device changes */
++ for (channel = 0; channel <= 1; ++channel) {
++ exi_channel = to_exi_channel(channel);
++
++ is_loaded = exi_get_ext_line(exi_channel);
++ was_loaded = (exi_channel->flags & EXI_EXT) ? 1 : 0;
++
++ if (is_loaded ^ was_loaded) {
++ exi_device = &exi_devices[channel][0];
++ exi_device_rescan(exi_device);
++ }
++ }
++
++ sleep_on_timeout(&exi_bus_waitq, HZ);
++ }
++
++ return 0;
++}
++
++/*
++ *
++ */
++static int exi_init(struct resource *mem, unsigned int irq)
++{
++ struct exi_channel *exi_channel;
++ struct exi_device *exi_device;
++ unsigned int channel, device;
++ int retval;
++
++ retval = exi_hw_init(DRV_MODULE_NAME, mem, irq);
++ if (retval)
++ goto err_hw_init;
++
++ /* initialize devices */
++ for (channel = 0; channel < EXI_MAX_CHANNELS; ++channel) {
++ exi_channel = to_exi_channel(channel);
++ for (device = 0; device < EXI_DEVICES_PER_CHANNEL; ++device) {
++ exi_device = &exi_devices[channel][device];
++ exi_device_init(exi_device, channel, device);
++ }
++ }
++
++ /* register root devices */
++ for (channel = 0; channel < EXI_MAX_CHANNELS; ++channel) {
++ retval = device_register(&exi_bus_devices[channel]);
++ if (retval)
++ goto err_device_register;
++ }
++
++ /* register the bus */
++ retval = bus_register(&exi_bus_type);
++ if (retval)
++ goto err_bus_register;
++
++ /* now enumerate through the bus and add all detected devices */
++ exi_bus_rescan();
++
++ /* setup a thread to manage plugable devices */
++ init_waitqueue_head(&exi_bus_waitq);
++ exi_bus_task = kthread_run(exi_bus_thread, NULL, "kexid");
++ if (IS_ERR(exi_bus_task))
++ drv_printk(KERN_WARNING, "failed to start exi kernel thread\n");
++
++ return 0;
++
++err_bus_register:
++err_device_register:
++ while (--channel > 0)
++ device_unregister(&exi_bus_devices[channel]);
++ exi_hw_exit(mem, irq);
++err_hw_init:
++ return retval;
++}
++
++/*
++ *
++ */
++static int __init exi_layer_init(void)
++{
++ struct device_node *np;
++ struct resource res;
++ int retval;
++
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ exi_driver_version);
++
++ np = of_find_compatible_node(NULL, NULL, "nintendo,flipper-exi");
++ if (!np) {
++ np = of_find_compatible_node(NULL, NULL,
++ "nintendo,hollywood-exi");
++ if (!np)
++ return -ENODEV;
++ }
++
++ retval = of_address_to_resource(np, 0, &res);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENOMEM;
++ }
++
++ retval = exi_init(&res, irq_of_parse_and_map(np, 0));
++ of_node_put(np);
++
++ return retval;
++}
++postcore_initcall(exi_layer_init);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/exi/exi-hw.c b/drivers/exi/exi-hw.c
+new file mode 100644
+index 0000000..de3414b
+--- /dev/null
++++ b/drivers/exi/exi-hw.c
+@@ -0,0 +1,1408 @@
++/*
++ * drivers/exi/exi-hw.c
++ *
++ * Nintendo GameCube EXpansion Interface support. Hardware routines.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004,2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2005,2006,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++/*
++ * IMPLEMENTATION NOTES
++ *
++ * The EXI Layer provides the following primitives:
++ *
++ * op atomic?
++ * ------------------ -------
++ * take yes
++ * give yes
++ * select yes
++ * deselect yes
++ * transfer yes/no (1)
++ *
++ * These primitives are encapsulated in several APIs.
++ * See include/linux/exi.h for additional information.
++ *
++ * 1. Kernel Contexts
++ *
++ * User, softirq and hardirq contexts are supported, with some limitations.
++ *
++ * Launching EXI operations in softirq or hardirq context requires kernel
++ * coordination to ensure channels are free before use.
++ *
++ * The EXI Layer Event System delivers events in softirq context, but it already
++ * makes provisions to ensure that channels are useable by the event handlers.
++ * Events are delivered only when the channels on the event handler
++ * channel mask are all deselected. This allows one to run EXI commands in
++ * softirq context from the EXI event handlers.
++ *
++ * "take" operations in user context will sleep if necessary until the
++ * channel is "given".
++ *
++ *
++ * 2. Transfers
++ *
++ * The EXI Layer provides a transfer API to perform read and write
++ * operations.
++ * By default, transfers partially or totally suitable for DMA will be
++ * partially or totally processed through DMA. The EXI Layer takes care of
++ * splitting a transfer in several pieces so the best transfer method is
++ * used each time.
++ *
++ * (1) A immediate mode transfer is atomic, but a DMA transfer is not.
++ */
++
++/*#define EXI_DEBUG 1*/
++
++#include <linux/types.h>
++#include <linux/dma-mapping.h>
++#include <linux/wait.h>
++#include <linux/delay.h>
++#include <linux/io.h>
++#include <linux/spinlock.h>
++
++#include <linux/exi.h>
++#include "exi-hw.h"
++
++
++#define drv_printk(level, format, arg...) \
++ printk(level "exi: " format , ## arg)
++
++#ifdef EXI_DEBUG
++# define DBG(fmt, args...) \
++ printk(KERN_ERR "%s: " fmt, __func__ , ## args)
++#else
++# define DBG(fmt, args...)
++#endif
++
++
++static void exi_tasklet(unsigned long param);
++
++
++/* io memory base for EXI */
++static void __iomem *exi_io_mem;
++
++
++/*
++ * These are the available exi channels.
++ */
++static struct exi_channel exi_channels[EXI_MAX_CHANNELS] = {
++ [0] = {
++ .channel = 0,
++ .lock = __SPIN_LOCK_UNLOCKED(exi_channels[0].lock),
++ .io_lock = __SPIN_LOCK_UNLOCKED(exi_channels[0].io_lock),
++ .wait_queue = __WAIT_QUEUE_HEAD_INITIALIZER(
++ exi_channels[0].wait_queue),
++ },
++ [1] = {
++ .channel = 1,
++ .lock = __SPIN_LOCK_UNLOCKED(exi_channels[1].lock),
++ .io_lock = __SPIN_LOCK_UNLOCKED(exi_channels[1].io_lock),
++ .wait_queue = __WAIT_QUEUE_HEAD_INITIALIZER(
++ exi_channels[1].wait_queue),
++ },
++ [2] = {
++ .channel = 2,
++ .lock = __SPIN_LOCK_UNLOCKED(exi_channels[2].lock),
++ .io_lock = __SPIN_LOCK_UNLOCKED(exi_channels[2].io_lock),
++ .wait_queue = __WAIT_QUEUE_HEAD_INITIALIZER(
++ exi_channels[2].wait_queue),
++ },
++};
++
++/* handy iterator for exi channels */
++#define exi_channel_for_each(pos) \
++ for (pos = &exi_channels[0]; pos < &exi_channels[EXI_MAX_CHANNELS]; \
++ pos++)
++
++/* conversions between channel numbers and exi channel structures */
++#define __to_exi_channel(channel) (&exi_channels[channel])
++#define __to_channel(exi_channel) (exi_channel->channel)
++
++/**
++ * to_exi_channel - returns an exi_channel given a channel number
++ * @channel: channel number
++ *
++ * Return the exi_channel structure associated to a given channel.
++ */
++struct exi_channel *to_exi_channel(unsigned int channel)
++{
++ if (channel > EXI_MAX_CHANNELS)
++ return NULL;
++
++ return __to_exi_channel(channel);
++}
++EXPORT_SYMBOL(to_exi_channel);
++
++/**
++ * to_channel - returns a channel number given an exi channel
++ * @exi_channel: channel
++ *
++ * Return the channel number for a given exi_channel structure.
++ */
++unsigned int to_channel(struct exi_channel *exi_channel)
++{
++ BUG_ON(exi_channel == NULL);
++
++ return __to_channel(exi_channel);
++}
++EXPORT_SYMBOL(to_channel);
++
++/**
++ * exi_channel_owner - returns the owner of the given channel
++ * @exi_channel: channel
++ *
++ * Return the device owning a given exi_channel structure.
++ */
++struct exi_device *exi_channel_owner(struct exi_channel *exi_channel)
++{
++ return exi_channel->owner;
++}
++
++
++/*
++ *
++ *
++ */
++
++/**
++ * exi_select_raw - selects a device on an exi channel
++ * @exi_channel: channel
++ * @device: device number on channel
++ * @freq: clock frequency index
++ *
++ * Select a given device on a specified EXI channel by setting its
++ * CS line, and use the specified clock frequency when doing transfers.
++ */
++void exi_select_raw(struct exi_channel *exi_channel, unsigned int device,
++ unsigned int freq)
++{
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ u32 csr;
++ unsigned long flags;
++
++ BUG_ON(device > EXI_DEVICES_PER_CHANNEL ||
++ freq > EXI_MAX_FREQ);
++
++ /*
++ * Preserve interrupt masks while setting the CS line bits.
++ */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ csr = in_be32(csr_reg);
++ csr &= (EXI_CSR_EXTINMASK | EXI_CSR_TCINTMASK | EXI_CSR_EXIINTMASK);
++ csr |= ((1<<device) << 7) | (freq << 4);
++ out_be32(csr_reg, csr);
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++}
++EXPORT_SYMBOL(exi_select_raw);
++
++
++/**
++ * exi_deselect_raw - deselects all devices on an exi channel
++ * @exi_channel: channel
++ *
++ * Deselect any device previously selected on the specified EXI
++ * channel by unsetting all CS lines.
++ */
++void exi_deselect_raw(struct exi_channel *exi_channel)
++{
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ u32 csr;
++ unsigned long flags;
++
++ /*
++ * Preserve interrupt masks while clearing the CS line bits.
++ */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ csr = in_be32(csr_reg);
++ csr &= (EXI_CSR_EXTINMASK | EXI_CSR_TCINTMASK | EXI_CSR_EXIINTMASK);
++ out_be32(csr_reg, csr);
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++}
++EXPORT_SYMBOL(exi_deselect_raw);
++
++/**
++ * exi_transfer_raw - performs an exi transfer using immediate mode
++ * @exi_channel: channel
++ * @data: pointer to data being read/writen
++ * @len: length of data
++ * @mode: direction of transfer (EXI_OP_{READ,READWRITE,WRITE})
++ *
++ * Read or write data on a given EXI channel.
++ *
++ */
++void exi_transfer_raw(struct exi_channel *exi_channel,
++ void *data, size_t len, int mode)
++{
++ while (len >= 4) {
++ __exi_transfer_raw_u32(exi_channel, data, mode);
++ exi_channel->stats_xfers++;
++ data += 4;
++ len -= 4;
++ }
++
++ switch (len) {
++ case 1:
++ __exi_transfer_raw_u8(exi_channel, data, mode);
++ exi_channel->stats_xfers++;
++ break;
++ case 2:
++ __exi_transfer_raw_u16(exi_channel, data, mode);
++ exi_channel->stats_xfers++;
++ break;
++ case 3:
++ /* XXX optimize this case */
++ __exi_transfer_raw_u16(exi_channel, data, mode);
++ exi_channel->stats_xfers++;
++ __exi_transfer_raw_u8(exi_channel, data+2, mode);
++ exi_channel->stats_xfers++;
++ break;
++ default:
++ break;
++ }
++}
++EXPORT_SYMBOL(exi_transfer_raw);
++
++/*
++ * Internal. Start a transfer using "interrupt-driven immediate" mode.
++ */
++static void exi_start_idi_transfer_raw(struct exi_channel *exi_channel,
++ void *data, size_t len, int mode)
++{
++ void __iomem *io_base = exi_channel->io_base;
++ u32 __iomem *csr_reg = io_base + EXI_CSR;
++ u32 val = ~0;
++ unsigned long flags;
++
++ BUG_ON(len < 1 || len > 4);
++
++ exi_channel->stats_idi_xfers++;
++ exi_channel->stats_xfers++;
++
++ if ((mode & EXI_OP_WRITE)) {
++ switch (len) {
++ case 1:
++ val = *((u8 *)data) << 24;
++ break;
++ case 2:
++ val = *((u16 *)data) << 16;
++ break;
++ case 3:
++ val = *((u16 *)data) << 16;
++ val |= *((u8 *)data+2) << 8;
++ break;
++ case 4:
++ val = *((u32 *)data);
++ break;
++ default:
++ break;
++ }
++ }
++
++ out_be32(io_base + EXI_DATA, val);
++
++ /* enable the Transfer Complete interrupt */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ out_be32(csr_reg, in_be32(csr_reg) | EXI_CSR_TCINTMASK);
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++
++ /* start the transfer */
++ out_be32(io_base + EXI_CR,
++ EXI_CR_TSTART | EXI_CR_TLEN(len) | (mode&0xf));
++}
++
++/*
++ * Internal. Finish a transfer using "interrupt-driven immediate" mode.
++ */
++static void exi_end_idi_transfer_raw(struct exi_channel *exi_channel,
++ void *data, size_t len, int mode)
++{
++ void __iomem *io_base = exi_channel->io_base;
++ u32 val = ~0;
++
++ BUG_ON(len < 1 || len > 4);
++
++ if ((mode&0xf) != EXI_OP_WRITE) {
++ val = in_be32(io_base + EXI_DATA);
++ switch (len) {
++ case 1:
++ *((u8 *)data) = (u8)(val >> 24);
++ break;
++ case 2:
++ *((u16 *)data) = (u16)(val >> 16);
++ break;
++ case 3:
++ *((u16 *)data) = (u16)(val >> 16);
++ *((u8 *)data+2) = (u8)(val >> 8);
++ break;
++ case 4:
++ *((u32 *)data) = (u32)(val);
++ break;
++ default:
++ break;
++ }
++ }
++}
++
++/*
++ * Internal. Start a transfer using DMA mode.
++ */
++static void exi_start_dma_transfer_raw(struct exi_channel *exi_channel,
++ dma_addr_t data, size_t len, int mode)
++{
++ void __iomem *io_base = exi_channel->io_base;
++ u32 __iomem *csr_reg = io_base + EXI_CSR;
++ unsigned long flags;
++
++ BUG_ON((data & EXI_DMA_ALIGN) != 0 ||
++ (len & EXI_DMA_ALIGN) != 0);
++
++ exi_channel->stats_dma_xfers++;
++ exi_channel->stats_xfers++;
++
++ /*
++ * We clear the DATA register here to avoid confusing some
++ * special hardware, like SD cards.
++ * Indeed, we need all 1s here.
++ */
++ out_be32(io_base + EXI_DATA, ~0);
++
++ /* setup address and length of transfer */
++ out_be32(io_base + EXI_MAR, data);
++ out_be32(io_base + EXI_LENGTH, len);
++
++ /* enable the Transfer Complete interrupt */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ out_be32(csr_reg, in_be32(csr_reg) | EXI_CSR_TCINTMASK);
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++
++ /* start the transfer */
++ out_be32(io_base + EXI_CR, EXI_CR_TSTART | EXI_CR_DMA | (mode&0xf));
++}
++
++
++/*
++ * Internal. Busy-wait until a DMA mode transfer operation completes.
++ */
++static void exi_wait_for_transfer_raw(struct exi_channel *exi_channel)
++{
++ u32 __iomem *cr_reg = exi_channel->io_base + EXI_CR;
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ unsigned long flags;
++ unsigned long deadline = jiffies + 2*HZ;
++ int borked = 0;
++
++ /* we don't want TCINTs to disturb us while waiting */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ out_be32(csr_reg, in_be32(csr_reg) & ~EXI_CSR_TCINTMASK);
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++
++ /* busy-wait for transfer complete */
++ while ((in_be32(cr_reg)&EXI_CR_TSTART) && !borked) {
++ cpu_relax();
++ borked = time_after(jiffies, deadline);
++ }
++
++ if (borked) {
++ drv_printk(KERN_ERR, "exi transfer took too long, "
++ "is your hardware ok?");
++ }
++
++ /* ack the Transfer Complete interrupt */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ out_be32(csr_reg, in_be32(csr_reg) | EXI_CSR_TCINT);
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++}
++
++
++/*
++ *
++ *
++ */
++
++static void exi_command_done(struct exi_command *cmd);
++
++/*
++ * Internal. Initialize an exi_channel structure.
++ */
++void exi_channel_init(struct exi_channel *exi_channel, unsigned int channel)
++{
++ memset(exi_channel, 0, sizeof(*exi_channel));
++ exi_channel->events[EXI_EVENT_IRQ].id = EXI_EVENT_IRQ;
++ exi_channel->events[EXI_EVENT_INSERT].id = EXI_EVENT_INSERT;
++ exi_channel->events[EXI_EVENT_TC].id = EXI_EVENT_TC;
++
++ spin_lock_init(&exi_channel->lock);
++ spin_lock_init(&exi_channel->io_lock);
++ init_waitqueue_head(&exi_channel->wait_queue);
++
++ exi_channel->channel = channel;
++ exi_channel->io_base = exi_io_mem + channel * EXI_CHANNEL_SPACING;
++
++ tasklet_init(&exi_channel->tasklet,
++ exi_tasklet, (unsigned long)exi_channel);
++}
++
++/*
++ * Internal. Check if an exi channel has delayed work to do.
++ */
++static void exi_check_pending_work(void)
++{
++ struct exi_channel *exi_channel;
++
++ exi_channel_for_each(exi_channel) {
++ if (exi_channel->csr)
++ tasklet_schedule(&exi_channel->tasklet);
++ }
++}
++
++/*
++ * Internal. Finish a DMA transfer.
++ * Caller holds the channel lock.
++ */
++static void exi_end_dma_transfer(struct exi_channel *exi_channel)
++{
++ struct exi_command *cmd;
++
++ cmd = exi_channel->queued_cmd;
++ if (cmd) {
++ BUG_ON(!(exi_channel->flags & EXI_DMABUSY));
++
++ exi_channel->flags &= ~EXI_DMABUSY;
++ dma_unmap_single(&exi_channel->owner->dev,
++ cmd->dma_addr, cmd->dma_len,
++ (cmd->opcode == EXI_OP_READ) ?
++ DMA_FROM_DEVICE : DMA_TO_DEVICE);
++
++ exi_channel->queued_cmd = NULL;
++ }
++}
++
++/*
++ * Internal. Finish an "interrupt-driven immediate" transfer.
++ * Caller holds the channel lock.
++ *
++ * If more data is pending transfer, it schedules a new transfer.
++ * Returns zero if no more transfers are required, non-zero otherwise.
++ *
++ */
++static int exi_end_idi_transfer(struct exi_channel *exi_channel)
++{
++ struct exi_command *cmd;
++ int len, offset;
++ unsigned int balance = 16 /* / sizeof(u32) */;
++
++ cmd = exi_channel->queued_cmd;
++ if (cmd) {
++ BUG_ON((exi_channel->flags & EXI_DMABUSY));
++
++ len = (cmd->bytes_left > 4) ? 4 : cmd->bytes_left;
++ offset = cmd->len - cmd->bytes_left;
++ exi_end_idi_transfer_raw(exi_channel,
++ cmd->data + offset, len,
++ cmd->opcode);
++ cmd->bytes_left -= len;
++
++ if (balance && cmd->bytes_left > 0) {
++ offset += len;
++ len = (cmd->bytes_left > balance) ?
++ balance : cmd->bytes_left;
++ exi_transfer_raw(exi_channel,
++ cmd->data + offset, len, cmd->opcode);
++ cmd->bytes_left -= len;
++ }
++
++ if (cmd->bytes_left > 0) {
++ offset = cmd->len - cmd->bytes_left;
++ len = (cmd->bytes_left > 4) ? 4 : cmd->bytes_left;
++
++ exi_start_idi_transfer_raw(exi_channel,
++ cmd->data + offset, len,
++ cmd->opcode);
++ } else {
++ exi_channel->queued_cmd = NULL;
++ }
++ }
++
++ return (exi_channel->queued_cmd) ? 1 : 0;
++}
++
++/*
++ * Internal. Wait until a single transfer completes, and launch callbacks
++ * when the whole transfer is completed.
++ */
++static int exi_wait_for_transfer_one(struct exi_channel *exi_channel)
++{
++ struct exi_command *cmd;
++ unsigned long flags;
++ int pending = 0;
++
++ spin_lock_irqsave(&exi_channel->lock, flags);
++
++ exi_wait_for_transfer_raw(exi_channel);
++
++ cmd = exi_channel->queued_cmd;
++ if (cmd) {
++ if ((exi_channel->flags & EXI_DMABUSY)) {
++ /* dma transfers need just one transfer */
++ exi_end_dma_transfer(exi_channel);
++ } else {
++ pending = exi_end_idi_transfer(exi_channel);
++ }
++
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++
++ if (!pending)
++ exi_command_done(cmd);
++ goto out;
++ }
++
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++out:
++ return pending;
++}
++
++#if 0
++/*
++ * Internal. Wait until a full transfer completes and launch callbacks.
++ */
++static void exi_wait_for_transfer(struct exi_channel *exi_channel)
++{
++ while (exi_wait_for_transfer_one(exi_channel))
++ cpu_relax();
++}
++#endif
++
++/*
++ * Internal. Call any done hooks.
++ */
++static void exi_command_done(struct exi_command *cmd)
++{
++ /* if specified, call the completion routine */
++ if (cmd->done)
++ cmd->done(cmd);
++}
++
++/*
++ * Internal. Take a channel.
++ */
++static int exi_take_channel(struct exi_channel *exi_channel,
++ struct exi_device *exi_device, int wait)
++{
++ unsigned long flags;
++ int result = 0;
++
++ BUG_ON(!exi_device);
++
++ spin_lock_irqsave(&exi_channel->lock, flags);
++ while (exi_channel->owner) {
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++ if (!wait)
++ return -EBUSY;
++ wait_event(exi_channel->wait_queue,
++ !exi_channel->owner);
++ spin_lock_irqsave(&exi_channel->lock, flags);
++ }
++ exi_channel->owner = exi_device;
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++
++ return result;
++}
++
++/*
++ * Internal. Give a channel.
++ */
++static int exi_give_channel(struct exi_channel *exi_channel)
++{
++ WARN_ON(exi_channel->owner == NULL);
++ exi_channel->owner = NULL;
++ wake_up(&exi_channel->wait_queue);
++ return 0;
++}
++
++/*
++ * Internal. Perform the post non-DMA transfer associated to a DMA transfer.
++ */
++static void exi_cmd_post_transfer(struct exi_command *cmd)
++{
++ struct exi_channel *exi_channel = cmd->exi_channel;
++ struct exi_command *post_cmd = &exi_channel->post_cmd;
++
++ DBG("channel=%d\n", exi_channel->channel);
++
++ exi_transfer_raw(exi_channel, post_cmd->data, post_cmd->len,
++ post_cmd->opcode);
++
++ cmd->done_data = post_cmd->done_data;
++ cmd->done = post_cmd->done;
++ exi_op_nop(post_cmd, exi_channel);
++ exi_command_done(cmd);
++}
++
++
++#define exi_align_next(x) (void *) \
++ (((unsigned long)(x)+EXI_DMA_ALIGN)&~EXI_DMA_ALIGN)
++#define exi_align_prev(x) (void *) \
++ ((unsigned long)(x)&~EXI_DMA_ALIGN)
++#define exi_is_aligned(x) (void *) \
++ (!((unsigned long)(x)&EXI_DMA_ALIGN))
++
++/*
++ * Internal. Perform a transfer.
++ * Caller holds the channel lock.
++ */
++static int exi_cmd_transfer(struct exi_command *cmd)
++{
++ static u8 exi_aligned_transfer_buf[EXI_DMA_ALIGN+1]
++ __attribute__ ((aligned(EXI_DMA_ALIGN+1)));
++ struct exi_channel *exi_channel = cmd->exi_channel;
++ struct exi_command *post_cmd = &exi_channel->post_cmd;
++ void *pre_data, *data, *post_data;
++ unsigned int pre_len, len, post_len;
++ int opcode;
++ int result = 0;
++
++ BUG_ON(!exi_channel->owner);
++
++ len = cmd->len;
++ if (!len)
++ goto done;
++
++ DBG("channel=%d, opcode=%d\n", exi_channel->channel, cmd->opcode);
++
++ opcode = cmd->opcode;
++ data = cmd->data;
++
++ /* interrupt driven immediate transfer... */
++ if ((cmd->flags & EXI_CMD_IDI)) {
++ exi_channel->queued_cmd = cmd;
++ exi_channel->flags &= ~EXI_DMABUSY;
++
++ cmd->bytes_left = cmd->len;
++ len = (cmd->bytes_left > 4) ? 4 : cmd->bytes_left;
++ exi_start_idi_transfer_raw(exi_channel, data, len, opcode);
++
++ result = 1; /* wait */
++ goto done;
++ }
++
++ /*
++ * We can't do DMA transfers unless we have at least 32 bytes.
++ * And we won't do DMA transfers if user requests that.
++ */
++ if (len < EXI_DMA_ALIGN+1 || (cmd->flags & EXI_CMD_NODMA)) {
++ exi_transfer_raw(exi_channel, data, len, opcode);
++ goto done;
++ }
++
++ /*
++ * |_______________|______...______|_______________| DMA alignment
++ * <--pre_len--><---- len -----><-post_len->
++ * +-----------+------...------+-----------+
++ * | pre_data | data | post_data |
++ * | non-DMA | DMA | non-DMA |
++ * +-----------+------...------+-----------+
++ * < 32 bytes N*32 bytes < 32 bytes
++ * |<--------->|<-----...----->|<--------->|
++ * <-------------- cmd->len --------------->
++ */
++
++ pre_data = data;
++ post_data = exi_align_prev(pre_data+len);
++ data = exi_align_next(pre_data);
++
++ pre_len = data - pre_data;
++ post_len = (pre_data + len) - post_data;
++ len = post_data - data;
++
++ /*
++ * Coalesce pre and post data transfers if no DMA transfer is possible.
++ */
++ if (!len) {
++ /*
++ * Maximum transfer size here is 31+31=62 bytes.
++ */
++
++ /*
++ * On transfer sizes greater than or equal to 32 bytes
++ * we can optimize the transfer by performing a 32-byte
++ * DMA transfer using a specially aligned temporary buffer,
++ * followed by a non-DMA transfer for the remaining bytes.
++ */
++ if (pre_len + post_len > EXI_DMA_ALIGN) {
++ post_len = pre_len + post_len - (EXI_DMA_ALIGN+1);
++ post_data = pre_data + EXI_DMA_ALIGN+1;
++ len = EXI_DMA_ALIGN+1;
++ data = exi_aligned_transfer_buf;
++ memcpy(data, pre_data, EXI_DMA_ALIGN+1);
++ pre_len = 0;
++ } else {
++ exi_transfer_raw(exi_channel, pre_data,
++ pre_len + post_len, opcode);
++ goto done;
++ }
++ }
++
++ /*
++ * The first unaligned chunk can't use DMA.
++ */
++ if (pre_len > 0) {
++ /*
++ * Maximum transfer size here is 31 bytes.
++ */
++ exi_transfer_raw(exi_channel, pre_data, pre_len, opcode);
++ }
++
++ /*
++ * Perform a DMA transfer on the aligned data, followed by a non-DMA
++ * data transfer on the remaining data.
++ */
++ if (post_len > 0) {
++ /*
++ * Maximum transfer size here will be 31 bytes.
++ */
++ exi_op_transfer(post_cmd, exi_channel,
++ post_data, post_len, opcode);
++ post_cmd->done_data = cmd->done_data;
++ post_cmd->done = cmd->done;
++ cmd->done_data = NULL;
++ cmd->done = exi_cmd_post_transfer;
++ }
++
++ exi_channel->queued_cmd = cmd;
++ exi_channel->flags |= EXI_DMABUSY;
++
++ cmd->dma_len = len;
++ cmd->dma_addr = dma_map_single(&exi_channel->owner->dev,
++ data, len,
++ (cmd->opcode == EXI_OP_READ) ?
++ DMA_FROM_DEVICE : DMA_TO_DEVICE);
++
++ exi_start_dma_transfer_raw(exi_channel, cmd->dma_addr, len, opcode);
++
++ result = 1; /* wait */
++
++done:
++ return result;
++}
++
++/**
++ * exi_run_command - executes a single exi command
++ * @cmd: the command to execute
++ *
++ * Context: user
++ *
++ * Run just one command.
++ *
++ */
++static int exi_run_command(struct exi_command *cmd)
++{
++ struct exi_channel *exi_channel = cmd->exi_channel;
++ struct exi_device *exi_device = cmd->exi_device;
++ unsigned long flags;
++ int wait = !(cmd->flags & EXI_CMD_NOWAIT);
++ int result = 0;
++
++ if (cmd->opcode != EXI_OP_TAKE)
++ WARN_ON(exi_channel->owner != exi_device);
++
++ switch (cmd->opcode) {
++ case EXI_OP_NOP:
++ break;
++ case EXI_OP_TAKE:
++ result = exi_take_channel(exi_channel, exi_device, wait);
++ break;
++ case EXI_OP_GIVE:
++ result = exi_give_channel(exi_channel);
++ if (!exi_channel->owner)
++ exi_check_pending_work();
++ break;
++ case EXI_OP_SELECT:
++ exi_select_raw(exi_channel, exi_device->eid.device,
++ exi_device->frequency);
++ break;
++ case EXI_OP_DESELECT:
++ exi_deselect_raw(exi_channel);
++ break;
++ case EXI_OP_READ:
++ case EXI_OP_READWRITE:
++ case EXI_OP_WRITE:
++ spin_lock_irqsave(&exi_channel->lock, flags);
++ result = exi_cmd_transfer(cmd);
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++ break;
++ default:
++ result = -ENOSYS;
++ break;
++ }
++
++ /*
++ * We check for delayed work every time the channel becomes
++ * idle.
++ */
++ if (!result)
++ exi_command_done(cmd);
++
++ return result;
++}
++
++
++/*
++ * Internal. Completion routine.
++ */
++static void exi_wait_done(struct exi_command *cmd)
++{
++ complete(cmd->done_data);
++}
++
++/*
++ * Internal. Run a command and wait.
++ * Might sleep if called from user context. Otherwise will busy-wait.
++ */
++static int exi_run_command_and_wait(struct exi_command *cmd)
++{
++ DECLARE_COMPLETION(complete);
++ int result;
++
++ cmd->done_data = &complete;
++ cmd->done = exi_wait_done;
++ result = exi_run_command(cmd);
++ if (result > 0) {
++ wait_for_completion(&complete);
++ result = 0;
++ }
++ return result;
++}
++
++/**
++ * exi_take - reserves an exi channel for exclusive use by a device
++ * @exi_device: exi device making the reservation
++ * @wait: wait for the operation to complete
++ *
++ * Reserves the channel of a given EXI device.
++ */
++int exi_take(struct exi_device *exi_device, int wait)
++{
++ struct exi_command cmd;
++
++ exi_op_take(&cmd, exi_device);
++ if (!wait)
++ cmd.flags |= EXI_CMD_NOWAIT;
++ return exi_run_command(&cmd);
++}
++EXPORT_SYMBOL(exi_take);
++
++/**
++ * exi_give - releases an exi channel
++ * @exi_device: exi device making the release
++ *
++ * Releases the channel of a given EXI device.
++ */
++int exi_give(struct exi_device *exi_device)
++{
++ struct exi_command cmd;
++
++ exi_op_give(&cmd, exi_device->exi_channel);
++ return exi_run_command(&cmd);
++}
++EXPORT_SYMBOL(exi_give);
++
++/**
++ * exi_select - selects a exi device
++ * @exi_device: exi device being selected
++ *
++ * Selects a given EXI device.
++ */
++void exi_select(struct exi_device *exi_device)
++{
++ struct exi_command cmd;
++
++ exi_op_select(&cmd, exi_device);
++ exi_run_command(&cmd);
++}
++EXPORT_SYMBOL(exi_select);
++
++/**
++ * exi_deselect - deselects all devices on an exi channel
++ * @exi_channel: channel
++ *
++ * Deselects all EXI devices on the given channel.
++ *
++ */
++void exi_deselect(struct exi_channel *exi_channel)
++{
++ struct exi_command cmd;
++
++ exi_op_deselect(&cmd, exi_channel);
++ exi_run_command(&cmd);
++}
++EXPORT_SYMBOL(exi_deselect);
++
++/**
++ * exi_transfer - Performs a read or write EXI transfer.
++ * @exi_channel: channel
++ * @data: pointer to data being read/written
++ * @len: length of data
++ * @opcode: operation code (EXI_OP_{READ,READWRITE,WRITE})
++ *
++ * Read or write data on a given EXI channel.
++ */
++void exi_transfer(struct exi_channel *exi_channel, void *data, size_t len,
++ int opcode, unsigned long flags)
++{
++ struct exi_command cmd;
++
++ exi_op_transfer(&cmd, exi_channel, data, len, opcode);
++ cmd.flags |= flags;
++ exi_run_command_and_wait(&cmd);
++}
++EXPORT_SYMBOL(exi_transfer);
++
++/*
++ * Internal. Release several previously reserved channels, according to a
++ * channel mask.
++ */
++static void __give_some_channels(unsigned int channel_mask)
++{
++ struct exi_channel *exi_channel;
++ unsigned int channel;
++
++ for (channel = 0; channel_mask && channel < EXI_MAX_CHANNELS;
++ channel++) {
++ if ((channel_mask & (1<<channel))) {
++ channel_mask &= ~(1<<channel);
++ exi_channel = __to_exi_channel(channel);
++ exi_channel->owner = NULL;
++ }
++ }
++}
++
++/*
++ * Internal. Try to reserve atomically several channels, according to a
++ * channel mask.
++ */
++static inline int __try_take_some_channels(unsigned int channel_mask,
++ struct exi_device *exi_device)
++{
++ struct exi_channel *exi_channel;
++ unsigned int channel, taken_channel_mask = 0;
++ unsigned long flags;
++ int result = 0;
++
++ for (channel = 0; channel_mask && channel < EXI_MAX_CHANNELS;
++ channel++) {
++ if ((channel_mask & (1<<channel))) {
++ channel_mask &= ~(1<<channel);
++ exi_channel = __to_exi_channel(channel);
++ spin_lock_irqsave(&exi_channel->lock, flags);
++ if (exi_channel->owner) {
++ spin_unlock_irqrestore(&exi_channel->lock,
++ flags);
++ result = -EBUSY;
++ break;
++ }
++ exi_channel->owner = exi_device;
++ taken_channel_mask |= (1<<channel);
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++ }
++ }
++
++ if (result)
++ __give_some_channels(taken_channel_mask);
++
++ return result;
++}
++
++/*
++ * Internal. Determine if we can trigger an exi event.
++ */
++static inline int exi_can_trigger_event(struct exi_event *event)
++{
++ return !__try_take_some_channels(event->channel_mask, event->owner);
++}
++
++/*
++ * Internal. Finish an exi event invocation.
++ */
++static inline void exi_finish_event(struct exi_event *event)
++{
++ __give_some_channels(event->channel_mask);
++}
++
++/*
++ * Internal. Trigger an exi event.
++ */
++static inline int exi_trigger_event(struct exi_channel *exi_channel,
++ struct exi_event *event)
++{
++ exi_event_handler_t handler;
++ int result = 0;
++
++ handler = event->handler;
++ if (handler)
++ result = handler(exi_channel, event->id, event->data);
++ return result;
++}
++
++/*
++ * Internal. Conditionally trigger an exi event.
++ */
++static void exi_cond_trigger_event(struct exi_channel *exi_channel,
++ unsigned int event_id, int csr_mask)
++{
++ struct exi_event *event;
++ unsigned long flags;
++
++ if ((exi_channel->csr & csr_mask)) {
++ event = &exi_channel->events[event_id];
++ if (exi_can_trigger_event(event)) {
++ spin_lock_irqsave(&exi_channel->lock, flags);
++ exi_channel->csr &= ~csr_mask;
++ spin_unlock_irqrestore(&exi_channel->lock, flags);
++ exi_trigger_event(exi_channel, event);
++ exi_finish_event(event);
++ }
++ }
++
++ return;
++}
++
++/*
++ * Internal. Tasklet used to execute delayed work.
++ */
++static void exi_tasklet(unsigned long param)
++{
++ struct exi_channel *exi_channel = (struct exi_channel *)param;
++
++ DBG("channel=%d, csr=%08lx\n", exi_channel->channel, exi_channel->csr);
++
++ if (exi_channel->queued_cmd) {
++ DBG("tasklet while xfer in flight on channel %d, csr = %08lx\n",
++ exi_channel->channel, exi_channel->csr);
++ }
++
++ /*
++ * We won't lauch event handlers if any of the channels we
++ * provided on event registration is in use.
++ */
++
++ /*exi_cond_trigger_event(exi_channel, EXI_EVENT_TC, EXI_CSR_TCINT);*/
++ exi_cond_trigger_event(exi_channel, EXI_EVENT_IRQ, EXI_CSR_EXIINT);
++ exi_cond_trigger_event(exi_channel, EXI_EVENT_INSERT, EXI_CSR_EXTIN);
++}
++
++/*
++ * Internal. Interrupt handler for EXI interrupts.
++ */
++static irqreturn_t exi_irq_handler(int irq, void *dev_id)
++{
++ struct exi_channel *exi_channel;
++ u32 __iomem *csr_reg;
++ u32 csr, status, mask;
++ unsigned long flags;
++
++ exi_channel_for_each(exi_channel) {
++ csr_reg = exi_channel->io_base + EXI_CSR;
++
++ /*
++ * Determine if we have pending interrupts on this channel,
++ * and which ones.
++ */
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++
++ csr = in_be32(csr_reg);
++ mask = csr & (EXI_CSR_EXTINMASK |
++ EXI_CSR_TCINTMASK | EXI_CSR_EXIINTMASK);
++ status = csr & (mask << 1);
++ if (!status) {
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++ continue;
++ }
++
++ /* XXX do not signal TC events for now... */
++ exi_channel->csr |= (status & ~EXI_CSR_TCINT);
++
++ DBG("channel=%d, csr=%08lx\n", exi_channel->channel,
++ exi_channel->csr);
++
++ /* ack all for this channel */
++ out_be32(csr_reg, csr | status);
++
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++
++ if ((status & EXI_CSR_TCINT))
++ exi_wait_for_transfer_one(exi_channel);
++ if ((status & EXI_CSR_EXTIN))
++ wake_up(&exi_bus_waitq);
++
++ if (exi_channel->csr && !exi_is_taken(exi_channel))
++ tasklet_schedule(&exi_channel->tasklet);
++ }
++ return IRQ_HANDLED;
++}
++
++/*
++ * Internal. Enable an exi event.
++ */
++static int exi_enable_event(struct exi_channel *exi_channel,
++ unsigned int event_id)
++{
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ u32 csr;
++ unsigned long flags;
++
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ csr = in_be32(csr_reg);
++
++ /* ack and enable the associated interrupt */
++ switch (event_id) {
++ case EXI_EVENT_INSERT:
++ out_be32(csr_reg, csr | (EXI_CSR_EXTIN | EXI_CSR_EXTINMASK));
++ break;
++ case EXI_EVENT_TC:
++ /*out_be32(csr_reg,
++ csr | (EXI_CSR_TCINT | EXI_CSR_TCINTMASK));*/
++ break;
++ case EXI_EVENT_IRQ:
++ out_be32(csr_reg, csr | (EXI_CSR_EXIINT | EXI_CSR_EXIINTMASK));
++ break;
++ }
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++ return 0;
++}
++
++/*
++ * Internal. Disable an exi event.
++ */
++static int exi_disable_event(struct exi_channel *exi_channel,
++ unsigned int event_id)
++{
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ u32 csr;
++ unsigned long flags;
++
++ spin_lock_irqsave(&exi_channel->io_lock, flags);
++ csr = in_be32(csr_reg);
++
++ /* ack and disable the associated interrupt */
++ switch (event_id) {
++ case EXI_EVENT_INSERT:
++ out_be32(csr_reg, (csr | EXI_CSR_EXTIN) & ~EXI_CSR_EXTINMASK);
++ break;
++ case EXI_EVENT_TC:
++ /*out_be32(csr_reg,
++ (csr | EXI_CSR_TCINT) & ~EXI_CSR_TCINTMASK);*/
++ break;
++ case EXI_EVENT_IRQ:
++ out_be32(csr_reg, (csr | EXI_CSR_EXIINT) & ~EXI_CSR_EXIINTMASK);
++ break;
++ }
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags);
++ return 0;
++}
++
++/**
++ * exi_event_register - Registers an event on a given channel.
++ * @exi_channel: channel
++ * @event_id: event id
++ * @handler: event handler
++ * @data: data passed to event handler
++ *
++ * Register a handler to be called whenever a specified event happens
++ * on the given channel.
++ */
++int exi_event_register(struct exi_channel *exi_channel, unsigned int event_id,
++ struct exi_device *exi_device,
++ exi_event_handler_t handler, void *data,
++ unsigned int channel_mask)
++{
++ struct exi_event *event;
++ int result = 0;
++
++ BUG_ON(event_id > EXI_MAX_EVENTS);
++
++ event = &exi_channel->events[event_id];
++
++ spin_lock(&exi_channel->lock);
++ if (event->handler) {
++ result = -EBUSY;
++ goto out;
++ }
++ event->owner = exi_device;
++ event->handler = handler;
++ event->data = data;
++ event->channel_mask = channel_mask;
++ exi_enable_event(exi_channel, event_id);
++
++out:
++ spin_unlock(&exi_channel->lock);
++ return result;
++}
++EXPORT_SYMBOL(exi_event_register);
++
++/**
++ * exi_event_unregister - Unregisters an event on a given channel.
++ * @exi_channel: channel
++ * @event_id: event id
++ *
++ * Unregister a previously registered event handler.
++ */
++int exi_event_unregister(struct exi_channel *exi_channel, unsigned int event_id)
++{
++ struct exi_event *event;
++ int result = 0;
++
++ BUG_ON(event_id > EXI_MAX_EVENTS);
++
++ event = &exi_channel->events[event_id];
++
++ spin_lock(&exi_channel->lock);
++ exi_disable_event(exi_channel, event_id);
++ event->owner = NULL;
++ event->handler = NULL;
++ event->data = NULL;
++ event->channel_mask = 0;
++ spin_unlock(&exi_channel->lock);
++
++ return result;
++}
++EXPORT_SYMBOL(exi_event_unregister);
++
++/*
++ * Internal. Quiesce a channel.
++ */
++static void exi_quiesce_channel(struct exi_channel *exi_channel, u32 csr_mask)
++{
++ /* wait for dma transfers to complete */
++ exi_wait_for_transfer_raw(exi_channel);
++
++ /* ack and mask all interrupts */
++ out_be32(exi_channel->io_base + EXI_CSR,
++ EXI_CSR_TCINT | EXI_CSR_EXIINT | EXI_CSR_EXTIN | csr_mask);
++}
++
++/*
++ * Internal. Quiesce all channels.
++ */
++static void exi_quiesce_all_channels(u32 csr_mask)
++{
++ struct exi_channel *exi_channel;
++
++ exi_channel_for_each(exi_channel) {
++ exi_quiesce_channel(exi_channel, csr_mask);
++ }
++}
++
++/**
++ * exi_get_id - Returns the EXI ID of a device
++ * @exi_channel: channel
++ * @device: device number on channel
++ * @freq: clock frequency index
++ *
++ * Returns the EXI ID of an EXI device on a given channel.
++ * Might sleep.
++ */
++u32 exi_get_id(struct exi_device *exi_device)
++{
++ struct exi_channel *exi_channel = exi_device->exi_channel;
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ u32 id = EXI_ID_INVALID;
++ u16 cmd = 0;
++
++ /* ask for the EXI id */
++ exi_dev_take(exi_device);
++ exi_dev_select(exi_device);
++ exi_dev_write(exi_device, &cmd, sizeof(cmd));
++ exi_dev_read(exi_device, &id, sizeof(id));
++ exi_dev_deselect(exi_device);
++ exi_dev_give(exi_device);
++
++ /* "canonicalize" the id */
++ if (!id)
++ id = EXI_ID_INVALID;
++ /*
++ * We return a EXI_ID_NONE if there is some unidentified device
++ * inserted in memcard slot A or memcard slot B.
++ * This, for example, allows the SD/MMC driver to see inserted cards.
++ */
++ if (id == EXI_ID_INVALID) {
++ if ((__to_channel(exi_channel) == 0 ||
++ __to_channel(exi_channel) == 1)
++ && exi_device->eid.device == 0) {
++ if (in_be32(csr_reg) & EXI_CSR_EXT)
++ id = EXI_ID_NONE;
++ }
++ }
++
++ return id;
++}
++EXPORT_SYMBOL(exi_get_id);
++
++/*
++ * Tells if there is a device inserted in one of the memory card slots.
++ */
++int exi_get_ext_line(struct exi_channel *exi_channel)
++{
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR;
++ return (in_be32(csr_reg) & EXI_CSR_EXT) ? 1 : 0;
++}
++
++/*
++ * Saves the current insertion status of a given channel.
++ */
++void exi_update_ext_status(struct exi_channel *exi_channel)
++{
++ if (exi_get_ext_line(exi_channel))
++ exi_channel->flags |= EXI_EXT;
++ else
++ exi_channel->flags &= ~EXI_EXT;
++}
++
++/*
++ * Pseudo-Internal. Initialize basic channel structures and hardware.
++ */
++int exi_hw_init(char *module_name, struct resource *mem, unsigned int irq)
++{
++ struct exi_channel *exi_channel;
++ int channel;
++ int result;
++
++ exi_io_mem = ioremap(mem->start, mem->end - mem->start + 1);
++ if (!exi_io_mem) {
++ drv_printk(KERN_ERR, "ioremap failed\n");
++ return -ENOMEM;
++ }
++
++ for (channel = 0; channel < EXI_MAX_CHANNELS; channel++) {
++ exi_channel = __to_exi_channel(channel);
++
++ /* initialize a channel structure */
++ exi_channel_init(exi_channel, channel);
++ }
++
++ /* calm down the hardware and allow extractions */
++ exi_quiesce_all_channels(EXI_CSR_EXTINMASK);
++
++ /* register the exi interrupt handler */
++ result = request_irq(irq, exi_irq_handler, 0, module_name, NULL);
++ if (result)
++ drv_printk(KERN_ERR, "failed to register IRQ %d\n", irq);
++
++ return result;
++}
++
++/*
++ * Pseudo-Internal.
++ */
++void exi_hw_exit(struct resource *mem, unsigned int irq)
++{
++ exi_quiesce_all_channels(0);
++ iounmap(exi_io_mem);
++ free_irq(irq, NULL);
++}
+diff --git a/drivers/exi/exi-hw.h b/drivers/exi/exi-hw.h
+new file mode 100644
+index 0000000..a2382bf
+--- /dev/null
++++ b/drivers/exi/exi-hw.h
+@@ -0,0 +1,195 @@
++/*
++ * drivers/exi/exi-hw.h
++ *
++ * Nintendo GameCube EXpansion Interface support. Hardware routines.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004,2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2005,2006,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __EXI_HW_H
++#define __EXI_HW_H
++
++#include <linux/exi.h>
++#include <linux/interrupt.h>
++#include <linux/resource.h>
++#include <asm/atomic.h>
++
++
++#define EXI_MAX_CHANNELS 3 /* channels on the EXI bus */
++#define EXI_DEVICES_PER_CHANNEL 3 /* number of devices per EXI channel */
++#define EXI_MAX_EVENTS 3 /* types of events on the EXI bus */
++
++#define EXI_CLK_1MHZ 0
++#define EXI_CLK_2MHZ 1
++#define EXI_CLK_4MHZ 2
++#define EXI_CLK_8MHZ 3
++#define EXI_CLK_16MHZ 4
++#define EXI_CLK_32MHZ 5
++
++#define EXI_MAX_FREQ 7
++#define EXI_FREQ_SCAN EXI_CLK_8MHZ
++
++#define EXI_READ 0
++#define EXI_WRITE 1
++
++#define EXI_IDI_MAX_SIZE 4
++
++
++#define EXI_DMA_ALIGN 0x1f /* 32 bytes */
++
++#define EXI_CHANNEL_SPACING 0x14
++
++#define EXI_CSR 0x00
++#define EXI_CSR_EXIINTMASK (1<<0)
++#define EXI_CSR_EXIINT (1<<1)
++#define EXI_CSR_TCINTMASK (1<<2)
++#define EXI_CSR_TCINT (1<<3)
++#define EXI_CSR_CLKMASK (0x7<<4)
++#define EXI_CSR_CLK_1MHZ (EXI_CLK_1MHZ<<4)
++#define EXI_CSR_CLK_2MHZ (EXI_CLK_2MHZ<<4)
++#define EXI_CSR_CLK_4MHZ (EXI_CLK_4MHZ<<4)
++#define EXI_CSR_CLK_8MHZ (EXI_CLK_8MHZ<<4)
++#define EXI_CSR_CLK_16MHZ (EXI_CLK_16MHZ<<4)
++#define EXI_CSR_CLK_32MHZ (EXI_CLK_32MHZ<<4)
++#define EXI_CSR_CSMASK (0x7<<7)
++#define EXI_CSR_CS_0 (0x1<<7) /* Chip Select 001 */
++#define EXI_CSR_CS_1 (0x2<<7) /* Chip Select 010 */
++#define EXI_CSR_CS_2 (0x4<<7) /* Chip Select 100 */
++#define EXI_CSR_EXTINMASK (1<<10)
++#define EXI_CSR_EXTIN (1<<11)
++#define EXI_CSR_EXT (1<<12)
++
++#define EXI_MAR 0x04
++
++#define EXI_LENGTH 0x08
++
++#define EXI_CR 0x0c
++#define EXI_CR_TSTART (1<<0)
++#define EXI_CR_DMA (1<<1)
++#define EXI_CR_READ (0<<2)
++#define EXI_CR_WRITE (1<<2)
++#define EXI_CR_READ_WRITE (2<<2)
++#define EXI_CR_TLEN(len) (((len)-1)<<4)
++
++#define EXI_DATA 0x10
++
++enum {
++ __EXI_DMABUSY = 0,
++ __EXI_EXT,
++};
++
++/*
++ * For registering event handlers with the exi layer.
++ */
++struct exi_event {
++ int id; /* event id */
++ struct exi_device *owner; /* device owning of the event */
++ exi_event_handler_t handler;
++ void *data;
++ unsigned int channel_mask; /* channels used by handler */
++};
++
++/*
++ * This structure represents an exi channel.
++ */
++struct exi_channel {
++ spinlock_t lock; /* misc channel lock */
++
++ int channel;
++ unsigned long flags;
++#define EXI_DMABUSY (1<<__EXI_DMABUSY)
++#define EXI_EXT (1<<__EXI_EXT)
++
++ spinlock_t io_lock; /* serializes access to CSR */
++ void __iomem *io_base;
++
++ struct exi_device *owner;
++ wait_queue_head_t wait_queue;
++
++ struct exi_command *queued_cmd;
++ struct exi_command post_cmd;
++
++ unsigned long csr;
++ struct tasklet_struct tasklet;
++
++ unsigned long stats_idi_xfers;
++ unsigned long stats_dma_xfers;
++ unsigned long stats_xfers;
++
++ struct exi_event events[EXI_MAX_EVENTS];
++};
++
++extern struct exi_device *exi_channel_owner(struct exi_channel *exi_channel);
++extern int exi_get_ext_line(struct exi_channel *exi_channel);
++extern void exi_update_ext_status(struct exi_channel *exi_channel);
++
++extern int exi_hw_init(char *name, struct resource *mem, unsigned int irq);
++extern void exi_hw_exit(struct resource *mem, unsigned int irq);
++
++#define exi_is_taken(x) ((x)->owner)
++
++/*
++ * Internal.
++ * Declare simple transfer functions for single bytes, words and dwords,
++ * and build a general transfer function based on that.
++ */
++#define __declare__exi_transfer_raw(_type, _val, _data, _on_write, _on_read) \
++static inline void __exi_transfer_raw_##_type(struct exi_channel *exi_channel,\
++ _type * _data, int mode) \
++{ \
++ u32 __iomem *csr_reg = exi_channel->io_base + EXI_CSR; \
++ u32 __iomem *data_reg = exi_channel->io_base + EXI_DATA; \
++ u32 __iomem *cr_reg = exi_channel->io_base + EXI_CR; \
++ u32 _val = ~0; \
++ unsigned long flags; \
++ \
++ /* \
++ * On reads we write too some known value to EXIxDATA because \
++ * information currently stored there is leaked to the \
++ * MOSI line, confusing some hardware. \
++ */ \
++ if (((mode&0xf) != EXI_OP_READ)) /* write or read-write */ \
++ _on_write; \
++ out_be32(data_reg, _val); \
++ \
++ /* start transfer */ \
++ _val = EXI_CR_TSTART | EXI_CR_TLEN(sizeof(_type)) | (mode&0xf); \
++ out_be32(cr_reg, _val); \
++ \
++ /* wait for transfer completion */ \
++ while (in_be32(cr_reg) & EXI_CR_TSTART) \
++ cpu_relax(); \
++ \
++ /* XXX check if we need that on immediate mode */ \
++ /* assert transfer complete interrupt */ \
++ spin_lock_irqsave(&exi_channel->io_lock, flags); \
++ out_be32(csr_reg, in_be32(csr_reg) | EXI_CSR_TCINT); \
++ spin_unlock_irqrestore(&exi_channel->io_lock, flags); \
++ \
++ if ((mode&0xf) != EXI_OP_WRITE) { /* read or read-write */ \
++ _val = in_be32(data_reg); \
++ _on_read; \
++ } \
++}
++
++#define __declare__exi_transfer_raw_simple(_type) \
++__declare__exi_transfer_raw( \
++ _type, _v, _d, \
++ _v = *(_d) << (32 - (8*sizeof(_type))), \
++ *(_d) = (_type)(_v >> (32 - (8*sizeof(_type)))) \
++ )
++
++__declare__exi_transfer_raw_simple(u8)
++__declare__exi_transfer_raw_simple(u16)
++__declare__exi_transfer_raw_simple(u32)
++
++extern wait_queue_head_t exi_bus_waitq;
++
++#endif /* __EXI_HW_H */
+diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
+index 5f9d860..bcf4d1f 100644
+--- a/drivers/input/Kconfig
++++ b/drivers/input/Kconfig
+@@ -180,6 +180,8 @@ source "drivers/input/serio/Kconfig"
+
+ source "drivers/input/gameport/Kconfig"
+
++source "drivers/input/si/Kconfig"
++
+ endmenu
+
+ endmenu
+diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
+index efd70a9..ed0a67a 100644
+--- a/drivers/input/keyboard/Kconfig
++++ b/drivers/input/keyboard/Kconfig
+@@ -314,6 +314,17 @@ config KEYBOARD_BFIN
+ To compile this driver as a module, choose M here: the
+ module will be called bf54x-keys.
+
++config KEYBOARD_WII
++ tristate "Nintendo Wii USB keyboard IOS glue"
++ depends on (WII && !USB)
++ help
++ Say Y here if you have a Nintendo Wii console running Linux and have
++ a keyboard attached to one of its USB ports.
++ This driver uses the IOS interface glue to access the USB keyboard.
++
++ To compile this driver as a module, choose M here: the
++ module will be called rvl-stkbd.
++
+ config KEYBOARD_SH_KEYSC
+ tristate "SuperH KEYSC keypad support"
+ depends on SUPERH
+diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
+index 0edc8f2..2918d70 100644
+--- a/drivers/input/keyboard/Makefile
++++ b/drivers/input/keyboard/Makefile
+@@ -27,3 +27,4 @@ obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o
+ obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o
+ obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
+ obj-$(CONFIG_KEYBOARD_SH_KEYSC) += sh_keysc.o
++obj-$(CONFIG_KEYBOARD_WII) += rvl-stkbd.o
+diff --git a/drivers/input/keyboard/rvl-stkbd.c b/drivers/input/keyboard/rvl-stkbd.c
+new file mode 100644
+index 0000000..272f772
+--- /dev/null
++++ b/drivers/input/keyboard/rvl-stkbd.c
+@@ -0,0 +1,512 @@
++/*
++ * drivers/input/keyboard/rvl-stkbd.c
++ *
++ * Nintendo Wii starlet keyboard driver.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++/*
++ * NOTES:
++ * The keyboard driver requires at least IOS30 installed.
++ * LED support is pending.
++ */
++
++#define DEBUG
++
++#define DBG(fmt, arg...) pr_debug(fmt, ##arg)
++
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/kernel.h>
++#include <linux/kthread.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <asm/starlet.h>
++
++#define DRV_MODULE_NAME "rvl-stkbd"
++#define DRV_DESCRIPTION "Nintendo Wii starlet keyboard driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++static char stkbd_driver_version[] = "0.1i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++/*
++ * Keyboard events from IOS.
++ */
++#define STKBD_EV_CONNECT 0x00000000
++#define STKBD_EV_DISCONNECT 0x00000001
++#define STKBD_EV_REPORT 0x00000002
++
++struct stkbd_event {
++ u32 type;
++ u32 _unk1;
++ union {
++ struct {
++ u8 modifiers;
++ u8 reserved;
++ u8 keys[6];
++ } report;
++ u8 raw_report[8];
++ };
++} __attribute__((packed));
++
++/*
++ * Keyboard device.
++ */
++
++enum {
++ __STKBD_RUNNING = 1, /* device is opened and running */
++ __STKBD_WAITING_REPORT /* waiting for IOS report */
++};
++
++struct stkbd_keyboard {
++ int fd;
++
++ struct stkbd_event *event;
++ u8 old_raw_report[8];
++
++ unsigned long flags;
++#define STKBD_RUNNING (1 << __STKBD_RUNNING)
++#define STKBD_WAITING_REPORT (1 << __STKBD_WAITING_REPORT)
++
++ char name[32];
++ struct input_dev *idev;
++ unsigned int usage;
++
++ struct device *dev;
++};
++
++/* device path in IOS for the USB keyboard */
++static char stkbd_dev_path[] = "/dev/usb/kbd";
++
++/*
++ * Keycodes are standard USB keyboard HID keycodes.
++ * We use the same table as in drivers/hid/usbhid/usbkbd.c.
++ */
++
++#define NR_SCANCODES 256
++
++static unsigned char stkbd_keycode[NR_SCANCODES] = {
++/*000*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*004*/ KEY_A, KEY_B, KEY_C, KEY_D,
++/*008*/ KEY_E, KEY_F, KEY_G, KEY_H,
++/*012*/ KEY_I, KEY_J, KEY_K, KEY_L,
++/*016*/ KEY_M, KEY_N, KEY_O, KEY_P,
++/*020*/ KEY_Q, KEY_R, KEY_S, KEY_T,
++/*024*/ KEY_U, KEY_V, KEY_W, KEY_X,
++/*028*/ KEY_Y, KEY_Z, KEY_1, KEY_2,
++/*032*/ KEY_3, KEY_4, KEY_5, KEY_6,
++/*036*/ KEY_7, KEY_8, KEY_9, KEY_0,
++/*040*/ KEY_ENTER, KEY_ESC, KEY_BACKSPACE, KEY_TAB,
++/*044*/ KEY_SPACE, KEY_MINUS, KEY_EQUAL, KEY_LEFTBRACE,
++/*048*/ KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_BACKSLASH, KEY_SEMICOLON,
++/*052*/ KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, KEY_DOT,
++/*056*/ KEY_SLASH, KEY_CAPSLOCK, KEY_F1, KEY_F2,
++/*060*/ KEY_F3, KEY_F4, KEY_F5, KEY_F6,
++/*064*/ KEY_F7, KEY_F8, KEY_F9, KEY_F10,
++/*068*/ KEY_F11, KEY_F12, KEY_SYSRQ, KEY_SCROLLLOCK,
++/*072*/ KEY_PAUSE, KEY_INSERT, KEY_HOME, KEY_PAGEUP,
++/*076*/ KEY_DELETE, KEY_END, KEY_PAGEDOWN, KEY_RIGHT,
++/*080*/ KEY_LEFT, KEY_DOWN, KEY_UP, KEY_NUMLOCK,
++/*084*/ KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, KEY_KPPLUS,
++/*088*/ KEY_KPENTER, KEY_KP1, KEY_KP2, KEY_KP3,
++/*092*/ KEY_KP4, KEY_KP5, KEY_KP6, KEY_KP7,
++/*096*/ KEY_KP8, KEY_KP9, KEY_KP0, KEY_KPDOT,
++/*100*/ KEY_102ND, KEY_COMPOSE, KEY_POWER, KEY_KPEQUAL,
++/*104*/ KEY_F13, KEY_F14, KEY_F15, KEY_F16,
++/*108*/ KEY_F17, KEY_F18, KEY_F19, KEY_F20,
++/*112*/ KEY_F21, KEY_F22, KEY_F23, KEY_F24,
++/*116*/ KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT,
++/*120*/ KEY_STOP, KEY_AGAIN, KEY_UNDO, KEY_CUT,
++/*124*/ KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE,
++/*128*/ KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_RESERVED, KEY_RESERVED,
++/*132*/ KEY_RESERVED, KEY_KPCOMMA, KEY_RESERVED, KEY_RO,
++/*136*/ KEY_KATAKANAHIRAGANA, KEY_YEN, KEY_HENKAN, KEY_MUHENKAN,
++/*140*/ KEY_KPJPCOMMA, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*144*/ KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA,
++/*148*/ KEY_ZENKAKUHANKAKU, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*152*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*156*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*160*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*164*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*168*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*172*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*176*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*180*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*184*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*188*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*192*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*196*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*200*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*204*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*208*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*212*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*216*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*220*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++/*224*/ KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_LEFTALT, KEY_LEFTMETA,
++/*228*/ KEY_RIGHTCTRL, KEY_RIGHTSHIFT, KEY_RIGHTALT, KEY_RIGHTMETA,
++/*232*/ KEY_PLAYPAUSE, KEY_STOPCD, KEY_PREVIOUSSONG, KEY_NEXTSONG,
++/*236*/ KEY_EJECTCD, KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_MUTE,
++/*240*/ KEY_WWW, KEY_BACK, KEY_FORWARD, KEY_STOP,
++/*244*/ KEY_FIND, KEY_SCROLLUP, KEY_SCROLLDOWN, KEY_EDIT,
++/*248*/ KEY_SLEEP, KEY_SCROLLLOCK, KEY_REFRESH, KEY_CALC,
++/*252*/ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++};
++
++
++static int stkbd_wait_for_events(struct stkbd_keyboard *kbd);
++
++static void stkbd_dispatch_report(struct stkbd_keyboard *kbd)
++{
++ struct stkbd_event *event = kbd->event;
++ u8 *new = event->raw_report;
++ u8 *old = kbd->old_raw_report;
++ int i;
++
++ /*
++ * The report is a standard USB HID report for a keyboard.
++ * Modifiers come in byte 0 as variable data and map to
++ * positions 224-231 of the USB HID keyboard/keypad page.
++ */
++ for (i = 0; i < 8; i++)
++ input_report_key(kbd->idev, stkbd_keycode[i + 224],
++ (new[0] >> i) & 1);
++
++ /*
++ * Byte 1 is reserved and ignored here.
++ * Bytes 2 to 7 contain the indexes of up to 6 keys pressed.
++ * A value of 01 for an index means "Keyboard ErrorRollOver" and is
++ * reported when the keyboard is in error (for example, when too
++ * many keys are simultaneously pressed).
++ * Index values less than or equal to 03 can be safely ignored.
++ */
++ for (i = 2; i < 8; i++) {
++ /* released keys are old indexes not found in new array */
++ if (old[i] > 3 && memscan(new + 2, old[i], 6) == new + 8) {
++ if (stkbd_keycode[old[i]])
++ input_report_key(kbd->idev,
++ stkbd_keycode[old[i]], 0);
++ else
++ drv_printk(KERN_WARNING, "unknown key"
++ " (scancode %#x) released.", old[i]);
++ }
++
++ /* pressed keys are new indexes not found in old array */
++ if (new[i] > 3 && memscan(old + 2, new[i], 6) == old + 8) {
++ if (stkbd_keycode[new[i]])
++ input_report_key(kbd->idev,
++ stkbd_keycode[new[i]], 1);
++ else
++ drv_printk(KERN_WARNING, "unknown key"
++ " (scancode %#x) pressed.", new[i]);
++ }
++ }
++
++ input_sync(kbd->idev);
++ memcpy(old, new, 8);
++}
++
++static int stkbd_dispatch_ipc_request(struct starlet_ipc_request *req)
++{
++ struct stkbd_keyboard *kbd;
++ struct stkbd_event *event;
++ int error;
++
++ /* retrieve the interesting data before freeing the request */
++ kbd = req->done_data;
++ error = req->result;
++ starlet_ipc_free_request(req);
++
++ clear_bit(__STKBD_WAITING_REPORT, &kbd->flags);
++
++ if (kbd->fd == -1)
++ return -ENODEV;
++
++ if (error) {
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ } else {
++ event = kbd->event;
++
++ switch (event->type) {
++ case STKBD_EV_CONNECT:
++ drv_printk(KERN_INFO, "keyboard connected\n");
++ break;
++ case STKBD_EV_DISCONNECT:
++ drv_printk(KERN_INFO, "keyboard disconnected\n");
++ break;
++ case STKBD_EV_REPORT:
++ if (test_bit(__STKBD_RUNNING, &kbd->flags))
++ stkbd_dispatch_report(kbd);
++ break;
++ }
++
++ error = stkbd_wait_for_events(kbd);
++ }
++ return error;
++}
++
++static int stkbd_wait_for_events(struct stkbd_keyboard *kbd)
++{
++ struct stkbd_event *event = kbd->event;
++ int error = 0;
++
++ if (!test_and_set_bit(__STKBD_WAITING_REPORT, &kbd->flags)) {
++ error = starlet_ioctl_nowait(kbd->fd, 0,
++ NULL, 0,
++ event, sizeof(*event),
++ stkbd_dispatch_ipc_request,
++ kbd);
++ if (error)
++ drv_printk(KERN_ERR, "ioctl error %d (%04x)\n",
++ error, error);
++ }
++ return error;
++}
++
++/*
++ * Input driver hooks.
++ *
++ */
++
++static DEFINE_MUTEX(open_lock);
++
++static int stkbd_open(struct input_dev *idev)
++{
++ struct stkbd_keyboard *kbd = input_get_drvdata(idev);
++ int error = 0;
++
++ if (!kbd)
++ return -ENODEV;
++
++ mutex_lock(&open_lock);
++ kbd->usage++;
++ set_bit(__STKBD_RUNNING, &kbd->flags);
++ mutex_unlock(&open_lock);
++
++ return error;
++}
++
++static void stkbd_close(struct input_dev *idev)
++{
++ struct stkbd_keyboard *kbd = input_get_drvdata(idev);
++
++ if (!kbd)
++ return;
++
++ mutex_lock(&open_lock);
++ kbd->usage--;
++ if (kbd->usage == 0)
++ clear_bit(__STKBD_RUNNING, &kbd->flags);
++ mutex_unlock(&open_lock);
++}
++
++static void stkbd_setup_keyboard(struct input_dev *idev)
++{
++ int i;
++
++ set_bit(EV_KEY, idev->evbit);
++ set_bit(EV_REP, idev->evbit);
++
++ for (i = 0; i < 255; ++i)
++ set_bit(stkbd_keycode[i], idev->keybit);
++ clear_bit(0, idev->keybit);
++}
++
++static int stkbd_init_input_dev(struct stkbd_keyboard *kbd)
++{
++ struct input_dev *idev;
++ int error;
++
++ idev = input_allocate_device();
++ if (!idev) {
++ drv_printk(KERN_ERR, "failed to allocate input_dev\n");
++ return -ENOMEM;
++ }
++
++ idev->dev.parent = kbd->dev;
++
++ strcpy(kbd->name, "USB keyboard");
++ idev->name = kbd->name;
++
++ input_set_drvdata(idev, kbd);
++ kbd->idev = idev;
++
++ stkbd_setup_keyboard(idev);
++
++ idev->open = stkbd_open;
++ idev->close = stkbd_close;
++
++ error = input_register_device(kbd->idev);
++ if (error) {
++ input_free_device(kbd->idev);
++ return error;
++ }
++
++ return 0;
++}
++
++static void stkbd_exit_input_dev(struct stkbd_keyboard *kbd)
++{
++ input_free_device(kbd->idev);
++}
++
++/*
++ * Setup routines.
++ *
++ */
++
++static int stkbd_init(struct stkbd_keyboard *kbd)
++{
++ struct stkbd_event *event;
++ int error;
++
++ event = starlet_kzalloc(sizeof(*event), GFP_KERNEL);
++ if (!event) {
++ drv_printk(KERN_ERR, "failed to allocate stkbd_event\n");
++ error = -ENOMEM;
++ goto err;
++ }
++ kbd->event = event;
++
++ kbd->fd = starlet_open(stkbd_dev_path, 0);
++ if (kbd->fd < 0) {
++ drv_printk(KERN_ERR, "unable to open device %s\n",
++ stkbd_dev_path);
++ error = kbd->fd;
++ goto err_event;
++ }
++
++ error = stkbd_init_input_dev(kbd);
++ if (error)
++ goto err_fd;
++
++ /* start to grab events from the keyboard */
++ error = stkbd_wait_for_events(kbd);
++ if (error)
++ goto err_input_dev;
++
++ return 0;
++
++err_input_dev:
++ stkbd_exit_input_dev(kbd);
++err_fd:
++ starlet_close(kbd->fd);
++err_event:
++ starlet_kfree(event);
++err:
++ return error;
++}
++
++static void stkbd_exit(struct stkbd_keyboard *kbd)
++{
++ stkbd_exit_input_dev(kbd);
++ starlet_close(kbd->fd);
++ starlet_kfree(kbd->event);
++}
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int stkbd_do_probe(struct device *dev)
++{
++ struct stkbd_keyboard *kbd;
++ int error;
++
++ kbd = kzalloc(sizeof(*kbd), GFP_KERNEL);
++ if (!kbd) {
++ drv_printk(KERN_ERR, "failed to allocate stkbd_keyboard\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, kbd);
++ kbd->dev = dev;
++
++ error = stkbd_init(kbd);
++ if (error) {
++ dev_set_drvdata(dev, NULL);
++ kfree(kbd);
++ }
++ return error;
++}
++
++static int stkbd_do_remove(struct device *dev)
++{
++ struct stkbd_keyboard *kbd = dev_get_drvdata(dev);
++
++ if (kbd) {
++ stkbd_exit(kbd);
++ dev_set_drvdata(dev, NULL);
++ kfree(kbd);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int __init stkbd_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ return stkbd_do_probe(&odev->dev);
++}
++
++static int __exit stkbd_of_remove(struct of_device *odev)
++{
++ return stkbd_do_remove(&odev->dev);
++}
++
++static struct of_device_id stkbd_of_match[] = {
++ { .compatible = "nintendo,starlet-keyboard" },
++ { },
++};
++
++
++MODULE_DEVICE_TABLE(of, stkbd_of_match);
++
++static struct of_platform_driver stkbd_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = stkbd_of_match,
++ .probe = stkbd_of_probe,
++ .remove = stkbd_of_remove,
++};
++
++
++/*
++ * Module interface hooks.
++ *
++ */
++
++static int __init stkbd_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ stkbd_driver_version);
++
++ return of_register_platform_driver(&stkbd_of_driver);
++}
++
++static void __exit stkbd_exit_module(void)
++{
++ of_unregister_platform_driver(&stkbd_of_driver);
++}
++
++module_init(stkbd_init_module);
++module_exit(stkbd_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/si/Kconfig b/drivers/input/si/Kconfig
+new file mode 100644
+index 0000000..51de017
+--- /dev/null
++++ b/drivers/input/si/Kconfig
+@@ -0,0 +1,14 @@
++#
++# Nintendo GameCube/Wii Serial Interface (SI) configuration
++#
++
++config GAMECUBE_SI
++ tristate "Nintendo GameCube/Wii Serial Interface (SI) support"
++ depends on GAMECUBE_COMMON
++ ---help---
++ Say Y here if you want to use the standard pads as joysticks or
++ want to use a keyboard. Everything is autodetected.
++
++ NOTE: Keyboard detection doesn't work 100%. Building this as a
++ module is recommended, this way you can unload/load the driver
++ to re-detect.
+diff --git a/drivers/input/si/Makefile b/drivers/input/si/Makefile
+new file mode 100644
+index 0000000..5087995
+--- /dev/null
++++ b/drivers/input/si/Makefile
+@@ -0,0 +1,5 @@
++#
++# Makefile for the Nintendo GameCube/Wii Serial Interface (SI).
++#
++
++obj-$(CONFIG_GAMECUBE_SI) += gcn-si.o
+diff --git a/drivers/input/si/gcn-keymap.h b/drivers/input/si/gcn-keymap.h
+new file mode 100644
+index 0000000..7a3345a
+--- /dev/null
++++ b/drivers/input/si/gcn-keymap.h
+@@ -0,0 +1,79 @@
++/*
++ * keymap for a Datel adapater + US keyboard (not the normal keyboard)
++ * not mapped:
++ * printscreen / sysreq
++ * pause / break
++ * numlock
++ * windows key 1
++ * windows key 2
++ * windows menu key
++ *
++ * cursor keys send both 36 and their own code, so 36 must be RESERVED
++ */
++
++static unsigned char gamecube_keymap[] = {
++ /* 00 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_HOME, KEY_END,
++ /* 08 */ KEY_PAGEUP, KEY_PAGEDOWN, KEY_SCROLLLOCK, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 10 */ KEY_A, KEY_B, KEY_C, KEY_D,
++ KEY_E, KEY_F, KEY_G, KEY_H,
++ /* 18 */ KEY_I, KEY_J, KEY_K, KEY_L,
++ KEY_M, KEY_N, KEY_O, KEY_P,
++ /* 20 */ KEY_Q, KEY_R, KEY_S, KEY_T,
++ KEY_U, KEY_V, KEY_W, KEY_X,
++ /* 28 */ KEY_Y, KEY_Z, KEY_1, KEY_2,
++ KEY_3, KEY_4, KEY_5, KEY_6,
++ /* 30 */ KEY_7, KEY_8, KEY_9, KEY_0,
++ KEY_MINUS, KEY_EQUAL, KEY_RESERVED, KEY_KPASTERISK,
++ /* 38 */ KEY_LEFTBRACE, KEY_SEMICOLON, KEY_APOSTROPHE, KEY_RIGHTBRACE,
++ KEY_COMMA, KEY_DOT, KEY_SLASH, KEY_BACKSLASH,
++ /* 40 */ KEY_F1, KEY_F2, KEY_F3, KEY_F4,
++ KEY_F5, KEY_F6, KEY_F7, KEY_F8,
++ /* 48 */ KEY_F9, KEY_F10, KEY_F11, KEY_F12,
++ KEY_ESC, KEY_INSERT, KEY_DELETE, KEY_GRAVE,
++ /* 50 */ KEY_BACKSPACE, KEY_TAB, KEY_RESERVED, KEY_CAPSLOCK,
++ KEY_LEFTSHIFT, KEY_RIGHTSHIFT, KEY_LEFTCTRL, KEY_LEFTALT,
++ /* 58 */ KEY_RESERVED, KEY_SPACE, KEY_RESERVED, KEY_RESERVED,
++ KEY_LEFT, KEY_DOWN, KEY_UP, KEY_RIGHT,
++ /* 60 */ KEY_RESERVED, KEY_ENTER, KEY_RESERVED, KEY_RESERVED,
++ KEY_SEMICOLON, KEY_KPPLUS, KEY_RESERVED, KEY_RESERVED,
++ /* 68 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 70 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 78 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 80 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 88 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 90 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* 98 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* a0 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* a8 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* b0 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* b8 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* c0 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* c8 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* d0 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* d8 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* e0 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* e8 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* f0 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* f8 */ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED
++};
+diff --git a/drivers/input/si/gcn-si.c b/drivers/input/si/gcn-si.c
+new file mode 100644
+index 0000000..731437f
+--- /dev/null
++++ b/drivers/input/si/gcn-si.c
+@@ -0,0 +1,730 @@
++/*
++ * drivers/input/gcn-si.c
++ *
++ * Nintendo GameCube/Wii Serial Interface (SI) driver.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004 Steven Looman
++ * Copyright (C) 2005,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++/* #define SI_DEBUG */
++
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/io.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <linux/timer.h>
++
++/*
++ * This keymap is for a datel adapter + normal US keyboard.
++ */
++#include "gcn-keymap.h"
++
++/*
++ * Defining HACK_FORCE_KEYBOARD_PORT allows one to specify a port that
++ * will be identified as a keyboard port in case the port gets incorrectly
++ * identified.
++ */
++#define HACK_FORCE_KEYBOARD_PORT
++
++
++#define DRV_MODULE_NAME "gcn-si"
++#define DRV_DESCRIPTION "Nintendo GameCube/Wii Serial Interface (SI) driver"
++#define DRV_AUTHOR "Steven Looman <steven@krx.nl>, " \
++ "Albert Herranz"
++
++static char si_driver_version[] = "1.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++#define SI_MAX_PORTS 4 /* the four controller ports */
++#define SI_REFRESH_TIME (HZ/100) /* polling interval */
++
++/*
++ * Hardware registers
++ */
++#define SI_PORT_SPACING 12
++
++#define SICOUTBUF(i) (0x00 + (i)*SI_PORT_SPACING)
++#define SICINBUFH(i) (0x04 + (i)*SI_PORT_SPACING)
++#define SICINBUFL(i) (0x08 + (i)*SI_PORT_SPACING)
++#define SIPOLL 0x30
++#define SICOMCSR 0x34
++#define SISR 0x38
++#define SIEXILK 0x3c
++
++#define ID_PAD 0x0900
++#define ID_KEYBOARD 0x0820
++#define ID_WIRELESS_BIT (1 << 15)
++#define ID_WAVEBIRD_BIT (1 << 8)
++
++#define PAD_START (1 << 28)
++#define PAD_Y (1 << 27)
++#define PAD_X (1 << 26)
++#define PAD_B (1 << 25)
++#define PAD_A (1 << 24)
++#define PAD_LT (1 << 22)
++#define PAD_RT (1 << 21)
++#define PAD_Z (1 << 20)
++#define PAD_UP (1 << 19)
++#define PAD_DOWN (1 << 18)
++#define PAD_RIGHT (1 << 17)
++#define PAD_LEFT (1 << 16)
++
++
++struct si_keyboard_status {
++ unsigned char old[3];
++};
++
++enum si_control_type {
++ CTL_PAD,
++ CTL_KEYBOARD,
++ CTL_UNKNOWN
++};
++
++struct si_drvdata;
++
++struct si_port {
++ unsigned int index;
++ struct si_drvdata *drvdata;
++
++ u32 id; /* SI id */
++
++ enum si_control_type type;
++ unsigned int raw[2];
++
++ struct input_dev *idev;
++ struct timer_list timer;
++ char name[32];
++
++ union {
++ struct si_keyboard_status keyboard;
++ };
++
++};
++
++struct si_drvdata {
++ struct si_port ports[SI_MAX_PORTS];
++
++ void __iomem *io_base;
++
++ struct device *dev;
++};
++
++
++#ifdef HACK_FORCE_KEYBOARD_PORT
++
++static int si_force_keyboard_port = -1;
++
++#ifdef MODULE
++module_psi_named(force_keyboard_port, si_force_keyboard_port, int, 0644);
++MODULE_PARM_DESC(force_keyboard_port, "port n becomes a keyboard port if"
++ " automatic identification fails");
++#else
++static int __init si_force_keyboard_port_setup(char *line)
++{
++ if (sscanf(line, "%d", &si_force_keyboard_port) != 1)
++ si_force_keyboard_port = -1;
++ return 1;
++}
++__setup("force_keyboard_port=", si_force_keyboard_port_setup);
++#endif /* MODULE */
++
++#endif /* HACK_FORCE_KEYBOARD_PORT */
++
++
++/*
++ * Hardware.
++ *
++ */
++
++static void si_reset(void __iomem *io_base)
++{
++ int i;
++
++ /* clear all SI registers */
++
++ for (i = 0; i < SI_MAX_PORTS; ++i)
++ out_be32(io_base + SICOUTBUF(i), 0);
++ for (i = 0; i < SI_MAX_PORTS; ++i)
++ out_be32(io_base + SICINBUFH(i), 0);
++ for (i = 0; i < SI_MAX_PORTS; ++i)
++ out_be32(io_base + SICINBUFL(i), 0);
++ out_be32(io_base + SIPOLL, 0);
++ out_be32(io_base + SICOMCSR, 0);
++ out_be32(io_base + SISR, 0);
++
++ /* these too... */
++ out_be32(io_base + 0x80, 0);
++ out_be32(io_base + 0x84, 0);
++ out_be32(io_base + 0x88, 0);
++ out_be32(io_base + 0x8c, 0);
++ out_be32(io_base + 0x90, 0);
++ out_be32(io_base + 0x94, 0);
++ out_be32(io_base + 0x98, 0);
++ out_be32(io_base + 0x9c, 0);
++ out_be32(io_base + 0xa0, 0);
++ out_be32(io_base + 0xa4, 0);
++ out_be32(io_base + 0xa8, 0);
++ out_be32(io_base + 0xac, 0);
++}
++
++static void si_set_rumbling(void __iomem *io_base, unsigned int index,
++ int rumble)
++{
++ out_be32(io_base + SICOUTBUF(index), 0x00400000 | (rumble) ? 1 : 0);
++ out_be32(io_base + SISR, 0x80000000);
++}
++
++static void si_wait_transfer_done(void __iomem *io_base)
++{
++ unsigned long deadline = jiffies + 2*HZ;
++ int borked = 0;
++
++ while (!(in_be32(io_base + SICOMCSR) & (1 << 31)) && !borked) {
++ cpu_relax();
++ borked = time_after(jiffies, deadline);
++ }
++
++ if (borked) {
++ drv_printk(KERN_ERR, "serial transfer took too long, "
++ "is your hardware ok?");
++ }
++
++ out_be32(io_base + SICOMCSR,
++ in_be32(io_base + SICOMCSR) | (1 << 31)); /* ack IRQ */
++}
++
++static u32 si_get_controller_id(void __iomem *io_base,
++ unsigned int index)
++{
++ out_be32(io_base + SICOUTBUF(index), 0);
++ out_be32(io_base + SIPOLL, 0);
++
++ out_be32(io_base + SISR, 0x80000000);
++ out_be32(io_base + SICOMCSR, 0xd0010001 | index << 1);
++ si_wait_transfer_done(io_base);
++
++ return in_be32(io_base + 0x80) >> 16;
++}
++
++static void si_setup_polling(struct si_drvdata *drvdata)
++{
++ void __iomem *io_base = drvdata->io_base;
++ unsigned long pad_bits = 0;
++ int i;
++
++ for (i = 0; i < SI_MAX_PORTS; ++i) {
++ switch (drvdata->ports[i].type) {
++ case CTL_PAD:
++ out_be32(io_base + SICOUTBUF(i), 0x00400300);
++ break;
++ case CTL_KEYBOARD:
++ out_be32(io_base + SICOUTBUF(i), 0x00540000);
++ break;
++ default:
++ continue;
++ }
++ pad_bits |= 1 << (7 - i);
++ }
++ out_be32(io_base + SIPOLL, 0x00f70200 | pad_bits);
++
++ out_be32(io_base + SISR, 0x80000000);
++ out_be32(io_base + SICOMCSR, 0xc0010801);
++ si_wait_transfer_done(io_base);
++}
++
++static void si_timer(unsigned long data)
++{
++ struct si_port *port = (struct si_port *)data;
++ unsigned int index = port->index;
++ void __iomem *io_base = port->drvdata->io_base;
++ unsigned long raw[2];
++ unsigned char key[3];
++ unsigned char oldkey;
++ int i;
++
++ raw[0] = in_be32(io_base + SICINBUFH(index));
++ raw[1] = in_be32(io_base + SICINBUFL(index));
++
++ switch (port->type) {
++ case CTL_PAD:
++ /* buttons */
++ input_report_key(port->idev, BTN_A, raw[0] & PAD_A);
++ input_report_key(port->idev, BTN_B, raw[0] & PAD_B);
++ input_report_key(port->idev, BTN_X, raw[0] & PAD_X);
++ input_report_key(port->idev, BTN_Y, raw[0] & PAD_Y);
++ input_report_key(port->idev, BTN_Z, raw[0] & PAD_Z);
++ input_report_key(port->idev, BTN_TL,
++ raw[0] & PAD_LT);
++ input_report_key(port->idev, BTN_TR,
++ raw[0] & PAD_RT);
++ input_report_key(port->idev, BTN_START,
++ raw[0] & PAD_START);
++ input_report_key(port->idev, BTN_0, raw[0] & PAD_UP);
++ input_report_key(port->idev, BTN_1, raw[0] & PAD_RIGHT);
++ input_report_key(port->idev, BTN_2, raw[0] & PAD_DOWN);
++ input_report_key(port->idev, BTN_3, raw[0] & PAD_LEFT);
++
++ /* axis */
++ /* a stick */
++ input_report_abs(port->idev, ABS_X,
++ raw[0] >> 8 & 0xFF);
++ input_report_abs(port->idev, ABS_Y,
++ 0xFF - (raw[0] >> 0 & 0xFF));
++
++ /* b pad */
++ if (raw[0] & PAD_RIGHT)
++ input_report_abs(port->idev, ABS_HAT0X, 1);
++ else if (raw[0] & PAD_LEFT)
++ input_report_abs(port->idev, ABS_HAT0X, -1);
++ else
++ input_report_abs(port->idev, ABS_HAT0X, 0);
++
++ if (raw[0] & PAD_DOWN)
++ input_report_abs(port->idev, ABS_HAT0Y, 1);
++ else if (raw[0] & PAD_UP)
++ input_report_abs(port->idev, ABS_HAT0Y, -1);
++ else
++ input_report_abs(port->idev, ABS_HAT0Y, 0);
++
++ /* c stick */
++ input_report_abs(port->idev, ABS_RX,
++ raw[1] >> 24 & 0xFF);
++ input_report_abs(port->idev, ABS_RY,
++ raw[1] >> 16 & 0xFF);
++
++ /* triggers */
++ input_report_abs(port->idev, ABS_BRAKE,
++ raw[1] >> 8 & 0xFF);
++ input_report_abs(port->idev, ABS_GAS,
++ raw[1] >> 0 & 0xFF);
++
++ break;
++
++ case CTL_KEYBOARD:
++ /*
++ raw nibbles:
++ [4]<C>[0][0][0][0][0][0] <1H><1L><2H><2L><3H><3L><X><C>
++ where:
++ [n] = fixed to n
++ <nH> <nL> = high / low nibble of n-th key pressed
++ (0 if not pressed)
++ <X> = <1H> xor <2H> xor <3H>
++ <C> = counter: 0, 0, 1, 1, 2, 2, ..., F, F, 0, 0, ...
++ */
++ key[0] = (raw[1] >> 24) & 0xFF;
++ key[1] = (raw[1] >> 16) & 0xFF;
++ key[2] = (raw[1] >> 8) & 0xFF;
++
++ /* check if anything was released */
++ for (i = 0; i < 3; ++i) {
++ oldkey = port->keyboard.old[i];
++ if (oldkey != key[0] &&
++ oldkey != key[1] && oldkey != key[2])
++ input_report_key(port->idev,
++ gamecube_keymap[oldkey], 0);
++ }
++
++ /* report keys */
++ for (i = 0; i < 3; ++i) {
++ if (key[i])
++ input_report_key(port->idev,
++ gamecube_keymap[key[i]], 1);
++ port->keyboard.old[i] = key[i];
++ }
++ break;
++
++ default:
++ break;
++ }
++
++ input_sync(port->idev);
++
++ mod_timer(&port->timer, jiffies + SI_REFRESH_TIME);
++}
++
++/*
++ * Input driver hooks.
++ *
++ */
++
++static int si_open(struct input_dev *idev)
++{
++ struct si_port *port = input_get_drvdata(idev);
++
++ init_timer(&port->timer);
++ port->timer.function = si_timer;
++ port->timer.data = (unsigned long)port;
++ port->timer.expires = jiffies + SI_REFRESH_TIME;
++ add_timer(&port->timer);
++
++ return 0;
++}
++
++static void si_close(struct input_dev *idev)
++{
++ struct si_port *port = input_get_drvdata(idev);
++
++ del_timer(&port->timer);
++}
++
++static int si_event(struct input_dev *idev, unsigned int type,
++ unsigned int code, int value)
++{
++ struct si_port *port = input_get_drvdata(idev);
++ unsigned int index = port->index;
++ void __iomem *io_base = port->drvdata->io_base;
++
++ if (type == EV_FF) {
++ if (code == FF_RUMBLE)
++ si_set_rumbling(io_base, index, value);
++ }
++
++ return value;
++}
++
++static int si_setup_pad(struct input_dev *idev)
++{
++ struct ff_device *ff;
++ int retval;
++
++ set_bit(EV_KEY, idev->evbit);
++ set_bit(EV_ABS, idev->evbit);
++
++ set_bit(BTN_A, idev->keybit);
++ set_bit(BTN_B, idev->keybit);
++ set_bit(BTN_X, idev->keybit);
++ set_bit(BTN_Y, idev->keybit);
++ set_bit(BTN_Z, idev->keybit);
++ set_bit(BTN_TL, idev->keybit);
++ set_bit(BTN_TR, idev->keybit);
++ set_bit(BTN_START, idev->keybit);
++ set_bit(BTN_0, idev->keybit);
++ set_bit(BTN_1, idev->keybit);
++ set_bit(BTN_2, idev->keybit);
++ set_bit(BTN_3, idev->keybit);
++
++ /* a stick */
++ set_bit(ABS_X, idev->absbit);
++ idev->absmin[ABS_X] = 0;
++ idev->absmax[ABS_X] = 255;
++ idev->absfuzz[ABS_X] = 8;
++ idev->absflat[ABS_X] = 8;
++
++ set_bit(ABS_Y, idev->absbit);
++ idev->absmin[ABS_Y] = 0;
++ idev->absmax[ABS_Y] = 255;
++ idev->absfuzz[ABS_Y] = 8;
++ idev->absflat[ABS_Y] = 8;
++
++ /* b pad */
++ input_set_abs_params(idev, ABS_HAT0X, -1, 1, 0, 0);
++ input_set_abs_params(idev, ABS_HAT0Y, -1, 1, 0, 0);
++
++ /* c stick */
++ set_bit(ABS_RX, idev->absbit);
++ idev->absmin[ABS_RX] = 0;
++ idev->absmax[ABS_RX] = 255;
++ idev->absfuzz[ABS_RX] = 8;
++ idev->absflat[ABS_RX] = 8;
++
++ set_bit(ABS_RY, idev->absbit);
++ idev->absmin[ABS_RY] = 0;
++ idev->absmax[ABS_RY] = 255;
++ idev->absfuzz[ABS_RY] = 8;
++ idev->absflat[ABS_RY] = 8;
++
++ /* triggers */
++ set_bit(ABS_GAS, idev->absbit);
++ idev->absmin[ABS_GAS] = -255;
++ idev->absmax[ABS_GAS] = 255;
++ idev->absfuzz[ABS_GAS] = 16;
++ idev->absflat[ABS_GAS] = 16;
++
++ set_bit(ABS_BRAKE, idev->absbit);
++ idev->absmin[ABS_BRAKE] = -255;
++ idev->absmax[ABS_BRAKE] = 255;
++ idev->absfuzz[ABS_BRAKE] = 16;
++ idev->absflat[ABS_BRAKE] = 16;
++
++ /* rumbling */
++ set_bit(EV_FF, idev->evbit);
++ set_bit(FF_RUMBLE, idev->ffbit);
++ retval = input_ff_create(idev, 1);
++ if (retval)
++ return retval;
++ ff = idev->ff;
++ idev->event = si_event;
++ return 0;
++}
++
++static void si_setup_keyboard(struct input_dev *idev)
++{
++ int i;
++
++ set_bit(EV_KEY, idev->evbit);
++ set_bit(EV_REP, idev->evbit);
++
++ for (i = 0; i < 255; ++i)
++ set_bit(gamecube_keymap[i], idev->keybit);
++}
++
++static int si_port_probe(struct si_port *port)
++{
++ unsigned int index = port->index;
++ void __iomem *io_base = port->drvdata->io_base;
++ struct input_dev *idev;
++ int retval = 0;
++
++ si_reset(io_base);
++
++ /*
++ * Determine input device type from SI id.
++ */
++ port->id = si_get_controller_id(io_base, index);
++ if (port->id == ID_PAD) {
++ port->type = CTL_PAD;
++ strcpy(port->name, "standard pad");
++ } else if (port->id & ID_WIRELESS_BIT) {
++ /* wireless pad */
++ port->type = CTL_PAD;
++ strcpy(port->name, (port->id & ID_WAVEBIRD_BIT) ?
++ "Nintendo Wavebird" : "wireless pad");
++ } else if (port->id == ID_KEYBOARD) {
++ port->type = CTL_KEYBOARD;
++ strcpy(port->name, "keyboard");
++ } else {
++ port->type = CTL_UNKNOWN;
++ if (port->id) {
++ sprintf(port->name, "unknown (%x)",
++ port->id);
++#ifdef HACK_FORCE_KEYBOARD_PORT
++ if (index+1 == si_force_keyboard_port) {
++ drv_printk(KERN_WARNING,
++ "port %d forced to keyboard mode\n",
++ index+1);
++ port->id = ID_KEYBOARD;
++ port->type = CTL_KEYBOARD;
++ strcpy(port->name, "keyboard (forced)");
++ }
++#endif /* HACK_FORCE_KEYBOARD_PORT */
++ } else {
++ strcpy(port->name, "not present");
++ }
++ }
++
++ if (port->type == CTL_UNKNOWN) {
++ retval = -ENODEV;
++ goto done;
++ }
++
++ idev = input_allocate_device();
++ if (!idev) {
++ drv_printk(KERN_ERR, "failed to allocate input_dev\n");
++ retval = -ENOMEM;
++ goto done;
++ }
++
++ idev->open = si_open;
++ idev->close = si_close;
++ idev->name = port->name;
++
++ switch (port->type) {
++ case CTL_PAD:
++ retval = si_setup_pad(idev);
++ break;
++ case CTL_KEYBOARD:
++ si_setup_keyboard(idev);
++ break;
++ default:
++ break;
++ }
++
++ if (retval) {
++ input_free_device(idev);
++ goto done;
++ }
++
++ input_set_drvdata(idev, port);
++ port->idev = idev;
++
++done:
++ return retval;
++}
++
++/*
++ * Setup routines.
++ *
++ */
++
++static int si_init(struct si_drvdata *drvdata, struct resource *mem)
++{
++ struct si_port *port;
++ int index;
++ int retval;
++ int error;
++
++ drvdata->io_base = ioremap(mem->start, mem->end - mem->start + 1);
++
++ for (index = 0; index < SI_MAX_PORTS; ++index) {
++ port = &drvdata->ports[index];
++
++ memset(port, 0, sizeof(*port));
++ port->index = index;
++ port->drvdata = drvdata;
++
++ retval = si_port_probe(port);
++ if (!retval) {
++ error = input_register_device(port->idev);
++ if (error) {
++ drv_printk(KERN_ERR,
++ "input device registration failed"
++ " (%d) for port %d", error, index+1);
++ port->idev = NULL;
++ } else
++ drv_printk(KERN_INFO, "port %d: %s\n",
++ index+1, port->name);
++ }
++ }
++
++ si_setup_polling(drvdata);
++
++ return 0;
++}
++
++static void si_exit(struct si_drvdata *drvdata)
++{
++ struct si_port *port;
++ int index;
++
++ for (index = 0; index < SI_MAX_PORTS; ++index) {
++ port = &drvdata->ports[index];
++ if (port->idev)
++ input_unregister_device(port->idev);
++ }
++
++ if (drvdata->io_base) {
++ iounmap(drvdata->io_base);
++ drvdata->io_base = NULL;
++ }
++}
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int si_do_probe(struct device *dev, struct resource *mem)
++{
++ struct si_drvdata *drvdata;
++ int retval;
++
++ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
++ if (!drvdata) {
++ drv_printk(KERN_ERR, "failed to allocate si_drvdata\n");
++ return -ENOMEM;
++ }
++ dev_set_drvdata(dev, drvdata);
++ drvdata->dev = dev;
++
++ retval = si_init(drvdata, mem);
++ if (retval) {
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ }
++ return retval;
++}
++
++static int si_do_remove(struct device *dev)
++{
++ struct si_drvdata *drvdata = dev_get_drvdata(dev);
++
++ if (drvdata) {
++ si_exit(drvdata);
++ dev_set_drvdata(dev, NULL);
++ kfree(drvdata);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int __init si_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource mem;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &mem);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENODEV;
++ }
++
++ return si_do_probe(&odev->dev, &mem);
++}
++
++static int __exit si_of_remove(struct of_device *odev)
++{
++ return si_do_remove(&odev->dev);
++}
++
++static struct of_device_id si_of_match[] = {
++ { .compatible = "nintendo,flipper-serial" },
++ { .compatible = "nintendo,hollywood-serial" },
++ { },
++};
++
++
++MODULE_DEVICE_TABLE(of, si_of_match);
++
++static struct of_platform_driver si_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = si_of_match,
++ .probe = si_of_probe,
++ .remove = si_of_remove,
++};
++
++
++/*
++ * Module interface hooks.
++ *
++ */
++
++static int __init si_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ si_driver_version);
++
++ return of_register_platform_driver(&si_of_driver);
++}
++
++static void __exit si_exit_module(void)
++{
++ of_unregister_platform_driver(&si_of_driver);
++}
++
++module_init(si_init_module);
++module_exit(si_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index fee7304..1b07a82 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -55,6 +55,28 @@ config ATMEL_TCB_CLKSRC_BLOCK
+ TC can be used for other purposes, such as PWM generation and
+ interval timing.
+
++config GAMECUBE_GQR
++ tristate "Nintendo GameCube/Wii Graphic Quantization Registers (GQR)"
++ depends on GAMECUBE_COMMON
++ help
++ This option enables device driver support for the Gekko/Broadway
++ processors' Graphic Quantization Registers.
++ These registers are used with the psql and psqst instructions.
++ The registers will appear in /proc/sys/gqr.
++
++config GAMECUBE_MI
++ tristate "Nintendo GameCube Memory Interface (MI)"
++ depends on GAMECUBE
++ help
++ If you say yes to this option, support will be included for the
++ Memory Interface (MI) of the Nintendo GameCube.
++
++ The MI allows one to setup up to four protected memory regions,
++ catching invalid accesses to them. The MI catches out of bounds
++ memory accesses too.
++
++ If in doubt, say N here.
++
+ config IBM_ASM
+ tristate "Device driver for IBM RSA service processor"
+ depends on X86 && PCI && INPUT && EXPERIMENTAL
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index 817f7f5..79387aa 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -33,3 +33,5 @@ obj-$(CONFIG_SGI_XP) += sgi-xp/
+ obj-$(CONFIG_SGI_GRU) += sgi-gru/
+ obj-$(CONFIG_HP_ILO) += hpilo.o
+ obj-$(CONFIG_C2PORT) += c2port/
++obj-$(CONFIG_GAMECUBE_GQR) += gcn-gqr.o
++obj-$(CONFIG_GAMECUBE_MI) += gcn-mi.o
+diff --git a/drivers/misc/gcn-gqr.c b/drivers/misc/gcn-gqr.c
+new file mode 100644
+index 0000000..6648265
+--- /dev/null
++++ b/drivers/misc/gcn-gqr.c
+@@ -0,0 +1,129 @@
++/*
++ * drivers/misc/gcn-gqr.c
++ *
++ * Nintendo GameCube GQR driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/ctype.h>
++#include <linux/sysctl.h>
++#include <linux/types.h>
++#include <linux/uaccess.h>
++
++static u32 gqr_values[8];
++static struct ctl_table_header *gqr_table_header;
++
++#define SPR_GQR0 912
++#define SPR_GQR1 913
++#define SPR_GQR2 914
++#define SPR_GQR3 915
++#define SPR_GQR4 916
++#define SPR_GQR5 917
++#define SPR_GQR6 918
++#define SPR_GQR7 919
++
++#define MFSPR_CASE(i) case (i): (*((u32 *)table->data) = mfspr(SPR_GQR##i))
++#define MTSPR_CASE(i) case (i): mtspr(SPR_GQR##i, *((u32 *)table->data))
++
++static int proc_dogqr(ctl_table *table, int write, struct file *file,
++ void __user *buffer, size_t *lenp, loff_t *ppos)
++{
++ int r;
++
++ if (!write) { /* if they are reading, update the variable */
++ switch (table->data - (void *)gqr_values) {
++ MFSPR_CASE(0); break;
++ MFSPR_CASE(1); break;
++ MFSPR_CASE(2); break;
++ MFSPR_CASE(3); break;
++ MFSPR_CASE(4); break;
++ MFSPR_CASE(5); break;
++ MFSPR_CASE(6); break;
++ MFSPR_CASE(7); break;
++ default:
++ return -EFAULT; /* shouldn't happen */
++ }
++ }
++
++ r = proc_dointvec(table, write, file, buffer, lenp, ppos);
++
++ if ((r == 0) && write) { /* if they are writing, update the reg */
++ switch (table->data - (void *)gqr_values) {
++ MTSPR_CASE(0); break;
++ MTSPR_CASE(1); break;
++ MTSPR_CASE(2); break;
++ MTSPR_CASE(3); break;
++ MTSPR_CASE(4); break;
++ MTSPR_CASE(5); break;
++ MTSPR_CASE(6); break;
++ MTSPR_CASE(7); break;
++ default:
++ return -EFAULT; /* shouldn't happen */
++ }
++ }
++
++ return r;
++}
++
++#define DECLARE_GQR(i) { \
++ .ctl_name = CTL_UNNUMBERED, \
++ .procname = "gqr" #i, \
++ .data = gqr_values + i, \
++ .maxlen = sizeof(int), \
++ .mode = 0644, \
++ .proc_handler = &proc_dogqr \
++ }
++
++static ctl_table gqr_members[] = {
++ DECLARE_GQR(0),
++ DECLARE_GQR(1),
++ DECLARE_GQR(2),
++ DECLARE_GQR(3),
++ DECLARE_GQR(4),
++ DECLARE_GQR(5),
++ DECLARE_GQR(6),
++ DECLARE_GQR(7),
++ { .ctl_name = 0 }
++};
++
++static ctl_table gqr_table[] = {
++ {
++ .ctl_name = CTL_UNNUMBERED,
++ .procname = "gqr",
++ .mode = 0555,
++ .child = gqr_members,
++ },
++ { .ctl_name = 0 }
++};
++
++int __init gcngqr_init(void)
++{
++ gqr_table_header = register_sysctl_table(gqr_table);
++ if (!gqr_table_header) {
++ printk(KERN_ERR "Unable to register GQR sysctl table\n");
++ return -ENOMEM;
++ }
++ return 0;
++}
++
++void __exit gcngqr_exit(void)
++{
++ unregister_sysctl_table(gqr_table_header);
++}
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Todd Jeffreys <todd@voidpointer.org>");
++module_init(gcngqr_init);
++module_exit(gcngqr_exit);
+diff --git a/drivers/misc/gcn-mi.c b/drivers/misc/gcn-mi.c
+new file mode 100644
+index 0000000..864017d
+--- /dev/null
++++ b/drivers/misc/gcn-mi.c
+@@ -0,0 +1,443 @@
++/*
++ * drivers/misc/gcn-mi.c
++ *
++ * Nintendo GameCube Memory Interface (MI) driver.
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004,2005,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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/device.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/ioport.h>
++#include <linux/interrupt.h>
++#include <linux/spinlock.h>
++#include <linux/proc_fs.h>
++#include <linux/io.h>
++
++#include "gcn-mi.h"
++
++
++#define MI_IRQ 7
++
++#define MI_BASE 0xcc004000
++#define MI_SIZE 0x80
++
++#define MI_PROT_REGION0 ((u32 __iomem *)(MI_BASE+0x00))
++#define MI_PROT_REGION1 ((u32 __iomem *)(MI_BASE+0x04))
++#define MI_PROT_REGION2 ((u32 __iomem *)(MI_BASE+0x08))
++#define MI_PROT_REGION3 ((u32 __iomem *)(MI_BASE+0x0c))
++
++#define MI_PROT_TYPE ((u16 __iomem *)(MI_BASE+0x10))
++
++#define MI_IMR ((u16 __iomem *)(MI_BASE+0x1c))
++#define MI_ICR ((u16 __iomem *)(MI_BASE+0x1e))
++
++#define MI_0x4020 ((u16 __iomem *)(MI_BASE+0x20))
++
++#define MI_ADDRLO ((u16 __iomem *)(MI_BASE+0x22))
++#define MI_ADDRHI ((u16 __iomem *)(MI_BASE+0x24))
++
++#define MI_PAGE_SHIFT 10
++#define MI_PAGE_MASK (~((1 << MI_PAGE_SHIFT) - 1))
++#define MI_PAGE_SIZE (1UL << MI_PAGE_SHIFT)
++
++struct mi_private {
++ struct device *device;
++ int irq;
++ int nr_regions;
++ int regions_bitmap;
++ unsigned long faults[MI_MAX_REGIONS+1];
++ unsigned long last_address;
++ unsigned long last_address_faults;
++ spinlock_t lock;
++#ifdef CONFIG_PROC_FS
++ struct proc_dir_entry *proc_file;
++#endif
++};
++
++static struct mi_private *mi_private;
++
++#define DRV_MODULE_NAME "gcn-mi"
++#define DRV_DESCRIPTION "Nintendo GameCube Memory Interface driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++#define PFX DRV_MODULE_NAME ": "
++#define mi_printk(level, format, arg...) \
++ printk(level PFX format , ## arg)
++
++/*
++ *
++ */
++static irqreturn_t mi_handler(int this_irq, void *data)
++{
++ struct mi_private *priv = (struct mi_private *)data;
++ unsigned long flags;
++ int region, cause, ack;
++ unsigned long address;
++
++ spin_lock_irqsave(&priv->lock, flags);
++
++ address = in_be16(MI_ADDRLO) | (in_be16(MI_ADDRHI)<<16);
++
++ ack = 0;
++ cause = in_be16(MI_ICR);
++
++ /* a fault was detected in some of the registered regions */
++ if ((cause & 0xf) != 0) {
++ for (region = 0; region < MI_MAX_REGIONS; region++) {
++ if ((cause & (1 << region)) != 0) {
++ priv->faults[region]++;
++ mi_printk(KERN_INFO, "bad access on region #%d"
++ " at 0x%lx\n", region, address);
++ }
++ }
++ }
++
++ /* a fault was detected out of any registered region */
++ if ((cause & (1 << 4)) != 0) {
++ priv->faults[MI_MAX_REGIONS]++;
++ if (address == priv->last_address) {
++ priv->last_address_faults++;
++ } else {
++ if (priv->last_address_faults > 0) {
++#if 0
++ mi_printk(KERN_INFO, "bad access"
++ " at 0x%lx (%lu times)\n",
++ priv->last_address,
++ priv->last_address_faults);
++#endif
++ }
++ priv->last_address = address;
++ priv->last_address_faults = 1;
++ }
++ }
++ ack |= cause;
++ out_be16(MI_ICR, ack); /* ack int */
++ out_be16(MI_0x4020, 0); /* kind of ack */
++
++ spin_unlock_irqrestore(&priv->lock, flags);
++
++ return IRQ_HANDLED;
++}
++
++#ifdef CONFIG_PROC_FS
++/*
++ *
++ */
++static int mi_proc_read(char *page, char **start,
++ off_t off, int count,
++ int *eof, void *data)
++{
++ struct mi_private *priv = (struct mi_private *)data;
++ int len;
++ int region;
++
++ len = sprintf(page, "# <region> <faults>\n");
++ for (region = 0; region < MI_MAX_REGIONS; region++) {
++ if ((priv->regions_bitmap & (1<<region)) != 0) {
++ len += sprintf(page+len, "%d\t%lu\n",
++ region, priv->faults[region]);
++ }
++ }
++ len += sprintf(page+len, "%s\t%lu\n",
++ "none", priv->faults[MI_MAX_REGIONS]);
++
++ return len;
++}
++
++#endif /* CONFIG_PROC_FS */
++
++/*
++ *
++ */
++static int mi_setup_irq(struct mi_private *priv)
++{
++ int retval;
++
++ retval = request_irq(priv->irq, mi_handler, 0, DRV_MODULE_NAME, priv);
++ if (retval)
++ mi_printk(KERN_ERR, "request of irq%d failed\n", priv->irq);
++ else
++ out_be16(MI_IMR, (1<<4)); /* do not mask all MI interrupts */
++
++ return retval;
++}
++
++/*
++ *
++ */
++static int mi_probe(struct device *device, struct resource *mem, int irq)
++{
++ struct mi_private *priv;
++ int retval;
++
++ priv = kmalloc(sizeof(struct mi_private), GFP_KERNEL);
++ if (!priv) {
++ retval = -ENOMEM;
++ goto err;
++ }
++
++ memset(priv, 0, sizeof(*priv));
++ /*
++ int region;
++ priv->nr_regions = 0;
++ priv->regions_bitmap = 0;
++ for( region = 0; region < MI_MAX_REGIONS; region++ ) {
++ priv->faults[region] = 0;
++ }
++ priv->last_address_faults = 0;
++ */
++ spin_lock_init(&priv->lock);
++
++ priv->device = device;
++ dev_set_drvdata(priv->device, priv);
++
++ priv->irq = irq;
++ retval = mi_setup_irq(priv);
++ if (retval)
++ goto err_setup_irq;
++
++#ifdef CONFIG_PROC_FS
++ struct platform_device *pdev = to_platform_device(device);
++ priv->proc_file = create_proc_read_entry(pdev->dev.bus_id, 0444, NULL,
++ mi_proc_read, priv);
++ priv->proc_file->owner = THIS_MODULE;
++#endif /* CONFIG_PROC_FS */
++
++ mi_private = priv;
++
++ return 0;
++
++err_setup_irq:
++ dev_set_drvdata(priv->device, NULL);
++ kfree(priv);
++err:
++ return retval;
++}
++
++/*
++ *
++ */
++static void mi_shutdown(struct mi_private *priv)
++{
++ gcn_mi_region_unprotect_all();
++}
++
++/*
++ *
++ */
++static void mi_remove(struct mi_private *priv)
++{
++#ifdef CONFIG_PROC_FS
++ struct platform_device *pdev = to_platform_device(priv->device);
++ remove_proc_entry(pdev->dev.bus_id, NULL);
++#endif /* CONFIG_PROC_FS */
++
++ mi_shutdown(priv);
++
++ /* free interrupt handler */
++ free_irq(priv->irq, priv);
++
++ kfree(priv);
++ mi_private = NULL;
++}
++
++/*
++ *
++ */
++static int __init mi_drv_probe(struct device *device)
++{
++ struct platform_device *pdev = to_platform_device(device);
++ struct resource *mem;
++ int irq;
++
++ irq = platform_get_irq(pdev, 0);
++ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!mem)
++ return -ENODEV;
++
++ mi_printk(KERN_INFO, "%s\n", DRV_DESCRIPTION);
++
++ return mi_probe(device, mem, irq);
++}
++
++/*
++ *
++ */
++static int mi_drv_remove(struct device *device)
++{
++ struct mi_private *priv = dev_get_drvdata(device);
++
++ if (priv) {
++ mi_remove(priv);
++ dev_set_drvdata(device, NULL);
++ }
++
++ return 0;
++}
++
++/*
++ *
++ */
++static void mi_drv_shutdown(struct device *device)
++{
++ struct mi_private *priv = dev_get_drvdata(device);
++
++ if (priv)
++ mi_shutdown(priv);
++}
++
++static struct device_driver mi_device_driver = {
++ .name = "mi",
++ .bus = &platform_bus_type,
++ .probe = mi_drv_probe,
++ .remove = mi_drv_remove,
++ .shutdown = mi_drv_shutdown,
++};
++
++static struct resource mi_resources[] = {
++ [0] = {
++ .start = MI_BASE,
++ .end = MI_BASE + MI_SIZE - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = MI_IRQ,
++ .end = MI_IRQ,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device mi_device = {
++ .name = "mi",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(mi_resources),
++ .resource = mi_resources,
++};
++
++/*
++ *
++ */
++static int __init mi_init(void)
++{
++ int retval = 0;
++
++ retval = driver_register(&mi_device_driver);
++ if (!retval)
++ retval = platform_device_register(&mi_device);
++
++ return retval;
++}
++
++/*
++ *
++ */
++static void __exit mi_exit(void)
++{
++ platform_device_unregister(&mi_device);
++ driver_unregister(&mi_device_driver);
++}
++
++module_init(mi_init);
++module_exit(mi_exit);
++
++
++/* public interface */
++
++/*
++ *
++ */
++int gcn_mi_region_protect(unsigned long physlo, unsigned long physhi, int type)
++{
++ struct mi_private *priv = mi_private;
++ int region, free_regions;
++ u16 pagelo, pagehi;
++
++ if (!priv)
++ return -ENODEV;
++
++ if (type < MI_PROT_NONE || type > MI_PROT_RW)
++ return -EINVAL;
++
++ if ((physlo & ~MI_PAGE_MASK) != 0 || (physhi & ~MI_PAGE_MASK) != 0)
++ return -EINVAL;
++
++ free_regions = MI_MAX_REGIONS - priv->nr_regions;
++ if (free_regions <= 0)
++ return -ENOMEM;
++ for (region = 0; region < MI_MAX_REGIONS; region++) {
++ if ((priv->regions_bitmap & (1<<region)) == 0)
++ break;
++ }
++ if (region >= MI_MAX_REGIONS)
++ return -ENOMEM;
++ priv->regions_bitmap |= (1 << region);
++ priv->nr_regions++;
++
++ out_be16(MI_PROT_TYPE,
++ (in_be16(MI_PROT_TYPE) & ~(3 << 2*region))|(type << 2*region));
++ pagelo = physlo >> MI_PAGE_SHIFT;
++ pagehi = (physhi >> MI_PAGE_SHIFT) - 1;
++ out_be32(MI_PROT_REGION0 + 4*region, (pagelo << 16) | pagehi);
++ out_be16(MI_IMR, in_be16(MI_IMR) | (1 << region));
++
++ mi_printk(KERN_INFO, "protected region #%d"
++ " from 0x%0lx to 0x%0lx with 0x%0x\n", region,
++ (unsigned long)(pagelo << MI_PAGE_SHIFT),
++ (unsigned long)(((pagehi+1) << MI_PAGE_SHIFT) - 1),
++ type);
++
++ return region;
++}
++
++/*
++ *
++ */
++int gcn_mi_region_unprotect(int region)
++{
++ struct mi_private *priv = mi_private;
++
++ if (!priv)
++ return -ENODEV;
++
++ if (region < 0 || region > MI_MAX_REGIONS)
++ return -EINVAL;
++
++ out_be16(MI_IMR, in_be16(MI_IMR) & ~(1 << region));
++ out_be32(MI_PROT_REGION0 + 4*region, 0);
++ out_be16(MI_PROT_TYPE,
++ in_be16(MI_PROT_TYPE) | (MI_PROT_RW << 2*region));
++
++ if ((priv->regions_bitmap & (1<<region)) != 0)
++ mi_printk(KERN_INFO, "region #%d unprotected\n", region);
++
++ priv->regions_bitmap &= ~(1 << region);
++ priv->nr_regions--;
++
++ return 0;
++}
++
++/*
++ *
++ */
++void gcn_mi_region_unprotect_all(void)
++{
++ int region;
++
++ out_be16(MI_IMR, 0);
++ for (region = 0; region < MI_MAX_REGIONS; region++)
++ gcn_mi_region_unprotect(region);
++}
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
+diff --git a/drivers/misc/gcn-mi.h b/drivers/misc/gcn-mi.h
+new file mode 100644
+index 0000000..201387b
+--- /dev/null
++++ b/drivers/misc/gcn-mi.h
+@@ -0,0 +1,30 @@
++/*
++ * drivers/misc/gcn-mi.h
++ *
++ * Nintendo GameCube Memory Interface driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004,2005,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __GCN_MI_H
++#define __GCN_MI_H
++
++#define MI_MAX_REGIONS 4
++
++#define MI_PROT_NONE 0x00
++#define MI_PROT_RO 0x01
++#define MI_PROT_WO 0x02
++#define MI_PROT_RW 0x03
++
++int gcn_mi_region_protect(unsigned long physlo, unsigned long physhi, int type);
++int gcn_mi_region_unprotect(int region);
++void gcn_mi_region_unprotect_all(void);
++
++#endif /* __GCN_MI_H */
++
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index 231eeaf..a56c769 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -270,6 +270,15 @@ config BMAC
+ To compile this driver as a module, choose M here: the module
+ will be called bmac.
+
++config GAMECUBE_BBA
++ tristate "Nintendo GameCube ethernet BroadBand Adapter (BBA)"
++ depends on GAMECUBE_EXI && GAMECUBE
++ help
++ Say Y here to add ethernet support for the Broadband Adapter (BBA).
++
++ To compile this driver as a module, choose M here: the module
++ will be called gcn-bba.
++
+ config ARIADNE
+ tristate "Ariadne support"
+ depends on ZORRO
+diff --git a/drivers/net/Makefile b/drivers/net/Makefile
+index 017383a..79854fa 100644
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -226,6 +226,7 @@ obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o
+ pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o
+ obj-$(CONFIG_MLX4_CORE) += mlx4/
+ obj-$(CONFIG_ENC28J60) += enc28j60.o
++obj-$(CONFIG_GAMECUBE_BBA) += gcn-bba.o
+
+ obj-$(CONFIG_XTENSA_XT2000_SONIC) += xtsonic.o
+
+diff --git a/drivers/net/gcn-bba.c b/drivers/net/gcn-bba.c
+new file mode 100644
+index 0000000..2f67968
+--- /dev/null
++++ b/drivers/net/gcn-bba.c
+@@ -0,0 +1,1252 @@
++/**
++ * drivers/net/gcn-bba.c
++ *
++ * Nintendo GameCube Broadband Adapter (BBA) driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2005 Todd Jeffreys
++ * Copyright (C) 2004,2005,2006,2007,2008,2009 Albert Herranz
++ *
++ * Based on previous work by Stefan Esser, Franz Lehner, Costis and tmbinc.
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define BBA_DEBUG
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/string.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/inet.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/spinlock.h>
++#include <linux/kthread.h>
++#include <linux/wait.h>
++#include <linux/io.h>
++#include <linux/exi.h>
++#include <asm/system.h>
++
++
++#define DRV_MODULE_NAME "gcn-bba"
++#define DRV_DESCRIPTION "Nintendo GameCube Broadband Adapter (BBA) driver"
++#define DRV_AUTHOR "Albert Herranz, " \
++ "Todd Jeffreys"
++
++static char bba_driver_version[] = "1.4i";
++
++
++#define bba_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++#ifdef BBA_DEBUG
++# define DBG(fmt, args...) \
++ printk(KERN_ERR "%s: " fmt, __func__ , ## args)
++#else
++# define DBG(fmt, args...)
++#endif
++
++/*
++ * EXpansion Interface glue for the Broadband Adapter.
++ *
++ */
++#define BBA_EXI_ID 0x04020200
++
++#define BBA_EXI_IRQ_CHANNEL 2 /* INT line uses EXI2INTB */
++#define BBA_EXI_CHANNEL 0 /* rest of lines use EXI0xxx */
++#define BBA_EXI_DEVICE 2 /* chip select, EXI0CSB2 */
++#define BBA_EXI_FREQ 5 /* 32MHz */
++
++#define BBA_CMD_IR_MASKALL 0x00
++#define BBA_CMD_IR_MASKNONE 0xf8
++
++static inline void bba_select(void);
++static inline void bba_deselect(void);
++static inline void bba_write(void *data, size_t len);
++static inline void bba_read(void *data, size_t len);
++
++static void bba_ins(int reg, void *val, int len);
++static void bba_outs(int reg, void *val, int len);
++
++/*
++ * Command Registers I/O.
++ */
++
++static inline void bba_cmd_ins_nosel(int reg, void *val, int len)
++{
++ u16 req;
++ req = reg << 8;
++ bba_write(&req, sizeof(req));
++ bba_read(val, len);
++}
++
++static void bba_cmd_ins(int reg, void *val, int len)
++{
++ bba_select();
++ bba_cmd_ins_nosel(reg, val, len);
++ bba_deselect();
++}
++
++static inline void bba_cmd_outs_nosel(int reg, void *val, int len)
++{
++ u16 req;
++ req = (reg << 8) | 0x4000;
++ bba_write(&req, sizeof(req));
++ bba_write(val, len);
++}
++
++static void bba_cmd_outs(int reg, void *val, int len)
++{
++ bba_select();
++ bba_cmd_outs_nosel(reg, val, len);
++ bba_deselect();
++}
++
++static inline u8 bba_cmd_in8(int reg)
++{
++ u8 val;
++ bba_cmd_ins(reg, &val, sizeof(val));
++ return val;
++}
++
++static u8 bba_cmd_in8_slow(int reg)
++{
++ u8 val;
++ bba_select();
++ bba_cmd_ins_nosel(reg, &val, sizeof(val));
++ udelay(200);
++ bba_deselect();
++ return val;
++}
++
++static inline void bba_cmd_out8(int reg, u8 val)
++{
++ bba_cmd_outs(reg, &val, sizeof(val));
++}
++
++
++/*
++ * Registers I/O.
++ */
++
++static inline u8 bba_in8(int reg)
++{
++ u8 val;
++ bba_ins(reg, &val, sizeof(val));
++ return val;
++}
++
++static inline void bba_out8(int reg, u8 val)
++{
++ bba_outs(reg, &val, sizeof(val));
++}
++
++static inline u16 bba_in16(int reg)
++{
++ u16 val;
++ bba_ins(reg, &val, sizeof(val));
++ return le16_to_cpup(&val);
++}
++
++static inline void bba_out16(int reg, u16 val)
++{
++ cpu_to_le16s(&val);
++ bba_outs(reg, &val, sizeof(val));
++}
++
++#define bba_in12(reg) (bba_in16(reg) & 0x0fff)
++#define bba_out12(reg, val) do { bba_out16(reg, (val)&0x0fff); } while (0)
++
++static inline void bba_ins_nosel(int reg, void *val, int len)
++{
++ u32 req;
++ req = (reg << 8) | 0x80000000;
++ bba_write(&req, sizeof(req));
++ bba_read(val, len);
++}
++
++static void bba_ins(int reg, void *val, int len)
++{
++ bba_select();
++ bba_ins_nosel(reg, val, len);
++ bba_deselect();
++}
++
++static inline void bba_outs_nosel(int reg, void *val, int len)
++{
++ u32 req;
++ req = (reg << 8) | 0xC0000000;
++ bba_write(&req, sizeof(req));
++ bba_write(val, len);
++}
++
++static inline void bba_outs_nosel_continued(void *val, int len)
++{
++ bba_write(val, len);
++}
++
++static void bba_outs(int reg, void *val, int len)
++{
++ bba_select();
++ bba_outs_nosel(reg, val, len);
++ bba_deselect();
++}
++
++
++/*
++ * Macronix mx98728ec supporting bits.
++ *
++ */
++
++#define BBA_NCRA 0x00 /* Network Control Register A, RW */
++#define BBA_NCRA_RESET (1<<0) /* RESET */
++#define BBA_NCRA_ST0 (1<<1) /* ST0, Start transmit command/status */
++#define BBA_NCRA_ST1 (1<<2) /* ST1, " */
++#define BBA_NCRA_SR (1<<3) /* SR, Start Receive */
++
++#define BBA_NCRB 0x01 /* Network Control Register B, RW */
++#define BBA_NCRB_PR (1<<0) /* PR, Promiscuous Mode */
++#define BBA_NCRB_CA (1<<1) /* CA, Capture Effect Mode */
++#define BBA_NCRB_PM (1<<2) /* PM, Pass Multicast */
++#define BBA_NCRB_PB (1<<3) /* PB, Pass Bad Frame */
++#define BBA_NCRB_AB (1<<4) /* AB, Accept Broadcast */
++#define BBA_NCRB_HBD (1<<5) /* HBD, reserved */
++#define BBA_NCRB_RXINTC0 (1<<6) /* RXINTC, Receive Interrupt Counter */
++#define BBA_NCRB_RXINTC1 (1<<7) /* " */
++#define BBA_NCRB_1_PACKET_PER_INT (0<<6) /* 0 0 */
++#define BBA_NCRB_2_PACKETS_PER_INT (1<<6) /* 0 1 */
++#define BBA_NCRB_4_PACKETS_PER_INT (2<<6) /* 1 0 */
++#define BBA_NCRB_8_PACKETS_PER_INT (3<<6) /* 1 1 */
++
++#define BBA_LTPS 0x04 /* Last Transmitted Packet Status, RO */
++#define BBA_LRPS 0x05 /* Last Received Packet Status, RO */
++
++#define BBA_IMR 0x08 /* Interrupt Mask Register, RW, 00h */
++#define BBA_IMR_FRAGIM (1<<0) /* FRAGIM, Fragment Counter Int Mask */
++#define BBA_IMR_RIM (1<<1) /* RIM, Receive Interrupt Mask */
++#define BBA_IMR_TIM (1<<2) /* TIM, Transmit Interrupt Mask */
++#define BBA_IMR_REIM (1<<3) /* REIM, Receive Error Interrupt Mask */
++#define BBA_IMR_TEIM (1<<4) /* TEIM, Transmit Error Interrupt Mask */
++#define BBA_IMR_FIFOEIM (1<<5) /* FIFOEIM, FIFO Error Interrupt Mask */
++#define BBA_IMR_BUSEIM (1<<6) /* BUSEIM, BUS Error Interrupt Mask */
++#define BBA_IMR_RBFIM (1<<7) /* RBFIM, RX Buf Full Interrupt Mask */
++
++#define BBA_IR 0x09 /* Interrupt Register, RW, 00h */
++#define BBA_IR_FRAGI (1<<0) /* FRAGI, Fragment Counter Interrupt */
++#define BBA_IR_RI (1<<1) /* RI, Receive Interrupt */
++#define BBA_IR_TI (1<<2) /* TI, Transmit Interrupt */
++#define BBA_IR_REI (1<<3) /* REI, Receive Error Interrupt */
++#define BBA_IR_TEI (1<<4) /* TEI, Transmit Error Interrupt */
++#define BBA_IR_FIFOEI (1<<5) /* FIFOEI, FIFO Error Interrupt */
++#define BBA_IR_BUSEI (1<<6) /* BUSEI, BUS Error Interrupt */
++#define BBA_IR_RBFI (1<<7) /* RBFI, RX Buffer Full Interrupt */
++
++#define BBA_BP 0x0a/*+0x0b*/ /* Boundary Page Pointer Register */
++#define BBA_TLBP 0x0c/*+0x0d*/ /* TX Low Boundary Page Pointer Register */
++#define BBA_TWP 0x0e/*+0x0f*/ /* Transmit Buf Write Page Pointer Register */
++#define BBA_TRP 0x12/*+0x13*/ /* Transmit Buf Read Page Pointer Register */
++#define BBA_RWP 0x16/*+0x17*/ /* Receive Buffer Write Page Pointer Register */
++#define BBA_RRP 0x18/*+0x19*/ /* Receive Buffer Read Page Pointer Register */
++#define BBA_RHBP 0x1a/*+0x1b*/ /* Receive High Boundary Page Ptr Register */
++
++#define BBA_RXINTT 0x14/*+0x15*/ /* Receive Interrupt Timer Register */
++
++#define BBA_NAFR_PAR0 0x20 /* Physical Address Register Byte 0 */
++#define BBA_NAFR_PAR1 0x21 /* Physical Address Register Byte 1 */
++#define BBA_NAFR_PAR2 0x22 /* Physical Address Register Byte 2 */
++#define BBA_NAFR_PAR3 0x23 /* Physical Address Register Byte 3 */
++#define BBA_NAFR_PAR4 0x24 /* Physical Address Register Byte 4 */
++#define BBA_NAFR_PAR5 0x25 /* Physical Address Register Byte 5 */
++
++#define BBA_NWAYC 0x30 /* NWAY Configuration Register, RW, 84h */
++#define BBA_NWAYC_FD (1<<0) /* FD, Full Duplex Mode */
++#define BBA_NWAYC_PS100 (1<<1) /* PS100/10, Port Select 100/10 */
++#define BBA_NWAYC_ANE (1<<2) /* ANE, Autonegotiation Enable */
++#define BBA_NWAYC_ANS_RA (0x01<<3) /* ANS, Restart Autonegotiation */
++#define BBA_NWAYC_LTE (1<<7) /* LTE, Link Test Enable */
++
++#define BBA_GCA 0x32 /* GMAC Configuration A Register, RW, 00h */
++#define BBA_GCA_ARXERRB (1<<3) /* ARXERRB, Accept RX pkt with error */
++
++#define BBA_MISC 0x3d /* MISC Control Register 1, RW, 3ch */
++#define BBA_MISC_BURSTDMA (1<<0)
++#define BBA_MISC_DISLDMA (1<<1)
++
++#define BBA_TXFIFOCNT 0x3e/*0x3f*/ /* Transmit FIFO Counter Register */
++#define BBA_WRTXFIFOD 0x48/*-0x4b*/ /* Write TX FIFO Data Port Register */
++
++#define BBA_MISC2 0x50 /* MISC Control Register 2, RW, 00h */
++#define BBA_MISC2_HBRLEN0 (1<<0) /* HBRLEN, Host Burst Read Length */
++#define BBA_MISC2_HBRLEN1 (1<<1) /* " */
++#define BBA_MISC2_AUTORCVR (1<<7) /* Auto RX Full Recovery */
++
++#define BBA_RX_STATUS_BF (1<<0)
++#define BBA_RX_STATUS_CRC (1<<1)
++#define BBA_RX_STATUS_FAE (1<<2)
++#define BBA_RX_STATUS_FO (1<<3)
++#define BBA_RX_STATUS_RW (1<<4)
++#define BBA_RX_STATUS_MF (1<<5)
++#define BBA_RX_STATUS_RF (1<<6)
++#define BBA_RX_STATUS_RERR (1<<7)
++
++#define BBA_TX_STATUS_CC0 (1<<0)
++#define BBA_TX_STATUS_CC1 (1<<1)
++#define BBA_TX_STATUS_CC2 (1<<2)
++#define BBA_TX_STATUS_CC3 (1<<3)
++#define BBA_TX_STATUS_CCMASK (0x0f)
++#define BBA_TX_STATUS_CRSLOST (1<<4)
++#define BBA_TX_STATUS_UF (1<<5)
++#define BBA_TX_STATUS_OWC (1<<6)
++#define BBA_TX_STATUS_OWN (1<<7)
++#define BBA_TX_STATUS_TERR (1<<7)
++
++#define BBA_TX_MAX_PACKET_SIZE 1518 /* 14+1500+4 */
++#define BBA_RX_MAX_PACKET_SIZE 1536 /* 6 pages * 256 bytes */
++
++
++/**
++ *
++ * DRIVER NOTES
++ *
++ * 1. Packet Memory organization
++ *
++ * rx: 15 pages of 256 bytes, 2 full sized packets only (6 pages each)
++ * tx: through FIFO, not using packet memory
++ *
++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++ * |1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|
++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++ * ^ ^
++ * | |
++ * TLBP RHBP
++ * BP
++ *
++ */
++
++#define BBA_INIT_TLBP 0x00
++#define BBA_INIT_BP 0x01
++#define BBA_INIT_RHBP 0x0f
++#define BBA_INIT_RWP BBA_INIT_BP
++#define BBA_INIT_RRP BBA_INIT_BP
++
++enum {
++ __BBA_RBFIM_OFF = 0,
++};
++
++struct bba_descr {
++#if defined(__BIG_ENDIAN_BITFIELD)
++ __u32 status:8,
++ packet_len : 12,
++ next_packet_ptr : 12;
++#else
++ __u32 next_packet_ptr:12,
++ packet_len : 12,
++ status : 8;
++#endif
++} __attribute((packed));
++
++
++struct bba_private {
++ spinlock_t lock;
++ unsigned long flags;
++#define BBA_RBFIM_OFF (1<<__BBA_RBFIM_OFF)
++
++ u32 msg_enable;
++ u8 revid;
++ u8 __0x04_init[2];
++ u8 __0x05_init;
++
++ struct sk_buff *tx_skb;
++ int rx_work;
++
++ struct task_struct *io_thread;
++ wait_queue_head_t io_waitq;
++
++ struct net_device *dev;
++ struct net_device_stats stats;
++
++ struct exi_device *exi_device;
++};
++
++static int bba_event_handler(struct exi_channel *exi_channel,
++ unsigned int event, void *dev0);
++static int bba_setup_hardware(struct net_device *dev);
++
++/*
++ * Opens the network device.
++ */
++static int bba_open(struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ int retval;
++
++ /* INTs are triggered on EXI channel 2 */
++ retval = exi_event_register(to_exi_channel(BBA_EXI_IRQ_CHANNEL),
++ EXI_EVENT_IRQ,
++ priv->exi_device,
++ bba_event_handler, dev,
++ (1 << BBA_EXI_CHANNEL));
++ if (retval < 0) {
++ bba_printk(KERN_ERR, "unable to register EXI event %d\n",
++ EXI_EVENT_IRQ);
++ goto out;
++ }
++
++ /* reset the hardware to a known state */
++ exi_dev_take(priv->exi_device);
++ retval = bba_setup_hardware(dev);
++ exi_dev_give(priv->exi_device);
++
++ /* inform the network layer that we are ready */
++ netif_start_queue(dev);
++out:
++ return retval;
++}
++
++/*
++ * Closes the network device.
++ */
++static int bba_close(struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++
++ /* do not allow more packets to be queued */
++ netif_carrier_off(dev);
++ netif_stop_queue(dev);
++
++ exi_dev_take(priv->exi_device);
++
++ /* stop receiver */
++ bba_out8(BBA_NCRA, bba_in8(BBA_NCRA) & ~BBA_NCRA_SR);
++
++ /* mask all interrupts */
++ bba_out8(BBA_IMR, 0x00);
++
++ exi_dev_give(priv->exi_device);
++
++ /* unregister exi event */
++ exi_event_unregister(to_exi_channel(BBA_EXI_IRQ_CHANNEL),
++ EXI_EVENT_IRQ);
++
++ return 0;
++}
++
++/*
++ * Returns the network device statistics.
++ */
++static struct net_device_stats *bba_get_stats(struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++
++ return &priv->stats;
++}
++
++/*
++ * Starts transmission for a packet.
++ * We can't do real hardware i/o here.
++ */
++static int bba_start_xmit(struct sk_buff *skb, struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ unsigned long flags;
++ int retval = NETDEV_TX_OK;
++
++ /* we are not able to send packets greater than this */
++ if (skb->len > BBA_TX_MAX_PACKET_SIZE) {
++ dev_kfree_skb(skb);
++ priv->stats.tx_dropped++;
++ /* silently drop the package */
++ goto out;
++ }
++
++ spin_lock_irqsave(&priv->lock, flags);
++
++ /*
++ * If there's no packet pending, store the packet for transmission
++ * and wake up the io thread. Otherwise, we are busy.
++ */
++ if (!priv->tx_skb) {
++ priv->tx_skb = skb;
++ dev->trans_start = jiffies;
++ wake_up(&priv->io_waitq);
++ } else {
++ retval = NETDEV_TX_BUSY;
++ }
++
++ /* we can only send one packet at a time through the FIFO */
++ netif_stop_queue(dev);
++
++ spin_unlock_irqrestore(&priv->lock, flags);
++
++out:
++ return retval;
++}
++
++/*
++ * Updates transmission error statistics.
++ * Caller holds the device lock.
++ */
++static int bba_tx_err(u8 status, struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ int last_tx_errors = priv->stats.tx_errors;
++
++ if (status & BBA_TX_STATUS_TERR) {
++ if (status & BBA_TX_STATUS_CCMASK) {
++ priv->stats.collisions +=
++ (status & BBA_TX_STATUS_CCMASK);
++ priv->stats.tx_errors++;
++ }
++ if (status & BBA_TX_STATUS_CRSLOST) {
++ priv->stats.tx_carrier_errors++;
++ priv->stats.tx_errors++;
++ }
++ if (status & BBA_TX_STATUS_UF) {
++ priv->stats.tx_fifo_errors++;
++ priv->stats.tx_errors++;
++ }
++ if (status & BBA_TX_STATUS_OWC) {
++ priv->stats.tx_window_errors++;
++ priv->stats.tx_errors++;
++ }
++ }
++
++ if (last_tx_errors != priv->stats.tx_errors) {
++ if (netif_msg_tx_err(priv)) {
++ bba_printk(KERN_DEBUG, "tx errors, status %8.8x.\n",
++ status);
++ }
++ }
++ return priv->stats.tx_errors;
++}
++
++/*
++ * Transmits a packet already stored in the driver's internal tx slot.
++ */
++static int bba_tx(struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ struct sk_buff *skb;
++ unsigned long flags;
++ int retval = NETDEV_TX_OK;
++
++ static u8 pad[ETH_ZLEN] __attribute__ ((aligned(EXI_DMA_ALIGN+1)));
++ int pad_len;
++
++ exi_dev_take(priv->exi_device);
++
++ /* if the TXFIFO is in use, we'll try it later when free */
++ if (bba_in8(BBA_NCRA) & (BBA_NCRA_ST0 | BBA_NCRA_ST1)) {
++ retval = NETDEV_TX_BUSY;
++ goto out;
++ }
++
++ spin_lock_irqsave(&priv->lock, flags);
++ skb = priv->tx_skb;
++ priv->tx_skb = NULL;
++ spin_unlock_irqrestore(&priv->lock, flags);
++
++ /* tell the card about the length of this packet */
++ bba_out12(BBA_TXFIFOCNT, skb->len);
++
++ /*
++ * Store the packet in the TXFIFO, including padding if needed.
++ * Packet transmission tries to make use of DMA transfers.
++ */
++
++ bba_select();
++ bba_outs_nosel(BBA_WRTXFIFOD, skb->data, skb->len);
++ if (skb->len < ETH_ZLEN) {
++ pad_len = ETH_ZLEN - skb->len;
++ memset(pad, 0, pad_len);
++ bba_outs_nosel_continued(pad, pad_len);
++ }
++ bba_deselect();
++
++ /* tell the card to send the packet right now */
++ bba_out8(BBA_NCRA, (bba_in8(BBA_NCRA) | BBA_NCRA_ST1) & ~BBA_NCRA_ST0);
++
++ /* update statistics */
++ priv->stats.tx_bytes += skb->len;
++ priv->stats.tx_packets++;
++
++ /* free this packet and remove it from our transmission "queue" */
++ dev_kfree_skb(skb);
++
++out:
++ exi_dev_give(priv->exi_device);
++
++ return retval;
++}
++
++/*
++ * Updates reception error statistics.
++ * Caller has already taken the exi channel.
++ */
++static int bba_rx_err(u8 status, struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ int last_rx_errors = priv->stats.rx_errors;
++
++ if (status == 0xff) {
++ priv->stats.rx_over_errors++;
++ priv->stats.rx_errors++;
++ } else {
++ if (status & BBA_RX_STATUS_RERR) {
++ if (status & BBA_RX_STATUS_CRC) {
++ priv->stats.rx_crc_errors++;
++ priv->stats.rx_errors++;
++ }
++ if (status & BBA_RX_STATUS_FO) {
++ priv->stats.rx_fifo_errors++;
++ priv->stats.rx_errors++;
++ }
++ if (status & BBA_RX_STATUS_RW) {
++ priv->stats.rx_length_errors++;
++ priv->stats.rx_errors++;
++ }
++ if (status & BBA_RX_STATUS_BF) {
++ priv->stats.rx_over_errors++;
++ priv->stats.rx_errors++;
++ }
++ if (status & BBA_RX_STATUS_RF) {
++ priv->stats.rx_length_errors++;
++ priv->stats.rx_errors++;
++ }
++ }
++ if (status & BBA_RX_STATUS_FAE) {
++ priv->stats.rx_frame_errors++;
++ priv->stats.rx_errors++;
++ }
++ }
++
++ if (last_rx_errors != priv->stats.rx_errors) {
++ if (netif_msg_rx_err(priv)) {
++ bba_printk(KERN_DEBUG, "rx errors, status %8.8x.\n",
++ status);
++ }
++ }
++ return priv->stats.rx_errors;
++}
++
++/*
++ * Reception function. Receives up to @budget packets.
++ */
++static int bba_rx(struct net_device *dev, int budget)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ struct sk_buff *skb;
++ struct bba_descr descr;
++ int lrps, size;
++ unsigned long pos, top;
++ unsigned short rrp, rwp;
++ int received = 0;
++
++ exi_dev_take(priv->exi_device);
++
++ /* get current receiver pointers */
++ rwp = bba_in12(BBA_RWP);
++ rrp = bba_in12(BBA_RRP);
++
++ while (netif_running(dev) && received < budget && rrp != rwp) {
++ bba_ins(rrp << 8, &descr, sizeof(descr));
++ le32_to_cpus((u32 *) &descr);
++
++ size = descr.packet_len - 4; /* ignore CRC */
++ lrps = descr.status;
++
++ /* abort processing in case of errors */
++ if (size > BBA_RX_MAX_PACKET_SIZE + 4) {
++ DBG("packet too big %d", size);
++ continue;
++ }
++
++ if ((lrps & (BBA_RX_STATUS_RERR | BBA_RX_STATUS_FAE))) {
++ DBG("error %x on received packet\n", lrps);
++ bba_rx_err(lrps, dev);
++ rwp = bba_in12(BBA_RWP);
++ rrp = bba_in12(BBA_RRP);
++ continue;
++ }
++
++ /* allocate a buffer, omitting the CRC (4 bytes) */
++ skb = dev_alloc_skb(size + NET_IP_ALIGN);
++ if (!skb) {
++ priv->stats.rx_dropped++;
++ continue;
++ }
++ skb->dev = dev;
++ skb_reserve(skb, NET_IP_ALIGN); /* align */
++ skb_put(skb, size);
++
++ pos = (rrp << 8) + 4; /* skip descriptor */
++ top = (BBA_INIT_RHBP + 1) << 8;
++
++ if ((pos + size) < top) {
++ /* full packet in one chunk */
++ bba_ins(pos, skb->data, size);
++ } else {
++ /* packet wrapped */
++ int chunk_size = top - pos;
++
++ bba_ins(pos, skb->data, chunk_size);
++ rrp = BBA_INIT_RRP;
++ bba_ins(rrp << 8, skb->data + chunk_size,
++ size - chunk_size);
++ }
++
++ skb->protocol = eth_type_trans(skb, dev);
++
++ dev->last_rx = jiffies;
++ priv->stats.rx_bytes += size;
++ priv->stats.rx_packets++;
++
++ netif_rx(skb);
++ received++;
++
++ /* move read pointer to next packet */
++ bba_out12(BBA_RRP, rrp = descr.next_packet_ptr);
++
++ /* get write pointer and continue */
++ rwp = bba_in12(BBA_RWP);
++ }
++
++ /* there are no more packets pending if we didn't exhaust our budget */
++ if (received < budget)
++ priv->rx_work = 0;
++
++ /* re-enable RBFI if it was disabled before */
++ if (test_and_clear_bit(__BBA_RBFIM_OFF, &priv->flags))
++ bba_out8(BBA_IMR, bba_in8(BBA_IMR) | BBA_IMR_RBFIM);
++
++ exi_dev_give(priv->exi_device);
++
++ return received;
++}
++
++/*
++ * Input/Output thread. Sends and receives packets.
++ */
++static int bba_io_thread(void *bba_priv)
++{
++ struct bba_private *priv = bba_priv;
++/* struct task_struct *me = current; */
++/* struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 }; */
++
++/* sched_setscheduler(me, SCHED_FIFO, &param); */
++
++ set_user_nice(current, -20);
++ current->flags |= PF_NOFREEZE;
++ set_current_state(TASK_RUNNING);
++
++ /*
++ * XXX We currently do not freeze this thread.
++ * The bba is often used to access the root filesystem.
++ */
++
++ while (!kthread_should_stop()) {
++ /*
++ * We want to get scheduled at least once every 2 minutes
++ * to avoid a softlockup spurious message...
++ * "INFO: task kbbaiod blocked for more than 120 seconds."
++ */
++ wait_event_timeout(priv->io_waitq,
++ priv->rx_work || priv->tx_skb, 90*HZ);
++ while (priv->rx_work || priv->tx_skb) {
++ if (priv->rx_work)
++ bba_rx(priv->dev, 0x0f);
++ if (priv->tx_skb)
++ bba_tx(priv->dev);
++ }
++ }
++ return 0;
++}
++
++/*
++ * Handles interrupt work from the network device.
++ * Caller has already taken the exi channel.
++ */
++static void bba_interrupt(struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ u8 ir, imr, status, lrps, ltps;
++ int loops = 0;
++
++ ir = bba_in8(BBA_IR);
++ imr = bba_in8(BBA_IMR);
++ status = ir & imr;
++
++ /* close possible races with dev_close */
++ if (unlikely(!netif_running(dev))) {
++ bba_out8(BBA_IR, status);
++ bba_out8(BBA_IMR, 0x00);
++ goto out;
++ }
++
++ while (status) {
++ bba_out8(BBA_IR, status);
++
++ /* avoid multiple receive buffer full interrupts */
++ if (status & BBA_IR_RBFI) {
++ bba_out8(BBA_IMR, bba_in8(BBA_IMR) & ~BBA_IMR_RBFIM);
++ set_bit(__BBA_RBFIM_OFF, &priv->flags);
++ }
++
++ if ((status & (BBA_IR_RI | BBA_IR_RBFI))) {
++ priv->rx_work = 1;
++ wake_up(&priv->io_waitq);
++ }
++ if ((status & (BBA_IR_TI|BBA_IR_FIFOEI))) {
++ /* allow more packets to be sent */
++ netif_wake_queue(dev);
++ }
++
++ if ((status & (BBA_IR_RBFI|BBA_IR_REI))) {
++ lrps = bba_in8(BBA_LRPS);
++ bba_rx_err(lrps, dev);
++ }
++ if (status & BBA_IR_TEI) {
++ ltps = bba_in8(BBA_LTPS);
++ bba_tx_err(ltps, dev);
++ }
++
++ if (status & BBA_IR_FIFOEI)
++ DBG("FIFOEI\n");
++ if (status & BBA_IR_BUSEI)
++ DBG("BUSEI\n");
++ if (status & BBA_IR_FRAGI)
++ DBG("FRAGI\n");
++
++ ir = bba_in8(BBA_IR);
++ imr = bba_in8(BBA_IMR);
++ status = ir & imr;
++
++ loops++;
++ }
++
++ if (loops > 3)
++ DBG("a lot of interrupt work (%d loops)\n", loops);
++
++ /* wake up xmit queue in case transmitter is idle */
++ if ((bba_in8(BBA_NCRA) & (BBA_NCRA_ST0 | BBA_NCRA_ST1)) == 0)
++ netif_wake_queue(dev);
++
++out:
++ return;
++}
++
++/*
++ * Retrieves the MAC address of the adapter.
++ * Caller has already taken the exi channel.
++ */
++static void bba_retrieve_ether_addr(struct net_device *dev)
++{
++ bba_ins(BBA_NAFR_PAR0, dev->dev_addr, ETH_ALEN);
++ if (!is_valid_ether_addr(dev->dev_addr))
++ random_ether_addr(dev->dev_addr);
++}
++
++/*
++ * Resets the hardware to a known state.
++ * Caller has already taken the exi channel.
++ */
++static void bba_reset_hardware(struct net_device *dev)
++{
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++
++ /* unknown, mx register 0x60 */
++ bba_out8(0x60, 0);
++ udelay(1000);
++
++ /* unknown, command register 0x0f */
++ bba_cmd_in8_slow(0x0f);
++ udelay(1000);
++
++ /* software reset (write 1 then write 0) */
++ bba_out8(BBA_NCRA, BBA_NCRA_RESET);
++ udelay(100);
++ bba_out8(BBA_NCRA, 0);
++
++ /* unknown, command register 0x01 */
++ /* XXX obtain bits needed for challenge/response calculation later */
++ priv->revid = bba_cmd_in8(0x01);
++
++ /* unknown, command registers 0x04, 0x05 */
++ bba_cmd_outs(0x04, priv->__0x04_init, 2);
++ bba_cmd_out8(0x05, priv->__0x05_init);
++
++ /*
++ * These initializations seem to limit the final port speed to 10Mbps
++ * half duplex. Bypassing them, allows one to set other port speeds.
++ * But, remember that the bba spi-like bus clock operates at 32MHz.
++ * ---Albert Herranz
++ */
++
++ /* unknown, mx registers 0x5b, 0x5c, 0x5e */
++ bba_out8(0x5b, bba_in8(0x5b) & ~(1 << 7));
++ bba_out8(0x5e, 1); /* without this the BBA goes at half the speed */
++ bba_out8(0x5c, bba_in8(0x5c) | 4);
++ udelay(1000);
++
++ /* accept broadcast, assert int for every packet received */
++ bba_out8(BBA_NCRB, BBA_NCRB_AB | BBA_NCRB_1_PACKET_PER_INT);
++
++ /* setup receive interrupt time out, in 40ns units */
++ bba_out8(BBA_RXINTT, 0x00);
++ bba_out8(BBA_RXINTT+1, 0x06); /* 0x0600 = 61us */
++
++ /* auto RX full recovery */
++ bba_out8(BBA_MISC2, BBA_MISC2_AUTORCVR);
++
++ /* initialize packet memory layout */
++ bba_out12(BBA_TLBP, BBA_INIT_TLBP);
++ bba_out12(BBA_BP, BBA_INIT_BP);
++ bba_out12(BBA_RHBP, BBA_INIT_RHBP);
++
++ /* set receive page pointers */
++ bba_out12(BBA_RWP, BBA_INIT_RWP);
++ bba_out12(BBA_RRP, BBA_INIT_RRP);
++
++ /* packet memory won't contain packets with RW, FO, CRC errors */
++ bba_out8(BBA_GCA, BBA_GCA_ARXERRB);
++}
++
++/*
++ * Prepares the hardware for operation.
++ * Caller has already taken the exi channel.
++ */
++static int bba_setup_hardware(struct net_device *dev)
++{
++ /* reset hardware to a sane state */
++ bba_reset_hardware(dev);
++
++ /* start receiver */
++ bba_out8(BBA_NCRA, BBA_NCRA_SR);
++
++ /* clear all interrupts */
++ bba_out8(BBA_IR, 0xFF);
++
++ /* enable all interrupts */
++ bba_out8(BBA_IMR, 0xFF & ~(BBA_IMR_FIFOEIM /*| BBA_IMR_REIM*/));
++
++ /* unknown, short command registers 0x02 */
++ /* XXX enable interrupts on the EXI glue logic */
++ bba_cmd_out8(0x02, BBA_CMD_IR_MASKNONE);
++
++ /* DO NOT clear interrupts on the EXI glue logic !!! */
++ /* we need that initial interrupts for the challenge/response */
++
++ return 0; /* OK */
++}
++
++/*
++ * Calculates a response for a given challenge.
++ */
++static unsigned long bba_calc_response(unsigned long val,
++ struct bba_private *priv)
++{
++ u8 revid_0, revid_eth_0, revid_eth_1;
++ revid_0 = priv->revid;
++ revid_eth_0 = priv->__0x04_init[0];
++ revid_eth_1 = priv->__0x04_init[1];
++
++ u8 i0, i1, i2, i3;
++ i0 = val >> 24;
++ i1 = val >> 16;
++ i2 = val >> 8;
++ i3 = val;
++
++ u8 c0, c1, c2, c3;
++ c0 = (i0 + i1 * 0xc1 + 0x18 + revid_0) ^ (i3 * i2 + 0x90);
++ c1 = (i1 + i2 + 0x90) ^ (c0 + i0 - 0xc1);
++ c2 = (i2 + 0xc8) ^ (c0 + ((revid_eth_0 + revid_0 * 0x23) ^ 0x19));
++ c3 = (i0 + 0xc1) ^ (i3 + ((revid_eth_1 + 0xc8) ^ 0x90));
++
++ return (c0 << 24) | (c1 << 16) | (c2 << 8) | c3;
++}
++
++/*
++ * Handles IRQ events from the exi layer.
++ *
++ * We are called from softirq context, and with the exi channel kindly taken
++ * for us. We can also safely do exi transfers of less than 32 bytes, which
++ * are guaranteed to not sleep by the exi layer.
++ */
++static int bba_event_handler(struct exi_channel *exi_channel,
++ unsigned int event, void *dev0)
++{
++ struct net_device *dev = (struct net_device *)dev0;
++ struct bba_private *priv = (struct bba_private *)dev->priv;
++ register u8 status, mask;
++
++ /* XXX mask all EXI glue interrupts */
++ bba_cmd_out8(0x02, BBA_CMD_IR_MASKALL);
++
++ /* get interrupt status from EXI glue */
++ status = bba_cmd_in8(0x03);
++
++ /* start with the usual case */
++ mask = (1<<7);
++
++ /* normal interrupt from the macronix chip */
++ if (status & mask) {
++ /* call our interrupt handler */
++ bba_interrupt(dev);
++ goto out;
++ }
++
++ /* "killing" interrupt, try to not get one of these! */
++ mask >>= 1;
++ if (status & mask) {
++ DBG("bba: killing interrupt!\n");
++ /* reset the adapter so that we can continue working */
++ bba_setup_hardware(dev);
++ goto out;
++ }
++
++ /* command error interrupt, haven't seen one yet */
++ mask >>= 1;
++ if (status & mask)
++ goto out;
++
++ /* challenge/response interrupt */
++ mask >>= 1;
++ if (status & mask) {
++ unsigned long response;
++ unsigned long challenge;
++
++ /* kids, don't do it without an adult present */
++ bba_cmd_out8(0x05, priv->__0x05_init);
++ bba_cmd_ins(0x08, &challenge, sizeof(challenge));
++ response = bba_calc_response(challenge, priv);
++ bba_cmd_outs(0x09, &response, sizeof(response));
++
++ goto out;
++ }
++
++ /* challenge/response status interrupt */
++ mask >>= 1;
++ if (status & mask) {
++ /* better get a "1" here ... */
++ u8 result = bba_cmd_in8(0x0b);
++ if (result != 1) {
++ bba_printk(KERN_DEBUG,
++ "challenge failed! (result=%d)\n", result);
++ }
++ goto out;
++ }
++
++ /* should not happen, treat as normal interrupt in any case */
++ DBG("bba: unknown interrupt type = %d\n", status);
++
++out:
++ /* assert interrupt */
++ bba_cmd_out8(0x03, mask);
++
++ /* enable interrupts again */
++ bba_cmd_out8(0x02, BBA_CMD_IR_MASKNONE);
++
++ return 1;
++}
++
++static struct net_device *bba_dev;
++
++static inline void bba_select(void)
++{
++ struct bba_private *priv = (struct bba_private *)bba_dev->priv;
++ exi_dev_select(priv->exi_device);
++
++}
++
++static inline void bba_deselect(void)
++{
++ struct bba_private *priv = (struct bba_private *)bba_dev->priv;
++ exi_dev_deselect(priv->exi_device);
++}
++
++static inline void bba_read(void *data, size_t len)
++{
++ struct bba_private *priv = (struct bba_private *)bba_dev->priv;
++ return exi_dev_read(priv->exi_device, data, len);
++}
++
++static inline void bba_write(void *data, size_t len)
++{
++ struct bba_private *priv = (struct bba_private *)bba_dev->priv;
++ return exi_dev_write(priv->exi_device, data, len);
++}
++
++/*
++ * Initializes a BroadBand Adapter device.
++ */
++static int __devinit bba_init_device(struct exi_device *exi_device)
++{
++ struct net_device *dev;
++ struct bba_private *priv;
++ int err;
++
++ /* allocate a network device */
++ dev = alloc_etherdev(sizeof(*priv));
++ if (!dev) {
++ bba_printk(KERN_ERR, "unable to allocate net device\n");
++ err = -ENOMEM;
++ goto err_out;
++ }
++ SET_NETDEV_DEV(dev, &exi_device->dev);
++
++ /* we use the event system from the EXI driver, so no irq here */
++ dev->irq = 0;
++
++ /* network device hooks */
++ dev->open = bba_open;
++ dev->stop = bba_close;
++ dev->hard_start_xmit = bba_start_xmit;
++ dev->get_stats = bba_get_stats;
++
++ priv = netdev_priv(dev);
++ priv->dev = dev;
++ priv->exi_device = exi_device;
++
++ spin_lock_init(&priv->lock);
++
++ /* initialization values */
++ priv->revid = 0xf0;
++ priv->__0x04_init[0] = 0xd1;
++ priv->__0x04_init[1] = 0x07;
++ priv->__0x05_init = 0x4e;
++
++ /* i/o artifacts */
++ priv->tx_skb = NULL;
++ priv->rx_work = 0;
++ init_waitqueue_head(&priv->io_waitq);
++ priv->io_thread = kthread_run(bba_io_thread, priv, "kbbaiod");
++
++ /* the hardware can't do multicast */
++ dev->flags &= ~IFF_MULTICAST;
++
++ exi_set_drvdata(exi_device, dev);
++ if (bba_dev)
++ free_netdev(bba_dev);
++ bba_dev = dev;
++
++ /* we need to retrieve the MAC address before registration */
++ exi_dev_take(priv->exi_device);
++ bba_reset_hardware(dev);
++ bba_retrieve_ether_addr(dev);
++ exi_dev_give(priv->exi_device);
++
++ /* this makes our device available to the kernel */
++ err = register_netdev(dev);
++ if (err) {
++ bba_printk(KERN_ERR, "cannot register net device, aborting.\n");
++ goto err_out_free_dev;
++ }
++
++ return 0;
++
++err_out_free_dev:
++ exi_set_drvdata(exi_device, NULL);
++ free_netdev(dev);
++ bba_dev = NULL;
++
++err_out:
++ return err;
++}
++
++/*
++ * Removes a BroadBand Adapter device from the system.
++ */
++static void __devexit bba_remove(struct exi_device *exi_device)
++{
++ struct net_device *dev = (struct net_device *)
++ exi_get_drvdata(exi_device);
++ struct bba_private *priv;
++
++ if (dev) {
++ priv = (struct bba_private *)dev->priv;
++
++ kthread_stop(priv->io_thread);
++
++ unregister_netdev(dev);
++ free_netdev(dev);
++ exi_set_drvdata(exi_device, NULL);
++ bba_dev = NULL;
++ }
++ exi_device_put(exi_device);
++}
++
++/*
++ * Probes for a BroadBand Adapter device.
++ * Actually, the exi layer has already probed for us.
++ */
++static int __devinit bba_probe(struct exi_device *exi_device)
++{
++ int ret = -ENODEV;
++
++ if (exi_device_get(exi_device))
++ ret = bba_init_device(exi_device);
++
++ return ret;
++}
++
++
++static struct exi_device_id bba_eid_table[] = {
++ [0] = {
++ .channel = BBA_EXI_CHANNEL,
++ .device = BBA_EXI_DEVICE,
++ .id = BBA_EXI_ID
++ },
++ { .id = 0 }
++};
++
++static struct exi_driver bba_driver = {
++ .name = "bba",
++ .eid_table = bba_eid_table,
++ .frequency = BBA_EXI_FREQ,
++ .probe = bba_probe,
++ .remove = bba_remove,
++};
++
++/**
++ * bba_init_module - driver initialization routine
++ *
++ * Initializes the BroadBand Adapter driver module.
++ *
++ */
++static int __init bba_init_module(void)
++{
++ bba_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ bba_driver_version);
++
++ return exi_driver_register(&bba_driver);
++}
++
++/**
++ * bba_exit_module - driver exit routine
++ *
++ * Removes the BroadBand Adapter driver module.
++ *
++ */
++static void __exit bba_exit_module(void)
++{
++ exi_driver_unregister(&bba_driver);
++}
++
++module_init(bba_init_module);
++module_exit(bba_exit_module);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
+index 02d25c7..1fcf0d3 100644
+--- a/drivers/net/usb/usbnet.c
++++ b/drivers/net/usb/usbnet.c
+@@ -522,7 +522,9 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
+
+ // during some PM-driven resume scenarios,
+ // these (async) unlinks complete immediately
++ spin_unlock(&q->lock);
+ retval = usb_unlink_urb (urb);
++ spin_lock(&q->lock);
+ if (retval != -EINPROGRESS && retval != 0)
+ devdbg (dev, "unlink urb err, %d", retval);
+ else
+diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
+index 123092d..fd42af5 100644
+--- a/drivers/rtc/Kconfig
++++ b/drivers/rtc/Kconfig
+@@ -497,6 +497,16 @@ config RTC_DRV_WM8350
+ This driver can also be built as a module. If so, the module
+ will be called "rtc-wm8350".
+
++config RTC_DRV_GCN
++ bool "Nintendo GameCube/Wii Real Time Clock and SRAM"
++ depends on GAMECUBE_EXI
++ default y
++ help
++ If you say yes to this option, support will be included for the
++ Real Time Clock and SRAM of the Nintendo GameCube/Wii.
++
++ If in doubt, say Y here.
++
+ comment "on-CPU RTC drivers"
+
+ config RTC_DRV_OMAP
+diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
+index 6e79c91..10a907f 100644
+--- a/drivers/rtc/Makefile
++++ b/drivers/rtc/Makefile
+@@ -36,6 +36,7 @@ obj-$(CONFIG_RTC_DRV_DS1742) += rtc-ds1742.o
+ obj-$(CONFIG_RTC_DRV_DS3234) += rtc-ds3234.o
+ obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o
+ obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o
++obj-$(CONFIG_RTC_DRV_GCN) += rtc-gcn.o
+ obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o
+ obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o
+ obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o
+diff --git a/drivers/rtc/rtc-gcn.c b/drivers/rtc/rtc-gcn.c
+new file mode 100644
+index 0000000..d5bae5c
+--- /dev/null
++++ b/drivers/rtc/rtc-gcn.c
+@@ -0,0 +1,339 @@
++/*
++ * drivers/rtc/rtc-gcn.c
++ *
++ * Nintendo GameCube/Wii RTC/SRAM driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2005,2008,2009 Albert Herranz
++ *
++ * Based on gamecube_time.c from Torben Nielsen.
++ *
++ * This program is free software; you can redistribute 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/init.h>
++#include <linux/time.h>
++#include <linux/rtc.h>
++#include <linux/exi.h>
++#include <asm/machdep.h>
++
++#define DRV_MODULE_NAME "rtc-gcn"
++#define DRV_DESCRIPTION "Nintendo GameCube/Wii RTC/SRAM driver"
++#define DRV_AUTHOR "Torben Nielsen, " \
++ "Albert Herranz"
++
++static char gcnrtc_driver_version[] = "1.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++#define RTC_EXI_GCN_ID 0xffff1698
++#define RTC_EXI_RVL_ID 0xfffff308
++
++#define RTC_EXI_CHANNEL 0
++#define RTC_EXI_DEVICE 1
++#define RTC_EXI_FREQ 3 /* 8MHz */
++
++#define RTC_OFFSET 946684800L
++
++
++struct gcn_sram {
++ u16 csum1;
++ u16 csum2;
++ u32 ead0;
++ u32 ead1;
++ int bias;
++ s8 horz_display_offset;
++ u8 ntd;
++ u8 language;
++ u8 flags;
++ u8 reserved[44];
++};
++
++struct gcnrtc_drvdata {
++ spinlock_t lock;
++ struct exi_device *dev;
++
++ struct rtc_device *rtc_dev;
++
++ struct gcn_sram sram;
++};
++
++static struct gcnrtc_drvdata gcnrtc_drvdata;
++
++/*
++ * Hardware interfaces.
++ *
++ */
++
++/*
++ * Loads the SRAM contents.
++ * Context: user.
++ */
++static void sram_load(struct exi_device *dev)
++{
++ struct gcnrtc_drvdata *drvdata = exi_get_drvdata(dev);
++ struct gcn_sram *sram = &drvdata->sram;
++ u32 req;
++
++ exi_dev_take(dev);
++
++ /* select the SRAM device */
++ exi_dev_select(dev);
++
++ /* send the appropriate command */
++ req = 0x20000100;
++ exi_dev_write(dev, &req, sizeof(req));
++
++ /* read the SRAM data */
++ exi_dev_read(dev, sram, sizeof(*sram));
++
++ /* deselect the SRAM device */
++ exi_dev_deselect(dev);
++
++ exi_dev_give(dev);
++
++ return;
++}
++
++/*
++ * Gets the hardware clock date and time.
++ * Context: user.
++ */
++static unsigned long gcnrtc_read_time(struct exi_device *dev)
++{
++ unsigned long a = 0;
++
++ exi_dev_take(dev);
++
++ /* select the SRAM device */
++ exi_dev_select(dev);
++
++ /* send the appropriate command */
++ a = 0x20000000;
++ exi_dev_write(dev, &a, sizeof(a));
++
++ /* read the time and date value */
++ exi_dev_read(dev, &a, sizeof(a));
++
++ /* deselect the RTC device */
++ exi_dev_deselect(dev);
++
++ exi_dev_give(dev);
++
++ return a;
++}
++
++/*
++ * Sets the hardware clock date and time to @aval.
++ * Context: user, interrupt (adjtimex).
++ */
++static int gcnrtc_write_time(struct exi_device *dev, unsigned long aval)
++{
++ u32 req;
++ int retval;
++
++ /*
++ * We may get called from the timer interrupt. In that case,
++ * we could fail if the exi channel used to access the RTC
++ * is busy. If this happens, we just return an error. The timer
++ * interrupt code is prepared to deal with such case.
++ */
++
++ retval = exi_dev_try_take(dev);
++ if (!retval) {
++ /* select the RTC device */
++ exi_dev_select(dev);
++
++ /* send the appropriate command */
++ req = 0xa0000000;
++ exi_dev_write(dev, &req, sizeof(req));
++
++ /* set the new time and date value */
++ exi_dev_write(dev, &aval, sizeof(aval));
++
++ /* deselect the RTC device */
++ exi_dev_deselect(dev);
++
++ exi_dev_give(dev);
++ }
++ return retval;
++}
++
++/*
++ * Platform time functions.
++ *
++ */
++
++/*
++ * Platform specific function to return the current date and time.
++ */
++static void gcnrtc_plat_rtc_get_time(struct rtc_time *t)
++{
++ struct gcnrtc_drvdata *drvdata = &gcnrtc_drvdata;
++ unsigned long nowtime;
++
++ if (!drvdata->dev)
++ return;
++
++ nowtime = gcnrtc_read_time(drvdata->dev) +
++ drvdata->sram.bias + RTC_OFFSET;
++ rtc_time_to_tm(nowtime, t);
++}
++
++/*
++ * Platform specific function to set the current date and time.
++ *
++ */
++static int gcnrtc_plat_rtc_set_time(struct rtc_time *t)
++{
++ struct gcnrtc_drvdata *drvdata = &gcnrtc_drvdata;
++ unsigned long nowtime;
++
++ if (!drvdata->dev)
++ return -ENODEV;
++
++ rtc_tm_to_time(t, &nowtime);
++ return gcnrtc_write_time(drvdata->dev,
++ nowtime - RTC_OFFSET - drvdata->sram.bias);
++}
++
++/*
++ * RTC class driver.
++ *
++ */
++
++/*
++ *
++ */
++static int gcnrtc_rtc_read_time(struct device *dev, struct rtc_time *t)
++{
++ gcnrtc_plat_rtc_get_time(t);
++ return 0;
++}
++
++/*
++ *
++ */
++static int gcnrtc_rtc_set_time(struct device *dev, struct rtc_time *t)
++{
++ return gcnrtc_plat_rtc_set_time(t);
++}
++
++static const struct rtc_class_ops gcnrtc_ops = {
++ .read_time = gcnrtc_rtc_read_time,
++ .set_time = gcnrtc_rtc_set_time,
++};
++
++
++/*
++ * EXI driver.
++ *
++ */
++
++/*
++ *
++ */
++static int gcnrtc_probe(struct exi_device *dev)
++{
++ struct gcnrtc_drvdata *drvdata = &gcnrtc_drvdata;
++ unsigned long flags;
++ int retval = -ENODEV;
++
++ if (exi_device_get(dev)) {
++ spin_lock_init(&drvdata->lock);
++
++ exi_set_drvdata(dev, drvdata);
++ drvdata->dev = dev;
++
++ memset(&drvdata->sram, 0, sizeof(struct gcn_sram));
++ sram_load(dev);
++
++ spin_lock_irqsave(&drvdata->lock, flags);
++ ppc_md.set_rtc_time = gcnrtc_plat_rtc_set_time;
++ ppc_md.get_rtc_time = gcnrtc_plat_rtc_get_time;
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++
++ drvdata->rtc_dev = rtc_device_register(DRV_MODULE_NAME,
++ &dev->dev,
++ &gcnrtc_ops,
++ THIS_MODULE);
++ retval = 0;
++ }
++
++ return retval;
++}
++
++/*
++ *
++ */
++static void gcnrtc_remove(struct exi_device *dev)
++{
++ struct gcnrtc_drvdata *drvdata = exi_get_drvdata(dev);
++ unsigned long flags;
++
++ if (drvdata) {
++ spin_lock_irqsave(&drvdata->lock, flags);
++ ppc_md.set_rtc_time = NULL;
++ ppc_md.get_rtc_time = NULL;
++ spin_unlock_irqrestore(&drvdata->lock, flags);
++
++ if (!IS_ERR(drvdata->rtc_dev))
++ rtc_device_unregister(drvdata->rtc_dev);
++ }
++ exi_device_put(dev);
++}
++
++
++static struct exi_device_id gcnrtc_eid_table[] = {
++ {
++ .channel = RTC_EXI_CHANNEL,
++ .device = RTC_EXI_DEVICE,
++ .id = RTC_EXI_GCN_ID
++ },
++ {
++ .channel = RTC_EXI_CHANNEL,
++ .device = RTC_EXI_DEVICE,
++ .id = RTC_EXI_RVL_ID
++ },
++ { },
++};
++
++static struct exi_driver gcnrtc_driver = {
++ .name = DRV_MODULE_NAME,
++ .eid_table = gcnrtc_eid_table,
++ .frequency = RTC_EXI_FREQ,
++ .probe = gcnrtc_probe,
++ .remove = gcnrtc_remove,
++};
++
++
++/*
++ *
++ */
++static int __init gcnrtc_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n",
++ DRV_DESCRIPTION, gcnrtc_driver_version);
++
++ return exi_driver_register(&gcnrtc_driver);
++}
++
++/*
++ *
++ */
++static void __exit gcnrtc_exit_module(void)
++{
++ exi_driver_unregister(&gcnrtc_driver);
++}
++
++module_init(gcnrtc_init_module);
++module_exit(gcnrtc_exit_module);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index 579d63a..fc383ae 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -1372,4 +1372,17 @@ config SPORT_BAUD_RATE
+ default 19200 if (SERIAL_SPORT_BAUD_RATE_19200)
+ default 9600 if (SERIAL_SPORT_BAUD_RATE_9600)
+
++config SERIAL_USBGECKO
++ bool "USBGecko adapter on the Nintendo GameCube/Wii"
++ depends on GAMECUBE_EXI
++ select SERIAL_CORE
++ help
++ This is a driver for the USB Gecko adapter for the Nintendo GameCube
++ and Wii gaming consoles. It provides a console and a tty interface.
++
++ If you have an adapter like this, say Y here, otherwise say N.
++
++ To compile this driver as a module, choose M here: the
++ module will be called usbgecko.
++
+ endmenu
+diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
+index 0c17c8d..a00d73e 100644
+--- a/drivers/serial/Makefile
++++ b/drivers/serial/Makefile
+@@ -73,3 +73,4 @@ obj-$(CONFIG_SERIAL_OF_PLATFORM) += of_serial.o
+ obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o
+ obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o
+ obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
++obj-$(CONFIG_SERIAL_USBGECKO) += usbgecko.o
+diff --git a/drivers/serial/usbgecko.c b/drivers/serial/usbgecko.c
+new file mode 100644
+index 0000000..223890d
+--- /dev/null
++++ b/drivers/serial/usbgecko.c
+@@ -0,0 +1,597 @@
++/*
++ * drivers/serial/usbgecko.c
++ *
++ * Console and TTY driver for the USB Gecko adapter.
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define UG_DEBUG
++
++#include <linux/kernel.h>
++#include <linux/device.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/console.h>
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++#include <linux/kthread.h>
++#include <linux/delay.h>
++
++#include <linux/exi.h>
++
++#define DRV_MODULE_NAME "usbgecko"
++#define DRV_DESCRIPTION "Console and TTY driver for the USB Gecko adapter"
++#define DRV_AUTHOR "Albert Herranz"
++
++static char ug_driver_version[] = "0.1i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++/*
++ *
++ * EXI related definitions.
++ */
++#define UG_SLOTA_CHANNEL 0 /* EXI0xxx */
++#define UG_SLOTA_DEVICE 0 /* chip select, EXI0CSB0 */
++
++#define UG_SLOTB_CHANNEL 1 /* EXI1xxx */
++#define UG_SLOTB_DEVICE 0 /* chip select, EXI1CSB0 */
++
++#define UG_SPI_CLK_IDX EXI_CLK_32MHZ
++
++
++struct ug_adapter {
++ struct exi_device *exi_device;
++ struct task_struct *poller;
++ struct mutex mutex;
++ int refcnt;
++};
++
++static struct ug_adapter ug_adapters[2];
++
++
++/*
++ *
++ * Hardware interface.
++ */
++
++/*
++ *
++ */
++static void ug_exi_io_transaction(struct exi_device *exi_device, u16 i, u16 *o)
++{
++ u16 data;
++
++ exi_dev_select(exi_device);
++ data = i;
++ exi_dev_readwrite(exi_device, &data, 2);
++ exi_dev_deselect(exi_device);
++ *o = data;
++}
++
++#if 0
++/*
++ *
++ */
++static void ug_io_transaction(struct ug_adapter *adapter, u16 i, u16 *o)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++
++ if (exi_device)
++ ug_exi_io_transaction(exi_device, i, o);
++}
++#endif
++
++/*
++ *
++ */
++static int ug_check_adapter(struct exi_device *exi_device)
++{
++ u16 data;
++
++ exi_dev_take(exi_device);
++ ug_exi_io_transaction(exi_device, 0x9000, &data);
++ exi_dev_give(exi_device);
++
++ return data == 0x0470;
++}
++
++#if 0
++/*
++ *
++ */
++static int ug_is_txfifo_empty(struct ug_adapter *adapter)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++ u16 data;
++
++ if (!exi_device)
++ return 0;
++
++ if (!exi_dev_try_take(exi_device)) {
++ ug_exi_io_transaction(exi_device, 0xC000, &data);
++ exi_dev_give(exi_device);
++ return data & 0x0400;
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++static int ug_is_rxfifo_empty(struct ug_adapter *adapter)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++ u16 data;
++
++ if (!exi_device)
++ return 0;
++
++ if (!exi_dev_try_take(exi_device)) {
++ ug_exi_io_transaction(exi_device, 0xD000, &data);
++ exi_dev_give(exi_device);
++ return data & 0x0400;
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++static int ug_putc(struct ug_adapter *adapter, char c)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++ u16 data;
++
++ if (!exi_device)
++ return 0;
++
++ if (!exi_dev_try_take(exi_device)) {
++ ug_exi_io_transaction(exi_device, 0xB000|(c<<4), &data);
++ exi_dev_give(exi_device);
++ return data & 0x0400;
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++static int ug_getc(struct ug_adapter *adapter, char *c)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++ u16 data;
++
++ if (!exi_device)
++ return 0;
++
++ if (!exi_dev_try_take(exi_device)) {
++ ug_exi_io_transaction(exi_device, 0xA000, &data);
++ exi_dev_give(exi_device);
++ if ((data & 0x0800)) {
++ *c = data & 0xff;
++ return 1;
++ }
++ }
++ return 0;
++}
++#endif
++
++/*
++ *
++ */
++static int ug_safe_putc(struct ug_adapter *adapter, char c)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++ u16 data;
++
++ if (!exi_device)
++ return 0;
++
++ if (!exi_dev_try_take(exi_device)) {
++ ug_exi_io_transaction(exi_device, 0xC000, &data);
++ if ((data & 0x0400))
++ ug_exi_io_transaction(exi_device, 0xB000|(c<<4), &data);
++ exi_dev_give(exi_device);
++ return data & 0x0400;
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++static int ug_safe_getc(struct ug_adapter *adapter, char *c)
++{
++ struct exi_device *exi_device = adapter->exi_device;
++ u16 data;
++
++ if (!exi_device)
++ return 0;
++
++ if (!exi_dev_try_take(exi_device)) {
++ ug_exi_io_transaction(exi_device, 0xD000, &data);
++ if ((data & 0x0400)) {
++ ug_exi_io_transaction(exi_device, 0xA000, &data);
++ exi_dev_give(exi_device);
++ if ((data & 0x0800)) {
++ *c = data & 0xff;
++ return 1;
++ }
++ } else {
++ exi_dev_give(exi_device);
++ }
++ }
++ return 0;
++}
++
++
++/*
++ *
++ * Linux console interface.
++ */
++
++/*
++ *
++ */
++static void ug_console_write(struct console *co, const char *buf,
++ unsigned int count)
++{
++ struct ug_adapter *adapter = co->data;
++ char *b = (char *)buf;
++
++ while (count--) {
++ if (*b == '\n')
++ ug_safe_putc(adapter, '\r');
++ ug_safe_putc(adapter, *b++);
++ }
++}
++
++/*
++ *
++ */
++static int ug_console_read(struct console *co, char *buf,
++ unsigned int count)
++{
++ struct ug_adapter *adapter = co->data;
++ int i;
++ char c;
++
++ i = count;
++ while (i--) {
++ ug_safe_getc(adapter, &c);
++ *buf++ = c;
++ }
++ return count;
++}
++
++static struct tty_driver *ug_tty_driver;
++
++static struct tty_driver *ug_console_device(struct console *co, int *index)
++{
++ *index = co->index;
++ return ug_tty_driver;
++}
++
++
++static struct console ug_consoles[] = {
++ {
++ .name = DRV_MODULE_NAME "0",
++ .write = ug_console_write,
++ .read = ug_console_read,
++ .device = ug_console_device,
++ .flags = CON_PRINTBUFFER | CON_ENABLED,
++ .index = 0,
++ .data = &ug_adapters[0],
++ },
++ {
++ .name = DRV_MODULE_NAME "1",
++ .write = ug_console_write,
++ .read = ug_console_read,
++ .device = ug_console_device,
++ .flags = CON_PRINTBUFFER | CON_ENABLED,
++ .index = 1,
++ .data = &ug_adapters[1],
++ },
++};
++
++
++/*
++ *
++ * Linux tty driver.
++ */
++
++static int ug_tty_poller(void *tty_)
++{
++ struct sched_param param = { .sched_priority = 1 };
++ struct tty_struct *tty = tty_;
++ struct ug_adapter *adapter;
++ int count, chunk;
++ const int max_outstanding = 32;
++ char ch;
++
++ sched_setscheduler(current, SCHED_FIFO, &param);
++ set_task_state(current, TASK_RUNNING);
++
++ chunk = 0;
++ while (!kthread_should_stop()) {
++ count = 0;
++ adapter = tty->driver_data;
++ if (adapter)
++ count = ug_safe_getc(adapter, &ch);
++ set_task_state(current, TASK_INTERRUPTIBLE);
++ if (count) {
++ tty_insert_flip_char(tty, ch, TTY_NORMAL);
++ if (chunk++ > max_outstanding) {
++ tty_flip_buffer_push(tty);
++ chunk = 0;
++ }
++ } else {
++ if (chunk) {
++ tty_flip_buffer_push(tty);
++ chunk = 0;
++ }
++ schedule_timeout(1);
++ }
++ set_task_state(current, TASK_RUNNING);
++ }
++
++ return 0;
++}
++
++static int ug_tty_open(struct tty_struct *tty, struct file *filp)
++{
++ struct ug_adapter *adapter;
++ int index;
++ int retval = 0;
++
++ index = tty->index;
++ adapter = &ug_adapters[index];
++
++ mutex_lock(&adapter->mutex);
++
++ if (!adapter->exi_device) {
++ mutex_unlock(&adapter->mutex);
++ return -ENODEV;
++ }
++
++ if (!adapter->refcnt) {
++ adapter->poller = kthread_run(ug_tty_poller, tty, "kugtty");
++ if (IS_ERR(adapter->poller)) {
++ drv_printk(KERN_ERR, "error creating poller thread\n");
++ mutex_unlock(&adapter->mutex);
++ return -ENOMEM;
++ }
++ }
++
++ adapter->refcnt++;
++ tty->driver_data = adapter;
++
++ mutex_unlock(&adapter->mutex);
++
++ return retval;
++}
++
++static void ug_tty_close(struct tty_struct *tty, struct file *filp)
++{
++ struct ug_adapter *adapter;
++ int index;
++
++ index = tty->index;
++ adapter = &ug_adapters[index];
++
++ mutex_lock(&adapter->mutex);
++
++ adapter->refcnt--;
++ if (!adapter->refcnt) {
++ if (!IS_ERR(adapter->poller))
++ kthread_stop(adapter->poller);
++ adapter->poller = ERR_PTR(-EINVAL);
++ tty->driver_data = NULL;
++ }
++
++ mutex_unlock(&adapter->mutex);
++}
++
++static int ug_tty_write(struct tty_struct *tty,
++ const unsigned char *buf, int count)
++{
++ struct ug_adapter *adapter = tty->driver_data;
++ char *b = (char *)buf;
++ int index;
++ int i;
++
++ if (!adapter)
++ return -ENODEV;
++
++ index = tty->index;
++ adapter = &ug_adapters[index];
++ for (i = 0; i < count; i++)
++ ug_safe_putc(adapter, *b++);
++ return count;
++}
++
++static int ug_tty_write_room(struct tty_struct *tty)
++{
++ return 0x123; /* whatever */
++}
++
++static int ug_tty_chars_in_buffer(struct tty_struct *tty)
++{
++ return 0; /* unbuffered */
++}
++
++
++static const struct tty_operations ug_tty_ops = {
++ .open = ug_tty_open,
++ .close = ug_tty_close,
++ .write = ug_tty_write,
++ .write_room = ug_tty_write_room,
++ .chars_in_buffer = ug_tty_chars_in_buffer,
++};
++
++
++static int ug_tty_init(void)
++{
++ struct tty_driver *driver;
++ int retval;
++
++ driver = alloc_tty_driver(2);
++ if (!driver)
++ return -ENOMEM;
++ driver->name = DRV_MODULE_NAME "con";
++ driver->major = TTY_MAJOR;
++ driver->minor_start = 64;
++ driver->type = TTY_DRIVER_TYPE_SYSCONS;
++ driver->init_termios = tty_std_termios;
++ tty_set_operations(driver, &ug_tty_ops);
++ retval = tty_register_driver(driver);
++ if (retval) {
++ put_tty_driver(driver);
++ return retval;
++ }
++ ug_tty_driver = driver;
++ return 0;
++}
++
++static void ug_tty_exit(void)
++{
++ struct tty_driver *driver = ug_tty_driver;
++
++ ug_tty_driver = NULL;
++ if (driver) {
++ tty_unregister_driver(driver);
++ put_tty_driver(driver);
++ }
++}
++
++
++
++/*
++ *
++ * EXI layer interface.
++ */
++
++/*
++ *
++ */
++static int ug_probe(struct exi_device *exi_device)
++{
++ struct console *console;
++ struct ug_adapter *adapter;
++ unsigned int slot;
++
++ /* don't try to drive a device which already has a real identifier */
++ if (exi_device->eid.id != EXI_ID_NONE)
++ return -ENODEV;
++
++ if (!ug_check_adapter(exi_device))
++ return -ENODEV;
++
++ slot = to_channel(exi_get_exi_channel(exi_device));
++ console = &ug_consoles[slot];
++ adapter = console->data;
++
++ drv_printk(KERN_INFO, "USB Gecko detected in memcard slot-%c\n",
++ 'A'+slot);
++
++ adapter->poller = ERR_PTR(-EINVAL);
++ mutex_init(&adapter->mutex);
++ adapter->refcnt = 0;
++
++ adapter->exi_device = exi_device_get(exi_device);
++ exi_set_drvdata(exi_device, adapter);
++ register_console(console);
++
++ ug_tty_init();
++
++ return 0;
++}
++
++/*
++ * Makes unavailable the USB Gecko adapter identified by the EXI device
++ * `exi_device'.
++ */
++static void ug_remove(struct exi_device *exi_device)
++{
++ struct console *console;
++ struct ug_adapter *adapter;
++ unsigned int slot;
++
++ slot = to_channel(exi_get_exi_channel(exi_device));
++ console = &ug_consoles[slot];
++ adapter = console->data;
++
++ if (adapter->refcnt)
++ drv_printk(KERN_ERR, "adapter removed while in use!\n");
++
++ ug_tty_exit();
++
++ unregister_console(console);
++ exi_set_drvdata(exi_device, NULL);
++ adapter->exi_device = NULL;
++ exi_device_put(exi_device);
++
++ mutex_destroy(&adapter->mutex);
++
++ drv_printk(KERN_INFO, "USB Gecko removed from memcard slot-%c\n",
++ 'A'+slot);
++}
++
++static struct exi_device_id ug_eid_table[] = {
++ [0] = {
++ .channel = UG_SLOTA_CHANNEL,
++ .device = UG_SLOTA_DEVICE,
++ .id = EXI_ID_NONE,
++ },
++ [1] = {
++ .channel = UG_SLOTB_CHANNEL,
++ .device = UG_SLOTB_DEVICE,
++ .id = EXI_ID_NONE,
++ },
++ {.id = 0}
++};
++
++static struct exi_driver ug_exi_driver = {
++ .name = DRV_MODULE_NAME,
++ .eid_table = ug_eid_table,
++ .frequency = UG_SPI_CLK_IDX,
++ .probe = ug_probe,
++ .remove = ug_remove,
++};
++
++
++/*
++ *
++ * Module interface.
++ */
++
++static int __init ug_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ ug_driver_version);
++
++ return exi_driver_register(&ug_exi_driver);
++}
++
++static void __exit ug_exit_module(void)
++{
++ exi_driver_unregister(&ug_exi_driver);
++}
++
++module_init(ug_init_module);
++module_exit(ug_exit_module);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
+index 289d81a..cdadf99 100644
+--- a/drivers/usb/Kconfig
++++ b/drivers/usb/Kconfig
+@@ -22,6 +22,7 @@ config USB_ARCH_HAS_HCD
+ default y if PCMCIA && !M32R # sl811_cs
+ default y if ARM # SL-811
+ default y if SUPERH # r8a66597-hcd
++ default y if WII # rvl-sthcd
+ default PCI
+
+ # many non-PCI SOC chips embed OHCI
+diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
+index 8b7c419..ba41ba1 100644
+--- a/drivers/usb/Makefile
++++ b/drivers/usb/Makefile
+@@ -16,6 +16,7 @@ obj-$(CONFIG_USB_UHCI_HCD) += host/
+ obj-$(CONFIG_USB_SL811_HCD) += host/
+ obj-$(CONFIG_USB_U132_HCD) += host/
+ obj-$(CONFIG_USB_R8A66597_HCD) += host/
++obj-$(CONFIG_USB_WII_HCD) += host/
+ obj-$(CONFIG_USB_HWA_HCD) += host/
+
+ obj-$(CONFIG_USB_C67X00_HCD) += c67x00/
+diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
+index f3a75a9..60c8f71 100644
+--- a/drivers/usb/host/Kconfig
++++ b/drivers/usb/host/Kconfig
+@@ -294,6 +294,25 @@ config SUPERH_ON_CHIP_R8A66597
+ This driver enables support for the on-chip R8A66597 in the
+ SH7366 and SH7723 processors.
+
++config USB_WII_HCD
++ tristate "Nintendo Wii HCD support"
++ depends on USB && WII && !HIGHMEM && EXPERIMENTAL
++ help
++ The Nintendo Wii includes a USB 1.1 host controller that can be
++ accessed through the API provided by the starlet subsystem.
++
++ Enable this option if you plan to use the internal Nintendo Wii
++ bluetooth dongle or any USB peripheral connected to the external
++ ports.
++
++ USB devices using isochronous transfers are not supported.
++ Use of USB hubs is partially supported.
++
++ Use completely at you own risk. If unsure, say N.
++
++ To compile this driver as a module, choose M here: the
++ module will be called rvl-sthcd.
++
+ config USB_WHCI_HCD
+ tristate "Wireless USB Host Controller Interface (WHCI) driver (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
+diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
+index 23be222..98209ee 100644
+--- a/drivers/usb/host/Makefile
++++ b/drivers/usb/host/Makefile
+@@ -21,4 +21,5 @@ obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
+ obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
+ obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
+ obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
++obj-$(CONFIG_USB_WII_HCD) += rvl-sthcd.o
+ obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
+diff --git a/drivers/usb/host/rvl-sthcd.c b/drivers/usb/host/rvl-sthcd.c
+new file mode 100644
+index 0000000..8f68297
+--- /dev/null
++++ b/drivers/usb/host/rvl-sthcd.c
+@@ -0,0 +1,2373 @@
++/*
++ * drivers/usb/host/rvl-sthcd.c
++ *
++ * USB Host Controller driver for the Nintendo Wii
++ * Copyright (C) 2008-2009 The GameCube Linux Team
++ * Copyright (C) 2008 Maarten ter Huurne
++ * Copyright (C) 2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++/*
++ *
++ * TODO
++ * - cleanup debuging mess
++ *
++ */
++
++#ifdef CONFIG_HIGHMEM
++#error Sorry, this driver cannot currently work if HIGHMEM is y
++#endif
++
++#define DBG(fmt, arg...) drv_printk(KERN_DEBUG, fmt, ##arg)
++
++#include <linux/device.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/kthread.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <linux/scatterlist.h>
++#include <linux/usb.h>
++#include <asm/starlet.h>
++
++#include "../core/hcd.h"
++#include "../core/hub.h"
++
++#define DRV_MODULE_NAME "rvl-sthcd"
++#define DRV_DESCRIPTION "USB Host Controller driver for the Nintendo Wii"
++#define DRV_AUTHOR "Maarten ter Huurne, " \
++ "Albert Herranz"
++
++static char sthcd_driver_version[] = "0.4i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++/* TODO: Use enum instead? */
++#define STHCD_IOCTLV_CONTROLREQ 0
++#define STHCD_IOCTLV_BULKREQ 1
++#define STHCD_IOCTLV_INTRREQ 2
++#define STHCD_IOCTL_SUSPENDDEVICE 5
++#define STHCD_IOCTL_RESUMEDEVICE 6
++#define STHCD_IOCTLV_GETDEVICELIST 12
++#define STHCD_IOCTL_DEVICEREMOVALNOTIFY 26
++#define STHCD_IOCTLV_DEVICEINSERTNOTIFY 27
++
++/*
++ * The Nintendo Wii has only 2 external USB ports (plus 1 internal USB port),
++ * but the starlet API provides access to USB devices in a port independent
++ * way. This is true also for USB devices attached to external hubs.
++ *
++ * Our HCD model currently maps one starlet USB device to one HCD port, thus
++ * we need additional ports here.
++ */
++#define STHCD_MAX_DEVIDS 15
++#define STHCD_MAX_PORTS STHCD_MAX_DEVIDS
++
++/*
++ * We get error -7008 after performing large transfers.
++ * Using this arbitrary limit makes things work.
++ */
++#define STHCD_MAX_CHUNK_SIZE (2048)
++
++#define STHCD_PORT_MAX_RESETS 2 /* maximum number of consecutive
++ * resets allowed for a port */
++#define STHCD_RESCAN_INTERVAL 5 /* seconds */
++
++#define starlet_ioh_sg_entry(sg, ptr) \
++ starlet_ioh_sg_set_buf((sg), (ptr), sizeof(*(ptr)))
++
++
++struct sthcd_hcd;
++struct sthcd_port;
++struct sthcd_oh;
++
++/*
++ * starlet USB device abstraction (udev).
++ *
++ */
++struct sthcd_udev {
++ u16 idVendor;
++ u16 idProduct;
++ int fd; /* starlet file descriptor */
++
++ u16 devnum; /* USB address set by kernel */
++
++ struct list_head node; /* in list of connected devices */
++ struct sthcd_oh *oh; /* parent Open Host controller */
++
++ struct list_head pep_list; /* list of private endpoints */
++};
++
++/*
++ * starlet USB device identifier.
++ *
++ */
++struct sthcd_devid {
++ u32 _unk1;
++ u16 idVendor;
++ u16 idProduct;
++};
++
++enum {
++ __STHCD_PORT_INUSE = 0,
++ __STHCD_PORT_DOOMED,
++};
++
++
++/*
++ * "Virtual" HCD USB port.
++ *
++ */
++struct sthcd_port {
++ unsigned long flags;
++#define STHCD_PORT_INUSE (1 << __STHCD_PORT_INUSE)
++#define STHCD_PORT_DOOMED (1 << __STHCD_PORT_DOOMED)
++
++ u32 status_change;
++ unsigned nr_resets;
++
++ struct sthcd_udev udev; /* one udev per port */
++};
++
++/*
++ * starlet Open Host controller abstraction (oh).
++ *
++ */
++struct sthcd_oh {
++ unsigned int index;
++ int fd; /* starlet file descriptor */
++
++ unsigned int max_devids;
++ struct sthcd_devid *new_devids;
++ struct sthcd_devid *devids;
++ unsigned int nr_devids; /* actual no of devices */
++
++ struct sthcd_hcd *hcd; /* parent Host Controller */
++};
++
++/*
++ * Host Controller (hcd).
++ *
++ */
++struct sthcd_hcd {
++ spinlock_t lock;
++
++ struct sthcd_oh oh[2];
++
++ struct sthcd_port *ports; /* array of ports */
++ unsigned int nr_ports;
++
++ struct list_head device_list; /* list of connected devices */
++
++ wait_queue_head_t rescan_waitq; /* wait queue for the rescan task */
++ struct task_struct *rescan_task;
++};
++
++
++/*
++ * Private endpoint (pep).
++ *
++ * A pep takes care of the transfers for an endpoint.
++ */
++
++struct sthcd_ctrl_params_in {
++ struct usb_ctrlrequest req;
++ u8 _unk1; /* timeout? */
++};
++struct sthcd_ctrl_xfer_ctx {
++ struct starlet_ioh_sg in[6];
++ struct sthcd_ctrl_params_in *params_in;
++};
++
++struct sthcd_bulk_intr_params_in {
++ u8 bEndpointAddress;
++ u16 wLength;
++};
++struct sthcd_bulk_intr_xfer_ctx {
++ struct starlet_ioh_sg in[2];
++ struct sthcd_bulk_intr_params_in *params_in;
++};
++
++enum {
++ __STHCD_PEP_DISABLED = 0,
++ __STHCD_PEP_XFERBUSY, /* pep is actively xferring data */
++};
++
++struct sthcd_pep {
++ unsigned long flags;
++#define STHCD_PEP_DISABLED (1 << __STHCD_PEP_DISABLED)
++#define STHCD_PEP_XFERBUSY (1 << __STHCD_PEP_XFERBUSY)
++
++ unsigned long outstanding;
++
++ struct usb_host_endpoint *ep; /* associated endpoint */
++ struct sthcd_hcd *sthcd; /* associated hcd */
++
++ /* local copy of endpoint descriptor bmAttributes */
++ __u8 bmAttributes;
++
++ /* xfer context data */
++
++ struct urb *urb; /* urb being transferred */
++
++ struct sthcd_udev *udev; /* udev for this urb */
++ struct list_head node; /* in list of peps for this udev */
++
++ size_t io_xfer_offset; /* number of bytes transferred */
++ void *io_buf; /* data buffer */
++ size_t io_buf_len; /* length of io_buf */
++
++ int request; /* ioctlv request */
++ union {
++ struct sthcd_bulk_intr_xfer_ctx *bulk_intr;
++ struct sthcd_ctrl_xfer_ctx *ctrl;
++ } ctx; /* transfer context */
++
++ unsigned int nents_in; /* number of input sg entries */
++ struct starlet_ioh_sg *in; /* input sg list */
++ struct starlet_ioh_sg io[1]; /* input/output sg list */
++};
++
++
++/*
++ * Debugging facilities.
++ *
++ */
++
++#if 0
++static inline void print_buffer(void *buf, u32 size)
++{
++ int i;
++ for (i = 0; i < (size + 3) / 4; i += 4) {
++ u32 *data = &((u32 *)buf)[i];
++ printk(KERN_INFO " %08X %08X %08X %08X\n",
++ data[0], data[1], data[2], data[3]
++ );
++ }
++}
++#endif
++
++/*
++ * Type conversion routines.
++ *
++ */
++
++static inline struct sthcd_hcd *hcd_to_sthcd(struct usb_hcd *hcd)
++{
++ return (struct sthcd_hcd *)(hcd->hcd_priv);
++}
++
++static inline struct usb_hcd *sthcd_to_hcd(struct sthcd_hcd *sthcd)
++{
++ return container_of((void *)sthcd, struct usb_hcd, hcd_priv);
++}
++
++static inline struct sthcd_port *udev_to_port(struct sthcd_udev *_udev)
++{
++ return container_of(_udev, struct sthcd_port, udev);
++}
++
++
++/*
++ * Private End Point abstraction.
++ *
++ */
++
++static inline struct sthcd_pep *ep_to_pep(struct usb_host_endpoint *ep)
++{
++ return ep->hcpriv;
++}
++
++static inline int pep_is_enabled(struct sthcd_pep *pep)
++{
++ return !test_bit(__STHCD_PEP_DISABLED, &pep->flags);
++}
++
++static int sthcd_pep_alloc_ctrl_xfer_ctx(struct sthcd_pep *pep)
++{
++ struct sthcd_ctrl_xfer_ctx *ctx;
++ struct sthcd_ctrl_params_in *params_in;
++ int error;
++
++ ctx = starlet_kzalloc(sizeof(*ctx), GFP_ATOMIC);
++ if (!ctx) {
++ error = -ENOMEM;
++ goto done;
++ }
++
++ params_in = starlet_ioh_kzalloc(sizeof(*params_in));
++ if (!params_in) {
++ starlet_kfree(ctx);
++ error = -ENOMEM;
++ goto done;
++ }
++
++ ctx->params_in = params_in;
++
++ starlet_ioh_sg_init_table(ctx->in, 6);
++ starlet_ioh_sg_entry(&ctx->in[0], &params_in->req.bRequestType);
++ starlet_ioh_sg_entry(&ctx->in[1], &params_in->req.bRequest);
++ starlet_ioh_sg_entry(&ctx->in[2], &params_in->req.wValue);
++ starlet_ioh_sg_entry(&ctx->in[3], &params_in->req.wIndex);
++ starlet_ioh_sg_entry(&ctx->in[4], &params_in->req.wLength);
++ starlet_ioh_sg_entry(&ctx->in[5], &params_in->_unk1);
++
++ pep->ctx.ctrl = ctx;
++
++ pep->nents_in = ARRAY_SIZE(ctx->in);
++ pep->in = ctx->in;
++
++ error = 0;
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++static void sthcd_pep_free_ctrl_xfer_ctx(struct sthcd_pep *pep)
++{
++ struct sthcd_ctrl_xfer_ctx *ctx = pep->ctx.ctrl;
++
++ if (ctx) {
++ starlet_ioh_kfree(ctx->params_in);
++ starlet_kfree(ctx);
++ pep->ctx.ctrl = NULL;
++ }
++}
++
++static int sthcd_pep_alloc_bulk_intr_xfer_ctx(struct sthcd_pep *pep)
++{
++ struct sthcd_bulk_intr_xfer_ctx *ctx;
++ struct sthcd_bulk_intr_params_in *params_in;
++ int error;
++
++ ctx = starlet_kzalloc(sizeof(*ctx), GFP_ATOMIC);
++ if (!ctx) {
++ error = -ENOMEM;
++ goto done;
++ }
++
++ params_in = starlet_ioh_kzalloc(sizeof(*params_in));
++ if (!params_in) {
++ starlet_kfree(ctx);
++ error = -ENOMEM;
++ goto done;
++ }
++
++ ctx->params_in = params_in;
++
++ starlet_ioh_sg_init_table(ctx->in, 2);
++ starlet_ioh_sg_entry(&ctx->in[0], &params_in->bEndpointAddress);
++ starlet_ioh_sg_entry(&ctx->in[1], &params_in->wLength);
++
++ pep->ctx.bulk_intr = ctx;
++
++ pep->nents_in = ARRAY_SIZE(ctx->in);
++ pep->in = ctx->in;
++
++ error = 0;
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++static void sthcd_pep_free_bulk_intr_xfer_ctx(struct sthcd_pep *pep)
++{
++ struct sthcd_bulk_intr_xfer_ctx *ctx = pep->ctx.bulk_intr;
++
++ if (ctx) {
++ starlet_ioh_kfree(ctx->params_in);
++ starlet_kfree(ctx);
++ pep->ctx.bulk_intr = NULL;
++ }
++}
++
++static int sthcd_pep_alloc_xfer_ctx(struct sthcd_pep *pep)
++{
++ unsigned int xfer_type = pep->bmAttributes &
++ USB_ENDPOINT_XFERTYPE_MASK;
++ int error;
++
++ switch (xfer_type) {
++ case USB_ENDPOINT_XFER_CONTROL:
++ error = sthcd_pep_alloc_ctrl_xfer_ctx(pep);
++ break;
++ case USB_ENDPOINT_XFER_BULK:
++ case USB_ENDPOINT_XFER_INT:
++ error = sthcd_pep_alloc_bulk_intr_xfer_ctx(pep);
++ break;
++ default:
++ error = -ENXIO;
++ break;
++ }
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++static void sthcd_pep_free_xfer_ctx(struct sthcd_pep *pep)
++{
++ unsigned int xfer_type = pep->bmAttributes &
++ USB_ENDPOINT_XFERTYPE_MASK;
++
++ switch (xfer_type) {
++ case USB_ENDPOINT_XFER_CONTROL:
++ sthcd_pep_free_ctrl_xfer_ctx(pep);
++ break;
++ case USB_ENDPOINT_XFER_BULK:
++ case USB_ENDPOINT_XFER_INT:
++ sthcd_pep_free_bulk_intr_xfer_ctx(pep);
++ break;
++ default:
++ DBG("%s: invalid endpoint xfer type %u\n", __func__,
++ xfer_type);
++ break;
++ }
++}
++
++static int sthcd_pep_alloc_xfer_io_buf(struct sthcd_pep *pep, size_t size)
++{
++ /* REVISIT, size must be greater than 0 */
++ size_t io_buf_size = size + 32;
++ int error;
++
++ pep->io_buf = starlet_ioh_kzalloc(io_buf_size);
++ if (!pep->io_buf) {
++ error = -ENOMEM;
++ goto done;
++ }
++
++ starlet_ioh_sg_init_table(pep->io, 1);
++ starlet_ioh_sg_set_buf(&pep->io[0], pep->io_buf, size);
++
++ error = 0;
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++static void sthcd_pep_free_xfer_io_buf(struct sthcd_pep *pep)
++{
++ if (pep->io_buf) {
++ starlet_ioh_sg_set_buf(&pep->io[0], NULL, 0);
++ starlet_ioh_kfree(pep->io_buf);
++ pep->io_buf = NULL;
++ }
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_init(struct sthcd_pep *pep, struct sthcd_hcd *sthcd,
++ struct usb_host_endpoint *ep)
++{
++ int error;
++
++ BUG_ON(!ep);
++
++ pep->sthcd = sthcd;
++ pep->ep = ep;
++ pep->bmAttributes = ep->desc.bmAttributes;
++
++ error = sthcd_pep_alloc_xfer_ctx(pep);
++ if (error)
++ goto done;
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static void sthcd_pep_exit(struct sthcd_pep *pep)
++{
++ BUG_ON(pep->urb);
++ BUG_ON(!pep->ep);
++
++ sthcd_pep_free_xfer_ctx(pep);
++
++ pep->ep = NULL;
++ pep->sthcd = NULL;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static struct sthcd_pep *sthcd_pep_alloc(struct sthcd_hcd *sthcd,
++ struct usb_host_endpoint *ep)
++{
++ struct sthcd_pep *pep;
++ int error;
++
++ pep = kzalloc(sizeof(*pep), GFP_ATOMIC);
++ if (!pep)
++ return NULL;
++
++ error = sthcd_pep_init(pep, sthcd, ep);
++ if (error) {
++ kfree(pep);
++ return NULL;
++ }
++
++ return pep;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static void sthcd_pep_free(struct sthcd_pep *pep)
++{
++ sthcd_pep_exit(pep);
++ kfree(pep);
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static struct sthcd_udev *sthcd_find_udev_by_num(struct sthcd_hcd *sthcd,
++ u16 devnum)
++{
++ struct sthcd_udev *udev;
++
++ list_for_each_entry(udev, &sthcd->device_list, node) {
++ if (udev->devnum == devnum)
++ return udev;
++ }
++ DBG("%s: udev %u not found\n", __func__, devnum);
++ return NULL;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_takein_urb(struct sthcd_pep *pep, struct urb *urb)
++{
++ struct sthcd_hcd *sthcd = pep->sthcd;
++ struct sthcd_udev *udev;
++ int error = 0;
++
++ if (!pep_is_enabled(pep)) {
++ error = -ESHUTDOWN;
++ goto done;
++ }
++
++ if (pep->urb) {
++ error = -EBUSY;
++ goto done;
++ }
++
++ if (unlikely(!pep->udev)) {
++ BUG_ON(!urb->dev);
++ udev = sthcd_find_udev_by_num(sthcd, urb->dev->devnum);
++ if (!udev) {
++ error = -ENODEV;
++ goto done;
++ }
++ pep->udev = udev;
++ list_add_tail(&pep->node, &udev->pep_list);
++ }
++
++ pep->urb = urb;
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static void sthcd_pep_takeout_urb(struct sthcd_pep *pep)
++{
++ WARN_ON(!pep->urb);
++
++ pep->urb = NULL;
++ if (pep->udev)
++ list_del_init(&pep->node);
++ pep->udev = NULL;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static void sthcd_pep_setup_ctrl_xfer(struct sthcd_pep *pep)
++{
++ struct urb *urb = pep->urb;
++ struct sthcd_ctrl_xfer_ctx *ctx = pep->ctx.ctrl;
++ struct sthcd_ctrl_params_in *params_in;
++
++ params_in = ctx->params_in;
++ memcpy(&params_in->req, urb->setup_packet, sizeof(params_in->req));
++ params_in->req.wLength = cpu_to_le16(pep->io_buf_len);
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static void sthcd_pep_setup_bulk_intr_xfer(struct sthcd_pep *pep)
++{
++ struct urb *urb = pep->urb;
++ struct sthcd_bulk_intr_xfer_ctx *ctx = pep->ctx.bulk_intr;
++ struct sthcd_bulk_intr_params_in *params_in;
++
++ params_in = ctx->params_in;
++ params_in->bEndpointAddress = urb->ep->desc.bEndpointAddress;
++ params_in->wLength = pep->io_buf_len;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_setup_xfer(struct sthcd_pep *pep)
++{
++ struct urb *urb = pep->urb;
++ int request;
++ int error = 0;
++
++ switch (usb_pipetype(urb->pipe)) {
++ case PIPE_CONTROL:
++ request = STHCD_IOCTLV_CONTROLREQ;
++ sthcd_pep_setup_ctrl_xfer(pep);
++ break;
++ case PIPE_INTERRUPT:
++ request = STHCD_IOCTLV_INTRREQ;
++ sthcd_pep_setup_bulk_intr_xfer(pep);
++ break;
++ case PIPE_BULK:
++ request = STHCD_IOCTLV_BULKREQ;
++ sthcd_pep_setup_bulk_intr_xfer(pep);
++ break;
++ default:
++ error = -EINVAL;
++ break;
++ }
++
++ if (!error) {
++ pep->request = request;
++ starlet_ioh_sg_set_buf(&pep->io[0],
++ pep->io_buf, pep->io_buf_len);
++ }
++
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_setup_next_xfer(struct sthcd_pep *pep)
++{
++ struct urb *urb = pep->urb;
++ int retval = 0;
++ int error;
++
++ if (pep->io_xfer_offset < urb->transfer_buffer_length) {
++ pep->io_buf_len = urb->transfer_buffer_length -
++ pep->io_xfer_offset;
++ if (pep->io_buf_len > STHCD_MAX_CHUNK_SIZE)
++ pep->io_buf_len = STHCD_MAX_CHUNK_SIZE;
++
++ retval = pep->io_buf_len;
++
++ error = sthcd_pep_setup_xfer(pep);
++ if (error)
++ retval = error;
++ }
++
++ if (retval < 0)
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_setup_first_xfer(struct sthcd_pep *pep)
++{
++ struct urb *urb = pep->urb;
++ int retval;
++ int error;
++
++ pep->io_xfer_offset = 0;
++ pep->io_buf_len = urb->transfer_buffer_length;
++ if (pep->io_buf_len > STHCD_MAX_CHUNK_SIZE)
++ pep->io_buf_len = STHCD_MAX_CHUNK_SIZE;
++
++ retval = pep->io_buf_len;
++
++ error = sthcd_pep_setup_xfer(pep);
++ if (error)
++ retval = error;
++
++ if (retval < 0)
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static void sthcd_pep_finish_xfer(struct sthcd_pep *pep, int xfer_len)
++{
++ struct urb *urb = pep->urb;
++
++ if (xfer_len <= 0)
++ goto done;
++
++ BUG_ON(!urb);
++ BUG_ON(!pep->io_buf);
++
++ /*
++ * For IN transfers, copy the received chunk data into the urb
++ * xfer buffer.
++ */
++ if (usb_urb_dir_in(urb)) {
++ /* device -> host */
++ BUG_ON(!urb->transfer_buffer);
++ memcpy(urb->transfer_buffer + pep->io_xfer_offset,
++ pep->io_buf, xfer_len);
++ }
++
++ pep->io_xfer_offset += xfer_len;
++
++done:
++ return;
++}
++
++static int sthcd_pep_xfer_callback(struct starlet_ipc_request *req);
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_start_xfer(struct sthcd_pep *pep)
++{
++ struct urb *urb = pep->urb;
++ struct sthcd_udev *udev = pep->udev;
++ int error;
++
++ BUG_ON(!urb);
++
++ /* udev was disconnected */
++ if (unlikely(!udev)) {
++ error = -ENODEV;
++ goto done;
++ }
++
++ if (!pep_is_enabled(pep)) {
++ error = -ESHUTDOWN;
++ goto done;
++ }
++
++ /* for OUT transfers, copy the data to send into the pep xfer buffer */
++ if (pep->io_buf_len > 0) {
++ if (usb_urb_dir_out(urb)) {
++ /* host -> device */
++ BUG_ON(!urb->transfer_buffer);
++ memcpy(pep->io_buf,
++ urb->transfer_buffer + pep->io_xfer_offset,
++ pep->io_buf_len);
++ }
++ }
++
++ starlet_ioh_sg_set_buf(&pep->io[0],
++ pep->io_buf, pep->io_buf_len);
++
++ /* start an async transfer */
++ error = starlet_ioh_ioctlv_nowait(udev->fd, pep->request,
++ pep->nents_in, pep->in, 1, pep->io,
++ sthcd_pep_xfer_callback, pep);
++ if (!error)
++ pep->outstanding++;
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_giveback_urb(struct sthcd_hcd *sthcd,
++ struct urb *urb, int status)
++__releases(sthcd->lock) __acquires(sthcd->lock)
++{
++ struct usb_hcd *hcd = sthcd_to_hcd(sthcd);
++
++ /*
++ * Release the hcd lock here as the callback may need to
++ * hold it again.
++ */
++ spin_unlock(&sthcd->lock);
++ usb_hcd_giveback_urb(hcd, urb, status);
++ spin_lock(&sthcd->lock);
++
++ return status;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++struct urb *sthcd_find_next_urb_in_ep(struct usb_host_endpoint *ep)
++{
++ if (list_empty(&ep->urb_list))
++ return NULL;
++ else
++ return list_first_entry(&ep->urb_list, struct urb, urb_list);
++}
++
++static int sthcd_pep_send_urb(struct sthcd_pep *pep, struct urb *urb);
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_cond_send_next_urb(struct sthcd_pep *pep)
++{
++ struct urb *urb;
++ int retval = 0;
++ int error;
++
++ /* schedule next urb if any */
++ urb = sthcd_find_next_urb_in_ep(pep->ep);
++ if (urb) {
++ error = sthcd_pep_send_urb(pep, urb);
++ if (!error) {
++ retval = 1;
++ goto done;
++ } else {
++ retval = error;
++ }
++ }
++done:
++ if (retval < 0)
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++/*
++ *
++ * Context: interrupts disabled, hcd lock held
++ */
++static int sthcd_pep_send_urb(struct sthcd_pep *pep, struct urb *urb)
++{
++ struct sthcd_port *port = NULL;
++ struct sthcd_hcd *sthcd;
++ struct usb_ctrlrequest *req;
++ u16 typeReq, wValue;
++ int retval, fake;
++ int error;
++
++ /*
++ * Unconditionally fail urbs targetted at doomed ports.
++ */
++ if (pep->udev) {
++ port = udev_to_port(pep->udev);
++ if (test_bit(__STHCD_PORT_DOOMED, &port->flags)) {
++ error = -ENODEV;
++ goto done;
++ }
++ }
++
++ if (test_and_set_bit(__STHCD_PEP_XFERBUSY, &pep->flags)) {
++ /*
++ * There is a pep xfer in progress.
++ * Our urb is already queued on the usb device, so do nothing
++ * here and rely on the pep xfer callback to do the actual
++ * work when it's done with the current urb in flight.
++ */
++ error = 0;
++ goto done;
++ }
++
++ /* we can have one ongoing urb only */
++ error = sthcd_pep_takein_urb(pep, urb);
++ if (error)
++ goto done;
++
++ urb->hcpriv = urb; /* mark urb in use */
++
++ retval = sthcd_pep_setup_first_xfer(pep);
++ if (retval < 0) {
++ error = retval;
++ goto err_setup_xfer;
++ }
++
++ fake = 0;
++ if (pep->request == STHCD_IOCTLV_CONTROLREQ) {
++ req = (struct usb_ctrlrequest *)urb->setup_packet;
++ typeReq = (req->bRequestType << 8) | req->bRequest;
++ wValue = le16_to_cpu(req->wValue);
++
++ switch (typeReq) {
++ case DeviceOutRequest | USB_REQ_SET_ADDRESS: /* 0005 */
++ if (urb->dev->devnum != 0) {
++ /* REVISIT, never reached */
++ drv_printk(KERN_WARNING,
++ "address change %u->%u\n",
++ urb->dev->devnum, wValue);
++ }
++ /*
++ * We are guaranteed to have an udev because the takein
++ * was successful.
++ */
++ pep->udev->devnum = wValue;
++ urb->actual_length = 0;
++
++ /* clear the port reset count, we have an address */
++ if (wValue) {
++ /*
++ * We need to retrieve the port again
++ * as we might have entered the function
++ * without an udev assigned to the pep.
++ */
++ port = udev_to_port(pep->udev);
++ port->nr_resets = 0;
++ }
++ fake = 1;
++ break;
++ default:
++ break;
++ }
++ }
++
++ if (fake) {
++ sthcd = pep->sthcd;
++ /* finish this fake urb synchronously... */
++ usb_hcd_unlink_urb_from_ep(sthcd_to_hcd(sthcd), urb);
++ sthcd_giveback_urb(sthcd, urb, 0);
++ /* ... and proceed with the next urb, if applicable */
++ sthcd_pep_cond_send_next_urb(pep);
++ } else {
++ /* allocate an io buffer for this transfer */
++ error = sthcd_pep_alloc_xfer_io_buf(pep, pep->io_buf_len);
++ if (error)
++ goto err_alloc_io_buf;
++
++ /* ... and start the first transfer */
++ error = sthcd_pep_start_xfer(pep);
++ if (error)
++ goto err_start_xfer;
++ }
++
++ return 0;
++
++err_start_xfer:
++ sthcd_pep_free_xfer_io_buf(pep);
++err_alloc_io_buf:
++err_setup_xfer:
++ sthcd_pep_takeout_urb(pep);
++ urb->hcpriv = NULL;
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++static void sthcd_pep_print(struct sthcd_pep *pep)
++{
++ struct usb_device *udev;
++ u16 idVendor, idProduct;
++
++ idVendor = idProduct = 0xffff;
++ if (pep->urb) {
++ udev = pep->urb->dev;
++ if (udev) {
++ idVendor = le16_to_cpu(udev->descriptor.idVendor);
++ idProduct = le16_to_cpu(udev->descriptor.idProduct);
++ }
++ }
++ DBG("(%04X:%04X) request=%d,"
++ " io_buf=%p, io_buf_len=%u, io_xfer_offset=%u\n",
++ idVendor, idProduct,
++ pep->request,
++ pep->io_buf,
++ pep->io_buf_len,
++ pep->io_xfer_offset);
++}
++
++/*
++ *
++ * Context: in interrupt
++ */
++static int sthcd_pep_xfer_callback(struct starlet_ipc_request *req)
++{
++ int xfer_len = req->result;
++ struct sthcd_pep *pep = req->done_data;
++ int status = 0;
++ struct sthcd_port *port;
++ struct sthcd_hcd *sthcd;
++ struct usb_hcd *hcd;
++ struct urb *urb;
++ int retval;
++ unsigned long flags;
++ int error;
++
++ starlet_ipc_free_request(req);
++
++ sthcd = pep->sthcd;
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ hcd = sthcd_to_hcd(sthcd);
++
++ pep->outstanding--;
++
++ urb = pep->urb;
++ if (!urb) {
++ /*
++ * starlet completed an URB that was already dequeued.
++ *
++ * We must free here the memory used by the pep, including
++ * I/O buffers, avoiding dereferencing any USB stack data
++ * pointed by the pep, as it may be invalid now.
++ */
++ sthcd_pep_free_xfer_io_buf(pep);
++ sthcd_pep_free(pep);
++ goto done;
++ }
++
++ /* sanity checks, determine transfer status and length */
++ if (xfer_len < 0) {
++ status = xfer_len;
++ xfer_len = 0;
++
++ if (status != -7004 && status != -7003 && status != -7005) {
++ drv_printk(KERN_ERR, "request completed"
++ " with error %d\n", status);
++ sthcd_pep_print(pep);
++ }
++
++ switch (status) {
++ case -7003:
++ case -7004:
++ /* endpoint stall */
++ status = -EPIPE;
++ break;
++ case -7005:
++ /* nak? */
++ status = -ECONNRESET;
++ break;
++ case -7008:
++ case -7022:
++ case -4:
++ /* FALL-THROUGH */
++ default:
++ /*
++ * We got an unknown, probably un-retryable, error.
++ * Flag the port as unuseable. The associated
++ * device will be disconnected ASAP.
++ */
++ port = udev_to_port(pep->udev);
++ set_bit(__STHCD_PORT_DOOMED, &port->flags);
++ DBG("%s: error %d on port %d, doomed!\n", __func__,
++ status, port - pep->sthcd->ports + 1);
++
++ /* also, do not use the pep for xfers anymore */
++ set_bit(__STHCD_PEP_DISABLED, &pep->flags);
++ status = -ENODEV;
++ break;
++ }
++ } else {
++ if (usb_pipecontrol(urb->pipe)) {
++ /*
++ * starlet includes the length of the request
++ * into the reply for control transfers.
++ * We need to substract the request size from
++ * the reply len to get the actual data size.
++ */
++ xfer_len -= sizeof(struct usb_ctrlrequest);
++ if (xfer_len < 0) {
++ drv_printk(KERN_ERR, "request incomplete,"
++ " %d bytes short\n",
++ -xfer_len);
++ status = -EPIPE;
++ xfer_len = 0;
++ }
++ }
++ if (xfer_len > pep->io_buf_len) {
++ DBG("%s: xfer len %u larger than xfer buf"
++ " len %u\n", __func__,
++ xfer_len, pep->io_buf_len);
++ xfer_len = pep->io_buf_len;
++ }
++
++ }
++
++ if (xfer_len > 0) {
++ sthcd_pep_finish_xfer(pep, xfer_len);
++
++ /*
++ * Only schedule the next chunk if we didn't get a short xfer
++ * and the pep is still active
++ */
++ if (xfer_len == pep->io_buf_len && pep_is_enabled(pep)) {
++ retval = sthcd_pep_setup_next_xfer(pep);
++ if (retval <= 0) {
++ /* an error happened or all chunks were done */
++ status = retval;
++ } else {
++ /* next xfer */
++ sthcd_pep_start_xfer(pep);
++ goto done;
++ }
++ }
++ }
++
++ sthcd_pep_free_xfer_io_buf(pep);
++ urb->actual_length = pep->io_xfer_offset;
++
++ /* at this point, we are done with this urb */
++ clear_bit(__STHCD_PEP_XFERBUSY, &pep->flags);
++
++ sthcd_pep_takeout_urb(pep);
++
++ BUG_ON(!sthcd);
++ BUG_ON(!urb);
++
++ error = usb_hcd_check_unlink_urb(hcd, urb, status);
++ if (!error) {
++ usb_hcd_unlink_urb_from_ep(hcd, urb);
++
++ /* give back this urb */
++ sthcd_giveback_urb(sthcd, urb, status);
++ } else {
++ /* REVISIT, paranoid */
++ DBG("%s: error checking unlink\n", __func__);
++ }
++
++ /* if applicable, launch the next urb in this endpoint queue */
++ sthcd_pep_cond_send_next_urb(pep);
++
++done:
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++
++ return 0;
++}
++
++
++/*
++ * starlet USB device "udev" abstraction.
++ *
++ *
++ */
++
++
++static struct sthcd_udev *sthcd_get_free_udev(struct sthcd_hcd *sthcd)
++{
++ struct sthcd_port *port;
++ struct sthcd_udev *udev;
++ int i;
++
++ port = sthcd->ports;
++ for (i = 0; i < sthcd->nr_ports; i++, port++) {
++ udev = &port->udev;
++ if (!test_and_set_bit(__STHCD_PORT_INUSE, &port->flags))
++ return udev;
++ }
++ return NULL;
++}
++
++static struct sthcd_udev *sthcd_find_udev_by_ids(struct sthcd_hcd *sthcd,
++ u16 idVendor, u16 idProduct)
++{
++ struct sthcd_udev *udev;
++
++ list_for_each_entry(udev, &sthcd->device_list, node) {
++ if (udev->idVendor == idVendor && udev->idProduct == idProduct)
++ return udev;
++ }
++ return NULL;
++}
++
++#if 0
++static int sthcd_udev_suspend(struct sthcd_udev *udev)
++{
++ int error;
++
++ error = starlet_ioctl(udev->fd, STHCD_IOCTL_SUSPENDDEVICE,
++ NULL, 0, NULL, 0);
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++static int sthcd_udev_resume(struct sthcd_udev *udev)
++{
++ int error;
++
++ error = starlet_ioctl(udev->fd, STHCD_IOCTL_RESUMEDEVICE,
++ NULL, 0, NULL, 0);
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++#endif
++
++static int sthcd_udev_close(struct sthcd_udev *udev)
++{
++ int fd = udev->fd;
++
++ udev->fd = -1;
++ return starlet_close(fd);
++}
++
++static int sthcd_udev_open(struct sthcd_udev *udev)
++{
++ struct sthcd_oh *oh = udev->oh;
++ char pathname[32];
++ int error;
++
++ if (udev->fd != -1) {
++ drv_printk(KERN_WARNING, "udev %04X.%04X already opened,"
++ " closing it first\n",
++ udev->idVendor, udev->idProduct);
++ sthcd_udev_close(udev);
++ }
++
++ snprintf(pathname, sizeof(pathname), "/dev/usb/oh%u/%04x/%04x",
++ oh->index, udev->idVendor, udev->idProduct);
++ error = starlet_open(pathname, 0);
++ if (error < 0) {
++ drv_printk(KERN_ERR, "open %s failed\n", pathname);
++ return error;
++ }
++ udev->fd = error;
++
++ return 0;
++}
++
++static void sthcd_udev_exit(struct sthcd_udev *udev)
++{
++ struct sthcd_hcd *sthcd;
++ struct sthcd_pep *pep;
++ unsigned long flags;
++
++ sthcd = udev->oh->hcd;
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ /* remove from the list of connected devices */
++ list_del_init(&udev->node);
++
++ /* unlink all associated peps */
++ list_for_each_entry(pep, &udev->pep_list, node) {
++ if (pep->udev) {
++ pep->udev = NULL;
++ list_del_init(&pep->node);
++ }
++ }
++
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++
++ sthcd_udev_close(udev);
++
++ udev->idVendor = 0;
++ udev->idProduct = 0;
++ udev->oh = NULL;
++ udev->devnum = 0;
++}
++
++static int sthcd_udev_init(struct sthcd_udev *udev,
++ struct sthcd_oh *oh,
++ u16 idVendor, u16 idProduct)
++{
++ struct sthcd_hcd *sthcd = oh->hcd;
++ int error;
++ unsigned long flags;
++
++ INIT_LIST_HEAD(&udev->pep_list);
++
++ udev->idVendor = idVendor;
++ udev->idProduct = idProduct;
++ udev->oh = oh;
++ udev->fd = -1;
++ udev->devnum = 0;
++
++ error = sthcd_udev_open(udev);
++ if (error)
++ return error;
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++ list_add_tail(&udev->node, &sthcd->device_list);
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++
++ return error;
++}
++
++
++/*
++ * Hub emulation routines.
++ *
++ */
++
++#define STHCD_USB_DT_HUB_TOTAL_SIZE \
++ (USB_DT_HUB_NONVAR_SIZE + 2*((STHCD_MAX_PORTS + 1 + 7) / 8))
++
++static struct usb_hub_descriptor sthcd_hub_hub_descr = {
++ .bDescLength = STHCD_USB_DT_HUB_TOTAL_SIZE,
++ .bDescriptorType = USB_DT_HUB,
++ .bNbrPorts = STHCD_MAX_PORTS,
++ .wHubCharacteristics = 0x0000,
++ .bPwrOn2PwrGood = 0,
++ .bHubContrCurrent = 0,
++};
++
++
++static int
++sthcd_hub_control_standard(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
++ u16 wIndex, char *buf, u16 wLength)
++{
++ int retval = -EINVAL;
++
++ switch (typeReq) {
++ case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: /* 0009 */
++ if (wValue != 1) {
++ drv_printk(KERN_INFO, "invalid configuration %d\n",
++ wValue);
++ } else {
++ retval = 0;
++ }
++ break;
++ case DeviceRequest | USB_REQ_GET_STATUS: /* 8000 */
++ if (wLength < 2) {
++ retval = -ENOMEM;
++ } else {
++ buf[0] = (1 << USB_DEVICE_SELF_POWERED);
++ buf[1] = 0;
++ retval = 2;
++ }
++ break;
++ default:
++ drv_printk(KERN_WARNING, "%s: request %04X not supported\n",
++ __func__, typeReq);
++ break;
++ }
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++static int
++sthcd_hub_control_hub(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
++ u16 wIndex, void *buf, u16 wLength)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ struct usb_hub_status *hub_status;
++ struct usb_hub_descriptor *hub_descr;
++ size_t size, port_array_size;
++ u8 *p;
++ int retval = -EINVAL;
++
++ switch (typeReq) {
++ case GetHubStatus: /* 0xA000 */
++ size = sizeof(*hub_status);
++ if (wLength < size) {
++ retval = -ENOMEM;
++ } else {
++ hub_status = buf;
++ hub_status->wHubStatus = 0x0000; /* no problems */
++ hub_status->wHubChange = 0x0000; /* no changes */
++ retval = size;
++ }
++ break;
++ case GetHubDescriptor: /* 0xA006 */
++ /*
++ * For the DeviceRemovable and PortPwrCtrlMask fields:
++ * bit 0 is reserved.
++ * bit 1 is the internal (oh1) port, which is non-removable.
++ * bit 2..nr_ports+1 are the external (oh0) ports.
++ */
++ port_array_size = (1 + sthcd->nr_ports + 7) / 8;
++ size = USB_DT_HUB_NONVAR_SIZE + 2*port_array_size;
++
++ if (wLength < size) {
++ retval = -ENOMEM;
++ } else {
++ p = buf;
++
++ memcpy(p, &sthcd_hub_hub_descr, USB_DT_HUB_NONVAR_SIZE);
++ p += USB_DT_HUB_NONVAR_SIZE;
++
++ /* fixup the descriptor with the real number of ports */
++ hub_descr = buf;
++ hub_descr->bDescLength = size;
++ hub_descr->bNbrPorts = sthcd->nr_ports;
++
++ /* DeviceRemovable field, table 11-13 Hub Descriptor */
++ memset(p, 0, port_array_size);
++ *p |= 0x02; /* port 1 is non-removable */
++ p += port_array_size;
++
++ /* PortPwrCtrlMask field, table 11-13 Hub Descriptor */
++ memset(p, 0xff, port_array_size);
++
++ retval = size;
++ }
++ break;
++ default:
++ drv_printk(KERN_WARNING, "%s: request %04X not supported\n",
++ __func__, typeReq);
++ break;
++ }
++
++ if (retval < 0)
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++
++static int
++sthcd_hub_control_port(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
++ u16 wIndex, void *buf, u16 wLength)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ struct sthcd_port *port;
++ unsigned long flags;
++ int retval = 0;
++
++ if (wIndex == 0 || wIndex > sthcd->nr_ports) {
++ DBG("%s: invalid port %u\n", __func__, wIndex);
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ wIndex--;
++ port = &sthcd->ports[wIndex];
++
++ switch (typeReq) {
++ case GetPortStatus: /* 0xA300 */
++ if (test_bit(__STHCD_PORT_DOOMED, &port->flags)) {
++ /* disconnect */
++ if (!!(port->status_change & USB_PORT_STAT_CONNECTION))
++ port->status_change |=
++ (USB_PORT_STAT_C_CONNECTION<<16);
++ port->status_change &= ~USB_PORT_STAT_CONNECTION;
++ }
++ /* REVISIT wait 50ms before clearing the RESET state */
++ if (port->status_change & USB_PORT_STAT_RESET) {
++ port->nr_resets++;
++ if (port->nr_resets > 2) {
++ DBG("%s: port %d was reset %u time(s),"
++ " doomed!\n", __func__,
++ wIndex+1, port->nr_resets);
++ set_bit(__STHCD_PORT_DOOMED, &port->flags);
++ }
++ if (!(port->status_change & USB_PORT_STAT_ENABLE))
++ port->status_change |=
++ (USB_PORT_STAT_C_ENABLE << 16);
++ port->status_change &= ~USB_PORT_STAT_RESET;
++ port->status_change |= (USB_PORT_STAT_ENABLE |
++ (USB_PORT_STAT_C_RESET << 16));
++ port->udev.devnum = 0;
++ }
++ retval = 4;
++ ((__le32 *) buf)[0] = cpu_to_le32(port->status_change);
++ break;
++ case ClearPortFeature: /* 0x2301 */
++ switch (wValue) {
++ case USB_PORT_FEAT_ENABLE:
++ port->status_change &= USB_PORT_STAT_POWER;
++ break;
++ case USB_PORT_FEAT_SUSPEND:
++ case USB_PORT_FEAT_POWER:
++ case USB_PORT_FEAT_C_ENABLE:
++ case USB_PORT_FEAT_C_SUSPEND:
++ case USB_PORT_FEAT_C_CONNECTION:
++ case USB_PORT_FEAT_C_OVER_CURRENT:
++ case USB_PORT_FEAT_C_RESET: /* 0x14 */
++ break;
++ default:
++ goto error;
++ }
++ port->status_change &= ~(1 << wValue);
++ break;
++ case SetPortFeature: /* 0x2303 */
++ switch (wValue) {
++ case USB_PORT_FEAT_ENABLE:
++ case USB_PORT_FEAT_SUSPEND:
++ case USB_PORT_FEAT_POWER: /* 0x08 */
++ break;
++ case USB_PORT_FEAT_RESET: /* 0x04 */
++ /* REVISIT, free all related resources here */
++ break;
++ default:
++ goto error;
++ }
++ port->status_change |= 1 << wValue;
++ break;
++ default:
++ drv_printk(KERN_WARNING, "%s: request %04X not supported\n",
++ __func__, typeReq);
++error:
++ retval = -EPIPE;
++ break;
++ }
++
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++
++ return retval;
++}
++
++static int sthcd_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
++ u16 wIndex, char *buf, u16 wLength)
++{
++ u8 bmRequestType;
++ int retval = -EINVAL;
++
++ /*
++ * starlet never answers to requests on device 0/0, so we emulate it.
++ */
++
++ bmRequestType = typeReq >> 8;
++
++ switch (bmRequestType & USB_TYPE_MASK) {
++ case USB_TYPE_STANDARD:
++ /* generic requests */
++ retval = sthcd_hub_control_standard(hcd, typeReq, wValue,
++ wIndex, buf, wLength);
++ break;
++ case USB_TYPE_CLASS:
++ /* hub-specific requests */
++ switch (bmRequestType & USB_RECIP_MASK) {
++ case USB_RECIP_DEVICE:
++ /* hub */
++ retval = sthcd_hub_control_hub(hcd, typeReq, wValue,
++ wIndex, buf, wLength);
++ break;
++ case USB_RECIP_OTHER:
++ /* port */
++ retval = sthcd_hub_control_port(hcd, typeReq, wValue,
++ wIndex, buf, wLength);
++ break;
++ default:
++ drv_printk(KERN_WARNING, "%s: request %04X"
++ " not supported\n", __func__, typeReq);
++ break;
++ }
++ break;
++ default:
++ drv_printk(KERN_WARNING, "%s: request %04X not supported\n",
++ __func__, typeReq);
++ break;
++ }
++
++ if (retval > 0)
++ retval = 0;
++ if (retval < 0)
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++static int sthcd_hub_status_data(struct usb_hcd *hcd, char *buf)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ u16 *p = (u16 *)buf;
++ struct sthcd_port *port;
++ unsigned long flags;
++ int i, result;
++
++ if (!HC_IS_RUNNING(hcd->state))
++ return -ESHUTDOWN;
++
++#if 0
++ if (timer_pending(&hcd->rh_timer))
++ return 0;
++#endif
++
++ /* FIXME, this code assumes at least 9 and no more than 15 ports */
++ BUG_ON(sthcd->nr_ports > 15 || sthcd->nr_ports < 8);
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ port = sthcd->ports;
++ for (i = 0, *p = 0; i < sthcd->nr_ports; i++, port++) {
++ if ((port->status_change & 0xffff0000) != 0) {
++ *p |= 1 << (i+1);
++ /* REVISIT */
++ }
++ }
++ *p = le16_to_cpu(*p);
++ result = (*p != 0) ? 2 : 0;
++
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++
++/* DBG("%s: poll cycle, changes=%04x\n", __func__, *p); */
++
++ return result;
++}
++
++
++/*
++ * "OH" abstraction.
++ *
++ */
++
++static int sthcd_oh_insert_udev(struct sthcd_oh *oh,
++ u16 idVendor, u16 idProduct)
++{
++ struct sthcd_hcd *sthcd = oh->hcd;
++ struct sthcd_udev *udev;
++ struct sthcd_port *port;
++ unsigned long flags;
++ int error;
++
++ drv_printk(KERN_INFO, "inserting device %04X.%04X\n",
++ idVendor, idProduct);
++
++ udev = sthcd_get_free_udev(sthcd);
++ if (!udev) {
++ drv_printk(KERN_ERR, "no free udevs!\n");
++ return -EBUSY;
++ }
++
++ error = sthcd_udev_init(udev, oh, idVendor, idProduct);
++ if (!error) {
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ port = udev_to_port(udev);
++ /* notify a connection event */
++ port->status_change = USB_PORT_STAT_POWER |
++ USB_PORT_STAT_CONNECTION |
++ (USB_PORT_STAT_C_CONNECTION<<16);
++
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++ }
++ return error;
++}
++
++static int sthcd_oh_remove_udev(struct sthcd_oh *oh,
++ u16 idVendor, u16 idProduct)
++{
++ struct sthcd_hcd *sthcd = oh->hcd;
++ struct sthcd_udev *udev;
++ struct sthcd_port *port;
++ u32 old_status;
++ unsigned long flags;
++ int error = 0;
++
++ udev = sthcd_find_udev_by_ids(sthcd, idVendor, idProduct);
++ if (!udev) {
++ /* normally reached for ignored hubs */
++ error = -ENODEV;
++ } else {
++ drv_printk(KERN_INFO, "removing device %04X.%04X\n",
++ idVendor, idProduct);
++ sthcd_udev_exit(udev);
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ port = udev_to_port(udev);
++ clear_bit(__STHCD_PORT_INUSE, &port->flags);
++ clear_bit(__STHCD_PORT_DOOMED, &port->flags);
++ port->nr_resets = 0;
++ /* notify a disconnection event */
++ old_status = port->status_change;
++ port->status_change = USB_PORT_STAT_POWER;
++ if ((old_status & USB_PORT_STAT_CONNECTION) != 0)
++ port->status_change |= (USB_PORT_STAT_C_CONNECTION<<16);
++
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++ }
++ return error;
++}
++
++
++/*
++ * Non-atomic context (synchronous call).
++ */
++static int sthcd_usb_control_msg(int fd,
++ __u8 request, __u8 requesttype,
++ __u16 value, __u16 index,
++ void *data, __u16 size,
++ int timeout)
++{
++ struct sthcd_ctrl_params_in *params_in;
++ struct starlet_ioh_sg in[6];
++ struct starlet_ioh_sg io[1];
++ int error;
++
++ params_in = starlet_ioh_kzalloc(sizeof(*params_in));
++ if (!params_in) {
++ error = -ENOMEM;
++ goto done;
++ }
++
++ params_in->req.bRequestType = requesttype;
++ params_in->req.bRequest = request;
++ params_in->req.wValue = cpu_to_le16p(&value);
++ params_in->req.wIndex = cpu_to_le16p(&index);
++ params_in->req.wLength = cpu_to_le16p(&size);
++ params_in->_unk1 = timeout; /* seconds? */
++
++ starlet_ioh_sg_init_table(in, 6);
++ starlet_ioh_sg_entry(&in[0], &params_in->req.bRequestType);
++ starlet_ioh_sg_entry(&in[1], &params_in->req.bRequest);
++ starlet_ioh_sg_entry(&in[2], &params_in->req.wValue);
++ starlet_ioh_sg_entry(&in[3], &params_in->req.wIndex);
++ starlet_ioh_sg_entry(&in[4], &params_in->req.wLength);
++ starlet_ioh_sg_entry(&in[5], &params_in->_unk1);
++
++ starlet_ioh_sg_init_table(io, 1);
++ starlet_ioh_sg_set_buf(&io[0], data, size);
++
++ error = starlet_ioh_ioctlv(fd, STHCD_IOCTLV_CONTROLREQ,
++ 6, in, 1, io);
++
++ starlet_ioh_kfree(params_in);
++
++ if (error > 0) {
++ /* adjust size for successful control xfers */
++ error -= sizeof(struct usb_ctrlrequest);
++ if (error < 0)
++ error = -EINVAL;
++ }
++
++done:
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++}
++
++
++static int sthcd_oh_check_hub(struct sthcd_oh *oh, u16 idVendor, u16 idProduct)
++{
++ char pathname[32];
++ struct usb_device_descriptor *descriptor;
++ int fd;
++ int i;
++ int retval;
++
++ descriptor = starlet_ioh_kzalloc(USB_DT_DEVICE_SIZE);
++ if (!descriptor) {
++ retval = -ENOMEM;
++ goto done;
++ }
++
++ snprintf(pathname, sizeof(pathname), "/dev/usb/oh%u/%04x/%04x",
++ oh->index, idVendor, idProduct);
++ retval = starlet_open(pathname, 0);
++ if (retval < 0) {
++ drv_printk(KERN_ERR, "open %s failed\n", pathname);
++ starlet_ioh_kfree(descriptor);
++ goto done;
++ }
++ fd = retval;
++
++ for (i = 0; i < 3; i++) {
++ retval = sthcd_usb_control_msg(fd, USB_REQ_GET_DESCRIPTOR,
++ USB_DIR_IN,
++ USB_DT_DEVICE << 8, 0,
++ descriptor, USB_DT_DEVICE_SIZE,
++ 0);
++ if (retval != -7005)
++ break;
++ DBG("%s: attempt %d, retval=%d (%x)\n", __func__,
++ i, retval, retval);
++ }
++
++ starlet_close(fd);
++
++ if (retval >= USB_DT_DEVICE_SIZE) {
++ /* tell if a hub was found */
++ retval = (descriptor->bDeviceClass == USB_CLASS_HUB) ? 1 : 0;
++ } else {
++ if (retval >= 0)
++ retval = -EINVAL; /* short descriptor */
++ }
++
++ starlet_ioh_kfree(descriptor);
++
++done:
++ if (retval < 0)
++ DBG("%s: retval=%d (%x)\n", __func__, retval, retval);
++ return retval;
++}
++
++struct sthcd_getdevicelist_params_in {
++ u8 devid_count;
++ u8 _type;
++};
++struct sthcd_getdevicelist_params_io {
++ u8 devid_count;
++ struct sthcd_devid devids[0];
++};
++
++static int sthcd_get_device_list(struct sthcd_hcd *sthcd, int fd,
++ struct sthcd_devid *devids, size_t nr_devids)
++{
++ struct starlet_ioh_sg in[2], io[2];
++ struct sthcd_getdevicelist_params_in *params_in;
++ struct sthcd_getdevicelist_params_io *params_io;
++ size_t size = nr_devids * sizeof(struct sthcd_devid);
++ int error;
++
++ if (!nr_devids)
++ return -EINVAL;
++
++ params_in = starlet_ioh_kzalloc(sizeof(*params_in));
++ if (!params_in)
++ return -ENOMEM;
++
++ params_io = starlet_ioh_kzalloc(sizeof(*params_io) + size);
++ if (!params_io) {
++ starlet_ioh_kfree(params_in);
++ return -ENOMEM;
++ }
++
++ params_in->devid_count = nr_devids;
++ params_in->_type = 0;
++
++ starlet_ioh_sg_init_table(in, 2);
++ starlet_ioh_sg_entry(&in[0], &params_in->devid_count);
++ starlet_ioh_sg_entry(&in[1], &params_in->_type);
++
++ starlet_ioh_sg_init_table(io, 2);
++ starlet_ioh_sg_entry(&io[0], &params_io->devid_count);
++ starlet_ioh_sg_set_buf(&io[1], &params_io->devids, size);
++
++ error = starlet_ioh_ioctlv(fd, STHCD_IOCTLV_GETDEVICELIST,
++ 2, in, 2, io);
++
++ if (error < 0) {
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ } else {
++ memcpy(devids, params_io->devids, size);
++ error = params_io->devid_count;
++ }
++
++ starlet_ioh_kfree(params_in);
++ starlet_ioh_kfree(params_io);
++
++ return error;
++}
++
++static int sthcd_devid_match(struct sthcd_devid *id1, struct sthcd_devid *id2)
++{
++ return id1->idVendor == id2->idVendor &&
++ id1->idProduct == id2->idProduct;
++}
++
++static int sthcd_devid_find(struct sthcd_devid *haystack, size_t count,
++ struct sthcd_devid *needle)
++{
++ unsigned int i;
++
++ for (i = 0; i < count; i++) {
++ if (sthcd_devid_match(&haystack[i], needle))
++ return 1;
++ }
++ return 0;
++}
++
++static int sthcd_oh_rescan(struct sthcd_oh *oh)
++{
++ static unsigned int poll_cycles;
++ struct usb_hcd *hcd = sthcd_to_hcd(oh->hcd);
++ struct sthcd_devid *p;
++ int nr_new_devids, i;
++ int changes;
++ int error;
++
++ error = sthcd_get_device_list(oh->hcd, oh->fd, oh->new_devids,
++ oh->max_devids);
++ if (error < 0)
++ return error;
++
++ nr_new_devids = error;
++ changes = 0;
++
++ for (i = 0; i < oh->nr_devids; i++) {
++ p = &oh->devids[i];
++ if (!sthcd_devid_find(oh->new_devids, nr_new_devids, p)) {
++ /* removal */
++ error = sthcd_oh_remove_udev(oh, p->idVendor,
++ p->idProduct);
++ if (!error)
++ changes++;
++ }
++ }
++
++ for (i = 0; i < nr_new_devids; i++) {
++ p = &oh->new_devids[i];
++ if (!sthcd_devid_find(oh->devids, oh->nr_devids, p)) {
++ /* insertion */
++ error = sthcd_oh_check_hub(oh, p->idVendor,
++ p->idProduct);
++ if (error == 0) {
++ /* not a hub, register the usb device */
++ error = sthcd_oh_insert_udev(oh, p->idVendor,
++ p->idProduct);
++ if (!error)
++ changes++;
++ } else {
++ drv_printk(KERN_INFO,
++ "ignoring hub %04X.%04X\n",
++ p->idVendor, p->idProduct);
++ }
++ }
++ }
++
++ memcpy(oh->devids, oh->new_devids, nr_new_devids * sizeof(*p));
++ oh->nr_devids = nr_new_devids;
++
++ /*
++ * FIXME
++ * We ask here the USB layer to explicitly poll for root hub changes
++ * until we get at least two complete rescan cycles without changes.
++ *
++ * Otherwise, for unknown reasons, we end up missing the detection of
++ * some devices, even if the insertion/removal of these devices is
++ * properly signaled in port->status_change.
++ */
++ if (changes) {
++#if 1
++ if (!poll_cycles) {
++ hcd->poll_rh = 1;
++ usb_hcd_poll_rh_status(hcd);
++ }
++ poll_cycles = 2;
++ } else {
++ if (!poll_cycles)
++ hcd->poll_rh = 0;
++ else
++ poll_cycles--;
++#else
++ usb_hcd_poll_rh_status(hcd);
++#endif
++ }
++
++ return 0;
++}
++
++static int sthcd_oh_init(struct sthcd_oh *oh, unsigned int index,
++ struct sthcd_hcd *sthcd, size_t max_devids)
++{
++ char pathname[16];
++ int error;
++
++ if (index != 0 && index != 1)
++ return -EINVAL;
++
++ snprintf(pathname, sizeof(pathname), "/dev/usb/oh%u", index);
++ error = starlet_open(pathname, 0);
++ if (error < 0)
++ return error;
++
++ oh->fd = error;
++ oh->devids = kzalloc(2 * max_devids * sizeof(struct sthcd_devid),
++ GFP_KERNEL);
++ if (!oh->devids) {
++ starlet_close(oh->fd);
++ return -ENOMEM;
++ }
++
++ oh->new_devids = oh->devids + max_devids;
++
++ oh->max_devids = max_devids;
++ oh->nr_devids = 0;
++
++ oh->index = index;
++ oh->hcd = sthcd;
++
++ return 0;
++}
++
++static void sthcd_oh_exit(struct sthcd_oh *oh)
++{
++ starlet_close(oh->fd);
++ oh->fd = -1;
++ kfree(oh->devids);
++ oh->devids = NULL;
++}
++
++static int sthcd_rescan_thread(void *arg)
++{
++ struct sthcd_hcd *sthcd = arg;
++ struct sthcd_oh *oh;
++
++ /*
++ * REVISIT
++ * We may need to rescan oh1 if bluetooth dongle disconnects.
++ */
++
++ /* oh1 has non-removable devices only, so just scan it once */
++ sthcd_oh_rescan(&sthcd->oh[1]);
++
++ oh = &sthcd->oh[0];
++
++ while (!kthread_should_stop()) {
++ sthcd_oh_rescan(oh);
++
++ /* re-check again after the configured interval */
++ sleep_on_timeout(&sthcd->rescan_waitq,
++ STHCD_RESCAN_INTERVAL*HZ);
++ }
++ return 0;
++}
++
++
++/*
++ *
++ *
++ */
++
++static int sthcd_init(struct usb_hcd *hcd)
++{
++ return 0;
++}
++
++static int sthcd_start(struct usb_hcd *hcd)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ int error;
++
++ /*
++ * This is to prevent a spurious error from the kernel usb stack
++ * as we do not make use of interrupts.
++ */
++ set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
++
++ hcd->uses_new_polling = 1;
++
++ /* oh0 is the external bus */
++ error = sthcd_oh_init(&sthcd->oh[0], 0, sthcd, STHCD_MAX_DEVIDS);
++ if (error < 0) {
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ return error;
++ }
++
++ /* oh1 is the internal bus, used only by the bluetooth dongle */
++ error = sthcd_oh_init(&sthcd->oh[1], 1, sthcd, 1);
++ if (error < 0) {
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++ sthcd_oh_exit(&sthcd->oh[0]);
++ return error;
++ }
++
++ hcd->state = HC_STATE_RUNNING;
++
++ /* device insertion/removal is managed by the rescan thread */
++ sthcd->rescan_task = kthread_run(sthcd_rescan_thread, sthcd, "ksthcd");
++ if (IS_ERR(sthcd->rescan_task))
++ drv_printk(KERN_ERR, "failed to start rescan thread\n");
++
++ return 0;
++}
++
++static void sthcd_stop(struct usb_hcd *hcd)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++
++ if (!IS_ERR(sthcd->rescan_task)) {
++ kthread_stop(sthcd->rescan_task);
++ sthcd->rescan_task = ERR_PTR(-EINVAL);
++ }
++
++ sthcd_oh_exit(&sthcd->oh[0]);
++ sthcd_oh_exit(&sthcd->oh[1]);
++
++ hcd->state &= ~HC_STATE_RUNNING;
++}
++
++static int sthcd_get_frame_number(struct usb_hcd *hcd)
++{
++ DBG("%s: CALLED\n", __func__);
++ return 0;
++}
++
++
++static int sthcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
++ gfp_t mem_flags)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ struct usb_host_endpoint *ep;
++ struct sthcd_pep *pep;
++ unsigned long flags;
++ int error;
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ /* REVISIT, paranoid */
++ if (urb->status != -EINPROGRESS) {
++ DBG("%s: status != -EINPROGRESS\n", __func__);
++ error = urb->status;
++ goto done;
++ }
++
++ error = usb_hcd_link_urb_to_ep(hcd, urb);
++ if (error)
++ goto done;
++
++ ep = urb->ep;
++
++ /* allocate a pep for each endpoint on first use */
++ if (!ep->hcpriv) {
++ pep = sthcd_pep_alloc(sthcd, ep);
++ if (!pep) {
++ error = -ENOMEM;
++ goto err_linked;
++ }
++ ep->hcpriv = pep;
++ } else {
++ pep = ep->hcpriv;
++ }
++
++ error = sthcd_pep_send_urb(pep, urb);
++ if (!error)
++ goto done;
++
++err_linked:
++ usb_hcd_unlink_urb_from_ep(hcd, urb);
++done:
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++ return error;
++}
++
++static int sthcd_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ struct usb_host_endpoint *ep;
++ struct sthcd_pep *pep;
++ unsigned long flags;
++ int error;
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++
++ error = usb_hcd_check_unlink_urb(hcd, urb, status);
++ if (error)
++ goto done;
++
++ ep = urb->ep;
++ pep = ep_to_pep(ep);
++ if (pep && pep->urb == urb) {
++ /*
++ * There is an urb in flight.
++ *
++ * We deattach the urb from the pep and leave the pep to the
++ * callback function, which will free it upon completion,
++ * without further action.
++ */
++ sthcd_pep_takeout_urb(pep);
++ ep->hcpriv = NULL;
++ }
++
++ usb_hcd_unlink_urb_from_ep(hcd, urb);
++ sthcd_giveback_urb(sthcd, urb, status);
++
++done:
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++
++#if 0
++ if (error < 0)
++ DBG("%s: error=%d (%x)\n", __func__, error, error);
++#endif
++ return error;
++}
++
++static void sthcd_endpoint_disable(struct usb_hcd *hcd,
++ struct usb_host_endpoint *ep)
++{
++ struct sthcd_hcd *sthcd = hcd_to_sthcd(hcd);
++ struct sthcd_pep *pep;
++ unsigned long flags;
++
++ spin_lock_irqsave(&sthcd->lock, flags);
++ pep = ep->hcpriv;
++
++ /* do nothing if the pep was already freed */
++ if (!pep)
++ goto done;
++
++ if (pep->urb) {
++ /*
++ * There is an urb in flight.
++ *
++ * Disable the private endpoint and take the urb out of it.
++ * The callback function will take care of freeing the pep
++ * when the starlet call completes.
++ */
++ set_bit(__STHCD_PEP_DISABLED, &pep->flags);
++ sthcd_pep_takeout_urb(pep);
++ } else {
++ /* the pep can be freed immediately when no urb is in flight */
++ sthcd_pep_free(pep);
++ }
++ ep->hcpriv = NULL;
++
++done:
++ spin_unlock_irqrestore(&sthcd->lock, flags);
++}
++
++
++static const struct hc_driver starlet_hc_driver = {
++ .description = DRV_MODULE_NAME,
++ .product_desc = "Nintendo Wii USB Host Controller",
++ .hcd_priv_size = sizeof(struct sthcd_hcd),
++
++ .irq = NULL,
++ .flags = HCD_USB11,
++
++ /* REVISIT, power management calls not yet supported */
++
++ .reset = sthcd_init,
++ .start = sthcd_start,
++ .stop = sthcd_stop,
++
++ .get_frame_number = sthcd_get_frame_number,
++
++ .urb_enqueue = sthcd_urb_enqueue,
++ .urb_dequeue = sthcd_urb_dequeue,
++ .endpoint_disable = sthcd_endpoint_disable,
++
++ .hub_status_data = sthcd_hub_status_data,
++ .hub_control = sthcd_hub_control,
++};
++
++static int __devinit sthcd_driver_probe(struct device *dev)
++{
++ struct sthcd_hcd *sthcd;
++ struct usb_hcd *hcd;
++ int error = -ENOMEM;
++
++ /*
++ * We can't use normal dma as starlet requires MEM2 buffers
++ * to work properly in all cases.
++ */
++ dev->dma_mask = NULL;
++
++ hcd = usb_create_hcd(&starlet_hc_driver, dev, DRV_MODULE_NAME);
++ if (!hcd)
++ goto err;
++
++ sthcd = hcd_to_sthcd(hcd);
++ spin_lock_init(&sthcd->lock);
++
++ sthcd->nr_ports = STHCD_MAX_PORTS;
++ sthcd->ports = kzalloc(sthcd->nr_ports * sizeof(struct sthcd_port),
++ GFP_KERNEL);
++ if (!sthcd->ports)
++ goto err_alloc_ports;
++
++ INIT_LIST_HEAD(&sthcd->device_list);
++ init_waitqueue_head(&sthcd->rescan_waitq);
++
++ error = usb_add_hcd(hcd, 0, 0);
++ if (error) {
++ drv_printk(KERN_INFO, "%s: error %d adding hcd\n",
++ __func__, error);
++ goto err_add;
++ }
++
++ return 0;
++
++err_add:
++ kfree(sthcd->ports);
++err_alloc_ports:
++ usb_put_hcd(hcd);
++err:
++ return error;
++}
++
++static int __devexit sthcd_driver_remove(struct device *dev)
++{
++ struct usb_hcd *hcd = dev_get_drvdata(dev);
++ usb_remove_hcd(hcd);
++ usb_put_hcd(hcd);
++ return 0;
++}
++
++
++/*
++ * Open Firmware platform device routines
++ *
++ */
++
++static int __init sthcd_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ return sthcd_driver_probe(&odev->dev);
++}
++
++static int __exit sthcd_of_remove(struct of_device *odev)
++{
++ return sthcd_driver_remove(&odev->dev);
++}
++
++static struct of_device_id sthcd_of_match[] = {
++ { .compatible = "nintendo,starlet-hcd" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, sthcd_of_match);
++
++static struct of_platform_driver sthcd_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = sthcd_of_match,
++ .probe = sthcd_of_probe,
++ .remove = sthcd_of_remove,
++};
++
++
++/*
++ * Linux module framework
++ *
++ */
++
++static int __init sthcd_module_init(void)
++{
++ if (usb_disabled())
++ return -ENODEV;
++
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ sthcd_driver_version);
++
++ return of_register_platform_driver(&sthcd_of_driver);
++}
++
++static void __exit sthcd_module_exit(void)
++{
++ of_unregister_platform_driver(&sthcd_of_driver);
++}
++
++module_init(sthcd_module_init);
++module_exit(sthcd_module_exit);
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index 3f3ce13..3e86331 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -1704,6 +1704,21 @@ config CARMINE_DRAM_CUSTOM
+ Use custom board timings.
+ endchoice
+
++config FB_GAMECUBE
++ bool "Nintendo GameCube/Wii frame buffer"
++ depends on FB && GAMECUBE_COMMON
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ This is the frame buffer device driver for the Nintendo GameCube.
++
++config FB_GAMECUBE_GX
++ bool "Nintendo GameCube hardware accelerated graphics support"
++ depends on FB_GAMECUBE && GAMECUBE && BROKEN
++ help
++ Say Y here to support the 3D hardware found in the Nintendo GameCube.
++
+ config FB_AU1100
+ bool "Au1100 LCD Driver"
+ depends on (FB = y) && MIPS && SOC_AU1100
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index e39e33e..45c7d0c 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -123,6 +123,8 @@ obj-$(CONFIG_FB_OMAP) += omap/
+ obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o
+ obj-$(CONFIG_FB_CARMINE) += carminefb.o
+ obj-$(CONFIG_FB_MB862XX) += mb862xx/
++obj-$(CONFIG_FB_GAMECUBE) += gcnfb.o
++obj-$(CONFIG_FB_GAMECUBE_GX) += gcngx.o
+
+ # Platform or fallback drivers go here
+ obj-$(CONFIG_FB_UVESA) += uvesafb.o
+diff --git a/drivers/video/gcnfb.c b/drivers/video/gcnfb.c
+new file mode 100644
+index 0000000..d29fa01
+--- /dev/null
++++ b/drivers/video/gcnfb.c
+@@ -0,0 +1,1087 @@
++/*
++ * drivers/video/gcn-vifb.c
++ *
++ * Nintendo GameCube/Wii Video Interface (VI) frame buffer driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004 Michael Steil <mist@c64.org>
++ * Copyright (C) 2004,2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2006,2007,2008,2009 Albert Herranz
++ *
++ * Based on vesafb (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.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.
++ *
++ */
++
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/fb.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/of_platform.h>
++#include <linux/string.h>
++#include <linux/tty.h>
++#include <linux/wait.h>
++#include <linux/io.h>
++
++#define DRV_MODULE_NAME "gcn-vifb"
++#define DRV_DESCRIPTION "Nintendo GameCube/Wii Video Interface (VI) driver"
++#define DRV_AUTHOR "Michael Steil <mist@c64.org>, " \
++ "Todd Jeffreys <todd@voidpointer.org>, " \
++ "Albert Herranz"
++
++static char vifb_driver_version[] = "1.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++/*
++ * Hardware registers.
++ */
++#define VI_DCR 0x02
++#define VI_HTR0 0x04
++#define VI_TFBL 0x1c
++#define VI_TFBR 0x20
++#define VI_BFBL 0x24
++#define VI_BFBR 0x28
++#define VI_DPV 0x2c
++
++#define VI_DI0 0x30
++#define VI_DI1 0x34
++#define VI_DI2 0x38
++#define VI_DI3 0x3C
++#define VI_DI_INT (1 << 31)
++#define VI_DI_ENB (1 << 28)
++#define VI_DI_VCT_SHIFT 16
++#define VI_DI_VCT_MASK 0x03FF0000
++#define VI_DI_HCT_SHIFT 0
++#define VI_DI_HCT_MASK 0x000003FF
++
++#define VI_VISEL 0x6e
++#define VI_VISEL_PROGRESSIVE (1 << 0)
++
++
++/*
++ * Video control data structure.
++ */
++struct vi_ctl {
++ spinlock_t lock;
++
++ void __iomem *io_base;
++ unsigned int irq;
++
++ int in_vtrace;
++ wait_queue_head_t vtrace_waitq;
++
++ int visible_page;
++ unsigned long page_address[2];
++ unsigned long flip_pending;
++
++ struct fb_info *info;
++};
++
++
++/*
++ * Video mode handling
++ */
++
++struct vi_video_mode {
++ char *name;
++ const u32 *regs;
++ int width;
++ int height;
++ int lines;
++};
++
++static const u32 vi_Mode640X480NtscYUV16[32] = {
++ 0x0F060001, 0x476901AD, 0x02EA5140, 0x00030018,
++ 0x00020019, 0x410C410C, 0x40ED40ED, 0x00435A4E,
++ 0x00000000, 0x00435A4E, 0x00000000, 0x00000000,
++ 0x110701AE, 0x10010001, 0x00010001, 0x00010001,
++ 0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
++ 0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
++ 0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
++ 0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF
++};
++
++static const u32 vi_Mode640x480NtscProgressiveYUV16[32] = {
++ 0x1e0c0005, 0x476901ad, 0x02ea5140, 0x00060030,
++ 0x00060030, 0x81d881d8, 0x81d881d8, 0x10000000,
++ 0x00000000, 0x00000000, 0x00000000, 0x037702b6,
++ 0x90010001, 0x00000000, 0x00000000, 0x00000000,
++ 0x00000000, 0x00000000, 0x28280100, 0x1ae771f0,
++ 0x0db4a574, 0x00c1188e, 0xc4c0cbe2, 0xfcecdecf,
++ 0x13130f08, 0x00080c0f, 0x00ff0000, 0x00010001,
++ 0x02800000, 0x000000ff, 0x00ff00ff, 0x00ff00ff,
++};
++
++static const u32 vi_Mode640X576Pal50YUV16[32] = {
++ 0x11F50101, 0x4B6A01B0, 0x02F85640, 0x00010023,
++ 0x00000024, 0x4D2B4D6D, 0x4D8A4D4C, 0x0066D480,
++ 0x00000000, 0x0066D980, 0x00000000, 0x00C901F3,
++ 0x913901B1, 0x90010001, 0x00010001, 0x00010001,
++ 0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
++ 0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
++ 0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
++ 0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF
++};
++
++static const u32 vi_Mode640X480Pal60YUV16[32] = {
++ 0x0F060001, 0x476901AD, 0x02EA5140, 0x00030018,
++ 0x00020019, 0x410C410C, 0x40ED40ED, 0x0066D480,
++ 0x00000000, 0x0066D980, 0x00000000, 0x00C9010F,
++ 0x910701AE, 0x90010001, 0x00010001, 0x00010001,
++ 0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
++ 0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
++ 0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
++ 0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF
++};
++
++static struct vi_video_mode vi_video_modes[] = {
++#define VI_VM_NTSC 0
++ [VI_VM_NTSC] = {
++ .name = "NTSC/PAL60 480i",
++ .regs = vi_Mode640X480NtscYUV16,
++ .width = 640,
++ .height = 480,
++ .lines = 525,
++ },
++#define VI_VM_NTSC_PROGRESSIVE (VI_VM_NTSC+1)
++ [VI_VM_NTSC_PROGRESSIVE] = {
++ .name = "NTSC 480p",
++ .regs = vi_Mode640x480NtscProgressiveYUV16,
++ .width = 640,
++ .height = 480,
++ .lines = 525,
++ },
++#define VI_VM_PAL50 (VI_VM_NTSC_PROGRESSIVE+1)
++ [VI_VM_PAL50] = {
++ .name = "PAL50 576i",
++ .regs = vi_Mode640X576Pal50YUV16,
++ .width = 640,
++ .height = 576,
++ .lines = 625,
++ },
++#define VI_VM_PAL60 (VI_VM_PAL50+1)
++ [VI_VM_PAL60] = {
++ /* this seems to be actually the same as NTSC 480i */
++ .name = "PAL60 480i",
++ .regs = vi_Mode640X480Pal60YUV16,
++ .width = 640,
++ .height = 480,
++ .lines = 525,
++ },
++};
++
++
++static struct fb_fix_screeninfo vifb_fix = {
++ .id = DRV_MODULE_NAME,
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR, /* lies, lies, lies, ... */
++ .accel = FB_ACCEL_NONE,
++};
++
++static struct fb_var_screeninfo vifb_var = {
++ .bits_per_pixel = 16,
++ .activate = FB_ACTIVATE_NOW,
++ .height = -1,
++ .width = -1,
++ .right_margin = 32,
++ .upper_margin = 16,
++ .lower_margin = 4,
++ .vsync_len = 4,
++ .vmode = FB_VMODE_INTERLACED,
++};
++
++/*
++ * setup parameters
++ */
++static struct vi_video_mode *vi_current_video_mode;
++static int ypan = 1; /* 0..nothing, 1..ypan */
++
++/* FIXME: is this really needed? */
++static u32 pseudo_palette[17];
++
++
++/* some glue to the gx side */
++static inline void gcngx_dispatch_vtrace(struct vi_ctl *ctl)
++{
++#ifdef CONFIG_FB_GAMECUBE_GX
++ gcngx_vtrace(ctl);
++#endif
++}
++
++
++/*
++ *
++ * Color space handling.
++ */
++
++/*
++ * RGB to YCbYCr conversion support bits.
++ * We are using here the ITU.BT-601 Y'CbCr standard.
++ *
++ * References:
++ * - "Colour Space Conversions" by Adrian Ford and Alan Roberts, 1998
++ * (google for coloureq.pdf)
++ *
++ */
++
++#define RGB2YUV_SHIFT 16
++#define RGB2YUV_LUMA 16
++#define RGB2YUV_CHROMA 128
++
++#define Yr ((int)(0.299 * (1<<RGB2YUV_SHIFT)))
++#define Yg ((int)(0.587 * (1<<RGB2YUV_SHIFT)))
++#define Yb ((int)(0.114 * (1<<RGB2YUV_SHIFT)))
++
++#define Ur ((int)(-0.169 * (1<<RGB2YUV_SHIFT)))
++#define Ug ((int)(-0.331 * (1<<RGB2YUV_SHIFT)))
++#define Ub ((int)(0.500 * (1<<RGB2YUV_SHIFT)))
++
++#define Vr ((int)(0.500 * (1<<RGB2YUV_SHIFT))) /* same as Ub */
++#define Vg ((int)(-0.419 * (1<<RGB2YUV_SHIFT)))
++#define Vb ((int)(-0.081 * (1<<RGB2YUV_SHIFT)))
++
++/*
++ * Converts two 16bpp rgb pixels into a dual yuy2 pixel.
++ */
++static inline uint32_t rgbrgb16toycbycr(uint16_t rgb1, uint16_t rgb2)
++{
++ register int Y1, Cb, Y2, Cr;
++ register int r1, g1, b1;
++ register int r2, g2, b2;
++ register int r, g, b;
++
++ /* fast path, thanks to bohdy */
++ if (!(rgb1 | rgb2))
++ return 0x00800080; /* black, black */
++
++ /* RGB565 */
++ r1 = ((rgb1 >> 11) & 0x1f);
++ g1 = ((rgb1 >> 5) & 0x3f);
++ b1 = ((rgb1 >> 0) & 0x1f);
++
++ /* fast (approximated) scaling to 8 bits, thanks to Masken */
++ r1 = (r1 << 3) | (r1 >> 2);
++ g1 = (g1 << 2) | (g1 >> 4);
++ b1 = (b1 << 3) | (b1 >> 2);
++
++ Y1 = clamp(((Yr * r1 + Yg * g1 + Yb * b1) >> RGB2YUV_SHIFT)
++ + RGB2YUV_LUMA, 16, 235);
++ if (rgb1 == rgb2) {
++ /* this is just another fast path */
++ Y2 = Y1;
++ r = r1;
++ g = g1;
++ b = b1;
++ } else {
++ /* same as we did for r1 before */
++ r2 = ((rgb2 >> 11) & 0x1f);
++ g2 = ((rgb2 >> 5) & 0x3f);
++ b2 = ((rgb2 >> 0) & 0x1f);
++ r2 = (r2 << 3) | (r2 >> 2);
++ g2 = (g2 << 2) | (g2 >> 4);
++ b2 = (b2 << 3) | (b2 >> 2);
++
++ Y2 = clamp(((Yr * r2 + Yg * g2 + Yb * b2) >> RGB2YUV_SHIFT)
++ + RGB2YUV_LUMA,
++ 16, 235);
++
++ r = (r1 + r2) / 2;
++ g = (g1 + g2) / 2;
++ b = (b1 + b2) / 2;
++ }
++
++ Cb = clamp(((Ur * r + Ug * g + Ub * b) >> RGB2YUV_SHIFT)
++ + RGB2YUV_CHROMA, 16, 240);
++ Cr = clamp(((Vr * r + Vg * g + Vb * b) >> RGB2YUV_SHIFT)
++ + RGB2YUV_CHROMA, 16, 240);
++
++ return (((uint8_t) Y1) << 24) | (((uint8_t) Cb) << 16) |
++ (((uint8_t) Y2) << 8) | (((uint8_t) Cr) << 0);
++}
++
++/*
++ *
++ * Video hardware support.
++ */
++
++/*
++ * Get video mode reported by hardware.
++ * 0=NTSC, 1=PAL, 2=MPAL, 3=debug
++ */
++static inline int vi_get_mode(struct vi_ctl *ctl)
++{
++ return (in_be16(ctl->io_base + VI_DCR) >> 8) & 3;
++}
++
++static inline int vi_is_mode_ntsc(struct vi_ctl *ctl)
++{
++ return vi_get_mode(ctl) == 0;
++}
++
++static inline int vi_is_mode_progressive(__u32 vmode)
++{
++ return (vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED;
++}
++
++static inline int vi_can_do_progressive(struct vi_ctl *ctl)
++{
++ return in_be16(ctl->io_base + VI_VISEL) & VI_VISEL_PROGRESSIVE;
++}
++
++static void vi_guess_mode(struct vi_ctl *ctl)
++{
++ void __iomem *io_base = ctl->io_base;
++ u16 mode;
++
++ if (vi_current_video_mode == NULL) {
++ /* auto detection */
++ if (in_be32(io_base + VI_HTR0) == 0x4B6A01B0) {
++ /* PAL50 */
++ vi_current_video_mode = vi_video_modes + VI_VM_PAL50;
++ } else {
++ /* NTSC/PAL60 */
++ mode = vi_get_mode(ctl);
++ switch (mode) {
++ case 0: /* NTSC */
++ /* check if we can support progressive */
++ vi_current_video_mode =
++ vi_video_modes +
++ (vi_can_do_progressive(ctl) ?
++ VI_VM_NTSC_PROGRESSIVE : VI_VM_NTSC);
++ break;
++ /* XXX this code is never reached */
++ case 1: /* PAL60 */
++ vi_current_video_mode =
++ vi_video_modes + VI_VM_PAL60;
++ break;
++ default: /* MPAL or DEBUG, we don't support */
++ break;
++ }
++ }
++ }
++
++ /* if we get here something wrong happened */
++ if (vi_current_video_mode == NULL) {
++ drv_printk(KERN_DEBUG, "failed to guess video mode,"
++ "using NTSC\n");
++ vi_current_video_mode = vi_video_modes + VI_VM_NTSC;
++ }
++}
++
++/*
++ * Set the address from where the video encoder will display data on screen.
++ */
++void vi_set_framebuffer(struct vi_ctl *ctl, u32 addr)
++{
++ struct fb_info *info = ctl->info;
++ void __iomem *io_base = ctl->io_base;
++
++ /* set top field */
++ out_be32(io_base + VI_TFBL, 0x10000000 | (addr >> 5));
++
++ /* set bottom field */
++ if (!vi_is_mode_progressive(info->var.vmode))
++ addr += info->fix.line_length;
++ out_be32(io_base + VI_BFBL, 0x10000000 | (addr >> 5));
++}
++
++/*
++ * Swap the visible and back pages.
++ */
++static inline void vi_flip_page(struct vi_ctl *ctl)
++{
++ ctl->visible_page ^= 1;
++ vi_set_framebuffer(ctl, ctl->page_address[ctl->visible_page]);
++
++ ctl->flip_pending = 0;
++}
++
++static void vi_enable_interrupts(struct vi_ctl *ctl, int enable)
++{
++ void __iomem *io_base = ctl->io_base;
++ u16 vtrap, htrap;
++
++ if (enable) {
++ /*
++ * The vertical retrace happens while the beam moves from
++ * the last drawn dot in the last line to the first dot in
++ * the first line.
++ */
++
++ /* XXX should we incorporate this in the video mode struct ? */
++ vtrap = vi_current_video_mode->lines;
++ htrap = vi_is_mode_ntsc(ctl) ? 430 : 433;
++
++ /* non-progressive needs interlacing */
++ if (!(vi_is_mode_progressive(ctl->info->var.vmode)
++ && vi_can_do_progressive(ctl))) {
++ vtrap /= 2;
++ }
++
++ /* first dot, first line */
++ out_be32(io_base + VI_DI0,
++ VI_DI_INT | VI_DI_ENB |
++ (1 << VI_DI_VCT_SHIFT) | (1 << VI_DI_HCT_SHIFT));
++ /* last dot, last line */
++ out_be32(io_base + VI_DI1,
++ VI_DI_INT | VI_DI_ENB |
++ (vtrap << VI_DI_VCT_SHIFT) | (htrap << VI_DI_HCT_SHIFT));
++ } else {
++ out_be32(io_base + VI_DI0, 0);
++ out_be32(io_base + VI_DI1, 0);
++ }
++ /* these two are currently not used */
++ out_be32(io_base + VI_DI2, 0);
++ out_be32(io_base + VI_DI3, 0);
++}
++
++static void vi_dispatch_vtrace(struct vi_ctl *ctl)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ctl->lock, flags);
++ if (ctl->flip_pending)
++ vi_flip_page(ctl);
++ spin_unlock_irqrestore(&ctl->lock, flags);
++
++ wake_up_interruptible(&ctl->vtrace_waitq);
++}
++
++static irqreturn_t vi_irq_handler(int irq, void *dev)
++{
++ struct fb_info *info = dev_get_drvdata((struct device *)dev);
++ struct vi_ctl *ctl = info->par;
++ void __iomem *io_base = ctl->io_base;
++ u32 val;
++
++ /* DI0 and DI1 are used to account for the vertical retrace */
++ val = in_be32(io_base + VI_DI0);
++ if (val & VI_DI_INT) {
++ ctl->in_vtrace = 0;
++ gcngx_dispatch_vtrace(ctl); /* backwards compatibility */
++
++ out_be32(io_base + VI_DI0, val & ~VI_DI_INT);
++ return IRQ_HANDLED;
++ }
++ val = in_be32(io_base + VI_DI1);
++ if (val & VI_DI_INT) {
++ ctl->in_vtrace = 1;
++ vi_dispatch_vtrace(ctl);
++ gcngx_dispatch_vtrace(ctl); /* backwards compatibility */
++
++ out_be32(io_base + VI_DI1, val & ~VI_DI_INT);
++ return IRQ_HANDLED;
++ }
++
++ /* currently unused, just in case */
++ val = in_be32(io_base + VI_DI2);
++ if (val & VI_DI_INT) {
++ out_be32(io_base + VI_DI2, val & ~VI_DI_INT);
++ return IRQ_HANDLED;
++ }
++ val = in_be32(io_base + VI_DI3);
++ if (val & VI_DI_INT) {
++ out_be32(io_base + VI_DI3, val & ~VI_DI_INT);
++ return IRQ_HANDLED;
++ }
++
++ return IRQ_NONE;
++}
++
++/*
++ * Linux framebuffer support routines.
++ *
++ */
++
++/*
++ * This is just a quick, dirty and cheap way of getting right colors on the
++ * linux framebuffer console.
++ */
++unsigned int vifb_writel(unsigned int rgbrgb, void *address)
++{
++ uint16_t *rgb = (uint16_t *)&rgbrgb;
++ return fb_writel_real(rgbrgb16toycbycr(rgb[0], rgb[1]), address);
++}
++
++/*
++ * Restore the video hardware to sane defaults.
++ */
++int vifb_restorefb(struct fb_info *info)
++{
++ struct vi_ctl *ctl = info->par;
++ void __iomem *io_base = ctl->io_base;
++ int i;
++ unsigned long flags;
++
++ /* set page 0 as the visible page and cancel pending flips */
++ spin_lock_irqsave(&ctl->lock, flags);
++ ctl->visible_page = 1;
++ vi_flip_page(ctl);
++ spin_unlock_irqrestore(&ctl->lock, flags);
++
++ /* initialize video registers */
++ for (i = 0; i < 7; i++) {
++ out_be32(io_base + i * sizeof(__u32),
++ vi_current_video_mode->regs[i]);
++ }
++ out_be32(io_base + VI_TFBR,
++ vi_current_video_mode->regs[VI_TFBR / sizeof(__u32)]);
++ out_be32(io_base + VI_BFBR,
++ vi_current_video_mode->regs[VI_BFBR / sizeof(__u32)]);
++ out_be32(io_base + VI_DPV,
++ vi_current_video_mode->regs[VI_DPV / sizeof(__u32)]);
++ for (i = 16; i < 32; i++) {
++ out_be32(io_base + i * sizeof(__u32),
++ vi_current_video_mode->regs[i]);
++ }
++
++ /* enable the video retrace handling */
++ vi_enable_interrupts(ctl, 1);
++
++ return 0;
++}
++EXPORT_SYMBOL(vifb_restorefb);
++
++/*
++ * FIXME: do we really need this?
++ */
++static int vifb_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned transp, struct fb_info *info)
++{
++ /*
++ * Set a single color register. The values supplied are
++ * already rounded down to the hardware's capabilities
++ * (according to the entries in the `var' structure). Return
++ * != 0 for invalid regno.
++ */
++
++ if (regno >= info->cmap.len)
++ return 1;
++
++ switch (info->var.bits_per_pixel) {
++ case 16:
++ if (info->var.red.offset == 10) {
++ /* 1:5:5:5, not used currently */
++ ((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 8:
++ case 15:
++ case 24:
++ case 32:
++ break;
++ }
++ return 0;
++}
++
++/*
++ * Pan the display by altering the framebuffer address in hardware.
++ */
++static int vifb_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ struct vi_ctl *ctl = info->par;
++ unsigned long flags;
++ int offset;
++
++ offset = (var->yoffset * info->fix.line_length) +
++ var->xoffset * (var->bits_per_pixel / 8);
++ vi_set_framebuffer(ctl, info->fix.smem_start + offset);
++
++ spin_lock_irqsave(&ctl->lock, flags);
++ ctl->visible_page = (offset) ? 1 : 0;
++ spin_unlock_irqrestore(&ctl->lock, flags);
++
++ return 0;
++}
++
++static int vifb_ioctl(struct fb_info *info,
++ unsigned int cmd, unsigned long arg)
++{
++ struct vi_ctl *ctl = info->par;
++ void __user *argp;
++ unsigned long flags;
++ int page;
++
++ switch (cmd) {
++ case FBIOWAITRETRACE:
++ interruptible_sleep_on(&ctl->vtrace_waitq);
++ return signal_pending(current) ? -EINTR : 0;
++ case FBIOFLIPHACK:
++ /*
++ * If arg == NULL then
++ * Try to flip the video page as soon as possible.
++ * Returns the current visible video page number.
++ */
++ if (!arg) {
++ spin_lock_irqsave(&ctl->lock, flags);
++ if (ctl->in_vtrace)
++ vi_flip_page(ctl);
++ else
++ ctl->flip_pending = 1;
++ spin_unlock_irqrestore(&ctl->lock, flags);
++ return ctl->visible_page;
++ }
++
++ /*
++ * If arg != NULL then
++ * Wait until the video page number pointed by arg
++ * is not visible.
++ * Returns the current visible video page number.
++ */
++ argp = (void __user *)arg;
++ if (copy_from_user(&page, argp, sizeof(int)))
++ return -EFAULT;
++
++ if (page != 0 && page != 1)
++ return -EINVAL;
++
++ spin_lock_irqsave(&ctl->lock, flags);
++ ctl->flip_pending = 0;
++ if (ctl->visible_page == page) {
++ if (ctl->in_vtrace) {
++ vi_flip_page(ctl);
++ } else {
++ ctl->flip_pending = 1;
++ spin_unlock_irqrestore(&ctl->lock, flags);
++ interruptible_sleep_on(&ctl->vtrace_waitq);
++ return signal_pending(current) ?
++ -EINTR : ctl->visible_page;
++ }
++ }
++ spin_unlock_irqrestore(&ctl->lock, flags);
++ return ctl->visible_page;
++ }
++#ifdef CONFIG_FB_GAMECUBE_GX
++ /* see if the GX module will handle it */
++ return gcngx_ioctl(info, cmd, arg);
++#else
++ return -EINVAL;
++#endif
++}
++
++/*
++ * Set the video mode according to info->var.
++ */
++static int vifb_set_par(struct fb_info *info)
++{
++ /* just load sane default here */
++ vifb_restorefb(info);
++ return 0;
++}
++
++/*
++ * Check var and eventually tweak it to something supported.
++ * Do not modify par here.
++ */
++static int vifb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ struct vi_ctl *ctl = info->par;
++
++ /* check bpp */
++ if (var->bits_per_pixel != 16 || /* check bpp */
++ var->xres_virtual != vi_current_video_mode->width ||
++ var->xres != vi_current_video_mode->width ||
++ /* XXX isobel, do not break old sdl */
++ var->yres_virtual > 2 * vi_current_video_mode->height ||
++ var->yres > vi_current_video_mode->height ||
++ (vi_is_mode_progressive(var->vmode) &&
++ !vi_can_do_progressive(ctl))) { /* trying to set progressive? */
++ return -EINVAL;
++ }
++ return 0;
++}
++
++static int vifb_mmap(struct fb_info *info, struct vm_area_struct *vma)
++{
++ unsigned long off;
++ unsigned long start;
++ u32 len;
++
++ off = vma->vm_pgoff << PAGE_SHIFT;
++
++ /* frame buffer memory */
++ start = info->fix.smem_start;
++ len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len);
++ start &= PAGE_MASK;
++ if ((vma->vm_end - vma->vm_start + off) > len)
++ return -EINVAL;
++ off += start;
++ vma->vm_pgoff = off >> PAGE_SHIFT;
++
++ /* this is an IO map, tell maydump to skip this VMA */
++ vma->vm_flags |= VM_IO | VM_RESERVED;
++
++ /* we share RAM between the cpu and the video hardware */
++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
++
++ if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
++ vma->vm_end - vma->vm_start,
++ vma->vm_page_prot))
++ return -EAGAIN;
++ return 0;
++}
++
++
++struct fb_ops vifb_ops = {
++ .owner = THIS_MODULE,
++ .fb_setcolreg = vifb_setcolreg,
++ .fb_pan_display = vifb_pan_display,
++ .fb_ioctl = vifb_ioctl,
++ .fb_set_par = vifb_set_par,
++ .fb_check_var = vifb_check_var,
++ .fb_mmap = vifb_mmap,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++};
++
++/*
++ * Driver model helper routines.
++ *
++ */
++
++static int vifb_do_probe(struct device *dev,
++ struct resource *mem, unsigned int irq,
++ unsigned long xfb_start, unsigned long xfb_size)
++{
++ struct fb_info *info;
++ struct vi_ctl *ctl;
++
++ int video_cmap_len;
++ int err = -EINVAL;
++
++ info = framebuffer_alloc(sizeof(struct vi_ctl), dev);
++ if (!info)
++ goto err_framebuffer_alloc;
++
++ info->fbops = &vifb_ops;
++ info->var = vifb_var;
++ info->fix = vifb_fix;
++ ctl = info->par;
++ ctl->info = info;
++
++ /* first thing needed */
++ ctl->io_base = ioremap(mem->start, mem->end - mem->start + 1);
++ ctl->irq = irq;
++
++ vi_guess_mode(ctl);
++
++ info->var.xres = vi_current_video_mode->width;
++ info->var.yres = vi_current_video_mode->height;
++
++ /* enable non-interlaced if it supports progressive */
++ if (vi_can_do_progressive(ctl))
++ info->var.vmode = FB_VMODE_NONINTERLACED;
++
++ /* horizontal line in bytes */
++ info->fix.line_length = info->var.xres * (info->var.bits_per_pixel / 8);
++
++ /*
++ * Location and size of the external framebuffer.
++ */
++ info->fix.smem_start = xfb_start;
++ info->fix.smem_len = xfb_size;
++
++ if (!request_mem_region(info->fix.smem_start, info->fix.smem_len,
++ DRV_MODULE_NAME)) {
++ drv_printk(KERN_WARNING,
++ "failed to request video memory at %p\n",
++ (void *)info->fix.smem_start);
++ }
++
++ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
++ if (!info->screen_base) {
++ drv_printk(KERN_ERR,
++ "failed to ioremap video memory at %p (%dk)\n",
++ (void *)info->fix.smem_start,
++ info->fix.smem_len / 1024);
++ err = -EIO;
++ goto err_ioremap;
++ }
++
++ spin_lock_init(&ctl->lock);
++ init_waitqueue_head(&ctl->vtrace_waitq);
++
++ ctl->visible_page = 0;
++ ctl->page_address[0] = info->fix.smem_start;
++ ctl->page_address[1] =
++ info->fix.smem_start + info->var.yres * info->fix.line_length;
++
++ ctl->flip_pending = 0;
++
++ drv_printk(KERN_INFO,
++ "framebuffer at 0x%p, mapped to 0x%p, size %dk\n",
++ (void *)info->fix.smem_start, info->screen_base,
++ info->fix.smem_len / 1024);
++ drv_printk(KERN_INFO,
++ "mode is %dx%dx%d, linelength=%d, pages=%d\n",
++ info->var.xres, info->var.yres,
++ info->var.bits_per_pixel,
++ info->fix.line_length,
++ info->fix.smem_len / (info->fix.line_length*info->var.yres));
++
++ info->var.xres_virtual = info->var.xres;
++ info->var.yres_virtual = info->fix.smem_len / info->fix.line_length;
++
++ if (ypan && info->var.yres_virtual > info->var.yres) {
++ drv_printk(KERN_INFO, "scrolling: pan, yres_virtual=%d\n",
++ info->var.yres_virtual);
++ } else {
++ drv_printk(KERN_INFO, "scrolling: redraw, yres_virtual=%d\n",
++ info->var.yres_virtual);
++ info->var.yres_virtual = info->var.yres;
++ ypan = 0;
++ }
++
++ info->fix.ypanstep = ypan ? 1 : 0;
++ info->fix.ywrapstep = 0;
++ if (!ypan)
++ info->fbops->fb_pan_display = NULL;
++
++ /* use some dummy values for timing to make fbset happy */
++ info->var.pixclock = 10000000 / info->var.xres * 1000 / info->var.yres;
++ info->var.left_margin = (info->var.xres / 8) & 0xf8;
++ info->var.hsync_len = (info->var.xres / 8) & 0xf8;
++
++ /* we support ony 16 bits per pixel */
++ info->var.red.offset = 11;
++ info->var.red.length = 5;
++ info->var.green.offset = 5;
++ info->var.green.length = 6;
++ info->var.blue.offset = 0;
++ info->var.blue.length = 5;
++ info->var.transp.offset = 0;
++ info->var.transp.length = 0;
++ video_cmap_len = 16;
++
++ info->pseudo_palette = pseudo_palette;
++ if (fb_alloc_cmap(&info->cmap, video_cmap_len, 0)) {
++ err = -ENOMEM;
++ goto err_alloc_cmap;
++ }
++
++ info->flags = FBINFO_FLAG_DEFAULT | (ypan) ? FBINFO_HWACCEL_YPAN : 0;
++
++ dev_set_drvdata(dev, info);
++
++ vi_enable_interrupts(ctl, 0);
++
++ err = request_irq(ctl->irq, vi_irq_handler, 0, DRV_MODULE_NAME, dev);
++ if (err) {
++ drv_printk(KERN_ERR, "unable to register IRQ %u\n", ctl->irq);
++ goto err_request_irq;
++ }
++
++ /* now register us */
++ if (register_framebuffer(info) < 0) {
++ err = -EINVAL;
++ goto err_register_framebuffer;
++ }
++
++ /* setup the framebuffer address */
++ vifb_restorefb(info);
++
++#ifdef CONFIG_FB_GAMECUBE_GX
++ err = gcngx_init(info);
++ if (err)
++ goto err_gcngx_init;
++#endif
++
++ drv_printk(KERN_INFO, "fb%d: %s frame buffer device\n",
++ info->node, info->fix.id);
++
++ return 0;
++
++#ifdef CONFIG_FB_GAMECUBE_GX
++err_gcngx_init:
++ unregister_framebuffer(info);
++#endif
++err_register_framebuffer:
++ free_irq(ctl->irq, 0);
++err_request_irq:
++ fb_dealloc_cmap(&info->cmap);
++err_alloc_cmap:
++ iounmap(info->screen_base);
++err_ioremap:
++ release_mem_region(info->fix.smem_start, info->fix.smem_len);
++
++ dev_set_drvdata(dev, NULL);
++ iounmap(ctl->io_base);
++ framebuffer_release(info);
++err_framebuffer_alloc:
++ return err;
++}
++
++static int vifb_do_remove(struct device *dev)
++{
++ struct fb_info *info = dev_get_drvdata(dev);
++ struct vi_ctl *ctl = info->par;
++
++ if (!info)
++ return -ENODEV;
++
++#ifdef CONFIG_FB_GAMECUBE_GX
++ gcngx_exit(info);
++#endif
++ free_irq(ctl->irq, dev);
++ unregister_framebuffer(info);
++ fb_dealloc_cmap(&info->cmap);
++ iounmap(info->screen_base);
++ release_mem_region(info->fix.smem_start, info->fix.smem_len);
++
++ dev_set_drvdata(dev, NULL);
++ iounmap(ctl->io_base);
++ framebuffer_release(info);
++ return 0;
++}
++
++#ifndef MODULE
++
++static int __devinit vifb_setup(char *options)
++{
++ char *this_opt;
++
++ if (!options || !*options)
++ return 0;
++
++ drv_printk(KERN_DEBUG, "options: %s\n", options);
++
++ while ((this_opt = strsep(&options, ",")) != NULL) {
++ if (!*this_opt)
++ continue;
++
++ 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 (!strncmp(this_opt, "tv=", 3)) {
++ if (!strncmp(this_opt + 3, "PAL", 3))
++ vi_current_video_mode =
++ vi_video_modes + VI_VM_PAL50;
++ else if (!strncmp(this_opt + 3, "NTSC", 4))
++ vi_current_video_mode =
++ vi_video_modes + VI_VM_NTSC;
++ }
++ }
++ return 0;
++}
++
++#endif /* MODULE */
++
++
++/*
++ * OF platform driver hooks.
++ *
++ */
++
++static int __init vifb_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource res;
++ const unsigned long *prop;
++ unsigned long xfb_start, xfb_size;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &res);
++ if (retval) {
++ drv_printk(KERN_ERR, "no io memory range found\n");
++ return -ENODEV;
++ }
++
++ prop = of_get_property(odev->node, "xfb-start", NULL);
++ if (!prop) {
++ drv_printk(KERN_ERR, "no xfb start found\n");
++ return -ENODEV;
++ }
++ xfb_start = *prop;
++
++ prop = of_get_property(odev->node, "xfb-size", NULL);
++ if (!prop) {
++ drv_printk(KERN_ERR, "no xfb size found\n");
++ return -ENODEV;
++ }
++ xfb_size = *prop;
++
++ return vifb_do_probe(&odev->dev,
++ &res, irq_of_parse_and_map(odev->node, 0),
++ xfb_start, xfb_size);
++}
++
++static int __exit vifb_of_remove(struct of_device *odev)
++{
++ return vifb_do_remove(&odev->dev);
++}
++
++
++static struct of_device_id vifb_of_match[] = {
++ { .compatible = "nintendo,flipper-video", },
++ { .compatible = "nintendo,hollywood-video", },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, vifb_of_match);
++
++static struct of_platform_driver vifb_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = vifb_of_match,
++ .probe = vifb_of_probe,
++ .remove = vifb_of_remove,
++};
++
++/*
++ * Module interface hooks
++ *
++ */
++
++static int __init vifb_init_module(void)
++{
++#ifndef MODULE
++ char *option = NULL;
++
++ if (fb_get_options(DRV_MODULE_NAME, &option)) {
++ /* for backwards compatibility */
++ if (fb_get_options("gcnfb", &option))
++ return -ENODEV;
++ }
++ vifb_setup(option);
++#endif
++
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ vifb_driver_version);
++
++ return of_register_platform_driver(&vifb_of_driver);
++}
++
++static void __exit vifb_exit_module(void)
++{
++ of_unregister_platform_driver(&vifb_of_driver);
++}
++
++module_init(vifb_init_module);
++module_exit(vifb_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/drivers/video/gcngx.c b/drivers/video/gcngx.c
+new file mode 100644
+index 0000000..3246617
+--- /dev/null
++++ b/drivers/video/gcngx.c
+@@ -0,0 +1,691 @@
++/*
++ * drivers/video/gcngx.c
++ *
++ * Nintendo GameCube GX driver extension
++ * Copyright (C) 2004-2007 The GameCube Linux Team
++ * Copyright (C) 2004,2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2007 Albert Herranz
++ *
++ * Parts borrowed heavily from libogc. This driver would not have
++ * been possible with this library. Thanks!
++ *
++ * This program is free software; you can redistribute 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 CONFIG_FB_GAMECUBE_GX
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/mm.h>
++#include <linux/fb.h>
++#include <linux/console.h>
++#include <linux/vt_kern.h>
++#include <linux/interrupt.h>
++#include <linux/wait.h>
++#include <asm/pgtable.h>
++#include <asm/atomic.h>
++#include <asm/cacheflush.h>
++
++#error This driver is broken since ARCH=powerpc changes. A rewrite is needed.
++
++#ifdef CONFIG_PPC_MERGE
++#include <platforms/embedded6xx/gamecube.h>
++#else
++#include <platforms/gamecube.h>
++#endif
++
++#include "gcngx.h"
++
++/* Function definitions */
++static inline void __GX_AckFifoInt(int isOver);
++static inline void __GX_WriteFifoIntEnable(int over,int under);
++static void gcngx_munmap(struct vm_area_struct *vma);
++static void gcngx_free_munmap(struct vm_area_struct *vma);
++static void gcngx_destroy_fifo(void);
++static void gcngx_init_fifo(void);
++
++extern void vi_set_framebuffer(struct vi_ctl *ctl, u32 addr);
++extern int gcnfb_restorefb(struct fb_info *info);
++
++extern struct fb_ops gcnfb_ops;
++
++/* Defines */
++#define mtwpar(v) mtspr(921,v)
++#define mfwpar(v) mfspr(921)
++
++#define GX_ENABLE 1
++#define GX_DISABLE 0
++#define GX_TRUE 1
++#define GX_FALSE 0
++#define _SHIFTL(v, s, w) \
++ ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s)))
++#define _SHIFTR(v, s, w) \
++ ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1)))
++
++#define IRQ_VIDEO 8
++#define IRQ_PE_TOKEN 9
++#define IRQ_PE_FINISH 10
++#define IRQ_CP_FIFO 11
++
++#define VIDEO_MMAP_BASE 0x0C000000
++#define VIDEO_MMAP_LENGTH 0x9000
++
++#define KMALLOC_BASE 0x0D000000
++
++#define VIDEO_PE_INTERRUPT ((void __iomem *)0xcc00100a)
++#define VIDEO_PE_TOKEN ((void __iomem *)0xcc00100e)
++#define VIDEO_PE_INTERRUPT_TOKEN_ENABLE (1 << 0)
++#define VIDEO_PE_INTERRUPT_FINISH_ENABLE (1 << 1)
++#define VIDEO_PE_INTERRUPT_TOKEN_INTERRUPT (1 << 2)
++#define VIDEO_PE_INTERRUPT_FINISH_INTERRUPT (1 << 3)
++
++#define gcngx_disable_pe_interrupts() out_be16(VIDEO_PE_INTERRUPT,in_be16(VIDEO_PE_INTERRUPT) & ~(VIDEO_PE_INTERRUPT_TOKEN_ENABLE | VIDEO_PE_INTERRUPT_FINISH_ENABLE))
++#define gcngx_enable_pe_interrupts() { out_be16(VIDEO_PE_INTERRUPT,in_be16(VIDEO_PE_INTERRUPT) | (VIDEO_PE_INTERRUPT_TOKEN_ENABLE | VIDEO_PE_INTERRUPT_FINISH_ENABLE | VIDEO_PE_INTERRUPT_TOKEN_INTERRUPT | VIDEO_PE_INTERRUPT_FINISH_INTERRUPT)); out_be16(VIDEO_PE_TOKEN, 0); }
++
++#define VIDEO_CP_SR ((volatile u16 __iomem *)0xcc000000)
++#define VIDEO_CP_SR_OVERFLOW (1 << 0)
++#define VIDEO_CP_SR_UNDERFLOW (1 << 1)
++
++#define VIDEO_CP_CR ((volatile u16 __iomem *)0xcc000002)
++#define VIDEO_CP_CR_GP_FIFO_READ_ENABLE (1 << 0)
++#define VIDEO_CP_CR_CP_IRQ_ENABLE (1 << 1)
++#define VIDEO_CP_CR_OVERFLOW_IRQ_ENABLE (1 << 2)
++#define VIDEO_CP_CR_UNDERFLOW_IRQ_ENABLE (1 << 3)
++#define VIDEO_CP_CR_GP_LINK_ENABLE (1 << 4)
++#define VIDEO_CP_CR_MASK (0x1F)
++
++#define SIG_PE_FINISH (SIGRTMIN+14)
++#define SIG_PE_TOKEN (SIGRTMIN+15)
++#define SIG_VTRACE_COMPLETE (SIGRTMIN+16)
++
++#define FIFO_PUTU8(x) (*((volatile u8*) WGPIPE) = (x))
++#define FIFO_PUTU32(x) (*((volatile u32*)WGPIPE) = (x))
++
++#define LOAD_BP_REG(x) do { FIFO_PUTU8(0x61); FIFO_PUTU32(x); } while (0)
++
++/* Static data */
++static struct task_struct *mmap_task;
++static int overflow;
++static u32 xfb[2];
++static int currentFB = 0;
++static int flipRequest = 0;
++static u8 *mmap_fifo_base;
++static u8 *phys_fifo_base;
++static const u32 fifo_len = GCN_GX_FIFO_SIZE;
++static struct vm_operations_struct gcngx_vm_ops =
++{
++ .close = gcngx_munmap,
++};
++static struct vm_operations_struct gcngx_vm_free_ops =
++{
++ .close = gcngx_free_munmap,
++};
++
++static volatile u32* const _piReg = (volatile u32*)0xCC003000;
++static volatile u16* const _cpReg = (volatile u16*)0xCC000000;
++static volatile u16* const _peReg = (volatile u16*)0xCC001000;
++static volatile u16* const _memReg = (volatile u16*)0xCC004000;
++static volatile u32* const WGPIPE = (volatile u32*)0xCC008000;
++
++static irqreturn_t gcfb_fifo_irq_handler(int irq,void *dev_id)
++{
++ /* now handle the int */
++ u16 val = in_be16(VIDEO_CP_SR);
++
++ /* ENABLE_RUMBLE(); */
++
++ if (val & VIDEO_CP_SR_OVERFLOW)
++ {
++ /* fifo overflow, must halt the current application */
++ if (mmap_task)
++ {
++ printk(KERN_INFO "Man you are writing too fast! Slow down! I will make you!\n");
++ set_task_state(mmap_task,TASK_UNINTERRUPTIBLE);
++ overflow = 1;
++ }
++ __GX_AckFifoInt(1);
++ __GX_WriteFifoIntEnable(GX_DISABLE,GX_ENABLE);
++ return IRQ_HANDLED;
++ }
++ else if (val & VIDEO_CP_SR_UNDERFLOW)
++ {
++ /* underflow, resume the current application */
++ if (mmap_task && overflow)
++ {
++ printk(KERN_INFO "OK dude, the GX has crunched the data, you can resume now\n");
++ set_task_state(mmap_task,TASK_RUNNING);
++ overflow = 0;
++ }
++ __GX_AckFifoInt(0);
++ __GX_WriteFifoIntEnable(GX_ENABLE,GX_DISABLE);
++ return IRQ_HANDLED;
++ }
++ return IRQ_NONE;
++}
++
++void gcngx_vtrace(struct vi_ctl *ctl)
++{
++ struct siginfo sig;
++ /* ok flip the image if we have a flip request.
++ send signal on completion */
++ if (mmap_task && flipRequest)
++ {
++ /* do the flip! */
++ flipRequest = 0;
++ /* setup the signal info and flip buffer pointers */
++ currentFB = currentFB ? 0 : 1;
++ sig.si_errno = xfb[currentFB];
++ /* inform the hardware */
++ vi_set_framebuffer(ctl, xfb[currentFB]);
++ /* notify the process */
++ sig.si_signo = SIG_VTRACE_COMPLETE;
++ sig.si_code = 0;
++ send_sig_info(SIG_VTRACE_COMPLETE,&sig,mmap_task);
++ }
++}
++
++static irqreturn_t gcfb_pe_finish_irq_handler(int irq,void *dev_id)
++{
++ u16 val;
++ struct siginfo sig;
++ /* ack the interrupt */
++ val = in_be16(VIDEO_PE_INTERRUPT) | VIDEO_PE_INTERRUPT_FINISH_INTERRUPT;
++ out_be16(VIDEO_PE_INTERRUPT, val);
++
++ /* send SIG_PE_FINISH to the process */
++ if (mmap_task)
++ {
++ sig.si_signo = SIG_PE_FINISH;
++ sig.si_errno = 0;
++ sig.si_code = 0;
++ send_sig_info(SIG_PE_FINISH,&sig,mmap_task);
++ }
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t gcfb_pe_token_irq_handler(int irq,void *dev_id)
++{
++ u16 val;
++ struct siginfo sig;
++ /* ack the interrupt */
++ val = in_be16(VIDEO_PE_INTERRUPT) | VIDEO_PE_INTERRUPT_TOKEN_INTERRUPT;
++ out_be16(VIDEO_PE_INTERRUPT, val);
++ /* send SIG_PE_TOKEN to the process */
++ if (mmap_task)
++ {
++ sig.si_signo = SIG_PE_TOKEN;
++ sig.si_errno = 0;
++ sig.si_code = _peReg[7];
++ send_sig_info(SIG_PE_TOKEN,&sig,mmap_task);
++ }
++ return IRQ_HANDLED;
++}
++
++/**
++ *
++ */
++static u32 gcngx_uvirt_to_phys(u32 virt)
++{
++ pgd_t *dir;
++ pmd_t *pmd;
++ pte_t *pte;
++ u32 ret = 0;
++ struct mm_struct *mm = get_task_mm(current);
++ u32 offset = virt & (PAGE_SIZE - 1);
++ virt &= PAGE_MASK;
++
++ if (!mm) {
++ return 0;
++ }
++ down_read(&mm->mmap_sem);
++ /* convert to kernel address */
++ if ((dir = pgd_offset(mm, virt)) && pgd_present(*dir)) {
++ if ((pmd = pmd_offset(dir, virt)) && pmd_present(*pmd)) {
++ pte = pte_offset_kernel(pmd, virt);
++ if (pte && pte_present(*pte)) {
++ ret =
++ (u32) page_address(pte_page(*pte)) + offset;
++ /* ok now we have the kern addr, map to phys */
++ ret = virt_to_phys((void *)ret);
++ }
++ }
++ }
++
++ up_read(&mm->mmap_sem);
++ mmput(mm);
++ return ret;
++}
++
++int gcngx_ioctl(struct fb_info *info,
++ unsigned int cmd, unsigned long arg)
++{
++ u32 phys;
++ void __user *argp;
++
++ if (cmd == FBIOFLIP)
++ {
++ flipRequest = 1;
++ return 0;
++ } else if (cmd == FBIOVIRTTOPHYS) {
++ argp = (void __user *)arg;
++ if (copy_from_user(&phys, argp, sizeof(void *)))
++ return -EFAULT;
++
++ phys = gcngx_uvirt_to_phys(phys);
++
++ if (copy_to_user(argp, &phys, sizeof(void *)))
++ return -EFAULT;
++ return 0;
++ }
++ return -EINVAL;
++}
++
++static void *mymalloc(unsigned int len)
++{
++ struct page *page;
++ void *p = kmalloc(len,GFP_KERNEL);
++ if (p && len)
++ {
++ /* reserve all the memory so remap_page_range works */
++ for (page=virt_to_page(p);page<virt_to_page(p+len);++page) {
++ SetPageReserved(page);
++ SetPageLocked(page);
++ }
++ }
++ return p;
++}
++
++static void myfree(void *p)
++{
++ struct page *page;
++ u32 len;
++ if (p)
++ {
++ len = ksize(p);
++ for (page=virt_to_page(p);page<virt_to_page(p+len);++page) {
++ ClearPageReserved(page);
++ ClearPageLocked(page);
++ }
++ kfree(p);
++ }
++}
++
++static void gcngx_free_munmap(struct vm_area_struct *vma)
++{
++ if (vma->vm_private_data)
++ {
++ myfree(vma->vm_private_data);
++ vma->vm_private_data = NULL;
++ }
++}
++
++static void gcngx_munmap(struct vm_area_struct *vma)
++{
++ struct fb_info *info = (struct fb_info*)vma->vm_private_data;
++ struct vc_data *vc;
++
++ gcngx_destroy_fifo();
++
++ /* nobody has up mapped anymore */
++ mmap_task = NULL;
++ overflow = 0;
++
++ /* restore the framebuffer */
++ gcnfb_restorefb(info);
++#ifdef CONFIG_FRAMEBUFFER_CONSOLE
++ acquire_console_sem();
++ vc = vc_cons[fg_console].d;
++ update_screen(vc);
++ unblank_screen();
++ release_console_sem();
++#endif
++}
++
++int gcngx_mmap(struct fb_info *info, struct vm_area_struct *vma)
++{
++ struct file *file = vma->vm_file;
++ int ret;
++// static spinlock_t lock = SPIN_LOCK_UNLOCKED;
++ u32 phys;
++ u32 len;
++
++
++ len = vma->vm_end - vma->vm_start;
++
++ if (vma->vm_pgoff == (VIDEO_MMAP_BASE >> PAGE_SHIFT) &&
++ len == VIDEO_MMAP_LENGTH)
++ {
++ /* our special case, map the memory info */
++ vma->vm_flags |= VM_IO;
++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
++ if (io_remap_pfn_range(vma,vma->vm_start,
++ VIDEO_MMAP_BASE >> PAGE_SHIFT,
++ len,
++ vma->vm_page_prot))
++ {
++ return -EINVAL;
++ }
++ vma->vm_ops = &gcngx_vm_ops;
++ vma->vm_private_data = info;
++ /* store task for when fifo is overflown */
++ mmap_task = current;
++ overflow = 0;
++ /* init the fifo before we return */
++ gcngx_init_fifo();
++ return 0;
++ }
++ else if (vma->vm_pgoff >= (KMALLOC_BASE >> PAGE_SHIFT))
++ {
++ /* ok kmalloc the memory now */
++ vma->vm_private_data = mymalloc(len);
++ if (!vma->vm_private_data)
++ {
++ return -ENOMEM;
++ }
++ /* now setup the mapping */
++ phys = virt_to_phys(vma->vm_private_data);
++ vma->vm_flags |= (VM_RESERVED | VM_LOCKED);
++ if (remap_pfn_range(vma,vma->vm_start,
++ phys >> PAGE_SHIFT,len,vma->vm_page_prot))
++ {
++ kfree(vma->vm_private_data);
++ return -EINVAL;
++ }
++ vma->vm_ops = &gcngx_vm_free_ops;
++ /* now write the physical mapping in the first u32 */
++ *((u32*)vma->vm_private_data) = phys;
++ /* return successful */
++ return 0;
++ }
++
++ /* call the frame buffer mmap method */
++ if (file->f_op->mmap)
++ {
++ /*
++ * FIXME
++ * This seems to be broken.
++ * fb_mmap might sleep and we're getting a lock here.
++ */
++// spin_lock(&lock);
++ /* reset our mmap since the fb driver will call it */
++ gcnfb_ops.fb_mmap = NULL;
++ ret = file->f_op->mmap(file,vma);
++ /* reset our mmap */
++ gcnfb_ops.fb_mmap = gcngx_mmap;
++// spin_unlock(&lock);
++ return ret;
++ }
++ return -EINVAL;
++}
++
++static inline void __GX_AckFifoInt(int isOver)
++{
++ if (isOver)
++ _cpReg[2] |= (1 << 0);
++ else
++ _cpReg[2] |= (1 << 1);
++}
++
++static inline void __GX_Flush(void)
++{
++ /* write 8 32 bit values to the WGPIPE */
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++ *WGPIPE = 0;
++}
++
++static inline void __GX_WriteFifoIntEnable(int over, int under)
++{
++ u16 val = _cpReg[1] & ~(VIDEO_CP_CR_GP_FIFO_READ_ENABLE |
++ VIDEO_CP_CR_CP_IRQ_ENABLE |
++ VIDEO_CP_CR_GP_LINK_ENABLE);
++
++ if (over) val |= VIDEO_CP_CR_OVERFLOW_IRQ_ENABLE;
++ if (under) val |= VIDEO_CP_CR_UNDERFLOW_IRQ_ENABLE;
++
++ _cpReg[1] = val;
++ /* ack it just for fun */
++ _cpReg[2] = 0x3;
++}
++
++static inline void __GX_FifoReadEnable(int enable)
++{
++ if (enable)
++ _cpReg[1] |= VIDEO_CP_CR_GP_FIFO_READ_ENABLE;
++ else
++ _cpReg[1] &= ~VIDEO_CP_CR_GP_FIFO_READ_ENABLE;
++}
++
++static inline void __GX_FifoLink(u8 enable)
++{
++ if (enable)
++ _cpReg[1] |= VIDEO_CP_CR_GP_LINK_ENABLE;
++ else
++ _cpReg[1] &= ~VIDEO_CP_CR_GP_LINK_ENABLE;
++}
++
++static void __GX_EnableWriteGatherPipe(u8 enable)
++{
++ u32 flags;
++ if (enable)
++ {
++ mtwpar(0x0C008000);
++ }
++
++ asm ("isync");
++ asm ("sync");
++
++ flags = mfspr(920);
++ if (enable)
++ {
++ flags |= 0x40000000;
++ }
++ else
++ {
++ flags &= ~0x40000000;
++ }
++
++ mtspr(920,flags);
++ asm ("isync");
++ asm ("sync");
++}
++
++static inline void __GX_DrawDone(void)
++{
++ LOAD_BP_REG(0x45000002);
++ __GX_Flush();
++}
++
++static void gcngx_destroy_fifo()
++{
++ gcngx_disable_pe_interrupts();
++ _peReg[7] = 0;
++
++ __GX_DrawDone();
++ /* wait for the buffer to empty? */
++ __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE);
++ __GX_FifoReadEnable(0);
++ __GX_FifoLink(GX_FALSE);
++
++ __GX_EnableWriteGatherPipe(0);
++}
++
++struct fifo_info
++{
++ u8 *base;
++ u8 *end;
++ u32 length;
++ u8 *lo_water_mark;
++ u8 *hi_water_mark;
++ u8 *write_ptr;
++ u8 *read_ptr;
++};
++
++static void gcngx_init_fifo(void)
++{
++ struct fifo_info fi;
++ int i;
++
++ fi.base = phys_fifo_base;
++ fi.end = phys_fifo_base + fifo_len - 4;
++ fi.length = fifo_len;
++ fi.lo_water_mark = phys_fifo_base + ((fifo_len / 2) & ~31);
++ fi.hi_water_mark = phys_fifo_base + fifo_len - (16*1024);
++ fi.write_ptr = phys_fifo_base;
++ fi.read_ptr = phys_fifo_base;
++
++ /* reset currentFB pointer */
++ currentFB = 0;
++ flipRequest = 0;
++
++ /* printk(KERN_INFO "Initializing Flipper FIFO at %p of length %u\n",
++ fi.base,fifo_len); */
++
++ __GX_FifoLink(GX_FALSE);
++ __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE);
++ __GX_FifoReadEnable(0);
++
++ /* clear the fifo */
++ for (i=0;i<fifo_len/4;++i)
++ {
++ ((u32*)mmap_fifo_base)[i] = 0;
++ }
++ /* flush it */
++ flush_dcache_range((u32)mmap_fifo_base,
++ (u32)(mmap_fifo_base+fifo_len));
++
++ _peReg[7] = 0;
++
++ /* fifo base start */
++ _piReg[3] = (u32)fi.base;
++ /* fifo base end */
++ _piReg[4] = (u32)fi.end;
++ /* fifo write pointer */
++ _piReg[5] = (u32)fi.write_ptr;
++
++ /* init and flush the write gather pipe */
++ __GX_EnableWriteGatherPipe(1);
++ __GX_Flush();
++
++ /* wait for all data to be flushed */
++ while (mfwpar() & 1);
++ _piReg[3] = (u32)fi.base;
++ _piReg[4] = (u32)fi.end;
++ _piReg[5] = (u32)fi.write_ptr;
++ while (mfwpar() & 1);
++
++ /* setup fifo base */
++ _cpReg[16] = _SHIFTL(fi.base,0,16);
++ _cpReg[17] = _SHIFTR(fi.base,16,16);
++
++ /* setup fifo end */
++ _cpReg[18] = _SHIFTL(fi.end,0,16);
++ _cpReg[19] = _SHIFTR(fi.end,16,16);
++
++ /* setup hiwater mark */
++ _cpReg[20] = _SHIFTL(fi.hi_water_mark,0,16);
++ _cpReg[21] = _SHIFTR(fi.hi_water_mark,16,16);
++
++ /* setup lowater mark */
++ _cpReg[22] = _SHIFTL(fi.lo_water_mark,0,16);
++ _cpReg[23] = _SHIFTR(fi.lo_water_mark,16,16);
++
++ /* setup rd<->wd dist */
++ /*_cpReg[24] = _SHIFTL((pad)[7],0,16);
++ _cpReg[25] = _SHIFTR((pad)[7],16,16);*/
++ _cpReg[24] = 0;
++ _cpReg[25] = 0;
++
++ /* setup wt ptr */
++ _cpReg[26] = _SHIFTL(fi.write_ptr,0,16);
++ _cpReg[27] = _SHIFTR(fi.write_ptr,16,16);
++
++ /* setup rd ptr */
++ _cpReg[28] = _SHIFTL(fi.read_ptr,0,16);
++ _cpReg[29] = _SHIFTR(fi.read_ptr,16,16);
++
++ asm ("sync");
++ asm ("isync");
++ /* enable the write gather pipe */
++ __GX_WriteFifoIntEnable(GX_ENABLE,GX_DISABLE);
++ __GX_FifoLink(GX_TRUE);
++ __GX_FifoReadEnable(1);
++ /* enable interrupts */
++ gcngx_enable_pe_interrupts();
++
++ asm("sync");
++ asm("isync");
++}
++
++int gcngx_init(struct fb_info *info)
++{
++ int err;
++ /* compute framebuffer pointers */
++ xfb[0] = (u32)info->fix.smem_start;
++ xfb[1] = (u32)info->fix.smem_start + info->fix.smem_len/2;
++ /* disable the interrupts */
++ gcngx_disable_pe_interrupts();
++ __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE);
++
++ /* map the fifo area */
++ phys_fifo_base = (u8*)GCN_GX_FIFO_START;
++ if (!request_mem_region((u32)phys_fifo_base,fifo_len,"GX FIFO")) {
++ printk(KERN_ERR "Cannot reserve fifo memory area at %p\n",phys_fifo_base);
++ return -EIO;
++ }
++ if (!(mmap_fifo_base = ioremap((u32)phys_fifo_base,fifo_len))) {
++ printk(KERN_ERR "Cannot map the fifo area at %p\n",phys_fifo_base);
++ err = -EIO;
++ goto free_mem;
++ }
++
++ if ((err=request_irq(IRQ_PE_TOKEN,gcfb_pe_token_irq_handler,IRQF_DISABLED,"PE Token",0)))
++ {
++ goto free_iounmap;
++ }
++ if ((err=request_irq(IRQ_PE_FINISH,gcfb_pe_finish_irq_handler,IRQF_DISABLED,"PE Finish",0)))
++ {
++ goto free_pe_token;
++ }
++ if ((err=request_irq(IRQ_CP_FIFO,gcfb_fifo_irq_handler,IRQF_DISABLED,"CP FIFO",0)))
++ {
++ goto free_pe_finish;
++ }
++ return 0;
++
++ free_pe_finish:
++ free_irq(IRQ_PE_FINISH,0);
++ free_pe_token:
++ free_irq(IRQ_PE_TOKEN,0);
++ free_iounmap:
++ iounmap(mmap_fifo_base);
++ free_mem:
++ release_mem_region((u32)phys_fifo_base,fifo_len);
++
++ return err;
++}
++
++void gcngx_exit(struct fb_info *info)
++{
++ gcngx_destroy_fifo();
++
++ free_irq(IRQ_PE_FINISH,0);
++ free_irq(IRQ_PE_TOKEN,0);
++ free_irq(IRQ_CP_FIFO,0);
++
++ iounmap(mmap_fifo_base);
++ release_mem_region((u32)phys_fifo_base,fifo_len);
++}
++
++#endif /* CONFIG_FB_GAMECUBE_GX */
++
+diff --git a/drivers/video/gcngx.h b/drivers/video/gcngx.h
+new file mode 100644
+index 0000000..9722349
+--- /dev/null
++++ b/drivers/video/gcngx.h
+@@ -0,0 +1,17 @@
++#ifndef __GCGX__
++#define __GCGX__
++
++#ifdef CONFIG_FB_GAMECUBE_GX
++
++int gcngx_mmap(struct fb_info *info, struct vm_area_struct *vma);
++int gcngx_ioctl(struct fb_info *info, unsigned int cmd,unsigned long arg);
++
++int gcngx_init(struct fb_info *info);
++void gcngx_exit(struct fb_info *info);
++
++struct vi_ctl;
++void gcngx_vtrace(struct vi_ctl *ctl);
++
++#endif
++
++#endif
+diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig
+index 39ac49e..6fa54c6 100644
+--- a/drivers/video/logo/Kconfig
++++ b/drivers/video/logo/Kconfig
+@@ -42,6 +42,11 @@ config LOGO_DEC_CLUT224
+ depends on MACH_DECSTATION || ALPHA
+ default y
+
++config LOGO_GAMECUBE_CLUT224
++ bool "224-color GameCube Linux logo"
++ depends on GAMECUBE
++ default y
++
+ config LOGO_MAC_CLUT224
+ bool "224-color Macintosh Linux logo"
+ depends on MAC
+diff --git a/drivers/video/logo/Makefile b/drivers/video/logo/Makefile
+index b91251d..a88ea9f 100644
+--- a/drivers/video/logo/Makefile
++++ b/drivers/video/logo/Makefile
+@@ -7,6 +7,7 @@ obj-$(CONFIG_LOGO_LINUX_CLUT224) += logo_linux_clut224.o
+ obj-$(CONFIG_LOGO_BLACKFIN_CLUT224) += logo_blackfin_clut224.o
+ obj-$(CONFIG_LOGO_BLACKFIN_VGA16) += logo_blackfin_vga16.o
+ obj-$(CONFIG_LOGO_DEC_CLUT224) += logo_dec_clut224.o
++obj-$(CONFIG_LOGO_GAMECUBE_CLUT224) += logo_gcn_clut224.o
+ obj-$(CONFIG_LOGO_MAC_CLUT224) += logo_mac_clut224.o
+ obj-$(CONFIG_LOGO_PARISC_CLUT224) += logo_parisc_clut224.o
+ obj-$(CONFIG_LOGO_SGI_CLUT224) += logo_sgi_clut224.o
+diff --git a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c
+index 2e85a2b..bd608bf 100644
+--- a/drivers/video/logo/logo.c
++++ b/drivers/video/logo/logo.c
+@@ -27,6 +27,7 @@ extern const struct linux_logo logo_linux_clut224;
+ extern const struct linux_logo logo_blackfin_vga16;
+ extern const struct linux_logo logo_blackfin_clut224;
+ extern const struct linux_logo logo_dec_clut224;
++extern const struct linux_logo logo_gcn_clut224;
+ extern const struct linux_logo logo_mac_clut224;
+ extern const struct linux_logo logo_parisc_clut224;
+ extern const struct linux_logo logo_sgi_clut224;
+@@ -90,6 +91,10 @@ const struct linux_logo * __init_refok fb_find_logo(int depth)
+ /* DEC Linux logo on MIPS/MIPS64 or ALPHA */
+ logo = &logo_dec_clut224;
+ #endif
++#ifdef CONFIG_LOGO_GAMECUBE_CLUT224
++ /* GameCube Linux logo */
++ logo = &logo_gcn_clut224;
++#endif
+ #ifdef CONFIG_LOGO_MAC_CLUT224
+ /* Macintosh Linux logo on m68k */
+ if (MACH_IS_MAC)
+diff --git a/drivers/video/logo/logo_gcn_clut224.ppm b/drivers/video/logo/logo_gcn_clut224.ppm
+new file mode 100644
+index 0000000..08e12b3
+--- /dev/null
++++ b/drivers/video/logo/logo_gcn_clut224.ppm
+@@ -0,0 +1,1123 @@
++P3
++80 80
++255
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 6 6 6 10 10 10 10 10 10 10 10 10 6 6 6
++6 6 6 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 10 10 10 14 14 14
++22 22 22 26 26 26 30 30 30 34 34 34 30 30 30 30 30 30
++26 26 26 18 18 17 14 14 14 10 10 10 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 14 14 14 26 26 26 42 42 42
++54 54 55 66 66 66 78 78 78 78 78 78 78 78 78 74 74 74
++66 66 66 54 54 55 42 42 42 26 26 26 18 18 17 10 10 10
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 22 22 22 42 42 42 66 66 66 87 86 85
++66 66 66 38 38 38 38 38 38 22 22 22 26 26 26 34 34 34
++54 54 55 66 66 66 87 86 85 70 70 70 46 46 46 26 26 26
++14 14 14 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++10 10 10 26 26 26 50 50 50 82 82 82 58 58 58 6 6 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 6 6 6 54 54 55 87 86 85 66 66 66
++38 38 38 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6
++22 22 22 50 50 50 78 78 78 34 34 34 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 6 6 6 70 70 70
++78 78 78 46 46 46 22 22 22 6 6 6 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 6 6 6 18 18 17
++42 42 42 82 82 82 26 26 26 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 14 14 14 46 46 46 34 34 34 6 6 6 2 2 6
++42 42 42 78 78 78 42 42 42 18 18 17 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 10 10 10 30 30 30
++66 66 66 58 58 58 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 26 26 26 87 86 85 102 98 90 46 46 46 10 10 10
++2 2 6 58 58 58 70 70 70 34 34 34 10 10 10 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 14 14 14 42 42 42
++87 86 85 10 10 10 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 30 30 30 94 94 98 94 94 94 58 58 58 26 26 26
++2 2 6 6 6 6 78 78 78 54 54 55 22 22 22 6 6 6
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 22 22 22 62 62 62
++62 62 62 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 26 26 26 54 54 55 38 38 38 18 18 17 10 10 10
++2 2 6 2 2 6 34 34 34 82 82 82 38 38 38 14 14 14
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 30 30 30 78 78 78
++30 30 30 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 10 10 10 10 10 10 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 78 78 78 50 50 50 18 18 17
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 38 38 38 87 86 85
++14 14 14 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 2 54 54 55 66 66 66 26 26 26
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 42 42 42 82 82 82
++2 2 6 2 2 6 2 2 6 6 6 6 10 10 10 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 6 6 6 14 14 14 10 10 10 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 18 18 17 82 82 82 34 34 34
++10 10 10 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 46 46 46 87 86 85
++2 2 6 2 2 6 6 6 6 6 6 6 22 22 22 34 34 34
++6 6 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++18 18 17 34 34 34 10 10 10 50 50 50 22 22 22 2 2 6
++2 2 6 2 2 6 2 2 6 10 10 10 87 86 85 42 42 42
++14 14 14 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 46 46 46 87 86 85
++2 2 6 2 2 6 38 38 38 118 118 118 94 94 94 22 22 22
++22 22 22 2 2 6 2 2 6 2 2 6 14 14 14 87 86 85
++141 139 143 160 158 162 152 152 152 38 38 38 26 26 26 6 6 6
++2 2 6 2 2 6 2 2 6 2 2 6 87 86 85 46 46 46
++14 14 14 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 46 46 46 87 86 85
++2 2 6 14 14 14 134 133 135 199 199 199 194 193 197 118 118 118
++10 10 10 2 2 6 2 2 6 6 6 6 102 98 90 190 190 190
++209 208 212 219 220 223 215 214 215 134 133 135 14 14 14 6 6 6
++2 2 6 2 2 6 2 2 6 2 2 6 87 86 85 50 50 50
++18 18 17 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 46 46 46 87 86 85
++2 2 6 54 54 55 219 220 223 199 199 199 219 220 223 246 246 246
++58 58 58 2 2 6 2 2 6 30 30 30 209 208 212 254 254 254
++173 173 174 121 121 122 219 220 223 236 233 239 74 74 74 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 70 70 70 58 58 58
++22 22 22 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 46 46 46 82 82 82
++2 2 6 104 103 100 173 173 174 26 26 26 90 90 90 229 226 233
++121 121 122 10 10 10 14 14 14 46 46 46 229 231 235 190 190 190
++6 6 6 74 74 74 90 90 90 239 238 242 160 158 162 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 70 70 70 58 58 58
++22 22 22 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 42 42 42 87 86 85
++6 6 6 118 118 118 104 103 100 6 6 6 70 70 70 152 152 152
++122 122 130 18 18 17 38 38 38 54 54 55 219 220 223 104 103 100
++2 2 2 14 14 14 46 46 46 190 190 190 199 199 199 2 2 2
++2 2 6 2 2 6 2 2 6 2 2 6 74 74 74 62 62 62
++22 22 22 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 14 14 14 42 42 42 94 94 94
++14 14 14 104 103 100 122 122 130 2 2 2 18 18 17 118 118 118
++124 98 46 122 94 10 122 94 10 101 78 10 163 163 162 107 107 108
++2 2 6 2 2 2 2 2 2 194 193 197 194 193 197 6 6 6
++2 2 6 2 2 6 2 2 6 2 2 6 74 74 74 62 62 62
++22 22 22 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 38 38 38 90 90 90
++14 14 14 62 62 62 209 208 212 26 26 26 44 31 8 158 118 10
++226 171 11 238 183 13 214 174 14 188 146 14 214 174 14 174 146 62
++26 26 26 2 2 2 70 70 70 246 246 246 141 139 143 2 2 2
++2 2 6 2 2 6 2 2 6 2 2 6 70 70 70 66 66 66
++26 26 26 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 38 38 38 87 86 85
++14 14 14 6 6 6 199 199 199 190 166 114 186 134 10 226 171 11
++238 178 14 234 193 17 234 193 17 236 202 20 246 206 46 242 210 18
++234 193 17 188 146 14 218 194 134 210 206 186 42 42 42 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 50 50 50 74 74 74
++30 30 30 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 34 34 34 87 86 85
++14 14 14 2 2 2 122 86 26 194 134 10 226 166 10 238 183 13
++226 186 14 234 193 17 236 202 20 246 216 61 246 217 39 246 217 39
++246 214 22 242 210 18 242 210 18 226 186 14 122 86 26 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 50 50 50 82 82 82
++34 34 34 10 10 10 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 34 34 34 82 82 82
++30 30 30 63 43 6 182 122 6 204 146 10 231 174 11 238 183 13
++234 193 17 236 202 20 242 210 18 246 216 61 246 217 39 246 214 22
++246 214 22 242 210 18 226 186 14 214 174 14 188 146 14 6 6 6
++2 2 6 2 2 6 2 2 6 2 2 6 26 26 26 94 94 94
++42 42 42 14 14 14 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 30 30 30 78 78 78
++50 50 50 104 70 6 186 134 10 218 158 10 238 178 14 242 186 14
++236 202 20 236 202 20 246 216 61 246 217 39 246 217 39 246 214 22
++242 210 18 198 154 10 198 138 10 218 158 10 154 114 10 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 6 6 6 90 90 90
++54 54 55 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 30 30 30 78 78 78
++46 46 46 22 22 22 138 93 6 198 154 10 238 183 13 238 183 13
++236 202 20 242 210 18 246 214 22 246 214 22 242 210 18 204 166 16
++186 134 10 210 150 10 216 162 10 210 150 10 101 78 10 2 2 6
++6 6 6 54 54 55 14 14 14 2 2 6 2 2 6 62 62 62
++74 74 74 30 30 30 10 10 10 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 34 34 34 78 78 78
++50 50 50 6 6 6 94 70 30 138 102 14 188 146 14 226 186 14
++236 202 20 234 193 17 214 174 14 188 146 14 173 119 7 186 134 10
++210 150 10 214 154 10 202 150 34 182 158 106 102 98 90 2 2 2
++2 2 6 78 78 78 118 118 118 54 54 55 2 2 6 22 22 22
++90 90 90 46 46 46 18 18 17 6 6 6 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 38 38 38 87 86 85
++50 50 50 6 6 6 132 131 125 174 154 114 160 108 10 173 119 7
++198 154 10 188 146 14 198 138 10 198 138 10 204 146 10 204 146 10
++198 138 10 190 166 114 194 193 197 199 199 199 173 173 174 14 14 14
++2 2 6 18 18 17 118 118 118 118 118 118 22 22 22 2 2 6
++74 74 74 70 70 70 30 30 30 10 10 10 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 18 18 17 50 50 50 104 103 100
++26 26 26 10 10 10 141 139 143 190 190 190 174 154 114 160 108 10
++198 138 10 188 146 14 198 138 10 194 134 10 182 122 6 190 142 34
++186 174 146 185 185 187 199 199 199 219 220 223 215 214 215 66 66 66
++2 2 6 2 2 6 50 50 50 62 62 62 6 6 6 2 2 2
++10 10 10 90 90 90 50 50 50 18 18 17 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 10 10 10 34 34 34 74 74 74 74 74 74
++2 2 2 6 6 6 141 139 143 199 199 199 190 190 190 163 163 162
++154 122 54 160 108 10 160 108 10 164 122 42 174 154 114 185 185 187
++194 193 197 209 208 212 250 250 250 254 254 254 250 250 250 182 182 182
++6 6 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 62 62 62 74 74 74 34 34 34 14 14 14 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 22 22 22 54 54 55 94 94 94 18 18 17
++2 2 6 50 50 50 229 231 235 219 220 223 194 193 197 190 190 190
++190 190 190 190 190 190 190 190 190 190 190 190 190 190 190 194 193 197
++215 214 215 242 242 242 254 254 254 254 254 254 250 250 250 254 254 254
++82 82 82 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 14 14 14 87 86 85 54 54 55 22 22 22 6 6 6
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 18 18 17 46 46 46 90 90 90 46 46 46 18 18 17
++6 6 6 182 182 182 254 254 254 250 250 250 210 206 186 190 190 190
++190 190 190 190 190 190 190 190 190 190 190 190 210 206 186 229 231 235
++254 254 254 250 250 250 250 250 250 254 254 254 254 254 254 254 254 254
++198 200 208 14 14 14 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 42 42 42 87 86 85 42 42 42 18 18 17
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6
++14 14 14 38 38 38 74 74 74 66 66 66 2 2 6 6 6 6
++90 90 90 250 250 250 250 250 250 254 254 254 239 238 242 199 199 199
++190 190 190 190 190 190 194 193 197 219 220 223 183 174 199 134 114 171
++207 201 219 254 254 254 254 254 254 254 254 254 250 250 250 254 254 254
++250 250 250 82 82 82 2 2 2 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 78 78 78 70 70 70 34 34 34
++14 14 14 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 14 14 14
++34 34 34 66 66 66 78 78 78 6 6 6 2 2 2 18 18 17
++219 220 223 254 254 254 254 254 254 250 250 250 254 254 254 246 246 246
++222 223 236 229 231 235 229 226 233 140 131 164 109 96 159 109 96 159
++120 106 166 170 156 193 236 233 239 254 254 254 254 254 254 254 254 254
++254 254 254 182 182 182 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 18 18 17 90 90 90 62 62 62
++30 30 30 10 10 10 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 10 10 10 26 26 26
++58 58 58 90 90 90 18 18 17 2 2 6 2 2 6 107 107 108
++254 254 254 254 254 254 254 254 254 250 250 250 250 250 250 254 254 254
++250 250 250 189 183 204 121 102 164 116 94 159 117 98 162 114 103 163
++114 103 163 120 106 166 136 121 175 146 139 165 107 107 108 118 118 118
++141 139 143 182 182 182 219 220 223 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 18 18 17 94 94 94
++54 54 55 26 26 26 10 10 10 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 22 22 22 50 50 50
++90 90 90 26 26 26 2 2 6 2 2 2 14 14 14 199 199 199
++250 250 250 254 254 254 254 254 254 254 254 254 254 254 254 229 226 233
++147 132 180 109 90 154 158 147 190 198 200 208 137 128 178 120 106 166
++121 102 164 120 106 166 130 120 175 130 120 175 127 110 169 76 72 88
++58 58 58 58 58 58 74 74 74 118 118 118 194 193 197 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 38 38 38
++87 86 85 50 50 50 22 22 22 6 6 6 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 14 14 14 38 38 38 82 82 82
++34 34 34 2 2 6 2 2 6 2 2 2 42 42 42 194 193 197
++246 246 246 254 254 254 254 254 254 254 254 254 200 193 212 122 98 164
++113 86 148 109 96 159 128 114 172 158 147 190 130 120 175 120 106 166
++127 110 169 127 110 169 130 120 175 130 120 175 142 128 179 140 131 164
++102 98 122 58 50 84 54 54 55 62 62 62 74 74 74 134 133 135
++236 233 239 2 2 2 2 2 6 2 2 6 2 2 6 2 2 6
++38 38 38 82 82 82 42 42 42 14 14 14 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 10 10 10 26 26 26 62 62 62 66 66 66
++2 2 6 2 2 6 2 2 6 6 6 6 70 70 70 169 165 179
++210 206 186 229 231 235 236 233 239 146 139 165 105 86 155 105 86 155
++109 96 159 109 90 154 109 96 159 114 103 163 114 103 163 120 106 166
++120 106 166 128 114 172 130 120 175 137 128 178 137 128 178 142 134 183
++155 141 181 140 131 164 70 70 70 58 50 84 66 66 66 84 82 94
++118 118 118 229 231 235 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 62 62 62 66 66 66 30 30 30 10 10 10 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 14 14 14 42 42 42 82 82 82 18 18 17
++2 2 6 2 2 6 2 2 6 10 10 10 94 94 94 182 182 182
++219 220 223 200 193 212 122 98 164 102 82 152 105 86 155 109 90 154
++109 96 159 109 90 154 109 96 159 114 103 163 114 103 163 127 110 169
++128 114 172 128 114 172 130 120 175 137 128 178 142 128 179 148 140 189
++148 140 189 158 147 190 158 147 190 118 110 134 76 72 88 94 90 106
++94 94 98 132 131 125 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 6 6 6 87 86 85 46 46 46 18 18 17 6 6 6
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 22 22 22 54 54 55 70 70 70 2 2 6
++2 2 6 10 10 10 2 2 2 22 22 22 173 173 174 236 233 239
++155 141 181 102 82 152 102 82 152 102 82 152 109 90 154 105 86 155
++109 90 154 87 78 126 58 50 84 45 38 66 45 38 66 54 46 76
++82 70 114 114 103 163 130 120 175 136 121 175 137 128 178 142 128 179
++142 134 183 148 140 189 158 147 190 158 147 190 146 139 165 118 106 138
++126 122 142 87 86 85 199 199 199 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 62 62 62 66 66 66 26 26 26 10 10 10
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 30 30 30 74 74 74 50 50 50 2 2 6
++26 26 26 26 26 26 2 2 6 107 107 108 207 201 219 120 106 166
++103 83 144 102 82 152 105 86 155 102 82 152 94 82 138 87 78 126
++34 26 54 6 6 6 6 6 6 2 2 6 2 2 6 2 2 2
++2 2 2 10 6 18 64 60 89 130 120 175 137 128 178 137 128 178
++142 128 179 148 140 189 142 134 183 146 140 180 142 134 183 148 140 189
++155 141 181 110 106 126 146 146 147 18 18 17 2 2 6 2 2 6
++2 2 6 2 2 6 18 18 17 87 86 85 42 42 42 14 14 14
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 14 14 14 42 42 42 90 90 90 22 22 22 2 2 6
++42 42 42 2 2 2 78 78 78 166 150 188 102 82 152 99 78 147
++111 77 141 102 82 152 99 78 147 105 86 155 87 78 126 10 10 10
++6 6 6 2 2 6 2 2 6 6 2 2 2 2 2 2 2 2
++2 2 6 6 6 6 2 2 6 45 38 66 130 120 175 136 121 175
++137 128 178 137 128 178 137 128 178 137 128 178 137 128 178 142 128 179
++142 134 183 140 131 164 138 131 154 38 38 38 10 10 10 2 2 6
++2 2 6 2 2 6 2 2 6 78 78 78 58 58 58 22 22 22
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 18 18 17 54 54 55 82 82 82 2 2 6 26 26 26
++22 22 22 216 211 227 127 110 169 97 74 146 99 78 147 99 78 147
++102 82 152 102 82 152 99 78 147 94 82 138 34 26 54 2 2 6
++2 2 6 6 2 7 50 50 50 30 30 30 6 6 6 6 2 2
++2 2 2 2 2 2 2 2 6 2 2 6 87 78 126 130 120 175
++128 114 172 130 120 175 130 120 175 136 121 175 137 128 178 130 120 175
++130 120 175 137 128 178 142 134 183 213 206 226 38 38 38 2 2 6
++2 2 6 2 2 6 2 2 6 46 46 46 78 78 78 30 30 30
++10 10 10 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++10 10 10 30 30 30 74 74 74 58 58 58 2 2 6 42 42 42
++189 183 204 105 86 155 97 74 146 97 74 146 93 70 140 97 74 146
++105 86 155 99 78 147 102 82 152 94 82 138 10 6 18 6 2 7
++6 6 6 2 2 2 10 6 18 50 50 50 54 54 55 18 18 17
++6 2 2 6 2 7 6 2 7 2 2 6 54 46 76 120 106 166
++127 110 169 127 110 169 127 110 169 128 114 172 127 110 169 128 114 172
++128 114 172 127 110 169 128 114 172 130 120 175 38 38 38 14 14 14
++2 2 6 2 2 6 2 2 6 6 6 6 87 86 85 46 46 46
++14 14 14 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6
++14 14 14 42 42 42 90 90 90 18 18 17 18 18 17 26 26 26
++183 174 199 122 98 164 97 74 146 99 78 147 97 74 146 97 74 146
++99 78 147 99 78 147 102 82 152 99 78 147 14 14 14 26 26 26
++26 26 26 6 2 7 6 2 7 6 2 7 22 22 22 66 66 66
++30 30 30 2 2 6 2 2 6 2 2 6 58 50 84 120 106 166
++114 103 163 114 103 163 114 103 163 114 103 163 114 103 163 114 103 163
++114 103 163 120 106 166 109 90 154 134 120 165 10 10 10 34 34 34
++2 2 6 2 2 6 2 2 6 2 2 6 74 74 74 58 58 58
++22 22 22 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 10 10 10
++26 26 26 66 66 66 82 82 82 2 2 6 38 38 38 6 2 7
++196 186 211 154 134 184 127 110 169 99 78 147 97 74 146 97 74 146
++99 78 147 99 78 147 99 78 147 102 82 152 45 38 66 58 50 84
++54 54 55 22 22 22 6 2 7 6 2 7 6 2 7 10 10 10
++14 14 14 6 2 2 2 2 2 10 6 18 94 82 138 109 96 159
++109 96 159 109 96 159 109 96 159 109 96 159 109 96 159 109 96 159
++109 96 159 105 86 155 116 94 159 147 132 180 2 2 6 46 46 46
++2 2 6 2 2 6 2 2 6 2 2 6 42 42 42 74 74 74
++30 30 30 10 10 10 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 6 6 6 14 14 14
++42 42 42 90 90 90 26 26 26 6 6 6 42 42 42 2 2 6
++200 193 212 154 134 184 154 134 184 136 121 175 105 86 155 97 74 146
++97 74 146 99 78 147 99 78 147 97 74 146 95 75 136 40 30 56
++94 90 106 104 103 100 50 50 50 26 26 26 6 2 7 6 2 7
++2 2 6 6 2 2 10 6 18 64 60 89 109 90 154 105 86 155
++105 86 155 105 86 155 105 86 155 105 86 155 105 86 155 102 82 152
++109 90 154 116 94 159 116 94 159 157 140 187 2 2 6 46 46 46
++2 2 6 2 2 6 2 2 6 2 2 6 10 10 10 87 86 85
++38 38 38 10 10 10 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 10 10 10 26 26 26
++66 66 66 82 82 82 2 2 6 22 22 22 18 18 17 6 2 7
++207 201 219 154 134 184 147 132 180 147 132 180 147 126 185 114 90 155
++97 74 146 97 74 146 111 77 141 130 90 130 99 78 147 95 75 136
++58 50 84 84 82 94 87 86 85 38 38 38 6 2 7 6 2 7
++10 6 18 34 26 54 86 66 120 102 82 152 99 78 147 102 82 152
++102 82 152 102 82 152 102 82 152 99 78 147 99 78 147 109 90 154
++114 90 155 116 94 159 116 94 159 170 156 193 2 2 6 38 38 38
++2 2 6 2 2 6 2 2 6 2 2 6 6 6 6 87 86 85
++46 46 46 14 14 14 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 18 18 17 46 46 46
++87 86 85 18 18 17 2 2 6 34 34 34 10 10 10 10 6 18
++213 206 226 162 146 182 183 174 199 147 132 180 142 134 183 147 132 180
++126 102 165 97 74 146 97 74 146 130 90 130 166 110 126 118 78 130
++93 70 140 97 74 146 86 66 120 70 56 108 70 56 108 70 56 108
++87 78 126 94 82 138 99 78 147 99 78 147 99 78 147 99 78 147
++97 74 146 97 74 146 97 74 146 102 82 152 114 90 155 116 94 159
++116 94 159 122 98 164 122 98 164 177 168 195 6 6 6 30 30 30
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 82 82 82
++54 54 55 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 26 26 26 66 66 66
++62 62 62 2 2 6 2 2 2 38 38 38 10 10 10 22 22 22
++226 218 234 170 156 193 207 201 219 194 193 197 146 139 165 147 126 185
++147 132 180 134 114 171 99 78 147 99 78 147 118 78 130 113 86 148
++97 74 146 97 74 146 97 74 146 97 74 146 97 74 146 99 78 147
++97 74 146 97 74 146 97 74 146 97 74 146 97 74 146 93 70 140
++97 74 146 93 70 140 105 86 155 109 90 154 93 70 140 116 94 159
++122 98 164 122 98 164 126 102 165 189 183 204 10 10 10 30 30 30
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 66 66 66
++58 58 58 22 22 22 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 10 10 10 38 38 38 78 78 78
++6 6 6 2 2 6 2 2 6 46 46 46 14 14 14 42 42 42
++229 226 233 170 156 193 183 174 199 132 131 125 198 200 208 158 147 190
++140 131 164 142 134 183 136 121 175 113 86 148 95 75 136 97 74 146
++97 74 146 95 75 136 93 70 140 93 70 140 97 74 146 102 82 152
++97 74 146 93 70 140 93 70 140 93 70 140 93 70 140 93 70 140
++97 74 146 105 86 155 99 78 147 88 65 130 92 71 128 116 94 159
++122 98 164 126 102 165 127 106 167 196 186 211 22 22 22 14 14 14
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 66 66 66
++62 62 62 22 22 22 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 18 18 17 50 50 50 74 74 74
++2 2 6 2 2 6 14 14 14 70 70 70 34 34 34 62 62 62
++236 233 239 170 156 193 194 193 197 46 42 70 200 193 212 199 199 199
++177 162 197 137 128 178 147 132 180 147 126 185 121 102 164 97 74 146
++93 70 140 93 70 140 97 74 146 93 70 140 93 70 140 88 65 130
++88 65 130 93 70 140 93 70 140 93 70 140 93 70 140 97 74 146
++113 86 148 97 74 146 86 66 120 92 71 128 93 70 140 122 98 164
++126 102 165 127 106 167 127 106 167 207 201 219 30 30 30 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 66 66 66
++62 62 62 22 22 22 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 18 18 17 54 54 55 62 62 62
++2 2 6 2 2 6 2 2 6 30 30 30 46 46 46 74 74 74
++254 254 254 158 147 190 236 233 239 199 199 199 215 214 215 190 190 190
++163 163 162 183 174 199 138 131 154 142 128 179 147 126 185 127 110 169
++99 78 147 93 70 140 97 74 146 93 70 140 93 70 140 88 65 130
++88 65 130 88 65 130 93 70 140 88 65 130 102 82 152 105 86 155
++92 71 128 86 66 120 86 66 120 92 71 128 95 75 136 126 102 165
++127 106 167 127 106 167 127 106 167 213 206 226 30 30 30 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 66 66 66
++58 58 58 22 22 22 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 22 22 22 58 58 58 62 62 62
++2 2 6 2 2 6 2 2 2 6 2 7 30 30 30 78 78 78
++250 250 250 162 146 182 207 201 219 222 223 236 229 231 235 173 173 174
++38 38 38 194 193 197 189 183 204 146 139 165 137 128 178 147 132 180
++136 121 175 105 86 155 88 65 130 93 70 140 93 70 140 88 65 130
++88 65 130 88 65 130 88 65 130 105 86 155 102 82 152 88 65 130
++86 66 120 88 65 130 82 70 114 92 71 128 99 78 147 127 106 167
++126 102 165 126 102 165 127 110 169 226 218 234 14 14 14 22 22 22
++26 26 26 18 18 17 6 6 6 2 2 6 2 2 2 82 82 82
++54 54 55 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 26 26 26 62 62 62 107 107 108
++74 54 14 186 134 10 216 162 10 122 94 10 6 6 6 62 62 62
++239 238 242 170 156 193 155 141 181 200 193 212 222 223 236 229 231 235
++134 133 135 198 200 208 194 193 197 183 174 199 152 152 152 136 121 175
++142 128 179 142 128 179 117 98 162 88 65 130 88 65 130 93 70 140
++88 65 130 99 78 147 109 90 154 114 90 155 95 75 136 86 66 120
++92 71 128 88 65 130 92 71 128 95 75 136 103 83 144 120 106 166
++127 106 167 127 110 169 155 141 181 160 158 162 2 2 2 2 2 2
++6 6 6 18 18 17 66 66 66 38 38 38 6 6 6 94 94 94
++50 50 50 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6
++10 10 10 10 10 10 18 18 17 38 38 38 78 78 78 132 131 125
++218 158 10 242 186 14 246 190 14 246 190 14 158 118 10 10 10 10
++90 90 90 226 218 234 166 150 188 157 140 187 189 183 204 216 211 227
++229 231 235 219 220 223 173 173 174 74 74 74 189 183 204 169 165 179
++134 120 165 136 121 175 137 128 178 127 110 169 93 70 140 88 65 130
++102 82 152 113 86 148 114 90 155 114 90 155 92 71 128 86 66 120
++92 71 128 95 75 136 92 71 128 95 75 136 117 98 162 127 106 167
++127 110 169 177 162 197 6 2 7 6 2 7 2 2 6 2 2 6
++2 2 6 2 2 6 38 38 38 46 46 46 22 22 22 107 107 108
++54 54 55 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 14 14 14 22 22 22
++30 30 30 38 38 38 50 50 50 70 70 70 107 107 108 190 142 34
++226 171 11 242 186 14 246 190 14 246 190 14 246 190 14 154 114 10
++6 6 6 74 74 74 236 233 239 136 121 175 157 140 187 177 162 197
++216 211 227 236 233 239 209 208 212 66 66 66 169 165 179 194 193 197
++177 168 195 138 131 154 136 121 175 137 128 178 127 106 167 102 82 152
++109 90 154 109 90 154 109 90 154 116 94 159 99 78 147 86 66 120
++92 71 128 95 75 136 103 83 144 116 94 159 127 106 167 134 120 165
++196 186 211 44 31 8 2 2 2 2 2 6 2 2 6 2 2 6
++2 2 6 6 6 6 30 30 30 26 26 26 204 166 16 154 142 90
++66 66 66 26 26 26 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 18 18 17 38 38 38 58 58 58
++78 78 78 87 86 85 102 98 90 121 121 122 174 146 62 210 150 10
++231 174 11 246 186 14 246 190 14 246 190 14 246 186 14 234 193 17
++101 78 10 2 2 6 46 46 46 215 214 215 177 168 195 148 140 189
++158 147 190 222 223 236 239 238 242 215 214 215 215 214 215 185 185 187
++122 122 130 183 174 199 138 131 154 136 121 175 127 110 169 113 86 148
++109 90 154 114 90 155 116 94 159 122 98 164 99 78 147 95 75 136
++87 78 126 118 78 130 116 94 159 122 98 164 136 121 175 213 206 226
++204 166 16 18 18 17 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 6 6 6 122 94 10 236 202 20 234 193 17
++82 82 82 34 34 34 10 10 10 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 14 14 14 38 38 38 70 70 70 154 122 54
++190 142 34 204 146 10 198 138 10 198 138 10 214 154 10 226 171 11
++242 186 14 246 190 14 246 190 14 246 190 14 246 190 14 246 186 14
++226 171 11 44 31 8 6 2 7 22 22 22 160 158 162 200 193 212
++157 140 187 157 140 187 207 201 219 209 208 212 222 223 236 194 193 197
++30 30 30 146 139 165 146 139 165 134 120 165 134 114 171 114 90 155
++116 94 159 122 98 164 122 98 164 122 98 164 111 77 141 92 71 128
++109 90 154 122 98 164 126 102 165 142 128 179 229 226 233 242 186 14
++214 154 10 44 31 8 2 2 2 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 63 43 6 231 174 11 234 193 17 238 183 13
++114 102 78 38 38 38 14 14 14 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 22 22 22 54 54 55 154 122 54 214 154 10
++226 171 11 231 174 11 226 171 11 226 171 11 238 178 14 242 186 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++242 198 14 188 146 14 10 10 10 6 2 7 6 2 7 118 118 118
++216 211 227 157 140 187 154 134 184 183 174 199 215 214 215 222 223 236
++169 165 179 173 173 174 138 131 154 128 114 172 134 120 165 116 94 159
++122 98 164 122 98 164 121 102 164 126 102 165 103 83 144 116 94 159
++127 106 167 127 106 167 154 134 184 236 233 239 238 178 14 238 178 14
++210 150 10 138 93 6 14 14 14 2 2 6 2 2 6 2 2 6
++6 6 6 63 43 6 198 138 10 238 178 14 238 178 14 238 183 13
++126 114 90 58 58 58 22 22 22 6 6 6 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 30 30 30 70 70 70 179 134 43 226 171 11
++238 183 13 242 186 14 242 186 14 246 186 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 234 193 17 94 70 30 2 2 2 2 2 6 2 2 6
++66 66 66 229 226 233 170 156 193 147 132 180 170 156 193 207 201 219
++219 220 223 219 220 223 138 131 154 128 114 172 134 114 171 117 98 162
++121 102 164 121 102 164 121 102 164 120 106 166 116 94 159 127 106 167
++128 114 172 169 165 179 160 158 162 214 166 58 231 174 11 231 174 11
++218 158 10 194 134 10 160 108 10 118 82 10 101 78 10 118 82 10
++166 114 6 198 138 10 226 171 11 238 183 13 242 186 14 242 186 14
++162 146 94 78 78 78 34 34 34 14 14 14 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 30 30 30 78 78 78 190 142 34 226 166 10
++238 183 13 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 242 198 14 204 166 16 18 18 17 2 2 6 2 2 6
++2 2 6 38 38 38 160 158 162 177 168 195 142 134 183 155 141 181
++200 193 212 222 223 236 146 139 165 128 114 172 136 121 175 122 98 164
++122 98 164 122 98 164 126 102 165 114 90 155 122 98 164 128 114 172
++196 186 211 210 206 186 200 193 212 206 162 42 226 171 11 238 178 14
++226 166 10 204 146 10 204 146 10 194 134 10 186 134 10 198 138 10
++210 150 10 231 174 11 242 186 14 246 190 14 246 190 14 242 186 14
++226 171 11 126 114 90 62 62 62 30 30 30 14 14 14 6 6 6
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 30 30 30 78 78 78 179 134 43 226 166 10
++238 183 13 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 242 198 14 138 102 14 2 2 6 2 2 6
++2 2 6 2 2 6 78 78 78 250 250 250 196 186 211 147 132 180
++154 134 184 207 201 219 169 165 179 136 121 175 136 121 175 122 98 164
++126 102 165 122 98 164 114 90 155 121 102 164 134 120 165 213 206 226
++250 250 250 219 220 223 194 193 197 190 150 46 216 162 10 238 178 14
++231 174 11 226 166 10 218 158 10 214 154 10 214 154 10 218 158 10
++226 171 11 238 183 13 246 190 14 246 190 14 246 190 14 246 190 14
++242 186 14 206 162 42 102 98 90 58 58 58 30 30 30 14 14 14
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 30 30 30 74 74 74 179 134 43 218 158 10
++238 178 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 186 14 242 198 14 226 186 14 63 43 6 2 2 6
++2 2 6 2 2 6 22 22 22 239 238 242 254 254 254 213 206 226
++157 140 187 147 132 180 155 141 181 136 121 175 136 121 175 121 102 164
++117 98 162 116 94 159 127 106 167 147 126 185 226 218 234 250 250 250
++250 250 250 222 223 236 190 190 190 179 134 43 218 158 10 238 178 14
++238 183 13 238 178 14 231 174 11 226 166 10 226 171 11 231 174 11
++238 178 14 242 186 14 246 190 14 246 190 14 246 190 14 246 190 14
++238 183 13 238 183 13 206 162 42 107 107 108 66 66 66 34 34 34
++14 14 14 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 26 26 26 70 70 70 162 134 66 210 150 10
++238 178 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 186 14 234 193 17 188 146 14 14 14 14
++2 2 6 2 2 6 46 46 46 246 246 246 254 254 254 254 254 254
++229 226 233 157 140 187 147 132 180 136 121 175 127 110 169 116 94 159
++121 102 164 121 102 164 162 146 182 236 233 239 254 254 254 254 254 254
++254 254 254 219 220 223 87 86 85 160 108 10 218 158 10 238 178 14
++242 186 14 246 186 14 242 186 14 238 183 13 238 183 13 242 186 14
++242 186 14 242 186 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 242 186 14 226 171 11 142 122 74 66 66 66
++30 30 30 10 10 10 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 26 26 26 70 70 70 162 134 66 210 150 10
++238 178 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 234 193 17 122 94 10
++30 30 30 107 107 108 219 220 223 254 254 254 250 250 250 250 250 250
++250 250 250 216 211 227 118 106 138 147 132 180 134 114 171 126 102 165
++127 106 167 177 168 195 250 250 250 254 254 254 254 254 254 254 254 254
++242 242 242 82 82 82 14 14 14 160 108 10 218 158 10 238 178 14
++242 186 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 238 183 13 162 134 66
++46 46 46 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 10 10 10 30 30 30 78 78 78 162 134 66 210 150 10
++238 178 14 242 186 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 242 198 14 214 174 14
++186 174 146 254 254 254 254 254 254 254 254 254 254 254 254 254 254 254
++254 254 254 250 250 250 250 250 250 196 186 211 136 121 175 134 114 171
++200 193 212 254 254 254 254 254 254 254 254 254 250 250 250 219 220 223
++58 58 58 2 2 2 18 18 17 166 114 6 218 158 10 231 174 11
++246 186 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 186 14 242 186 14 190 150 46
++54 54 55 22 22 22 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 14 14 14 38 38 38 87 86 85 179 134 43 214 154 10
++238 178 14 246 186 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 234 193 17
++188 146 14 215 214 215 250 250 250 254 254 254 254 254 254 254 254 254
++254 254 254 254 254 254 254 254 254 250 250 250 216 211 227 226 218 234
++250 250 250 254 254 254 254 254 254 250 250 250 173 173 174 26 26 26
++2 2 2 2 2 2 44 31 8 160 108 10 216 162 10 242 186 14
++246 186 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 238 178 14 226 166 10 142 122 74
++46 46 46 18 18 17 6 6 6 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 18 18 17 50 50 50 107 107 108 186 134 10 226 166 10
++242 186 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 226 186 14
++216 162 10 141 110 47 229 226 233 254 254 254 254 254 254 250 250 250
++254 254 254 254 254 254 254 254 254 250 250 250 250 250 250 254 254 254
++254 254 254 250 250 250 199 199 199 62 62 62 2 2 2 2 2 2
++2 2 2 2 2 6 44 31 8 160 108 10 216 162 10 238 183 13
++246 186 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 242 186 14 231 174 11 214 154 10 154 122 54 66 66 66
++30 30 30 10 10 10 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 22 22 22 54 54 55 154 122 54 204 146 10 231 174 11
++242 186 14 246 186 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 242 186 14 238 178 14
++216 162 10 160 108 10 63 43 6 134 133 135 219 220 223 250 250 250
++254 254 254 254 254 254 254 254 254 250 250 250 242 242 242 209 208 212
++141 139 143 66 66 66 6 6 6 6 2 7 2 2 6 2 2 6
++2 2 6 2 2 2 63 43 6 160 108 10 218 158 10 238 178 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 238 183 13
++231 174 11 218 158 10 190 142 34 126 114 90 70 70 70 38 38 38
++18 18 17 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 22 22 22 62 62 62 164 122 42 204 146 10 226 166 10
++238 178 14 238 183 13 238 183 13 242 186 14 246 186 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 238 178 14
++216 162 10 173 119 7 82 54 6 2 2 2 6 6 6 30 30 30
++54 54 55 62 62 62 50 50 50 38 38 38 18 18 17 6 6 6
++6 2 2 2 2 2 2 2 2 2 2 6 2 2 6 2 2 6
++2 2 6 6 6 6 82 54 6 166 114 6 214 154 10 238 178 14
++246 190 14 246 190 14 246 190 14 246 190 14 246 190 14 246 190 14
++246 190 14 246 190 14 238 183 13 238 183 13 226 171 11 210 150 10
++179 134 43 126 114 90 78 78 78 50 50 50 34 34 34 18 18 17
++6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 18 18 17 46 46 46 164 122 42 194 134 10 198 138 10
++218 158 10 216 162 10 226 166 10 226 171 11 231 174 11 238 178 14
++238 183 13 238 183 13 242 186 14 246 186 14 246 190 14 246 190 14
++246 190 14 246 190 14 246 190 14 246 190 14 242 186 14 231 174 11
++210 150 10 160 108 10 104 70 6 10 10 10 6 2 2 2 2 2
++2 2 2 2 2 2 6 2 2 6 2 2 2 2 2 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 6 6 6 90 62 6 166 114 6 204 146 10 231 174 11
++242 186 14 246 190 14 246 190 14 246 190 14 246 186 14 242 186 14
++238 183 13 231 174 11 226 166 10 214 154 10 179 134 43 126 114 90
++87 86 85 58 58 58 38 38 38 22 22 22 10 10 10 6 6 6
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 14 14 14 34 34 34 66 66 66 141 110 47 158 118 10
++166 114 6 182 122 6 186 134 10 198 138 10 204 146 10 204 146 10
++210 150 10 216 162 10 226 166 10 231 174 11 238 183 13 246 186 14
++246 186 14 246 186 14 246 186 14 246 186 14 238 183 13 218 158 10
++186 134 10 154 98 6 104 70 6 14 14 14 2 2 2 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 2 2 6 2 2 6 2 2 6 2 2 6 2 2 6
++2 2 6 6 6 6 82 54 6 154 98 6 186 134 10 216 162 10
++238 178 14 238 183 13 246 186 14 242 186 14 238 183 13 231 174 11
++226 166 10 204 146 10 186 134 10 154 122 54 90 90 90 62 62 62
++42 42 42 22 22 22 14 14 14 6 6 6 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 18 18 17 34 34 34 62 62 62 78 78 78
++102 98 90 126 114 90 141 110 47 160 108 10 160 108 10 166 114 6
++173 119 7 182 122 6 186 134 10 198 138 10 210 150 10 216 162 10
++226 171 11 238 178 14 238 178 14 231 174 11 216 162 10 198 138 10
++160 108 10 127 82 6 90 62 6 10 10 10 2 2 6 2 2 6
++18 18 17 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
++38 38 38 38 38 38 38 38 38 38 38 38 26 26 26 2 2 6
++2 2 2 6 6 6 63 43 6 138 93 6 173 119 7 204 146 10
++216 162 10 231 174 11 231 174 11 231 174 11 216 162 10 210 150 10
++186 134 10 160 108 10 126 114 90 82 82 82 50 50 50 30 30 30
++14 14 14 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 14 14 14 22 22 22 34 34 34
++42 42 42 58 58 58 74 74 74 87 86 85 102 98 90 122 102 70
++124 98 46 122 86 26 138 93 6 154 98 6 160 108 10 182 122 6
++186 134 10 194 134 10 204 146 10 204 146 10 182 122 6 160 108 10
++134 86 6 104 70 6 44 31 8 54 54 55 107 107 108 102 98 90
++87 86 85 82 82 82 78 78 78 78 78 78 78 78 78 78 78 78
++78 78 78 78 78 78 78 78 78 82 82 82 87 86 85 94 94 94
++107 107 108 104 103 100 85 65 33 127 82 6 160 108 10 182 122 6
++186 134 10 204 146 10 204 146 10 204 146 10 194 134 10 173 119 7
++154 98 6 107 107 108 66 66 66 42 42 42 22 22 22 10 10 10
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 6 6 6 10 10 10
++14 14 14 22 22 22 30 30 30 38 38 38 50 50 50 62 62 62
++74 74 74 90 90 90 102 98 90 114 102 78 122 86 26 127 82 6
++138 93 6 154 98 6 154 98 6 154 98 6 134 86 6 118 82 10
++104 70 6 85 65 33 102 98 90 82 82 82 58 58 58 46 46 46
++38 38 38 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
++34 34 34 34 34 34 34 34 34 34 34 34 38 38 38 42 42 42
++54 54 55 82 82 82 91 83 66 90 62 6 127 82 6 160 108 10
++166 114 6 166 114 6 173 119 7 166 114 6 154 98 6 122 86 26
++102 98 90 62 62 62 34 34 34 18 18 17 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 6 6 6 10 10 10 18 18 17 22 22 22
++30 30 30 42 42 42 50 50 50 70 70 70 87 86 85 102 98 90
++104 84 56 104 70 6 104 70 6 104 70 6 104 70 6 90 62 6
++82 54 6 94 94 94 62 62 62 38 38 38 22 22 22 14 14 14
++10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
++6 6 6 10 10 10 10 10 10 10 10 10 10 10 10 14 14 14
++22 22 22 42 42 42 70 70 70 91 83 66 82 54 6 104 70 6
++127 82 6 138 93 6 134 86 6 118 82 10 104 84 56 87 86 85
++58 58 58 30 30 30 14 14 14 6 6 6 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6
++10 10 10 14 14 14 18 18 17 26 26 26 38 38 38 54 54 55
++74 74 74 87 86 85 91 83 66 91 83 66 91 83 66 87 86 85
++78 78 78 50 50 50 30 30 30 14 14 14 6 6 6 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++6 6 6 18 18 17 34 34 34 58 58 58 78 78 78 78 78 78
++91 83 66 91 83 66 91 83 66 91 83 66 74 74 74 50 50 50
++26 26 26 14 14 14 10 6 18 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 6 6 6 6 6 6 14 14 14 18 18 17
++30 30 30 38 38 38 46 46 46 50 50 50 46 46 46 42 42 42
++30 30 30 18 18 17 10 10 10 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 6 6 6 14 14 14 26 26 26 38 38 38 50 50 50
++54 54 55 58 58 58 54 54 55 42 42 42 30 30 30 18 18 17
++10 10 10 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6
++6 6 6 10 10 10 14 14 14 18 18 17 18 18 17 14 14 14
++10 10 10 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 6 6 6 14 14 14 18 18 17
++22 22 22 22 22 22 18 18 17 14 14 14 10 10 10 6 6 6
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
++2 2 2 2 2 2
+diff --git a/fs/Kconfig b/fs/Kconfig
+index 522469a..696a86f 100644
+--- a/fs/Kconfig
++++ b/fs/Kconfig
+@@ -485,6 +485,18 @@ config UDF_NLS
+ default y
+ depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y)
+
++config GCDVD_FS
++ tristate "GCDVD file system support"
++ depends on BROKEN
++ help
++ This is the filesystem used on commercial Gamecube games. Say Y if
++ you intend to mount GC DVD discs.
++
++ To compile this file system support as a module, choose M here: the
++ module will be called gcdvdfs
++
++ If unsure, say N.
++
+ endmenu
+ endif # BLOCK
+
+diff --git a/fs/Makefile b/fs/Makefile
+index d9f8afe..b36b461 100644
+--- a/fs/Makefile
++++ b/fs/Makefile
+@@ -83,6 +83,7 @@ obj-$(CONFIG_MINIX_FS) += minix/
+ obj-$(CONFIG_FAT_FS) += fat/
+ obj-$(CONFIG_BFS_FS) += bfs/
+ obj-$(CONFIG_ISO9660_FS) += isofs/
++obj-$(CONFIG_GCDVD_FS) += gcdvdfs/
+ obj-$(CONFIG_HFSPLUS_FS) += hfsplus/ # Before hfs to find wrapped HFS+
+ obj-$(CONFIG_HFS_FS) += hfs/
+ obj-$(CONFIG_ECRYPT_FS) += ecryptfs/
+diff --git a/fs/gcdvdfs/Makefile b/fs/gcdvdfs/Makefile
+new file mode 100644
+index 0000000..2ac5b5a
+--- /dev/null
++++ b/fs/gcdvdfs/Makefile
+@@ -0,0 +1,6 @@
++obj-$(CONFIG_GCDVD_FS) := gcdvdfs.o
++
++gcdvdfs-objs-y := main.o inode.o dir.o namei.o fst.o dol.o
++
++gcdvdfs-objs := $(gcdvdfs-objs-y)
++
+diff --git a/fs/gcdvdfs/dir.c b/fs/gcdvdfs/dir.c
+new file mode 100644
+index 0000000..51c7cff
+--- /dev/null
++++ b/fs/gcdvdfs/dir.c
+@@ -0,0 +1,120 @@
++/*
++ * fs/gcdvdfs/dir.c
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/fs.h>
++#include "fst.h"
++#include "dir.h"
++#include "inode.h"
++#include "namei.h"
++
++struct readdir_data
++{
++ struct gc_dvdfs_fst *fst;
++ struct file *filp;
++ filldir_t filldir;
++ void *dirent;
++ u32 idx;
++};
++
++static int gc_dvdfs_readdir_callback(struct gc_dvdfs_file_entry *pfe,void *param)
++{
++ struct readdir_data *rdd = (struct readdir_data*)param;
++ int len;
++ const char *pname;
++
++ if ((gc_dvdfs_valid_file_entry(rdd->fst,pfe) == 0) &&
++ (rdd->idx == rdd->filp->f_pos))
++ {
++ /* add this item to the list now */
++ pname = FILENAME(rdd->fst,pfe);
++ len = strlen(pname);
++
++ if (rdd->filldir(rdd->dirent,pname,len,rdd->filp->f_pos,
++ PFE_TO_INO(rdd->fst,pfe),
++ (pfe->type == FST_DIRECTORY) ? DT_DIR : DT_REG) < 0)
++ {
++ /* failure, so stop enumerating */
++ return -1;
++ }
++ rdd->filp->f_pos++;
++ }
++ /* increment count */
++ rdd->idx++;
++ return 0;
++}
++
++static int gc_dvdfs_readdir(struct file *filp,void *dirent,filldir_t filldir)
++{
++ struct inode *inode = filp->f_dentry->d_inode;
++ struct gc_dvdfs_fst *fst = (struct gc_dvdfs_fst*)inode->i_sb->s_fs_info;
++ struct gc_dvdfs_file_entry *pfe;
++ struct readdir_data rdd;
++ int i;
++
++ /* first entry is . */
++ switch ((u32)filp->f_pos)
++ {
++ case 0:
++ if (filldir(dirent,".",1,0,inode->i_ino,DT_DIR) < 0)
++ return 0;
++ filp->f_pos = 1;
++ /* fall through */
++ case 1:
++ if (filldir(dirent,"..",2,1,parent_ino(filp->f_dentry),DT_DIR) < 0)
++ return 0;
++ filp->f_pos = 2;
++ /* fall through */
++ default:
++ if (inode->i_ino == ROOT_INO)
++ {
++ for (i=filp->f_pos-2;i<num_root_dir_entries;++i)
++ {
++ if (filldir(dirent,root_dir_entries[i].name,
++ root_dir_entries[i].name_length,filp->f_pos,
++ root_dir_entries[i].ino,
++ root_dir_entries[i].filldir_type) < 0)
++ {
++ return 0;
++ }
++
++ filp->f_pos++;
++ }
++ }
++ else if (inode->i_ino >= DATA_INO)
++ {
++ /* use enumerate, the function will check for the FST_DIRECTORY flag */
++ pfe = INO_TO_PFE(fst,inode->i_ino);
++
++ rdd.fst = fst;
++ rdd.filp = filp;
++ rdd.filldir = filldir;
++ rdd.dirent = dirent;
++ rdd.idx = 2;
++
++ gc_dvdfs_enumerate(fst,pfe,gc_dvdfs_readdir_callback,&rdd);
++ }
++ }
++ return 0;
++}
++
++struct file_operations gc_dvdfs_dir_operations =
++{
++ .read = generic_read_dir,
++ .readdir = gc_dvdfs_readdir,
++};
++
++struct inode_operations gc_dvdfs_dir_inode_operations =
++{
++ .lookup = gc_dvdfs_lookup,
++};
++
+diff --git a/fs/gcdvdfs/dir.h b/fs/gcdvdfs/dir.h
+new file mode 100644
+index 0000000..f415510
+--- /dev/null
++++ b/fs/gcdvdfs/dir.h
+@@ -0,0 +1,20 @@
++/*
++ * fs/gcdvdfs/dir.h
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 __dir__gc__
++#define __dir__gc__
++
++extern struct file_operations gc_dvdfs_dir_operations;
++extern struct inode_operations gc_dvdfs_dir_inode_operations;
++
++#endif
+diff --git a/fs/gcdvdfs/dol.c b/fs/gcdvdfs/dol.c
+new file mode 100644
+index 0000000..c2dc6ac
+--- /dev/null
++++ b/fs/gcdvdfs/dol.c
+@@ -0,0 +1,63 @@
++/*
++ * fs/gcdvdfs/dol.c
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 "fst.h"
++#include "dol.h"
++
++void gc_dvdfs_fix_raw_dol_header(struct gc_dvdfs_dol_header *pdh)
++{
++#ifdef __LITTLE_ENDIAN
++#define SWAP(a) (a) = be32_to_cpu(a)
++ unsigned int i;
++
++ for (i=0;i<7;++i)
++ {
++ SWAP(pdh->text_file_pos[i]);
++ SWAP(pdh->text_mem_pos[i]);
++ SWAP(pdh->text_section_size[i]);
++ }
++
++ for (i=0;i<11;++i)
++ {
++ SWAP(pdh->data_file_pos[i]);
++ SWAP(pdh->data_mem_pos[i]);
++ SWAP(pdh->data_section_size[i]);
++ }
++
++ SWAP(pdh->bss_mem_address);
++ SWAP(pdh->bss_size);
++ SWAP(pdh->entry_point);
++#endif
++}
++
++u32 gc_dvdfs_get_dol_file_size(struct gc_dvdfs_dol_header *pdh)
++{
++ unsigned int tmp;
++ unsigned int i;
++ unsigned int max = 0;
++
++ for (i=0;i<7;++i)
++ {
++ tmp = pdh->text_file_pos[i] + pdh->text_section_size[i];
++ if (tmp > max)
++ max = tmp;
++ }
++ for (i=0;i<11;++i)
++ {
++ tmp = pdh->data_file_pos[i] + pdh->data_section_size[i];
++ if (tmp > max)
++ max = tmp;
++ }
++ return max;
++}
+diff --git a/fs/gcdvdfs/dol.h b/fs/gcdvdfs/dol.h
+new file mode 100644
+index 0000000..32c6b43
+--- /dev/null
++++ b/fs/gcdvdfs/dol.h
+@@ -0,0 +1,20 @@
++/*
++ * fs/gcdvdfs/dol.h
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 __dol__h
++#define __dol__h
++
++void gc_dvdfs_fix_raw_dol_header(struct gc_dvdfs_dol_header *pdh);
++
++u32 gc_dvdfs_get_dol_file_size(struct gc_dvdfs_dol_header *pdh);
++
++#endif
+diff --git a/fs/gcdvdfs/fst.c b/fs/gcdvdfs/fst.c
+new file mode 100644
+index 0000000..a2f8cda
+--- /dev/null
++++ b/fs/gcdvdfs/fst.c
+@@ -0,0 +1,105 @@
++/*
++ * fs/gcdvdfs/fst.c
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/errno.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include "fst.h"
++
++int gc_dvdfs_valid_file_entry(struct gc_dvdfs_fst *fst,struct gc_dvdfs_file_entry *pfe)
++{
++ unsigned int foffset = FILENAME_OFFSET(pfe);
++
++ if (((pfe->type != FST_FILE) && (pfe->type != FST_DIRECTORY)) ||
++ (foffset >= fst->str_table_size))
++ {
++ return -EINVAL;
++ }
++ return 0;
++}
++
++int gc_dvdfs_enumerate(struct gc_dvdfs_fst *fst,struct gc_dvdfs_file_entry *pfe,int (*callback)(struct gc_dvdfs_file_entry *pfe,void *param),void *param)
++{
++ /* get the filename */
++ unsigned int i;
++ unsigned int entries;
++ int r;
++
++ /* only enumerate directories */
++ if (pfe->type != FST_DIRECTORY)
++ {
++ return -EINVAL;
++ }
++
++ entries = pfe->dir.offset_next;
++ i=((unsigned int)pfe - (unsigned int)fst->root)/sizeof(struct gc_dvdfs_file_entry) + 1;
++ /* check if out of bounds */
++ if (i >= MAX_ENTRIES(fst) || entries > MAX_ENTRIES(fst))
++ {
++ return -EINVAL;
++ }
++
++ /* loop through the files */
++ while (i < entries)
++ {
++ /* do the callback */
++ if ((r=callback(fst->root + i,param)) < 0)
++ {
++ return r;
++ }
++
++ if (fst->root[i].type == FST_DIRECTORY)
++ {
++ if (fst->root[i].dir.offset_next <= i)
++ {
++ /* we're going backwards or looping, abort */
++ return -EINVAL;
++ }
++ i = fst->root[i].dir.offset_next;
++ }
++ else
++ {
++ ++i;
++ }
++ }
++ return 0;
++}
++
++static int gc_dvdfs_get_directory_info_callback(struct gc_dvdfs_file_entry *pfe,void *param)
++{
++ struct gc_dvdfs_directory_info *di = (struct gc_dvdfs_directory_info*)param;
++
++ if (gc_dvdfs_valid_file_entry(di->fst,pfe) == 0)
++ {
++ if (pfe->type == FST_FILE)
++ {
++ di->total_files++;
++ di->total_file_size += pfe->file.length;
++ }
++ else if (pfe->type == FST_DIRECTORY)
++ {
++ di->total_directories++;
++ }
++ }
++ return 0;
++}
++
++int gc_dvdfs_get_directory_info(struct gc_dvdfs_directory_info *di)
++{
++ di->total_files = 0;
++ di->total_directories = 0;
++ di->total_file_size = 0;
++
++ return gc_dvdfs_enumerate(di->fst,di->pfe,gc_dvdfs_get_directory_info_callback,di);
++}
+diff --git a/fs/gcdvdfs/fst.h b/fs/gcdvdfs/fst.h
+new file mode 100644
+index 0000000..ca3f5e6
+--- /dev/null
++++ b/fs/gcdvdfs/fst.h
+@@ -0,0 +1,126 @@
++/*
++ * fs/gcdvdfs/fst.h
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 __fst__h
++#define __fst__h
++
++#define FST_OFFSET 0x0424
++
++#define FST_FILE 0
++#define FST_DIRECTORY 1
++
++#pragma pack(1)
++struct gc_dvdfs_disc_header
++{
++ u32 game_code;
++ u16 maker_code;
++ u8 disc_id;
++ u8 version;
++ u8 streaming;
++ u8 streamBufSize;
++ u8 padding1[22];
++ u8 game_name[992];
++ u32 offset_dh_bin;
++ u32 addr_debug_monitor;
++ u8 padding2[24];
++ u32 offset_bootfile;
++ u32 offset_fst;
++ u32 fst_size;
++ u32 max_fst_size;
++ u32 user_position;
++ u32 user_length;
++ u8 padding[7];
++};
++
++struct gc_dvdfs_file_entry
++{
++ u8 type;
++ u8 offset_filename[3];
++ union
++ {
++ struct
++ {
++ u32 offset;
++ u32 length; /* if root, number of entries */
++ } file;
++ struct
++ {
++ u32 offset_parent;
++ u32 offset_next;
++ } dir;
++ };
++};
++
++#define APPLOADER_OFFSET 0x2440
++struct gc_dvdfs_apploader
++{
++ u8 version[10];
++ u8 padding[6];
++ u32 entry_point;
++ u32 size;
++};
++
++struct gc_dvdfs_dol_header
++{
++ u32 text_file_pos[7];
++ u32 data_file_pos[11];
++ u32 text_mem_pos[7];
++ u32 data_mem_pos[11];
++ u32 text_section_size[7];
++ u32 data_section_size[11];
++ u32 bss_mem_address;
++ u32 bss_size;
++ u32 entry_point;
++};
++
++#pragma pack()
++
++struct gc_dvdfs_fst;
++
++struct gc_dvdfs_directory_info
++{
++ struct gc_dvdfs_fst *fst;
++ struct gc_dvdfs_file_entry *pfe;
++
++ u32 total_files;
++ u32 total_directories;
++ u32 total_file_size;
++};
++
++struct gc_dvdfs_fst
++{
++ struct gc_dvdfs_file_entry *root;
++ const char *str_table;
++ u32 size;
++ u32 str_table_size;
++ u32 dol_length;
++ u32 dol_offset;
++ u32 total_files;
++ u32 total_directories;
++ u32 total_file_size;
++ struct gc_dvdfs_apploader apploader;
++ struct gc_dvdfs_dol_header dol_header;
++};
++
++#define MAX_ENTRIES(fst) (fst)->root->dir.offset_next
++#define FILENAME_OFFSET(pfe) (((pfe)->offset_filename[0] << 16) | \
++ ((pfe)->offset_filename[1] << 8) | \
++ (pfe)->offset_filename[2])
++
++#define FILENAME(fst,pfe) ((fst)->str_table + FILENAME_OFFSET(pfe))
++
++int gc_dvdfs_valid_file_entry(struct gc_dvdfs_fst *fst,struct gc_dvdfs_file_entry *pfe);
++int gc_dvdfs_enumerate(struct gc_dvdfs_fst *fst,struct gc_dvdfs_file_entry *pfe,int (*callback)(struct gc_dvdfs_file_entry *pfe,void *param),void *param);
++
++int gc_dvdfs_get_directory_info(struct gc_dvdfs_directory_info *di);
++
++#endif
+diff --git a/fs/gcdvdfs/inode.c b/fs/gcdvdfs/inode.c
+new file mode 100644
+index 0000000..ee490e1
+--- /dev/null
++++ b/fs/gcdvdfs/inode.c
+@@ -0,0 +1,105 @@
++/*
++ * fs/gcdvdfs/inode.c
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/fs.h>
++#include <linux/mm.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/vfs.h>
++#include <linux/highmem.h>
++#include <linux/blkdev.h>
++
++#include "fst.h"
++#include "inode.h"
++#include "dir.h"
++#include "namei.h"
++
++extern int gc_dvdfs_read_into_memory(struct super_block *s,u32 offset,
++ u32 size,unsigned char *data);
++
++static int gc_dvdfs_readpage(struct file *file,struct page *page)
++{
++ struct inode *inode = (struct inode*)page->mapping->host;
++ struct gc_dvdfs_fst *fst = (struct gc_dvdfs_fst*)inode->i_sb->s_fs_info;
++ struct gc_dvdfs_file_entry *pfe;
++ void *buf;
++ loff_t offset;
++ loff_t block_base;
++ loff_t len;
++ int ret = 0;
++
++ switch (inode->i_ino)
++ {
++ case ROOT_INO:
++ return -EIO;
++ case APPLOADER_INO:
++ block_base = APPLOADER_OFFSET;
++ break;
++ case BOOTDOL_INO:
++ block_base = fst->dol_offset;
++ break;
++ default:
++ pfe = INO_TO_PFE(fst,inode->i_ino);
++ block_base = pfe->file.offset;
++ break;
++ }
++
++ get_page(page);
++ ClearPageUptodate(page);
++ ClearPageError(page);
++ /* do a lock here */
++
++ offset = (page->index << PAGE_CACHE_SHIFT);
++ block_base += offset;
++ /* now map into kernel space and fill the page */
++ kmap(page);
++ buf = page_address(page);
++ if (offset < inode->i_size)
++ {
++ len = min((loff_t)PAGE_SIZE,inode->i_size - offset);
++ if (gc_dvdfs_read_into_memory(inode->i_sb,block_base,len,buf))
++ {
++ ret = -EIO;
++ }
++ }
++ flush_dcache_page(page);
++ kunmap(page);
++
++ /* unlock */
++
++ if (ret)
++ {
++ SetPageError(page);
++ }
++ else
++ {
++ SetPageUptodate(page);
++ }
++ page_cache_release(page);
++
++ unlock_page(page);
++ return ret;
++}
++
++struct address_space_operations gc_dvdfs_addr_operations =
++{
++ .readpage = gc_dvdfs_readpage,
++};
++
++struct root_dir_entry root_dir_entries[] = {
++ { "apploader", 9, DT_REG, APPLOADER_INO },
++ { "boot.dol" , 8, DT_REG, BOOTDOL_INO },
++ { "data" , 4, DT_DIR, DATA_INO }
++};
++
++unsigned int num_root_dir_entries = sizeof(root_dir_entries) / sizeof(root_dir_entries[0]);
+diff --git a/fs/gcdvdfs/inode.h b/fs/gcdvdfs/inode.h
+new file mode 100644
+index 0000000..9e33e76
+--- /dev/null
++++ b/fs/gcdvdfs/inode.h
+@@ -0,0 +1,37 @@
++/*
++ * fs/gcdvdfs/inode.h
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 __inode_fst__
++#define __inode_fst__
++
++#define ROOT_INO 1
++#define APPLOADER_INO 2
++#define BOOTDOL_INO 3
++#define DATA_INO 4
++
++#define PFE_TO_INO(fst,pfe) (((unsigned long)(pfe) - (unsigned long)(fst)->root)/sizeof(struct gc_dvdfs_file_entry)+DATA_INO)
++#define INO_TO_PFE(fst,ino) ((fst)->root + ((ino)-DATA_INO))
++
++struct root_dir_entry
++{
++ const char *name;
++ unsigned int name_length;
++ unsigned int filldir_type;
++ unsigned int ino;
++};
++
++extern struct root_dir_entry root_dir_entries[];
++extern unsigned int num_root_dir_entries;
++
++extern struct address_space_operations gc_dvdfs_addr_operations;
++
++#endif
+diff --git a/fs/gcdvdfs/main.c b/fs/gcdvdfs/main.c
+new file mode 100644
+index 0000000..a69807b
+--- /dev/null
++++ b/fs/gcdvdfs/main.c
+@@ -0,0 +1,346 @@
++/*
++ * fs/gcdvdfs/main.c
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/errno.h>
++#include <linux/vmalloc.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/genhd.h>
++#include <linux/buffer_head.h>
++#include <linux/statfs.h>
++#include "fst.h"
++#include "inode.h"
++#include "dir.h"
++#include "dol.h"
++
++#define GC_DVD_SECTOR_SIZE 2048
++#define GC_DVD_MAX_SECTORS 712880
++
++#define FST_MAGIC 0x78B39EA1
++#define DEBUG
++
++int gc_dvdfs_read_into_memory(struct super_block *s,u32 offset,u32 size,unsigned char *data)
++{
++ struct buffer_head *bh;
++ u32 sector;
++ u32 sector_end;
++ u32 byte_start;
++ u32 byte_len;
++ unsigned char *start;
++
++ sector = offset >> s->s_blocksize_bits;
++ sector_end = (offset + size - 1) >> s->s_blocksize_bits;
++ while (sector <= sector_end)
++ {
++ if (!(bh = sb_bread(s,sector)))
++ {
++ return -EINVAL;
++ }
++ /* store data into the memory buffer */
++ byte_start = sector << s->s_blocksize_bits;
++ byte_len = bh->b_size;
++ start = bh->b_data;
++ /* check if not in the middle */
++ if (byte_start < offset)
++ {
++ start = bh->b_data + (offset - byte_start);
++ byte_len -= (offset - byte_start);
++ }
++ /* check if we will overflow */
++ if (byte_len > size)
++ {
++ byte_len = size;
++ }
++ /* now copy the data */
++ memcpy(data,start,byte_len);
++ data += byte_len;
++ size -= byte_len;
++ /* move the sector along */
++ sector += (bh->b_size >> s->s_blocksize_bits);
++ brelse(bh);
++ }
++#ifdef DEBUG
++ if (size != 0)
++ {
++ printk(KERN_INFO "WARNING - read_into_memory still has a size value %u\n",
++ size);
++ }
++#endif
++ return 0;
++}
++
++static void gc_dvdfs_read_inode(struct inode *i)
++{
++ struct gc_dvdfs_directory_info di;
++ unsigned int size;
++
++ di.fst = (struct gc_dvdfs_fst*)i->i_sb->s_fs_info;
++ /* load the defaults for all inodes */
++ i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0;
++ i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0;
++ i->i_uid = 0;
++ i->i_gid = 0;
++ /* load based on type */
++ if (i->i_ino == ROOT_INO)
++ {
++ i->i_fop = &gc_dvdfs_dir_operations;
++ i->i_op = &gc_dvdfs_dir_inode_operations;
++ i->i_mode = S_IFDIR | 0111;
++ i->i_nlink = 3;
++ size = 0;
++ }
++ else
++ {
++ if ((i->i_ino >= DATA_INO) &&
++ (di.pfe = INO_TO_PFE(di.fst,i->i_ino)) &&
++ (di.pfe->type == FST_DIRECTORY))
++ {
++ i->i_fop = &gc_dvdfs_dir_operations;
++ i->i_op = &gc_dvdfs_dir_inode_operations;
++ i->i_mode = S_IFDIR | 0111;
++ /* compute the number of links */
++ gc_dvdfs_get_directory_info(&di);
++ i->i_nlink = 2 + di.total_directories;
++
++ size = sizeof(struct gc_dvdfs_file_entry);
++ }
++ else
++ {
++ i->i_fop = &generic_ro_fops;
++ i->i_data.a_ops = &gc_dvdfs_addr_operations;
++ i->i_mode = S_IFREG;
++ i->i_nlink = 1;
++ switch (i->i_ino)
++ {
++ case APPLOADER_INO:
++ size = di.fst->apploader.size;
++ break;
++ case BOOTDOL_INO:
++ size = di.fst->dol_length;
++ break;
++ default:
++ size = di.pfe->file.length;
++ break;
++ }
++ }
++ }
++
++ i->i_mode |= 0444;
++ i_size_write(i,size);
++}
++
++static int gc_dvdfs_statfs(struct dentry * dentry,struct kstatfs *sfs)
++{
++ struct super_block *sb = dentry->d_sb;
++ struct gc_dvdfs_fst *fst = (struct gc_dvdfs_fst*)sb->s_fs_info;
++
++ sfs->f_type = sb->s_magic;
++ sfs->f_bsize = sb->s_blocksize;
++ sfs->f_blocks = fst->total_file_size >> sb->s_blocksize_bits;
++ sfs->f_bfree = 0;
++ sfs->f_bavail = 0;
++ sfs->f_files = fst->total_files;
++ sfs->f_ffree = 0;
++ /* sfs->f_fsid = 0; */
++ sfs->f_namelen = 256;
++ sfs->f_frsize = 0;
++ return 0;
++}
++
++static void gc_dvdfs_free_fst(struct gc_dvdfs_fst *fst)
++{
++ if (fst)
++ {
++ vfree(fst);
++ }
++}
++
++static void gc_dvdfs_put_super(struct super_block *sb)
++{
++ /* ok free my FST */
++ if (sb->s_fs_info)
++ {
++ gc_dvdfs_free_fst((struct gc_dvdfs_fst*)sb->s_fs_info);
++ sb->s_fs_info = NULL;
++ }
++}
++
++static struct super_operations gcdvdfs_ops = {
++ .read_inode = gc_dvdfs_read_inode,
++ .put_super = gc_dvdfs_put_super,
++ .statfs = gc_dvdfs_statfs
++};
++
++static int gc_dvdfs_validate_fst(struct gc_dvdfs_fst *fst)
++{
++ unsigned int entries;
++ unsigned int i;
++
++ /* make sure the FST is completely valid */
++ if (fst->root->type != FST_DIRECTORY)
++ {
++ printk(KERN_ERR "gcdvdfs: Root entry is not a directory!\n");
++ return -EINVAL;
++ }
++
++ entries = be32_to_cpu(fst->root->dir.offset_next);
++ if (entries >= (fst->size / sizeof(struct gc_dvdfs_file_entry)))
++ {
++ printk(KERN_ERR "gcdvdfs: Too many entries, will overflow the FST!\n");
++ return -EINVAL;
++ }
++ /* ok let's convert all the data to native format and compute total size*/
++ for (i=0;i<entries;++i)
++ {
++#ifdef __LITTLE_ENDIAN
++ fst->root[i].file.length = be32_to_cpu(fst->root[i].file.length);
++ fst->root[i].file.offset = be32_to_cpu(fst->root[i].file.offset);
++#endif
++ if (fst->root[i].type == FST_FILE)
++ {
++ fst->total_files++;
++ fst->total_file_size += fst->root[i].file.length;
++ }
++ else if (fst->root[i].type == FST_DIRECTORY)
++ {
++ fst->total_directories++;
++ }
++ }
++
++ return 0;
++}
++
++static int gc_dvdfs_fill_super(struct super_block *s,void *data,int silent)
++{
++ struct buffer_head *bh;
++ struct gc_dvdfs_disc_header *dh;
++ struct gc_dvdfs_fst *fst;
++ unsigned int fst_offset;
++ unsigned int fst_size;
++ unsigned int dol_offset;
++
++ sb_min_blocksize(s,GC_DVD_SECTOR_SIZE);
++ /* s->s_maxbytes = 4*GC_DVD_SECTOR_SIZE; */
++
++ /* read the header and check results */
++ if (!(bh = sb_bread(s,0)))
++ {
++ return -EINVAL;
++ }
++ else if (bh->b_size < sizeof(struct gc_dvdfs_disc_header))
++ {
++ brelse(bh);
++ return -EINVAL;
++ }
++
++ /* read the FST into memory */
++ dh = (struct gc_dvdfs_disc_header*)bh->b_data;
++ fst_offset = be32_to_cpu(dh->offset_fst);
++ fst_size = be32_to_cpu(dh->fst_size);
++ dol_offset = be32_to_cpu(dh->offset_bootfile);
++ brelse(bh);
++
++ /* now allocate the fst */
++ if (!(fst = vmalloc(sizeof(struct gc_dvdfs_fst) + fst_size)))
++ {
++ return -ENOMEM;
++ }
++ fst->size = fst_size;
++ fst->root = (struct gc_dvdfs_file_entry*)((unsigned int)fst + sizeof(struct gc_dvdfs_fst));
++ /* now try to read the fst */
++ if (gc_dvdfs_read_into_memory(s,fst_offset,fst_size,(unsigned char*)fst->root))
++ {
++ printk(KERN_ERR "gcdvdfs: Unable to read FST into memory\n");
++ goto fst_error;
++ }
++ /* now try to read the apploader */
++ if (gc_dvdfs_read_into_memory(s,APPLOADER_OFFSET,sizeof(struct gc_dvdfs_apploader),(unsigned char*)&fst->apploader))
++ {
++ printk(KERN_ERR "gcdvdfs: Unable to read apploader into memory\n");
++ goto fst_error;
++ }
++ /* fix up the apploader */
++ fst->apploader.entry_point = be32_to_cpu(fst->apploader.entry_point);
++ fst->apploader.size = be32_to_cpu(fst->apploader.size);
++ /* now try to read the dol header */
++ if (gc_dvdfs_read_into_memory(s,dol_offset,sizeof(struct gc_dvdfs_dol_header),(unsigned char*)&fst->dol_header))
++ {
++ printk(KERN_ERR "gcdvdfs: Unable to read DOL Header\n");
++ goto fst_error;
++ }
++ gc_dvdfs_fix_raw_dol_header(&fst->dol_header);
++
++ fst->dol_offset = dol_offset;
++ fst->dol_length = gc_dvdfs_get_dol_file_size(&fst->dol_header);
++ /* compute the location of the string table */
++ fst_offset = be32_to_cpu(fst->root->dir.offset_next) * sizeof(struct gc_dvdfs_file_entry);
++ fst->str_table = (unsigned char*)fst->root + fst_offset;
++ fst->str_table_size = fst->size - fst_offset;
++ fst->total_files = 0;
++ fst->total_directories = 0;
++ fst->total_file_size = 0;
++ /* now validate the fst */
++ if (gc_dvdfs_validate_fst(fst))
++ {
++ goto fst_error;
++ }
++
++ /* store my FST in s->s_fs_info */
++ s->s_flags |= MS_RDONLY | MS_NOSUID | MS_NODEV | MS_NOATIME | MS_NODIRATIME;
++ s->s_fs_info = fst;
++ s->s_magic = FST_MAGIC;
++ s->s_op = &gcdvdfs_ops;
++ if (!(s->s_root = d_alloc_root(iget(s,ROOT_INO))))
++ {
++ goto fst_error;
++ }
++ return 0;
++
++ fst_error:
++ gc_dvdfs_free_fst(fst);
++ return -EINVAL;
++}
++
++static int gc_dvdfs_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,gc_dvdfs_fill_super,mnt);
++}
++
++static struct file_system_type gcdvdfs_type = {
++ .owner = THIS_MODULE,
++ .name = "gcdvdfs",
++ .get_sb = gc_dvdfs_get_sb,
++ /*.kill_sb = gc_dvdfs_kill_sb, */
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV
++};
++
++static int __init gc_dvdfs_init(void)
++{
++ printk(KERN_INFO "Gamecube DVD filesystem: by Todd Jeffreys\n");
++ return register_filesystem(&gcdvdfs_type);
++}
++
++static void __exit gc_dvdfs_exit(void)
++{
++ unregister_filesystem(&gcdvdfs_type);
++}
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Todd Jeffreys");
++MODULE_DESCRIPTION("Gamecube DVD filesystem");
++
++module_init(gc_dvdfs_init);
++module_exit(gc_dvdfs_exit);
+diff --git a/fs/gcdvdfs/namei.c b/fs/gcdvdfs/namei.c
+new file mode 100644
+index 0000000..2488406
+--- /dev/null
++++ b/fs/gcdvdfs/namei.c
+@@ -0,0 +1,100 @@
++/*
++ * fs/gcdvdfs/namei.c
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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/errno.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/genhd.h>
++#include <linux/buffer_head.h>
++#include <linux/statfs.h>
++#include "fst.h"
++#include "inode.h"
++
++/*
++ i is the parent directory
++ dentry I must complete
++ nid is lookup nameidata
++
++ Complete by calling d_add(dentry,inode)
++
++ If name is not found, inode must be set to null.
++
++ Return an error only when the lookup fails due to hardware/other error
++
++*/
++
++struct gc_dvdfs_lookup_data
++{
++ struct gc_dvdfs_fst *fst;
++ const char *pname;
++ unsigned long ino;
++};
++
++static int gc_dvdfs_lookup_callback(struct gc_dvdfs_file_entry *pfe,void *param)
++{
++ struct gc_dvdfs_lookup_data *data = (struct gc_dvdfs_lookup_data*)param;
++
++ if (gc_dvdfs_valid_file_entry(data->fst,pfe) == 0)
++ {
++ if (strcmp(FILENAME(data->fst,pfe),data->pname) == 0)
++ {
++ data->ino = PFE_TO_INO(data->fst,pfe);
++ /* this will stop enumeration */
++ return -1;
++ }
++ }
++ return 0;
++}
++
++struct dentry *gc_dvdfs_lookup(struct inode *dir,struct dentry *dentry,struct nameidata *nid)
++{
++ struct inode *inode = NULL;
++ struct gc_dvdfs_lookup_data data;
++ unsigned int i;
++
++ data.ino = 0;
++ data.pname = dentry->d_name.name;
++ /* handle special case of the root directory */
++ if (dir->i_ino == ROOT_INO)
++ {
++ for (i=0;i<num_root_dir_entries;++i)
++ {
++ if (strcmp(data.pname,root_dir_entries[i].name) == 0)
++ {
++ data.ino = root_dir_entries[i].ino;
++ break;
++ }
++ }
++ }
++ else if (dir->i_ino >= DATA_INO)
++ {
++ data.fst = (struct gc_dvdfs_fst*)dir->i_sb->s_fs_info;
++
++ gc_dvdfs_enumerate(data.fst,INO_TO_PFE(data.fst,dir->i_ino),
++ gc_dvdfs_lookup_callback,&data);
++ }
++
++ /* now convert the inode number into the structure */
++ if (data.ino)
++ {
++ if (!(inode = iget(dir->i_sb,data.ino)))
++ {
++ return ERR_PTR(-EACCES);
++ }
++ }
++
++ d_add(dentry,inode);
++ return NULL;
++}
+diff --git a/fs/gcdvdfs/namei.h b/fs/gcdvdfs/namei.h
+new file mode 100644
+index 0000000..19e3da9
+--- /dev/null
++++ b/fs/gcdvdfs/namei.h
+@@ -0,0 +1,18 @@
++/*
++ * fs/gcdvdfs/namei.h
++ *
++ * Nintendo GameCube Filesystem driver
++ * Copyright (C) 2006 The GameCube Linux Team
++ *
++ * This program is free software; you can redistribute 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 __gc_lookup__
++#define __gc_lookup__
++
++struct dentry *gc_dvdfs_lookup(struct inode *dir,struct dentry *dentry,struct nameidata *nid);
++
++#endif
+diff --git a/include/linux/exi.h b/include/linux/exi.h
+new file mode 100644
+index 0000000..e5fc002
+--- /dev/null
++++ b/include/linux/exi.h
+@@ -0,0 +1,331 @@
++/*
++ * include/linux/exi.h
++ *
++ * Nintendo GameCube EXpansion Interface definitions
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2004 Arthur Othieno <a.othieno@bluewin.ch>
++ * Copyright (C) 2004,2005 Todd Jeffreys <todd@voidpointer.org>
++ * Copyright (C) 2005,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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 __EXI_H
++#define __EXI_H
++
++#include <linux/device.h>
++#include <linux/io.h>
++
++
++struct exi_channel;
++
++/*
++ *
++ */
++struct exi_device_id {
++ unsigned int channel;
++#define EXI_CHANNEL_ANY (~0)
++
++ unsigned int device;
++#define EXI_DEVICE_ANY (~0)
++
++ u32 id;
++#define EXI_ID_INVALID (~0)
++#define EXI_ID_NONE (EXI_ID_INVALID-1)
++};
++
++/*
++ *
++ */
++struct exi_device {
++ struct exi_channel *exi_channel;
++
++ struct exi_device_id eid;
++ int frequency;
++
++ unsigned flags;
++#define EXI_DEV_DYING (1<<0)
++
++ struct device dev;
++};
++
++#define to_exi_device(n) container_of(n, struct exi_device, dev)
++
++struct exi_device *exi_get_exi_device(struct exi_channel *exi_channel,
++ int device);
++
++/*
++ *
++ */
++struct exi_driver {
++ char *name;
++ struct exi_device_id *eid_table;
++ int frequency;
++
++ int (*probe) (struct exi_device *dev);
++ void (*remove) (struct exi_device *dev);
++
++ struct device_driver driver;
++};
++
++#define to_exi_driver(n) container_of(n, struct exi_driver, driver)
++
++
++/*
++ * EXpansion Interface devices and drivers.
++ *
++ */
++extern struct exi_device *exi_device_get(struct exi_device *exi_device);
++extern void exi_device_put(struct exi_device *exi_device);
++
++extern int exi_driver_register(struct exi_driver *exi_driver);
++extern void exi_driver_unregister(struct exi_driver *exi_driver);
++
++static inline void *exi_get_drvdata(struct exi_device *exi_dev)
++{
++ return dev_get_drvdata(&exi_dev->dev);
++}
++
++static inline void exi_set_drvdata(struct exi_device *exi_dev, void *data)
++{
++ dev_set_drvdata(&exi_dev->dev, data);
++}
++
++static inline int exi_is_dying(struct exi_device *exi_device)
++{
++ return exi_device->flags & EXI_DEV_DYING;
++}
++
++static inline int exi_set_dying(struct exi_device *exi_device, int status)
++{
++ if (status)
++ exi_device->flags |= EXI_DEV_DYING;
++ else
++ exi_device->flags &= ~EXI_DEV_DYING;
++
++ return exi_is_dying(exi_device);
++}
++
++extern u32 exi_get_id(struct exi_device *exi_device);
++
++/*
++ * EXpansion Interface channels.
++ *
++ */
++
++extern void exi_channel_init(struct exi_channel *exi_channel,
++ unsigned int channel);
++
++extern struct exi_channel *to_exi_channel(unsigned int channel);
++extern unsigned int to_channel(struct exi_channel *exi_channel);
++
++static inline struct exi_channel *exi_get_exi_channel(struct exi_device *dev)
++{
++ return dev->exi_channel;
++}
++
++#define EXI_EVENT_IRQ 0
++#define EXI_EVENT_INSERT 1
++#define EXI_EVENT_TC 2
++
++typedef int (*exi_event_handler_t)(struct exi_channel *exi_channel,
++ unsigned int event_id, void *data);
++
++extern int exi_event_register(struct exi_channel *exi_channel,
++ unsigned int event_id,
++ struct exi_device *exi_device,
++ exi_event_handler_t handler, void *data,
++ unsigned int channel_mask);
++extern int exi_event_unregister(struct exi_channel *exi_channel,
++ unsigned int event_id);
++
++
++/*
++ * Commands.
++ *
++ *
++ */
++struct exi_command {
++ int opcode;
++#define EXI_OP_READ (0x00<<2) /* same as in EXIxCR */
++#define EXI_OP_WRITE (0x01<<2) /* same as in EXIxCR */
++#define EXI_OP_READWRITE (0x02<<2) /* same as in EXIxCR */
++
++#define EXI_OP_TAKE 0x0100
++#define EXI_OP_GIVE 0x0200
++#define EXI_OP_SELECT 0x0400
++#define EXI_OP_DESELECT 0x0800
++
++#define EXI_OP_NOP -1
++
++ unsigned long flags;
++#define EXI_CMD_NOWAIT (1<<0)
++#define EXI_CMD_NODMA (1<<1)
++#define EXI_CMD_IDI (1<<2)
++
++ void *data;
++ size_t len;
++ size_t bytes_left;
++
++ dma_addr_t dma_addr;
++ size_t dma_len;
++
++ void *done_data;
++ void (*done)(struct exi_command *cmd);
++
++ struct exi_channel *exi_channel;
++ struct exi_device *exi_device;
++};
++
++#include "../drivers/exi/exi-hw.h"
++
++static inline void exi_op_basic(struct exi_command *cmd,
++ struct exi_channel *exi_channel)
++{
++ memset(cmd, 0, sizeof(*cmd));
++ cmd->exi_channel = exi_channel;
++ cmd->exi_device = exi_channel_owner(exi_channel);
++}
++
++static inline void exi_op_nop(struct exi_command *cmd,
++ struct exi_channel *exi_channel)
++{
++ exi_op_basic(cmd, exi_channel);
++ cmd->opcode = EXI_OP_NOP;
++}
++
++static inline void exi_op_take(struct exi_command *cmd,
++ struct exi_device *exi_device)
++{
++ exi_op_basic(cmd, exi_device->exi_channel);
++ cmd->opcode = EXI_OP_TAKE;
++ cmd->exi_device = exi_device;
++}
++
++static inline void exi_op_give(struct exi_command *cmd,
++ struct exi_channel *exi_channel)
++{
++ exi_op_basic(cmd, exi_channel);
++ cmd->opcode = EXI_OP_GIVE;
++}
++
++static inline void exi_op_select(struct exi_command *cmd,
++ struct exi_device *exi_device)
++{
++ exi_op_basic(cmd, exi_device->exi_channel);
++ cmd->opcode = EXI_OP_SELECT;
++ cmd->exi_device = exi_device;
++}
++
++static inline void exi_op_deselect(struct exi_command *cmd,
++ struct exi_channel *exi_channel)
++{
++ exi_op_basic(cmd, exi_channel);
++ cmd->opcode = EXI_OP_DESELECT;
++}
++
++static inline void exi_op_transfer(struct exi_command *cmd,
++ struct exi_channel *exi_channel,
++ void *data, size_t len, int opcode)
++{
++ exi_op_basic(cmd, exi_channel);
++ cmd->opcode = opcode;
++ cmd->data = data;
++ cmd->len = len;
++}
++
++
++/*
++ * EXpansion Interface interfaces.
++ *
++ */
++
++/*
++ * Raw.
++ */
++extern void exi_select_raw(struct exi_channel *exi_channel,
++ unsigned int device, unsigned int freq);
++extern void exi_deselect_raw(struct exi_channel *exi_channel);
++
++#define exi_transfer_u8_raw __exi_transfer_raw_u8
++#define exi_transfer_u16_raw __exi_transfer_raw_u16
++#define exi_transfer_u32_raw __exi_transfer_raw_u32
++
++extern void exi_transfer_raw(struct exi_channel *exi_channel,
++ void *data, size_t len, int mode);
++extern void exi_dma_transfer_raw(struct exi_channel *channel,
++ dma_addr_t data, size_t len, int mode);
++
++/*
++ * Standard.
++ */
++
++int exi_take(struct exi_device *exi_device, int wait);
++int exi_give(struct exi_device *exi_device);
++void exi_select(struct exi_device *exi_device);
++void exi_deselect(struct exi_channel *exi_channel);
++void exi_transfer(struct exi_channel *exi_channel,
++ void *data, size_t len, int opcode, unsigned long flags);
++
++static inline int exi_dev_take(struct exi_device *exi_device)
++{
++ return exi_take(exi_device, 1);
++}
++
++static inline int exi_dev_try_take(struct exi_device *exi_device)
++{
++ return exi_take(exi_device, 0);
++}
++
++static inline int exi_dev_give(struct exi_device *exi_device)
++{
++ return exi_give(exi_device);
++}
++
++static inline void exi_dev_select(struct exi_device *exi_device)
++{
++ exi_select(exi_device);
++}
++
++static inline void exi_dev_deselect(struct exi_device *exi_device)
++{
++ exi_deselect(exi_device->exi_channel);
++}
++
++static inline void exi_dev_transfer(struct exi_device *exi_device,
++ void *data, size_t len, int opcode, unsigned long flags)
++{
++ exi_transfer(exi_device->exi_channel, data, len, opcode, flags);
++}
++
++static inline void exi_dev_read(struct exi_device *dev, void *data, size_t len)
++{
++ exi_dev_transfer(dev, data, len, EXI_OP_READ, 0);
++}
++
++static inline void exi_dev_write(struct exi_device *dev, void *data, size_t len)
++{
++ exi_dev_transfer(dev, data, len, EXI_OP_WRITE, 0);
++}
++
++static inline void exi_dev_readwrite(struct exi_device *dev, void *data,
++ size_t len)
++{
++ exi_dev_transfer(dev, data, len, EXI_OP_READWRITE, 0);
++}
++
++static inline int exi_dev_set_freq(struct exi_device *dev, unsigned int freq)
++{
++ BUG_ON(freq > EXI_MAX_FREQ);
++
++ dev->frequency = freq;
++
++ return freq;
++}
++
++#endif /* __EXI_H */
++
+diff --git a/include/linux/fb.h b/include/linux/fb.h
+index 75a81ea..98ffee5 100644
+--- a/include/linux/fb.h
++++ b/include/linux/fb.h
+@@ -38,6 +38,11 @@ struct dentry;
+ #define FBIOPUT_MODEINFO 0x4617
+ #define FBIOGET_DISPINFO 0x4618
+
++#define FBIOWAITRETRACE 0x4619
++#define FBIOWAITPEFINISH 0x4620
++#define FBIOVIRTTOPHYS 0x4621
++#define FBIOFLIP 0x4622
++#define FBIOFLIPHACK 0x4623 /* libsdl */
+
+ #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
+ #define FB_TYPE_PLANES 1 /* Non interleaved planes */
+@@ -896,7 +901,13 @@ struct fb_info {
+ #define fb_readq __raw_readq
+ #define fb_writeb __raw_writeb
+ #define fb_writew __raw_writew
+-#define fb_writel __raw_writel
++#ifndef CONFIG_FB_GAMECUBE /* XXX Why? O' why? */
++# define fb_writel __raw_writel
++#else
++ extern unsigned int vifb_writel(unsigned int, void *);
++# define fb_writel(b, addr) vifb_writel(b, addr)
++# define fb_writel_real(b, addr) (*(/*volatile*/ u32 __iomem *)(addr) = (b))
++#endif
+ #define fb_writeq __raw_writeq
+ #define fb_memset memset_io
+
+diff --git a/sound/ppc/Kconfig b/sound/ppc/Kconfig
+index 777de2b..82c5ad3 100644
+--- a/sound/ppc/Kconfig
++++ b/sound/ppc/Kconfig
+@@ -48,4 +48,22 @@ config SND_PS3_DEFAULT_START_DELAY
+ depends on SND_PS3
+ default "2000"
+
++config SND_GAMECUBE
++ tristate "Nintendo GameCube/Wii"
++ depends on SND && GAMECUBE_COMMON
++ help
++ Say Y here to include support for audio on the Nintendo GameCube/Wii.
++
++ To compile this driver as a module, choose M here: the module
++ will be called snd-gcn.
++
++config SND_GAMECUBE_MIC
++ tristate "Nintendo GameCube Microphone (DOL-022)"
++ depends on SND && GAMECUBE_EXI && EXPERIMENTAL
++ help
++ If you say yes to this option, support will be included for the
++ Nintendo GameCube Microphone (DOL-022).
++
++ If in doubt, say N here.
++
+ endif # SND_PPC
+diff --git a/sound/ppc/Makefile b/sound/ppc/Makefile
+index 679c45a..fa77f53 100644
+--- a/sound/ppc/Makefile
++++ b/sound/ppc/Makefile
+@@ -4,7 +4,10 @@
+ #
+
+ snd-powermac-objs := powermac.o pmac.o awacs.o burgundy.o daca.o tumbler.o keywest.o beep.o
++snd-gcn-objs := gcn-ai.o
+
+ # Toplevel Module Dependency
+ obj-$(CONFIG_SND_POWERMAC) += snd-powermac.o
+ obj-$(CONFIG_SND_PS3) += snd_ps3.o
++obj-$(CONFIG_SND_GAMECUBE) += snd-gcn.o
++obj-$(CONFIG_SND_GAMECUBE_MIC) += gcn-mic.o
+diff --git a/sound/ppc/gcn-ai.c b/sound/ppc/gcn-ai.c
+new file mode 100644
+index 0000000..92dc264
+--- /dev/null
++++ b/sound/ppc/gcn-ai.c
+@@ -0,0 +1,598 @@
++/*
++ * sound/ppc/gcn-ai.c
++ *
++ * Nintendo GameCube/Wii Audio Interface (AI) driver
++ * Copyright (C) 2004-2009 The GameCube Linux Team
++ * Copyright (C) 2007,2008,2009 Albert Herranz
++ *
++ * Based on work from mist, kirin, groepaz, Steve_-, isobel and others.
++ *
++ * This program is free software; you can redistribute 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/module.h>
++#include <linux/init.h>
++#include <linux/of_platform.h>
++#include <linux/interrupt.h>
++#include <linux/dma-mapping.h>
++#include <linux/io.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#define SNDRV_GET_ID
++#include <sound/initval.h>
++
++
++#define DRV_MODULE_NAME "gcn-ai"
++#define DRV_DESCRIPTION "Nintendo GameCube/Wii Audio Interface (AI) driver"
++#define DRV_AUTHOR "Michael Steil, " \
++ "(kirin), " \
++ "(groepaz), " \
++ "Steven Looman, " \
++ "Albert Herranz"
++
++static char ai_driver_version[] = "1.0i";
++
++#define drv_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++
++/*
++ * Hardware.
++ *
++ */
++
++/*
++ * DSP registers.
++ */
++#define AI_DSP_CSR 0x0a /* 16 bits */
++#define AI_CSR_RES (1<<0)
++#define AI_CSR_PIINT (1<<1)
++#define AI_CSR_HALT (1<<2)
++#define AI_CSR_AIDINT (1<<3)
++#define AI_CSR_AIDINTMASK (1<<4)
++#define AI_CSR_ARINT (1<<5)
++#define AI_CSR_ARINTMASK (1<<6)
++#define AI_CSR_DSPINT (1<<7)
++#define AI_CSR_DSPINTMASK (1<<8)
++#define AI_CSR_DSPDMA (1<<9)
++#define AI_CSR_RESETXXX (1<<11)
++
++#define AI_DSP_DMA_ADDRH 0x30 /* 16 bits */
++
++#define AI_DSP_DMA_ADDRL 0x32 /* 16 bits */
++
++#define AI_DSP_DMA_CTLLEN 0x36 /* 16 bits */
++#define AI_CTLLEN_PLAY (1<<15)
++
++#define AI_DSP_DMA_LEFT 0x3a /* 16 bits */
++
++/*
++ * AI registers.
++ */
++#define AI_AICR 0x00 /* 32 bits */
++#define AI_AICR_RATE (1<<6)
++
++
++/*
++ * Sound chip.
++ */
++struct snd_gcn {
++ struct snd_card *card;
++ struct snd_pcm *pcm;
++ struct snd_pcm_substream *playback_substream;
++ struct snd_pcm_substream *capture_substream;
++
++ int start_play;
++ int stop_play;
++
++ dma_addr_t dma_addr;
++ size_t period_size;
++ int nperiods;
++ int cur_period;
++
++ void __iomem *dsp_base;
++ void __iomem *ai_base;
++ unsigned int irq;
++
++ struct device *dev;
++};
++
++
++/*
++ * Hardware functions.
++ *
++ */
++
++static void ai_dsp_load_sample(void __iomem *dsp_base,
++ void *addr, size_t size)
++{
++ u32 daddr = (unsigned long)addr;
++
++ out_be16(dsp_base + AI_DSP_DMA_ADDRH, daddr >> 16);
++ out_be16(dsp_base + AI_DSP_DMA_ADDRL, daddr & 0xffff);
++ out_be16(dsp_base + AI_DSP_DMA_CTLLEN,
++ (in_be16(dsp_base + AI_DSP_DMA_CTLLEN) & AI_CTLLEN_PLAY) |
++ size >> 5);
++}
++
++static void ai_dsp_start_sample(void __iomem *dsp_base)
++{
++ out_be16(dsp_base + AI_DSP_DMA_CTLLEN,
++ in_be16(dsp_base + AI_DSP_DMA_CTLLEN) | AI_CTLLEN_PLAY);
++}
++
++static void ai_dsp_stop_sample(void __iomem *dsp_base)
++{
++ out_be16(dsp_base + AI_DSP_DMA_CTLLEN,
++ in_be16(dsp_base + AI_DSP_DMA_CTLLEN) & ~AI_CTLLEN_PLAY);
++}
++
++static int ai_dsp_get_remaining_byte_count(void __iomem *dsp_base)
++{
++ return in_be16(dsp_base + AI_DSP_DMA_LEFT) << 5;
++}
++
++static void ai_enable_interrupts(void __iomem *dsp_base)
++{
++ unsigned long flags;
++
++ /* enable AI DMA and DSP interrupts */
++ local_irq_save(flags);
++ out_be16(dsp_base + AI_DSP_CSR,
++ in_be16(dsp_base + AI_DSP_CSR) |
++ AI_CSR_AIDINTMASK | AI_CSR_PIINT);
++ local_irq_restore(flags);
++}
++
++static void ai_disable_interrupts(void __iomem *dsp_base)
++{
++ unsigned long flags;
++
++ /* disable AI interrupts */
++ local_irq_save(flags);
++ out_be16(dsp_base + AI_DSP_CSR,
++ in_be16(dsp_base + AI_DSP_CSR) & ~AI_CSR_AIDINTMASK);
++ local_irq_restore(flags);
++}
++
++static void ai_set_rate(void __iomem *ai_base, int fortyeight)
++{
++ /* set rate to 48KHz or 32KHz */
++ if (fortyeight)
++ out_be32(ai_base + AI_AICR,
++ in_be32(ai_base + AI_AICR) & ~AI_AICR_RATE);
++ else
++ out_be32(ai_base + AI_AICR,
++ in_be32(ai_base + AI_AICR) | AI_AICR_RATE);
++}
++
++
++static int index = SNDRV_DEFAULT_IDX1; /* index 0-MAX */
++static char *id = SNDRV_DEFAULT_STR1; /* ID for this card */
++
++static struct snd_gcn *gcn_audio;
++
++static struct snd_pcm_hardware snd_gcn_playback = {
++ .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
++ SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP_VALID),
++ .formats = SNDRV_PCM_FMTBIT_S16_BE,
++ .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000,
++ .rate_min = 32000,
++ .rate_max = 48000,
++ .channels_min = 2,
++ .channels_max = 2,
++ .buffer_bytes_max = 32768,
++ .period_bytes_min = 32,
++ .period_bytes_max = 32768,
++ .periods_min = 1,
++ .periods_max = 1024,
++};
++
++static int snd_gcn_open(struct snd_pcm_substream *substream)
++{
++ struct snd_gcn *chip = snd_pcm_substream_chip(substream);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++
++ chip->playback_substream = substream;
++ runtime->hw = snd_gcn_playback;
++
++ /* align to 32 bytes */
++ snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
++ 32);
++ snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
++ 32);
++
++ return 0;
++}
++
++static int snd_gcn_close(struct snd_pcm_substream *substream)
++{
++ struct snd_gcn *chip = snd_pcm_substream_chip(substream);
++
++ chip->playback_substream = NULL;
++ return 0;
++}
++
++static int snd_gcn_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *hw_params)
++{
++ return snd_pcm_lib_malloc_pages(substream,
++ params_buffer_bytes(hw_params));
++}
++
++static int snd_gcn_hw_free(struct snd_pcm_substream *substream)
++{
++ return snd_pcm_lib_free_pages(substream);
++}
++
++static int snd_gcn_prepare(struct snd_pcm_substream *substream)
++{
++ struct snd_gcn *chip = snd_pcm_substream_chip(substream);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++
++ /* set requested sample rate */
++ switch (runtime->rate) {
++ case 32000:
++ ai_set_rate(chip->ai_base, 0);
++ break;
++ case 48000:
++ ai_set_rate(chip->ai_base, 1);
++ break;
++ default:
++ drv_printk(KERN_ERR, "unsupported rate %i\n", runtime->rate);
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static int snd_gcn_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ struct snd_gcn *chip = snd_pcm_substream_chip(substream);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ /* do something to start the PCM engine */
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
++ chip->period_size = snd_pcm_lib_period_bytes(substream);
++ chip->nperiods = snd_pcm_lib_buffer_bytes(substream) /
++ chip->period_size;
++ chip->cur_period = 0;
++ chip->stop_play = 0;
++ chip->start_play = 1;
++
++ chip->dma_addr = dma_map_single(chip->dev,
++ runtime->dma_area,
++ chip->period_size,
++ DMA_TO_DEVICE);
++ ai_dsp_load_sample(chip->dsp_base, runtime->dma_area,
++ chip->period_size);
++ ai_dsp_start_sample(chip->dsp_base);
++ }
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ chip->stop_play = 1;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static snd_pcm_uframes_t snd_gcn_pointer(struct snd_pcm_substream *substream)
++{
++ struct snd_gcn *chip = snd_pcm_substream_chip(substream);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ int left, bytes;
++
++ left = ai_dsp_get_remaining_byte_count(chip->dsp_base);
++ bytes = chip->period_size * (chip->cur_period + 1);
++
++ return bytes_to_frames(runtime, bytes - left);
++}
++
++static irqreturn_t snd_gcn_interrupt(int irq, void *dev)
++{
++ struct snd_gcn *chip = dev;
++ void *addr;
++ unsigned long flags;
++ u16 csr;
++
++ /*
++ * This is a shared interrupt. Do nothing if it ain't ours.
++ */
++ csr = in_be16(chip->dsp_base + AI_DSP_CSR);
++ if (!(csr & AI_CSR_AIDINT))
++ return IRQ_NONE;
++
++ if (chip->start_play) {
++ chip->start_play = 0;
++ } else {
++ /* stop current sample */
++ ai_dsp_stop_sample(chip->dsp_base);
++ dma_unmap_single(chip->dev, chip->dma_addr, chip->period_size,
++ DMA_TO_DEVICE);
++
++ /* load next sample if we are not stopping */
++ if (!chip->stop_play) {
++ if (chip->cur_period < (chip->nperiods - 1))
++ chip->cur_period++;
++ else
++ chip->cur_period = 0;
++
++ addr = chip->playback_substream->runtime->dma_area
++ + (chip->cur_period * chip->period_size);
++ chip->dma_addr = dma_map_single(chip->dev,
++ addr,
++ chip->period_size,
++ DMA_TO_DEVICE);
++ ai_dsp_load_sample(chip->dsp_base, addr,
++ chip->period_size);
++ ai_dsp_start_sample(chip->dsp_base);
++
++ snd_pcm_period_elapsed(chip->playback_substream);
++ }
++ }
++ /*
++ * Ack the AI DMA interrupt, going through lengths to only ack
++ * the audio part.
++ */
++ local_irq_save(flags);
++ csr = in_be16(chip->dsp_base + AI_DSP_CSR);
++ csr &= ~(AI_CSR_PIINT | AI_CSR_ARINT | AI_CSR_DSPINT);
++ out_be16(chip->dsp_base + AI_DSP_CSR, csr);
++ local_irq_restore(flags);
++
++ return IRQ_HANDLED;
++}
++
++
++static struct snd_pcm_ops snd_gcn_playback_ops = {
++ .open = snd_gcn_open,
++ .close = snd_gcn_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = snd_gcn_hw_params,
++ .hw_free = snd_gcn_hw_free,
++ .prepare = snd_gcn_prepare,
++ .trigger = snd_gcn_trigger,
++ .pointer = snd_gcn_pointer,
++};
++
++static int __devinit snd_gcn_new_pcm(struct snd_gcn *chip)
++{
++ struct snd_pcm *pcm;
++ int retval;
++
++ retval = snd_pcm_new(chip->card, chip->card->shortname, 0, 1, 0, &pcm);
++ if (retval < 0)
++ return retval;
++
++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
++ &snd_gcn_playback_ops);
++
++ /* preallocate 64k buffer */
++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS,
++ snd_dma_continuous_data
++ (GFP_KERNEL), 64 * 1024,
++ 64 * 1024);
++
++ pcm->info_flags = 0;
++ pcm->private_data = chip;
++ strcpy(pcm->name, chip->card->shortname);
++
++ chip->pcm = pcm;
++
++ return 0;
++}
++
++static void ai_shutdown(struct snd_gcn *chip)
++{
++ ai_dsp_stop_sample(chip->dsp_base);
++ ai_disable_interrupts(chip->dsp_base);
++}
++
++static int __devinit ai_init(struct snd_gcn *chip,
++ struct resource *dsp, struct resource *ai,
++ unsigned int irq)
++{
++ struct snd_card *card;
++ int retval;
++
++ chip->dsp_base = ioremap(dsp->start, dsp->end - dsp->start + 1);
++ chip->ai_base = ioremap(ai->start, ai->end - ai->start + 1);
++ chip->irq = irq;
++
++ chip->stop_play = 1;
++ card = chip->card;
++
++ strcpy(card->driver, DRV_MODULE_NAME);
++ strcpy(card->shortname, card->driver);
++ sprintf(card->longname, "Nintendo GameCube Audio Interface");
++
++ /* PCM */
++ retval = snd_gcn_new_pcm(chip);
++ if (retval < 0)
++ goto err_new_pcm;
++
++ retval = request_irq(chip->irq, snd_gcn_interrupt,
++ IRQF_DISABLED | IRQF_SHARED,
++ card->shortname, chip);
++ if (retval) {
++ drv_printk(KERN_ERR, "unable to request IRQ %d\n", chip->irq);
++ goto err_request_irq;
++ }
++ ai_enable_interrupts(chip->dsp_base);
++
++ gcn_audio = chip;
++ retval = snd_card_register(card);
++ if (retval) {
++ drv_printk(KERN_ERR, "failed to register card\n");
++ goto err_card_register;
++ }
++
++ return 0;
++
++err_card_register:
++ ai_disable_interrupts(chip->dsp_base);
++ free_irq(chip->irq, chip);
++err_request_irq:
++err_new_pcm:
++ iounmap(chip->dsp_base);
++ iounmap(chip->ai_base);
++ return retval;
++}
++
++static void ai_exit(struct snd_gcn *chip)
++{
++ ai_dsp_stop_sample(chip->dsp_base);
++ ai_disable_interrupts(chip->dsp_base);
++
++ free_irq(chip->irq, chip);
++ iounmap(chip->dsp_base);
++ iounmap(chip->ai_base);
++}
++
++
++/*
++ * Device interfaces.
++ *
++ */
++
++static int ai_do_shutdown(struct device *dev)
++{
++ struct snd_gcn *chip;
++
++ chip = dev_get_drvdata(dev);
++ if (chip) {
++ ai_shutdown(chip);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++static int __devinit ai_do_probe(struct device *dev,
++ struct resource *dsp, struct resource *ai,
++ unsigned int irq)
++{
++ struct snd_card *card;
++ struct snd_gcn *chip;
++ int retval;
++
++ card = snd_card_new(index, id, THIS_MODULE, sizeof(struct snd_gcn));
++ if (!card) {
++ drv_printk(KERN_ERR, "failed to allocate card\n");
++ return -ENOMEM;
++ }
++ chip = (struct snd_gcn *)card->private_data;
++ memset(chip, 0, sizeof(*chip));
++ chip->card = card;
++ dev_set_drvdata(dev, chip);
++ chip->dev = dev;
++
++ retval = ai_init(chip, dsp, ai, irq);
++ if (retval)
++ snd_card_free(card);
++
++ return retval;
++}
++
++static int ai_do_remove(struct device *dev)
++{
++ struct snd_gcn *chip;
++
++ chip = dev_get_drvdata(dev);
++ if (chip) {
++ ai_exit(chip);
++ dev_set_drvdata(dev, NULL);
++ snd_card_free(chip->card);
++ return 0;
++ }
++ return -ENODEV;
++}
++
++/*
++ * OF Platform device interfaces.
++ *
++ */
++
++static int __init ai_of_probe(struct of_device *odev,
++ const struct of_device_id *match)
++{
++ struct resource dsp, ai;
++ int retval;
++
++ retval = of_address_to_resource(odev->node, 0, &dsp);
++ if (retval) {
++ drv_printk(KERN_ERR, "no dsp io memory range found\n");
++ return -ENODEV;
++ }
++ retval = of_address_to_resource(odev->node, 1, &ai);
++ if (retval) {
++ drv_printk(KERN_ERR, "no ai io memory range found\n");
++ return -ENODEV;
++ }
++
++ return ai_do_probe(&odev->dev,
++ &dsp, &ai, irq_of_parse_and_map(odev->node, 0));
++}
++
++static int __exit ai_of_remove(struct of_device *odev)
++{
++ return ai_do_remove(&odev->dev);
++}
++
++static int ai_of_shutdown(struct of_device *odev)
++{
++ return ai_do_shutdown(&odev->dev);
++}
++
++
++static struct of_device_id ai_of_match[] = {
++ { .compatible = "nintendo,flipper-audio" },
++ { .compatible = "nintendo,hollywood-audio" },
++ { },
++};
++
++MODULE_DEVICE_TABLE(of, ai_of_match);
++
++static struct of_platform_driver ai_of_driver = {
++ .owner = THIS_MODULE,
++ .name = DRV_MODULE_NAME,
++ .match_table = ai_of_match,
++ .probe = ai_of_probe,
++ .remove = ai_of_remove,
++ .shutdown = ai_of_shutdown,
++};
++
++/*
++ * Module interfaces.
++ *
++ */
++
++static int __init ai_init_module(void)
++{
++ drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ ai_driver_version);
++
++ return of_register_platform_driver(&ai_of_driver);
++}
++
++static void __exit ai_exit_module(void)
++{
++ of_unregister_platform_driver(&ai_of_driver);
++}
++
++module_init(ai_init_module);
++module_exit(ai_exit_module);
++
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_LICENSE("GPL");
++
+diff --git a/sound/ppc/gcn-mic.c b/sound/ppc/gcn-mic.c
+new file mode 100644
+index 0000000..9445a46
+--- /dev/null
++++ b/sound/ppc/gcn-mic.c
+@@ -0,0 +1,832 @@
++/*
++ * sound/ppc/gcn-mic.c
++ *
++ * Nintendo Microphone (DOL-022) driver
++ * Copyright (C) 2006-2009 The GameCube Linux Team
++ * Copyright (C) 2006,2007,2008,2009 Albert Herranz
++ *
++ * This program is free software; you can redistribute 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.
++ *
++ */
++
++#define MIC_DEBUG
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/kthread.h>
++#include <linux/delay.h>
++#include <linux/freezer.h>
++#include <linux/proc_fs.h>
++#include <linux/exi.h>
++
++#include <sound/core.h>
++#include <sound/pcm.h>
++#define SNDRV_GET_ID
++#include <sound/initval.h>
++
++#define DRV_MODULE_NAME "gcn-mic"
++#define DRV_DESCRIPTION "Nintendo Microphone (DOL-022) driver"
++#define DRV_AUTHOR "Albert Herranz"
++
++MODULE_AUTHOR(DRV_AUTHOR);
++MODULE_DESCRIPTION(DRV_DESCRIPTION);
++MODULE_LICENSE("GPL");
++
++static char mic_driver_version[] = "0.1i";
++
++#define mic_printk(level, format, arg...) \
++ printk(level DRV_MODULE_NAME ": " format , ## arg)
++
++#ifdef MIC_DEBUG
++# define DBG(fmt, args...) \
++ printk(KERN_ERR "%s: " fmt, __func__ , ## args)
++#else
++# define DBG(fmt, args...)
++#endif
++
++
++#define MIC_EXI_ID 0x0a000000
++
++#define MIC_SLOTA_CHANNEL 0 /* EXI0xxx */
++#define MIC_SLOTA_DEVICE 0 /* chip select, EXI0CSB0 */
++
++#define MIC_SLOTB_CHANNEL 1 /* EXI1xxx */
++#define MIC_SLOTB_DEVICE 0 /* chip select, EXI1CSB0 */
++
++#define MIC_SPI_CLK_IDX EXI_CLK_16MHZ
++
++
++struct mic_device {
++ spinlock_t lock;
++ unsigned long flags;
++
++ u16 status;
++ u16 control;
++#define MIC_CTL_RATE_MASK (0x3<<11)
++#define MIC_CTL_RATE_11025 (0x0<<11)
++#define MIC_CTL_RATE_22050 (0x1<<11)
++#define MIC_CTL_RATE_44100 (0x2<<11)
++#define MIC_CTL_PERIOD_MASK (0x3<<13)
++#define MIC_CTL_PERIOD_32 (0x0<<13)
++#define MIC_CTL_PERIOD_64 (0x1<<13)
++#define MIC_CTL_PERIOD_128 (0x2<<13)
++#define MIC_CTL_START_SAMPLING (1<<15)
++
++ struct task_struct *io_thread;
++ wait_queue_head_t io_waitq;
++ atomic_t io_pending;
++
++ struct snd_card *card;
++ struct snd_pcm *pcm;
++
++ struct snd_pcm_substream *c_substream;
++ u8 *c_orig, *c_cur;
++ int c_left;
++
++ int running;
++
++#ifdef CONFIG_PROC_FS
++ struct proc_dir_entry *proc;
++#endif /* CONFIG_PROC_FS */
++
++ int refcnt;
++ struct exi_device *exi_device;
++};
++
++
++/*
++ *
++ */
++static void mic_hey(struct mic_device *dev)
++{
++ struct exi_device *exi_device = dev->exi_device;
++ u8 cmd = 0xff;
++
++ exi_dev_select(exi_device);
++ exi_dev_write(exi_device, &cmd, sizeof(cmd));
++ exi_dev_deselect(exi_device);
++}
++
++/*
++ *
++ */
++static int mic_get_status(struct mic_device *dev)
++{
++ struct exi_device *exi_device = dev->exi_device;
++ u8 cmd = 0x40;
++
++ exi_dev_select(exi_device);
++ exi_dev_write(exi_device, &cmd, sizeof(cmd));
++ exi_dev_read(exi_device, &dev->status, sizeof(dev->status));
++ exi_dev_deselect(exi_device);
++
++ return dev->status;
++}
++
++/*
++ *
++ */
++static void mic_control(struct mic_device *dev)
++{
++ struct exi_device *exi_device = dev->exi_device;
++ u8 cmd[3];
++
++ cmd[0] = 0x80;
++ cmd[1] = dev->control >> 8;
++ cmd[2] = dev->control & 0xff;
++
++ DBG("control 0x80%02x%02x\n", cmd[1], cmd[2]);
++
++ exi_dev_select(exi_device);
++ exi_dev_write(exi_device, cmd, sizeof(cmd));
++ exi_dev_deselect(exi_device);
++
++}
++
++/*
++ *
++ */
++static void mic_read_period(struct mic_device *dev, void *buf, size_t len)
++{
++ struct exi_device *exi_device = dev->exi_device;
++ u8 cmd = 0x20;
++
++ exi_dev_select(exi_device);
++ exi_dev_write(exi_device, &cmd, sizeof(cmd));
++ exi_dev_read(exi_device, buf, len);
++ exi_dev_deselect(exi_device);
++
++/* DBG("mic cmd 0x20\n"); */
++}
++
++/*
++ *
++ */
++static void mic_enable_sampling(struct mic_device *dev, int enable)
++{
++ if (enable)
++ dev->control |= MIC_CTL_START_SAMPLING;
++ else
++ dev->control &= ~MIC_CTL_START_SAMPLING;
++}
++
++/*
++ *
++ */
++static int mic_set_sample_rate(struct mic_device *dev, int rate)
++{
++ u16 control;
++
++ switch (rate) {
++ case 11025:
++ control = MIC_CTL_RATE_11025;
++ break;
++ case 22050:
++ control = MIC_CTL_RATE_22050;
++ break;
++ case 44100:
++ control = MIC_CTL_RATE_44100;
++ break;
++ default:
++ mic_printk(KERN_ERR, "unsupported rate: %d\n", rate);
++ return -EINVAL;
++ }
++ dev->control &= ~MIC_CTL_RATE_MASK;
++ dev->control |= control;
++ return 0;
++}
++
++/*
++ *
++ */
++static int mic_set_period(struct mic_device *dev, int period_bytes)
++{
++ u16 control;
++
++ switch (period_bytes) {
++ case 32:
++ control = MIC_CTL_PERIOD_32;
++ break;
++ case 64:
++ control = MIC_CTL_PERIOD_64;
++ break;
++ case 128:
++ control = MIC_CTL_PERIOD_128;
++ break;
++ default:
++ mic_printk(KERN_ERR, "unsupported period: %d bytes\n",
++ period_bytes);
++ return -EINVAL;
++ }
++ dev->control &= ~MIC_CTL_PERIOD_MASK;
++ dev->control |= control;
++ return 0;
++}
++
++/*
++ * /proc support
++ *
++ */
++
++/*
++ *
++ */
++static int mic_init_proc(struct mic_device *dev)
++{
++ return 0;
++}
++
++/*
++ *
++ */
++static void mic_exit_proc(struct mic_device *dev)
++{
++}
++
++
++
++/*
++ * Driver
++ *
++ */
++
++static int index = SNDRV_DEFAULT_IDX1;
++static char *id = SNDRV_DEFAULT_STR1;
++
++static struct snd_pcm_hardware mic_snd_capture = {
++#if 0
++ .info = (SNDRV_PCM_INFO_MMAP |
++ SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_NONINTERLEAVED |
++ SNDRV_PCM_INFO_BLOCK_TRANSFER |
++ SNDRV_PCM_INFO_MMAP_VALID),
++#endif
++ .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_NONINTERLEAVED),
++ .formats = SNDRV_PCM_FMTBIT_S16_BE,
++ .rates = SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_22050 |
++ SNDRV_PCM_RATE_44100,
++ .rate_min = 11025,
++ .rate_max = 44100,
++ .channels_min = 1,
++ .channels_max = 1,
++ .buffer_bytes_max = 32768,
++ .period_bytes_min = 32,
++ .period_bytes_max = 128,
++ .periods_min = 1,
++ .periods_max = 1024,
++};
++
++#if 0
++static unsigned int period_bytes[] = { 32, 64, 128 };
++static struct snd_pcm_hw_constraint_list constraints_period_bytes = {
++ .count = ARRAY_SIZE(period_bytes),
++ .list = period_bytes,
++ .mask = 0,
++};
++#endif
++
++/*
++ *
++ */
++static void mic_wakeup_io_thread(struct mic_device *dev)
++{
++ if (!IS_ERR(dev->io_thread)) {
++ atomic_inc(&dev->io_pending);
++ wake_up(&dev->io_waitq);
++ }
++}
++
++/*
++ *
++ */
++static void mic_stop_io_thread(struct mic_device *dev)
++{
++ if (!IS_ERR(dev->io_thread)) {
++ atomic_inc(&dev->io_pending);
++ kthread_stop(dev->io_thread);
++ }
++}
++
++/*
++ * Input/Output thread. Receives audio samples from the microphone.
++ */
++static int mic_io_thread(void *param)
++{
++ struct mic_device *dev = param;
++ struct snd_pcm_substream *substream;
++ int period_bytes;
++ u16 status;
++
++ set_user_nice(current, -20);
++ set_current_state(TASK_RUNNING);
++
++ for (;;) {
++ wait_event(dev->io_waitq, atomic_read(&dev->io_pending) > 0);
++ atomic_dec(&dev->io_pending);
++
++ if (kthread_should_stop())
++ break;
++
++ if (try_to_freeze())
++ continue;
++
++ exi_dev_take(dev->exi_device);
++ status = mic_get_status(dev);
++ if (dev->running) {
++ substream = dev->c_substream;
++
++ if (!dev->c_left) {
++ dev->c_cur = dev->c_orig;
++ dev->c_left =
++ snd_pcm_lib_buffer_bytes(substream);
++ }
++
++ period_bytes = snd_pcm_lib_period_bytes(substream);
++ if (period_bytes > dev->c_left)
++ period_bytes = dev->c_left;
++ mic_read_period(dev, dev->c_cur, period_bytes);
++ dev->c_cur += period_bytes;
++ dev->c_left -= period_bytes;
++
++ exi_dev_give(dev->exi_device);
++ snd_pcm_period_elapsed(substream);
++ exi_dev_take(dev->exi_device);
++
++ if (status & 0x0200) {
++ DBG("0x0200\n");
++ mic_hey(dev);
++ mic_enable_sampling(dev, 1);
++ mic_control(dev);
++ }
++ } else {
++ /* mic_enable_sampling(dev, 0); */
++ dev->control = 0;
++ mic_control(dev);
++ }
++ exi_dev_give(dev->exi_device);
++ }
++ return 0;
++}
++
++/*
++ *
++ */
++static int mic_event_handler(struct exi_channel *exi_channel,
++ unsigned int event, void *dev0)
++{
++ struct mic_device *dev = (struct mic_device *)dev0;
++
++ /* exi channel is not taken, no exi operations here please */
++ mic_wakeup_io_thread(dev);
++
++ return 0;
++}
++
++static int hw_rule_period_bytes_by_rate(struct snd_pcm_hw_params *params,
++ struct snd_pcm_hw_rule *rule)
++{
++ struct snd_interval *period_bytes =
++ hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_BYTES);
++ struct snd_interval *rate =
++ hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
++
++ DBG("rate: min %d, max %d\n", rate->min, rate->max);
++
++ if (rate->min == rate->max) {
++ if (rate->min >= 44100) {
++ struct snd_interval t = {
++ .min = 128,
++ .max = 128,
++ .integer = 1,
++ };
++ return snd_interval_refine(period_bytes, &t);
++ } else if (rate->min >= 22050) {
++ struct snd_interval t = {
++ .min = 32,
++ .max = 32,
++ .integer = 1,
++ };
++ return snd_interval_refine(period_bytes, &t);
++ } else {
++ struct snd_interval t = {
++ .min = 32,
++ .max = 32,
++ .integer = 1,
++ };
++ return snd_interval_refine(period_bytes, &t);
++ }
++ }
++ return 0;
++}
++
++static int mic_snd_pcm_capture_open(struct snd_pcm_substream *substream)
++{
++ struct mic_device *dev = snd_pcm_substream_chip(substream);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ unsigned long flags;
++ int retval;
++
++ DBG("enter\n");
++
++ spin_lock_irqsave(&dev->lock, flags);
++ dev->running = 0;
++ dev->c_substream = substream;
++ spin_unlock_irqrestore(&dev->lock, flags);
++
++ runtime->hw = mic_snd_capture;
++
++#if 0
++ /* only 32, 64 and 128 */
++ retval = snd_pcm_hw_constraint_list(runtime, 0,
++ SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
++ &constraints_period_bytes);
++ if (retval < 0)
++ return retval;
++#endif
++ snd_pcm_hw_rule_add(runtime, 0,
++ SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
++ hw_rule_period_bytes_by_rate, 0,
++ SNDRV_PCM_HW_PARAM_RATE, -1);
++
++ /* align to 32 bytes */
++ retval = snd_pcm_hw_constraint_step(runtime, 0,
++ SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
++ 32);
++ return retval;
++
++}
++
++static int mic_snd_pcm_capture_close(struct snd_pcm_substream *substream)
++{
++ struct mic_device *dev = snd_pcm_substream_chip(substream);
++ unsigned long flags;
++
++DBG("enter\n");
++
++ spin_lock_irqsave(&dev->lock, flags);
++ dev->running = 0;
++ dev->c_substream = NULL;
++ spin_unlock_irqrestore(&dev->lock, flags);
++
++ mic_wakeup_io_thread(dev);
++
++ return 0;
++}
++
++static int mic_snd_pcm_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *hw_params)
++{
++DBG("enter\n");
++
++ return snd_pcm_lib_malloc_pages(substream,
++ params_buffer_bytes(hw_params));
++}
++
++static int mic_snd_pcm_hw_free(struct snd_pcm_substream *substream)
++{
++DBG("enter\n");
++
++ snd_pcm_lib_free_pages(substream);
++ return 0;
++}
++
++static int mic_snd_pcm_prepare(struct snd_pcm_substream *substream)
++{
++ struct mic_device *dev = snd_pcm_substream_chip(substream);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ unsigned long flags;
++ int retval;
++
++DBG("enter\n");
++
++ mic_printk(KERN_INFO, "rate=%d, channels=%d, sample_bits=%d\n",
++ runtime->rate, runtime->channels,
++ runtime->sample_bits);
++ mic_printk(KERN_INFO, "format=%d, access=%d\n",
++ runtime->format, runtime->access);
++ mic_printk(KERN_INFO, "buffer_bytes=%d, period_bytes=%d\n",
++ snd_pcm_lib_buffer_bytes(substream),
++ snd_pcm_lib_period_bytes(substream));
++
++ spin_lock_irqsave(&dev->lock, flags);
++ dev->c_orig = runtime->dma_area;
++ dev->c_left = 0;
++ spin_unlock_irqrestore(&dev->lock, flags);
++
++ retval = mic_set_sample_rate(dev, runtime->rate);
++ if (retval < 0)
++ return retval;
++
++ retval = mic_set_period(dev, snd_pcm_lib_period_bytes(substream));
++
++ return retval;
++}
++
++static int mic_snd_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ struct mic_device *dev = snd_pcm_substream_chip(substream);
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ if (!dev->running) {
++ DBG("trigger start\n");
++ dev->running = 1;
++ exi_dev_take(dev->exi_device);
++ mic_hey(dev);
++ mic_enable_sampling(dev, 1);
++ mic_control(dev);
++ exi_dev_give(dev->exi_device);
++ }
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ DBG("trigger stop\n");
++ dev->running = 0;
++ break;
++ }
++ return 0;
++}
++
++static snd_pcm_uframes_t
++mic_snd_pcm_pointer(struct snd_pcm_substream *substream)
++{
++ struct mic_device *dev = snd_pcm_substream_chip(substream);
++ size_t ptr;
++
++ if (!dev->running || !dev->c_left)
++ return 0;
++
++ ptr = dev->c_cur - dev->c_orig;
++ return bytes_to_frames(substream->runtime, ptr);
++}
++
++
++static struct snd_pcm_ops mic_snd_pcm_capture_ops = {
++ .open = mic_snd_pcm_capture_open,
++ .close = mic_snd_pcm_capture_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = mic_snd_pcm_hw_params,
++ .hw_free = mic_snd_pcm_hw_free,
++ .prepare = mic_snd_pcm_prepare,
++ .trigger = mic_snd_pcm_trigger,
++ .pointer = mic_snd_pcm_pointer,
++};
++
++/*
++ *
++ */
++static int mic_snd_new_pcm(struct mic_device *dev)
++{
++ struct snd_pcm *pcm;
++ int retval;
++
++DBG("enter\n");
++
++ retval = snd_pcm_new(dev->card, dev->card->shortname, 0, 0, 1, &pcm);
++ if (retval < 0)
++ return retval;
++
++ pcm->private_data = dev;
++ strcpy(pcm->name, dev->card->shortname);
++ dev->pcm = pcm;
++
++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
++ &mic_snd_pcm_capture_ops);
++
++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS,
++ snd_dma_continuous_data
++ (GFP_KERNEL),
++ 32*1024, 32*1024);
++ return 0;
++}
++
++/*
++ *
++ */
++static int mic_init_snd(struct mic_device *dev)
++{
++ struct snd_card *card;
++ int retval = -ENOMEM;
++
++DBG("enter\n");
++
++ card = snd_card_new(index, id, THIS_MODULE, 0);
++ if (!card) {
++ mic_printk(KERN_ERR, "unable to create sound card\n");
++ goto err_card;
++ }
++
++ strcpy(card->driver, DRV_MODULE_NAME);
++ strcpy(card->shortname, DRV_MODULE_NAME);
++ strcpy(card->longname, "Nintendo GameCube Microphone");
++
++ dev->card = card;
++
++ retval = mic_snd_new_pcm(dev);
++ if (retval < 0)
++ goto err_new_pcm;
++
++ retval = snd_card_register(card);
++ if (retval) {
++ mic_printk(KERN_ERR, "unable to register sound card\n");
++ goto err_card_register;
++ }
++
++ return 0;
++
++err_card_register:
++err_new_pcm:
++ snd_card_free(card);
++ dev->card = NULL;
++err_card:
++ return retval;
++}
++
++/*
++ *
++ */
++static void mic_exit_snd(struct mic_device *dev)
++{
++DBG("enter\n");
++
++ if (dev->card) {
++ snd_card_disconnect(dev->card);
++ snd_card_free_when_closed(dev->card);
++
++ dev->card = NULL;
++ dev->pcm = NULL;
++ dev->c_substream = NULL;
++ }
++}
++
++/*
++ *
++ */
++static int mic_init(struct mic_device *dev)
++{
++ struct exi_device *exi_device = dev->exi_device;
++ struct exi_channel *exi_channel = exi_get_exi_channel(exi_device);
++ int channel;
++ int retval = -ENOMEM;
++
++DBG("enter\n");
++
++ spin_lock_init(&dev->lock);
++
++ dev->running = 0;
++
++ retval = mic_init_snd(dev);
++ if (retval)
++ goto err_init_snd;
++
++ init_waitqueue_head(&dev->io_waitq);
++ channel = to_channel(exi_get_exi_channel(dev->exi_device));
++ dev->io_thread = kthread_run(mic_io_thread, dev, "kmicd/%d", channel);
++ if (IS_ERR(dev->io_thread)) {
++ mic_printk(KERN_ERR, "error creating io thread\n");
++ goto err_io_thread;
++ }
++
++ retval = exi_event_register(exi_channel, EXI_EVENT_IRQ,
++ exi_device,
++ mic_event_handler, dev,
++ 0 /*(1 << to_channel(exi_channel))*/);
++ if (retval) {
++ mic_printk(KERN_ERR, "error registering exi event\n");
++ goto err_event_register;
++ }
++
++ retval = mic_init_proc(dev);
++ if (retval)
++ goto err_init_proc;
++
++ return 0;
++
++err_init_proc:
++ exi_event_unregister(exi_channel, EXI_EVENT_IRQ);
++err_event_register:
++ mic_stop_io_thread(dev);
++err_io_thread:
++ mic_exit_snd(dev);
++err_init_snd:
++ return retval;
++
++}
++
++/*
++ *
++ */
++static void mic_exit(struct mic_device *dev)
++{
++ struct exi_device *exi_device = dev->exi_device;
++ struct exi_channel *exi_channel = exi_get_exi_channel(exi_device);
++
++DBG("enter\n");
++
++ dev->running = 0;
++
++ mic_exit_proc(dev);
++
++ exi_event_unregister(exi_channel, EXI_EVENT_IRQ);
++
++ if (!IS_ERR(dev->io_thread))
++ mic_stop_io_thread(dev);
++
++ mic_exit_snd(dev);
++}
++
++/*
++ *
++ */
++static int mic_probe(struct exi_device *exi_device)
++{
++ struct mic_device *dev;
++ int retval;
++
++ /* we only care about the microphone */
++ if (exi_device->eid.id != MIC_EXI_ID)
++ return -ENODEV;
++
++ DBG("Microphone inserted\n");
++
++ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++
++ dev->exi_device = exi_device_get(exi_device);
++ exi_set_drvdata(exi_device, dev);
++
++ retval = mic_init(dev);
++ if (retval) {
++ exi_set_drvdata(exi_device, NULL);
++ exi_device_put(exi_device);
++ dev->exi_device = NULL;
++ kfree(dev);
++ }
++
++ return retval;
++}
++
++/*
++ *
++ */
++static void mic_remove(struct exi_device *exi_device)
++{
++ struct mic_device *dev = exi_get_drvdata(exi_device);
++
++ DBG("Microphone removed\n");
++
++ if (dev) {
++ mic_exit(dev);
++ if (dev->exi_device)
++ exi_device_put(dev->exi_device);
++ dev->exi_device = NULL;
++ kfree(dev);
++ }
++ exi_set_drvdata(exi_device, NULL);
++}
++
++static struct exi_device_id mic_eid_table[] = {
++ [0] = {
++ .channel = MIC_SLOTA_CHANNEL,
++ .device = MIC_SLOTA_DEVICE,
++ .id = MIC_EXI_ID,
++ },
++ [1] = {
++ .channel = MIC_SLOTB_CHANNEL,
++ .device = MIC_SLOTB_DEVICE,
++ .id = MIC_EXI_ID,
++ },
++ {.id = 0}
++};
++
++static struct exi_driver mic_driver = {
++ .name = DRV_MODULE_NAME,
++ .eid_table = mic_eid_table,
++ .frequency = MIC_SPI_CLK_IDX,
++ .probe = mic_probe,
++ .remove = mic_remove,
++};
++
++static int __init mic_init_module(void)
++{
++ int retval = 0;
++
++ mic_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION,
++ mic_driver_version);
++
++ retval = exi_driver_register(&mic_driver);
++
++ return retval;
++}
++
++static void __exit mic_exit_module(void)
++{
++ exi_driver_unregister(&mic_driver);
++}
++
++module_init(mic_init_module);
++module_exit(mic_exit_module);
++
diff --git a/packages/linux/linux/tosa/defconfig b/packages/linux/linux/tosa/defconfig
new file mode 100644
index 0000000000..6c8383761a
--- /dev/null
+++ b/packages/linux/linux/tosa/defconfig
@@ -0,0 +1,1988 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28
+# Thu Feb 19 21:40:37 2009
+#
+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_HAVE_LATENCYTOP_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_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES 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_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_COMPAT_BRK=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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+CONFIG_CLASSIC_RCU=y
+CONFIG_FREEZER=y
+
+#
+# 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_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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X 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
+# CONFIG_ARCH_MSM is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# 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_AKITA is not set
+# CONFIG_MACH_SPITZ is not set
+# CONFIG_MACH_BORZOI is not set
+CONFIG_MACH_TOSA=y
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_ARCH_PXA_PALM is not set
+# CONFIG_PXA_EZX is not set
+CONFIG_PXA25x=y
+# CONFIG_PXA_PWM is not set
+# CONFIG_TOSA_BT is not set
+CONFIG_PXA_HAVE_BOARD_IRQS=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_NOIFAR=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_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+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_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+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_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE 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_PXA=y
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+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_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
+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_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=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO 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=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_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE 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_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT 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
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_NF_DEFRAG_IPV4 is not set
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES 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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA 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
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_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_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+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_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=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_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=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
+# CONFIG_MTD_AR7_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
+# CONFIG_MTD_OOPS 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
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=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
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# 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_GPIO 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_TMIO=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# 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
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+CONFIG_BLK_DEV_IDECS=y
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=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=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
+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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_ATA is not set
+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_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_USB_ZD1201=m
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_IWLWIFI_LEDS is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=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_DM9601 is not set
+# CONFIG_USB_NET_SMSC95XX is not set
+CONFIG_USB_NET_GL620A=m
+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 is not set
+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_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_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# 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=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_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_APMPOWER 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_CORGI is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_KEYBOARD_TOSA=y
+# CONFIG_KEYBOARD_TOSA_USE_EXT_KEYCODES is not set
+CONFIG_KEYBOARD_GPIO=y
+# 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 is not set
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO 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_WM97XX=y
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+CONFIG_TOUCHSCREEN_WM9712=y
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+CONFIG_INPUT_MISC=y
+# 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_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=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
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_AT24 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 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_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_PXA2XX is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 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_BATTERY_TOSA=y
+# CONFIG_BATTERY_WM97XX is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_UCB1400_CORE is not set
+CONFIG_MFD_TMIO=y
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+CONFIG_MFD_TC6393XB=y
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_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_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VIDEO_CLASS is not set
+CONFIG_USB_GSPCA=m
+# CONFIG_USB_M5602 is not set
+# CONFIG_USB_GSPCA_CONEX is not set
+# CONFIG_USB_GSPCA_ETOMS is not set
+# CONFIG_USB_GSPCA_FINEPIX is not set
+# CONFIG_USB_GSPCA_MARS is not set
+# CONFIG_USB_GSPCA_OV519 is not set
+# CONFIG_USB_GSPCA_PAC207 is not set
+# CONFIG_USB_GSPCA_PAC7311 is not set
+# CONFIG_USB_GSPCA_SONIXB is not set
+# CONFIG_USB_GSPCA_SONIXJ is not set
+# CONFIG_USB_GSPCA_SPCA500 is not set
+# CONFIG_USB_GSPCA_SPCA501 is not set
+# CONFIG_USB_GSPCA_SPCA505 is not set
+# CONFIG_USB_GSPCA_SPCA506 is not set
+# CONFIG_USB_GSPCA_SPCA508 is not set
+# CONFIG_USB_GSPCA_SPCA561 is not set
+# CONFIG_USB_GSPCA_STK014 is not set
+# CONFIG_USB_GSPCA_SUNPLUS is not set
+# CONFIG_USB_GSPCA_T613 is not set
+# CONFIG_USB_GSPCA_TV8532 is not set
+# CONFIG_USB_GSPCA_VC032X is not set
+# CONFIG_USB_GSPCA_ZC3XX is not set
+# 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_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
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_USB_SI470X is not set
+# CONFIG_USB_MR800 is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+CONFIG_FB_TMIO=y
+CONFIG_FB_TMIO_ACCELL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_CORGI is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_LCD_TOSA=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_TOSA=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# 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
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+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 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
+CONFIG_SND_VMASTER=y
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_PXA2XX_LIB=y
+CONFIG_SND_PXA2XX_LIB_AC97=y
+# CONFIG_SND_PXA2XX_AC97 is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+CONFIG_SND_PCMCIA=y
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_AC97_BUS=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_AC97=y
+CONFIG_SND_PXA2XX_SOC_TOSA=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_WM9712=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_HID_PID 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
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=m
+CONFIG_HID_APPLE=m
+CONFIG_HID_BELKIN=m
+CONFIG_HID_BRIGHT=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+CONFIG_HID_CYPRESS=m
+CONFIG_HID_DELL=m
+CONFIG_HID_EZKEY=m
+CONFIG_HID_GYRATION=m
+CONFIG_HID_LOGITECH=m
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
+CONFIG_HID_PANTHERLORD=m
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=m
+CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SONY=m
+CONFIG_HID_SUNPLUS=m
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+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
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD 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_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# 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_IUU is not set
+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_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# 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
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_PXA25X=y
+CONFIG_USB_PXA25X=m
+# CONFIG_USB_PXA25X_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU 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
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON 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=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 is not set
+# CONFIG_RTC_DRV_DS1374 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
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO 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_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# 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_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE 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_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+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_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+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
+
+#
+# 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
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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 is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ALGAPI2=m
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=m
+CONFIG_CRYPTO_RNG2=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_MANAGER2=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux/vortex86sx/defconfig b/packages/linux/linux/vortex86sx/defconfig
new file mode 100644
index 0000000000..c78bd66d95
--- /dev/null
+++ b/packages/linux/linux/vortex86sx/defconfig
@@ -0,0 +1,2130 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.29-rc5
+# Fri Feb 20 13:23:22 2009
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_FAST_CMPXCHG_LOCAL=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_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HAS_DEFAULT_IDLE=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
+# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-nanopc"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+# CONFIG_CLASSIC_RCU is not set
+# CONFIG_TREE_RCU is not set
+CONFIG_PREEMPT_RCU=y
+# CONFIG_RCU_TRACE is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS 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_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_PCSPKR_PLATFORM=y
+CONFIG_COMPAT_BRK=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_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_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"
+# CONFIG_FREEZER is not set
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_SMP is not set
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_X86_RDC321X=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_MEMTEST is not set
+# CONFIG_M386 is not set
+CONFIG_M486=y
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_GENERIC_CPU is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CPU=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=4
+CONFIG_X86_XADD=y
+# CONFIG_X86_PPRO_FENCE is not set
+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_ALIGNMENT_16=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+CONFIG_CPU_SUP_INTEL=y
+CONFIG_CPU_SUP_CYRIX_32=y
+CONFIG_CPU_SUP_AMD=y
+CONFIG_CPU_SUP_CENTAUR_32=y
+CONFIG_CPU_SUP_TRANSMETA_32=y
+CONFIG_CPU_SUP_UMC_32=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+# CONFIG_IOMMU_HELPER is not set
+# CONFIG_IOMMU_API is not set
+CONFIG_NR_CPUS=1
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_X86_UP_APIC is not set
+# CONFIG_X86_MCE is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+CONFIG_X86_REBOOTFIXUPS=y
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_X86_PAE is not set
+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
+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_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
+CONFIG_X86_RESERVE_LOW_64K=y
+CONFIG_MATH_EMULATION=y
+# CONFIG_MTRR is not set
+# CONFIG_SECCOMP is not set
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+CONFIG_SCHED_HRTICK=y
+# CONFIG_KEXEC is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_COMPAT_VDSO=y
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Power management and ACPI options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_SUSPEND is not set
+# CONFIG_HIBERNATION is not set
+# CONFIG_ACPI is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+# CONFIG_PCI_GOOLPC is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+# CONFIG_OLPC is not set
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+CONFIG_HAVE_ATOMIC_IOMAP=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_COMPAT_NET_DEV_OPS=y
+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 is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=m
+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_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=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_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+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_BRIDGE_EBT_NFLOG=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_STP=m
+CONFIG_BRIDGE=m
+# CONFIG_NET_DSA is not set
+CONFIG_VLAN_8021Q=m
+# CONFIG_VLAN_8021Q_GVRP is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+CONFIG_LLC2=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
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=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_HCIBTUSB=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=m
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_NL80211=y
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+# CONFIG_LIB80211 is not set
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_MINSTREL=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+# CONFIG_PARPORT is not set
+CONFIG_PNP=y
+CONFIG_PNP_DEBUG_MESSAGES=y
+
+#
+# Protocols
+#
+CONFIG_ISAPNP=y
+# CONFIG_PNPBIOS is not set
+# CONFIG_PNPACPI is not set
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_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 is not set
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_BLK_DEV_HD is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=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=y
+CONFIG_SCSI_CONSTANTS=y
+# 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_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_DH is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_SATA_PMP=y
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SIL24 is not set
+CONFIG_ATA_SFF=y
+# 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_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 is not set
+# CONFIG_PATA_CS5536 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_ISAPNP is not set
+CONFIG_PATA_IT821X=y
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_LEGACY 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_NINJA32 is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_QDI 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_WINBOND_VLB is not set
+# CONFIG_PATA_SCH is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+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
+# CONFIG_NET_TULIP 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_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 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_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 is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R6040=y
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SMSC9420 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_ATL2 is not set
+# CONFIG_NETDEV_1000 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 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# 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_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 is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOL2TP=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+CONFIG_NETCONSOLE=y
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1024
+# CONFIG_INPUT_JOYDEV 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_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_ELANTECH is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=m
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 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_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=m
+# CONFIG_INPUT_APANEL is not set
+# CONFIG_INPUT_WISTRON_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_CM109 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_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_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=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_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+CONFIG_NVRAM=m
+CONFIG_RTC=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
+# CONFIG_SONYPI is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HANGCHECK_TIMER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=m
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# PC SMBus host controller drivers
+#
+# 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_ISCH is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Graphics adapter I2C/DDC channel drivers
+#
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_ELEKTOR is not set
+# CONFIG_I2C_PCA_ISA is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_SCx200_ACB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_DS1682=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_PCF8575=m
+# CONFIG_SENSORS_PCA9539 is not set
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+CONFIG_SENSORS_TSL2550=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
+# CONFIG_SPI is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+# CONFIG_GPIOLIB is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_IBMASR is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_I6300ESB_WDT is not set
+# CONFIG_ITCO_WDT is not set
+# CONFIG_IT8712F_WDT is not set
+# CONFIG_IT87_WDT is not set
+# CONFIG_HP_WATCHDOG is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_PC87413_WDT is not set
+# CONFIG_RDC321X_WDT is not set
+# CONFIG_60XX_WDT is not set
+# CONFIG_SBC8360_WDT is not set
+# CONFIG_SBC7240_WDT is not set
+# CONFIG_CPU5_WDT is not set
+# CONFIG_SMSC_SCH311X_WDT is not set
+# CONFIG_SMSC37B787_WDT is not set
+# CONFIG_W83627HF_WDT is not set
+# CONFIG_W83697HF_WDT is not set
+# CONFIG_W83697UG_WDT is not set
+# CONFIG_W83877F_WDT is not set
+# CONFIG_W83977F_WDT is not set
+# CONFIG_MACHZ_WDT is not set
+# CONFIG_SBC_EPX_C3_WATCHDOG is not set
+
+#
+# ISA-based Watchdog Cards
+#
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_WDT 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_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_REGULATOR is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_BT848 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_VIDEO_STRADIS is not set
+# CONFIG_VIDEO_ZORAN is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_MXB 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_CX23885 is not set
+# CONFIG_VIDEO_AU0828 is not set
+# CONFIG_VIDEO_IVTV is not set
+# CONFIG_VIDEO_CX18 is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+# CONFIG_USB_M5602 is not set
+# CONFIG_USB_STV06XX is not set
+# CONFIG_USB_GSPCA_CONEX is not set
+# CONFIG_USB_GSPCA_ETOMS is not set
+# CONFIG_USB_GSPCA_FINEPIX is not set
+# CONFIG_USB_GSPCA_MARS is not set
+# CONFIG_USB_GSPCA_OV519 is not set
+# CONFIG_USB_GSPCA_OV534 is not set
+# CONFIG_USB_GSPCA_PAC207 is not set
+# CONFIG_USB_GSPCA_PAC7311 is not set
+# CONFIG_USB_GSPCA_SONIXB is not set
+# CONFIG_USB_GSPCA_SONIXJ is not set
+# CONFIG_USB_GSPCA_SPCA500 is not set
+# CONFIG_USB_GSPCA_SPCA501 is not set
+# CONFIG_USB_GSPCA_SPCA505 is not set
+# CONFIG_USB_GSPCA_SPCA506 is not set
+# CONFIG_USB_GSPCA_SPCA508 is not set
+# CONFIG_USB_GSPCA_SPCA561 is not set
+# CONFIG_USB_GSPCA_STK014 is not set
+# CONFIG_USB_GSPCA_SUNPLUS is not set
+# CONFIG_USB_GSPCA_T613 is not set
+# CONFIG_USB_GSPCA_TV8532 is not set
+# CONFIG_USB_GSPCA_VC032X is not set
+# CONFIG_USB_GSPCA_ZC3XX is not set
+# 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=m
+# 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
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+CONFIG_RADIO_ADAPTERS=y
+# 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_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
+# CONFIG_USB_SI470X is not set
+# CONFIG_USB_MR800 is not set
+# CONFIG_RADIO_TEA5764 is not set
+# CONFIG_DVB_DYNAMIC_MINORS is not set
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+# CONFIG_TTPCI_EEPROM is not set
+# CONFIG_DVB_AV7110 is not set
+# CONFIG_DVB_BUDGET_CORE is not set
+
+#
+# Supported USB Adapters
+#
+# CONFIG_DVB_USB is not set
+# CONFIG_DVB_TTUSB_BUDGET is not set
+# CONFIG_DVB_TTUSB_DEC is not set
+# CONFIG_DVB_SIANO_SMS1XXX 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 SDMC DM1105 Adapters
+#
+# CONFIG_DVB_DM1105 is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# Multistandard (satellite) frontends
+#
+# CONFIG_DVB_STB0899 is not set
+# CONFIG_DVB_STB6100 is not set
+
+#
+# DVB-S (satellite) frontends
+#
+# CONFIG_DVB_CX24110 is not set
+# CONFIG_DVB_CX24123 is not set
+# CONFIG_DVB_MT312 is not set
+# CONFIG_DVB_S5H1420 is not set
+# CONFIG_DVB_STV0288 is not set
+# CONFIG_DVB_STB6000 is not set
+# CONFIG_DVB_STV0299 is not set
+# CONFIG_DVB_TDA8083 is not set
+# CONFIG_DVB_TDA10086 is not set
+# CONFIG_DVB_TDA8261 is not set
+# CONFIG_DVB_VES1X93 is not set
+# CONFIG_DVB_TUNER_ITD1000 is not set
+# CONFIG_DVB_TUNER_CX24113 is not set
+# CONFIG_DVB_TDA826X is not set
+# CONFIG_DVB_TUA6100 is not set
+# CONFIG_DVB_CX24116 is not set
+# CONFIG_DVB_SI21XX is not set
+
+#
+# DVB-T (terrestrial) frontends
+#
+# CONFIG_DVB_SP8870 is not set
+# CONFIG_DVB_SP887X is not set
+# CONFIG_DVB_CX22700 is not set
+# CONFIG_DVB_CX22702 is not set
+# CONFIG_DVB_DRX397XD is not set
+# CONFIG_DVB_L64781 is not set
+# CONFIG_DVB_TDA1004X is not set
+# CONFIG_DVB_NXT6000 is not set
+# CONFIG_DVB_MT352 is not set
+# CONFIG_DVB_ZL10353 is not set
+# CONFIG_DVB_DIB3000MB is not set
+# CONFIG_DVB_DIB3000MC is not set
+# CONFIG_DVB_DIB7000M is not set
+# CONFIG_DVB_DIB7000P is not set
+# CONFIG_DVB_TDA10048 is not set
+
+#
+# DVB-C (cable) frontends
+#
+# CONFIG_DVB_VES1820 is not set
+# CONFIG_DVB_TDA10021 is not set
+# CONFIG_DVB_TDA10023 is not set
+# CONFIG_DVB_STV0297 is not set
+
+#
+# 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 is not set
+# CONFIG_DVB_LGDT3304 is not set
+# CONFIG_DVB_S5H1409 is not set
+# CONFIG_DVB_AU8522 is not set
+# CONFIG_DVB_S5H1411 is not set
+
+#
+# ISDB-T (terrestrial) frontends
+#
+# CONFIG_DVB_S921 is not set
+
+#
+# Digital terrestrial only tuners/PLL
+#
+# CONFIG_DVB_PLL is not set
+# CONFIG_DVB_TUNER_DIB0070 is not set
+
+#
+# SEC control devices for DVB-S
+#
+# CONFIG_DVB_LNBP21 is not set
+# CONFIG_DVB_ISL6405 is not set
+# CONFIG_DVB_ISL6421 is not set
+# CONFIG_DVB_LGS8GL5 is not set
+
+#
+# Tools to develop new frontends
+#
+# CONFIG_DVB_DUMMY_FE is not set
+# CONFIG_DVB_AF9013 is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_BOOT_VESA_SUPPORT=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE 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_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS 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_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_N411 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=y
+# CONFIG_FB_SIS_300 is not set
+CONFIG_FB_SIS_315=y
+# CONFIG_FB_VIA 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_CARMINE is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_GREENASIA_FF is not set
+CONFIG_HID_TOPSEED=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES 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 is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_MON is not set
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_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
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD 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_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_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=y
+# CONFIG_USB_SERIAL_CONSOLE is not set
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_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_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI 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_OPTICON 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_SEVSEG 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
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_UWB is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ALIX2 is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_CLEVO_MAIL is not set
+# CONFIG_LEDS_PCA955X is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_UIO is not set
+# CONFIG_STAGING is not set
+CONFIG_X86_PLATFORM_DEVICES=y
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+CONFIG_FIRMWARE_MEMMAP=y
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_DMIID=y
+# CONFIG_ISCSI_IBFT_FIND 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_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# 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=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_PROC_PAGE_MONITOR=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_CONFIGFS_FS=y
+CONFIG_MISC_FILESYSTEMS=y
+# 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_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+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 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
+
+#
+# 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
+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=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+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_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS 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_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT 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_VIRTUAL is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_USER_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SYSPROF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_POWER_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_MMIOTRACE is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_STRICT_DEVMEM is not set
+CONFIG_X86_VERBOSE_BOOTUP=y
+CONFIG_EARLY_PRINTK=y
+# CONFIG_EARLY_PRINTK_DBGP is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_X86_PTDUMP is not set
+CONFIG_DEBUG_RODATA=y
+# CONFIG_DEBUG_RODATA_TEST is not set
+# CONFIG_DEBUG_NX_TEST is not set
+# CONFIG_4KSTACKS is not set
+CONFIG_DOUBLEFAULT=y
+CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+CONFIG_IO_DELAY_TYPE_0X80=0
+CONFIG_IO_DELAY_TYPE_0XED=1
+CONFIG_IO_DELAY_TYPE_UDELAY=2
+CONFIG_IO_DELAY_TYPE_NONE=3
+CONFIG_IO_DELAY_0X80=y
+# CONFIG_IO_DELAY_0XED is not set
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=0
+# CONFIG_CPA_DEBUG is not set
+# CONFIG_OPTIMIZE_INLINING is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=m
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ALGAPI2=m
+CONFIG_CRYPTO_AEAD2=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=m
+CONFIG_CRYPTO_RNG2=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_MANAGER2=m
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CRC32C_INTEL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_AES_586 is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SALSA20_586 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_PADLOCK is not set
+# CONFIG_CRYPTO_DEV_GEODE is not set
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
+CONFIG_HAVE_KVM=y
+# CONFIG_VIRTUALIZATION is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+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
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb
index d7b9abf506..c74f985d96 100644
--- a/packages/linux/linux_2.6.24.bb
+++ b/packages/linux/linux_2.6.24.bb
@@ -8,10 +8,10 @@ DEFAULT_PREFERENCE_simpad = "1"
DEFAULT_PREFERENCE_atngw100 = "1"
DEFAULT_PREFERENCE_at32stk1000 = "1"
DEFAULT_PREFERENCE_ts72xx = "1"
-DEFAULT_PREFERENCE_oxe810 = "1"
+DEFAULT_PREFERENCE_oxnas = "1"
DEFAULT_PREFERENCE_cs-e9302 = "1"
-PR = "r18"
+PR = "r25"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \
@@ -84,8 +84,11 @@ SRC_URI_append_ts72xx = "\
file://ts72xx-use-cpld-reset.patch;patch=1 \
file://ts72xx-rs485.patch;patch=1"
-SRC_URI_append_oxe810 = " \
- file://oxe810.diff;patch=1 \
+SRC_URI_append_oxnas = " \
+ file://oxnas.diff;patch=1 \
+ file://oxnas-uart.patch;patch=1 \
+ file://oxnas-pci-config-delay.patch;patch=1 \
+ file://oxnas-pci-max-size.patch;patch=1 \
"
CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=1 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2"
diff --git a/packages/linux/linux_2.6.25.20.bb b/packages/linux/linux_2.6.25.20.bb
new file mode 100644
index 0000000000..7b9308cf1d
--- /dev/null
+++ b/packages/linux/linux_2.6.25.20.bb
@@ -0,0 +1,32 @@
+###########################################
+#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
+# linux_2.6.25.20.bb
+# recipe file for PM9261 and PM9263
+###########################################
+
+require linux.inc
+
+PR = "r2"
+
+DEFAULT_PREFERENCE_ronetix-pm9263 = "1"
+DEFAULT_PREFERENCE_ronetix-pm9261 = "1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.25.20.bz2;patch=1 \
+ file://defconfig"
+
+# WARNING: for following patched is required the proper entry in conf/checksums.ini
+
+SRC_URI_append_ronetix-pm9263 = " \
+ http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/linux-2.6.25.4-ronetix-08-11-02.2228.patch;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch;patch=1 \
+ "
+
+SRC_URI_append_ronetix-pm9261 = " \
+ http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/linux-2.6.25.4-ronetix-08-11-02.2228.patch;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/linux-2.6.25/"
diff --git a/packages/linux/linux_2.6.27.bb b/packages/linux/linux_2.6.27.bb
index 7da406a0d3..0b219ec705 100644
--- a/packages/linux/linux_2.6.27.bb
+++ b/packages/linux/linux_2.6.27.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r3"
+PR = "r6"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
@@ -15,14 +15,14 @@ SRC_URI_append_boc01 = "\
file://boc01.dts \
file://001-090114-sqn11x0-usb-hack.patch;patch=1 \
file://004-081205-usb.patch;patch=1 \
- file://005-090112-isl12024.patch;patch=1 \
+ file://005-090217-isl12024.patch;patch=1 \
file://007-081217-lm73.patch;patch=1 \
file://008-081208-spi.patch;patch=1 \
file://010-090112-mii.patch;patch=1 \
file://011-090115-gpio.patch;patch=1 \
- file://012-090115-cy3218-btns.patch;patch=1 \
- file://013-090116-lcd.patch;patch=1 \
- file://014-090115-pm-wakeup.patch;patch=1 \
+ file://012-090219-capsense.patch;patch=1 \
+ file://013-090209-lcd.patch;patch=1 \
+ file://014-090209-pm-wakeup.patch;patch=1 \
"
SRC_URI_append_progear = "file://progear-bl.patch;patch=1\
diff --git a/packages/linux/linux_2.6.28.bb b/packages/linux/linux_2.6.28.bb
index e37ab9d013..5a59dac285 100644
--- a/packages/linux/linux_2.6.28.bb
+++ b/packages/linux/linux_2.6.28.bb
@@ -1,12 +1,16 @@
require linux.inc
-PR = "r2"
+PR = "r6"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_at91sam9263ek = "28"
+DEFAULT_PREFERENCE_ronetix-pm9263 = "28"
DEFAULT_PREFERENCE_stb225 = "28"
+DEFAULT_PREFERENCE_collie = "1"
+DEFAULT_PREFERENCE_tosa = "1"
+DEFAULT_PREFERENCE_gamecube = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
file://defconfig"
@@ -15,7 +19,49 @@ SRC_URI_append_at91sam9263ek = " \
file://linux-2.6.28-at91.patch.bz2;patch=1 \
file://linux-2.6.28-exp.patch.bz2;patch=1 "
+SRC_URI_append_ronetix-pm9263 = " \
+ file://linux-2.6.28-at91.patch.bz2;patch=1 \
+ file://linux-2.6.28-exp.patch.bz2;patch=1 \
+ file://linux-2.6.28-at91-ronetix-12012009.patch;patch=1 "
+
SRC_URI_append_stb225 = " \
+ file://uImage.patch;patch=1 \
file://ebase-fix.patch;patch=1 \
file://enable-uart.patch;patch=1 \
- file://ip3902.patch;patch=1 "
+ file://ip3902.patch;patch=1"
+
+SRC_URI_append_collie = " \
+ file://0001-collie-start-scoop-converton-to-new-api.patch;patch=1 \
+ file://0002-add-locomo_spi-driver.patch;patch=1 \
+ file://0003-enable-cpufreq-for-collie.patch;patch=1 \
+ file://0004-fix-dma-for-SA1100.patch;patch=1 \
+ file://0005-fix-collie-keyboard-bug.patch;patch=1 \
+ file://0006-add-collie-flash-hack.patch;patch=1 \
+ file://0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch;patch=1 \
+ file://0008-fix-collie-suspend-hack.patch;patch=1 \
+ file://0009-add-sa1100-usb-gadget-driver-hack.patch;patch=1 \
+ file://0010-mmc_spi-add-suspend-and-resume-callbacks.patch;patch=1 \
+ file://0011-move-drivers-mfd-.h-to-include-linux-mfd.patch;patch=1 \
+ file://0012-move-ucb1200-ts-driver.patch;patch=1 \
+ file://0013-add-collie-touchscreen-driver.patch;patch=1 \
+ file://0014-collie-locomo-led-change-default-trigger.patch;patch=1 \
+ file://0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch;patch=1 \
+ file://0016-add-gpiolib-support-to-ucb1x00.patch;patch=1 \
+ file://0017-collie-convert-to-gpiolib-for-ucb1x00.patch;patch=1 \
+ file://0018-collie-add-battery-driver.patch;patch=1 \
+ file://0019-collie-support-pda_power-driver.patch;patch=1 \
+ file://0020-remove-collie_pm.c.patch;patch=1 \
+ file://0021-mmc-trivial-annotation-of-blocks.patch;patch=1 \
+ file://0022-mmc_block-print-better-error-messages.patch;patch=1 \
+ file://0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch;patch=1 "
+
+SRC_URI_append_tosa = " \
+ file://commit-31c9b28;patch=1 \
+ file://commit-ddfb33c;patch=1 \
+ file://commit-f34ee79;patch=1 \
+ "
+SRC_URI_append_gamecube = " \
+ file://patch-2.6.28-gc;patch=1 \
+ "
+
+S = "${WORKDIR}/linux-2.6.28/"
diff --git a/packages/linux/linux_2.6.29-rc5.bb b/packages/linux/linux_2.6.29-rc5.bb
new file mode 100644
index 0000000000..7b158afaf1
--- /dev/null
+++ b/packages/linux/linux_2.6.29-rc5.bb
@@ -0,0 +1,13 @@
+require linux.inc
+
+PV = "2.6.28+2.6.29-rc5"
+
+S = "${WORKDIR}/linux-2.6.28"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_vortex86sx = "1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/linux-2.6.28.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.29-rc5.bz2;patch=1 \
+ file://defconfig"
diff --git a/packages/linux/linux_2.6.29-rc6.bb b/packages/linux/linux_2.6.29-rc6.bb
new file mode 100644
index 0000000000..db1139f367
--- /dev/null
+++ b/packages/linux/linux_2.6.29-rc6.bb
@@ -0,0 +1,19 @@
+require linux.inc
+
+PV = "2.6.28+2.6.29-rc6"
+
+S = "${WORKDIR}/linux-2.6.28"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_vortex86sx = "1"
+DEFAULT_PREFERENCE_tosa = "1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/linux-2.6.28.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.29-rc6.bz2;patch=1 \
+ file://defconfig"
+
+SRC_URI_append_tosa = " \
+ file://0001--tosa-Set-a-bus_id-for-the-tc6393xb-so-that-the-clk.patch;patch=1 \
+ "
+
diff --git a/packages/llvm/llvm-native_2.5.bb b/packages/llvm/llvm-native_2.5.bb
new file mode 100644
index 0000000000..010f49ab32
--- /dev/null
+++ b/packages/llvm/llvm-native_2.5.bb
@@ -0,0 +1,15 @@
+require llvm.inc
+
+SRC_URI = "http://llvm.org/releases/2.5/llvm-${PV}.tar.gz"
+
+inherit native
+
+S = "${WORKDIR}/llvm-${PV}"
+
+do_stage() {
+ install -m 755 ${S}/Release/bin/* ${STAGING_BINDIR_NATIVE}/
+}
+
+do_rm_work() {
+ :
+}
diff --git a/packages/lmbench/lmbench/lmbench-run b/packages/lmbench/lmbench/lmbench-run
index 3674f6d265..e904c75e43 100644
--- a/packages/lmbench/lmbench/lmbench-run
+++ b/packages/lmbench/lmbench/lmbench-run
@@ -7,7 +7,7 @@ SHAREDIR=/usr/share/lmbench/
BINDIR=/usr/lib/lmbench/
SCRIPTSDIR=$SHAREDIR/scripts
RESULTSDIR=$SHAREDIR/results
-CONFIG=$SHAREDIR/config/`$SCRIPTSDIR/config`
+CONFIG=/var/lib/lmbench/config/`$SCRIPTSDIR/config`
runuid=`id -u`
[ $runuid -gt 0 ] && {
diff --git a/packages/lmbench/lmbench_2.0.4.bb b/packages/lmbench/lmbench_2.0.4.bb
index 04b78eca19..e2bed84e9c 100644
--- a/packages/lmbench/lmbench_2.0.4.bb
+++ b/packages/lmbench/lmbench_2.0.4.bb
@@ -1,6 +1,8 @@
SECTION = "console/utils"
DESCRIPTION = "Tools for performance analysis."
LICENSE = "GPL"
+RDEPENDS = "debianutils"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/lmbench/lmbench-${PV}.tgz \
file://debian.patch;patch=1 \
diff --git a/packages/lmbench/lmbench_2.5.bb b/packages/lmbench/lmbench_2.5.bb
index a51508017c..5c99945c2c 100644
--- a/packages/lmbench/lmbench_2.5.bb
+++ b/packages/lmbench/lmbench_2.5.bb
@@ -1,6 +1,8 @@
SECTION = "console/utils"
DESCRIPTION = "Tools for performance analysis."
LICENSE = "GPL"
+RDEPENDS = "debianutils"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/lmbench/lmbench-${PV}.tgz \
file://build.patch;patch=1 \
diff --git a/packages/lowpan-utils/lowpan-utils_git.bb b/packages/lowpan-utils/lowpan-utils_git.bb
new file mode 100644
index 0000000000..89a5e438ab
--- /dev/null
+++ b/packages/lowpan-utils/lowpan-utils_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "LoWPAN utilities (IEEE802.15.4)"
+LICENSE = "GPL"
+SRCREV = "master"
+SRC_URI = "git://github.com/lumag/lowpan-utils.git;protocol=git"
+DEPENDS = "libnl bison-native flex-native"
+PR = "r4"
+
+S = "${WORKDIR}/git"
+PACKAGES += "${PN}-tests-dbg"
+PACKAGES += "${PN}-tests"
+FILES_${PN} = "${sbindir}/iz ${sbindir}/izconfig \
+ ${bindir}/izchat ${bindir}/izlisten ${sbindir}/izcoordinator \
+ ${sbindir}/izattach"
+FILES_${PN}-tests = "${libexecdir}/zigbee ${libdir}/python*/site-packages"
+FILES_${PN}-tests-dbg = "${libexecdir}/zigbee/.debug"
+
+inherit autotools
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/ltp/ltp-20090131/cross-compile.patch b/packages/ltp/ltp-20090131/cross-compile.patch
new file mode 100644
index 0000000000..b414b6fc0f
--- /dev/null
+++ b/packages/ltp/ltp-20090131/cross-compile.patch
@@ -0,0 +1,352 @@
+---
+ Makefile | 4 +++-
+ lib/Makefile | 3 ---
+ m4/GNUmakefile | 3 ---
+ pan/Makefile | 2 --
+ testcases/ballista/ballista/Makefile | 2 +-
+ testcases/ballista/ballista/compile/Makefile | 8 ++++----
+ testcases/kernel/device-drivers/acpi/Makefile | 2 +-
+ testcases/kernel/device-drivers/agp/user_space/Makefile | 6 +++---
+ testcases/kernel/device-drivers/base/user_base/Makefile | 6 +++---
+ testcases/kernel/device-drivers/dev_sim_framework/user_space/Makefile | 6 +++---
+ testcases/kernel/device-drivers/drm/user_space/Makefile | 2 +-
+ testcases/kernel/device-drivers/include/Makefile | 2 +-
+ testcases/kernel/device-drivers/nls/Makefile | 2 +-
+ testcases/kernel/device-drivers/pci/user_tpci/Makefile | 6 +++---
+ testcases/kernel/device-drivers/tbio/user_space/Makefile | 6 +++---
+ testcases/kernel/device-drivers/usb/user_usb/Makefile | 6 +++---
+ testcases/kernel/fs/fs-bench/Makefile | 6 +++---
+ testcases/kernel/fs/scsi/ltpfs/Makefile | 2 +-
+ testcases/kernel/sched/hyperthreading/ht_affinity/Makefile | 4 ++--
+ testcases/kernel/sched/hyperthreading/ht_enabled/Makefile | 2 +-
+ testcases/kernel/sched/hyperthreading/ht_interrupt/Makefile | 2 +-
+ 21 files changed, 38 insertions(+), 44 deletions(-)
+
+Index: ltp-full-20090131/Makefile
+===================================================================
+--- ltp-full-20090131.orig/Makefile
++++ ltp-full-20090131/Makefile
+@@ -5,14 +5,16 @@ CROSS_COMPILER = $(CROSS_COMPILE)
+ endif
+ ifdef CROSS_COMPILER
+ CC=$(CROSS_COMPILER)gcc
++CPP=$(CROSS_COMPILER)g++
+ AR=$(CROSS_COMPILER)ar
+ RANLIB=$(CROSS_COMPILER)ranlib
+ endif
++PREFIX=/opt/ltp
+
+ HAS_NUMA=$(shell sh tools/scripts/numa_test.sh)
+
+ export CFLAGS += -Wall $(CROSS_CFLAGS)
+-export CC AR RANLIB CPPFLAGS LDFLAGS HAS_NUMA
++export CC CPP AR RANLIB CPPFLAGS LDFLAGS HAS_NUMA
+
+ -include config.mk
+
+Index: ltp-full-20090131/testcases/ballista/ballista/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/ballista/ballista/Makefile
++++ ltp-full-20090131/testcases/ballista/ballista/Makefile
+@@ -24,7 +24,7 @@
+ ########################
+
+ # compiler info for the host
+-CC = g++ -Wno-deprecated
++CC = $(CPP) -Wno-deprecated
+ CFLAGS += -w ${TARGET_DEF}
+ CLIBS = -lpthread -ldl -lnsl -rdynamic
+ TEST_MAN_FILE = selfHost
+Index: ltp-full-20090131/testcases/ballista/ballista/compile/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/ballista/ballista/compile/Makefile
++++ ltp-full-20090131/testcases/ballista/ballista/compile/Makefile
+@@ -19,14 +19,14 @@ dFLAGS=-g -DDEBUG
+ FLAGS= -O -Wall
+ PFLAGS= -p -g3
+
+-CPPCOMP= g++
++CPPCOMP= $(CPP)
+
+ #
+ # The following is "boilerplate" to set up the standard compilation
+ # commands:
+ .SUFFIXES:
+ .SUFFIXES: .cpp .c .cc .h .o
+-.c.o: ; gcc $(FLAGS) -c $*.c
++.c.o: ; $(CC) $(FLAGS) -c $*.c
+ .cc.o: ; $(CPPCOMP) $(FLAGS) -c $*.cc
+ .cpp.o: ; $(CPPCOMP) $(FLAGS) $(INC) -c $*.cpp
+ .cxx.o: ; $(CPPCOMP) $(FLAGS) $(INC) -c $*.cxx
+@@ -41,10 +41,10 @@ all: blexer bparser
+ chmod 700 ../templates/do_parse
+
+ blexer: jlist.o butil.o lex.yy.o blexer.o
+- gcc $(FLAGS) -o blexer jlist.o butil.o lex.yy.o blexer.o
++ $(CC) $(FLAGS) -o blexer jlist.o butil.o lex.yy.o blexer.o
+
+ bparser: bparser.o
+- g++ $(FLAGS) -o bparser bparser.o butil.c
++ $(CPP) $(FLAGS) -o bparser bparser.o butil.c
+
+ jlist.o: jlist.c butil.h jlist.h
+
+Index: ltp-full-20090131/testcases/kernel/device-drivers/acpi/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/acpi/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/acpi/Makefile
+@@ -15,7 +15,7 @@ PWD := $(shell pwd)
+
+ default:
+ $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
+- gcc $(CFLAGS) -o LtpAcpiMain LtpAcpiMain.c
++ $(CC) $(CFLAGS) -o LtpAcpiMain LtpAcpiMain.c
+ # $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
+ endif
+
+Index: ltp-full-20090131/testcases/kernel/device-drivers/agp/user_space/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/agp/user_space/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/agp/user_space/Makefile
+@@ -1,8 +1,8 @@
+ test_agp: tagp_ki.o user_tagp.o
+- gcc tagp_ki.o user_tagp.o -o test_agp
++ $(CC) tagp_ki.o user_tagp.o -o test_agp
+
+ tagp_ki.o: tagp_ki.c
+- gcc -c tagp_ki.c
++ $(CC) -c tagp_ki.c
+
+ user_tagp.o: user_tagp.c
+- gcc -c user_tagp.c
++ $(CC) -c user_tagp.c
+Index: ltp-full-20090131/testcases/kernel/device-drivers/base/user_base/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/base/user_base/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/base/user_base/Makefile
+@@ -1,11 +1,11 @@
+ test_base: tbase_ki.o user_tbase.o
+- gcc tbase_ki.o user_tbase.o -o test_base
++ $(CC) tbase_ki.o user_tbase.o -o test_base
+
+ tbase_ki.o: tbase_ki.c
+- gcc -c tbase_ki.c
++ $(CC) -c tbase_ki.c
+
+ user_tbase.o: user_tbase.c
+- gcc -c user_tbase.c
++ $(CC) -c user_tbase.c
+
+ clean:
+ rm -f *.o 2>/dev/null || true
+Index: ltp-full-20090131/testcases/kernel/device-drivers/dev_sim_framework/user_space/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/dev_sim_framework/user_space/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/dev_sim_framework/user_space/Makefile
+@@ -1,8 +1,8 @@
+ test_mod: tmod_ki.o user_tmod.o
+- gcc tmod_ki.o user_tmod.o -o test_mod
++ $(CC) tmod_ki.o user_tmod.o -o test_mod
+
+ tmod_ki.o: tmod_ki.c
+- gcc -c tmod_ki.c
++ $(CC) -c tmod_ki.c
+
+ user_tmod.o: user_tmod.c
+- gcc -c user_tmod.c
++ $(CC) -c user_tmod.c
+Index: ltp-full-20090131/testcases/kernel/device-drivers/drm/user_space/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/drm/user_space/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/drm/user_space/Makefile
+@@ -2,4 +2,4 @@
+ KDIR := /lib/modules/$(shell uname -r)/build
+ CFLAGS := -I$(KDIR)/drivers/char/drm
+ default:
+- gcc -o test_drm user_tdrm.c $(CFLAGS)
++ $(CC) -o test_drm user_tdrm.c $(CFLAGS)
+Index: ltp-full-20090131/testcases/kernel/device-drivers/include/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/include/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/include/Makefile
+@@ -14,7 +14,7 @@ PWD := $(shell pwd)
+
+ default:
+ $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
+- gcc -Wall -o userBlockInclude userBlockInclude.c
++ $(CC) -Wall -o userBlockInclude userBlockInclude.c
+ # $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
+ endif
+
+Index: ltp-full-20090131/testcases/kernel/device-drivers/nls/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/nls/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/nls/Makefile
+@@ -13,7 +13,7 @@ PWD := $(shell pwd)
+
+ default:
+ $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
+- gcc $(EXTRA_CFLAGS) -o userBlockNLS userBlockNLS.c
++ $(CC) $(EXTRA_CFLAGS) -o userBlockNLS userBlockNLS.c
+ # $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
+
+ clean:
+Index: ltp-full-20090131/testcases/kernel/device-drivers/pci/user_tpci/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/pci/user_tpci/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/pci/user_tpci/Makefile
+@@ -1,8 +1,8 @@
+ test_pci: tpci_ki.o user_tpci.o
+- gcc tpci_ki.o user_tpci.o -o test_pci
++ $(CC) tpci_ki.o user_tpci.o -o test_pci
+
+ tpci_ki.o: tpci_ki.c
+- gcc -c tpci_ki.c
++ $(CC) -c tpci_ki.c
+
+ user_tpci.o: user_tpci.c
+- gcc -c user_tpci.c
++ $(CC) -c user_tpci.c
+Index: ltp-full-20090131/testcases/kernel/device-drivers/tbio/user_space/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/tbio/user_space/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/tbio/user_space/Makefile
+@@ -1,8 +1,8 @@
+ test_bio: tbio_ki.o user_tbio.o
+- gcc -g tbio_ki.o user_tbio.o -o test_bio
++ $(CC) -g tbio_ki.o user_tbio.o -o test_bio
+
+ tbio_ki.o: tbio_ki.c
+- gcc -c -g tbio_ki.c
++ $(CC) -c -g tbio_ki.c
+
+ user_tbio.o: user_tbio.c
+- gcc -c -g user_tbio.c
++ $(CC) -c -g user_tbio.c
+Index: ltp-full-20090131/testcases/kernel/device-drivers/usb/user_usb/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/device-drivers/usb/user_usb/Makefile
++++ ltp-full-20090131/testcases/kernel/device-drivers/usb/user_usb/Makefile
+@@ -1,8 +1,8 @@
+ test_usb: tusb_ki.o user_tusb.o
+- gcc tusb_ki.o user_tusb.o -o test_usb
++ $(CC) tusb_ki.o user_tusb.o -o test_usb
+
+ tusb_ki.o: tusb_ki.c
+- gcc -c tusb_ki.c
++ $(CC) -c tusb_ki.c
+
+ user_tusb.o: user_tusb.c
+- gcc -c user_tusb.c
++ $(CC) -c user_tusb.c
+Index: ltp-full-20090131/testcases/kernel/fs/fs-bench/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/fs/fs-bench/Makefile
++++ ltp-full-20090131/testcases/kernel/fs/fs-bench/Makefile
+@@ -6,13 +6,13 @@ all: ${EXECS}
+ @echo done
+
+ cr: create-files.o ${UTILS}
+- gcc ${UTILS} create-files.o -lm -o cr
++ $(CC) ${UTILS} create-files.o -lm -o cr
+
+ ra: random-access.o
+- gcc random-access.o -o ra
++ $(CC) random-access.o -o ra
+
+ radc: random-del-create.o ${UTILS}
+- gcc ${UTILS} random-del-create.o -lm -o radc
++ $(CC) ${UTILS} random-del-create.o -lm -o radc
+
+ install:
+ @set -e; for i in $(EXECS) $(SCRIPTS); do ln -f $$i ../../../bin/$$i ; done
+Index: ltp-full-20090131/testcases/kernel/fs/scsi/ltpfs/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/fs/scsi/ltpfs/Makefile
++++ ltp-full-20090131/testcases/kernel/fs/scsi/ltpfs/Makefile
+@@ -15,7 +15,7 @@ PWD := $(shell pwd)
+
+ default:
+ $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
+- gcc $(CFLAGS) -o ltpfstest -lm main.c
++ $(CC) $(CFLAGS) -o ltpfstest -lm main.c
+ # $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
+ endif
+
+Index: ltp-full-20090131/testcases/kernel/sched/hyperthreading/ht_affinity/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/sched/hyperthreading/ht_affinity/Makefile
++++ ltp-full-20090131/testcases/kernel/sched/hyperthreading/ht_affinity/Makefile
+@@ -7,9 +7,9 @@ TARGETS := ht_affinity
+ all: $(TARGETS)
+
+ #ht_affinity: HTaffinity.o HTutils.o
+-# gcc -o ht_affinity HTaffinity.o HTutils.o $(CFLAGS) $(LOADLIBES)
++# $(CC) -o ht_affinity HTaffinity.o HTutils.o $(CFLAGS) $(LOADLIBES)
+ ht_affinity:
+- gcc -o ht_affinity HTaffinity.c HTutils.c $(CFLAGS) $(LOADLIBES)
++ $(CC) -o ht_affinity HTaffinity.c HTutils.c $(CFLAGS) $(LOADLIBES)
+
+ install:
+ @set -e; for i in $(TARGETS) ; do ln -f $$i ../../../../bin/$$i ; done
+Index: ltp-full-20090131/testcases/kernel/sched/hyperthreading/ht_enabled/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/sched/hyperthreading/ht_enabled/Makefile
++++ ltp-full-20090131/testcases/kernel/sched/hyperthreading/ht_enabled/Makefile
+@@ -7,7 +7,7 @@ TARGETS := ht_enabled
+ all: $(TARGETS)
+
+ ht_enabled:
+- gcc -o ht_enabled HTenabled.c HTutils.c $(CFLAGS) $(LOADLIBES)
++ $(CC) -o ht_enabled HTenabled.c HTutils.c $(CFLAGS) $(LOADLIBES)
+
+ install:
+ @set -e; for i in $(TARGETS) ; do ln -f $$i ../../../../bin/$$i ; done
+Index: ltp-full-20090131/testcases/kernel/sched/hyperthreading/ht_interrupt/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/sched/hyperthreading/ht_interrupt/Makefile
++++ ltp-full-20090131/testcases/kernel/sched/hyperthreading/ht_interrupt/Makefile
+@@ -7,7 +7,7 @@ TARGETS = ht_interrupt
+ all: $(TARGETS)
+
+ ht_interrupt:
+- gcc -o ht_interrupt HTinterrupt.c HTutils.c $(CFLAGS) $(LOADLIBES)
++ $(CC) -o ht_interrupt HTinterrupt.c HTutils.c $(CFLAGS) $(LOADLIBES)
+
+ install:
+ @set -e; for i in $(TARGETS) ; do ln -f $$i ../../../../bin/$$i ; done
+Index: ltp-full-20090131/lib/Makefile
+===================================================================
+--- ltp-full-20090131.orig/lib/Makefile
++++ ltp-full-20090131/lib/Makefile
+@@ -1,6 +1,3 @@
+-
+-PREFIX=/opt/ltp
+-
+ CFLAGS+= -Wall
+ CFLAGS+= -D_USC_LIB_
+ CPPFLAGS+= -I../include
+Index: ltp-full-20090131/m4/GNUmakefile
+===================================================================
+--- ltp-full-20090131.orig/m4/GNUmakefile
++++ ltp-full-20090131/m4/GNUmakefile
+@@ -1,6 +1,3 @@
+-
+-
+-PREFIX=/opt/ltp
+ M4MACROS=$(notdir $(wildcard *.m4))
+
+ all:
+Index: ltp-full-20090131/pan/Makefile
+===================================================================
+--- ltp-full-20090131.orig/pan/Makefile
++++ ltp-full-20090131/pan/Makefile
+@@ -1,8 +1,6 @@
+-
+ LOADLIBES += -lm
+ LFLAGS += -l -w
+ CFLAGS += -w
+-PREFIX = /opt/ltp
+
+ all: pan bump scanner
+
diff --git a/packages/ltp/ltp-20090131/fix-tcore_patch_test_suites.patch b/packages/ltp/ltp-20090131/fix-tcore_patch_test_suites.patch
new file mode 100644
index 0000000000..92a8879410
--- /dev/null
+++ b/packages/ltp/ltp-20090131/fix-tcore_patch_test_suites.patch
@@ -0,0 +1,20 @@
+---
+ testcases/misc/tcore_patch_test_suites/tcore.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+Index: ltp-full-20090131/testcases/misc/tcore_patch_test_suites/tcore.c
+===================================================================
+--- ltp-full-20090131.orig/testcases/misc/tcore_patch_test_suites/tcore.c
++++ ltp-full-20090131/testcases/misc/tcore_patch_test_suites/tcore.c
+@@ -27,9 +27,10 @@ extern int Tst_count; /*
+ extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */
+ /* Global Variables */
+ char *TCID = "tcore"; /* test program identifier. */
+-int TST_TOTAL = 1; /* total number of tests in this file. */
+
+ #if defined __i386__ || defined(__x86_64__)
++int TST_TOTAL = 1; /* total number of tests in this file. */
++
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <unistd.h>
diff --git a/packages/ltp/ltp-20090131/no-IDcheck.patch b/packages/ltp/ltp-20090131/no-IDcheck.patch
new file mode 100644
index 0000000000..d43780748f
--- /dev/null
+++ b/packages/ltp/ltp-20090131/no-IDcheck.patch
@@ -0,0 +1,17 @@
+---
+ Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+Index: ltp-full-20090131/Makefile
+===================================================================
+--- ltp-full-20090131.orig/Makefile
++++ ltp-full-20090131/Makefile
+@@ -37,8 +37,6 @@ install: all
+ @$(MAKE) -C doc/man1 install
+ @$(MAKE) -C doc/man3 install
+
+- @./IDcheck.sh
+-
+ libltp.a: config.h
+ @$(MAKE) -C lib $@
+
diff --git a/packages/ltp/ltp-20090131/no_epoll_create2_mips.patch b/packages/ltp/ltp-20090131/no_epoll_create2_mips.patch
new file mode 100644
index 0000000000..84ce8e4128
--- /dev/null
+++ b/packages/ltp/ltp-20090131/no_epoll_create2_mips.patch
@@ -0,0 +1,17 @@
+---
+ testcases/kernel/syscalls/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: ltp-full-20090131/testcases/kernel/syscalls/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/syscalls/Makefile
++++ ltp-full-20090131/testcases/kernel/syscalls/Makefile
+@@ -25,7 +25,7 @@ EXCLUDE_DIR=epoll
+ #
+ # Commented this out since there are directories here we don't want built by default
+ #
+-SUBDIR = `ls */Makefile | sed "s/Makefile//g"`
++SUBDIR = `ls */Makefile | sed "s/Makefile//g | grep -vE "^epoll_create2""`
+ UCLINUX_SUBDIR = `ls */Makefile | sed "s/Makefile//g" | grep -vE "^fork|epoll|capget|capset|chmod|chown|llseek|nftw|clone|profil|getcontext"`
+
+ all:
diff --git a/packages/ltp/ltp-20090131/no_hyperthreading_tests.patch b/packages/ltp/ltp-20090131/no_hyperthreading_tests.patch
new file mode 100644
index 0000000000..6ef9635df9
--- /dev/null
+++ b/packages/ltp/ltp-20090131/no_hyperthreading_tests.patch
@@ -0,0 +1,14 @@
+---
+ testcases/kernel/sched/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: ltp-full-20090131/testcases/kernel/sched/Makefile
+===================================================================
+--- ltp-full-20090131.orig/testcases/kernel/sched/Makefile
++++ ltp-full-20090131/testcases/kernel/sched/Makefile
+@@ -1,4 +1,4 @@
+-SUBDIRS = cfs-scheduler clisrv hyperthreading nptl process_stress pthreads sched_stress tool
++SUBDIRS = cfs-scheduler clisrv nptl process_stress pthreads sched_stress tool
+
+ all:
+ @set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i ; done
diff --git a/packages/ltp/ltp-20090131/runltp-path.patch b/packages/ltp/ltp-20090131/runltp-path.patch
new file mode 100644
index 0000000000..607e019e61
--- /dev/null
+++ b/packages/ltp/ltp-20090131/runltp-path.patch
@@ -0,0 +1,17 @@
+---
+ runltp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: ltp-full-20090131/runltp
+===================================================================
+--- ltp-full-20090131.orig/runltp
++++ ltp-full-20090131/runltp
+@@ -74,7 +74,7 @@ setup()
+ echo "FATAL: unable to change directory to $(dirname $0)"
+ exit 1
+ }
+- export LTPROOT=${PWD}
++ export LTPROOT=/usr/libexec/ltp
+ export TMPBASE="/tmp"
+ export PATH="${PATH}:${LTPROOT}/testcases/bin"
+
diff --git a/packages/ltp/ltp_20090131.bb b/packages/ltp/ltp_20090131.bb
new file mode 100644
index 0000000000..73d6f76fa7
--- /dev/null
+++ b/packages/ltp/ltp_20090131.bb
@@ -0,0 +1,75 @@
+DESCRIPTION = "Linux Test Project"
+HOMEPAGE = "http://ltp.sourceforge.net"
+LICENSE = "GPL"
+SECTION = "console/utils"
+DEPENDS = "zip-native"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ltp/ltp-full-${PV}.tgz \
+ file://cross-compile.patch;patch=1 \
+ file://runltp-path.patch;patch=1 \
+ file://fix-tcore_patch_test_suites.patch;patch=1 \
+ file://no-IDcheck.patch;patch=1 \
+ file://no_hyperthreading_tests.patch;patch=1"
+
+SRC_URI_append_mips += "file://no_epoll_create2_mips.patch;patch=1"
+SRC_URI_append_mipsel += "file://no_epoll_create2_mips.patch;patch=1"
+
+S = "${WORKDIR}/ltp-full-${PV}"
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${HOST_PREFIX}"
+
+FILES_${PN}-dbg = "${libexecdir}/ltp/*/*/*/*/*/.debug"
+FILES_${PN}-dbg += "${libexecdir}/ltp/*/*/*/*/.debug"
+FILES_${PN}-dbg += "${libexecdir}/ltp/*/*/*/.debug"
+FILES_${PN}-dbg += "${libexecdir}/ltp/*/*/.debug"
+FILES_${PN}-dbg += "${libexecdir}/ltp/*/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/float/trigo/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/float/iperb/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/float/exp_log/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/float/power/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/float/bessel/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/abs/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/atof/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/nextafter/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/math/fptests/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/f00f/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/misc/crash/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/pan/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/network/ipv6/*/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/network/rpc/rpc01/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/bin/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/kernel/syscalls/*/.debug"
+#FILES_${PN}-dbg += "${libexecdir}/ltp/testcases/kernel/mem/*/.debug"
+
+do_compile(){
+ oe_runmake CROSS_COMPILE=${HOST_PREFIX}
+}
+
+do_install(){
+ export CREATE=0
+ export LTPROOT=${D}/usr/libexec/ltp/testcases
+
+ oe_runmake DESTDIR=${D} PREFIX=/usr/libexec/ltp 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/testcases/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
+
+ # We don't want "devel" stuff
+ rm -rf ${D}/opt/ltp/include
+ rm ${D}/usr/libexec/ltp/share/pkgconfig/ltp.pc
+}
diff --git a/packages/lyx/files/no-session-manager.patch b/packages/lyx/files/no-session-manager.patch
new file mode 100644
index 0000000000..edb8f00f3c
--- /dev/null
+++ b/packages/lyx/files/no-session-manager.patch
@@ -0,0 +1,20 @@
+Index: lyx-1.6.1/src/frontends/qt4/GuiApplication.cpp
+===================================================================
+--- lyx-1.6.1.orig/src/frontends/qt4/GuiApplication.cpp
++++ lyx-1.6.1/src/frontends/qt4/GuiApplication.cpp
+@@ -1320,6 +1320,7 @@
+
+ void GuiApplication::commitData(QSessionManager & sm)
+ {
++#if 0 // no session manager in OE's Qt4
+ /// The implementation is required to avoid an application exit
+ /// when session state save is triggered by session manager.
+ /// The default implementation sends a close event to all
+@@ -1329,6 +1330,7 @@
+ /// FIXME: verify if the default implementation is enough now.
+ if (sm.allowsInteraction() && !closeAllViews())
+ sm.cancel();
++#endif
+ }
+
+
diff --git a/packages/lyx/lyx_1.4.1.bb b/packages/lyx/lyx_1.4.1.bb
deleted file mode 100644
index 1a89a4275c..0000000000
--- a/packages/lyx/lyx_1.4.1.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-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 = "r1"
-
-# 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_1;rev=13847"
-S = "${WORKDIR}/lyx-1_4_1"
-
-inherit qt3x11 autotools
-
-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/lyx/lyx_1.4.4.bb b/packages/lyx/lyx_1.4.4.bb
deleted file mode 100644
index 26970a3ed0..0000000000
--- a/packages/lyx/lyx_1.4.4.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-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 qt3x11 autotools
-
-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/lyx/lyx_1.5.1.bb b/packages/lyx/lyx_1.5.1.bb
deleted file mode 100644
index 32e3096dbe..0000000000
--- a/packages/lyx/lyx_1.5.1.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-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"
-RSUGGESTS = "tetex"
-RDEPENDS = "python-shell python-textutils"
-PR = "r0"
-
-SRC_URI = "http://lyx.cybermirror.org/stable/lyx-${PV}.tar.bz2"
-
-inherit qt4x11 autotools
-
-EXTRA_OECONF = " --with-qt4-dir=${QTDIR} -enable-pch"
-EXTRA_QMAKEVARS_POST = "DEFINES+=_LIBC"
-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}"
-export OE_QMAKE_LIBS_X11="-lX11 -lXext"
diff --git a/packages/lyx/lyx_1.6.1.bb b/packages/lyx/lyx_1.6.1.bb
new file mode 100644
index 0000000000..d293a081cf
--- /dev/null
+++ b/packages/lyx/lyx_1.6.1.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "LyX is an advanced type setting processor - a frontend for LaTeX"
+SECTION = "x11/office"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.lyx.org"
+DEPENDS = "qt4-x11-free"
+RSUGGESTS = "tetex"
+RDEPENDS = "python-shell python-textutils"
+PR = "r0"
+
+SRC_URI = "\
+ ftp://ftp.lyx.org/pub/lyx/stable/1.6.x/lyx-${PV}.tar.bz2 \
+ file://no-session-manager.patch;patch=1 \
+"
+
+inherit qt4x11 autotools
+
+EXTRA_OECONF = "\
+ --with-qt4-dir=${QTDIR} \
+ --enable-threads=posix \
+"
+
+EXTRA_QMAKEVARS_POST = "DEFINES+=_LIBC"
+PARALLEL_MAKE = ""
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
diff --git a/packages/maemo/osso-esd/qa-silence.patch b/packages/maemo/osso-esd/qa-silence.patch
new file mode 100644
index 0000000000..734311310f
--- /dev/null
+++ b/packages/maemo/osso-esd/qa-silence.patch
@@ -0,0 +1,13 @@
+Index: esd/configure.in
+===================================================================
+--- esd.orig/configure.in 2005-03-14 12:13:59.000000000 +0000
++++ esd/configure.in 2009-03-07 10:43:45.000000000 +0000
+@@ -167,7 +167,7 @@
+ AC_CHECK_HEADERS(CoreAudio/CoreAudio.h)
+ # mme_api.h directly includes other files from the mme subdir
+ xCPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS -I/usr/include/mme"
++ CPPFLAGS="$CPPFLAGS -I${MME_INCDIR}"
+ AC_CHECK_HEADERS(mme/mme_api.h)
+ CPPFLAGS="$xCPPFLAGS"
+
diff --git a/packages/maemo/osso-esd_0.5.bb b/packages/maemo/osso-esd_0.5.bb
index dde84ca601..c952725ba4 100644
--- a/packages/maemo/osso-esd_0.5.bb
+++ b/packages/maemo/osso-esd_0.5.bb
@@ -5,7 +5,11 @@ RPROVIDES_${PN} = "esd"
DEPENDS = "audiofile osso-dsp-headers"
-SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/o/${PN}/${PN}_${PV}.orig.tar.gz"
+SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/o/${PN}/${PN}_${PV}.orig.tar.gz \
+ file://qa-silence.patch;patch=1"
+
+# for qa-silence.patch:
+export MME_INCDIR = "${STAGING_INCDIR}/mme"
S = "${WORKDIR}/esd"
diff --git a/packages/maemo4/libosso/libosso-dont-use-inline.patch b/packages/maemo4/libosso/libosso-dont-use-inline.patch
new file mode 100644
index 0000000000..d3878308c2
--- /dev/null
+++ b/packages/maemo4/libosso/libosso-dont-use-inline.patch
@@ -0,0 +1,47 @@
+--- libosso-2.13/src/osso-init.c.orig 2008-09-22 12:56:49.000000000 -0700
++++ libosso-2.13/src/osso-init.c 2008-09-22 12:57:22.000000000 -0700
+@@ -657,7 +657,8 @@
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+-inline int __attribute__ ((visibility("hidden")))
++//inline int __attribute__ ((visibility("hidden")))
++static int
+ muali_convert_msgtype(int t)
+ {
+ switch (t) {
+--- libosso-2.13/src/osso-internal.h.orig 2008-09-22 12:57:39.000000000 -0700
++++ libosso-2.13/src/osso-internal.h 2008-09-22 12:58:13.000000000 -0700
+@@ -209,7 +209,8 @@
+ # define dprint(f, a...)
+ # endif /* LIBOSSO_DEBUG */
+
+-inline int __attribute__ ((visibility("hidden")))
++//inline int __attribute__ ((visibility("hidden")))
++static int
+ muali_convert_msgtype(int t);
+
+ muali_arg_t* _get_muali_args(DBusMessageIter *iter);
+@@ -297,7 +298,8 @@
+ _muali_parse_id(const char *id, muali_bus_type *bus, char *sender,
+ int *serial);
+
+-inline void __attribute__ ((visibility("hidden")))
++//inline void __attribute__ ((visibility("hidden")))
++static void
+ _muali_make_id(muali_bus_type bus, const char *sender, int serial, char *id);
+
+ #endif /* OSSO_INTERNAL_H_ */
+--- libosso-2.13/src/osso-rpc.c.orig 2008-09-22 12:58:53.000000000 -0700
++++ libosso-2.13/src/osso-rpc.c 2008-09-22 12:59:42.000000000 -0700
+@@ -1026,7 +1026,8 @@
+ *serial = atoi(buf);
+ }
+
+-inline void __attribute__ ((visibility("hidden")))
++//inline void __attribute__ ((visibility("hidden")))
++static void
+ _muali_make_id(muali_bus_type bus, const char *sender, int serial, char *id)
+ {
+ snprintf(id, MAX_MSGID_LEN, "%d,%s,%d", bus, sender, serial);
+
diff --git a/packages/maemo4/libosso_2.13.bb b/packages/maemo4/libosso_2.13.bb
index 1920e29d3a..25ee9aac15 100644
--- a/packages/maemo4/libosso_2.13.bb
+++ b/packages/maemo4/libosso_2.13.bb
@@ -1,10 +1,11 @@
require libosso.inc
-PR = "r0"
+PR = "r1"
SRC_URI = "\
http://repository.maemo.org/pool/maemo4.0/free/source/libo/${PN}/${PN}_${PV}-1.1fix.tar.gz \
file://libosso-buildfix.patch;patch=1 \
+ file://libosso-dont-use-inline.patch;patch=1 \
"
PACKAGES += "${PN}-outo ${PN}-outo-dev ${PN}-outo-dbg ${PN}-outo-bin-dbg ${PN}-outo-bin"
diff --git a/packages/make/mingw-make-canadian-sdk_3.81.bb b/packages/make/mingw-make-canadian-sdk_3.81.bb
new file mode 100644
index 0000000000..3479dad249
--- /dev/null
+++ b/packages/make/mingw-make-canadian-sdk_3.81.bb
@@ -0,0 +1,16 @@
+PR = "r0"
+
+require make.inc
+
+inherit canadian-sdk
+
+DESCRIPTION = "GNU Make examines the timestamps on a set of \
+interdependent files, and, if necessary, issues commands \
+to bring them up-to-date - MinGW port."
+HOMEPAGE = "http://www.mingw.org/"
+
+DEPENDS = "virtual/${HOST_PREFIX}binutils virtual/${HOST_PREFIX}gcc"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mingw/mingw32-make-3.81-20080326-src.tar.gz"
+
+S = "${WORKDIR}/make-${PV}-patched"
diff --git a/packages/matchbox-panel/matchbox-panel-0.9.3/mb-applet-system-monitor-crash.patch b/packages/matchbox-panel/matchbox-panel-0.9.3/mb-applet-system-monitor-crash.patch
new file mode 100644
index 0000000000..8773003b34
--- /dev/null
+++ b/packages/matchbox-panel/matchbox-panel-0.9.3/mb-applet-system-monitor-crash.patch
@@ -0,0 +1,85 @@
+Program received signal SIGSEGV, Segmentation fault.
+0x4002dfbc in mb_pixbuf_img_plot_pixel (pb=<value optimized out>, img=0x1ba40, x=22,
+ y=-434, r=255 'ÿ', g=0 '\0', b=0 '\0') at mbpixbuf.c:2087
+(gdb) bt
+#0 0x4002dfbc in mb_pixbuf_img_plot_pixel (pb=<value optimized out>, img=0x1ba40, x=22,
+ y=-434, r=255 'ÿ', g=0 '\0', b=0 '\0') at mbpixbuf.c:2087
+#1 0x0000966c in paint_callback (app=<value optimized out>, drw=46137348)
+ at mb-applet-system-monitor.c:272
+#2 0x4002b8f6 in handle_expose (mb=0x1ba40, event=<value optimized out>) at mbtray.c:820
+#3 0x4002b922 in mb_tray_app_repaint (mb=0x1ba40) at mbtray.c:833
+#4 0x00008fd4 in timeout_callback (app=0x1ba40) at mb-applet-system-monitor.c:347
+#5 0x4002c580 in mb_tray_app_main (mb=0x14008) at mbtray.c:302
+#6 0x00009878 in main (argc=1, argv=0xbecf1ca4) at mb-applet-system-monitor.c:410
+(gdb) up
+(gdb) print membox_h
+$1 = 20
+(gdb) print mem_pixels
+$2 = 18798069
+(gdb) print memsize
+$3 = 1597228901
+(gdb) print msd
+$4 = {loadIndex = 15, samples = 16, load = 0x18a90, total = 0x18b18,
+ mem_used = 18446744073706139648, mem_max = 63750144, swap_used = 0, swap_max = 0,
+ swap_percent = 0, mem_percent = 1597228901}
+
+Huh, mem_used doesn't look good!
+
+root@zaurus:~# printf %lx\\n -18446744073706139648
+341000
+
+Well, it's negative. The algorithm is a bit stange.
+
+root@zaurus:~# cat /proc/meminfo
+MemTotal: 62256 kB
+MemFree: 8504 kB
+Buffers: 1508 kB
+Cached: 24692 kB
+SwapCached: 8604 kB
+Active: 22632 kB
+Inactive: 21344 kB
+SwapTotal: 131064 kB
+SwapFree: 72060 kB
+Dirty: 0 kB
+Writeback: 0 kB
+AnonPages: 12636 kB
+Mapped: 5532 kB
+Slab: 4300 kB
+SReclaimable: 1456 kB
+SUnreclaim: 2844 kB
+PageTables: 1116 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 162192 kB
+Committed_AS: 81568 kB
+VmallocTotal: 581632 kB
+VmallocUsed: 9112 kB
+VmallocChunk: 565244 kB
+
+Now let's compute what's happening:
+
+cache_used = cache_total - cache_free;
+my_mem_used = cache_used + used - cached - buffers;
+12636 - 5532 + 8604 - 24692 - 1508 = -10492
+ ======
+
+Well, I don't know, how to compute a really used memory, but I could at
+least sanitize the value. Here you are:
+
+Index: matchbox-panel-0.9.3/applets/mb-applet-system-monitor.c
+===================================================================
+--- matchbox-panel-0.9.3/applets/mb-applet-system-monitor.c 2006-02-07 22:19:12.000000000 +0000
++++ matchbox-panel-0.9.3/applets/mb-applet-system-monitor.c 2009-02-21 13:19:41.000000000 +0000
+@@ -195,6 +195,11 @@
+ my_mem_max = total;
+ my_swap_max = cache_total;
+ my_mem_used = cache_used + used - cached - buffers;
++ /* Ugly hack! Fix mem-used algorithm is needed. */
++ if (my_mem_used < 0)
++ my_mem_used = 0;
++ if (my_mem_used > my_mem_max)
++ my_mem_used = my_mem_max;
+ msd.mem_used = my_mem_used;
+ msd.mem_max = my_mem_max;
+ msd.mem_percent = (100 * msd.mem_used) / msd.mem_max;
diff --git a/packages/matchbox-panel/matchbox-panel_0.9.3.bb b/packages/matchbox-panel/matchbox-panel_0.9.3.bb
index b7b12edc63..555912260e 100644
--- a/packages/matchbox-panel/matchbox-panel_0.9.3.bb
+++ b/packages/matchbox-panel/matchbox-panel_0.9.3.bb
@@ -1,4 +1,5 @@
require matchbox-panel.inc
-PR ="r3"
+PR ="r4"
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"
+ file://mb-applet-battery-repaint-093.patch;patch=1 \
+ file://mb-applet-system-monitor-crash.patch;patch=1"
diff --git a/packages/mbw/mbw_1.1.bb b/packages/mbw/mbw_1.1.bb
new file mode 100644
index 0000000000..31ba432431
--- /dev/null
+++ b/packages/mbw/mbw_1.1.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Memory bandwidth benchmark"
+AUTHOR = "Andras Horvath <Andras.Horvath@cern.ch>"
+
+SRC_URI = "http://ahorvath.web.cern.ch/ahorvath/mbw/mbw-${PV}-1.tar.gz"
+
+S = "${WORKDIR}/mbw/"
+
+inherit autotools
+
+do_install() {
+ install -d ${D}${bindir} ${D}${mandir}
+ install -m 755 mbw ${D}${bindir}
+ install -m 644 mbw.1 ${D}${mandir}/man1/
+}
diff --git a/packages/mc/mc-4.6.2/00-70-utf8-common.patch b/packages/mc/mc-4.6.2/00-70-utf8-common.patch
new file mode 100644
index 0000000000..244a01580a
--- /dev/null
+++ b/packages/mc/mc-4.6.2/00-70-utf8-common.patch
@@ -0,0 +1,46 @@
+Some common stuff used by other UTF-8 patches.
+
+================================================================================
+--- mc-4.6.2/src/util.c
++++ mc-4.6.2/src/util.c
+@@ -145,6 +145,30 @@
+ return strlen (str);
+ }
+
++int
++columns_to_bytes (const char *str, int col)
++{
++ int bytes = 0;
++ int columns = 0;
++ int i;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ static mbstate_t s;
++ while (columns < col) {
++ memset (&s, 0, sizeof (s));
++ i = mbrlen (str + bytes, -1, &s);
++ if (i <= 0) {
++ return col + bytes - columns;
++ }
++ bytes += i;
++ columns ++;
++ }
++ return col + bytes - columns;
++ } else
++#endif
++ return col;
++}
++
+ #ifdef UTF8
+
+ void
+--- mc-4.6.2/src/util.h
++++ mc-4.6.2/src/util.h
+@@ -104,6 +104,7 @@
+
+ void fix_utf8(char *str);
+ size_t mbstrlen (const char *);
++int columns_to_bytes (const char *, int);
+ wchar_t *mbstr_to_wchar (const char *);
+ char *wchar_to_mbstr (const wchar_t *);
+ char *utf8_to_local(char *str);
diff --git a/packages/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch b/packages/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch
new file mode 100644
index 0000000000..a7bc41c59b
--- /dev/null
+++ b/packages/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch
@@ -0,0 +1,21 @@
+Use six character width cyan rectangles for bottom row's buttons.
+
+================================================================================
+--- mc-4.6.2/src/widget.c
++++ mc-4.6.2/src/widget.c
+@@ -2562,11 +2562,14 @@
+ attrset (DEFAULT_COLOR);
+ tty_printf ("%-*s", bb->widget.cols, "");
+ for (i = 0; i < COLS / 8 && i < 10; i++) {
++ int j;
+ widget_move (&bb->widget, 0, i * 8);
+ attrset (DEFAULT_COLOR);
+ tty_printf ("%d", i + 1);
+ attrset (SELECTED_COLOR);
+- tty_printf ("%-*s", ((i + 1) * 8 == COLS ? 5 : 6),
++ j = columns_to_bytes(bb->labels [i].text ? bb->labels [i].text : "",
++ ((i + 1) * 8 == COLS ? 5 : 6));
++ tty_printf ("%-*s", j,
+ bb->labels[i].text ? bb->labels[i].text : "");
+ attrset (DEFAULT_COLOR);
+ }
diff --git a/packages/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch b/packages/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch
new file mode 100644
index 0000000000..5f1227d30a
--- /dev/null
+++ b/packages/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch
@@ -0,0 +1,63 @@
+Fix formatting the output of "mc --help".
+
+================================================================================
+--- mc-4.6.2/src/main.c
++++ mc-4.6.2/src/main.c
+@@ -1865,7 +1865,7 @@
+
+ /* print help for options */
+ leftColWidth = poptPrintHelp (ctx, stream, 0);
+- fprintf (stream, " %-*s %s\n", leftColWidth, _("+number"),
++ fprintf (stream, " %-*s %s\n", leftColWidth + strlen(_("+number")) - mbstrlen(_("+number")), _("+number"),
+ _("Set initial line number for the internal editor"));
+ fputs (_
+ ("\n"
+--- mc-4.6.2/src/popthelp.c
++++ mc-4.6.2/src/popthelp.c
+@@ -101,7 +101,7 @@
+ goto out;
+ }
+
+- helpLength = strlen(help);
++ helpLength = mbstrlen(help);
+ while (helpLength > lineLength) {
+ ch = help + lineLength - 1;
+ while (ch > help && !isspace((unsigned char) *ch)) ch--;
+@@ -112,7 +112,7 @@
+ fprintf(f, "%.*s\n%*s", (int) (ch - help), help, indentLength, " ");
+ help = ch;
+ while (isspace((unsigned char) *help) && *help) help++;
+- helpLength = strlen(help);
++ helpLength = mbstrlen(help);
+ }
+
+ if (helpLength) fprintf(f, "%s\n", help);
+@@ -233,7 +233,7 @@
+ if (len == 3) return cursor;
+
+ if (argDescrip)
+- len += strlen(argDescrip) + 1;
++ len += mbstrlen(argDescrip) + 1;
+
+ if ((cursor + len) > 79) {
+ fprintf(f, "\n ");
+@@ -304,7 +304,7 @@
+ singleTableUsage(f, cursor, con->options, NULL);
+
+ if (con->otherHelp) {
+- cursor += strlen(con->otherHelp) + 1;
++ cursor += mbstrlen(con->otherHelp) + 1;
+ if (cursor > 79) fprintf(f, "\n ");
+ fprintf(f, " %s", con->otherHelp);
+ }
+--- mc-4.6.2/src/util.c
++++ mc-4.6.2/src/util.c
+@@ -152,7 +152,7 @@
+ int columns = 0;
+ int i;
+ #ifdef UTF8
+- if (SLsmg_Is_Unicode) {
++ if (1) {
+ static mbstate_t s;
+ while (columns < col) {
+ memset (&s, 0, sizeof (s));
diff --git a/packages/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch b/packages/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch
new file mode 100644
index 0000000000..38e0337ad6
--- /dev/null
+++ b/packages/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch
@@ -0,0 +1,23 @@
+Highlight the lines of hotlist in full width.
+
+================================================================================
+--- mc-4.6.2/src/widget.c
++++ mc-4.6.2/src/widget.c
+@@ -1994,6 +1994,7 @@
+ {
+ WLEntry *e;
+ int i;
++ int j;
+ int sel_line;
+ Dlg_head *h = l->widget.parent;
+ int normalc = DLG_NORMALC (h);
+@@ -2024,7 +2025,8 @@
+ text = e->text;
+ e = e->next;
+ }
+- tty_printf (" %-*s ", l->width-2, name_trunc (text, l->width-2));
++ j = columns_to_bytes (name_trunc (text, l->width-2), l->width-2);
++ tty_printf (" %-*s ", j, name_trunc (text, l->width-2));
+ }
+ l->cursor_y = sel_line;
+ if (!l->scrollbar)
diff --git a/packages/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch b/packages/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch
new file mode 100644
index 0000000000..912d8eb72b
--- /dev/null
+++ b/packages/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch
@@ -0,0 +1,17 @@
+Quick filename search (^S) highlights correct width.
+
+================================================================================
+--- mc-4.6.2/src/screen.c
++++ mc-4.6.2/src/screen.c
+@@ -771,8 +771,10 @@
+ widget_move (&panel->widget, llines (panel)+3, 1);
+
+ if (panel->searching){
++ int j;
+ attrset (INPUT_COLOR);
+- tty_printf ("/%-*s", panel->widget.cols-3, panel->search_buffer);
++ j = columns_to_bytes (panel->search_buffer, panel->widget.cols-3);
++ tty_printf ("/%-*s", j, panel->search_buffer);
+ attrset (NORMAL_COLOR);
+ return;
+ }
diff --git a/packages/mc/mc-4.6.2/01_ftpfs_symlink.patch b/packages/mc/mc-4.6.2/01_ftpfs_symlink.patch
new file mode 100644
index 0000000000..f05a424cac
--- /dev/null
+++ b/packages/mc/mc-4.6.2/01_ftpfs_symlink.patch
@@ -0,0 +1,32 @@
+--- mc-4.6.2/vfs/direntry.c
++++ mc-4.6.2/vfs/direntry.c
+@@ -251,7 +251,13 @@
+ char * const pathref = g_strdup (a_path);
+ char *path = pathref;
+
+- canonicalize_pathname (path);
++ if (strncmp(me->name, "ftpfs", 5) != 0)
++ canonicalize_pathname (path);
++ else {
++ char *p = path + strlen (path) - 1;
++ while (p > path && *p == PATH_SEP)
++ *p-- = 0;
++ }
+
+ while (root) {
+ while (*path == PATH_SEP) /* Strip leading '/' */
+@@ -324,7 +330,13 @@
+ if (root->super->root != root)
+ vfs_die ("We have to use _real_ root. Always. Sorry.");
+
+- canonicalize_pathname (path);
++ if (strncmp (me->name, "ftpfs", 5) != 0)
++ canonicalize_pathname (path);
++ else {
++ char *p = path + strlen (path) - 1;
++ while (p > path && *p == PATH_SEP)
++ *p-- = 0;
++ }
+
+ if (!(flags & FL_DIR)) {
+ char *dirname, *name, *save;
diff --git a/packages/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch b/packages/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch
new file mode 100644
index 0000000000..6ad176dfa1
--- /dev/null
+++ b/packages/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch
@@ -0,0 +1,11 @@
+--- mc-4.6.2/vfs/ftpfs.c
++++ mc-4.6.2/vfs/ftpfs.c
+@@ -1529,7 +1529,7 @@
+ char buf[BUF_SMALL];
+
+ g_snprintf(buf, sizeof(buf), "SITE CHMOD %4.4o /%%s", mode & 07777);
+- return ftpfs_send_command(me, path, buf, OPT_FLUSH);
++ return ftpfs_send_command(me, path, buf, OPT_FLUSH | OPT_IGNORE_ERROR);
+ }
+
+ static int ftpfs_chown (struct vfs_class *me, const char *path, int owner, int group)
diff --git a/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch b/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch
new file mode 100644
index 0000000000..612d77736b
--- /dev/null
+++ b/packages/mc/mc-4.6.2/99_regexp-replace-fixed.patch
@@ -0,0 +1,312 @@
+--- mc-4.6.2/edit/editcmd.c
++++ mc-4.6.2/edit/editcmd.c
+@@ -2103,6 +2103,33 @@
+ edit_error_dialog (_("Error"), _(" Invalid regular expression, or scanf expression with too many conversions "));
+ }
+
++int mc_isdigit(mc_wchar_t c)
++{
++#ifndef UTF8
++ return isdigit(c);
++#else /* UTF8 */
++ return iswdigit(c);
++#endif /* UTF8 */
++}
++
++mc_wchar_t * mc_memmove(mc_wchar_t *to, mc_wchar_t *from, size_t size)
++{
++#ifndef UTF8
++ return memmove(to, from, size);
++#else /* UTF8 */
++ return wmemmove(to, from, size);
++#endif /* UTF8 */
++}
++
++mc_wchar_t * mc_strchr(mc_wchar_t *str, mc_wchar_t c)
++{
++#ifndef UTF8
++ return strchr(str, c);
++#else /* UTF8 */
++ return wcschr(str, c);
++#endif /* UTF8 */
++}
++
+ /* call with edit = 0 before shutdown to close memory leaks */
+ void
+ edit_replace_cmd (WEdit *edit, int again)
+@@ -2119,6 +2146,8 @@
+ int replace_continue;
+ int treplace_prompt = 0;
+ long times_replaced = 0, last_search;
++ mc_wchar_t *repl_templ;
++ mc_wchar_t *repl_str;
+ int argord[NUM_REPL_ARGS];
+
+ if (!edit) {
+@@ -2172,7 +2201,68 @@
+
+ }
+
+- {
++#ifndef UTF8
++ repl_templ = g_strdup(input2);
++#else /* UTF8 */
++ repl_templ = mbstr_to_wchar(input2);
++#endif /* UTF8 */
++
++ if (replace_regexp) {
++ /*
++ * edit replace template - convert subpattern references (\1) to
++ * snprintf_p arguments (%s) and fill "argord" array to match captured
++ * subpatterns
++ */
++ int ao;
++ int ord;
++ mc_wchar_t *s;
++ mc_wchar_t *param;
++ mc_wchar_t *endptr;
++#ifndef UTF8
++#define MC_CHAR(c) ((mc_wchar_t) c)
++#else /* UTF8 */
++#define MC_CHAR(c) (L##c)
++#endif /* UTF8 */
++
++ endptr = mc_strchr(repl_templ, MC_CHAR('\0'));
++ s = repl_templ;
++ ao = 0;
++ while ((s = mc_strchr(s, MC_CHAR('\\')))) {
++ param = s;
++ s++;
++ if (!s) break;
++ /* implement \n \r and \t escape sequences in replace string */
++ if (*s == MC_CHAR('n')) {
++ *s = MC_CHAR('\n');
++ } else if (*s == MC_CHAR('r')) {
++ *s = MC_CHAR('\r');
++ } else if (*s == MC_CHAR('t')) {
++ *s = MC_CHAR('\t');
++ }
++ if (!mc_isdigit(*s)) {
++ mc_memmove(param, s, endptr - s + 1);
++ continue;
++ }
++ ord = 0;
++ while (mc_isdigit(*s)) {
++ ord *= 10;
++ ord += *s - MC_CHAR('0');
++ s++;
++ }
++ if ((ord > 0) && (ord <= NUM_REPL_ARGS)) {
++ argord[ao++] = ord - 1;
++ *param++ = MC_CHAR('%');
++ *param++ = MC_CHAR('s');
++ mc_memmove(param, s, endptr - s + 1);
++ s = param;
++ }
++ }
++ while (ao < NUM_REPL_ARGS) {
++ argord[ao] = ao;
++ ao++;
++ }
++
++ } else {
+ const char *s;
+ int ord;
+ size_t i;
+@@ -2203,6 +2293,12 @@
+ && !replace_backwards)
+ edit->search_start++;
+
++ if (replace_scanf || replace_regexp) {
++ repl_str = g_malloc(((MAX_REPL_LEN + 2)+1) * sizeof(mc_wchar_t));
++ } else {
++ repl_str = repl_templ;
++ }
++
+ do {
+ int len = 0;
+ long new_start;
+@@ -2227,8 +2323,47 @@
+
+ replace_yes = 1;
+
++ if (replace_scanf || replace_regexp) {
++ int ret = 0;
++
++ /* we need to fill in sargs just like with scanf */
++ if (replace_regexp) {
++ int k, j;
++ for (k = 1; k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0;
++ k++) {
++ mc_wchar_t *t;
++
++ if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) {
++ ret = -1;
++ break;
++ }
++ t = (mc_wchar_t *) &sargs[k - 1][0];
++ for (j = 0; j < pmatch[k].rm_eo - pmatch[k].rm_so &&
++ j < 255; j++, t++)
++ *t = edit_get_byte (edit, edit->search_start -
++ pmatch[0].rm_so + pmatch[k].rm_so + j);
++ *t = '\0';
++ }
++ for (; k <= NUM_REPL_ARGS; k++)
++ sargs[k - 1][0] = 0;
++ }
++ if (ret >= 0)
++ ret = snprintf_p (repl_str, MAX_REPL_LEN + 2, repl_templ,
++ PRINTF_ARGS);
++ if (ret < 0) {
++ edit_error_dialog (_(" Replace "),
++ ret == -2
++ ? _(" Error in replacement format string. ")
++ : _(" Replacement too long. "));
++ treplace_prompt = 0;
++ replace_yes = 0;
++ replace_continue = 0;
++ }
++ }
++
+ if (treplace_prompt) {
+ int l;
++ char *displ_repl_str;
+ l = edit->curs_row - edit->num_widget_lines / 3;
+ if (l > 0)
+ edit_scroll_downward (edit, l);
+@@ -2242,7 +2377,15 @@
+ /*so that undo stops at each query */
+ edit_push_key_press (edit);
+
+- switch (edit_replace_prompt (edit, input2, /* and prompt 2/3 down */
++#ifndef UTF8
++ displ_repl_str = g_strdup(repl_str);
++#else /* UTF8 */
++ displ_repl_str = wchar_to_mbstr(repl_str);
++ /* wchar_to_mbstr(str) returns NULL when length of str == 0 */
++ if (!displ_repl_str) displ_repl_str = g_strdup("");
++#endif /* UTF8 */
++ convert_to_display (displ_repl_str);
++ switch (edit_replace_prompt (edit, displ_repl_str, /* and prompt 2/3 down */
+ (edit->num_widget_columns -
+ CONFIRM_DLG_WIDTH) / 2,
+ edit->num_widget_lines * 2 /
+@@ -2264,99 +2407,15 @@
+ replace_continue = 0;
+ break;
+ }
++ g_free(displ_repl_str);
+ }
+ if (replace_yes) { /* delete then insert new */
+-#ifdef UTF8
+- mc_wchar_t *winput2 = mbstr_to_wchar(input2);
+-#endif /* UTF8 */
+- if (replace_scanf) {
+- mc_wchar_t repl_str[MAX_REPL_LEN + 2];
+- int ret = 0;
+-
+- /* we need to fill in sargs just like with scanf */
+- if (replace_regexp) {
+- int k, j;
+- for (k = 1;
+- k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0;
+- k++) {
+-#ifndef UTF8
+- unsigned char *t;
+-#else /* UTF8 */
+- mc_wchar_t *t;
+-#endif
+-
+- if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) {
+- ret = -1;
+- break;
+- }
+-#ifndef UTF8
+- t = (unsigned char *) &sargs[k - 1][0];
+-#else /* UTF8 */
+- t = (mc_wchar_t *) &sargs[k - 1][0];
+-#endif /* UTF8 */
+- for (j = 0;
+- j < pmatch[k].rm_eo - pmatch[k].rm_so
+- && j < 255; j++, t++)
+- *t = edit_get_byte (edit,
+- edit->
+- search_start
+- -
+- pmatch
+- [0].
+- rm_so +
+- pmatch
+- [k].
+- rm_so +
+- j);
+- *t = '\0';
+- }
+- for (; k <= NUM_REPL_ARGS; k++)
+- sargs[k - 1][0] = 0;
+- }
+- if (!ret)
+- ret =
+-#ifndef UTF8
+- snprintf_p (repl_str, MAX_REPL_LEN + 2, input2,
+-#else /* UTF8 */
+- snprintf_p (repl_str, MAX_REPL_LEN + 2, winput2,
+-#endif /* UTF8 */
+- PRINTF_ARGS);
+- if (ret >= 0) {
+- times_replaced++;
+- while (i--)
+- edit_delete (edit);
+-#ifndef UTF8
+- while (repl_str[++i])
+- edit_insert (edit, repl_str[i]);
+-#else /* UTF8 */
+- while (winput2[++i])
+- edit_insert (edit, winput2[i]);
+-#endif /* UTF8 */
+- } else {
+- edit_error_dialog (_(" Replace "),
+- ret ==
+- -2 ?
+- _
+- (" Error in replacement format string. ")
+- : _(" Replacement too long. "));
+- replace_continue = 0;
+- }
+- } else {
+- times_replaced++;
+- while (i--)
+- edit_delete (edit);
+-#ifndef UTF8
+- while (input2[++i])
+- edit_insert (edit, input2[i]);
+-#else /* UTF8 */
+- while (winput2[++i])
+- edit_insert (edit, winput2[i]);
+-#endif /* UTF8 */
+- }
++ times_replaced++;
++ while (i--)
++ edit_delete (edit);
++ while (repl_str[++i])
++ edit_insert (edit, repl_str[i]);
+ edit->found_len = i;
+-#ifdef UTF8
+- g_free (winput2);
+-#endif /* UTF8 */
+ }
+ /* so that we don't find the same string again */
+ if (replace_backwards) {
+@@ -2385,6 +2444,12 @@
+ }
+ } while (replace_continue);
+
++ /* cleanup */
++ if (replace_scanf || replace_regexp) {
++ g_free(repl_str);
++ }
++ g_free(repl_templ);
++
+ edit->force = REDRAW_COMPLETELY;
+ edit_scroll_screen_over_cursor (edit);
+ cleanup:
diff --git a/packages/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch b/packages/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch
new file mode 100644
index 0000000000..580c8345dd
--- /dev/null
+++ b/packages/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch
@@ -0,0 +1,53 @@
+--- mc-4.6.2/edit/editcmd.c
++++ mc-4.6.2/edit/editcmd.c
+@@ -1511,6 +1511,32 @@
+ sargs[argord[8]], sargs[argord[9]], sargs[argord[10]], sargs[argord[11]], \
+ sargs[argord[12]], sargs[argord[13]], sargs[argord[14]], sargs[argord[15]]
+
++#ifdef UTF8
++size_t
++real_mbstrlen (const char *str)
++{
++ if (SLsmg_Is_Unicode) {
++ size_t width = 0;
++
++ for (; *str; str++) {
++ wchar_t c;
++ size_t len;
++
++ len = mbrtowc (&c, str, MB_CUR_MAX, NULL);
++
++ if (len == (size_t)(-1) || len == (size_t)(-2)) break;
++
++ if (len > 0) {
++ width ++;
++ str += len-1;
++ }
++ }
++
++ return width;
++ } else
++ return strlen (str);
++}
++#endif
+
+ /* This function is a modification of mc-3.2.10/src/view.c:regexp_view_search() */
+ /* returns -3 on error in pattern, -1 on not found, found_len = 0 if either */
+@@ -1582,7 +1608,7 @@
+ continue;
+ tmp = string[pmatch[i].rm_so];
+ string[pmatch[i].rm_so] = 0;
+- new_o = mbstrlen(string);
++ new_o = real_mbstrlen(string);
+ string[pmatch[i].rm_so] = tmp;
+ pmatch[i].rm_so = new_o;
+
+@@ -1590,7 +1616,7 @@
+ continue;
+ tmp = string[pmatch[i].rm_eo];
+ string[pmatch[i].rm_eo] = 0;
+- new_o = mbstrlen(string);
++ new_o = real_mbstrlen(string);
+ string[pmatch[i].rm_eo] = tmp;
+ pmatch[i].rm_eo = new_o;
+ }
diff --git a/packages/mc/mc-4.6.2/cross-compile.patch b/packages/mc/mc-4.6.2/cross-compile.patch
new file mode 100644
index 0000000000..53879e9cef
--- /dev/null
+++ b/packages/mc/mc-4.6.2/cross-compile.patch
@@ -0,0 +1,16 @@
+Index: mc-4.6.2/src/Makefile.am
+===================================================================
+--- mc-4.6.2.orig/src/Makefile.am 2009-02-01 19:30:21.000000000 +0000
++++ mc-4.6.2/src/Makefile.am 2009-02-25 13:24:16.000000000 +0000
+@@ -14,7 +14,10 @@
+ endif
+
+ noinst_PROGRAMS = man2hlp
+-man2hlp_LDADD = $(GLIB_LIBS)
++man2hlp_CFLAGS = $(GLIB_CFLAGS_FOR_BUILD)
++man2hlp_LDADD = $(GLIB_LIBS_FOR_BUILD)
++$(man2hlp_OBJECTS): CC=$(CC_FOR_BUILD)
++man2hlp_LINK = $(LD_FOR_BUILD) -o $@
+
+ mcmfmt_SOURCES = mfmt.c
+
diff --git a/packages/mc/mc-4.6.2/mc-cursor-appearance.patch b/packages/mc/mc-4.6.2/mc-cursor-appearance.patch
new file mode 100644
index 0000000000..2fc94ff0e6
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mc-cursor-appearance.patch
@@ -0,0 +1,52 @@
+--- mc-4.6.2/edit/editdraw.c
++++ mc-4.6.2/edit/editdraw.c
+@@ -356,8 +356,13 @@
+ if (use_colors && visible_tabs) {
+ c = (p->style & ~MOD_CURSOR) | MOD_WHITESPACE;
+ if (i > 2) {
+- p->ch = '<';
+- p->style |= MOD_WHITESPACE;
++ if (p->style & MOD_CURSOR) {
++ p->ch = ' ';
++ }
++ else {
++ p->ch = '<';
++ p->style |= MOD_WHITESPACE;
++ }
+ p++;
+ while (--i > 1) {
+ p->style = c;
+@@ -380,8 +385,13 @@
+ p++;
+ }
+ } else if (use_colors && visible_tws && q >= tws) {
+- p->style |= MOD_WHITESPACE;
+- p->ch = '.';
++ if (p->style & MOD_CURSOR) {
++ p->ch = ' ';
++ }
++ else {
++ p->style |= MOD_WHITESPACE;
++ p->ch = '.';
++ }
+ p++;
+ c = p->style & ~MOD_CURSOR;
+ while (--i) {
+@@ -390,7 +400,7 @@
+ p++;
+ }
+ } else {
+- p->ch |= ' ';
++ p->ch = ' ';
+ c = p->style & ~MOD_CURSOR;
+ p++;
+ while (--i) {
+@@ -401,7 +411,7 @@
+ }
+ break;
+ case ' ':
+- if (use_colors && visible_tws && q >= tws) {
++ if (use_colors && visible_tws && q >= tws && !(p->style & MOD_CURSOR)) {
+ p->ch = '.';
+ p->style |= MOD_WHITESPACE;
+ p++;
diff --git a/packages/mc/mc-4.6.2/mc-esc-seq.patch b/packages/mc/mc-4.6.2/mc-esc-seq.patch
new file mode 100644
index 0000000000..b9ec04a75a
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mc-esc-seq.patch
@@ -0,0 +1,11 @@
+--- mc-4.6.2/src/util.c
++++ mc-4.6.2/src/util.c
+@@ -1205,6 +1205,8 @@
+ /* strchr() matches trailing binary 0 */
+ while (*(++r) && strchr ("0123456789;?", *r));
+ }
++ else if (*r == '(')
++ r++;
+
+ /*
+ * Now we are at the last character of the sequence.
diff --git a/packages/mc/mc-4.6.2/mc-utf8-look-and-feel.patch b/packages/mc/mc-4.6.2/mc-utf8-look-and-feel.patch
new file mode 100644
index 0000000000..83ad60135d
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mc-utf8-look-and-feel.patch
@@ -0,0 +1,206 @@
+Index: mc-4.6.2~git20080311/src/main.c
+================================================================================
+--- mc-4.6.2/src/main.c
++++ mc-4.6.2/src/main.c
+@@ -276,6 +276,9 @@
+ /* The user's shell */
+ const char *shell = NULL;
+
++/* Is the LANG UTF-8 ? */
++gboolean is_utf8 = FALSE;
++
+ /* mc_home: The home of MC */
+ char *mc_home = NULL;
+
+@@ -2126,6 +2129,16 @@
+ int
+ main (int argc, char *argv[])
+ {
++ /* Check whether we have UTF-8 locale */
++ char *lang = getenv("LANG");
++ size_t len = 0;
++
++ if ( lang )
++ len = strlen(lang);
++
++ if ( len >= 5 && !strcasecmp(&lang[len-5],"UTF-8") )
++ is_utf8 = TRUE;
++
+ /* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
+ setlocale (LC_ALL, "");
+ bindtextdomain ("mc", LOCALEDIR);
+--- mc-4.6.2/src/main.h
++++ mc-4.6.2/src/main.h
+@@ -69,6 +69,7 @@
+ extern int only_leading_plus_minus;
+ extern int output_starts_shell;
+ extern int midnight_shutdown;
++extern gboolean is_utf8;
+ extern char cmd_buf [512];
+ extern const char *shell;
+
+--- mc-4.6.2/src/screen.c
++++ mc-4.6.2/src/screen.c
+@@ -892,6 +892,9 @@
+ }
+ #endif /* HAVE_SLANG */
+
++ vscrollbar (panel->widget, panel->widget.lines, panel->widget.cols-1, 2, 2,
++ panel->selected, panel->count, TRUE);
++
+ if (panel->active)
+ attrset (REVERSE_COLOR);
+
+@@ -1493,7 +1496,7 @@
+ panel->dirty = 1;
+
+ /* Status needn't to be split */
+- usable_columns = ((panel->widget.cols-2)/((isstatus)
++ usable_columns = ((panel->widget.cols-3)/((isstatus)
+ ? 1
+ : (panel->split+1))) - (!isstatus && panel->split);
+
+--- mc-4.6.2/src/widget.c
++++ mc-4.6.2/src/widget.c
+@@ -1944,52 +1944,86 @@
+ return in;
+ }
+
+-
+-/* Listbox widget */
++/* Vertical scrollbar widget */
+
+-/* Should draw the scrollbar, but currently draws only
+- * indications that there is more information
+- */
+-static int listbox_cdiff (WLEntry *s, WLEntry *e);
+-
+-static void
+-listbox_drawscroll (WListbox *l)
++void
++vscrollbar (Widget widget, int height, int width, int tpad, int bpad,
++ int selected, int count, gboolean color)
+ {
+ int line;
+- int i, top;
+- int max_line = l->height-1;
+-
++ int i;
++
+ /* Are we at the top? */
+- widget_move (&l->widget, 0, l->width);
+- if (l->list == l->top)
+- one_vline ();
++ widget_move (&widget, tpad, width);
++#ifndef UTF8
++ if (!selected)
++ one_vline ();
+ else
+- addch ('^');
++ addch ('^');
++#else
++ if (color) attrset (MARKED_COLOR);
++ if (is_utf8)
++ SLsmg_write_string("▴");
++ else
++ addch ('^');
++ if (color) attrset (NORMAL_COLOR);
++#endif
+
+ /* Are we at the bottom? */
+- widget_move (&l->widget, max_line, l->width);
+- top = listbox_cdiff (l->list, l->top);
+- if ((top + l->height == l->count) || l->height >= l->count)
+- one_vline ();
++ widget_move (&widget, height-1-bpad, width);
++#ifndef UTF8
++ if (selected == count-1)
++ one_vline ();
++ else
++ addch ('v');
++#else
++ if (color) attrset (MARKED_COLOR);
++ if (is_utf8)
++ SLsmg_write_string("▾");
+ else
+- addch ('v');
++ addch('v');
++ if (color) attrset (NORMAL_COLOR);
++#endif
+
+ /* Now draw the nice relative pointer */
+- if (l->count)
+- line = 1+ ((l->pos * (l->height-2)) / l->count);
++ if (count > 1)
++ line = tpad + 1 + ((selected * (height-3-tpad-bpad)) / (count-1));
+ else
+- line = 0;
+-
+- for (i = 1; i < max_line; i++){
+- widget_move (&l->widget, i, l->width);
+- if (i != line)
+- one_vline ();
+- else
+- addch ('*');
++ line = 0;
++
++ for (i = tpad + 1; i < height-1-bpad; i++){
++ widget_move (&widget, i, width);
++ if (i != line)
++#ifndef UTF8
++ one_vline ();
++ else
++ addch ('*');
++#else
++ if (is_utf8)
++ SLsmg_write_string("▒");
++ else
++ one_vline();
++ else {
++ if (color) attrset (MARKED_COLOR);
++ if (is_utf8)
++ SLsmg_write_string("◈");
++ else
++ addch('*');
++ if (color) attrset (NORMAL_COLOR);
++ }
++#endif
+ }
+ }
+-
+-static void
++
++
++/* Listbox widget */
++
++/* Should draw the scrollbar, but currently draws only
++ * indications that there is more information
++ */
++static int listbox_cdiff (WLEntry *s, WLEntry *e);
++
++void
+ listbox_draw (WListbox *l, int focused)
+ {
+ WLEntry *e;
+@@ -2032,7 +2066,7 @@
+ if (!l->scrollbar)
+ return;
+ attrset (normalc);
+- listbox_drawscroll (l);
++ vscrollbar (l->widget, l->height, l->width, 0, 0, l->pos, l->count, FALSE);
+ }
+
+ /* Returns the number of items between s and e,
+--- mc-4.6.2/src/widget.h
++++ mc-4.6.2/src/widget.h
+@@ -187,6 +187,10 @@
+ /* Listbox manager */
+ WLEntry *listbox_get_data (WListbox *l, int pos);
+
++/* Vertical scrollbar */
++void vscrollbar (Widget widget, int height, int width, int tpad, int bpad,
++ int selected, int count, gboolean color);
++
+ /* search text int listbox entries */
+ WLEntry *listbox_search_text (WListbox *l, const char *text);
+ void listbox_select_entry (WListbox *l, WLEntry *dest);
diff --git a/packages/mc/mc-4.6.2/mc-utf8-nlink.patch b/packages/mc/mc-4.6.2/mc-utf8-nlink.patch
new file mode 100644
index 0000000000..9e361630c4
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mc-utf8-nlink.patch
@@ -0,0 +1,11 @@
+--- mc-4.6.2/src/screen.c
++++ mc-4.6.2/src/screen.c
+@@ -671,7 +671,7 @@
+ SLsmg_write_nwchars (((wchar_t *) buffer)
+ + txtlen - n2, n2);
+ } else
+- SLsmg_write_nwchars ((wchar_t *) buffer, len);
++ SLsmg_write_nwchars ((wchar_t *) buffer + still, len);
+ } else {
+ printw ("%*s", still, "");
+ SLsmg_write_nwchars ((wchar_t *) buffer, txtlen);
diff --git a/packages/mc/mc-4.6.2/mc-utf8-slang-codeset.patch b/packages/mc/mc-4.6.2/mc-utf8-slang-codeset.patch
new file mode 100644
index 0000000000..ff4780c7ce
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mc-utf8-slang-codeset.patch
@@ -0,0 +1,20 @@
+--- mc-4.6.2/slang/slcommon.c
++++ mc-4.6.2/slang/slcommon.c
+@@ -31,7 +31,7 @@
+ # include <locale.h>
+ #endif
+
+-#ifdef HAVE_LANGINFO_H
++#ifdef HAVE_LANGINFO_CODESET
+ # include <langinfo.h>
+ #endif
+
+@@ -87,7 +87,7 @@
+
+ (void) setlocale (LC_ALL, "");
+
+-#ifdef HAVE_NL_LANGINFO_CODESET
++#ifdef HAVE_LANGINFO_CODESET
+ locale = nl_langinfo (CODESET);
+ if ((locale != NULL) && (*locale))
+ {
diff --git a/packages/mc/mc-4.6.2/mc-utf8.patch b/packages/mc/mc-4.6.2/mc-utf8.patch
new file mode 100644
index 0000000000..5778604350
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mc-utf8.patch
@@ -0,0 +1,5357 @@
+--- mc-4.6.2/acinclude.m4
++++ mc-4.6.2/acinclude.m4
+@@ -399,14 +399,14 @@
+ fi
+
+ dnl Unless external S-Lang was requested, reject S-Lang with UTF-8 hacks
+- if test x$with_screen = xslang; then
+- :
+- m4_if([$1], strict, ,
+- [AC_CHECK_LIB([slang], [SLsmg_write_nwchars],
+- [AC_MSG_WARN([Rejecting S-Lang with UTF-8 support, \
+-it's not fully supported yet])
+- with_screen=mcslang])])
+- fi
++dnl if test x$with_screen = xslang; then
++dnl :
++dnl m4_if([$1], strict, ,
++dnl [AC_CHECK_LIB([slang], [SLsmg_write_nwchars],
++dnl [AC_MSG_WARN([Rejecting S-Lang with UTF-8 support, \
++dnl it's not fully supported yet])
++dnl with_screen=mcslang])])
++dnl fi
+
+ if test x$with_screen = xslang; then
+ AC_DEFINE(HAVE_SYSTEM_SLANG, 1,
+--- mc-4.6.2/edit/edit-widget.h
++++ mc-4.6.2/edit/edit-widget.h
+@@ -30,6 +30,11 @@
+ long command;
+ } edit_key_map_type;
+
++struct action {
++ mc_wchar_t ch;
++ long flags;
++};
++
+ struct WEdit {
+ Widget widget;
+
+@@ -42,8 +47,17 @@
+ /* dynamic buffers and cursor position for editor: */
+ long curs1; /* position of the cursor from the beginning of the file. */
+ long curs2; /* position from the end of the file */
++#ifndef UTF8
+ unsigned char *buffers1[MAXBUFF + 1]; /* all data up to curs1 */
+ unsigned char *buffers2[MAXBUFF + 1]; /* all data from end of file down to curs2 */
++#else /* UTF8 */
++ mc_wchar_t *buffers1[MAXBUFF + 1]; /* all data up to curs1 */
++ mc_wchar_t *buffers2[MAXBUFF + 1]; /* all data from end of file down to curs2 */
++
++ unsigned char charbuf[MB_LEN_MAX];
++ int charpoint;
++#endif /* UTF8 */
++
+
+ /* search variables */
+ long search_start; /* First character to start searching from */
+@@ -87,7 +101,7 @@
+
+ /* undo stack and pointers */
+ unsigned long stack_pointer;
+- long *undo_stack;
++ struct action *undo_stack;
+ unsigned long stack_size;
+ unsigned long stack_size_mask;
+ unsigned long stack_bottom;
+--- mc-4.6.2/edit/edit.c
++++ mc-4.6.2/edit/edit.c
+@@ -105,7 +105,11 @@
+
+ static void user_menu (WEdit *edit);
+
++#ifndef UTF8
+ int edit_get_byte (WEdit * edit, long byte_index)
++#else
++mc_wchar_t edit_get_byte (WEdit * edit, long byte_index)
++#endif
+ {
+ unsigned long p;
+ if (byte_index >= (edit->curs1 + edit->curs2) || byte_index < 0)
+@@ -134,7 +138,7 @@
+
+ edit->curs1 = 0;
+ edit->curs2 = 0;
+- edit->buffers2[0] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[0] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ }
+
+ /*
+@@ -159,7 +163,7 @@
+ }
+
+ if (!edit->buffers2[buf2])
+- edit->buffers2[buf2] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[buf2] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+
+ mc_read (file,
+ (char *) edit->buffers2[buf2] + EDIT_BUF_SIZE -
+@@ -169,7 +173,7 @@
+ for (buf = buf2 - 1; buf >= 0; buf--) {
+ /* edit->buffers2[0] is already allocated */
+ if (!edit->buffers2[buf])
+- edit->buffers2[buf] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[buf] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ mc_read (file, (char *) edit->buffers2[buf], EDIT_BUF_SIZE);
+ }
+
+@@ -242,9 +246,44 @@
+ {
+ int c;
+ long i = 0;
+- while ((c = fgetc (f)) >= 0) {
++#ifndef UTF8
++ while ((c = fgetc (f)) != EOF) {
+ edit_insert (edit, c);
+ i++;
++#else /* UTF8 */
++ unsigned char buf[MB_LEN_MAX];
++ int charpos = 0;
++ mbstate_t mbs;
++
++ while ((c = fgetc (f)) != EOF) {
++ mc_wchar_t wc;
++ int size;
++ int j;
++
++ buf[charpos++] = c;
++
++ memset (&mbs, 0, sizeof (mbs));
++ size = mbrtowc(&wc, (char *)buf, charpos, &mbs);
++
++ if (size == -2)
++ continue; /* incomplete */
++
++ else if (size >= 0) {
++ edit_insert (edit, wc);
++ i++;
++ charpos = 0;
++ continue;
++ }
++ else {
++
++ /* invalid */
++#ifdef __STDC_ISO_10646__
++ for (j=0; j<charpos; j++)
++ edit_insert (edit, BINARY_CHAR_OFFSET + (mc_wchar_t)buf[j]);
++#endif
++ charpos = 0;
++ }
++#endif /* UTF8 */
+ }
+ return i;
+ }
+@@ -252,9 +291,32 @@
+ long edit_write_stream (WEdit * edit, FILE * f)
+ {
+ long i;
++#ifndef UTF8
+ for (i = 0; i < edit->last_byte; i++)
+ if (fputc (edit_get_byte (edit, i), f) < 0)
+ break;
++#else /* UTF8 */
++ for (i = 0; i < edit->last_byte; i++) {
++ mc_wchar_t wc = edit_get_byte (edit, i);
++ int res;
++ char tmpbuf[MB_LEN_MAX];
++ mbstate_t mbs;
++
++ memset (&mbs, 0, sizeof (mbs));
++
++#ifdef __STDC_ISO_10646__
++ if (wc >= BINARY_CHAR_OFFSET && wc < (BINARY_CHAR_OFFSET + 256)) {
++ res = 1;
++ tmpbuf[0] = (char) (wc - BINARY_CHAR_OFFSET);
++ } else
++#endif
++ res = wcrtomb(tmpbuf, wc, &mbs);
++ if (res > 0) {
++ if (fwrite(tmpbuf, res, 1, f) != 1)
++ break;
++ }
++ }
++#endif /* UTF8 */
+ return i;
+ }
+
+@@ -293,12 +355,46 @@
+ int i, file, blocklen;
+ long current = edit->curs1;
+ unsigned char *buf;
++#ifdef UTF8
++ mbstate_t mbs;
++ int bufstart = 0;
++
++ memset (&mbs, 0, sizeof (mbs));
++#endif /* UTF8 */
+ if ((file = mc_open (filename, O_RDONLY | O_BINARY)) == -1)
+ return 0;
+ buf = g_malloc (TEMP_BUF_LEN);
++#ifndef UTF8
+ while ((blocklen = mc_read (file, (char *) buf, TEMP_BUF_LEN)) > 0) {
+ for (i = 0; i < blocklen; i++)
+ edit_insert (edit, buf[i]);
++#else /* UTF8 */
++ while ((blocklen = mc_read (file, (char *) buf + bufstart, TEMP_BUF_LEN - bufstart)) > 0) {
++ blocklen += bufstart;
++ bufstart = 0;
++ for (i = 0; i < blocklen; ) {
++ mc_wchar_t wc;
++ int j;
++ int size = mbrtowc(&wc, (char *)buf + i, blocklen - i, &mbs);
++ if (size == -2) { /*incomplete char*/
++ bufstart = blocklen - i;
++ memcpy(buf, buf+i, bufstart);
++ i = blocklen;
++ memset (&mbs, 0, sizeof (mbs));
++ }
++ else if (size <= 0) {
++#ifdef __STDC_ISO_10646__
++ edit_insert (edit, BINARY_CHAR_OFFSET + (mc_wchar_t)buf[i]);
++#endif
++ memset (&mbs, 0, sizeof (mbs));
++ i++; /* skip broken char */
++ }
++ else {
++ edit_insert (edit, wc);
++ i+=size;
++ }
++ }
++#endif /* UTF8 */
+ }
+ edit_cursor_move (edit, current - edit->curs1);
+ g_free (buf);
+@@ -388,7 +484,11 @@
+ static int
+ edit_load_file (WEdit *edit)
+ {
++#ifndef UTF8
+ int fast_load = 1;
++#else /* UTF8 */
++ int fast_load = 0; /* can't be used with multibyte characters */
++#endif /* UTF8 */
+
+ /* Cannot do fast load if a filter is used */
+ if (edit_find_filter (edit->filename) >= 0)
+@@ -454,6 +554,7 @@
+ edit->prev_col = column;
+ edit_move_to_prev_col (edit, edit_bol (edit, edit->curs1));
+ edit_move_display (edit, line - (edit->num_widget_lines / 2));
++ edit->charpoint = 0;
+ }
+
+ /* Save cursor position in the file */
+@@ -537,7 +638,7 @@
+ edit_set_filename (edit, filename);
+ edit->stack_size = START_STACK_SIZE;
+ edit->stack_size_mask = START_STACK_SIZE - 1;
+- edit->undo_stack = g_malloc ((edit->stack_size + 10) * sizeof (long));
++ edit->undo_stack = g_malloc ((edit->stack_size + 10) * sizeof (struct action));
+ if (edit_load_file (edit)) {
+ /* edit_load_file already gives an error message */
+ if (to_free)
+@@ -692,14 +793,23 @@
+ {
+ unsigned long sp = edit->stack_pointer;
+ unsigned long spm1;
+- long *t;
++
++ struct action *t;
++ mc_wchar_t ch = 0;
++
++ if (c == CHAR_INSERT || c == CHAR_INSERT_AHEAD) {
++ va_list ap;
++ va_start (ap, c);
++ ch = va_arg (ap, mc_wint_t);
++ va_end (ap);
++ }
+
+ /* first enlarge the stack if necessary */
+ if (sp > edit->stack_size - 10) { /* say */
+ if (option_max_undo < 256)
+ option_max_undo = 256;
+ if (edit->stack_size < (unsigned long) option_max_undo) {
+- t = g_realloc (edit->undo_stack, (edit->stack_size * 2 + 10) * sizeof (long));
++ t = g_realloc (edit->undo_stack, (edit->stack_size * 2 + 10) * sizeof (struct action));
+ if (t) {
+ edit->undo_stack = t;
+ edit->stack_size <<= 1;
+@@ -714,7 +824,7 @@
+ #ifdef FAST_MOVE_CURSOR
+ if (c == CURS_LEFT_LOTS || c == CURS_RIGHT_LOTS) {
+ va_list ap;
+- edit->undo_stack[sp] = c == CURS_LEFT_LOTS ? CURS_LEFT : CURS_RIGHT;
++ edit->undo_stack[sp].flags = c == CURS_LEFT_LOTS ? CURS_LEFT : CURS_RIGHT;
+ edit->stack_pointer = (edit->stack_pointer + 1) & edit->stack_size_mask;
+ va_start (ap, c);
+ c = -(va_arg (ap, int));
+@@ -725,12 +835,14 @@
+ && spm1 != edit->stack_bottom
+ && ((sp - 2) & edit->stack_size_mask) != edit->stack_bottom) {
+ int d;
+- if (edit->undo_stack[spm1] < 0) {
+- d = edit->undo_stack[(sp - 2) & edit->stack_size_mask];
+- if (d == c) {
+- if (edit->undo_stack[spm1] > -1000000000) {
++ mc_wchar_t d_ch;
++ if (edit->undo_stack[spm1].flags < 0) {
++ d = edit->undo_stack[(sp - 2) & edit->stack_size_mask].flags;
++ d_ch = edit->undo_stack[(sp - 2) & edit->stack_size_mask].ch;
++ if (d == c && d_ch == ch) {
++ if (edit->undo_stack[spm1].flags > -1000000000) {
+ if (c < KEY_PRESS) /* --> no need to push multiple do-nothings */
+- edit->undo_stack[spm1]--;
++ edit->undo_stack[spm1].flags--;
+ return;
+ }
+ }
+@@ -738,19 +850,20 @@
+ #ifndef NO_STACK_CURSMOVE_ANIHILATION
+ else if ((c == CURS_LEFT && d == CURS_RIGHT)
+ || (c == CURS_RIGHT && d == CURS_LEFT)) { /* a left then a right anihilate each other */
+- if (edit->undo_stack[spm1] == -2)
++ if (edit->undo_stack[spm1].flags == -2)
+ edit->stack_pointer = spm1;
+ else
+- edit->undo_stack[spm1]++;
++ edit->undo_stack[spm1].flags++;
+ return;
+ }
+ #endif
+ } else {
+- d = edit->undo_stack[spm1];
+- if (d == c) {
++ d = edit->undo_stack[spm1].flags;
++ d_ch = edit->undo_stack[spm1].ch;
++ if (d == c && d_ch == ch) {
+ if (c >= KEY_PRESS)
+ return; /* --> no need to push multiple do-nothings */
+- edit->undo_stack[sp] = -2;
++ edit->undo_stack[sp].flags = -2;
+ goto check_bottom;
+ }
+ #ifndef NO_STACK_CURSMOVE_ANIHILATION
+@@ -762,7 +875,9 @@
+ #endif
+ }
+ }
+- edit->undo_stack[sp] = c;
++ edit->undo_stack[sp].flags = c;
++ edit->undo_stack[sp].ch = ch;
++
+ check_bottom:
+
+ edit->stack_pointer = (edit->stack_pointer + 1) & edit->stack_size_mask;
+@@ -775,10 +890,10 @@
+ (((unsigned long) c + 1) & edit->stack_size_mask) == edit->stack_bottom)
+ do {
+ edit->stack_bottom = (edit->stack_bottom + 1) & edit->stack_size_mask;
+- } while (edit->undo_stack[edit->stack_bottom] < KEY_PRESS && edit->stack_bottom != edit->stack_pointer);
++ } while (edit->undo_stack[edit->stack_bottom].flags < KEY_PRESS && edit->stack_bottom != edit->stack_pointer);
+
+ /*If a single key produced enough pushes to wrap all the way round then we would notice that the [stack_bottom] does not contain KEY_PRESS. The stack is then initialised: */
+- if (edit->stack_pointer != edit->stack_bottom && edit->undo_stack[edit->stack_bottom] < KEY_PRESS)
++ if (edit->stack_pointer != edit->stack_bottom && edit->undo_stack[edit->stack_bottom].flags < KEY_PRESS)
+ edit->stack_bottom = edit->stack_pointer = 0;
+ }
+
+@@ -787,30 +902,30 @@
+ then the file should be as it was when he loaded up. Then set edit->modified to 0.
+ */
+ static long
+-pop_action (WEdit * edit)
++pop_action (WEdit * edit, struct action *c)
+ {
+- long c;
+ unsigned long sp = edit->stack_pointer;
+ if (sp == edit->stack_bottom) {
+- return STACK_BOTTOM;
++ c->flags = STACK_BOTTOM;
++ return c->flags;
+ }
+ sp = (sp - 1) & edit->stack_size_mask;
+- if ((c = edit->undo_stack[sp]) >= 0) {
+-/* edit->undo_stack[sp] = '@'; */
++ *c = edit->undo_stack[sp];
++ if (edit->undo_stack[sp].flags >= 0) {
+ edit->stack_pointer = (edit->stack_pointer - 1) & edit->stack_size_mask;
+- return c;
++ return c->flags;
+ }
+ if (sp == edit->stack_bottom) {
+ return STACK_BOTTOM;
+ }
+- c = edit->undo_stack[(sp - 1) & edit->stack_size_mask];
+- if (edit->undo_stack[sp] == -2) {
+-/* edit->undo_stack[sp] = '@'; */
++ *c = edit->undo_stack[(sp - 1) & edit->stack_size_mask];
++
++ if (edit->undo_stack[sp].flags == -2) {
+ edit->stack_pointer = sp;
+ } else
+- edit->undo_stack[sp]++;
++ edit->undo_stack[sp].flags++;
+
+- return c;
++ return c->flags;
+ }
+
+ /* is called whenever a modification is made by one of the four routines below */
+@@ -831,7 +946,7 @@
+ */
+
+ void
+-edit_insert (WEdit *edit, int c)
++edit_insert (WEdit *edit, mc_wchar_t c)
+ {
+ /* check if file has grown to large */
+ if (edit->last_byte >= SIZE_LIMIT)
+@@ -869,12 +984,11 @@
+ /* add a new buffer if we've reached the end of the last one */
+ if (!(edit->curs1 & M_EDIT_BUF_SIZE))
+ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] =
+- g_malloc (EDIT_BUF_SIZE);
++ g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+
+ /* perform the insertion */
+- edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE][edit->
+- curs1 & M_EDIT_BUF_SIZE]
+- = (unsigned char) c;
++ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE]
++ [edit->curs1 & M_EDIT_BUF_SIZE] = c;
+
+ /* update file length */
+ edit->last_byte++;
+@@ -885,7 +999,7 @@
+
+
+ /* same as edit_insert and move left */
+-void edit_insert_ahead (WEdit * edit, int c)
++void edit_insert_ahead (WEdit * edit, mc_wchar_t c)
+ {
+ if (edit->last_byte >= SIZE_LIMIT)
+ return;
+@@ -908,7 +1022,7 @@
+ edit->last_get_rule += (edit->last_get_rule >= edit->curs1);
+
+ if (!((edit->curs2 + 1) & M_EDIT_BUF_SIZE))
+- edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1] = c;
+
+ edit->last_byte++;
+@@ -918,7 +1032,7 @@
+
+ int edit_delete (WEdit * edit)
+ {
+- int p;
++ mc_wint_t p;
+ if (!edit->curs2)
+ return 0;
+
+@@ -942,7 +1056,7 @@
+ edit->total_lines--;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+- edit_push_action (edit, p + 256);
++ edit_push_action (edit, CHAR_INSERT_AHEAD, p);
+ if (edit->curs1 < edit->start_display) {
+ edit->start_display--;
+ if (p == '\n')
+@@ -956,7 +1070,7 @@
+ static int
+ edit_backspace (WEdit * edit)
+ {
+- int p;
++ mc_wint_t p;
+ if (!edit->curs1)
+ return 0;
+
+@@ -980,7 +1094,7 @@
+ edit->total_lines--;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+- edit_push_action (edit, p);
++ edit_push_action (edit, CHAR_INSERT, p);
+
+ if (edit->curs1 < edit->start_display) {
+ edit->start_display--;
+@@ -993,10 +1107,18 @@
+
+ #ifdef FAST_MOVE_CURSOR
+
+-static void memqcpy (WEdit * edit, unsigned char *dest, unsigned char *src, int n)
++static void memqcpy (WEdit * edit, mc_wchar_t *dest, mc_wchar_t *src, int n)
+ {
+ unsigned long next;
++#ifndef UTF8
+ while ((next = (unsigned long) memccpy (dest, src, '\n', n))) {
++#else /* UTF8 */
++ while (n) {
++ next = 0;
++ while (next < n && src[next]!='\n') next++;
++ if (next < n) next++;
++ wmemcpy (dest, src, next)
++#endif /* UTF8 */
+ edit->curs_line--;
+ next -= (unsigned long) dest;
+ n -= next;
+@@ -1009,7 +1131,7 @@
+ edit_move_backward_lots (WEdit *edit, long increment)
+ {
+ int r, s, t;
+- unsigned char *p;
++ mc_wchar_t *p;
+
+ if (increment > edit->curs1)
+ increment = edit->curs1;
+@@ -1049,7 +1171,7 @@
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = p;
+ else
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] =
+- g_malloc (EDIT_BUF_SIZE);
++ g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ } else {
+ g_free (p);
+ }
+@@ -1087,7 +1209,7 @@
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = p;
+ else
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] =
+- g_malloc (EDIT_BUF_SIZE);
++ g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ } else {
+ g_free (p);
+ }
+@@ -1120,7 +1242,7 @@
+
+ c = edit_get_byte (edit, edit->curs1 - 1);
+ if (!((edit->curs2 + 1) & M_EDIT_BUF_SIZE))
+- edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1] = c;
+ edit->curs2++;
+ c = edit->buffers1[(edit->curs1 - 1) >> S_EDIT_BUF_SIZE][(edit->curs1 - 1) & M_EDIT_BUF_SIZE];
+@@ -1144,7 +1266,7 @@
+
+ c = edit_get_byte (edit, edit->curs1);
+ if (!(edit->curs1 & M_EDIT_BUF_SIZE))
+- edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE][edit->curs1 & M_EDIT_BUF_SIZE] = c;
+ edit->curs1++;
+ c = edit->buffers2[(edit->curs2 - 1) >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - ((edit->curs2 - 1) & M_EDIT_BUF_SIZE) - 1];
+@@ -1249,7 +1371,7 @@
+ q = edit->last_byte + 2;
+
+ for (col = 0, p = current; p < q; p++) {
+- int c;
++ mc_wchar_t c;
+ if (cols != -10) {
+ if (col == cols)
+ return p;
+@@ -1267,7 +1389,7 @@
+ } else if (c < 32 || c == 127)
+ col += 2; /* Caret notation for control characters */
+ else
+- col++;
++ col += wcwidth(c);
+ }
+ return col;
+ }
+@@ -1400,12 +1522,16 @@
+ is_blank (WEdit *edit, long offset)
+ {
+ long s, f;
+- int c;
++ mc_wchar_t c;
+ s = edit_bol (edit, offset);
+ f = edit_eol (edit, offset) - 1;
+ while (s <= f) {
+ c = edit_get_byte (edit, s++);
++#ifndef UTF8
+ if (!isspace (c))
++#else
++ if (!iswspace (c))
++#endif /* UTF8 */
+ return 0;
+ }
+ return 1;
+@@ -1660,6 +1786,7 @@
+ return 2;
+ return 0x80000000UL;
+ }
++#ifndef UTF8
+ if (isupper (c))
+ c = 'A';
+ else if (islower (c))
+@@ -1670,6 +1797,18 @@
+ c = '0';
+ else if (isspace (c))
+ c = ' ';
++#else
++ if (iswupper (c))
++ c = 'A';
++ else if (iswlower (c))
++ c = 'a';
++ else if (iswalpha (c))
++ c = 'a';
++ else if (iswdigit (c))
++ c = '0';
++ else if (iswspace (c))
++ c = ' ';
++#endif /* UTF8 */
+ q = strchr (option_chars_move_whole_word, c);
+ if (!q)
+ return 0xFFFFFFFFUL;
+@@ -1694,10 +1833,18 @@
+ c2 = edit_get_byte (edit, edit->curs1);
+ if (!(my_type_of (c1) & my_type_of (c2)))
+ break;
++#ifndef UTF8
+ if (isspace (c1) && !isspace (c2))
++#else
++ if (iswspace (c1) && !iswspace (c2))
++#endif /* UTF8 */
+ break;
+ if (s)
++#ifndef UTF8
+ if (!isspace (c1) && isspace (c2))
++#else
++ if (!iswspace (c1) && iswspace (c2))
++#endif /* UTF8 */
+ break;
+ }
+ }
+@@ -1720,10 +1867,18 @@
+ c2 = edit_get_byte (edit, edit->curs1);
+ if (!(my_type_of (c1) & my_type_of (c2)))
+ break;
++#ifndef UTF8
+ if (isspace (c1) && !isspace (c2))
++#else
++ if (iswspace (c1) && !iswspace (c2))
++#endif /* UTF8 */
+ break;
+ if (s)
++#ifndef UTF8
+ if (!isspace (c1) && isspace (c2))
++#else
++ if (!iswspace (c1) && iswspace (c2))
++#endif /* UTF8 */
+ break;
+ }
+ }
+@@ -1743,7 +1898,11 @@
+ break;
+ c1 = edit_delete (edit);
+ c2 = edit_get_byte (edit, edit->curs1);
++#ifndef UTF8
+ if ((isspace (c1) == 0) != (isspace (c2) == 0))
++#else
++ if ((iswspace (c1) == 0) != (iswspace (c2) == 0))
++#endif /* UTF8 */
+ break;
+ if (!(my_type_of (c1) & my_type_of (c2)))
+ break;
+@@ -1758,7 +1917,11 @@
+ break;
+ c1 = edit_backspace (edit);
+ c2 = edit_get_byte (edit, edit->curs1 - 1);
++#ifndef UTF8
+ if ((isspace (c1) == 0) != (isspace (c2) == 0))
++#else
++ if ((iswspace (c1) == 0) != (iswspace (c2) == 0))
++#endif /* UTF8 */
+ break;
+ if (!(my_type_of (c1) & my_type_of (c2)))
+ break;
+@@ -1772,13 +1935,13 @@
+ static void
+ edit_do_undo (WEdit * edit)
+ {
+- long ac;
++ struct action ac;
+ long count = 0;
+
+ edit->stack_disable = 1; /* don't record undo's onto undo stack! */
+
+- while ((ac = pop_action (edit)) < KEY_PRESS) {
+- switch ((int) ac) {
++ while (pop_action (edit, &ac) < KEY_PRESS) {
++ switch ((int) ac.flags) {
+ case STACK_BOTTOM:
+ goto done_undo;
+ case CURS_RIGHT:
+@@ -1799,31 +1962,33 @@
+ case COLUMN_OFF:
+ column_highlighting = 0;
+ break;
++ case CHAR_INSERT:
++ edit_insert (edit, ac.ch);
++ break;
++ case CHAR_INSERT_AHEAD:
++ edit_insert_ahead (edit, ac.ch);
++ break;
+ }
+- if (ac >= 256 && ac < 512)
+- edit_insert_ahead (edit, ac - 256);
+- if (ac >= 0 && ac < 256)
+- edit_insert (edit, ac);
+
+- if (ac >= MARK_1 - 2 && ac < MARK_2 - 2) {
+- edit->mark1 = ac - MARK_1;
++ if (ac.flags >= MARK_1 - 2 && ac.flags < MARK_2 - 2) {
++ edit->mark1 = ac.flags - MARK_1;
+ edit->column1 = edit_move_forward3 (edit, edit_bol (edit, edit->mark1), 0, edit->mark1);
+- } else if (ac >= MARK_2 - 2 && ac < KEY_PRESS) {
+- edit->mark2 = ac - MARK_2;
++ } else if (ac.flags >= MARK_2 - 2 && ac.flags < KEY_PRESS) {
++ edit->mark2 = ac.flags - MARK_2;
+ edit->column2 = edit_move_forward3 (edit, edit_bol (edit, edit->mark2), 0, edit->mark2);
+ }
+ if (count++)
+ edit->force |= REDRAW_PAGE; /* more than one pop usually means something big */
+ }
+
+- if (edit->start_display > ac - KEY_PRESS) {
+- edit->start_line -= edit_count_lines (edit, ac - KEY_PRESS, edit->start_display);
++ if (edit->start_display > ac.flags - KEY_PRESS) {
++ edit->start_line -= edit_count_lines (edit, ac.flags - KEY_PRESS, edit->start_display);
+ edit->force |= REDRAW_PAGE;
+- } else if (edit->start_display < ac - KEY_PRESS) {
+- edit->start_line += edit_count_lines (edit, edit->start_display, ac - KEY_PRESS);
++ } else if (edit->start_display < ac.flags - KEY_PRESS) {
++ edit->start_line += edit_count_lines (edit, edit->start_display, ac.flags - KEY_PRESS);
+ edit->force |= REDRAW_PAGE;
+ }
+- edit->start_display = ac - KEY_PRESS; /* see push and pop above */
++ edit->start_display = ac.flags - KEY_PRESS; /* see push and pop above */
+ edit_update_curs_row (edit);
+
+ done_undo:;
+@@ -2103,7 +2268,7 @@
+ * passed as -1. Commands are executed, and char_for_insertion is
+ * inserted at the cursor.
+ */
+-void edit_execute_key_command (WEdit *edit, int command, int char_for_insertion)
++void edit_execute_key_command (WEdit *edit, int command, mc_wint_t char_for_insertion)
+ {
+ if (command == CK_Begin_Record_Macro) {
+ edit->macro_i = 0;
+@@ -2138,7 +2303,7 @@
+ all of them. It also does not check for the Undo command.
+ */
+ void
+-edit_execute_cmd (WEdit *edit, int command, int char_for_insertion)
++edit_execute_cmd (WEdit *edit, int command, mc_wint_t char_for_insertion)
+ {
+ edit->force |= REDRAW_LINE;
+
+@@ -2171,7 +2336,7 @@
+ }
+
+ /* An ordinary key press */
+- if (char_for_insertion >= 0) {
++ if (char_for_insertion != (mc_wint_t) -1) {
+ if (edit->overwrite) {
+ if (edit_get_byte (edit, edit->curs1) != '\n')
+ edit_delete (edit);
+--- mc-4.6.2/edit/edit.h
++++ mc-4.6.2/edit/edit.h
+@@ -25,6 +25,27 @@
+
+ #include <stdio.h>
+
++#include "src/tty.h"
++
++#ifdef UTF8
++#include <wchar.h>
++#include <wctype.h>
++
++#define mc_wchar_t wchar_t
++#define mc_wint_t wint_t
++
++#else
++
++#define mc_wchar_t unsigned char
++#define mc_wint_t int
++
++#endif
++
++
++/* unicode private use area */
++#define BINARY_CHAR_OFFSET 0xFFE00
++
++
+ #define N_menus 5
+
+ #define SEARCH_DIALOG_OPTION_NO_SCANF (1 << 0)
+@@ -86,6 +107,8 @@
+ #define START_STACK_SIZE 32
+
+ /* Some codes that may be pushed onto or returned from the undo stack */
++#define CHAR_INSERT 65
++#define CHAR_INSERT_AHEAD 66
+ #define CURS_LEFT 601
+ #define CURS_RIGHT 602
+ #define DELCHAR 603
+@@ -105,7 +128,7 @@
+
+ struct macro {
+ short command;
+- short ch;
++ mc_wchar_t ch;
+ };
+
+ struct WEdit;
+@@ -120,8 +143,12 @@
+ void menu_save_mode_cmd (void);
+ int edit_raw_key_query (const char *heading, const char *query, int cancel);
+ int edit_file (const char *_file, int line);
+-int edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch);
++int edit_translate_key (WEdit *edit, long x_key, int *cmd, mc_wint_t *ch);
++#ifndef UTF8
+ int edit_get_byte (WEdit * edit, long byte_index);
++#else /* UTF8 */
++mc_wchar_t edit_get_byte (WEdit * edit, long byte_index);
++#endif /* UTF8 */
+ int edit_count_lines (WEdit * edit, long current, int upto);
+ long edit_move_forward (WEdit * edit, long current, int lines, long upto);
+ long edit_move_forward3 (WEdit * edit, long current, int cols, long upto);
+@@ -148,11 +175,11 @@
+ void edit_delete_line (WEdit * edit);
+
+ int edit_delete (WEdit * edit);
+-void edit_insert (WEdit * edit, int c);
++void edit_insert (WEdit * edit, mc_wchar_t c);
+ void edit_cursor_move (WEdit * edit, long increment);
+ void edit_push_action (WEdit * edit, long c, ...);
+ void edit_push_key_press (WEdit * edit);
+-void edit_insert_ahead (WEdit * edit, int c);
++void edit_insert_ahead (WEdit * edit, mc_wchar_t c);
+ long edit_write_stream (WEdit * edit, FILE * f);
+ char *edit_get_write_filter (const char *writename, const char *filename);
+ int edit_save_confirm_cmd (WEdit * edit);
+@@ -183,7 +210,7 @@
+ int eval_marks (WEdit * edit, long *start_mark, long *end_mark);
+ void edit_status (WEdit * edit);
+ void edit_execute_key_command (WEdit *edit, int command,
+- int char_for_insertion);
++ mc_wint_t char_for_insertion);
+ void edit_update_screen (WEdit * edit);
+ int edit_print_string (WEdit * e, const char *s);
+ void edit_move_to_line (WEdit * e, long line);
+@@ -233,7 +260,7 @@
+ void format_paragraph (WEdit *edit, int force);
+
+ /* either command or char_for_insertion must be passed as -1 */
+-void edit_execute_cmd (WEdit *edit, int command, int char_for_insertion);
++void edit_execute_cmd (WEdit *edit, int command, mc_wint_t char_for_insertion);
+
+ #define get_sys_error(s) (s)
+
+--- mc-4.6.2/edit/editcmd.c
++++ mc-4.6.2/edit/editcmd.c
+@@ -60,7 +60,7 @@
+ #include "../src/selcodepage.h"
+
+ struct selection {
+- unsigned char * text;
++ mc_wchar_t *text;
+ int len;
+ };
+
+@@ -83,12 +83,16 @@
+ #define MAX_REPL_LEN 1024
+
+ static int edit_save_cmd (WEdit *edit);
+-static unsigned char *edit_get_block (WEdit *edit, long start,
++static mc_wchar_t *edit_get_block (WEdit *edit, long start,
+ long finish, int *l);
+
+-static inline int my_lower_case (int c)
++static inline mc_wchar_t my_lower_case (mc_wchar_t c)
+ {
++#ifndef UTF8
+ return tolower(c & 0xFF);
++#else
++ return towlower(c);
++#endif
+ }
+
+ static const char *
+@@ -123,11 +127,11 @@
+ #endif /* !HAVE_MEMMOVE */
+
+ /* #define itoa MY_itoa <---- this line is now in edit.h */
+-static char *
++static mc_wchar_t *
+ MY_itoa (int i)
+ {
+- static char t[14];
+- char *s = t + 13;
++ static mc_wchar_t t[14];
++ mc_wchar_t *s = t + 13;
+ int j = i;
+ *s-- = 0;
+ do {
+@@ -212,6 +216,48 @@
+ doupdate();
+ }
+
++#ifdef UTF8
++
++static size_t
++wchar_write(int fd, mc_wchar_t *buf, size_t len)
++{
++ char *tmpbuf = g_malloc(len + MB_LEN_MAX);
++ mbstate_t mbs;
++ size_t i;
++ size_t outlen = 0;
++ size_t res;
++
++ for (i = 0; i < len; i++) {
++ if (outlen >= len) {
++ if ((res = mc_write(fd, tmpbuf, outlen)) != outlen) {
++ g_free(tmpbuf);
++ return -1;
++ }
++ outlen = 0;
++ }
++ memset (&mbs, 0, sizeof (mbs));
++#ifdef __STDC_ISO_10646__
++ if (buf[i] >= BINARY_CHAR_OFFSET && buf[i] < (BINARY_CHAR_OFFSET + 256)) {
++ res = 1;
++ tmpbuf[outlen] = (char) (buf[i] - BINARY_CHAR_OFFSET);
++
++ } else
++#endif
++ res = wcrtomb(tmpbuf + outlen, buf[i], &mbs);
++ if (res > 0) {
++ outlen += res;
++ }
++ }
++ if ((res = mc_write(fd, tmpbuf, outlen)) != outlen) {
++ g_free(tmpbuf);
++ return -1;
++ }
++ g_free(tmpbuf);
++ return len;
++}
++
++#endif /* UTF8 */
++
+ /* If 0 (quick save) then a) create/truncate <filename> file,
+ b) save to <filename>;
+ if 1 (safe save) then a) save to <tempnam>,
+@@ -359,32 +405,48 @@
+ buf = 0;
+ filelen = edit->last_byte;
+ while (buf <= (edit->curs1 >> S_EDIT_BUF_SIZE) - 1) {
++#ifndef UTF8
+ if (mc_write (fd, (char *) edit->buffers1[buf], EDIT_BUF_SIZE)
++#else /* UTF8 */
++ if (wchar_write (fd, edit->buffers1[buf], EDIT_BUF_SIZE)
++#endif /* UTF8 */
+ != EDIT_BUF_SIZE) {
+ mc_close (fd);
+ goto error_save;
+ }
+ buf++;
+ }
++#ifndef UTF8
+ if (mc_write
+ (fd, (char *) edit->buffers1[buf],
++#else /* UTF8 */
++ if (wchar_write
++ (fd, edit->buffers1[buf],
++#endif /* UTF8 */
+ edit->curs1 & M_EDIT_BUF_SIZE) !=
+ (edit->curs1 & M_EDIT_BUF_SIZE)) {
+ filelen = -1;
+ } else if (edit->curs2) {
+ edit->curs2--;
+ buf = (edit->curs2 >> S_EDIT_BUF_SIZE);
+- if (mc_write
+- (fd,
+- (char *) edit->buffers2[buf] + EDIT_BUF_SIZE -
++#ifndef UTF8
++ if (mc_write(fd, (char *) edit->buffers2[buf] + EDIT_BUF_SIZE -
++#else /* UTF8 */
++ if (wchar_write(fd, edit->buffers2[buf] + EDIT_BUF_SIZE -
++#endif /* UTF8 */
+ (edit->curs2 & M_EDIT_BUF_SIZE) - 1,
+ 1 + (edit->curs2 & M_EDIT_BUF_SIZE)) !=
+ 1 + (edit->curs2 & M_EDIT_BUF_SIZE)) {
+ filelen = -1;
+ } else {
+ while (--buf >= 0) {
++#ifndef UTF8
+ if (mc_write
+ (fd, (char *) edit->buffers2[buf],
++#else /* UTF8 */
++ if (wchar_write
++ (fd, edit->buffers2[buf],
++#endif /* UTF8 */
+ EDIT_BUF_SIZE) != EDIT_BUF_SIZE) {
+ filelen = -1;
+ break;
+@@ -705,13 +767,21 @@
+ if (!n || n == EOF)
+ break;
+ n = 0;
++#ifndef UTF8
+ while (fscanf (f, "%hd %hd, ", &macro[n].command, &macro[n].ch))
++#else /* UTF8 */
++ while (fscanf (f, "%hd %lu, ", &macro[n].command, &macro[n].ch))
++#endif /* UTF8 */
+ n++;
+ fscanf (f, ";\n");
+ if (s != k) {
+ fprintf (g, ("key '%d 0': "), s);
+ for (i = 0; i < n; i++)
++#ifndef UTF8
+ fprintf (g, "%hd %hd, ", macro[i].command, macro[i].ch);
++#else /* UTF8 */
++ fprintf (g, "%hd %lu, ", macro[i].command, macro[i].ch);
++#endif /* UTF8 */
+ fprintf (g, ";\n");
+ }
+ }
+@@ -744,7 +814,11 @@
+ if (f) {
+ fprintf (f, ("key '%d 0': "), s);
+ for (i = 0; i < n; i++)
++#ifndef UTF8
+ fprintf (f, "%hd %hd, ", macro[i].command, macro[i].ch);
++#else /* UTF8 */
++ fprintf (f, "%hd %lu, ", macro[i].command, macro[i].ch);
++#endif /* UTF8 */
+ fprintf (f, ";\n");
+ fclose (f);
+ if (saved_macros_loaded) {
+@@ -794,10 +868,18 @@
+ saved_macro[i++] = s;
+ if (!found) {
+ *n = 0;
++#ifndef UTF8
+ while (*n < MAX_MACRO_LENGTH && 2 == fscanf (f, "%hd %hd, ", &macro[*n].command, &macro[*n].ch))
++#else /* UTF8 */
++ while (*n < MAX_MACRO_LENGTH && 2 == fscanf (f, "%hd %lu, ", &macro[*n].command, &macro[*n].ch))
++#endif /* UTF8 */
+ (*n)++;
+ } else {
++#ifndef UTF8
+ while (2 == fscanf (f, "%hd %hd, ", &dummy.command, &dummy.ch));
++#else /* UTF8 */
++ while (2 == fscanf (f, "%hd %lu, ", &dummy.command, &dummy.ch));
++#endif /* UTF8 */
+ }
+ fscanf (f, ";\n");
+ if (s == k)
+@@ -945,7 +1027,7 @@
+ #define space_width 1
+
+ static void
+-edit_insert_column_of_text (WEdit * edit, unsigned char *data, int size, int width)
++edit_insert_column_of_text (WEdit * edit, mc_wchar_t *data, int size, int width)
+ {
+ long cursor;
+ int i, col;
+@@ -993,7 +1075,7 @@
+ {
+ long start_mark, end_mark, current = edit->curs1;
+ int size;
+- unsigned char *copy_buf;
++ mc_wchar_t *copy_buf;
+
+ edit_update_curs_col (edit);
+ if (eval_marks (edit, &start_mark, &end_mark))
+@@ -1033,7 +1115,7 @@
+ {
+ long count;
+ long current;
+- unsigned char *copy_buf;
++ mc_wchar_t *copy_buf;
+ long start_mark, end_mark;
+ int deleted = 0;
+ int x = 0;
+@@ -1094,7 +1176,7 @@
+ edit_push_action (edit, COLUMN_ON);
+ column_highlighting = 0;
+ } else {
+- copy_buf = g_malloc (end_mark - start_mark);
++ copy_buf = g_malloc ((end_mark - start_mark) * sizeof(mc_wchar_t));
+ edit_cursor_move (edit, start_mark - edit->curs1);
+ edit_scroll_screen_over_cursor (edit);
+ count = start_mark;
+@@ -1433,7 +1515,11 @@
+ /* This function is a modification of mc-3.2.10/src/view.c:regexp_view_search() */
+ /* returns -3 on error in pattern, -1 on not found, found_len = 0 if either */
+ static int
++#ifndef UTF8
+ string_regexp_search (char *pattern, char *string, int match_type,
++#else /* UTF8 */
++string_regexp_search (char *pattern, mc_wchar_t *wstring, int match_type,
++#endif /* UTF8 */
+ int match_bol, int icase, int *found_len, void *d)
+ {
+ static regex_t r;
+@@ -1442,6 +1528,11 @@
+ regmatch_t *pmatch;
+ static regmatch_t s[1];
+
++#ifdef UTF8
++ char *string;
++ int i;
++#endif /* UTF8 */
++
+ pmatch = (regmatch_t *) d;
+ if (!pmatch)
+ pmatch = s;
+@@ -1462,13 +1553,51 @@
+ old_type = match_type;
+ old_icase = icase;
+ }
++
++#ifdef UTF8
++ string = wchar_to_mbstr(wstring);
++ if (string == NULL)
++ return -1;
++#endif /* UTF8 */
++
+ if (regexec
+ (&r, string, d ? NUM_REPL_ARGS : 1, pmatch,
+ ((match_bol
+ || match_type != match_normal) ? 0 : REG_NOTBOL)) != 0) {
+ *found_len = 0;
++
++#ifdef UTF8
++ g_free(string);
++#endif /* UTF8 */
++
+ return -1;
+ }
++
++#ifdef UTF8
++ for (i = 0; i < (d ? NUM_REPL_ARGS : 1); i++) {
++ char tmp;
++ int new_o;
++
++ if (pmatch[i].rm_so < 0)
++ continue;
++ tmp = string[pmatch[i].rm_so];
++ string[pmatch[i].rm_so] = 0;
++ new_o = mbstrlen(string);
++ string[pmatch[i].rm_so] = tmp;
++ pmatch[i].rm_so = new_o;
++
++ if (pmatch[i].rm_eo < 0)
++ continue;
++ tmp = string[pmatch[i].rm_eo];
++ string[pmatch[i].rm_eo] = 0;
++ new_o = mbstrlen(string);
++ string[pmatch[i].rm_eo] = tmp;
++ pmatch[i].rm_eo = new_o;
++ }
++
++ g_free(string);
++#endif /* UTF8 */
++
+ *found_len = pmatch[0].rm_eo - pmatch[0].rm_so;
+ return (pmatch[0].rm_so);
+ }
+@@ -1476,13 +1605,29 @@
+ /* thanks to Liviu Daia <daia@stoilow.imar.ro> for getting this
+ (and the above) routines to work properly - paul */
+
++#ifndef UTF8
+ typedef int (*edit_getbyte_fn) (WEdit *, long);
++#else /* UTF8 */
++typedef mc_wchar_t (*edit_getbyte_fn) (WEdit *, long);
++#endif /* UTF8 */
+
+ static long
++#ifndef UTF8
+ edit_find_string (long start, unsigned char *exp, int *len, long last_byte, edit_getbyte_fn get_byte, void *data, int once_only, void *d)
++#else /* UTF8 */
++edit_find_string (long start, unsigned char *exp_mb, int *len, long last_byte, edit_getbyte_fn get_byte, void *data, int once_only, void *d)
++#endif /* UTF8 */
+ {
+ long p, q = 0;
+- long l = strlen ((char *) exp), f = 0;
++ long f = 0;
++
++#ifndef UTF8
++ long l = strlen ((char *) exp);
++#else /* UTF8 */
++ mc_wchar_t *exp = mbstr_to_wchar((char *)exp_mb);
++ mc_wchar_t *exp_backup = exp;
++ long l = wcslen(exp);
++#endif /* UTF8 */
+ int n = 0;
+
+ for (p = 0; p < l; p++) /* count conversions... */
+@@ -1491,19 +1636,22 @@
+ n++;
+
+ if (replace_scanf || replace_regexp) {
+- int c;
+- unsigned char *buf;
+- unsigned char mbuf[MAX_REPL_LEN * 2 + 3];
++ mc_wint_t c;
++ mc_wchar_t *buf;
++ mc_wchar_t mbuf[MAX_REPL_LEN * 2 + 3];
+
+ replace_scanf = (!replace_regexp); /* can't have both */
+
+ buf = mbuf;
+
+ if (replace_scanf) {
+- unsigned char e[MAX_REPL_LEN];
+- if (n >= NUM_REPL_ARGS)
+- return -3;
+-
++ mc_wchar_t e[MAX_REPL_LEN];
++ if (n >= NUM_REPL_ARGS) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
++ return -3;
++ }
+ if (replace_case) {
+ for (p = start; p < last_byte && p < start + MAX_REPL_LEN; p++)
+ buf[p - start] = (*get_byte) (data, p);
+@@ -1517,20 +1665,36 @@
+ }
+
+ buf[(q = p - start)] = 0;
++#ifndef UTF8
+ strcpy ((char *) e, (char *) exp);
+ strcat ((char *) e, "%n");
++#else /* UTF8 */
++ wcscpy (e, exp);
++ wcscat (e, L"%n");
++#endif /* UTF8 */
+ exp = e;
+
+ while (q) {
+ *((int *) sargs[n]) = 0; /* --> here was the problem - now fixed: good */
++#ifndef UTF8
+ if (n == sscanf ((char *) buf, (char *) exp, SCANF_ARGS)) {
++#else /* UTF8 */
++ if (n == swscanf (buf, exp, SCANF_ARGS)) {
++#endif /* UTF8 */
+ if (*((int *) sargs[n])) {
+ *len = *((int *) sargs[n]);
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return start;
+ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+ if (q + start < last_byte) {
+ if (replace_case) {
+ buf[q] = (*get_byte) (data, q + start);
+@@ -1544,7 +1708,11 @@
+ start++;
+ buf++; /* move the window along */
+ if (buf == mbuf + MAX_REPL_LEN) { /* the window is about to go past the end of array, so... */
++#ifndef UTF8
+ memmove (mbuf, buf, strlen ((char *) buf) + 1); /* reset it */
++#else /* UTF8 */
++ wmemmove (mbuf, buf, (wcslen (buf) + 1)); /* reset it */
++#endif /* UTF8 */
+ buf = mbuf;
+ }
+ q--;
+@@ -1571,10 +1739,16 @@
+
+ buf = mbuf;
+ while (q) {
++#ifndef UTF8
+ found_start = string_regexp_search ((char *) exp, (char *) buf, match_normal, match_bol, !replace_case, len, d);
+-
++#else /* UTF8 */
++ found_start = string_regexp_search ((char *) exp_mb, buf, match_normal, match_bol, !replace_case, len, d);
++#endif /* UTF8 */
+ if (found_start <= -2) { /* regcomp/regexec error */
+ *len = 0;
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return -3;
+ }
+ else if (found_start == -1) /* not found: try next line */
+@@ -1585,15 +1759,27 @@
+ match_bol = 0;
+ continue;
+ }
+- else /* found */
++ else { /* found */
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return (start + offset - q + found_start);
++ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+
+ if (buf[q - 1] != '\n') { /* incomplete line: try to recover */
+ buf = mbuf + MAX_REPL_LEN / 2;
++#ifndef UTF8
+ q = strlen ((const char *) buf);
++#else /* UTF8 */
++ q = wcslen (buf);
++#endif /* UTF8 */
+ memmove (mbuf, buf, q);
+ p = start + q;
+ move_win = 1;
+@@ -1603,36 +1789,59 @@
+ }
+ }
+ } else {
++#ifndef UTF8
+ *len = strlen ((const char *) exp);
++#else /* UTF8 */
++ *len = wcslen (exp);
++#endif /* UTF8 */
+ if (replace_case) {
+ for (p = start; p <= last_byte - l; p++) {
+- if ((*get_byte) (data, p) == (unsigned char)exp[0]) { /* check if first char matches */
++ if ((*get_byte) (data, p) == exp[0]) { /* check if first char matches */
+ for (f = 0, q = 0; q < l && f < 1; q++)
+- if ((*get_byte) (data, q + p) != (unsigned char)exp[q])
++ if ((*get_byte) (data, q + p) != exp[q])
+ f = 1;
+- if (f == 0)
++ if (f == 0) {
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return p;
++ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+ }
+ } else {
+ for (p = 0; exp[p] != 0; p++)
+ exp[p] = my_lower_case (exp[p]);
+
+ for (p = start; p <= last_byte - l; p++) {
+- if (my_lower_case ((*get_byte) (data, p)) == (unsigned char)exp[0]) {
++ if (my_lower_case ((*get_byte) (data, p)) == exp[0]) {
+ for (f = 0, q = 0; q < l && f < 1; q++)
+- if (my_lower_case ((*get_byte) (data, q + p)) != (unsigned char)exp[q])
++ if (my_lower_case ((*get_byte) (data, q + p)) != exp[q])
+ f = 1;
+- if (f == 0)
++ if (f == 0) {
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return p;
++ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+ }
+ }
+ }
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return -2;
+ }
+
+@@ -1646,9 +1855,14 @@
+
+ while ((p = edit_find_string (p, exp, len, last_byte, get_byte, data, once_only, d)) >= 0) {
+ if (replace_whole) {
++#ifndef UTF8
+ /*If the bordering chars are not in option_whole_chars_search then word is whole */
+ if (!strcasechr (option_whole_chars_search, (*get_byte) (data, p - 1))
+ && !strcasechr (option_whole_chars_search, (*get_byte) (data, p + *len)))
++#else /* UTF8 */
++ if (!iswalnum((*get_byte) (data, p - 1))
++ && !iswalnum((*get_byte) (data, p + *len)))
++#endif /* UTF8 */
+ return p;
+ if (once_only)
+ return -2;
+@@ -1680,6 +1894,7 @@
+
+ #define is_digit(x) ((x) >= '0' && (x) <= '9')
+
++#ifndef UTF8
+ #define snprint(v) { \
+ *p1++ = *p++; \
+ *p1 = '\0'; \
+@@ -1687,33 +1902,48 @@
+ if (n >= (size_t) (e - s)) goto nospc; \
+ s += n; \
+ }
++#else /* UTF8 */
++#define snprint(v) { \
++ *p1++ = *p++; \
++ *p1 = '\0'; \
++ n = swprintf(s, e-s, q1,v); \
++ if (n >= (size_t) (e - s)) goto nospc; \
++ s += n; \
++ }
++#endif /* UTF8 */
+
+ /* this function uses the sprintf command to do a vprintf */
+ /* it takes pointers to arguments instead of the arguments themselves */
+ /* The return value is the number of bytes written excluding '\0'
+ if successfull, -1 if the resulting string would be too long and
+ -2 if the format string is errorneous. */
+-static int snprintf_p (char *str, size_t size, const char *fmt,...)
+- __attribute__ ((format (printf, 3, 4)));
+-
+-static int snprintf_p (char *str, size_t size, const char *fmt,...)
++static int snprintf_p (mc_wchar_t *str, size_t size, const mc_wchar_t *fmt,...)
+ {
+ va_list ap;
+ size_t n;
+- const char *q, *p;
+- char *s = str, *e = str + size;
+- char q1[40];
+- char *p1;
++ const mc_wchar_t *q, *p;
++ mc_wchar_t *s = str, *e = str + size;
++ mc_wchar_t q1[40];
++
++ mc_wchar_t *p1;
+ int nargs = 0;
+
+ va_start (ap, fmt);
+ p = q = fmt;
+
++#ifndef UTF8
+ while ((p = strchr (p, '%'))) {
++#else /* UTF8 */
++ while ((p = wcschr (p, L'%'))) {
++#endif /* UTF8 */
+ n = p - q;
+ if (n >= (size_t) (e - s))
+ goto nospc;
++#ifndef UTF8
+ memcpy (s, q, n); /* copy stuff between format specifiers */
++#else /* UTF8 */
++ wmemcpy (s, q, n); /* copy stuff between format specifiers */
++#endif /* UTF8 */
+ s += n;
+ q = p;
+ p1 = q1;
+@@ -1741,45 +1971,78 @@
+ *p1++ = *p++;
+ if (*p == '*') {
+ p++;
++#ifndef UTF8
+ strcpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace field width with a number */
+ p1 += strlen (p1);
++#else /* UTF8 */
++ wcscpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace field width with a number */
++ p1 += wcslen (p1);
++#endif /* UTF8 */
+ } else {
+- while (is_digit (*p) && p1 < q1 + 20)
++#ifndef UTF8
++ while (is_digit (*p)
++#else /* UTF8 */
++ while (iswdigit (*p)
++#endif /* UTF8 */
++ && p1 < q1 + 20)
+ *p1++ = *p++;
+- if (is_digit (*p))
++#ifndef UTF8
++ if (is_digit (*p))
++#else /* UTF8 */
++ if (iswdigit (*p))
++#endif /* UTF8 */
+ goto err;
+ }
+ if (*p == '.')
+ *p1++ = *p++;
+ if (*p == '*') {
+ p++;
++#ifndef UTF8
+ strcpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace precision with a number */
+ p1 += strlen (p1);
++#else /* UTF8 */
++ wcscpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace precision with a number */
++ p1 += wcslen (p1);
++#endif /* UTF8 */
+ } else {
+- while (is_digit (*p) && p1 < q1 + 32)
++#ifndef UTF8
++ while (is_digit (*p)
++#else /* UTF8 */
++ while (iswdigit (*p)
++#endif /* UTF8 */
++ && p1 < q1 + 32)
+ *p1++ = *p++;
+- if (is_digit (*p))
++#ifndef UTF8
++ if (is_digit (*p))
++#else /* UTF8 */
++ if (iswdigit (*p))
++#endif /* UTF8 */
+ goto err;
+ }
+ /* flags done, now get argument */
+ if (*p == 's') {
++#ifndef UTF8
+ snprint (va_arg (ap, char *));
++#else /* UTF8 */
++ *p1++ = 'l';
++ snprint (va_arg (ap, mc_wchar_t *));
++#endif /* UTF8 */
+ } else if (*p == 'h') {
+- if (strchr ("diouxX", *p))
++ if (*p < 128 && strchr ("diouxX", *p))
+ snprint (*va_arg (ap, short *));
+ } else if (*p == 'l') {
+ *p1++ = *p++;
+- if (strchr ("diouxX", *p))
++ if (*p < 128 && strchr ("diouxX", *p))
+ snprint (*va_arg (ap, long *));
+- } else if (strchr ("cdiouxX", *p)) {
++ } else if (*p < 128 && strchr ("cdiouxX", *p)) {
+ snprint (*va_arg (ap, int *));
+ } else if (*p == 'L') {
+ *p1++ = *p++;
+- if (strchr ("EefgG", *p))
++ if (*p < 128 && strchr ("EefgG", *p))
+ snprint (*va_arg (ap, double *)); /* should be long double */
+- } else if (strchr ("EefgG", *p)) {
++ } else if (*p < 128 && strchr ("EefgG", *p)) {
+ snprint (*va_arg (ap, double *));
+- } else if (strchr ("DOU", *p)) {
++ } else if (*p < 128 && strchr ("DOU", *p)) {
+ snprint (*va_arg (ap, long *));
+ } else if (*p == 'p') {
+ snprint (*va_arg (ap, void **));
+@@ -1788,10 +2051,17 @@
+ q = p;
+ }
+ va_end (ap);
++#ifndef UTF8
+ n = strlen (q);
+ if (n >= (size_t) (e - s))
+ return -1;
+ memcpy (s, q, n + 1);
++#else /* UTF8 */
++ n = wcslen (q);
++ if (n >= (size_t) (e - s))
++ return -1;
++ wmemcpy (s, q, n + 1);
++#endif /* UTF8 */
+ return s + n - str;
+ nospc:
+ va_end (ap);
+@@ -1970,8 +2240,11 @@
+ }
+ }
+ if (replace_yes) { /* delete then insert new */
++#ifdef UTF8
++ mc_wchar_t *winput2 = mbstr_to_wchar(input2);
++#endif /* UTF8 */
+ if (replace_scanf) {
+- char repl_str[MAX_REPL_LEN + 2];
++ mc_wchar_t repl_str[MAX_REPL_LEN + 2];
+ int ret = 0;
+
+ /* we need to fill in sargs just like with scanf */
+@@ -1980,17 +2253,25 @@
+ for (k = 1;
+ k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0;
+ k++) {
++#ifndef UTF8
+ unsigned char *t;
++#else /* UTF8 */
++ mc_wchar_t *t;
++#endif
+
+ if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) {
+ ret = -1;
+ break;
+ }
++#ifndef UTF8
+ t = (unsigned char *) &sargs[k - 1][0];
++#else /* UTF8 */
++ t = (mc_wchar_t *) &sargs[k - 1][0];
++#endif /* UTF8 */
+ for (j = 0;
+ j < pmatch[k].rm_eo - pmatch[k].rm_so
+ && j < 255; j++, t++)
+- *t = (unsigned char) edit_get_byte (edit,
++ *t = edit_get_byte (edit,
+ edit->
+ search_start
+ -
+@@ -2008,14 +2289,23 @@
+ }
+ if (!ret)
+ ret =
++#ifndef UTF8
+ snprintf_p (repl_str, MAX_REPL_LEN + 2, input2,
++#else /* UTF8 */
++ snprintf_p (repl_str, MAX_REPL_LEN + 2, winput2,
++#endif /* UTF8 */
+ PRINTF_ARGS);
+ if (ret >= 0) {
+ times_replaced++;
+ while (i--)
+ edit_delete (edit);
++#ifndef UTF8
+ while (repl_str[++i])
+ edit_insert (edit, repl_str[i]);
++#else /* UTF8 */
++ while (winput2[++i])
++ edit_insert (edit, winput2[i]);
++#endif /* UTF8 */
+ } else {
+ edit_error_dialog (_(" Replace "),
+ ret ==
+@@ -2029,10 +2319,18 @@
+ times_replaced++;
+ while (i--)
+ edit_delete (edit);
++#ifndef UTF8
+ while (input2[++i])
+ edit_insert (edit, input2[i]);
++#else /* UTF8 */
++ while (winput2[++i])
++ edit_insert (edit, winput2[i]);
++#endif /* UTF8 */
+ }
+ edit->found_len = i;
++#ifdef UTF8
++ g_free (winput2);
++#endif /* UTF8 */
+ }
+ /* so that we don't find the same string again */
+ if (replace_backwards) {
+@@ -2205,16 +2503,17 @@
+ #define TEMP_BUF_LEN 1024
+
+ /* Return a null terminated length of text. Result must be g_free'd */
+-static unsigned char *
++static mc_wchar_t *
+ edit_get_block (WEdit *edit, long start, long finish, int *l)
+ {
+- unsigned char *s, *r;
+- r = s = g_malloc (finish - start + 1);
++ mc_wchar_t *s, *r;
++ r = s = g_malloc ((finish - start + 1) * sizeof(mc_wchar_t));
+ if (column_highlighting) {
+ *l = 0;
+ /* copy from buffer, excluding chars that are out of the column 'margins' */
+ while (start < finish) {
+- int c, x;
++ mc_wchar_t c;
++ int x;
+ x = edit_move_forward3 (edit, edit_bol (edit, start), 0,
+ start);
+ c = edit_get_byte (edit, start);
+@@ -2247,11 +2546,15 @@
+ return 0;
+
+ if (column_highlighting) {
+- unsigned char *block, *p;
++ mc_wchar_t *block, *p;
+ int r;
+ p = block = edit_get_block (edit, start, finish, &len);
+ while (len) {
++#ifndef UTF8
+ r = mc_write (file, p, len);
++#else /* UTF8 */
++ r = wchar_write (file, p, len);
++#endif /* UTF8 */
+ if (r < 0)
+ break;
+ p += r;
+@@ -2259,15 +2562,19 @@
+ }
+ g_free (block);
+ } else {
+- unsigned char *buf;
++ mc_wchar_t *buf;
+ int i = start, end;
+ len = finish - start;
+- buf = g_malloc (TEMP_BUF_LEN);
++ buf = g_malloc (TEMP_BUF_LEN * sizeof(mc_wchar_t));
+ while (start != finish) {
+ end = min (finish, start + TEMP_BUF_LEN);
+ for (; i < end; i++)
+ buf[i - start] = edit_get_byte (edit, i);
++#ifndef UTF8
+ len -= mc_write (file, (char *) buf, end - start);
++#else /* UTF8 */
++ len -= wchar_write (file, buf, end - start);
++#endif /* UTF8 */
+ start = end;
+ }
+ g_free (buf);
+@@ -2609,17 +2916,20 @@
+
+ /* prints at the cursor */
+ /* returns the number of chars printed */
++#ifndef UTF8
+ int edit_print_string (WEdit * e, const char *s)
++#else /* UTF8 */
++int edit_print_wstring (WEdit * e, mc_wchar_t *s)
++#endif /* UTF8 */
+ {
+ int i = 0;
+ while (s[i])
+- edit_execute_cmd (e, -1, (unsigned char) s[i++]);
++ edit_execute_cmd (e, -1, s[i++]);
+ e->force |= REDRAW_COMPLETELY;
+ edit_update_screen (e);
+ return i;
+ }
+
+-
+ static void pipe_mail (WEdit *edit, char *to, char *subject, char *cc)
+ {
+ FILE *p = 0;
+@@ -2713,15 +3023,20 @@
+ /* find first character of current word */
+ static int edit_find_word_start (WEdit *edit, long *word_start, int *word_len)
+ {
+- int i, c, last;
++ int i;
++ mc_wint_t c, last;
+
+ /* return if at begin of file */
+ if (edit->curs1 <= 0)
+ return 0;
+
+- c = (unsigned char) edit_get_byte (edit, edit->curs1 - 1);
++ c = edit_get_byte (edit, edit->curs1 - 1);
+ /* return if not at end or in word */
++#ifndef UTF8
+ if (isspace (c) || !(isalnum (c) || c == '_'))
++#else /* UTF8 */
++ if (iswspace (c) || !(iswalnum (c) || c == '_'))
++#endif /* UTF8 */
+ return 0;
+
+ /* search start of word to be completed */
+@@ -2731,11 +3046,19 @@
+ return 0;
+
+ last = c;
+- c = (unsigned char) edit_get_byte (edit, edit->curs1 - i);
++ c = edit_get_byte (edit, edit->curs1 - i);
+
++#ifndef UTF8
+ if (!(isalnum (c) || c == '_')) {
++#else /* UTF8 */
++ if (!(iswalnum (c) || c == '_')) {
++#endif /* UTF8 */
+ /* return if word starts with digit */
++#ifndef UTF8
+ if (isdigit (last))
++#else /* UTF8 */
++ if (iswdigit (last))
++#endif /* UTF8 */
+ return 0;
+
+ *word_start = edit->curs1 - (i - 1); /* start found */
+@@ -2768,7 +3091,7 @@
+ int *num)
+ {
+ int len, max_len = 0, i, skip;
+- unsigned char *bufpos;
++ mc_wchar_t *bufpos;
+
+ /* collect max MAX_WORD_COMPLETIONS completions */
+ while (*num < MAX_WORD_COMPLETIONS) {
+@@ -2787,11 +3110,16 @@
+ buffers1[start >> S_EDIT_BUF_SIZE][start & M_EDIT_BUF_SIZE];
+ skip = 0;
+ for (i = 0; i < *num; i++) {
++#ifndef UTF8
+ if (strncmp
+ ((char *) &compl[i].text[word_len],
+- (char *) &bufpos[word_len], max (len,
+- compl[i].len) -
+- word_len) == 0) {
++ (char *) &bufpos[word_len],
++#else /* UTF8 */
++ if (wcsncmp
++ ((wchar_t *) &compl[i].text[word_len],
++ (wchar_t *) &bufpos[word_len],
++#endif /* UTF8 */
++ max (len, compl[i].len) - word_len) == 0) {
+ skip = 1;
+ break; /* skip it, already added */
+ }
+@@ -2799,7 +3127,7 @@
+ if (skip)
+ continue;
+
+- compl[*num].text = g_malloc (len + 1);
++ compl[*num].text = g_malloc ((len + 1) * sizeof(mc_wchar_t));
+ compl[*num].len = len;
+ for (i = 0; i < len; i++)
+ compl[*num].text[i] = *(bufpos + i);
+@@ -2813,6 +3141,18 @@
+ return max_len;
+ }
+
++#ifdef UTF8
++int edit_print_string (WEdit * e, const char *s)
++{
++ int i;
++ mc_wchar_t *ws = mbstr_to_wchar(s);
++ i = edit_print_wstring (e, ws);
++ g_free(ws);
++ return i;
++}
++
++#endif /* UTF8 */
++
+
+ /* let the user select its preferred completion */
+ static void
+@@ -2825,6 +3165,9 @@
+ WListbox *compl_list;
+ int compl_dlg_h; /* completion dialog height */
+ int compl_dlg_w; /* completion dialog width */
++#ifdef UTF8
++ char *mbtext;
++#endif /* UTF8 */
+
+ /* calculate the dialog metrics */
+ compl_dlg_h = num_compl + 2;
+@@ -2860,9 +3203,18 @@
+ add_widget (compl_dlg, compl_list);
+
+ /* fill the listbox with the completions */
++#ifndef UTF8
+ for (i = 0; i < num_compl; i++)
+ listbox_add_item (compl_list, LISTBOX_APPEND_AT_END, 0,
+ (char *) compl[i].text, NULL);
++#else /* UTF8 */
++ for (i = 0; i < num_compl; i++) {
++ mbtext = wchar_to_mbstr(compl[i].text);
++ listbox_add_item (compl_list, LISTBOX_APPEND_AT_END, 0,
++ mbtext, NULL);
++ g_free(mbtext);
++ }
++#endif /* UTF8 */
+
+ /* pop up the dialog */
+ run_dlg (compl_dlg);
+@@ -2870,9 +3222,17 @@
+ /* apply the choosen completion */
+ if (compl_dlg->ret_value == B_ENTER) {
+ listbox_get_current (compl_list, &curr, NULL);
+- if (curr)
++ if (curr){
++#ifndef UTF8
+ for (curr += word_len; *curr; curr++)
+ edit_insert (edit, *curr);
++#else /* UTF8 */
++ mc_wchar_t *wc, *wccurr = mbstr_to_wchar(curr);
++ for (wc = wccurr + word_len; *wc; wc++)
++ edit_insert (edit, *wc);
++ g_free(wccurr);
++#endif /* UTF8 */
++ }
+ }
+
+ /* destroy dialog before return */
+@@ -2889,8 +3249,9 @@
+ {
+ int word_len = 0, i, num_compl = 0, max_len;
+ long word_start = 0;
+- unsigned char *bufpos;
+- char *match_expr;
++ mc_wchar_t *bufpos;
++ mc_wchar_t *match_expr;
++ char *mbmatch_expr;
+ struct selection compl[MAX_WORD_COMPLETIONS]; /* completions */
+
+ /* don't want to disturb another search */
+@@ -2907,16 +3268,32 @@
+ /* prepare match expression */
+ bufpos = &edit->buffers1[word_start >> S_EDIT_BUF_SIZE]
+ [word_start & M_EDIT_BUF_SIZE];
++
++ match_expr = g_malloc((word_len + 14) * sizeof(mc_wchar_t));
++#ifndef UTF8
+ match_expr = g_strdup_printf ("%.*s[a-zA-Z_0-9]+", word_len, bufpos);
++#else /* UTF8 */
++ wcsncpy (match_expr, bufpos, word_len);
++ match_expr[word_len] = '\0';
++ wcscat (match_expr, L"[a-zA-Z_0-9]+");
++#endif /* UTF8 */
+
+ /* init search: backward, regexp, whole word, case sensitive */
+ edit_set_search_parameters (0, 1, 1, 1, 1);
+
+ /* collect the possible completions */
+ /* start search from curs1 down to begin of file */
++#ifndef UTF8
+ max_len =
+ edit_collect_completions (edit, word_start, word_len, match_expr,
+ (struct selection *) &compl, &num_compl);
++#else /* UTF8 */
++ mbmatch_expr = wchar_to_mbstr(match_expr);
++ max_len =
++ edit_collect_completions (edit, word_start, word_len, mbmatch_expr,
++ (struct selection *) &compl, &num_compl);
++ g_free(mbmatch_expr);
++#endif /* UTF8 */
+
+ if (num_compl > 0) {
+ /* insert completed word if there is only one match */
+--- mc-4.6.2/edit/editdraw.c
++++ mc-4.6.2/edit/editdraw.c
+@@ -71,11 +71,16 @@
+ * as decimal and as hex.
+ */
+ if (edit->curs1 < edit->last_byte) {
+- unsigned char cur_byte = edit_get_byte (edit, edit->curs1);
++ mc_wchar_t cur_byte = edit_get_byte (edit, edit->curs1);
++#ifndef UTF8
+ g_snprintf (byte_str, sizeof (byte_str), "%c %3d 0x%02X",
+ is_printable (cur_byte) ? cur_byte : '.',
+- (int) cur_byte,
+- (unsigned) cur_byte);
++#else /* UTF8 */
++ g_snprintf (byte_str, sizeof(byte_str), "%lc %3d 0x%02X",
++ iswprint(cur_byte) ? cur_byte : '.',
++#endif /* UTF8 */
++ (int) cur_byte,
++ (unsigned) cur_byte);
+ } else {
+ strcpy (byte_str, "<EOF>");
+ }
+@@ -207,11 +212,16 @@
+ #define lowlevel_set_color(x) attrset(MY_COLOR_PAIR(color))
+ #endif
+
++struct line_s {
++ mc_wchar_t ch;
++ unsigned int style;
++};
++
+ static void
+ print_to_widget (WEdit *edit, long row, int start_col, int start_col_real,
+- long end_col, unsigned int line[])
++ long end_col, struct line_s line[])
+ {
+- unsigned int *p;
++ struct line_s *p;
+
+ int x = start_col_real + EDIT_TEXT_HORIZONTAL_OFFSET;
+ int x1 = start_col + EDIT_TEXT_HORIZONTAL_OFFSET;
+@@ -225,9 +235,9 @@
+ edit_move (x1 + FONT_OFFSET_X, y + FONT_OFFSET_Y);
+ p = line;
+
+- while (*p) {
++ while (p->ch) {
+ int style;
+- int textchar;
++ mc_wchar_t textchar;
+ int color;
+
+ if (cols_to_skip) {
+@@ -236,9 +246,9 @@
+ continue;
+ }
+
+- style = *p & 0xFF00;
+- textchar = *p & 0xFF;
+- color = *p >> 16;
++ style = p->style & 0xFF00;
++ textchar = p->ch;
++ color = p->style >> 16;
+
+ if (style & MOD_ABNORMAL) {
+ /* Non-printable - use black background */
+@@ -267,8 +277,11 @@
+ lowlevel_set_color (color);
+ }
+ }
+-
++#ifdef UTF8
++ SLsmg_write_nwchars(&textchar, 1);
++#else
+ addch (textchar);
++#endif
+ p++;
+ }
+ }
+@@ -280,11 +293,11 @@
+ edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
+ long end_col)
+ {
+- static unsigned int line[MAX_LINE_LEN];
+- unsigned int *p = line;
++ struct line_s line[MAX_LINE_LEN];
++ struct line_s *p = line;
+ long m1 = 0, m2 = 0, q, c1, c2;
+ int col, start_col_real;
+- unsigned int c;
++ mc_wint_t c;
+ int color;
+ int i;
+
+@@ -309,62 +322,89 @@
+ }
+
+ while (col <= end_col - edit->start_col) {
+- *p = 0;
++ p->ch = 0;
++ p->style = 0;
+ if (q == edit->curs1)
+- *p |= MOD_CURSOR;
++ p->style |= MOD_CURSOR;
+ if (q >= m1 && q < m2) {
+ if (column_highlighting) {
+ int x;
+ x = edit_move_forward3 (edit, b, 0, q);
+ if (x >= c1 && x < c2)
+- *p |= MOD_MARKED;
++ p->style |= MOD_MARKED;
+ } else
+- *p |= MOD_MARKED;
++ p->style |= MOD_MARKED;
+ }
+ if (q == edit->bracket)
+- *p |= MOD_BOLD;
++ p->style |= MOD_BOLD;
+ if (q >= edit->found_start
+ && q < edit->found_start + edit->found_len)
+- *p |= MOD_BOLD;
++ p->style |= MOD_BOLD;
+ c = edit_get_byte (edit, q);
+ /* we don't use bg for mc - fg contains both */
+ edit_get_syntax_color (edit, q, &color);
+- *p |= color << 16;
++ p->style |= color << 16;
+ switch (c) {
+ case '\n':
+ col = end_col - edit->start_col + 1; /* quit */
+- *(p++) |= ' ';
++ p->ch = ' ';
++ p++;
+ break;
+ case '\t':
+ i = TAB_SIZE - ((int) col % TAB_SIZE);
+ col += i;
+ if (use_colors && visible_tabs) {
+- c = (*p & ~MOD_CURSOR) | MOD_WHITESPACE;
++ c = (p->style & ~MOD_CURSOR) | MOD_WHITESPACE;
+ if (i > 2) {
+- *(p++) |= '<' | MOD_WHITESPACE;
+- while (--i > 1)
+- *(p++) = c | '-';
+- *(p++) = c | '>';
++ p->ch = '<';
++ p->style |= MOD_WHITESPACE;
++ p++;
++ while (--i > 1) {
++ p->style = c;
++ p->ch = '-';
++ p++;
++ }
++ p->style = c;
++ p->ch = '>';
++ p++;
+ } else if (i > 1) {
+- *(p++) |= '<' | MOD_WHITESPACE;
+- *(p++) = c | '>';
+- } else
+- *(p++) |= '>' | MOD_WHITESPACE;
++ p->style |= MOD_WHITESPACE;
++ p->ch = '<';
++ p++;
++ p->style = c;
++ p->ch = '>';
++ p++;
++ } else {
++ p->style |= MOD_WHITESPACE;
++ p->ch = '>';
++ p++;
++ }
+ } else if (use_colors && visible_tws && q >= tws) {
+- *p |= '.' | MOD_WHITESPACE;
+- c = *(p++) & ~MOD_CURSOR;
+- while (--i)
+- *(p++) = c;
++ p->style |= MOD_WHITESPACE;
++ p->ch = '.';
++ p++;
++ c = p->style & ~MOD_CURSOR;
++ while (--i) {
++ p->style = c;
++ p->ch = ' ';
++ p++;
++ }
+ } else {
+- *p |= ' ';
+- c = *(p++) & ~MOD_CURSOR;
+- while (--i)
+- *(p++) = c;
++ p->ch |= ' ';
++ c = p->style & ~MOD_CURSOR;
++ p++;
++ while (--i) {
++ p->style = c;
++ p->ch = ' ';
++ p++;
++ }
+ }
+ break;
+ case ' ':
+ if (use_colors && visible_tws && q >= tws) {
+- *(p++) |= '.' | MOD_WHITESPACE;
++ p->ch = '.';
++ p->style |= MOD_WHITESPACE;
++ p++;
+ col++;
+ break;
+ }
+@@ -374,22 +414,47 @@
+
+ /* Caret notation for control characters */
+ if (c < 32) {
+- *(p++) = '^' | MOD_ABNORMAL;
+- *(p++) = (c + 0x40) | MOD_ABNORMAL;
++ p->ch = '^';
++ p->style = MOD_ABNORMAL;
++ p++;
++ p->ch = c + 0x40;
++ p->style = MOD_ABNORMAL;
+ col += 2;
+ break;
+ }
+ if (c == 127) {
+- *(p++) = '^' | MOD_ABNORMAL;
+- *(p++) = '?' | MOD_ABNORMAL;
++ p->ch = '^';
++ p->style = MOD_ABNORMAL;
++ p++;
++ p->ch = '?';
++ p->style = MOD_ABNORMAL;
++ p++;
+ col += 2;
+ break;
+ }
+
+- if (is_printable (c)) {
+- *(p++) |= c;
++#ifndef UTF8
++ if (is_printable (c)
++#else /* UTF8 */
++ if (iswprint (c)
++#ifdef __STDC_ISO_10646__
++ && (c < BINARY_CHAR_OFFSET || c >= (BINARY_CHAR_OFFSET + 256))
++#endif
++#endif /* UTF8 */
++ ) {
++ p->ch = c;
++ p++;
++
++#ifdef UTF8
++ i = wcwidth(c);
++ if (i > 1) {
++ col += i - 1;
++ }
++#endif /* UTF8 */
+ } else {
+- *(p++) = '.' | MOD_ABNORMAL;
++ p->ch = '.';
++ p->style = MOD_ABNORMAL;
++ p++;
+ }
+ col++;
+ break;
+@@ -400,7 +465,7 @@
+ } else {
+ start_col_real = start_col = 0;
+ }
+- *p = 0;
++ p->ch = 0;
+
+ print_to_widget (edit, row, start_col, start_col_real, end_col, line);
+ }
+--- mc-4.6.2/edit/editkeys.c
++++ mc-4.6.2/edit/editkeys.c
+@@ -183,10 +183,10 @@
+ * 'command' is one of the editor commands from editcmddef.h.
+ */
+ int
+-edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch)
++edit_translate_key (WEdit *edit, long x_key, int *cmd, mc_wint_t *ch)
+ {
+ int command = CK_Insert_Char;
+- int char_for_insertion = -1;
++ mc_wint_t char_for_insertion = -1;
+ int i = 0;
+ int extmod = 0;
+ const edit_key_map_type *key_map = NULL;
+@@ -243,9 +243,30 @@
+ /* an ordinary insertable character */
+ if (x_key < 256 && !extmod) {
+ int c = convert_from_input_c (x_key);
+-
++#ifdef UTF8
++ mbstate_t mbs;
++ int res;
++ mc_wchar_t wc;
++
++ memset (&mbs, 0, sizeof (mbs));
++
++ if (edit->charpoint >= MB_CUR_MAX) edit->charpoint = 0;
++
++ edit->charbuf[edit->charpoint++] = c;
++
++ res = mbrtowc(&wc, (char *)edit->charbuf, edit->charpoint, &mbs);
++ if (res < 0) {
++ if (res != -2) edit->charpoint = 0; /* broken multibyte char, skip */
++ return 0;
++ }
++ edit->charpoint = 0;
++
++ if (iswprint (wc)) {
++ char_for_insertion = wc;
++#else
+ if (is_printable (c)) {
+ char_for_insertion = c;
++#endif /* UTF8 */
+ goto fin;
+ }
+ }
+@@ -284,7 +305,7 @@
+ *cmd = command;
+ *ch = char_for_insertion;
+
+- if (command == CK_Insert_Char && char_for_insertion == -1) {
++ if (command == CK_Insert_Char && char_for_insertion == (mc_wint_t)-1) {
+ /* unchanged, key has no function here */
+ return 0;
+ }
+--- mc-4.6.2/edit/editwidget.c
++++ mc-4.6.2/edit/editwidget.c
+@@ -333,7 +333,8 @@
+
+ case WIDGET_KEY:
+ {
+- int cmd, ch;
++ int cmd;
++ mc_wint_t ch;
+
+ /* The user may override the access-keys for the menu bar. */
+ if (edit_translate_key (e, parm, &cmd, &ch)) {
+--- mc-4.6.2/edit/wordproc.c
++++ mc-4.6.2/edit/wordproc.c
+@@ -40,7 +40,12 @@
+
+ #define tab_width option_tab_spacing
+
++#ifndef UTF8
+ #define NO_FORMAT_CHARS_START "-+*\\,.;:&>"
++#else /* UTF8 */
++#define NO_FORMAT_CHARS_START L"-+*\\,.;:&>"
++#endif /* UTF8 */
++
+ #define FONT_MEAN_WIDTH 1
+
+ static long
+@@ -57,14 +62,21 @@
+ p = edit_move_forward (edit, p, line - l, 0);
+
+ p = edit_bol (edit, p);
++
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
++
+ p++;
+ return p;
+ }
+
+ static int bad_line_start (WEdit * edit, long p)
+ {
+- int c;
++ mc_wint_t c;
++
+ c = edit_get_byte (edit, p);
+ if (c == '.') { /* `...' is acceptable */
+ if (edit_get_byte (edit, p + 1) == '.')
+@@ -78,7 +90,13 @@
+ return 0; /* `---' is acceptable */
+ return 1;
+ }
++
++#ifndef UTF8
+ if (strchr (NO_FORMAT_CHARS_START, c))
++#else /* UTF8 */
++ if (wcschr (NO_FORMAT_CHARS_START, c))
++#endif /* UTF8 */
++
+ return 1;
+ return 0;
+ }
+@@ -131,33 +149,37 @@
+ i - edit->curs_line, 0));
+ }
+
+-static unsigned char *
++static mc_wchar_t *
+ get_paragraph (WEdit *edit, long p, long q, int indent, int *size)
+ {
+- unsigned char *s, *t;
++ mc_wchar_t *s, *t;
+ #if 0
+- t = g_malloc ((q - p) + 2 * (q - p) / option_word_wrap_line_length +
+- 10);
++ t = g_malloc (((q - p) + 2 * (q - p) / option_word_wrap_line_length +
++ 10) * sizeof(mc_wchar_t));
+ #else
+- t = g_malloc (2 * (q - p) + 100);
++ t = g_malloc ((2 * (q - p) + 100) * sizeof(mc_wchar_t));
+ #endif
+ if (!t)
+ return 0;
+ for (s = t; p < q; p++, s++) {
+ if (indent)
+ if (edit_get_byte (edit, p - 1) == '\n')
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+ p++;
+ *s = edit_get_byte (edit, p);
+ }
+- *size = (unsigned long) s - (unsigned long) t;
++ *size = s - t;
+ t[*size] = '\n';
+ return t;
+ }
+
+-static void strip_newlines (unsigned char *t, int size)
++static void strip_newlines (mc_wchar_t *t, int size)
+ {
+- unsigned char *p = t;
++ mc_wchar_t *p = t;
+ while (size--) {
+ *p = *p == '\n' ? ' ' : *p;
+ p++;
+@@ -174,7 +196,7 @@
+ {
+ return x += tab_width - x % tab_width;
+ }
+-static int line_pixel_length (unsigned char *t, long b, int l)
++static int line_pixel_length (mc_wchar_t *t, long b, int l)
+ {
+ int x = 0, c, xn = 0;
+ for (;;) {
+@@ -198,7 +220,7 @@
+ }
+
+ static int
+-next_word_start (unsigned char *t, int q, int size)
++next_word_start (mc_wchar_t *t, int q, int size)
+ {
+ int i;
+ int saw_ws = 0;
+@@ -222,7 +244,7 @@
+
+ /* find the start of a word */
+ static int
+-word_start (unsigned char *t, int q, int size)
++word_start (mc_wchar_t *t, int q, int size)
+ {
+ int i = q;
+ if (t[q] == ' ' || t[q] == '\t')
+@@ -241,7 +263,7 @@
+ }
+
+ /* replaces ' ' with '\n' to properly format a paragraph */
+-static void format_this (unsigned char *t, int size, int indent)
++static void format_this (mc_wchar_t *t, int size, int indent)
+ {
+ int q = 0, ww;
+ strip_newlines (t, size);
+@@ -269,7 +291,7 @@
+ }
+ }
+
+-static void replace_at (WEdit * edit, long q, int c)
++static void replace_at (WEdit * edit, long q, mc_wint_t c)
+ {
+ edit_cursor_move (edit, q - edit->curs1);
+ edit_delete (edit);
+@@ -278,18 +300,27 @@
+
+ /* replaces a block of text */
+ static void
+-put_paragraph (WEdit * edit, unsigned char *t, long p, int indent, int size)
++put_paragraph (WEdit * edit, mc_wchar_t *t, long p, int indent, int size)
+ {
+ long cursor;
+- int i, c = 0;
++ int i;
++ mc_wchar_t c = 0;
+ cursor = edit->curs1;
+ if (indent)
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+ p++;
+ for (i = 0; i < size; i++, p++) {
+ if (i && indent) {
+ if (t[i - 1] == '\n' && c == '\n') {
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+ p++;
+ } else if (t[i - 1] == '\n') {
+ long curs;
+@@ -301,7 +332,11 @@
+ p = edit->curs1;
+ } else if (c == '\n') {
+ edit_cursor_move (edit, p - edit->curs1);
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p))) {
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p))) {
++#endif /* UTF8 */
+ edit_delete (edit);
+ if (cursor > edit->curs1)
+ cursor--;
+@@ -334,7 +369,7 @@
+ {
+ long p, q;
+ int size;
+- unsigned char *t;
++ mc_wchar_t *t;
+ int indent = 0;
+ if (option_word_wrap_line_length < 2)
+ return;
+@@ -344,17 +379,25 @@
+ q = end_paragraph (edit, force);
+ indent = test_indent (edit, p, q);
+ t = get_paragraph (edit, p, q, indent, &size);
+- if (!t)
++ if (!t)
+ return;
+ if (!force) {
+ int i;
++#ifndef UTF8
+ if (strchr (NO_FORMAT_CHARS_START, *t)) {
++#else /* UTF8 */
++ if (wcschr (NO_FORMAT_CHARS_START, *t)) {
++#endif /* UTF8 */
+ g_free (t);
+ return;
+ }
+ for (i = 0; i < size - 1; i++) {
+ if (t[i] == '\n') {
++#ifndef UTF8
+ if (strchr (NO_FORMAT_CHARS_START "\t ", t[i + 1])) {
++#else /* UTF8 */
++ if (wcschr (NO_FORMAT_CHARS_START "\t", t[i + 1])) {
++#endif /* UTF8 */
+ g_free (t);
+ return;
+ }
+--- mc-4.6.2/src/achown.c
++++ mc-4.6.2/src/achown.c
+@@ -585,6 +585,12 @@
+ b_att[2] = button_new (XTRACT (6));
+ b_user = button_new (XTRACT (5));
+ b_group = button_new (XTRACT (4));
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ b_user->text = g_realloc (b_user->text, MB_CUR_MAX * 15 + 1);
++ b_group->text = g_realloc (b_group->text, MB_CUR_MAX * 15 + 1);
++ }
++#endif
+
+ add_widget (ch_dlg, b_group);
+ add_widget (ch_dlg, b_user);
+--- mc-4.6.2/src/boxes.c
++++ mc-4.6.2/src/boxes.c
+@@ -154,23 +154,23 @@
+ display_title = _(display_title);
+ for (i = 0; i < LIST_TYPES; i++) {
+ displays[i] = _(displays[i]);
+- if ((l = strlen (displays[i])) > maxlen)
++ if ((l = mbstrlen (displays[i])) > maxlen)
+ maxlen = l;
+ }
+
+- i = strlen (ok_button) + 5;
+- l = strlen (cancel_button) + 3;
++ i = mbstrlen (ok_button) + 5;
++ l = mbstrlen (cancel_button) + 3;
+ l = max (i, l);
+
+ i = maxlen + l + 16;
+ if (i > DISPLAY_X)
+ DISPLAY_X = i;
+
+- i = strlen (user_mini_status) + 13;
++ i = mbstrlen (user_mini_status) + 13;
+ if (i > DISPLAY_X)
+ DISPLAY_X = i;
+
+- i = strlen (display_title) + 10;
++ i = mbstrlen (display_title) + 10;
+ if (i > DISPLAY_X)
+ DISPLAY_X = i;
+
+@@ -290,20 +290,20 @@
+ int maxlen = 0;
+ for (i = SORT_TYPES - 1; i >= 0; i--) {
+ sort_orders_names[i] = _(sort_orders[i].sort_name);
+- r = strlen (sort_orders_names[i]);
++ r = mbstrlen (sort_orders_names[i]);
+ if (r > maxlen)
+ maxlen = r;
+ }
+
+ check_pos = maxlen + 9;
+
+- r = strlen (reverse_label) + 4;
+- i = strlen (case_label) + 4;
++ r = mbstrlen (reverse_label) + 4;
++ i = mbstrlen (case_label) + 4;
+ if (i > r)
+ r = i;
+
+- l = strlen (ok_button) + 6;
+- i = strlen (cancel_button) + 4;
++ l = mbstrlen (ok_button) + 6;
++ i = mbstrlen (cancel_button) + 4;
+ if (i > l)
+ l = i;
+
+@@ -312,7 +312,7 @@
+ if (i > SORT_X)
+ SORT_X = i;
+
+- i = strlen (sort_title) + 6;
++ i = mbstrlen (sort_title) + 6;
+ if (i > SORT_X)
+ SORT_X = i;
+
+@@ -413,7 +413,7 @@
+ while (i--)
+ {
+ conf_widgets [i].text = _(conf_widgets [i].text);
+- l1 = strlen (conf_widgets [i].text) + 3;
++ l1 = mbstrlen (conf_widgets [i].text) + 3;
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+@@ -428,8 +428,8 @@
+ * And this for the case when buttons with some space to the right
+ * do not fit within 2/6
+ */
+- l1 = strlen (conf_widgets [0].text) + 3;
+- i = strlen (conf_widgets [1].text) + 5;
++ l1 = mbstrlen (conf_widgets [0].text) + 3;
++ i = mbstrlen (conf_widgets [1].text) + 5;
+ if (i > l1)
+ l1 = i;
+
+@@ -502,11 +502,11 @@
+ {
+ display_widgets [i].text = _(display_widgets[i].text);
+ display_bits_str [i] = _(display_bits_str [i]);
+- l1 = strlen (display_bits_str [i]);
++ l1 = mbstrlen (display_bits_str [i]);
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+- l1 = strlen (display_widgets [2].text);
++ l1 = mbstrlen (display_widgets [2].text);
+ if (l1 > maxlen)
+ maxlen = l1;
+
+@@ -514,8 +514,8 @@
+ display_bits.xlen = (maxlen + 5) * 6 / 4;
+
+ /* See above confirm_box */
+- l1 = strlen (display_widgets [0].text) + 3;
+- i = strlen (display_widgets [1].text) + 5;
++ l1 = mbstrlen (display_widgets [0].text) + 3;
++ i = mbstrlen (display_widgets [1].text) + 5;
+ if (i > l1)
+ l1 = i;
+
+@@ -610,7 +610,7 @@
+
+ cpname = _("&Select");
+ add_widget (dbits_dlg,
+- button_new (4, DISPX - 8 - strlen (cpname), B_USER,
++ button_new (4, DISPX - 8 - mbstrlen (cpname), B_USER,
+ NORMAL_BUTTON, cpname, sel_charset_button));
+
+ return dbits_dlg;
+@@ -821,7 +821,7 @@
+ quick_widgets [1].y_divisions =
+ quick_widgets [0].y_divisions = Quick_input.ylen = 5;
+
+- len = strlen (quick_widgets [1].text);
++ len = mbstrlen (quick_widgets [1].text);
+
+ quick_widgets [0].relative_x =
+ quick_widgets [1].relative_x + len + 1;
+@@ -980,7 +980,7 @@
+ {
+ job_buttons [i].name = _(job_buttons [i].name);
+
+- len = strlen (job_buttons [i].name) + 4;
++ len = mbstrlen (job_buttons [i].name) + 4;
+ JOBS_X = max (JOBS_X, startx + len + 3);
+
+ job_buttons [i].xpos = startx;
+@@ -989,7 +989,7 @@
+
+ /* Last button - Ok a.k.a. Cancel :) */
+ job_buttons [n_buttons - 1].xpos =
+- JOBS_X - strlen (job_buttons [n_buttons - 1].name) - 7;
++ JOBS_X - mbstrlen (job_buttons [n_buttons - 1].name) - 7;
+
+ i18n_flag = 1;
+ }
+@@ -1047,7 +1047,7 @@
+
+ while (i--)
+ {
+- l1 = strlen (labs [i] = _(labs [i]));
++ l1 = mbstrlen (labs [i] = _(labs [i]));
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+@@ -1057,7 +1057,7 @@
+
+ for (i = sizeof(buts)/sizeof(buts[0]), l1 = 0; i--; )
+ {
+- l1 += strlen (buts [i] = _(buts [i]));
++ l1 += mbstrlen (buts [i] = _(buts [i]));
+ }
+ l1 += 15;
+ if (l1 > dialog_x)
+@@ -1066,7 +1066,7 @@
+ ilen = dialog_x - 7 - maxlen; /* for the case of very long buttons :) */
+ istart = dialog_x - 3 - ilen;
+
+- b2 = dialog_x - (strlen(buts[1]) + 6);
++ b2 = dialog_x - (mbstrlen(buts[1]) + 6);
+
+ i18n_flag = 1;
+ }
+--- mc-4.6.2/src/dialog.c
++++ mc-4.6.2/src/dialog.c
+@@ -167,7 +167,7 @@
+
+ if (h->title) {
+ attrset (DLG_HOT_NORMALC (h));
+- dlg_move (h, space, (h->cols - strlen (h->title)) / 2);
++ dlg_move (h, space, (h->cols - mbstrlen (h->title)) / 2);
+ addstr (h->title);
+ }
+ }
+--- mc-4.6.2/src/file.c
++++ mc-4.6.2/src/file.c
+@@ -167,15 +167,20 @@
+ do_transform_source (FileOpContext *ctx, const char *source)
+ {
+ size_t j, k, l, len;
+- const char *fnsource = x_basename (source);
++ char *fnsource = g_strdup (x_basename (source));
+ int next_reg;
+ enum CaseConvs case_conv = NO_CONV;
+ static char fntarget[MC_MAXPATHLEN];
+
++#ifdef UTF8
++ fix_utf8(fnsource);
++#endif
++
+ len = strlen (fnsource);
+ j = re_match (&ctx->rx, fnsource, len, 0, &ctx->regs);
+ if (j != len) {
+ transform_error = FILE_SKIP;
++ g_free (fnsource);
+ return NULL;
+ }
+ for (next_reg = 1, j = 0, k = 0; j < strlen (ctx->dest_mask); j++) {
+@@ -225,6 +230,7 @@
+ || ctx->regs.start[next_reg] < 0) {
+ message (1, MSG_ERROR, _(" Invalid target mask "));
+ transform_error = FILE_ABORT;
++ g_free(fnsource);
+ return NULL;
+ }
+ for (l = (size_t) ctx->regs.start[next_reg];
+@@ -239,6 +245,7 @@
+ }
+ }
+ fntarget[k] = 0;
++ g_free(fnsource);
+ return fntarget;
+ }
+
+@@ -1700,13 +1707,13 @@
+ *dp = '\0';
+
+ if (single_source) {
+- i = fmd_xlen - strlen (format_string) - 4;
++ i = fmd_xlen - mbstrlen (format_string) - 4;
+ g_snprintf (cmd_buf, sizeof (cmd_buf), format_string,
+ name_trunc (single_source, i));
+ } else {
+ g_snprintf (cmd_buf, sizeof (cmd_buf), format_string,
+ panel->marked);
+- i = strlen (cmd_buf) + 6 - fmd_xlen;
++ i = mbstrlen (cmd_buf) + 6 - fmd_xlen;
+ if (i > 0) {
+ fmd_xlen += i;
+ fmd_init_i18n (TRUE); /* to recalculate positions of child widgets */
+--- mc-4.6.2/src/filegui.c
++++ mc-4.6.2/src/filegui.c
+@@ -66,6 +66,7 @@
+ #include "filegui.h"
+ #include "key.h" /* get_event */
+ #include "util.h" /* strip_password() */
++#include "tty.h"
+
+ /* }}} */
+
+@@ -564,8 +565,8 @@
+ * longest of "Overwrite..." labels
+ * (assume "Target date..." are short enough)
+ */
+- l1 = max (strlen (rd_widgets[6].text),
+- strlen (rd_widgets[11].text));
++ l1 = max (mbstrlen (rd_widgets[6].text),
++ mbstrlen (rd_widgets[11].text));
+
+ /* longest of button rows */
+ i = sizeof (rd_widgets) / sizeof (rd_widgets[0]);
+@@ -576,7 +577,7 @@
+ l2 = max (l2, l);
+ l = 0;
+ }
+- l += strlen (rd_widgets[i].text) + 4;
++ l += mbstrlen (rd_widgets[i].text) + 4;
+ }
+ }
+ l2 = max (l2, l); /* last row */
+@@ -594,12 +595,12 @@
+ l = l1;
+ }
+ rd_widgets[i].xpos = l;
+- l += strlen (rd_widgets[i].text) + 4;
++ l += mbstrlen (rd_widgets[i].text) + 4;
+ }
+ }
+ /* Abort button is centered */
+ rd_widgets[1].xpos =
+- (rd_xlen - strlen (rd_widgets[1].text) - 3) / 2;
++ (rd_xlen - mbstrlen (rd_widgets[1].text) - 3) / 2;
+ }
+ #endif /* ENABLE_NLS */
+
+@@ -618,7 +619,7 @@
+
+ ADD_RD_LABEL (ui, 0,
+ name_trunc (ui->replace_filename,
+- rd_trunc - strlen (rd_widgets[0].text)), 0);
++ rd_trunc - mbstrlen (rd_widgets[0].text)), 0);
+ ADD_RD_BUTTON (1);
+
+ ADD_RD_BUTTON (2);
+@@ -805,36 +806,36 @@
+ if (fmd_widgets[i].text[0] != '\0')
+ fmd_widgets[i].text = _(fmd_widgets[i].text);
+
+- len = strlen (fmd_widgets[FMCB11].text)
+- + strlen (fmd_widgets[FMCB21].text) + 15;
++ len = mbstrlen (fmd_widgets[FMCB11].text)
++ + mbstrlen (fmd_widgets[FMCB21].text) + 15;
+ fmd_xlen = max (fmd_xlen, len);
+
+- len = strlen (fmd_widgets[FMCB12].text)
+- + strlen (fmd_widgets[FMCB22].text) + 15;
++ len = mbstrlen (fmd_widgets[FMCB12].text)
++ + mbstrlen (fmd_widgets[FMCB22].text) + 15;
+ fmd_xlen = max (fmd_xlen, len);
+
+- len = strlen (fmd_widgets[FMBRGT].text)
+- + strlen (fmd_widgets[FMBLFT].text) + 11;
++ len = mbstrlen (fmd_widgets[FMBRGT].text)
++ + mbstrlen (fmd_widgets[FMBLFT].text) + 11;
+
+ #ifdef FMBMID
+- len += strlen (fmd_widgets[FMBMID].text) + 6;
++ len += mbstrlen (fmd_widgets[FMBMID].text) + 6;
+ #endif
+
+ fmd_xlen = max (fmd_xlen, len + 4);
+
+ len = (fmd_xlen - (len + 6)) / 2;
+ i = fmd_widgets[FMBLFT].relative_x = len + 3;
+- i += strlen (fmd_widgets[FMBLFT].text) + 8;
++ i += mbstrlen (fmd_widgets[FMBLFT].text) + 8;
+
+ #ifdef FMBMID
+ fmd_widgets[FMBMID].relative_x = i;
+- i += strlen (fmd_widgets[FMBMID].text) + 6;
++ i += mbstrlen (fmd_widgets[FMBMID].text) + 6;
+ #endif
+
+ fmd_widgets[FMBRGT].relative_x = i;
+
+ #define chkbox_xpos(i) \
+- fmd_widgets [i].relative_x = fmd_xlen - strlen (fmd_widgets [i].text) - 6
++ fmd_widgets [i].relative_x = fmd_xlen - mbstrlen (fmd_widgets [i].text) - 6
+
+ chkbox_xpos (FMCB0);
+ chkbox_xpos (FMCB21);
+@@ -856,7 +857,7 @@
+
+ char *
+ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
+- const char *def_text, int only_one, int *do_background)
++ const char *def_text_orig, int only_one, int *do_background)
+ {
+ int source_easy_patterns = easy_patterns;
+ char *source_mask, *orig_mask, *dest_dir, *tmpdest;
+@@ -865,12 +866,20 @@
+ struct stat buf;
+ int val;
+ QuickDialog Quick_input;
+-
++ char *def_text;
+ g_return_val_if_fail (ctx != NULL, NULL);
++
++ def_text = g_strdup(def_text_orig);
++
+ #if 0
+ message (1, __FUNCTION__, "text = `%s' \n def_text = `%s'", text,
+ def_text);
+ #endif
++
++#ifdef UTF8
++ fix_utf8(def_text);
++#endif
++
+ fmd_init_i18n (FALSE);
+
+ /* Set up the result pointers */
+@@ -929,6 +938,7 @@
+ orig_mask = source_mask;
+ if (!dest_dir || !*dest_dir) {
+ g_free (source_mask);
++ g_free(def_text);
+ return dest_dir;
+ }
+ if (source_easy_patterns) {
+@@ -982,5 +992,6 @@
+ }
+ if (val == B_USER)
+ *do_background = 1;
++ g_free(def_text);
+ return dest_dir;
+ }
+--- mc-4.6.2/src/find.c
++++ mc-4.6.2/src/find.c
+@@ -219,7 +219,7 @@
+ int l1, maxlen = 0;
+
+ while (i--) {
+- l1 = strlen (labs[i] = _(labs[i]));
++ l1 = mbstrlen (labs[i] = _(labs[i]));
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+@@ -228,7 +228,7 @@
+ FIND_X = i;
+
+ for (i = sizeof (buts) / sizeof (buts[0]), l1 = 0; i--;) {
+- l1 += strlen (buts[i] = _(buts[i]));
++ l1 += mbstrlen (buts[i] = _(buts[i]));
+ }
+ l1 += 21;
+ if (l1 > FIND_X)
+@@ -237,8 +237,8 @@
+ ilen = FIND_X - 7 - maxlen; /* for the case of very long buttons :) */
+ istart = FIND_X - 3 - ilen;
+
+- b1 = b0 + strlen (buts[0]) + 7;
+- b2 = FIND_X - (strlen (buts[2]) + 6);
++ b1 = b0 + mbstrlen (buts[0]) + 7;
++ b2 = FIND_X - (mbstrlen (buts[2]) + 6);
+
+ i18n_flag = 1;
+ case_label = _(case_label);
+@@ -865,7 +865,7 @@
+ if (!i18n_flag) {
+ register int i = sizeof (fbuts) / sizeof (fbuts[0]);
+ while (i--)
+- fbuts[i].len = strlen (fbuts[i].text = _(fbuts[i].text)) + 3;
++ fbuts[i].len = mbstrlen (fbuts[i].text = _(fbuts[i].text)) + 3;
+ fbuts[2].len += 2; /* DEFPUSH_BUTTON */
+ i18n_flag = 1;
+ }
+@@ -1030,7 +1030,7 @@
+
+ if (!next_free) /* first turn i.e clean old list */
+ panel_clean_dir (current_panel);
+- list->list[next_free].fnamelen = strlen (name);
++ list->list[next_free].fnamelen = mbstrlen (name);
+ list->list[next_free].fname = name;
+ list->list[next_free].f.marked = 0;
+ list->list[next_free].f.link_to_dir = link_to_dir;
+--- mc-4.6.2/src/help.c
++++ mc-4.6.2/src/help.c
+@@ -416,10 +416,28 @@
+ #ifndef HAVE_SLANG
+ addch (acs_map [c]);
+ #else
++#if defined(UTF8) && SLANG_VERSION < 20000
++ SLsmg_draw_object (h->y + line + 2, h->x + col + 2, acs_map [c]);
++#else
+ SLsmg_draw_object (h->y + line + 2, h->x + col + 2, c);
++#endif /* UTF8 */
+ #endif
++ } else {
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ int len;
++ mbstate_t mbs;
++ wchar_t wc;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrtowc(&wc, p, MB_CUR_MAX, &mbs);
++ if (len <= 0) len = 1; /* skip broken multibyte chars */
++
++ SLsmg_write_nwchars(&wc, 1);
++ p += len - 1;
+ } else
++#endif
+ addch (c);
++ }
+ col++;
+ break;
+ }
+@@ -772,6 +790,12 @@
+ message (1, MSG_ERROR, _(" Cannot open file %s \n %s "), filename ? filename : hlpfile,
+ unix_error_string (errno));
+ }
++ else
++ {
++ char *conv = utf8_to_local(data);
++ g_free(data);
++ data = conv;
++ }
+
+ if (!filename)
+ g_free (hlpfile);
+--- mc-4.6.2/src/hotlist.c
++++ mc-4.6.2/src/hotlist.c
+@@ -566,7 +566,7 @@
+
+ row = hotlist_but [i].y;
+ ++count [row];
+- len [row] += strlen (hotlist_but [i].text) + 5;
++ len [row] += mbstrlen (hotlist_but [i].text) + 5;
+ if (hotlist_but [i].flags == DEFPUSH_BUTTON)
+ len [row] += 2;
+ }
+@@ -591,12 +591,12 @@
+ /* not first int the row */
+ if (!strcmp (hotlist_but [i].text, cancel_but))
+ hotlist_but [i].x =
+- cols - strlen (hotlist_but [i].text) - 13;
++ cols - mbstrlen (hotlist_but [i].text) - 13;
+ else
+ hotlist_but [i].x = cur_x [row];
+ }
+
+- cur_x [row] += strlen (hotlist_but [i].text) + 2
++ cur_x [row] += mbstrlen (hotlist_but [i].text) + 2
+ + (hotlist_but [i].flags == DEFPUSH_BUTTON ? 5 : 3);
+ }
+ }
+@@ -837,7 +837,7 @@
+ for (i = 0; i < 3; i++)
+ {
+ qw [i].text = _(qw [i].text);
+- l[i] = strlen (qw [i].text) + 3;
++ l[i] = mbstrlen (qw [i].text) + 3;
+ }
+ space = (len - 4 - l[0] - l[1] - l[2]) / 4;
+
+@@ -886,7 +886,7 @@
+
+ msglen(text1, &lines1, &cols1);
+ msglen(text2, &lines2, &cols2);
+- len = max ((int) strlen (header), cols1);
++ len = max ((int) mbstrlen (header), cols1);
+ len = max (len, cols2) + 4;
+ len = max (len, 64);
+
+@@ -982,7 +982,7 @@
+ #endif /* ENABLE_NLS */
+
+ msglen (label, &lines, &cols);
+- len = max ((int) strlen (header), cols) + 4;
++ len = max ((int) mbstrlen (header), cols) + 4;
+ len = max (len, 64);
+
+ #ifdef ENABLE_NLS
+@@ -1038,7 +1038,7 @@
+ {
+ char *prompt, *label;
+ const char *cp = _("Label for \"%s\":");
+- int l = strlen (cp);
++ int l = mbstrlen (cp);
+ char *label_string = g_strdup (current_panel->cwd);
+
+ strip_password (label_string, 1);
+--- mc-4.6.2/src/layout.c
++++ mc-4.6.2/src/layout.c
+@@ -367,36 +367,36 @@
+
+ while (i--) {
+ s_split_direction[i] = _(s_split_direction[i]);
+- l1 = strlen (s_split_direction[i]) + 7;
++ l1 = mbstrlen (s_split_direction[i]) + 7;
+ if (l1 > first_width)
+ first_width = l1;
+ }
+
+ for (i = 0; i <= 8; i++) {
+ check_options[i].text = _(check_options[i].text);
+- l1 = strlen (check_options[i].text) + 7;
++ l1 = mbstrlen (check_options[i].text) + 7;
+ if (l1 > first_width)
+ first_width = l1;
+ }
+
+- l1 = strlen (title1) + 1;
++ l1 = mbstrlen (title1) + 1;
+ if (l1 > first_width)
+ first_width = l1;
+
+- l1 = strlen (title2) + 1;
++ l1 = mbstrlen (title2) + 1;
+ if (l1 > first_width)
+ first_width = l1;
+
+
+- second_width = strlen (title3) + 1;
++ second_width = mbstrlen (title3) + 1;
+ for (i = 0; i < 6; i++) {
+ check_options[i].text = _(check_options[i].text);
+- l1 = strlen (check_options[i].text) + 7;
++ l1 = mbstrlen (check_options[i].text) + 7;
+ if (l1 > second_width)
+ second_width = l1;
+ }
+ if (console_flag) {
+- l1 = strlen (output_lines_label) + 13;
++ l1 = mbstrlen (output_lines_label) + 13;
+ if (l1 > second_width)
+ second_width = l1;
+ }
+@@ -410,14 +410,14 @@
+ *
+ * Now the last thing to do - properly space buttons...
+ */
+- l1 = 11 + strlen (ok_button) /* 14 - all brackets and inner space */
+- +strlen (save_button) /* notice: it is 3 char less because */
+- +strlen (cancel_button); /* of '&' char in button text */
++ l1 = 11 + mbstrlen (ok_button) /* 14 - all brackets and inner space */
++ +mbstrlen (save_button) /* notice: it is 3 char less because */
++ +mbstrlen (cancel_button); /* of '&' char in button text */
+
+ i = (first_width + second_width - l1) / 4;
+ b1 = 5 + i;
+- b2 = b1 + strlen (ok_button) + i + 6;
+- b3 = b2 + strlen (save_button) + i + 4;
++ b2 = b1 + mbstrlen (ok_button) + i + 6;
++ b3 = b2 + mbstrlen (save_button) + i + 4;
+
+ i18n_layt_flag = 1;
+ }
+@@ -681,7 +681,7 @@
+ panel_do_cols (0);
+ panel_do_cols (1);
+
+- promptl = strlen (prompt);
++ promptl = mbstrlen (prompt);
+
+ widget_set_size (&the_menubar->widget, 0, 0, 1, COLS);
+
+--- mc-4.6.2/src/learn.c
++++ mc-4.6.2/src/learn.c
+@@ -238,7 +238,7 @@
+ learn_but[0].x = 78 / 2 + 4;
+
+ learn_but[1].text = _(learn_but[1].text);
+- learn_but[1].x = 78 / 2 - (strlen (learn_but[1].text) + 9);
++ learn_but[1].x = 78 / 2 - (mbstrlen (learn_but[1].text) + 9);
+
+ learn_title = _(learn_title);
+ i18n_flag = 1;
+--- mc-4.6.2/src/main.c
++++ mc-4.6.2/src/main.c
+@@ -706,7 +706,7 @@
+ int prompt_len;
+
+ tmp_prompt = strip_ctrl_codes (subshell_prompt);
+- prompt_len = strlen (tmp_prompt);
++ prompt_len = mbstrlen (tmp_prompt);
+
+ /* Check for prompts too big */
+ if (COLS > 8 && prompt_len > COLS - 8) {
+@@ -1614,7 +1614,11 @@
+ if (xterm_flag && xterm_title) {
+ p = s = g_strdup (strip_home_and_password (current_panel->cwd));
+ do {
++#ifndef UTF8
+ if (!is_printable ((unsigned char) *s))
++#else /* UTF8 */
++ if (*(unsigned char *)s < ' ')
++#endif /* UTF8 */
+ *s = '?';
+ } while (*++s);
+ if (!alternate_plus_minus)
+--- mc-4.6.2/src/menu.c
++++ mc-4.6.2/src/menu.c
+@@ -23,6 +23,7 @@
+ #include <string.h>
+
+ #include <sys/types.h>
++#include <wchar.h>
+
+ #include "global.h"
+ #include "tty.h"
+@@ -54,35 +55,95 @@
+ {
+ Menu *menu;
+ const char *cp;
++ int wlen = 0;
++ mbstate_t s;
+
+ menu = (Menu *) g_malloc (sizeof (*menu));
+ menu->count = count;
+ menu->max_entry_len = 20;
+ menu->entries = entries;
++ menu->name = g_strdup (name);
++ menu_scan_hotkey (menu);
++#ifdef UTF8
++ menu->wentries = NULL;
++ menu->wname = NULL;
++ if (SLsmg_Is_Unicode) {
++ const char *str = menu->name;
++ memset (&s, 0, sizeof (s));
++ wlen = mbsrtowcs (NULL, &str, -1, &s);
++ if (wlen > 0)
++ ++wlen;
++ else {
++ wlen = 0;
++ memset (&s, 0, sizeof (s));
++ }
++ }
++#endif
+
+ if (entries != (menu_entry*) NULL) {
+ register menu_entry* mp;
+ for (mp = entries; count--; mp++) {
+ if (mp->text[0] != '\0') {
++ int len;
+ #ifdef ENABLE_NLS
+ mp->text = _(mp->text);
+ #endif /* ENABLE_NLS */
+ cp = strchr (mp->text,'&');
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ len = mbstrlen(mp->text) + 1;
++ wlen += len;
++ menu->max_entry_len = max (len - 1, menu->max_entry_len);
++ } else
++#endif
++ len = strlen (mp->text);
+
+ if (cp != NULL && *(cp+1) != '\0') {
+ mp->hot_key = tolower ((unsigned char) *(cp+1));
+- menu->max_entry_len = max ((int) (strlen (mp->text) - 1),
+- menu->max_entry_len);
++ menu->max_entry_len = max (len - 1, menu->max_entry_len);
+ } else {
+- menu->max_entry_len = max ((int) strlen (mp->text),
+- menu->max_entry_len);
++ menu->max_entry_len = max (len, menu->max_entry_len);
+ }
+ }
+ }
+ }
+
+- menu->name = g_strdup (name);
+- menu_scan_hotkey(menu);
++#ifdef UTF8
++ if (wlen) {
++ wchar_t *wp;
++ const char *str;
++ int len;
++
++ menu->wentries = (wchar_t **)
++ g_malloc (sizeof (wchar_t *) * menu->count
++ + wlen * sizeof (wchar_t));
++ wp = (wchar_t *) (menu->wentries + menu->count);
++ str = menu->name;
++ len = mbsrtowcs (wp, &str, wlen, &s);
++ if (len > 0) {
++ menu->wname = wp;
++ wlen -= len + 1;
++ wp += len + 1;
++ } else
++ memset (&s, 0, sizeof (s));
++ if (menu->entries != NULL)
++ for (count = 0; count < menu->count; ++count)
++ if (menu->entries[count].text[0] != '\0') {
++ str = menu->entries[count].text;
++ menu->wentries[count] = wp;
++ len = mbsrtowcs (wp, &str, wlen, &s);
++ if (len > 0) {
++ wlen -= len + 1;
++ wp += len + 1;
++ } else {
++ memset (&s, 0, sizeof (s));
++ *wp++ = L'\0';
++ --wlen;
++ }
++ }
++ }
++#endif
++
+ menu->start_x = 0;
+ menu->help_node = g_strdup (help_node);
+ return menu;
+@@ -113,8 +174,26 @@
+ const char *text;
+
+ addch((unsigned char)menu->entries [idx].first_letter);
+- for (text = menu->entries [idx].text; *text; text++)
+- {
++#ifdef UTF8
++ if (menu->wentries) {
++ wchar_t *wtext, *wp;
++
++ for (wtext = wp = menu->wentries [idx]; *wtext; wtext++) {
++ if (*wtext == L'&') {
++ if (wtext > wp)
++ SLsmg_write_nwchars (wp, wtext - wp);
++ attrset (color == MENU_SELECTED_COLOR ?
++ MENU_HOTSEL_COLOR : MENU_HOT_COLOR);
++ SLsmg_write_nwchars (++wtext, 1);
++ attrset (color);
++ wp = wtext + 1;
++ }
++ }
++ if (wtext > wp)
++ SLsmg_write_nwchars (wp, wtext - wp);
++ } else
++#endif
++ for (text = menu->entries [idx].text; *text; text++) {
+ if (*text != '&')
+ addch(*text);
+ else {
+@@ -123,7 +202,7 @@
+ addch(*(++text));
+ attrset(color);
+ }
+- }
++ }
+ }
+ widget_move (&menubar->widget, y, x + 1);
+ }
+@@ -169,6 +248,12 @@
+ if (menubar->active)
+ attrset(i == menubar->selected?MENU_SELECTED_COLOR:SELECTED_COLOR);
+ widget_move (&menubar->widget, 0, menubar->menu [i]->start_x);
++#ifdef UTF8
++ if (menubar->menu [i]->wname)
++ SLsmg_write_nwchars (menubar->menu [i]->wname,
++ wcslen (menubar->menu [i]->wname));
++ else
++#endif
+ tty_printf ("%s", menubar->menu [i]->name);
+ }
+
+@@ -494,7 +579,13 @@
+
+ for (i = 0; i < items; i++)
+ {
+- int len = strlen(menubar->menu[i]->name);
++ int len;
++#ifdef UTF8
++ if (menubar->menu[i]->wname)
++ len = wcslen (menubar->menu[i]->wname);
++ else
++#endif
++ len = strlen(menubar->menu[i]->name);
+ menubar->menu[i]->start_x = start_x;
+ start_x += len + gap;
+ }
+@@ -507,7 +598,13 @@
+ for (i = 0; i < items; i++)
+ {
+ /* preserve length here, to be used below */
+- gap -= (menubar->menu[i]->start_x = strlen(menubar->menu[i]->name));
++#ifdef UTF8
++ if (menubar->menu[i]->wname)
++ menubar->menu[i]->start_x = wcslen (menubar->menu[i]->wname);
++ else
++#endif
++ menubar->menu[i]->start_x = strlen (menubar->menu[i]->name);
++ gap -= menubar->menu[i]->start_x;
+ }
+
+ gap /= (items - 1);
+@@ -531,6 +628,9 @@
+ void
+ destroy_menu (Menu *menu)
+ {
++#ifdef UTF8
++ g_free (menu->wentries);
++#endif
+ g_free (menu->name);
+ g_free (menu->help_node);
+ g_free (menu);
+--- mc-4.6.2/src/menu.h
++++ mc-4.6.2/src/menu.h
+@@ -21,6 +21,8 @@
+ menu_entry *entries;
+ int start_x; /* position relative to menubar start */
+ char *help_node;
++ wchar_t **wentries;
++ wchar_t *wname;
+ } Menu;
+
+ extern int menubar_visible;
+--- mc-4.6.2/src/myslang.h
++++ mc-4.6.2/src/myslang.h
+@@ -11,6 +11,16 @@
+ #endif /* HAVE_SLANG_SLANG_H */
+ #endif
+
++#if SLANG_VERSION >= 20000
++#define UTF8 1
++#define SLsmg_Is_Unicode SLsmg_is_utf8_mode()
++void SLsmg_write_nwchars(wchar_t *s, size_t n);
++#endif
++
++#ifdef UTF8
++# include <wchar.h>
++#endif
++
+ enum {
+ KEY_BACKSPACE = 400,
+ KEY_END, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
+--- mc-4.6.2/src/option.c
++++ mc-4.6.2/src/option.c
+@@ -124,12 +124,12 @@
+ title2 = _(" Pause after run... ");
+ title3 = _(" Other options ");
+
+- first_width = strlen (title1) + 1;
+- second_width = strlen (title3) + 1;
++ first_width = mbstrlen (title1) + 1;
++ second_width = mbstrlen (title3) + 1;
+
+ for (i = 0; check_options[i].text; i++) {
+ check_options[i].text = _(check_options[i].text);
+- l1 = strlen (check_options[i].text) + 7;
++ l1 = mbstrlen (check_options[i].text) + 7;
+ if (i >= OTHER_OPTIONS) {
+ if (l1 > first_width)
+ first_width = l1;
+@@ -142,23 +142,23 @@
+ i = PAUSE_OPTIONS;
+ while (i--) {
+ pause_options[i] = _(pause_options[i]);
+- l1 = strlen (pause_options[i]) + 7;
++ l1 = mbstrlen (pause_options[i]) + 7;
+ if (l1 > first_width)
+ first_width = l1;
+ }
+
+- l1 = strlen (title2) + 1;
++ l1 = mbstrlen (title2) + 1;
+ if (l1 > first_width)
+ first_width = l1;
+
+- l1 = 11 + strlen (ok_button)
+- + strlen (save_button)
+- + strlen (cancel_button);
++ l1 = 11 + mbstrlen (ok_button)
++ + mbstrlen (save_button)
++ + mbstrlen (cancel_button);
+
+ i = (first_width + second_width - l1) / 4;
+ b1 = 5 + i;
+- b2 = b1 + strlen (ok_button) + i + 6;
+- b3 = b2 + strlen (save_button) + i + 4;
++ b2 = b1 + mbstrlen (ok_button) + i + 6;
++ b3 = b2 + mbstrlen (save_button) + i + 4;
+
+ i18n_config_flag = 1;
+ }
+--- mc-4.6.2/src/panelize.c
++++ mc-4.6.2/src/panelize.c
+@@ -129,7 +129,7 @@
+ i = sizeof (panelize_but) / sizeof (panelize_but[0]);
+ while (i--) {
+ panelize_but[i].text = _(panelize_but[i].text);
+- maxlen += strlen (panelize_but[i].text) + 5;
++ maxlen += mbstrlen (panelize_but[i].text) + 5;
+ }
+ maxlen += 10;
+
+@@ -138,11 +138,11 @@
+ panelize_cols = max (panelize_cols, maxlen);
+
+ panelize_but[2].x =
+- panelize_but[3].x + strlen (panelize_but[3].text) + 7;
++ panelize_but[3].x + mbstrlen (panelize_but[3].text) + 7;
+ panelize_but[1].x =
+- panelize_but[2].x + strlen (panelize_but[2].text) + 5;
++ panelize_but[2].x + mbstrlen (panelize_but[2].text) + 5;
+ panelize_but[0].x =
+- panelize_cols - strlen (panelize_but[0].text) - 8 - BX;
++ panelize_cols - mbstrlen (panelize_but[0].text) - 8 - BX;
+
+ #endif /* ENABLE_NLS */
+
+--- mc-4.6.2/src/screen.c
++++ mc-4.6.2/src/screen.c
+@@ -173,21 +173,56 @@
+ static const char *
+ string_file_name (file_entry *fe, int len)
+ {
+- static char buffer [MC_MAXPATHLEN + 1];
+ size_t i;
+
+- for (i = 0; i < sizeof(buffer) - 1; i++) {
+- char c;
++#ifdef UTF8
++ static char buffer [BUF_SMALL * 4];
++ mbstate_t s;
++ int mbmax = MB_CUR_MAX;
++ const char *str = fe->fname;
+
+- c = fe->fname[i];
++ memset (&s, 0, sizeof (s));
++#else
++ static char buffer [BUF_SMALL];
++#endif
+
+- if (!c)
+- break;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ for (i = 0; i < sizeof (buffer) - 1; i++) {
++ wchar_t wc;
++ int len;
+
+- if (!is_printable(c))
+- c = '?';
++ len = mbrtowc (&wc, str, mbmax, &s);
++ if (!len)
++ break;
++ if (len < 0) {
++ memset (&s, 0, sizeof (s));
++ buffer[i] = '?';
++ str++;
++ continue;
++ }
++ if (!is_printable (wc)) {
++ buffer[i] = '?';
++ str++;
++ continue;
++ }
++ if (i >= sizeof (buffer) - len)
++ break;
++ memcpy (buffer + i, str, len);
++ i += len - 1;
++ str += len;
++ } else
++#endif
++ for (i = 0; i < sizeof(buffer) - 1; i++) {
++ char c;
++
++ c = fe->fname[i];
+
+- buffer[i] = c;
++ if (!c) break;
++
++ if (!is_printable(c)) c = '?';
++
++ buffer[i] = c;
+ }
+
+ buffer[i] = 0;
+@@ -452,42 +487,6 @@
+ { "dot", 1, 0, J_RIGHT, " ", 0, string_dot, NULL },
+ };
+
+-static char *
+-to_buffer (char *dest, int just_mode, int len, const char *txt)
+-{
+- int txtlen = strlen (txt);
+- int still, over;
+-
+- /* Fill buffer with spaces */
+- memset (dest, ' ', len);
+-
+- still = (over=(txtlen > len)) ? (txtlen - len) : (len - txtlen);
+-
+- switch (HIDE_FIT(just_mode)){
+- case J_LEFT:
+- still = 0;
+- break;
+- case J_CENTER:
+- still /= 2;
+- break;
+- case J_RIGHT:
+- default:
+- break;
+- }
+-
+- if (over){
+- if (IS_FIT(just_mode))
+- strcpy (dest, name_trunc(txt, len));
+- else
+- strncpy (dest, txt+still, len);
+- } else
+- strncpy (dest+still, txt, txtlen);
+-
+- dest[len] = '\0';
+-
+- return (dest + len);
+-}
+-
+ static int
+ file_compute_color (int attr, file_entry *fe)
+ {
+@@ -541,14 +540,18 @@
+
+ /* Formats the file number file_index of panel in the buffer dest */
+ static void
+-format_file (char *dest, int limit, WPanel *panel, int file_index, int width, int attr, int isstatus)
++format_file (WPanel *panel, int file_index, int width, int attr, int isstatus)
+ {
+ int color, length, empty_line;
+ const char *txt;
+- char *old_pos;
+- char *cdest = dest;
+ format_e *format, *home;
+ file_entry *fe;
++#ifdef UTF8
++ char buffer[BUF_MEDIUM * sizeof (wchar_t)];
++#else
++ char buffer[BUF_MEDIUM];
++#endif
++ int txtwidth = 0;
+
+ length = 0;
+ empty_line = (file_index >= panel->count);
+@@ -566,34 +569,137 @@
+ break;
+
+ if (format->string_fn){
+- int len;
++ int len, still, over, perm, txtlen, wide;
+
+ if (empty_line)
+ txt = " ";
+ else
+ txt = (*format->string_fn)(fe, format->field_len);
+
+- old_pos = cdest;
+-
+ len = format->field_len;
+ if (len + length > width)
+ len = width - length;
+- if (len + (cdest - dest) > limit)
+- len = limit - (cdest - dest);
++ if (len >= BUF_MEDIUM)
++ len = BUF_MEDIUM - 1;
+ if (len <= 0)
+ break;
+- cdest = to_buffer (cdest, format->just_mode, len, txt);
+- length += len;
+
+- attrset (color);
++ perm = 0;
++ if (permission_mode) {
++ if (!strcmp(format->id, "perm"))
++ perm = 1;
++ else if (!strcmp(format->id, "mode"))
++ perm = 2;
++ }
+
+- if (permission_mode && !strcmp(format->id, "perm"))
+- add_permission_string (old_pos, format->field_len, fe, attr, color, 0);
+- else if (permission_mode && !strcmp(format->id, "mode"))
+- add_permission_string (old_pos, format->field_len, fe, attr, color, 1);
+- else
+- addstr (old_pos);
++ wide = 0;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode && !empty_line && !perm) {
++ mbstate_t s;
++ const char *str = txt;
++
++ memset (&s, 0, sizeof (s));
++ txtlen = mbsrtowcs ((wchar_t *) buffer, &str,
++ sizeof (buffer) / sizeof (wchar_t), &s);
++ if (txtlen < 0) {
++ txt = " ";
++ txtlen = 1;
++ } else {
++ wide = 1;
++ txtwidth = wcswidth((wchar_t*)buffer, txtlen);
++ }
++ } else
++#endif
++ {
++ txtlen = mbstrlen (txt);
++ txtwidth = txtlen;
++ }
++
++ over = txtwidth > len;
++ still = over ? txtlen - len : len - txtlen;
++
++ switch (HIDE_FIT(format->just_mode)) {
++ case J_LEFT:
++ still = 0;
++ break;
++ case J_CENTER:
++ still /= 2;
++ break;
++ case J_RIGHT:
++ default:
++ break;
++ }
++
++ attrset (color);
++
++ if (wide) {
++#ifdef UTF8
++ if (over) {
++ if (IS_FIT (format->just_mode)) {
++ int n1 = 0;
++ int width1 = 0;
++ int n2 = 0;
++ int width2 = 0;
++ int len1 = len / 2;
++ int len2;
++
++ while (1) {
++ int w = wcwidth(((wchar_t *) buffer)[n1]);
++ if (width1 + w <= len1) {
++ width1 += w;
++ n1++;
++ }
++ else
++ break;
++ }
++ len2 = len - width1 - 1;
++
++ while (1) {
++ int w = wcwidth(((wchar_t *) buffer)[txtlen - n2 - 1]);
++ if (width2 + w <= len2) {
++ width2 += w;
++ n2++;
++ }
++ else
++ break;
++ }
++
++
++ SLsmg_write_nwchars ((wchar_t *) buffer, n1);
++ SLsmg_write_nwchars (L"~", 1);
++ printw ("%*s", len - width1 - width2 - 1, "");
++ SLsmg_write_nwchars (((wchar_t *) buffer)
++ + txtlen - n2, n2);
++ } else
++ SLsmg_write_nwchars ((wchar_t *) buffer, len);
++ } else {
++ printw ("%*s", still, "");
++ SLsmg_write_nwchars ((wchar_t *) buffer, txtlen);
++ printw ("%*s", len - txtwidth - still, "");
++ }
++#endif
++ } else {
++ if (over) {
++ if (IS_FIT (format->just_mode))
++ strcpy (buffer, name_trunc(txt, len));
++ else
++ memcpy (buffer, txt + still, len);
++ } else {
++ memset (buffer, ' ', still);
++ memcpy (buffer + still, txt, txtlen);
++ memset (buffer + still + txtlen, ' ',
++ len - txtlen - still);
++ }
++ buffer[len] = '\0';
+
++ if (perm)
++ add_permission_string (buffer, format->field_len, fe,
++ attr, color, perm - 1);
++ else
++ addstr (buffer);
++ }
++
++ length += len;
+ } else {
+ if (attr == SELECTED || attr == MARKED_SELECTED)
+ attrset (SELECTED_COLOR);
+@@ -616,7 +722,6 @@
+ {
+ int second_column = 0;
+ int width, offset;
+- char buffer [BUF_MEDIUM];
+
+ offset = 0;
+ if (!isstatus && panel->split){
+@@ -645,7 +750,7 @@
+ widget_move (&panel->widget, file_index - panel->top_file + 2, 1);
+ }
+
+- format_file (buffer, sizeof(buffer), panel, file_index, width, attr, isstatus);
++ format_file (panel, file_index, width, attr, isstatus);
+
+ if (!isstatus && panel->split){
+ if (second_column)
+@@ -694,7 +799,7 @@
+ ngettext("%s in %d file", "%s in %d files", panel->marked),
+ b_bytes, panel->marked);
+
+- if ((int) strlen (buffer) > cols-2){
++ if ((int) mbstrlen (buffer) > cols-2){
+ buffer [cols] = 0;
+ p += 2;
+ } else
+@@ -1107,6 +1212,12 @@
+ int side, width;
+
+ const char *txt;
++#ifdef UTF8
++ char buffer[30 * sizeof (wchar_t)];
++ mbstate_t s;
++
++ memset (&s, 0, sizeof (s));
++#endif
+ if (!panel->split)
+ adjust_top_file (panel);
+
+@@ -1131,16 +1242,38 @@
+ if (format->string_fn){
+ txt = format->title;
+
+- header_len = strlen (txt);
++ attrset (MARKED_COLOR);
++ width -= format->field_len;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ const char *str = txt;
++ header_len = mbsrtowcs ((wchar_t *) buffer, &str,
++ sizeof (buffer) / sizeof (wchar_t),
++ &s);
++ if (header_len < 0) {
++ memset (&s, 0, sizeof (s));
++ printw ("%*s", format->field_len, "");
++ continue;
++ }
++ if (header_len > format->field_len)
++ header_len = format->field_len;
++ spaces = (format->field_len - header_len) / 2;
++ extra = (format->field_len - header_len) % 2;
++ printw ("%*s", spaces, "");
++ SLsmg_write_nwchars ((wchar_t *) buffer, header_len);
++ printw ("%*s", spaces + extra, "");
++ continue;
++ }
++#endif
++
++ header_len = mbstrlen (txt);
+ if (header_len > format->field_len)
+ header_len = format->field_len;
+
+- attrset (MARKED_COLOR);
+ spaces = (format->field_len - header_len) / 2;
+ extra = (format->field_len - header_len) % 2;
+ tty_printf ("%*s%.*s%*s", spaces, "",
+ header_len, txt, spaces+extra, "");
+- width -= 2 * spaces + extra + header_len;
+ } else {
+ attrset (NORMAL_COLOR);
+ one_vline ();
+@@ -1897,11 +2030,24 @@
+ int i;
+ int wrapped = 0;
+ int found;
++ int prevpos, pos;
++ int j;
++ mbstate_t mbs;
+
+ l = strlen (panel->search_buffer);
+ if (c_code == KEY_BACKSPACE) {
+- if (l)
+- panel->search_buffer[--l] = '\0';
++ if (l) {
++ prevpos = pos = 0;
++ memset (&mbs, 0, sizeof (mbs));
++ while (pos < l) {
++ prevpos = pos;
++ j = mbrlen (panel->search_buffer + pos, l - pos, &mbs);
++ if (j <= 0) break;
++ pos += j;
++ }
++ --l;
++ panel->search_buffer[prevpos] = 0;
++ }
+ } else {
+ if (c_code && l < sizeof (panel->search_buffer)) {
+ panel->search_buffer[l] = c_code;
+@@ -1910,6 +2056,14 @@
+ }
+ }
+
++ prevpos = pos = 0;
++ memset (&mbs, 0, sizeof (mbs));
++ while (pos < l) {
++ prevpos = pos;
++ j = mbrlen (panel->search_buffer + pos, l - pos, &mbs);
++ if (j <= 0) break;
++ pos += j;
++ }
+ found = 0;
+ for (i = panel->selected; !wrapped || i != panel->selected; i++) {
+ if (i >= panel->count) {
+@@ -1920,9 +2074,9 @@
+ }
+ if (panel->
+ case_sensitive
+- ? (strncmp (panel->dir.list[i].fname, panel->search_buffer, l)
++ ? (strncmp (panel->dir.list[i].fname, panel->search_buffer, pos)
+ == 0) : (g_strncasecmp (panel->dir.list[i].fname,
+- panel->search_buffer, l) == 0)) {
++ panel->search_buffer, pos) == 0)) {
+ unselect_item (panel);
+ panel->selected = i;
+ select_item (panel);
+@@ -1931,7 +2085,7 @@
+ }
+ }
+ if (!found)
+- panel->search_buffer[--l] = 0;
++ panel->search_buffer[prevpos] = 0;
+
+ paint_panel (panel);
+ }
+--- mc-4.6.2/src/slint.c
++++ mc-4.6.2/src/slint.c
+@@ -142,7 +142,9 @@
+ slang_init (void)
+ {
+ SLtt_get_terminfo ();
+-
++#if SLANG_VERSION >= 20000
++ SLutf8_enable (-1);
++#endif
+ /*
+ * If the terminal in not in terminfo but begins with a well-known
+ * string such as "linux" or "xterm" S-Lang will go on, but the
+--- mc-4.6.2/src/tty.c
++++ mc-4.6.2/src/tty.c
+@@ -134,10 +134,12 @@
+ * defined or not. Congratulations! At least, they left the API call
+ * for SLsmg_write_nchars as it has always been.
+ */
+- char ch;
+-
+- ch = c;
+- SLsmg_write_nchars(&ch, 1);
++
++ /* The above comment is a nonsense, SLsmg_write_char(c) works pretty
++ * good for me. So please don't mess with Red Hat people.
++ * Jindrich Novy (jnovy@redhat.com)
++ */
++ SLsmg_write_char(c);
+ #else
+ addch(c);
+ #endif
+--- mc-4.6.2/src/tty.h
++++ mc-4.6.2/src/tty.h
+@@ -8,6 +8,8 @@
+ of ifdefs in the other files small.
+ */
+
++#include <glib.h> /* gboolean is used here */
++
+ #ifdef HAVE_SLANG
+ # include "myslang.h"
+ #endif
+--- mc-4.6.2/src/util.c
++++ mc-4.6.2/src/util.c
+@@ -34,7 +34,11 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
++#include <iconv.h>
++#include <langinfo.h>
++#include <errno.h>
+
++#include "tty.h"
+ #include <mhl/escape.h>
+ #include <mhl/string.h>
+
+@@ -50,9 +54,39 @@
+ #include "charsets.h"
+ #endif
+
++#ifdef UTF8
++#include <wctype.h>
++#endif
++
+ static const char app_text [] = "Midnight-Commander";
+ int easy_patterns = 1;
+
++#if SLANG_VERSION >= 20000
++void SLsmg_write_nwchars(wchar_t *s, size_t n)
++{
++ if (SLsmg_is_utf8_mode()) { /* slang can handle it directly */
++ while(n-- && *s)
++ SLsmg_write_char(*s++);
++ }
++ else { /* convert wchars back to 8bit encoding */
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ while (n-- && *s) {
++ char buf[MB_LEN_MAX + 1]; /* should use 1 char, but to be sure */
++ if (*s < 0x80) {
++ SLsmg_write_char(*s++); /* ASCII */
++ }
++ else {
++ if (wcrtomb(buf, *s++, &mbs) == 1)
++ SLsmg_write_char((wchar_t)(buf[0]));
++ else
++ SLsmg_write_char('?'); /* should not happen */
++ }
++ }
++ }
++}
++#endif
++
+ extern void str_replace(char *s, char from, char to)
+ {
+ for (; *s != '\0'; s++) {
+@@ -83,9 +117,106 @@
+ return (c > 31 && c != 127 && c != 155);
+ }
+
++size_t
++mbstrlen (const char *str)
++{
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ size_t width = 0;
++
++ for (; *str; str++) {
++ wchar_t c;
++ size_t len;
++
++ len = mbrtowc (&c, str, MB_CUR_MAX, NULL);
++
++ if (len == (size_t)(-1) || len == (size_t)(-2)) break;
++
++ if (len > 0) {
++ int wcsize = wcwidth(c);
++ width += wcsize > 0 ? wcsize : 0;
++ str += len-1;
++ }
++ }
++
++ return width;
++ } else
++#endif
++ return strlen (str);
++}
++
++#ifdef UTF8
++
++void
++fix_utf8(char *str)
++{
++ mbstate_t mbs;
++
++ char *p = str;
++
++ while (*p) {
++ int len;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrlen(p, MB_CUR_MAX, &mbs);
++ if (len == -1) {
++ *p = '?';
++ p++;
++ } else if (len > 0) {
++ p += len;
++ } else {
++ p++;
++ }
++ }
++}
++#endif
++
++
++
++#ifdef UTF8
++wchar_t *
++mbstr_to_wchar (const char *str)
++{
++ int len = mbstrlen(str);
++ wchar_t *buf = g_malloc((len+1) * sizeof(wchar_t));
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ mbsrtowcs (buf, &str, len, &mbs);
++ buf[len] = 0;
++ return buf;
++}
++
++char *
++wchar_to_mbstr (const wchar_t *wstr)
++{
++ mbstate_t mbs;
++ const wchar_t *wstr2;
++ char * string;
++ int len;
++
++ memset (&mbs, 0, sizeof (mbs));
++ wstr2 = wstr;
++ len = wcsrtombs(NULL, &wstr2, 0, &mbs);
++ if (len <= 0)
++ return NULL;
++
++ string = g_malloc(len + 1);
++
++ wstr2 = wstr;
++ wcsrtombs(string, &wstr2, len, &mbs);
++ string[len] = 0;
++ return string;
++}
++#endif
++
++
++
+ int
+ is_printable (int c)
+ {
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ return iswprint (c);
++#endif
+ c &= 0xff;
+
+ #ifdef HAVE_CHARSET
+@@ -103,7 +234,7 @@
+ #endif /* !HAVE_CHARSET */
+ }
+
+-/* Calculates the message dimensions (lines and columns) */
++/* Calculates the message dimension in columns and lines. */
+ void
+ msglen (const char *text, int *lines, int *columns)
+ {
+@@ -116,8 +247,21 @@
+ nlines++;
+ colindex = 0;
+ } else {
++#ifndef UTF8
+ colindex++;
+ if (colindex > ncolumns)
++#else /* UTF8 */
++ size_t len;
++ wchar_t c;
++
++ len = mbrtowc (&c, text, MB_CUR_MAX, NULL);
++ if (len > 0 && len != (size_t)(-1) && len != (size_t)(-2)) {
++ int wcsize = wcwidth(c);
++ colindex += wcsize > 0 ? wcsize-1 : -1;
++ text += len-1;
++ }
++ if (++colindex > ncolumns)
++#endif /* UTF8 */
+ ncolumns = colindex;
+ }
+ }
+@@ -211,7 +355,24 @@
+ *d++ = '\\';
+ break;
+ }
++#ifndef UTF8
+ *d = *s;
++#else /* UTF8 */
++ {
++ mbstate_t mbs;
++ int len;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrlen(s, MB_CUR_MAX, &mbs);
++ if (len > 0) {
++ while (len-- > 1)
++ *d++ = *s++;
++ *d = *s;
++ } else {
++ *d = '?';
++ }
++
++ }
++#endif /* UTF8 */
+ }
+ *d = '\0';
+ return ret;
+@@ -233,25 +394,90 @@
+ name_trunc (const char *txt, int trunc_len)
+ {
+ static char x[MC_MAXPATHLEN + MC_MAXPATHLEN];
+- int txt_len;
++ int txt_len, first, skip;
+ char *p;
++ const char *str;
+
+ if ((size_t) trunc_len > sizeof (x) - 1) {
+ trunc_len = sizeof (x) - 1;
+ }
+- txt_len = strlen (txt);
+- if (txt_len <= trunc_len) {
+- strcpy (x, txt);
+- } else {
+- int y = (trunc_len / 2) + (trunc_len % 2);
+- strncpy (x, txt, y);
+- strncpy (x + y, txt + txt_len - (trunc_len / 2), trunc_len / 2);
+- x[y] = '~';
+- }
+- x[trunc_len] = 0;
+- for (p = x; *p; p++)
+- if (!is_printable (*p))
+- *p = '?';
++ txt_len = mbstrlen (txt);
++ first = 0;
++ skip = 0;
++ if (txt_len > trunc_len) {
++ first = trunc_len / 2;
++ skip = txt_len - trunc_len + 1;
++ }
++
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ mbstate_t s;
++ int mbmax;
++
++ str = txt;
++ memset (&s, 0, sizeof (s));
++ mbmax = MB_CUR_MAX;
++ p = x;
++ while (p < x + sizeof (x) - 1 && trunc_len) {
++ wchar_t wc;
++ int len;
++
++ len = mbrtowc (&wc, str, mbmax, &s);
++ if (!len)
++ break;
++ if (len < 0) {
++ memset (&s, 0, sizeof (s));
++ *p = '?';
++ len = 1;
++ str++;
++ } else if (!is_printable (wc)) {
++ *p = '?';
++ str += len;
++ len = 1;
++ } else if (p >= x + sizeof (x) - len)
++ break;
++ else {
++ memcpy (p, str, len);
++ str += len;
++ }
++ if (first) {
++ --trunc_len;
++ --first;
++ p += len;
++ if (!first && p < x + sizeof (x) - 1 && trunc_len) {
++ *p++ = '~';
++ --trunc_len;
++ }
++ } else if (skip)
++ --skip;
++ else {
++ --trunc_len;
++ p += len;
++ }
++ }
++ } else
++#endif
++ {
++ str = txt;
++ p = x;
++ while (p < x + sizeof (x) - 1) {
++ if (*str == '\0')
++ break;
++ else if (!is_printable (*str))
++ *p++ = '?';
++ else
++ *p++ = *str;
++ ++str;
++ if (first) {
++ --first;
++ if (!first) {
++ *p++ = '~';
++ str += skip;
++ }
++ }
++ }
++ }
++ *p = '\0';
+ return x;
+ }
+
+@@ -683,11 +909,61 @@
+ }
+
+ char *
++utf8_to_local(char *str)
++{
++ iconv_t cd;
++ size_t buflen = strlen(str);
++ char *output;
++ int retry = 1;
++
++ cd = iconv_open (nl_langinfo(CODESET), "UTF-8");
++ if (cd == (iconv_t) -1) {
++ return g_strdup(str);
++ }
++
++ output = g_malloc(buflen + 1);
++
++ while (retry)
++ {
++ char *wrptr = output;
++ char *inptr = str;
++ size_t insize = buflen;
++ size_t avail = buflen;
++ size_t nconv;
++
++ nconv = iconv (cd, &inptr, &insize, &wrptr, &avail);
++ if (nconv == (size_t) -1)
++ {
++ if (errno == E2BIG)
++ {
++ buflen *= 2;
++ g_free(output);
++ output = g_malloc(buflen + 1);
++ }
++ else
++ {
++ g_free(output);
++ return g_strdup(str);
++ }
++ }
++ else {
++ retry = 0;
++ *wrptr = 0;
++ }
++ }
++
++ iconv_close (cd);
++
++ return output;
++}
++
++char *
+ load_mc_home_file (const char *filename, char **allocated_filename)
+ {
+ char *hintfile_base, *hintfile;
+ char *lang;
+ char *data;
++ char *conv_data;
+
+ hintfile_base = mhl_str_dir_plus_file (mc_home, filename);
+ lang = guess_message_value ();
+@@ -720,7 +996,10 @@
+ else
+ g_free (hintfile);
+
+- return data;
++ conv_data = utf8_to_local(data);
++ g_free(data);
++
++ return conv_data;
+ }
+
+ /* Check strftime() results. Some systems (i.e. Solaris) have different
+@@ -736,10 +1015,12 @@
+ // huh, localtime() doesnt seem to work ... falling back to "(invalid)"
+ length = strlen(INVALID_TIME_TEXT);
+ } else {
+- char buf [MAX_I18NTIMELENGTH + 1];
++ char buf [4 * MAX_I18NTIMELENGTH + 1];
+ size_t a, b;
+- a = strftime (buf, sizeof(buf)-1, _("%b %e %H:%M"), lt);
+- b = strftime (buf, sizeof(buf)-1, _("%b %e %Y"), lt);
++ strftime (buf, sizeof(buf)-1, _("%b %e %H:%M"), lt);
++ a = mbstrlen (buf);
++ strftime (buf, sizeof(buf)-1, _("%b %e %Y"), lt);
++ b = mbstrlen (buf);
+ length = max (a, b);
+ }
+
+@@ -753,15 +1034,12 @@
+ const char *
+ file_date (time_t when)
+ {
+- static char timebuf [MAX_I18NTIMELENGTH + 1];
++ static char timebuf [4 * MAX_I18NTIMELENGTH + 1];
+ time_t current_time = time ((time_t) 0);
+- static size_t i18n_timelength = 0;
+ static const char *fmtyear, *fmttime;
+ const char *fmt;
+
+- if (i18n_timelength == 0){
+- i18n_timelength = i18n_checktimelength() + 1;
+-
++ if (fmtyear == NULL) {
+ /* strftime() format string for old dates */
+ fmtyear = _("%b %e %Y");
+ /* strftime() format string for recent dates */
+@@ -781,7 +1059,7 @@
+ else
+ fmt = fmttime;
+
+- FMT_LOCALTIME(timebuf, i18n_timelength, fmt, when);
++ FMT_LOCALTIME(timebuf, sizeof (timebuf) - 1, fmt, when);
+
+ return timebuf;
+ }
+@@ -912,10 +1190,27 @@
+ r++;
+ continue;
+ }
+-
++#ifndef UTF8
+ if (is_printable(*r))
+ *w++ = *r;
+ ++r;
++#else /* UTF8 */
++ {
++ mbstate_t mbs;
++ int len;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrlen(r, MB_CUR_MAX, &mbs);
++
++ if (len > 0 && (unsigned char)*r >= ' ')
++ while (len--)
++ *w++ = *r++;
++ else {
++ if (len == -1)
++ *w++ = '?';
++ r++;
++ }
++ }
++#endif /* UTF8 */
+ }
+ *w = 0;
+ return s;
+--- mc-4.6.2/src/util.h
++++ mc-4.6.2/src/util.h
+@@ -102,6 +102,13 @@
+ char *get_group (int);
+ char *get_owner (int);
+
++void fix_utf8(char *str);
++size_t mbstrlen (const char *);
++wchar_t *mbstr_to_wchar (const char *);
++char *wchar_to_mbstr (const wchar_t *);
++char *utf8_to_local(char *str);
++
++
+ #define MAX_I18NTIMELENGTH 14
+ #define MIN_I18NTIMELENGTH 10
+ #define STD_I18NTIMELENGTH 12
+--- mc-4.6.2/src/view.c
++++ mc-4.6.2/src/view.c
+@@ -44,6 +44,10 @@
+ #include <sys/stat.h>
+ #include <unistd.h>
+
++#ifdef UTF8
++#include <wctype.h>
++#endif /* UTF8 */
++
+ #include "global.h"
+ #include "tty.h"
+ #include "cmd.h" /* For view_other_cmd */
+@@ -1643,7 +1647,7 @@
+ hline (' ', width);
+
+ file_label = _("File: %s");
+- file_label_width = strlen (file_label) - 2;
++ file_label_width = mbstrlen (file_label) - 2;
+ file_name = view->filename ? view->filename
+ : view->command ? view->command
+ : "";
+@@ -1911,6 +1915,12 @@
+ offset_type from;
+ int c;
+ struct hexedit_change_node *curr = view->change_list;
++#ifdef UTF8
++ mbstate_t mbs;
++ char mbbuf[MB_LEN_MAX];
++ int mblen;
++ wchar_t wc;
++#endif /* UTF8 */
+
+ view_display_clean (view);
+ view_display_ruler (view);
+@@ -1923,8 +1933,37 @@
+
+ tty_setcolor (NORMAL_COLOR);
+ for (row = 0, col = 0; row < height && (c = get_byte (view, from)) != -1; from++) {
+-
++#ifndef UTF8
+ if (view->text_nroff_mode && c == '\b') {
++#else /* UTF8 */
++ mblen = 1;
++ mbbuf[0] = convert_to_display_c (c);
++
++ while (mblen < MB_LEN_MAX) {
++ int res;
++ memset (&mbs, 0, sizeof (mbs));
++ res = mbrtowc (&wc, mbbuf, mblen, &mbs);
++ if (res <= 0 && res != -2) {
++ wc = '.';
++ mblen = 1;
++ break;
++ }
++ if (res == mblen)
++ break;
++
++ mbbuf[mblen] = convert_to_display_c (get_byte (view, from + mblen));
++ mblen++;
++ }
++
++ if (mblen == MB_LEN_MAX) {
++ wc = '.';
++ mblen = 1;
++ }
++
++ from += mblen - 1;
++
++ if (view->text_nroff_mode && wc == '\b') {
++#endif /* UTF8 */
+ int c_prev;
+ int c_next;
+
+@@ -1989,10 +2028,17 @@
+ if (col >= view->dpy_text_column
+ && col - view->dpy_text_column < width) {
+ widget_move (view, top + row, left + (col - view->dpy_text_column));
++#ifndef UTF8
+ c = convert_to_display_c (c);
+ if (!is_printable (c))
+ c = '.';
+ tty_print_char (c);
++#else
++ wc = convert_to_display_c (wc);
++ if (!iswprint (wc))
++ wc = '.';
++ tty_print_char (wc);
++#endif
+ }
+ col++;
+ tty_setcolor (NORMAL_COLOR);
+--- mc-4.6.2/src/widget.c
++++ mc-4.6.2/src/widget.c
+@@ -38,6 +38,9 @@
+
+ #include "global.h"
+ #include "tty.h"
++#ifdef UTF8
++#include <wctype.h>
++#endif /* UTF8 */
+ #include "color.h"
+ #include "mouse.h"
+ #include "dialog.h"
+@@ -183,6 +186,11 @@
+ if (b->hotpos >= 0) {
+ widget_selectcolor (w, b->selected, TRUE);
+ widget_move (w, 0, b->hotpos + off);
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ SLsmg_write_nwchars (&b->hotwc, 1);
++ else
++#endif
+ addch ((unsigned char) b->text[b->hotpos]);
+ }
+ return MSG_HANDLED;
+@@ -216,7 +224,7 @@
+ static int
+ button_len (const char *text, unsigned int flags)
+ {
+- int ret = strlen (text);
++ int ret = mbstrlen (text);
+ switch (flags){
+ case DEFPUSH_BUTTON:
+ ret += 6;
+@@ -239,14 +247,36 @@
+ * the button text is g_malloc()ed, we can safely change and shorten it.
+ */
+ static void
+-button_scan_hotkey (WButton *b)
++scan_hotkey (char *text, int *hotposp, int *hotkeyp, wchar_t *hotwcp)
+ {
+- char *cp = strchr (b->text, '&');
++ char *cp = strchr (text, '&');
+
+ if (cp != NULL && cp[1] != '\0') {
+- g_strlcpy (cp, cp + 1, strlen (cp));
+- b->hotkey = tolower ((unsigned char) *cp);
+- b->hotpos = cp - b->text;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ mbstate_t s;
++ int len;
++
++ *cp = '\0';
++ memset (&s, 0, sizeof (s));
++ len = mbrtowc (hotwcp, cp + 1, MB_CUR_MAX, &s);
++ if (len > 0) {
++ *hotposp = mbstrlen (text);
++ if (*hotposp < 0) {
++ *hotposp = -1;
++ } else {
++ /* FIXME */
++ *hotkeyp = tolower (*hotwcp);
++ }
++ }
++ } else
++#endif
++ {
++ *hotkeyp = tolower (cp[1]);
++ *hotposp = cp - text;
++ }
++
++ memmove (cp, cp + 1, strlen (cp + 1) + 1);
+ }
+ }
+
+@@ -267,8 +297,9 @@
+ widget_want_hotkey (b->widget, 1);
+ b->hotkey = 0;
+ b->hotpos = -1;
++ b->hotwc = L'\0';
+
+- button_scan_hotkey(b);
++ scan_hotkey(b->text, &b->hotpos, &b->hotkey, &b->hotwc);
+ return b;
+ }
+
+@@ -281,14 +312,13 @@
+ void
+ button_set_text (WButton *b, const char *text)
+ {
+- g_free (b->text);
++ g_free (b->text);
+ b->text = g_strdup (text);
+ b->widget.cols = button_len (text, b->flags);
+- button_scan_hotkey(b);
++ scan_hotkey(b->text, &b->hotpos, &b->hotkey, &b->hotwc);
+ dlg_redraw (b->widget.parent);
+ }
+
+-
+ /* Radio button widget */
+ static int radio_event (Gpm_Event *event, void *);
+
+@@ -363,14 +393,35 @@
+ widget_move (&r->widget, i, 0);
+
+ tty_printf ("(%c) ", (r->sel == i) ? '*' : ' ');
+- for (cp = r->texts[i]; *cp; cp++) {
+- if (*cp == '&') {
+- widget_selectcolor (w, focused, TRUE);
++ cp = strchr (r->texts[i], '&');
++ if (cp != NULL) {
++#ifdef UTF8
++ mbstate_t s;
++ wchar_t wc;
++ int len;
++#endif
++ tty_printf ("%.*s", (int) ((char *) cp - r->texts[i]),
++ r->texts[i]);
++ widget_selectcolor (w, focused, TRUE);
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ memset (&s, 0, sizeof (s));
++ len = mbrtowc (&wc, cp + 1, MB_CUR_MAX, &s);
++ ++cp;
++ if (len > 0) {
++ tty_printf ("%.*s", len, cp);
++ cp += len;
++ }
++ } else
++#endif
++ {
+ addch (*++cp);
+- widget_selectcolor (w, focused, FALSE);
+- } else
+- addch (*cp);
+- }
++ ++cp;
++ }
++ widget_selectcolor (w, focused, FALSE);
++ } else
++ cp = r->texts[i];
++ addstr ((char *) cp);
+ }
+ return MSG_HANDLED;
+
+@@ -409,7 +460,7 @@
+ /* Compute the longest string */
+ max = 0;
+ for (i = 0; i < count; i++){
+- m = strlen (texts [i]);
++ m = mbstrlen (texts [i]);
+ if (m > max)
+ max = m;
+ }
+@@ -469,6 +520,11 @@
+ if (c->hotpos >= 0) {
+ widget_selectcolor (w, msg == WIDGET_FOCUS, TRUE);
+ widget_move (&c->widget, 0, +c->hotpos + 4);
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ SLsmg_write_nwchars (&c->hotwc, 1);
++ else
++#endif
+ addch ((unsigned char) c->text[c->hotpos]);
+ }
+ return MSG_HANDLED;
+@@ -506,35 +562,20 @@
+ check_new (int y, int x, int state, const char *text)
+ {
+ WCheck *c = g_new (WCheck, 1);
+- const char *s;
+- char *t;
+-
+- init_widget (&c->widget, y, x, 1, strlen (text),
++
++ init_widget (&c->widget, y, x, 1, mbstrlen (text),
+ check_callback, check_event);
+ c->state = state ? C_BOOL : 0;
+ c->text = g_strdup (text);
+ c->hotkey = 0;
+ c->hotpos = -1;
++ c->hotwc = L'\0';
+ widget_want_hotkey (c->widget, 1);
+
+- /* Scan for the hotkey */
+- for (s = text, t = c->text; *s; s++, t++){
+- if (*s != '&'){
+- *t = *s;
+- continue;
+- }
+- s++;
+- if (*s){
+- c->hotkey = tolower ((unsigned char) *s);
+- c->hotpos = t - c->text;
+- }
+- *t = *s;
+- }
+- *t = 0;
++ scan_hotkey (c->text, &c->hotpos, &c->hotkey, &c->hotwc);
+ return c;
+ }
+
+-
+ /* Label widget */
+
+ static cb_ret_t
+@@ -573,7 +614,7 @@
+ }
+ widget_move (&l->widget, y, 0);
+ tty_printf ("%s", p);
+- xlen = l->widget.cols - strlen (p);
++ xlen = l->widget.cols - mbstrlen (p);
+ if (xlen > 0)
+ tty_printf ("%*s", xlen, " ");
+ if (!q)
+@@ -607,7 +648,7 @@
+ if (text){
+ label->text = g_strdup (text);
+ if (label->auto_adjust_cols) {
+- newcols = strlen (text);
++ newcols = mbstrlen (text);
+ if (newcols > label->widget.cols)
+ label->widget.cols = newcols;
+ }
+@@ -631,7 +672,7 @@
+ if (!text || strchr(text, '\n'))
+ width = 1;
+ else
+- width = strlen (text);
++ width = mbstrlen (text);
+
+ l = g_new (WLabel, 1);
+ init_widget (&l->widget, y, x, 1, width, label_callback, NULL);
+@@ -779,13 +820,69 @@
+ /* Pointer to killed data */
+ static char *kill_buffer = 0;
+
++#ifdef UTF8
++static int
++charpos(WInput *in, int idx)
++{
++ int i, pos, l, len;
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ i = 0;
++ pos = 0;
++ len = strlen(in->buffer);
++
++ while (in->buffer[pos]) {
++ if (i == idx)
++ return pos;
++ l = mbrlen(in->buffer + pos, len - pos, &mbs);
++ if (l <= 0)
++ return pos;
++ pos+=l;
++ i++;
++ };
++ return pos;
++}
++
++static int
++charcolumn(WInput *in, int idx)
++{
++ int i, pos, l, width, len;
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ i = 0;
++ pos = 0; width = 0;
++ len = strlen(in->buffer);
++
++ while (in->buffer[pos]) {
++ wchar_t wc;
++ if (i == idx)
++ return width;
++ l = mbrtowc(&wc, in->buffer + pos, len - pos, &mbs);
++ if (l <= 0)
++ return width;
++ pos += l; width += wcwidth(wc);
++ i++;
++ };
++ return width;
++}
++#else
++#define charpos(in, idx) (idx)
++#define charcolumn(in, idx) (idx)
++#endif /* UTF8 */
++
+ void
+ update_input (WInput *in, int clear_first)
+ {
+ int has_history = 0;
+ int i, j;
+- unsigned char c;
+- int buf_len = strlen (in->buffer);
++ int buf_len = mbstrlen (in->buffer);
++#ifndef UTF8
++ unsigned char c;
++#else /* UTF8 */
++ wchar_t c;
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++#endif /* UTF8 */
+
+ if (should_show_history_button (in))
+ has_history = HISTORY_BUTTON_WIDTH;
+@@ -795,7 +892,7 @@
+
+ /* Make the point visible */
+ if ((in->point < in->first_shown) ||
+- (in->point >= in->first_shown+in->field_len - has_history)){
++ (charcolumn(in, in->point) >= charcolumn(in, in->first_shown) + in->field_len - has_history)){
+ in->first_shown = in->point - (in->field_len / 3);
+ if (in->first_shown < 0)
+ in->first_shown = 0;
+@@ -815,14 +912,29 @@
+ addch (' ');
+ widget_move (&in->widget, 0, 0);
+
++#ifndef UTF8
+ for (i = 0, j = in->first_shown; i < in->field_len - has_history && in->buffer [j]; i++){
+ c = in->buffer [j++];
+ c = is_printable (c) ? c : '.';
+- if (in->is_password)
++#else /* UTF8 */
++ for (i = 0, j = in->first_shown; (i < in->field_len - has_history) && (j < buf_len); i++,j++){
++ char * chp = in->buffer + charpos(in,j);
++ size_t res = mbrtowc(&c, chp, strlen(chp), &mbs);
++ c = (res && iswprint (c)) ? 0 : '.';
++#endif /* UTF8 */
++ if (in->is_password)
+ c = '*';
++#ifndef UTF8
+ addch (c);
++#else /* UTF8 */
++ if (c) {
++ addch (c);
++ }
++ else
++ SLsmg_write_nchars (chp, res);
++#endif /* UTF8 */
+ }
+- widget_move (&in->widget, 0, in->point - in->first_shown);
++ widget_move (&in->widget, 0, charcolumn(in, in->point) - charcolumn(in, in->first_shown));
+
+ if (clear_first)
+ in->first = 0;
+@@ -975,7 +1087,7 @@
+ show_hist (GList *history, int widget_x, int widget_y)
+ {
+ GList *hi, *z;
+- size_t maxlen = strlen (i18n_htitle ()), i, count = 0;
++ size_t maxlen = mbstrlen (i18n_htitle ()), i, count = 0;
+ int x, y, w, h;
+ char *q, *r = 0;
+ Dlg_head *query_dlg;
+@@ -988,7 +1100,7 @@
+ z = g_list_first (history);
+ hi = z;
+ while (hi) {
+- if ((i = strlen ((char *) hi->data)) > maxlen)
++ if ((i = mbstrlen ((char *) hi->data)) > maxlen)
+ maxlen = i;
+ count++;
+ hi = g_list_next (hi);
+@@ -1158,35 +1270,83 @@
+ in->need_push = 1;
+ in->buffer [0] = 0;
+ in->point = 0;
++ in->charpoint = 0;
+ in->mark = 0;
+ free_completions (in);
+ update_input (in, 0);
+ }
+
++static void
++move_buffer_backward (WInput *in, int point)
++{
++ int i, pos, len;
++ int str_len = mbstrlen (in->buffer);
++ if (point >= str_len) return;
++
++ pos = charpos(in,point);
++ len = charpos(in,point + 1) - pos;
++
++ for (i = pos; in->buffer [i + len - 1]; i++)
++ in->buffer [i] = in->buffer [i + len];
++}
++
+ static cb_ret_t
+ insert_char (WInput *in, int c_code)
+ {
+ size_t i;
++#ifdef UTF8
++ mbstate_t mbs;
++ int res;
++
++ memset (&mbs, 0, sizeof (mbs));
++#else
++ in->charpoint = 0;
++#endif /* UTF8 */
+
+ if (c_code == -1)
+ return MSG_NOT_HANDLED;
+
++#ifdef UTF8
++ if (in->charpoint >= MB_CUR_MAX) return 1;
++
++ in->charbuf[in->charpoint++] = c_code;
++
++ res = mbrlen((char *)in->charbuf, in->charpoint, &mbs);
++ if (res < 0) {
++ if (res != -2) in->charpoint = 0; /* broken multibyte char, skip */
++ return 1;
++ }
++
++#endif /* UTF8 */
+ in->need_push = 1;
+- if (strlen (in->buffer)+1 == (size_t) in->current_max_len){
++ if (strlen (in->buffer) + 1 + in->charpoint >= (size_t) in->current_max_len){
+ /* Expand the buffer */
+- char *narea = g_realloc (in->buffer, in->current_max_len + in->field_len);
++ char *narea = g_realloc (in->buffer, in->current_max_len + in->field_len + in->charpoint);
+ if (narea){
+ in->buffer = narea;
+- in->current_max_len += in->field_len;
++ in->current_max_len += in->field_len + in->charpoint;
+ }
+ }
++#ifndef UTF8
+ if (strlen (in->buffer)+1 < (size_t) in->current_max_len){
+ size_t l = strlen (&in->buffer [in->point]);
+ for (i = l+1; i > 0; i--)
+ in->buffer [in->point+i] = in->buffer [in->point+i-1];
+ in->buffer [in->point] = c_code;
++#else /* UTF8 */
++ if (strlen (in->buffer) + in->charpoint < in->current_max_len){
++ size_t ins_point = charpos(in,in->point); /* bytes from begin */
++ /* move chars */
++ size_t rest_bytes = strlen (in->buffer + ins_point);
++
++ for (i = rest_bytes + 1; i > 0; i--)
++ in->buffer [ins_point + i + in->charpoint - 1] = in->buffer [ins_point + i - 1];
++
++ memcpy(in->buffer + ins_point, in->charbuf, in->charpoint);
++#endif /* UTF8 */
+ in->point++;
+ }
++ in->charpoint = 0;
+ return MSG_HANDLED;
+ }
+
+@@ -1194,12 +1354,14 @@
+ beginning_of_line (WInput *in)
+ {
+ in->point = 0;
++ in->charpoint = 0;
+ }
+
+ static void
+ end_of_line (WInput *in)
+ {
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
++ in->charpoint = 0;
+ }
+
+ static void
+@@ -1207,18 +1369,21 @@
+ {
+ if (in->point)
+ in->point--;
++ in->charpoint = 0;
+ }
+
+ static void
+ forward_char (WInput *in)
+ {
+- if (in->buffer [in->point])
++ if (in->buffer [charpos(in,in->point)])
+ in->point++;
++ in->charpoint = 0;
+ }
+
+ static void
+ forward_word (WInput * in)
+ {
++#ifndef UTF8
+ char *p = in->buffer + in->point;
+
+ while (*p
+@@ -1228,11 +1393,39 @@
+ while (*p && isalnum ((unsigned char) *p))
+ p++;
+ in->point = p - in->buffer;
++#else /* UTF8 */
++ mbstate_t mbs;
++ int len = mbstrlen (in->buffer);
++ memset (&mbs, 0, sizeof (mbs));
++
++ while (in->point < len) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (res <= 0 || !(iswspace (c) || iswpunct (c)))
++ break;
++ in->point++;
++ }
++
++ memset (&mbs, 0, sizeof (mbs));
++
++ while (in->point < len) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (res <= 0 || !iswalnum (c))
++ break;
++ in->point++;
++ }
++
++ in->charpoint = 0;
++#endif /* UTF8 */
+ }
+
+ static void
+ backward_word (WInput *in)
+ {
++#ifndef UTF8
+ char *p = in->buffer + in->point;
+
+ while (p - 1 > in->buffer - 1 && (isspace ((unsigned char) *(p - 1))
+@@ -1242,6 +1435,32 @@
+ while (p - 1 > in->buffer - 1 && isalnum ((unsigned char) *(p - 1)))
+ p--;
+ in->point = p - in->buffer;
++#else /* UTF8 */
++ mbstate_t mbs;
++
++ memset (&mbs, 0, sizeof (mbs));
++ while (in->point > 0) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (*p && (res <= 0 || !(iswspace (c) || iswpunct (c))))
++ break;
++ in->point--;
++ }
++
++ memset (&mbs, 0, sizeof (mbs));
++
++ while (in->point > 0) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (*p && (res <= 0 || !iswalnum (c)))
++ break;
++ in->point--;
++ }
++
++ in->charpoint = 0;
++#endif /* UTF8 */
+ }
+
+ static void
+@@ -1274,8 +1493,9 @@
+
+ if (!in->point)
+ return;
+- for (i = in->point; in->buffer [i-1]; i++)
+- in->buffer [i-1] = in->buffer [i];
++
++ move_buffer_backward(in, in->point - 1);
++ in->charpoint = 0;
+ in->need_push = 1;
+ in->point--;
+ }
+@@ -1283,10 +1503,8 @@
+ static void
+ delete_char (WInput *in)
+ {
+- int i;
+-
+- for (i = in->point; in->buffer [i]; i++)
+- in->buffer [i] = in->buffer [i+1];
++ move_buffer_backward(in, in->point);
++ in->charpoint = 0;
+ in->need_push = 1;
+ }
+
+@@ -1301,6 +1519,9 @@
+
+ g_free (kill_buffer);
+
++ first=charpos(in,first);
++ last=charpos(in,last);
++
+ kill_buffer = g_strndup(in->buffer+first,last-first);
+ }
+
+@@ -1309,11 +1530,13 @@
+ {
+ int first = min (x_first, x_last);
+ int last = max (x_first, x_last);
+- size_t len = strlen (&in->buffer [last]) + 1;
++ size_t len;
+
+ in->point = first;
+ in->mark = first;
+- memmove (&in->buffer [first], &in->buffer [last], len);
++ len = strlen (&in->buffer [charpos(in,last)]) + 1;
++ memmove (&in->buffer [charpos(in,first)], &in->buffer [charpos(in,last)], len);
++ in->charpoint = 0;
+ in->need_push = 1;
+ }
+
+@@ -1330,6 +1553,8 @@
+ copy_region (in, old_point, new_point);
+ delete_region (in, old_point, new_point);
+ in->need_push = 1;
++ in->charpoint = 0;
++ in->charpoint = 0;
+ }
+
+ static void
+@@ -1373,16 +1598,20 @@
+
+ if (!kill_buffer)
+ return;
++ in->charpoint = 0;
+ for (p = kill_buffer; *p; p++)
+ insert_char (in, *p);
++ in->charpoint = 0;
+ }
+
+ static void
+ kill_line (WInput *in)
+ {
++ int chp = charpos(in,in->point);
+ g_free (kill_buffer);
+- kill_buffer = g_strdup (&in->buffer [in->point]);
+- in->buffer [in->point] = 0;
++ kill_buffer = g_strdup (&in->buffer [chp]);
++ in->buffer [chp] = 0;
++ in->charpoint = 0;
+ }
+
+ void
+@@ -1392,9 +1621,10 @@
+ g_free (in->buffer);
+ in->buffer = g_strdup (text); /* was in->buffer->text */
+ in->current_max_len = strlen (in->buffer) + 1;
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
+ in->mark = 0;
+ in->need_push = 1;
++ in->charpoint = 0;
+ }
+
+ static void
+@@ -1521,6 +1751,7 @@
+ *in->buffer = 0;
+ in->point = 0;
+ in->first = 0;
++ in->charpoint = 0;
+ }
+
+ cb_ret_t
+@@ -1549,7 +1780,11 @@
+ }
+ }
+ if (!input_map [i].fn){
++#ifndef UTF8
+ if (c_code > 255 || !is_printable (c_code))
++#else /* UTF8 */
++ if (c_code > 255)
++#endif /* UTF8 */
+ return MSG_NOT_HANDLED;
+ if (in->first){
+ port_region_marked_for_delete (in);
+@@ -1582,6 +1817,9 @@
+ if (pos != in->point)
+ free_completions (in);
+ in->point = pos;
++#ifdef UTF8
++ in->charpoint = 0;
++#endif /* UTF8 */
+ update_input (in, 1);
+ }
+
+@@ -1622,7 +1860,7 @@
+ return MSG_HANDLED;
+
+ case WIDGET_CURSOR:
+- widget_move (&in->widget, 0, in->point - in->first_shown);
++ widget_move (&in->widget, 0, charcolumn(in, in->point) - charcolumn(in, in->first_shown));
+ return MSG_HANDLED;
+
+ case WIDGET_DESTROY:
+@@ -1646,7 +1884,7 @@
+ && should_show_history_button (in)) {
+ do_show_hist (in);
+ } else {
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
+ if (event->x - in->first_shown - 1 < in->point)
+ in->point = event->x - in->first_shown - 1;
+ if (in->point < 0)
+@@ -1701,7 +1939,8 @@
+ in->is_password = 0;
+
+ strcpy (in->buffer, def_text);
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
++ in->charpoint = 0;
+ return in;
+ }
+
+--- mc-4.6.2/src/widget.h
++++ mc-4.6.2/src/widget.h
+@@ -39,6 +39,7 @@
+ char *text; /* text of button */
+ int hotkey; /* hot KEY */
+ int hotpos; /* offset hot KEY char in text */
++ wchar_t hotwc;
+ bcback callback; /* Callback function */
+ } WButton;
+
+@@ -59,6 +60,7 @@
+ char *text; /* text of check button */
+ int hotkey; /* hot KEY */
+ int hotpos; /* offset hot KEY char in text */
++ wchar_t hotwc;
+ } WCheck;
+
+ typedef struct WGauge {
+@@ -74,16 +76,20 @@
+
+ typedef struct {
+ Widget widget;
+- int point; /* cursor position in the input line */
+- int mark; /* The mark position */
+- int first_shown; /* Index of the first shown character */
+- int current_max_len; /* Maximum length of input line */
+- int field_len; /* Length of the editing field */
++ int point; /* cursor position in the input line (mb chars) */
++ int mark; /* The mark position (mb chars) */
++ int first_shown; /* Index of the first shown character (mb chars) */
++ int current_max_len; /* Maximum length of input line (bytes) */
++ int field_len; /* Length of the editing field (mb chars) */
+ int color; /* color used */
+ int first; /* Is first keystroke? */
+ int disable_update; /* Do we want to skip updates? */
+ int is_password; /* Is this a password input line? */
+ char *buffer; /* pointer to editing buffer */
++#ifdef UTF8
++ char charbuf[MB_LEN_MAX];
++#endif /* UTF8 */
++ int charpoint;
+ GList *history; /* The history */
+ int need_push; /* need to push the current Input on hist? */
+ char **completions; /* Possible completions array */
+--- mc-4.6.2/src/wtools.c
++++ mc-4.6.2/src/wtools.c
+@@ -49,11 +49,11 @@
+ /* Adjust sizes */
+ lines = (lines > LINES - 6) ? LINES - 6 : lines;
+
+- if (title && (cols < (len = strlen (title) + 2)))
++ if (title && (cols < (len = mbstrlen (title) + 2)))
+ cols = len;
+
+ /* no &, but 4 spaces around button for brackets and such */
+- if (cols < (len = strlen (cancel_string) + 3))
++ if (cols < (len = mbstrlen (cancel_string) + 3))
+ cols = len;
+
+ cols = cols > COLS - 6 ? COLS - 6 : cols;
+@@ -124,7 +124,7 @@
+ va_start (ap, count);
+ for (i = 0; i < count; i++) {
+ char *cp = va_arg (ap, char *);
+- win_len += strlen (cp) + 6;
++ win_len += mbstrlen (cp) + 6;
+ if (strchr (cp, '&') != NULL)
+ win_len--;
+ }
+@@ -133,7 +133,7 @@
+
+ /* count coordinates */
+ msglen (text, &lines, &cols);
+- cols = 6 + max (win_len, max ((int) strlen (header), cols));
++ cols = 6 + max (win_len, max ((int) mbstrlen (header), cols));
+ lines += 4 + (count > 0 ? 2 : 0);
+ xpos = COLS / 2 - cols / 2;
+ ypos = LINES / 3 - (lines - 3) / 2;
+@@ -148,7 +148,7 @@
+ va_start (ap, count);
+ for (i = 0; i < count; i++) {
+ cur_name = va_arg (ap, char *);
+- xpos = strlen (cur_name) + 6;
++ xpos = mbstrlen (cur_name) + 6;
+ if (strchr (cur_name, '&') != NULL)
+ xpos--;
+
+@@ -467,7 +467,7 @@
+ }
+
+ msglen (text, &lines, &cols);
+- len = max ((int) strlen (header), cols) + 4;
++ len = max ((int) mbstrlen (header), cols) + 4;
+ len = max (len, 64);
+
+ /* The special value of def_text is used to identify password boxes
+@@ -489,7 +489,7 @@
+ quick_widgets[1].text = _(quick_widgets[1].text);
+ quick_widgets[0].relative_x = len / 2 + 4;
+ quick_widgets[1].relative_x =
+- len / 2 - (strlen (quick_widgets[1].text) + 9);
++ len / 2 - (mbstrlen (quick_widgets[1].text) + 9);
+ quick_widgets[0].x_divisions = quick_widgets[1].x_divisions = len;
+ #endif /* ENABLE_NLS */
+
diff --git a/packages/mc/mc-4.6.2/mhl-stdbool.patch b/packages/mc/mc-4.6.2/mhl-stdbool.patch
new file mode 100644
index 0000000000..43ada3508f
--- /dev/null
+++ b/packages/mc/mc-4.6.2/mhl-stdbool.patch
@@ -0,0 +1,16 @@
+Index: mc-4.6.2/mhl/types.h
+===================================================================
+--- mc-4.6.2.orig/mhl/types.h 2009-02-01 19:30:21.000000000 +0000
++++ mc-4.6.2/mhl/types.h 2009-02-22 16:45:06.000000000 +0000
+@@ -7,10 +7,6 @@
+ #ifndef __MHL_TYPES_H
+ #define __MHL_TYPES_H
+
+-typedef enum
+-{
+- false = 0,
+- true = 1
+-} bool;
++#include <stdbool.h>
+
+ #endif
diff --git a/packages/mc/mc-4.6.2/multi-press-f-keys.patch b/packages/mc/mc-4.6.2/multi-press-f-keys.patch
new file mode 100644
index 0000000000..571402552b
--- /dev/null
+++ b/packages/mc/mc-4.6.2/multi-press-f-keys.patch
@@ -0,0 +1,55 @@
+http://www.midnight-commander.org/ticket/287
+Index: mc-4.6.2/src/key.c
+===================================================================
+--- mc-4.6.2.orig/src/key.c 2009-02-01 19:30:21.000000000 +0000
++++ mc-4.6.2/src/key.c 2009-02-25 20:16:46.000000000 +0000
+@@ -694,6 +694,8 @@
+ /* F0 is the same as F10 for out purposes */
+ if (c == KEY_F (0))
+ c = KEY_F (10);
++ if (c == KEY_F_IMMUTABLE (0))
++ c = KEY_F_IMMUTABLE (10);
+
+ /*
+ * We are not interested if Ctrl was pressed when entering control
+@@ -765,6 +767,16 @@
+ mod &= ~KEY_M_SHIFT;
+ }
+
++ /*
++ * Numerals may require modifilers with some keymaps or on obscure
++ * keyboards (e. g. F4 = Esc Shift+4). We have to ignore all
++ * modifiers while interpreting Esc + Numeral.
++ */
++ if (c >= KEY_F_IMMUTABLE (1) && c <= KEY_F_IMMUTABLE (10)) {
++ c += KEY_F (0) - KEY_F_IMMUTABLE (0);
++ mod &= ~KEY_M_MASK;
++ }
++
+ if (!alternate_plus_minus)
+ switch (c) {
+ case KEY_KP_ADD:
+@@ -917,10 +929,9 @@
+ this = this->next;
+ else {
+ if (parent != NULL && parent->action == MCKEY_ESCAPE) {
+-
+ /* Convert escape-digits to F-keys */
+ if (isdigit(c))
+- c = KEY_F (c - '0');
++ c = KEY_F_IMMUTABLE (c - '0');
+ else if (c == ' ')
+ c = ESC_CHAR;
+ else
+Index: mc-4.6.2/src/myslang.h
+===================================================================
+--- mc-4.6.2.orig/src/myslang.h 2009-02-25 18:25:29.000000000 +0000
++++ mc-4.6.2/src/myslang.h 2009-02-25 18:25:31.000000000 +0000
+@@ -29,6 +29,7 @@
+ };
+
+ #define KEY_F(x) (1000+x)
++#define KEY_F_IMMUTABLE(x) (970+x)
+
+ #define ACS_VLINE SLSMG_VLINE_CHAR
+ #define ACS_HLINE SLSMG_HLINE_CHAR
diff --git a/packages/mc/mc.inc b/packages/mc/mc.inc
index 039fea6a61..3c622ec736 100644
--- a/packages/mc/mc.inc
+++ b/packages/mc/mc.inc
@@ -4,18 +4,18 @@ HOMEPAGE = "http://www.ibiblio.org/mc/"
LICENSE = "GPLv2"
SECTION = "console/utils"
PRIORITY = "optional"
-DEPENDS = "ncurses glib-2.0"
+DEPENDS = "ncurses glib-2.0 glib-2.0-native"
RDEPENDS = "ncurses-terminfo"
SRC_URI = "http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/mc-${PV}.tar.gz"
inherit autotools
-EXTRA_OECONF = "--disable-glibtest --without-x --without-samba \
+EXTRA_OECONF = "--libexecdir=${libdir} --disable-glibtest --without-x --without-samba \
--without-nfs --without-gpm-mouse --with-screen=ncurses"
PACKAGES += "${PN}-extfs ${PN}-hilite"
-FILES_${PN} = "${bindir}/ ${libdir}/ ${datadir}/mc/*.*"
+FILES_${PN} = "${bindir}/ ${libdir}/ ${datadir}/mc/*.charsets ${datadir}/mc/*.ext ${datadir}/mc/*.hint ${datadir}/mc/*.hlp ${datadir}/mc/*.lib ${datadir}/mc/*.menu ${datadir}/mc/*.rc ${datadir}/mc/bin /etc/profile.d"
FILES_${PN}-extfs = "${datadir}/mc/extfs/"
FILES_${PN}-hilite = "${datadir}/mc/syntax/"
RRECOMMENDS_${PN} += "${PN}-extfs ${PN}-hilite"
@@ -24,29 +24,24 @@ RDEPENDS_${PN}-hilite = "${PN}"
PACKAGE_ARCH_${PN}-extfs = "all"
PACKAGE_ARCH_${PN}-hilite = "all"
-
-do_configure() {
- gnu-configize
- oe_runconf
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+export LD_FOR_BUILD = "${BUILD_CC}"
+do_compile_prepend() {
+ export GLIB_CFLAGS_FOR_BUILD="`${STAGING_BINDIR_NATIVE}/pkg-config --cflags glib-2.0`"
+ export GLIB_LIBS_FOR_BUILD="`${STAGING_BINDIR_NATIVE}/pkg-config --libs glib-2.0`"
}
-do_install() {
- cd src
- oe_runmake 'DESTDIR=${D}' install
- cd ../syntax
- oe_runmake 'DESTDIR=${D}' install
- cd ../po
- oe_runmake 'DESTDIR=${D}' install
- cd ../vfs
- oe_runmake 'DESTDIR=${D}' install
- cd ..
+do_install_append() {
+ if test -f ${D}${datadir}/mc/bin/mc.sh ; then
+ mkdir -p ${D}/etc/profile.d
+ mv ${D}${datadir}/mc/bin/mc.*sh ${D}/etc/profile.d
+ fi
+}
- install -m 0644 lib/cedit.menu ${D}${datadir}/mc/
- install -m 0644 lib/edit.indent.rc ${D}${datadir}/mc/
- install -m 0644 lib/edit.spell.rc ${D}${datadir}/mc/
- install -m 0644 lib/mc.charsets ${D}${datadir}/mc/
- install -m 0644 lib/mc.ext ${D}${datadir}/mc/
- install -m 0644 lib/mc.lib ${D}${datadir}/mc/
- install -m 0644 lib/mc.menu ${D}${datadir}/mc/
- install -m 0644 lib/mc.menu.sr ${D}${datadir}/mc/
+python populate_packages_prepend () {
+ mcdir = bb.data.expand('${datadir}/mc', d)
+ do_split_packages(d, mcdir, '^mc\.[hm][ile][npn].*\.(.*)$',
+ output_pattern='mc-locale-%s',
+ description='%s translation for mc')
}
diff --git a/packages/mc/mc_4.6.2.bb b/packages/mc/mc_4.6.2.bb
new file mode 100644
index 0000000000..9310857b66
--- /dev/null
+++ b/packages/mc/mc_4.6.2.bb
@@ -0,0 +1,76 @@
+require mc.inc
+PR = "r2"
+HOMEPAGE = "http://www.midnight-commander.org/"
+
+# most of these fixes were copied from openSUSE Factory.
+SRC_URI = "http://www.midnight-commander.org/downloads/${P}.tar.gz \
+ file://mhl-stdbool.patch;patch=1 \
+ file://mc-utf8.patch;patch=1 \
+ file://00-70-utf8-common.patch;patch=1 \
+ file://00-73-utf8-bottom-buttons-width.patch;patch=1 \
+ file://00-75-utf8-cmdline-help.patch;patch=1 \
+ file://00-76-utf8-hotlist-highlight.patch;patch=1 \
+ file://00-77-utf8-filename-search-highlight.patch;patch=1 \
+ file://mc-utf8-nlink.patch;patch=1 \
+ file://mc-utf8-look-and-feel.patch;patch=1 \
+ file://mc-utf8-slang-codeset.patch;patch=1 \
+ file://99_regexp-replace-fixed.patch;patch=1 \
+ file://99b_fix-regex-pattern-lengths.patch;patch=1 \
+ file://multi-press-f-keys.patch;patch=1 \
+ file://cross-compile.patch;patch=1 \
+ file://01_ftpfs_symlink.patch;patch=1 \
+ file://02_ignore_ftp_chmod_error.patch;patch=1 \
+ file://mc-cursor-appearance.patch;patch=1 \
+ file://mc-esc-seq.patch;patch=1"
+
+EXTRA_OECONF = "--libexecdir=${libdir} --without-x --without-samba \
+--without-nfs --without-gpm-mouse --enable-charset"
+
+do_unpack_append() {
+ bb.build.exec_func('do_utf8_conversion', d)
+}
+do_utf8_conversion() {
+ pwd
+ pushd lib
+ iconv -f iso8859-1 -t utf-8 -o mc.hint.tmp mc.hint && mv mc.hint.tmp mc.hint
+ iconv -f iso8859-1 -t utf-8 -o mc.hint.es.tmp mc.hint.es && mv mc.hint.es.tmp mc.hint.es
+ iconv -f iso8859-1 -t utf-8 -o mc.hint.it.tmp mc.hint.it && mv mc.hint.it.tmp mc.hint.it
+ iconv -f iso8859-1 -t utf-8 -o mc.hint.nl.tmp mc.hint.nl && mv mc.hint.nl.tmp mc.hint.nl
+ iconv -f iso8859-2 -t utf-8 -o mc.hint.cs.tmp mc.hint.cs && mv mc.hint.cs.tmp mc.hint.cs
+ iconv -f iso8859-2 -t utf-8 -o mc.hint.hu.tmp mc.hint.hu && mv mc.hint.hu.tmp mc.hint.hu
+ iconv -f iso8859-2 -t utf-8 -o mc.hint.pl.tmp mc.hint.pl && mv mc.hint.pl.tmp mc.hint.pl
+ iconv -f iso8859-5 -t utf-8 -o mc.hint.sr.tmp mc.hint.sr && mv mc.hint.sr.tmp mc.hint.sr
+ iconv -f koi8-r -t utf8 -o mc.hint.ru.tmp mc.hint.ru && mv mc.hint.ru.tmp mc.hint.ru
+ iconv -f koi8-u -t utf8 -o mc.hint.uk.tmp mc.hint.uk && mv mc.hint.uk.tmp mc.hint.uk
+ iconv -f big5 -t utf8 -o mc.hint.zh.tmp mc.hint.zh && mv mc.hint.zh.tmp mc.hint.zh
+ iconv -f iso8859-5 -t utf-8 -o mc.menu.sr.tmp mc.menu.sr && mv mc.menu.sr.tmp mc.menu.sr
+ popd
+ # convert docs to utf-8
+ pushd doc
+ pushd es
+ iconv -f iso8859-1 -t utf-8 -o mc.1.in.tmp mc.1.in && mv mc.1.in.tmp mc.1.in
+ iconv -f iso8859-1 -t utf-8 -o xnc.hlp.tmp xnc.hlp && mv xnc.hlp.tmp xnc.hlp
+ popd
+ pushd hu
+ iconv -f iso8859-2 -t utf-8 -o mc.1.in.tmp mc.1.in && mv mc.1.in.tmp mc.1.in
+ iconv -f iso8859-2 -t utf-8 -o xnc.hlp.tmp xnc.hlp && mv xnc.hlp.tmp xnc.hlp
+ popd
+ pushd it
+ iconv -f iso8859-1 -t utf-8 -o mc.1.in.tmp mc.1.in && mv mc.1.in.tmp mc.1.in
+ iconv -f iso8859-1 -t utf-8 -o xnc.hlp.tmp xnc.hlp && mv xnc.hlp.tmp xnc.hlp
+ popd
+ pushd pl
+ iconv -f iso8859-2 -t utf-8 -o mc.1.in.tmp mc.1.in && mv mc.1.in.tmp mc.1.in
+ iconv -f iso8859-2 -t utf-8 -o xnc.hlp.tmp xnc.hlp && mv xnc.hlp.tmp xnc.hlp
+ popd
+ pushd ru
+ iconv -f koi8-r -t utf-8 -o mc.1.in.tmp mc.1.in && mv mc.1.in.tmp mc.1.in
+ iconv -f koi8-r -t utf-8 -o xnc.hlp.tmp xnc.hlp && mv xnc.hlp.tmp xnc.hlp
+ popd
+ pushd sr
+ iconv -f iso8859-5 -t utf-8 -o mc.1.in.tmp mc.1.in && mv mc.1.in.tmp mc.1.in
+ iconv -f iso8859-5 -t utf-8 -o xnc.hlp.tmp xnc.hlp && mv xnc.hlp.tmp xnc.hlp
+ iconv -f iso8859-5 -t utf-8 -o mcserv.8.in.tmp mcserv.8.in && mv mcserv.8.in.tmp mcserv.8.in
+ popd
+ popd
+}
diff --git a/packages/meta/meta-toolchain-slugos.bb b/packages/meta/meta-toolchain-slugos.bb
index 60326c0bc1..21d9a84442 100644
--- a/packages/meta/meta-toolchain-slugos.bb
+++ b/packages/meta/meta-toolchain-slugos.bb
@@ -1,10 +1,7 @@
-PR = "r0"
+PR = "r1"
-TOOLCHAIN_HOST_TASK = "task-slugos-toolchain-host"
-
-# TBD: need to determine minimal library set to provide;
-# uncomment next line and bump PR when this is done.
-#TOOLCHAIN_TARGET_TASK = "task-slugos-toolchain-target"
+TOOLCHAIN_HOST_TASK = "task-slugos-toolchain-host"
+TOOLCHAIN_TARGET_TASK = "task-slugos-toolchain-target"
require meta-toolchain.bb
SDK_SUFFIX = "toolchain-slugos" \ No newline at end of file
diff --git a/packages/meta/run-postinsts/run-postinsts b/packages/meta/run-postinsts/run-postinsts
new file mode 100755
index 0000000000..f632d1c7d3
--- /dev/null
+++ b/packages/meta/run-postinsts/run-postinsts
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# Copyright 2007 Openedhand Ltd.
+#
+# Author: Richard Purdie <rpurdie@openedhand.com>
+#
+
+PKGSYSTEM=/var/dpkg
+
+if [ ! -e $PKGSYSTEM/status ]; then
+ if [ -e /usr/lib/opkg/status ]; then
+ PKGSYSTEM=/usr/lib/opkg
+ else
+ echo "No package system found"
+ exit 1
+ fi
+fi
+
+STAMP=$PKGSYSTEM/postinsts-done
+STATFILE=$PKGSYSTEM/status
+STATFILE2=$PKGSYSTEM/status2
+
+if [ -e $STAMP ]; then
+ exit 0
+fi
+
+awk -f /usr/share/run-postinsts/run-postinsts.awk $STATFILE > $STATFILE2
+if [ $? = 0 ]; then
+ mv $STATFILE2 $STATFILE
+ touch $STAMP
+ exit 0
+else
+ rm -f $STATFILE2
+ rm -f $STAMP
+ exit 1
+fi
diff --git a/packages/meta/run-postinsts/run-postinsts.awk b/packages/meta/run-postinsts/run-postinsts.awk
new file mode 100644
index 0000000000..09a1400cf4
--- /dev/null
+++ b/packages/meta/run-postinsts/run-postinsts.awk
@@ -0,0 +1,30 @@
+#
+# Copyright 2007 Openedhand Ltd.
+#
+# Author: Richard Purdie <rpurdie@openedhand.com>
+#
+# Rather hacky proof of concept
+#
+
+BEGIN {
+ rc=system("test -d /usr/dpkg/info/")
+ if (rc==0)
+ pkgdir="/var/dpkg/info"
+ else
+ pkgdir="/usr/lib/opkg/info"
+ package=""
+}
+/Package:.*/ {
+ package = substr($0, 10)
+}
+/Status:.*unpacked.*/ {
+ print "Configuring: " package > "/dev/stderr"
+ ret = system(pkgdir "/" package ".postinst 1>&2")
+ if (ret == 0)
+ $0 = gensub("unpacked", "installed", 1)
+ else
+ print "Postinstall failed for " package > "/dev/stderr"
+}
+{
+ print $0
+}
diff --git a/packages/meta/run-postinsts_1.0.bb b/packages/meta/run-postinsts_1.0.bb
new file mode 100644
index 0000000000..79333dc7fe
--- /dev/null
+++ b/packages/meta/run-postinsts_1.0.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "Run postinstall scripts on device using awk"
+SECTION = "devel"
+PR = "r6"
+
+SRC_URI = "file://run-postinsts file://run-postinsts.awk"
+
+INITSCRIPT_NAME = "run-postinsts"
+INITSCRIPT_PARAMS = "start 98 S ."
+
+inherit update-rc.d
+
+do_configure() {
+ :
+}
+
+do_compile () {
+ :
+}
+
+do_install() {
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/run-postinsts ${D}${sysconfdir}/init.d/
+
+ install -d ${D}${datadir}/${PN}/
+ install -m 0644 ${WORKDIR}/run-postinsts.awk ${D}${datadir}/${PN}/
+}
+
+do_stage () {
+ :
+}
diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb
index acc9bd3597..1428fdcd7b 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 = "r60"
+PR = "r63"
CONFLICTS = "db3"
COMPATIBLE_MACHINE = "nslu2|ixp4xx"
@@ -49,6 +49,7 @@ SLUGOS_PACKAGES = "\
bison \
bluez-utils \
bluez-hcidump \
+ bluez4 \
bogofilter \
bonnie++ \
boost \
@@ -163,6 +164,7 @@ SLUGOS_PACKAGES = "\
ncftp \
ncurses \
net-tools \
+ netatalk \
netcat \
netpbm \
nfs-utils \
@@ -207,6 +209,7 @@ SLUGOS_PACKAGES = "\
spandsp \
sqlite \
squid \
+ sshfs-fuse \
ssmtp \
strace \
streamripper \
@@ -259,7 +262,6 @@ SLUGOS_BROKEN_PACKAGES = "\
lirc-modules lirc \
madfu \
motion \
- netatalk \
openldap \
postfix \
pvrusb2-mci \
diff --git a/packages/mingw/mingw-runtime-headers_3.15.2.bb b/packages/mingw/mingw-runtime-headers_3.15.2.bb
new file mode 100644
index 0000000000..8c77b6a594
--- /dev/null
+++ b/packages/mingw/mingw-runtime-headers_3.15.2.bb
@@ -0,0 +1,3 @@
+require mingw-runtime_${PV}.bb
+
+require mingw-runtime-headers.inc
diff --git a/packages/mingw/mingw-runtime_3.15.2.bb b/packages/mingw/mingw-runtime_3.15.2.bb
new file mode 100644
index 0000000000..c691d0749d
--- /dev/null
+++ b/packages/mingw/mingw-runtime_3.15.2.bb
@@ -0,0 +1,7 @@
+require mingw-runtime.inc
+
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mingw/mingwrt-${PV}-mingw32-src.tar.gz"
+
+S = "${WORKDIR}/mingwrt-${PV}-mingw32"
diff --git a/packages/mini-httpd/.mini-httpd_1.19.bb.swp b/packages/mini-httpd/.mini-httpd_1.19.bb.swp
new file mode 100644
index 0000000000..d384577124
--- /dev/null
+++ b/packages/mini-httpd/.mini-httpd_1.19.bb.swp
Binary files differ
diff --git a/packages/mini-httpd/files/init b/packages/mini-httpd/files/init
new file mode 100644
index 0000000000..5e9b176eb9
--- /dev/null
+++ b/packages/mini-httpd/files/init
@@ -0,0 +1,70 @@
+#! /bin/sh
+
+# Globals
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/mini_httpd
+NAME=mini-httpd
+DESC="web server"
+# Additional options that are passed to the Daemon.
+DAEMON_OPTS="-C /etc/mini-httpd.conf"
+
+test -x $DAEMON || exit 0
+
+# Include mini-httpd defaults if available
+if [ -f /etc/default/mini-httpd ]
+then
+ . /etc/default/mini-httpd
+fi
+
+set -e
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
+ --exec $DAEMON -- $DAEMON_OPTS
+ echo "$NAME."
+ ;;
+
+ stop)
+ echo -n "Stopping $DESC: "
+ # Get pid number
+ if [ -e /var/run/$NAME.pid ]
+ then
+ PID=`cat /var/run/$NAME.pid`
+ if [ -d /proc/$PID ]
+ then
+ start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid
+ else
+ # we need to remove the pidfile manually
+ if [ -e /var/run/$NAME.pid ]
+ then
+ rm -f /var/run/$NAME.pid
+ fi
+ fi
+ fi
+ echo "$NAME."
+ ;;
+
+ restart|force-reload)
+ echo -n "Restarting $DESC: "
+ if [ "$START" = "0" ]
+ then
+ start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
+ --exec $DAEMON -- $DAEMON_OPTS
+ fi
+ sleep 1
+ start-stop-daemon --start --quiet --pidfile \
+ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
+ echo "$NAME."
+ ;;
+
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/packages/mini-httpd/files/mini-httpd.conf b/packages/mini-httpd/files/mini-httpd.conf
new file mode 100644
index 0000000000..cb4150c3d9
--- /dev/null
+++ b/packages/mini-httpd/files/mini-httpd.conf
@@ -0,0 +1,37 @@
+# Example config for mini_httpd.
+# Author: Marvin Stark <marv@der-marv.de>
+
+# Uncomment this line for turning on ssl support.
+#ssl
+
+# On which host mini_httpd should bind?
+host=0.0.0.0
+
+# On which port mini_httpd should listen?
+port=80
+
+# Which user mini_httpd should use?
+user=nobody
+
+# Run in chroot mode?
+#chroot # yes
+nochroot # no
+
+# Working directory of mini_httpd.
+#dir=<work_dir>
+
+# We are the web files stored?
+data_dir=/etc/mini-httpd
+
+# Which certificate to use?
+#certfile=<certfile>
+
+# Which logfile to use?
+logfile=/var/log/mini-httpd.log
+
+# Which pidfile to use?
+pidfile=/var/run/mini-httpd.pid
+
+# Which charset to use?
+charset=iso-8859-1
+
diff --git a/packages/mini-httpd/files/new-bindir-mandir.patch b/packages/mini-httpd/files/new-bindir-mandir.patch
new file mode 100644
index 0000000000..7d48cd1685
--- /dev/null
+++ b/packages/mini-httpd/files/new-bindir-mandir.patch
@@ -0,0 +1,15 @@
+diff -NurpP --minimal mini_httpd-1.19/Makefile mini_httpd-1.19-new/Makefile
+--- mini_httpd-1.19/Makefile 2002-11-02 07:02:57.000000000 +0800
++++ mini_httpd-1.19-new/Makefile 2008-10-06 15:43:52.000000000 +0800
+@@ -20,8 +20,8 @@ CRYPT_LIB = -lcrypt
+ #SSL_LIBS = -L${SSL_TREE}/lib -lssl -lcrypto
+
+
+-BINDIR = /usr/local/sbin
+-MANDIR = /usr/local/man
++BINDIR = /usr/sbin
++MANDIR = /usr/share/man
+ CC = gcc
+ CDEFS = ${SSL_DEFS} ${SSL_INC}
+ CFLAGS = -O ${CDEFS}
+
diff --git a/packages/mini-httpd/files/remove-CC.patch b/packages/mini-httpd/files/remove-CC.patch
new file mode 100644
index 0000000000..0fddcd7cb6
--- /dev/null
+++ b/packages/mini-httpd/files/remove-CC.patch
@@ -0,0 +1,13 @@
+diff -NurpP --minimal mini_httpd-1.19/Makefile mini_httpd-1.19-new/Makefile
+--- mini_httpd-1.19/Makefile 2008-10-06 15:45:44.000000000 +0800
++++ mini_httpd-1.19-new/Makefile 2008-10-06 15:46:11.000000000 +0800
+@@ -22,7 +22,7 @@ CRYPT_LIB = -lcrypt
+
+ BINDIR = /usr/sbin
+ MANDIR = /usr/share/man
+-CC = gcc
++#CC = gcc
+ CDEFS = ${SSL_DEFS} ${SSL_INC}
+ CFLAGS = -O ${CDEFS}
+ #CFLAGS = -g ${CDEFS}
+
diff --git a/packages/mini-httpd/mini-httpd_1.19.bb b/packages/mini-httpd/mini-httpd_1.19.bb
new file mode 100644
index 0000000000..6ca44e79ee
--- /dev/null
+++ b/packages/mini-httpd/mini-httpd_1.19.bb
@@ -0,0 +1,36 @@
+# Copyright (C) 2009 Khem Raj <raj.khem@gmail.org>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "mini_httpd is a small HTTP server. \
+ It implements all the basic features of an HTTP server \
+ It can also be configured to do SSL/HTTPS and IPv6. \
+ "
+HOMEPAGE = "http://www.acme.com/software/mini_httpd/"
+LICENSE = "BSD"
+SECTION = "net"
+DEPENDS = "openssl"
+PR = "r0"
+
+SRC_URI="http://www.acme.com/software/mini_httpd/mini_httpd-${PV}.tar.gz \
+ file://new-bindir-mandir.patch;patch=1 \
+ file://remove-CC.patch;patch=1 \
+ file://mini-httpd.conf \
+ file://init \
+ "
+
+INITSCRIPT_NAME = "mini_httpd"
+INITSCRIPT_PARAMS = "defaults"
+
+S = "${WORKDIR}/mini_httpd-${PV}"
+
+
+inherit autotools update-rc.d
+
+do_install () {
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/mini-httpd
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/mini_httpd
+ install -m 0755 ${WORKDIR}/mini-httpd.conf ${D}${sysconfdir}/mini-httpd.conf
+ oe_runmake 'BINDIR=${D}${sbindir}' 'MANDIR=${D}${mandir}' install
+}
diff --git a/packages/minicom/minicom_2.3.bb b/packages/minicom/minicom_2.3.bb
new file mode 100644
index 0000000000..5b32401b1e
--- /dev/null
+++ b/packages/minicom/minicom_2.3.bb
@@ -0,0 +1,11 @@
+SECTION = "console/network"
+DEPENDS = "ncurses"
+LICENSE = "GPL"
+SRC_URI = "http://alioth.debian.org/frs/download.php/2332/minicom-${PV}.tar.gz \
+ "
+
+inherit autotools gettext
+
+do_install() {
+ for d in doc extras man lib src; do make -C $d DESTDIR=${D} install; done
+}
diff --git a/packages/mktemp/files/add_destdir.patch b/packages/mktemp/files/add_destdir.patch
new file mode 100644
index 0000000000..5eede383b3
--- /dev/null
+++ b/packages/mktemp/files/add_destdir.patch
@@ -0,0 +1,20 @@
+diff -NurpP --minimal mktemp-1.6/Makefile.in mktemp-1.6-addDESTDIR/Makefile.in
+--- mktemp-1.6/Makefile.in 2008-08-17 23:38:34.000000000 +0800
++++ mktemp-1.6-addDESTDIR/Makefile.in 2008-10-20 14:28:42.000000000 +0800
+@@ -106,13 +106,13 @@ $(OBJS): config.h
+ install: install-dirs install-binaries install-man
+
+ install-dirs:
+- $(SHELL) $(srcdir)/mkinstalldirs $(bindir) $(mandir)/man1
++ $(SHELL) $(srcdir)/mkinstalldirs ${DESTDIR}/$(bindir) ${DESTDIR}/$(mandir)/man1
+
+ install-binaries: $(PROG)
+- $(INSTALL) -m 0555 -s $(PROG) $(bindir)/$(PROG)
++ $(INSTALL) -m 0555 -s $(PROG) ${DESTDIR}/$(bindir)/$(PROG)
+
+ install-man:
+- $(INSTALL) -m 0444 $(srcdir)/mktemp.$(mantype) $(mandir)/man1/mktemp.1
++ $(INSTALL) -m 0444 $(srcdir)/mktemp.$(mantype) ${DESTDIR}/$(mandir)/man1/mktemp.1
+
+ check:
+ @echo nothing to check
diff --git a/packages/mktemp/files/disable-strip.patch b/packages/mktemp/files/disable-strip.patch
new file mode 100644
index 0000000000..96269863a4
--- /dev/null
+++ b/packages/mktemp/files/disable-strip.patch
@@ -0,0 +1,12 @@
+diff -NurpP --minimal mktemp-1.6/Makefile.in mktemp-1.6-disable-strip/Makefile.in
+--- mktemp-1.6/Makefile.in 2009-01-22 15:11:33.000000000 +0800
++++ mktemp-1.6-disable-strip/Makefile.in 2009-01-22 15:13:52.000000000 +0800
+@@ -109,7 +109,7 @@ install-dirs:
+ $(SHELL) $(srcdir)/mkinstalldirs ${DESTDIR}/$(bindir) ${DESTDIR}/$(mandir)/man1
+
+ install-binaries: $(PROG)
+- $(INSTALL) -m 0555 -s $(PROG) ${DESTDIR}/$(bindir)/$(PROG)
++ $(INSTALL) -m 0555 $(PROG) ${DESTDIR}/$(bindir)/$(PROG)
+
+ install-man:
+ $(INSTALL) -m 0444 $(srcdir)/mktemp.$(mantype) ${DESTDIR}/$(mandir)/man1/mktemp.1
diff --git a/packages/mktemp/mktemp_1.6.bb b/packages/mktemp/mktemp_1.6.bb
new file mode 100644
index 0000000000..bd9c4caa7d
--- /dev/null
+++ b/packages/mktemp/mktemp_1.6.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Allow safe temporary file creation from shell scripts."
+HOMEPAGE = "http://www.mktemp.org/"
+SECTION = "console/utils"
+LICENSE = "GPLv2 BSD"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-libc"
+
+SRC_URI = "\
+ ftp://ftp.mktemp.org/pub/mktemp/${P}.tar.gz \
+ file://add_destdir.patch;patch=1 \
+ file://disable-strip.patch;patch=1 \
+"
+
+# FIXME should rather use update-alternatives
+RCONFLICTS_${PN} = "coreutils"
diff --git a/packages/modphp/modphp5.inc b/packages/modphp/modphp5.inc
index e8701b0b99..3aaaf03e62 100644
--- a/packages/modphp/modphp5.inc
+++ b/packages/modphp/modphp5.inc
@@ -13,7 +13,8 @@ inherit autotools
FILES_${PN} = "${libdir}/apache2 /etc"
FILES_${PN}-dbg += "${libdir}/apache2/modules/.debug"
-CFLAGS += " -g -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
+CFLAGS += " -g -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED -I${STAGING_INCDIR_NATIVE}/apache2"
+
EXTRA_OECONF = "--with-apxs2=${STAGING_BINDIR_NATIVE}/apxs \
--without-mysql \
--enable-force-cgi-redirect \
@@ -29,7 +30,7 @@ EXTRA_OECONF = "--with-apxs2=${STAGING_BINDIR_NATIVE}/apxs \
--disable-simplexml \
--disable-libxml \
--disable-dom \
- --with-zlib --with-zlib-dir=${STAGING_DIR_NATIVE}${layout_exec_prefix} \
+ --with-zlib --with-zlib-dir=${STAGING_DIR}${layout_exec_prefix}/.. \
--with-config-file-path=/etc/php/apache2-php5"
# --with-libxml-dir=${STAGING_DIR_NATIVE}${layout_exec_prefix} \
diff --git a/packages/modphp/modphp_5.1.6.bb b/packages/modphp/modphp_5.1.6.bb
index 7c421c1d0f..70a578cd0a 100644
--- a/packages/modphp/modphp_5.1.6.bb
+++ b/packages/modphp/modphp_5.1.6.bb
@@ -1,2 +1,2 @@
include modphp5.inc
-PR ='r2'
+PR ='r3'
diff --git a/packages/moin/moin_1.8.1.bb b/packages/moin/moin_1.8.1.bb
index 427455d48c..1e50a739d7 100644
--- a/packages/moin/moin_1.8.1.bb
+++ b/packages/moin/moin_1.8.1.bb
@@ -1,15 +1,12 @@
DESCRIPTION = "A full fledged WikiWiki system written in Python"
LICENSE = "GPL"
SECTION = "network"
-HOMEPAGE = "http://moinmoin.wikiwikiweb.de/"
+HOMEPAGE = "http://moinmoin.wikiwikiweb.de"
PRIORITY = "optional"
-PR = "ml0"
+PR = "ml1"
SRC_URI = "http://static.moinmo.in/files/moin-${PV}.tar.gz"
inherit distutils
-do_install_append() {
- mv -f ${D}${datadir}/share/* ${D}${datadir}/
-}
-
+FILES_${PN} += "${datadir}"
diff --git a/packages/motion/motion-3.2.11/ffmpeg-0.4.9.15594svn-20081010.diff b/packages/motion/motion-3.2.11/ffmpeg-0.4.9.15594svn-20081010.diff
new file mode 100644
index 0000000000..af85599f20
--- /dev/null
+++ b/packages/motion/motion-3.2.11/ffmpeg-0.4.9.15594svn-20081010.diff
@@ -0,0 +1,14 @@
+Index: ffmpeg.c
+===================================================================
+--- trunk/ffmpeg.c (revision 434)
++++ trunk/ffmpeg.c (working copy)
+@@ -164,7 +164,8 @@
+ return write(fd, buf, size);
+ }
+
+-static offset_t file_seek(URLContext *h, offset_t pos, int whence)
++
++static int64_t file_seek(URLContext *h, int64_t pos, int whence)
+ {
+ int fd = (size_t)h->priv_data;
+ return lseek(fd, pos, whence);
diff --git a/packages/motion/motion_3.2.11.bb b/packages/motion/motion_3.2.11.bb
index dc7c0ecdbb..999a0ab6bd 100644
--- a/packages/motion/motion_3.2.11.bb
+++ b/packages/motion/motion_3.2.11.bb
@@ -7,13 +7,14 @@ DEPENDS = "jpeg ffmpeg mysql postgresql"
RSUGGESTS = "mysql-client postgresql-client"
-PR = "r0"
+PR = "r1"
-SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz \
+ file://ffmpeg-0.4.9.15594svn-20081010.diff;patch=1 "
inherit autotools
-EXTRA_OECONF = " --with-ffmpeg=${STAGING_LIBDIR} \
+EXTRA_OECONF = " --with-ffmpeg=${STAGING_LIBDIR}/../ \
--with-mysql-lib=${STAGING_LIBDIR} \
--with-mysql-include=${STAGING_INCDIR}/mysql \
--with-pgsql-lib=${STAGING_LIBDIR} \
diff --git a/packages/mpeg-encode/files/fixup.patch b/packages/mpeg-encode/files/fixup.patch
new file mode 100644
index 0000000000..c90f32760a
--- /dev/null
+++ b/packages/mpeg-encode/files/fixup.patch
@@ -0,0 +1,76 @@
+diff -urN mpeg_encode.old//headers/libpnmrw.h mpeg_encode//headers/libpnmrw.h
+--- mpeg_encode.old//headers/libpnmrw.h 1995-08-09 16:17:41.000000000 +0100
++++ mpeg_encode//headers/libpnmrw.h 2009-02-10 17:06:09.508519503 +0000
+@@ -13,18 +13,7 @@
+ #ifndef _PNMRW_H_
+ #define _PNMRW_H_
+
+-/* CONFIGURE: On some systems, malloc.h doesn't declare these, so we have
+-** to do it. On other systems, for example HP/UX, it declares them
+-** incompatibly. And some systems, for example Dynix, don't have a
+-** malloc.h at all. A sad situation. If you have compilation problems
+-** that point here, feel free to tweak or remove these declarations.
+-*/
+ #include <malloc.h>
+-#if !defined(sco) && !defined(sgi) && !defined(IRIX)
+-extern char* malloc();
+-#endif
+-/* End of configurable definitions. */
+-
+
+ /* Definitions to make PBMPLUS work with either ANSI C or C Classic. */
+
+diff -urN mpeg_encode.old//jpeg/Makefile mpeg_encode//jpeg/Makefile
+--- mpeg_encode.old//jpeg/Makefile 1995-08-05 00:27:00.000000000 +0100
++++ mpeg_encode//jpeg/Makefile 2009-02-10 17:27:20.488862124 +0000
+@@ -20,9 +20,6 @@
+ manprefix =
+ manext = 1
+
+-# The name of your C compiler:
+-CC= gcc
+-
+ # You may need to adjust these cc options:
+ CFLAGS= -O -I$(srcdir)
+ # Generally, we recommend defining any configuration symbols in jconfig.h,
+@@ -49,10 +46,8 @@
+ RM= rm -f
+ # file rename command
+ MV= mv
+-# library (.a) file creation command
+-AR= ar rc
+ # second step in .a creation (use "touch" if not needed)
+-AR2= ranlib
++AR2= $(RANLIB)
+ # installation program
+ INSTALL= /bin/install -c
+ INSTALL_PROGRAM= $(INSTALL)
+@@ -121,7 +116,7 @@
+
+ libjpeg.a: $(LIBOBJECTS)
+ $(RM) libjpeg.a
+- $(AR) libjpeg.a $(LIBOBJECTS)
++ $(AR) rc libjpeg.a $(LIBOBJECTS)
+ $(AR2) libjpeg.a
+
+ cjpeg: $(COBJECTS) libjpeg.a
+diff -urN mpeg_encode.old//libpnmrw.c mpeg_encode//libpnmrw.c
+--- mpeg_encode.old//libpnmrw.c 1995-08-16 23:24:26.000000000 +0100
++++ mpeg_encode//libpnmrw.c 2009-02-10 17:58:49.768855068 +0000
+@@ -28,6 +28,7 @@
+ #endif
+
+ #include <stdio.h>
++#include <errno.h>
+ #include "libpnmrw.h"
+
+ /* if don't have string.h, try strings.h */
+@@ -126,8 +127,6 @@
+ pm_perror( reason )
+ char* reason;
+ {
+- extern char* sys_errlist[];
+- extern int errno;
+ char* e;
+
+ e = sys_errlist[errno];
diff --git a/packages/mpeg-encode/mpeg-encode_1.5b.bb b/packages/mpeg-encode/mpeg-encode_1.5b.bb
new file mode 100644
index 0000000000..c350739531
--- /dev/null
+++ b/packages/mpeg-encode/mpeg-encode_1.5b.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "The Berkeley MPEG Encoder."
+HOMEPAGE = "http://bmrc.berkeley.edu/frame/research/mpeg/mpeg_encode.html"
+SECTION = "multimedia"
+PR = "r0"
+
+SRC_URI = "http://bmrc.berkeley.edu/ftp/pub/multimedia/mpeg/encode/mpeg_encode-${PV}-src.tar.gz \
+ file://fixup.patch;patch=1"
+
+S = "${WORKDIR}/mpeg_encode"
+
+CFLAGS_append += " -I${S}/headers"
+
+do_install() {
+ install -D -m 0755 ${S}/mpeg_encode ${D}${bindir}/mpeg_encode
+ install -D -m 0644 ${S}/mpeg_encode.1 ${D}${mandir}/man1/mpeg_encode.1
+}
diff --git a/packages/mtd/mtd-utils_1.2.0+git.bb b/packages/mtd/mtd-utils_1.2.0+git.bb
index 32d8adc5b8..04b8b29ce8 100644
--- a/packages/mtd/mtd-utils_1.2.0+git.bb
+++ b/packages/mtd/mtd-utils_1.2.0+git.bb
@@ -39,7 +39,6 @@ do_stage () {
}
mtd_utils = " docfdisk \
- docfdisk \
doc_loadbios \
flashcp \
flash_erase \
diff --git a/packages/mumpot/files/mumpot-cyclemap.desktop b/packages/mumpot/files/mumpot-cyclemap.desktop
index e761d0f3f1..495e712bac 100644
--- a/packages/mumpot/files/mumpot-cyclemap.desktop
+++ b/packages/mumpot/files/mumpot-cyclemap.desktop
@@ -4,5 +4,5 @@ Comment=Mumpot cyclemap
Exec=mumpot-cyclemap
Terminal=0
Type=Application
-Categories=Application;PIM;GTK
+Categories=X-PIM;GTK;Education;Science;Geography;
StartupNotify=True
diff --git a/packages/mumpot/files/mumpot-mapnik.desktop b/packages/mumpot/files/mumpot-mapnik.desktop
index b02b077de1..9d852d2577 100644
--- a/packages/mumpot/files/mumpot-mapnik.desktop
+++ b/packages/mumpot/files/mumpot-mapnik.desktop
@@ -4,5 +4,5 @@ Comment=Mumpot Mapnuk
Exec=mumpot-mapnik
Terminal=0
Type=Application
-Categories=Application;PIM;GTK
+Categories=X-PIM;GTK;Education;Science;Geography;
StartupNotify=True
diff --git a/packages/mumpot/files/mumpot-tah.desktop b/packages/mumpot/files/mumpot-tah.desktop
index bcdba40b0a..805c1d42d9 100644
--- a/packages/mumpot/files/mumpot-tah.desktop
+++ b/packages/mumpot/files/mumpot-tah.desktop
@@ -4,5 +4,5 @@ Comment=Mumpot t@h
Exec=mumpot-tah
Terminal=0
Type=Application
-Categories=Application;PIM;GTK
+Categories=X-PIM;GTK;Education;Science;Geography;
StartupNotify=True
diff --git a/packages/mumpot/mumpot_0.3.1.bb b/packages/mumpot/mumpot_0.3.1.bb
deleted file mode 100644
index c5b9091bdb..0000000000
--- a/packages/mumpot/mumpot_0.3.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "A map-viewer, simple editor and routing application for OSM maps"
-HOMEPAGE = "http://wiki.openstreetmap.org/index.php/Mumpot"
-AUTHOR = "Andreas Kemnade"
-SECTION = "x11/applications"
-LICENSE = "GPLv2"
-DEPENDS = "gtk+ bluez-libs bzip2 libxml2 libpng jpeg"
-
-SRC_URI = "http://osm.andi.de1.cc/mumpot-${PV}.tar.gz \
- file://mumpot-tah.desktop \
- file://mumpot-mapnik.desktop"
-
-inherit autotools pkgconfig
-
-do_install_append() {
- install -d ${D}${datadir}/applications
- install -m 0644 ${WORKDIR}/mumpot-tah.desktop ${D}${datadir}/applications/mumpot-tah.desktop
- install -m 0644 ${WORKDIR}/mumpot-mapnik.desktop ${D}${datadir}/applications/mumpot-mapnik.desktop
-}
diff --git a/packages/mumpot/mumpot_0.3.2.bb b/packages/mumpot/mumpot_0.4.bb
index ab9d876902..ab9d876902 100644
--- a/packages/mumpot/mumpot_0.3.2.bb
+++ b/packages/mumpot/mumpot_0.4.bb
diff --git a/packages/musicpd/gmpc_0.13.0.bb b/packages/musicpd/gmpc_0.13.0.bb
deleted file mode 100644
index f8c99efb36..0000000000
--- a/packages/musicpd/gmpc_0.13.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "GTK+ Frontend for mpd"
-HOMEPAGE = "http://www.musicpd.org/gmpc.shtml"
-SECTION = "x11/multimedia"
-LICENSE = "GPLv2"
-DEPENDS = "libmpd gtk+ libglade gnome-vfs"
-PR = "r0"
-
-SRC_URI = "http://download.qballcow.nl/programs/gmpc-0.13/gmpc-${PV}.tar.gz"
-
-LDFLAGS += "-export-dynamic"
-
-inherit autotools
diff --git a/packages/musicpd/gmpc_0.17.96.bb b/packages/musicpd/gmpc_0.17.96.bb
new file mode 100644
index 0000000000..4f9e23d205
--- /dev/null
+++ b/packages/musicpd/gmpc_0.17.96.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "GTK+ Frontend for mpd"
+HOMEPAGE = "http://www.musicpd.org/gmpc.shtml"
+SECTION = "x11/multimedia"
+LICENSE = "GPLv2"
+DEPENDS = "curl libsexy gob2-native gob2 libmpd gtk+ libglade gnome-vfs"
+PR = "r0"
+
+inherit gnome
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/gmpc-${PV}.tar.gz"
+
+LDFLAGS += "-export-dynamic"
+
+do_configure() {
+ sed -i -e s:'head -1':'head -n1':g configure
+ gnu-configize
+ oe_runconf
+}
+
+FILES_${PN} += "${datadir}/icons"
+
+
diff --git a/packages/musicpd/libmpd_0.17.96.bb b/packages/musicpd/libmpd_0.17.96.bb
new file mode 100644
index 0000000000..0d325f604f
--- /dev/null
+++ b/packages/musicpd/libmpd_0.17.96.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Music Player Daemon (mpd) library"
+HOMEPAGE = "http://www.musicpd.org"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/libmpd-${PV}.tar.gz"
+
+inherit autotools_stage
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+
diff --git a/packages/musicpd/libmpd_svn.bb b/packages/musicpd/libmpd_svn.bb
deleted file mode 100644
index 4c78eb15f4..0000000000
--- a/packages/musicpd/libmpd_svn.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "Music Player Daemon (mpd) library"
-HOMEPAGE = "http://www.musicpd.org"
-SECTION = "libs/multimedia"
-LICENSE = "GPLv2"
-SRCDATE = "20070120"
-PV = "0.0.0+svn${SRCDATE}"
-
-SRC_URI = "svn://svn.musicpd.org/libmpd;module=trunk;proto=https"
-S = "${WORKDIR}/trunk"
-
-inherit autotools pkgconfig
-
-do_stage_append() {
- oe_libinstall -C src libmpd ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/libmpd
- cd src
- for i in *.h; do
- install -m 0644 $i ${STAGING_INCDIR}/libmpd/$i
- done
- cd ..
-}
diff --git a/packages/musicpd/mpc_0.12.1.bb b/packages/musicpd/mpc_0.12.1.bb
deleted file mode 100644
index ccd6926fcd..0000000000
--- a/packages/musicpd/mpc_0.12.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "Command-line (scriptable) Music Player Daemon (mpd) Client"
-HOMEPAGE = "http://www.musicpd.org/mpc.shtml"
-SECTION = "console/multimedia"
-LICENSE = "GPLv2"
-
-SRC_URI = "http://www.musicpd.org/uploads/files/mpc-${PV}.tar.bz2"
-EXTRA_OECONF = "--with-iconv-libraries=${STAGING_LIBDIR} \
- --with-iconv-includes=${STAGING_INCDIR}"
-
-inherit autotools
diff --git a/packages/musicpd/mpc_0.15.bb b/packages/musicpd/mpc_0.15.bb
new file mode 100644
index 0000000000..738b6d4be2
--- /dev/null
+++ b/packages/musicpd/mpc_0.15.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Command-line (scriptable) Music Player Daemon (mpd) Client"
+HOMEPAGE = "http://www.musicpd.org/mpc.shtml"
+SECTION = "console/multimedia"
+LICENSE = "GPLv2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/mpc-${PV}.tar.bz2"
+EXTRA_OECONF = "--with-iconv-libraries=${STAGING_LIBDIR} \
+ --with-iconv-includes=${STAGING_INCDIR}"
+
+inherit autotools
diff --git a/packages/musicpd/mpd-alsa_0.14.2.bb b/packages/musicpd/mpd-alsa_0.14.2.bb
new file mode 100644
index 0000000000..87b59a1bcf
--- /dev/null
+++ b/packages/musicpd/mpd-alsa_0.14.2.bb
@@ -0,0 +1,62 @@
+DESCRIPTION = "Music Player Daemon (mpd). This version is configured for alsa support"
+HOMEPAGE = "http://www.musicpd.org"
+SECTION = "console/multimedia"
+LICENSE = "GPLv2"
+DEPENDS = "libvorbis libogg libao-alsa zlib flac audiofile virtual/libiconv faad2 \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad libid3tag', d)}"
+RDEPENDS = "libao-alsa"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/mpd-${PV}.tar.bz2 \
+file://mpd/mpd.conf \
+file://mpd/mpd.init"
+
+PR = "r3"
+
+S = "${WORKDIR}/mpd-${PV}"
+inherit autotools update-rc.d
+INITSCRIPT_NAME = "mpd"
+
+# Setting --enable-mpd-{mad,id3tag} causes local caches of the libraries to
+# be built, instead we use the OE built versions which should be installed
+# in staging - remove the --with and replace with --enable to use the local
+# versions.
+
+EXTRA_OECONF = "\
+--enable-ogg \
+--enable-oggvorbis \
+--disable-oggflac \
+--enable-flac \
+--enable-faad \
+--with-ao-libraries=${STAGING_LIBDIR} \
+--with-ao-includes=${STAGING_INCDIR} \
+--with-iconv-libraries=${STAGING_LIBDIR} \
+--with-iconv-includes=${STAGING_INCDIR} \
+--with-id3tag-libraries=${STAGING_LIBDIR} \
+--with-id3tag-includes=${STAGING_INCDIR} \
+--with-faad-libraries=${STAGING_LIBDIR} \
+--with-faad-includes=${STAGING_INCDIR} \
+--with-mad-libraries=${STAGING_LIBDIR} \
+--with-mad-includes=${STAGING_INCDIR} \
+--with-ogg-libraries=${STAGING_LIBDIR} \
+--with-ogg-includes=${STAGING_INCDIR} \
+--with-vorbis-libraries=${STAGING_LIBDIR} \
+--with-vorbis-includes=${STAGING_INCDIR} \
+--disable-aotest \
+--disable-alsatest \
+--disable-oggtest \
+--disable-vorbistest \
+--disable-libFLACtest \
+--disable-libOggFLACtest \
+--disable-audiofiletest \
+--disable-libmikmodtest \
+"
+
+do_configure_append() {
+ find ${S} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/mpd/mpd.init ${D}${sysconfdir}/init.d/mpd
+ install -m 644 ${WORKDIR}/mpd/mpd.conf ${D}${sysconfdir}/mpd.conf
+}
diff --git a/packages/musicpd/mpd-alsa_svn.bb b/packages/musicpd/mpd-alsa_svn.bb
deleted file mode 100644
index 9890c85831..0000000000
--- a/packages/musicpd/mpd-alsa_svn.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-DESCRIPTION = "Music Player Daemon (mpd). This version is configured for alsa support"
-HOMEPAGE = "http://www.musicpd.org"
-SECTION = "console/multimedia"
-LICENSE = "GPLv2"
-DEPENDS = "libvorbis libogg libao-alsa zlib flac audiofile virtual/libiconv faad2 \
- ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad libid3tag', d)}"
-RDEPENDS = "libao-alsa"
-PV = "0.11.5+svnr${SRCREV}"
-PR = "r2"
-
-SRC_URI = "svn://svn.musicpd.org/mpd;module=trunk;proto=https \
- file://mpd/mpd.init"
-# file://mpd/save-volume-state.patch;patch=1 \
-
-S = "${WORKDIR}/trunk"
-
-inherit autotools update-rc.d
-INITSCRIPT_NAME = "mpd"
-
-# Setting --enable-mpd-{mad,id3tag} causes local caches of the libraries to
-# be built, instead we use the OE built versions which should be installed
-# in staging - remove the --with and replace with --enable to use the local
-# versions.
-
-EXTRA_OECONF = "\
---enable-ogg \
---enable-oggvorbis \
---disable-oggflac \
---enable-flac \
---enable-faad \
---with-ao-libraries=${STAGING_LIBDIR} \
---with-ao-includes=${STAGING_INCDIR} \
---with-iconv-libraries=${STAGING_LIBDIR} \
---with-iconv-includes=${STAGING_INCDIR} \
---with-id3tag-libraries=${STAGING_LIBDIR} \
---with-id3tag-includes=${STAGING_INCDIR} \
---with-faad-libraries=${STAGING_LIBDIR} \
---with-faad-includes=${STAGING_INCDIR} \
---with-mad-libraries=${STAGING_LIBDIR} \
---with-mad-includes=${STAGING_INCDIR} \
---with-ogg-libraries=${STAGING_LIBDIR} \
---with-ogg-includes=${STAGING_INCDIR} \
---with-vorbis-libraries=${STAGING_LIBDIR} \
---with-vorbis-includes=${STAGING_INCDIR} \
---disable-aotest \
---disable-alsatest \
---disable-oggtest \
---disable-vorbistest \
---disable-libFLACtest \
---disable-libOggFLACtest \
---disable-audiofiletest \
---disable-libmikmodtest \
-"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/mpd/mpd.init ${D}${sysconfdir}/init.d/mpd
-}
diff --git a/packages/musicpd/mpd/mpd.conf b/packages/musicpd/mpd/mpd.conf
new file mode 100644
index 0000000000..c336af95c4
--- /dev/null
+++ b/packages/musicpd/mpd/mpd.conf
@@ -0,0 +1,338 @@
+# An example configuration file for MPD
+# See the mpd.conf man page for a more detailed description of each parameter.
+
+# Required files and directories ##############################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database.
+#
+#music_directory "~/music"
+music_directory "/media/content"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format.
+#
+#playlist_directory "~/.mpd/playlists"
+playlist_directory "/var/lib/mpd/playlists"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up.
+#
+#db_file "~/.mpd/database"
+db_file "/var/lib/mpd/mpd.db"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+#log_file "~/.mpd/log"
+#error_file "~/.mpd/error-log"
+log_file "/var/lib/mpd/mpd.log"
+error_file "/var/lib/mpd/mpd.error"
+###############################################################################
+
+
+# Optional files ##############################################################
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default.
+#
+#pid_file "~/.mpd/pid"
+pid_file "/var/lib/mpd/mpd.pid"
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default.
+#
+#state_file "~/.mpd/state"
+state_file "/var/lib/mpd/mpdstate"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as, if set. MPD should
+# never run as root and you may use this setting to make MPD change its user
+# id after initialization. Do not use this setting if you start MPD as an
+# unprivileged user. This setting is disabled by default, and the server will
+# run as root.
+#
+#user "nobody"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon.
+#
+# For network
+bind_to_address "any"
+#bind_to_address "127.0.0.1"
+#
+# And for Unix Socket
+#bind_to_address "~/.mpd/socket"
+#
+# This setting is the port that is desired for the daemon to get assigned to.
+#
+port "6600"
+#
+# This setting controls the type of information which is logged. Available
+# setting arguments are "default", "secure" or "verbose". The "verbose" setting
+# argument is recommended for troubleshooting, though can quickly stretch
+# available resources on limited hardware storage.
+#
+#log_level "default"
+#
+# If you have a problem with your MP3s ending abruptly it is recommended that
+# you set this argument to "no" to attempt to fix the problem. If this solves
+# the problem, it is highly recommended to fix the MP3 files with vbrfix
+# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
+# point gapless MP3 playback can be enabled.
+#
+#gapless_mp3_playback "yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists "no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. Optionally, 'comment' can be added to this
+# list.
+#
+#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+###############################################################################
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks "yes"
+#
+# If this setting is set to "yes, MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks "yes"
+#
+###############################################################################
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+#zeroconf_enabled "yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network.
+#
+#zeroconf_name "Music Player"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# can setting can be specified multiple times for different password profiles.
+#
+#password "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions "read,add,control,admin"
+#
+###############################################################################
+
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
+# other audio outputs.
+#
+# An example of an ALSA output:
+#
+#audio_output {
+# type "alsa"
+# name "My ALSA Device"
+# device "hw:0,0" # optional
+# format "44100:16:2" # optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+# type "oss"
+# name "My OSS Device"
+# device "/dev/dsp" # optional
+# format "44100:16:2" # optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+# type "shout"
+# encoding "ogg" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+# protocol "icecast2" # optional
+# user "source" # optional
+# description "My Stream Description" # optional
+# genre "jazz" # optional
+# public "no" # optional
+# timeout "2" # optional
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+#audio_output {
+# type "pulse"
+# name "My Pulse Output"
+# server "remote_server"
+# sink "remote_server_sink"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+# type "null"
+# name "My Null Output"
+#}
+#
+# This setting will change all decoded audio to be converted to the specified
+# format before being passed to the audio outputs. By default, this setting is
+# disabled.
+#
+#audio_output_format "44100:16:2"
+#
+# If MPD has been compiled with libsamplerate support, this setting specifies
+# the sample rate converter to use. Possible values can be found in the
+# mpd.conf man page or the libsamplerate documentation. By default, this is
+# setting is disabled.
+#
+#samplerate_converter "Fastest Sinc Interpolator"
+#
+###############################################################################
+
+
+# Volume control mixer ########################################################
+#
+# MPD has limited volume controls, to use them pick one below. If one is not
+# specified it may be autodetected at startup, depending on the dependencies
+# which were compiled into the server.
+#
+# An example for controlling an ALSA mixer:
+#
+mixer_type "alsa"
+mixer_device "default"
+mixer_control "PCM"
+#
+# An example for controlling an OSS mixer:
+#
+#mixer_type "oss"
+#mixer_device "/dev/mixer"
+#mixer_control "PCM"
+#
+# This example is a general volume control mixer, it is used to adjust the
+# volume of the audio sent to the audio output, and will work with all outputs.
+#
+#mixer_type "software"
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "album" or "track". See <http://www.replaygain.org> for more
+# details. By default this setting is disabled.
+#
+#replaygain "album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp "0"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness".
+#
+#volume_normalization "no"
+#
+###############################################################################
+
+
+# MPD Internal Buffering ######################################################
+#
+# This setting adjusts the size of internal decoded audio buffering. Changing
+# this may have undesired effects. Don't change this if you don't know what you
+# are doing.
+#
+#audio_buffer_size "2048"
+#
+# This setting controls the percentage of the buffer which is filled before
+# beginning to play. Increasing this reduces the chance of audio file skipping,
+# at the cost of increased time prior to audio playback.
+#
+#buffer_before_play "10%"
+#
+###############################################################################
+
+
+# HTTP Streaming Proxy ########################################################
+#
+# This setting specifies the HTTP proxy to use for playing HTTP streams. By
+# default, these settings will be disabled.
+#
+#http_proxy_host "proxy.isp.com"
+#http_proxy_port "8080"
+#http_proxy_user "user"
+#http_proxy_password "password"
+#
+###############################################################################
+
+
+# Resource Limitations ########################################################
+#
+# These settings are various limitations to prevent MPD from using too many
+# resources. Generally, these settings should be minimized to prevent security
+# risks, depending on the operating resources.
+#
+#connection_timeout "60"
+#max_connections "10"
+#max_playlist_length "16384"
+#max_command_list_size "2048"
+#max_output_buffer_size "8192"
+#
+###############################################################################
+
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting. After modification of this setting mpd
+# --create-db must be run to change the database.
+#
+filesystem_charset "UTF-8"
+#
+# This setting controls the encoding that ID3v1 tags should be converted from.
+#
+#id3v1_encoding "ISO-8859-1"
+#
+###############################################################################
diff --git a/packages/musicpd/mpd_0.14.2.bb b/packages/musicpd/mpd_0.14.2.bb
new file mode 100644
index 0000000000..8aed178af2
--- /dev/null
+++ b/packages/musicpd/mpd_0.14.2.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "Music Player Daemon (mpd)"
+HOMEPAGE = "http://www.musicpd.org"
+SECTION = "console/multimedia"
+LICENSE = "GPLv2"
+DEPENDS = "libvorbis libogg libao zlib libmikmod flac audiofile virtual/libiconv faad2 pulseaudio \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad libid3tag', d)}"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/mpd-${PV}.tar.bz2 \
+ file://mpd/mpd.conf \
+ file://mpd/mpd.init"
+
+PR = "r3"
+
+inherit autotools update-rc.d
+INITSCRIPT_NAME = "mpd"
+
+# Setting --enable-mpd-{mad,id3tag} causes local caches of the libraries to
+# be built, instead we use the OE built versions which should be installed
+# in staging - remove the --with and replace with --enable to use the local
+# versions.
+
+EXTRA_OECONF = "\
+ --enable-ogg \
+ --with-id3tag-libraries=${STAGING_LIBDIR} \
+ --with-id3tag-includes=${STAGING_INCDIR} \
+ --with-mad-libraries=${STAGING_LIBDIR} \
+ --with-mad-includes=${STAGING_INCDIR} \
+ --with-faad-libraries=${STAGING_LIBDIR} \
+ --with-faad-includes=${STAGING_INCDIR} \
+ --disable-jack \
+ --enable-pulse \
+ --enable-mod \
+ --disable-oggflac"
+
+do_compile_prepend() {
+ find -name Makefile | xargs sed -i 's~-I/usr/include~-I${STAGING_INCDIR}~g'
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/mpd/mpd.init ${D}${sysconfdir}/init.d/mpd
+ install -m 644 ${WORKDIR}/mpd/mpd.conf ${D}${sysconfdir}/mpd.conf
+}
+
diff --git a/packages/musicpd/mpd_svn.bb b/packages/musicpd/mpd_svn.bb
deleted file mode 100644
index c7d9a5b00a..0000000000
--- a/packages/musicpd/mpd_svn.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-DESCRIPTION = "Music Player Daemon (mpd)"
-HOMEPAGE = "http://www.musicpd.org"
-SECTION = "console/multimedia"
-LICENSE = "GPLv2"
-DEPENDS = "libvorbis libogg libao zlib libmikmod flac audiofile virtual/libiconv faad2 pulseaudio \
- ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad libid3tag', d)}"
-PV = "0.12.1+svn${SRCDATE}"
-PR = "r1"
-
-SRC_URI = "svn://svn.musicpd.org/mpd;module=trunk;proto=https \
- file://mpd/mpd.init"
-# file://save-volume-state.patch;patch=1"
-S = "${WORKDIR}/trunk"
-
-inherit autotools update-rc.d
-INITSCRIPT_NAME = "mpd"
-
-# Setting --enable-mpd-{mad,id3tag} causes local caches of the libraries to
-# be built, instead we use the OE built versions which should be installed
-# in staging - remove the --with and replace with --enable to use the local
-# versions.
-
-EXTRA_OECONF = "\
- --enable-ogg \
- --with-id3tag-libraries=${STAGING_LIBDIR} \
- --with-id3tag-includes=${STAGING_INCDIR} \
- --with-mad-libraries=${STAGING_LIBDIR} \
- --with-mad-includes=${STAGING_INCDIR} \
- --with-faad-libraries=${STAGING_LIBDIR} \
- --with-faad-includes=${STAGING_INCDIR} \
- --disable-jack \
- --enable-pulse \
- --enable-mod \
- --disable-oggflac"
-
-do_compile_prepend() {
- find -name Makefile | xargs sed -i 's~-I/usr/include~-I${STAGING_INCDIR}~g'
-}
diff --git a/packages/mutagen/mutagen_1.15.bb b/packages/mutagen/mutagen_1.15.bb
new file mode 100644
index 0000000000..682c144386
--- /dev/null
+++ b/packages/mutagen/mutagen_1.15.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = " Python module to handle audio metadata"
+HOMEPAGE = "http://code.google.com/p/quodlibet/wiki/Development/Mutagen"
+SECTION = "devel/python"
+LICENSE = "GPL"
+PR = "0"
+
+SRC_URI = "http://www.sacredchao.net/~piman/software/${PN}-${PV}.tar.gz"
+
+inherit distutils
diff --git a/packages/mysql/mysql_4.1.22.bb b/packages/mysql/mysql_4.1.22.bb
index 8d7f4057f6..5d5900c6d2 100644
--- a/packages/mysql/mysql_4.1.22.bb
+++ b/packages/mysql/mysql_4.1.22.bb
@@ -8,6 +8,7 @@ PR = "r2"
SRC_URI = "http://downloads.mysql.com/archives/mysql-4.1/mysql-${PV}.tar.gz \
file://autofoo.patch;patch=1 \
file://fix_host_path.patch;patch=1 \
+ file://configure-ps-cache-check.patch;patch=1 \
file://my.cnf \
file://mysqld.sh"
@@ -23,6 +24,8 @@ INITSCRIPT_PACKAGES = "mysql-server"
INITSCRIPT_NAME = "mysqld"
INITSCRIPT_PARAMS = "start 45 S . stop 45 0 6 1 ."
+export ac_cv_path_PS=/bin/ps
+export ac_cv_FIND_PROC="/bin/ps p \$\$PID | grep -v grep | grep mysqld > /dev/null"
PARALLEL_MAKE = " "
#EXTRA_OEMAKE = "'GEN_LEX_HASH=${STAGING_BINDIR_NATIVE}/gen_lex_hash'"
EXTRA_OECONF = " --with-embedded-server --prefix=/usr --sysconfdir=/etc/mysql --localstatedir=/var/mysql --datadir=/var/mysql --disable-dependency-tracking --without-raid --without-debug --with-low-memory --without-query-cache --without-man --without-docs --without-innodb "
diff --git a/packages/navit/navit_0.1.0.bb b/packages/navit/navit_0.1.0.bb
new file mode 100644
index 0000000000..f1dfb1ceb4
--- /dev/null
+++ b/packages/navit/navit_0.1.0.bb
@@ -0,0 +1,5 @@
+require navit.inc
+
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz"
diff --git a/packages/ncurses/ncurses.inc b/packages/ncurses/ncurses.inc
index 6d35467d8a..76a8ff0c3c 100644
--- a/packages/ncurses/ncurses.inc
+++ b/packages/ncurses/ncurses.inc
@@ -3,38 +3,28 @@ HOMEPAGE = "http://www.gnu.org/software/ncurses/ncurses.html"
LICENSE = "MIT"
SECTION = "libs"
DEPENDS = "ncurses-native"
-PACKAGES_prepend = "ncurses-tools "
-PACKAGES_append = " ncurses-terminfo"
-FILES_ncurses_append = " ${datadir}/tabset"
-RSUGGESTS_${PN} = "ncurses-terminfo"
-RPROVIDES_${PN} = "libncurses5"
-RCONFLICTS_${PN} = "libncurses5"
-RREPLACES_${PN} = "libncurses5"
inherit autotools
-# This keeps only tput/tset in ncurses
-# clear/reset are in already busybox
-FILES_ncurses-tools = "${bindir}/tic ${bindir}/toe ${bindir}/infotocap ${bindir}/captoinfo ${bindir}/infocmp ${bindir}/clear.${PN} ${bindir}/reset.${PN} ${bindir}/tack "
-FILES_ncurses-terminfo = "${datadir}/terminfo"
-FILES_${PN} = "${bindir}/tput ${bindir}/tset ${libdir}/lib*.so.* usr/share/tabset etc/terminfo"
-
PARALLEL_MAKE=""
FILESPATH = "${FILE_DIRNAME}/local:${FILE_DIRNAME}/ncurses-${PV}-${PR}:${FILE_DIRNAME}/ncurses-${PV}:${FILE_DIRNAME}/ncurses:${FILE_DIRNAME}"
-EXTRA_OECONF = "--with-shared \
- --with-libtool \
- --without-profile \
- --without-debug \
- --disable-rpath \
- --enable-echo \
- --enable-const \
- --without-ada \
- --enable-termcap \
- --without-cxx-binding \
- --with-terminfo-dirs=${sysconfdir}/terminfo:${datadir}/terminfo \
- --enable-overwrite"
+EXTRA_OECONF = "\
+ --with-shared \
+ --with-libtool \
+ --without-profile \
+ --without-debug \
+ --disable-rpath \
+ --enable-echo \
+ --enable-const \
+ --without-ada \
+ --enable-termcap \
+ --without-cxx-binding \
+ --with-terminfo-dirs=${sysconfdir}/terminfo:${datadir}/terminfo \
+ --enable-overwrite \
+"
+
export BUILD_CCFLAGS = "-I${S}/ncurses -I${S}/include ${BUILD_CFLAGS}"
export BUILD_LDFLAGS = ""
export EXTRA_OEMAKE = '"BUILD_LDFLAGS=" "BUILD_CCFLAGS=${BUILD_CCFLAGS}"'
@@ -100,3 +90,33 @@ pkg_prerm_ncurses-tools () {
update-alternatives --remove reset reset.${PN}
fi
}
+
+PACKAGES =+ "${PN}-tools ${PN}-terminfo"
+
+# clear and reset are already in busybox
+FILES_${PN} = "\
+ ${bindir}/tput \
+ ${bindir}/tset \
+ ${libdir}/lib*.so.* \
+ ${datadir}/tabset \
+ ${sysconfdir}/terminfo \
+"
+FILES_${PN}-tools = "\
+ ${bindir}/tic \
+ ${bindir}/toe \
+ ${bindir}/infotocap \
+ ${bindir}/captoinfo \
+ ${bindir}/infocmp \
+ ${bindir}/clear.${PN} \
+ ${bindir}/reset.${PN} \
+ ${bindir}/tack \
+"
+FILES_${PN}-terminfo = "\
+ ${datadir}/terminfo \
+"
+
+RSUGGESTS_${PN} = "ncurses-terminfo"
+RPROVIDES_${PN} = "libncurses5"
+RCONFLICTS_${PN} = "libncurses5"
+RREPLACES_${PN} = "libncurses5"
+
diff --git a/packages/ncurses/ncurses_5.4.bb b/packages/ncurses/ncurses_5.4.bb
index 451a180b39..56076140fa 100644
--- a/packages/ncurses/ncurses_5.4.bb
+++ b/packages/ncurses/ncurses_5.4.bb
@@ -1,4 +1,4 @@
-PR = "r16"
+PR = "r18"
SRC_URI = "${GNU_MIRROR}/ncurses/ncurses-${PV}.tar.gz \
file://makefile_tweak.patch;patch=1 \
@@ -6,3 +6,5 @@ SRC_URI = "${GNU_MIRROR}/ncurses/ncurses-${PV}.tar.gz \
S = "${WORKDIR}/ncurses-${PV}"
require ncurses.inc
+
+LEAD_SONAME = "libncurses.so.5"
diff --git a/packages/neon/files/gnutls-2.patch b/packages/neon/files/gnutls-2.patch
new file mode 100644
index 0000000000..2b37dfc889
--- /dev/null
+++ b/packages/neon/files/gnutls-2.patch
@@ -0,0 +1,11 @@
+diff -Nurd neon-0.25.5/macros/neon.m4 neon-0.25.5-patched/macros/neon.m4
+--- neon-0.25.5/macros/neon.m4 2009-02-03 16:23:40.000000000 +0100
++++ neon-0.25.5-patched/macros/neon.m4 2009-02-03 16:24:00.000000000 +0100
+@@ -895,6 +895,7 @@
+ 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]) ;;
+ 1.*) ;;
++ 2.*) ;;
+ *) AC_MSG_ERROR([GNU TLS version $ne_gnutls_ver is not supported]) ;;
+ esac
+
diff --git a/packages/neon/neon_0.25.5.bb b/packages/neon/neon_0.25.5.bb
index f935fdb222..9151a74665 100644
--- a/packages/neon/neon_0.25.5.bb
+++ b/packages/neon/neon_0.25.5.bb
@@ -4,10 +4,11 @@ SECTION = "libs"
LICENSE = "LGPL"
DEPENDS = "zlib libxml2 expat time gnutls"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://www.webdav.org/${PN}/${P}.tar.gz \
- file://gnutls-force-and-detect.patch;patch=1"
+ file://gnutls-force-and-detect.patch;patch=1 \
+ file://gnutls-2.patch;patch=1"
inherit autotools binconfig lib_package pkgconfig
diff --git a/packages/net-snmp/net-snmp.inc b/packages/net-snmp/net-snmp.inc
new file mode 100644
index 0000000000..bbe809696e
--- /dev/null
+++ b/packages/net-snmp/net-snmp.inc
@@ -0,0 +1,97 @@
+DESCRIPTION = "Various tools relating to the Simple Network Management Protocol"
+HOMEPAGE = "http://www.net-snmp.org/"
+LICENSE = "BSD"
+DEPENDS = "openssl"
+RDEPENDS_${PN}-server += "net-snmp-mibs"
+RDEPENDS_${PN}-client += "net-snmp-mibs"
+RDEPENDS_${PN}-dev = "net-snmp-client (= ${EXTENDPV}) net-snmp-server (= ${EXTENDPV})"
+RRECOMMENDS_${PN}-dbg = "net-snmp-client (= ${EXTENDPV}) net-snmp-server (= ${EXTENDPV})"
+
+inherit autotools update-rc.d
+
+
+do_configure() {
+ # Additional flag based on target endiness (see siteinfo.bbclass)
+ ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
+ oenote Determined endianess as: $ENDIANESS
+ oe_runconf $ENDIANESS
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/snmp
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/snmpd
+ install -m 644 ${WORKDIR}/snmpd.conf ${D}${sysconfdir}/snmp/
+ install -m 644 ${WORKDIR}/snmptrapd.conf ${D}${sysconfdir}/snmp/
+}
+
+do_stage() {
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake INSTALL_PREFIX="${STAGE_TEMP}" install
+ autotools_stage_dir ${STAGE_TEMP}/${includedir} ${STAGING_INCDIR}
+ if [ -d ${STAGE_TEMP}/${libdir} ]
+ then
+ olddir=`pwd`
+ cd ${STAGE_TEMP}/${libdir}
+ las=$(find . -name \*.la -type f)
+ cd $olddir
+ echo "Found la files: $las"
+ for i in $las
+ do
+ sed -e 's/^installed=yes$/installed=no/' \
+ -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR}/\1,g' \
+ -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \
+ -i ${STAGE_TEMP}/${libdir}/$i
+ done
+ autotools_stage_dir ${STAGE_TEMP}/${libdir} ${STAGING_LIBDIR}
+ fi
+ install -d ${STAGING_DIR_HOST}${layout_bindir}
+ sed -e "s@-I/usr/include@@g" \
+ -e "s@^prefix=.*@prefix=${STAING_DIR_HOST}@g" \
+ -e "s@^exec_prefix=.*@exec_prefix=${STAING_DIR_HOST}@g" \
+ -e "s@^includedir=.*@includedir=${STAGING_INCDIR}@g" \
+ -e "s@^libdir=.*@libdir=${STAGING_LIBDIR}@g" \
+ -i net-snmp-config
+
+ install -m 755 net-snmp-config ${STAGING_DIR_HOST}${layout_bindir}
+ rm -Rf ${STAGE_TEMP}
+}
+
+PACKAGES = "net-snmp-dbg net-snmp-doc net-snmp-dev net-snmp-libs \
+ net-snmp-mibs net-snmp-server net-snmp-client"
+
+FILES_${PN}-libs = "${libdir}/*"
+FILES_${PN}-mibs = "${datadir}/snmp/mibs"
+FILES_${PN}-server = "${sbindir}/* ${sysconfdir}"
+FILES_${PN}-client = "${bindir}/* ${datadir}/snmp/"
+FILES_${PN}-dbg += "${libdir}/.debug/ ${sbindir}/.debug/ ${bindir}/.debug/"
+FILES_${PN}-dev += ${bindir}/net-snmp-config ${bindir}/mib2c ${bindir}/mib2c-update"
+
+CONFFILES_${PN}-server = "${sysconfdir}/snmp/snmpd.conf \
+ ${sysconfdir}/snmp/snmptrapd.conf"
+
+INITSCRIPT_PACKAGES = "${PN}-server"
+INITSCRIPT_NAME_${PN}-server = "snmpd"
+INITSCRIPT_PARAMS_${PN}-server = "defaults"
+
+LEAD_SONAME = "libnetsnmp.so"
+
+pkg_postinst_net-snmp-server() {
+if test "x$D" != "x"; then
+ D="-r $D"
+else
+ D="-s"
+fi
+update-rc.d $D snmpd defaults
+}
+
+pkg_postrm_net-snmp-server() {
+if test "x$D" != "x"; then
+ D="-r $D"
+else
+ /etc/init.d/snmpd stop
+fi
+update-rc.d $D snmpd remove
+}
+
diff --git a/packages/net-snmp/net-snmp_5.1.2.bb b/packages/net-snmp/net-snmp_5.1.2.bb
index 330e13e0ef..527c9e33b1 100644
--- a/packages/net-snmp/net-snmp_5.1.2.bb
+++ b/packages/net-snmp/net-snmp_5.1.2.bb
@@ -1,8 +1,5 @@
-DESCRIPTION = "Various tools relating to the Simple Network Management Protocol"
-HOMEPAGE = "http://www.net-snmp.org/"
-LICENSE = "BSD"
-DEPENDS = "openssl"
-PR = "r3"
+require net-snmp.inc
+PR = "r4"
SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
file://uclibc-fix.patch;patch=1 \
@@ -16,46 +13,6 @@ PARALLEL_MAKE = ""
EXTRA_OECONF = "--enable-shared --disable-manuals --with-defaults"
EXTRA_OEMAKE = "INSTALL_PREFIX=${D}"
-do_configure() {
- # Additional flag based on target endiness (see siteinfo.bbclass)
- ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
- oenote Determined endianess as: $ENDIANESS
- oe_runconf $ENDIANESS
-}
-
-do_install_append() {
- install -d ${D}${sysconfdir}/snmp
- install -d ${D}${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/snmpd
- install -m 644 ${WORKDIR}/snmpd.conf ${D}${sysconfdir}/snmp/
- install -m 644 ${WORKDIR}/snmptrapd.conf ${D}${sysconfdir}/snmp/
-}
-
-PACKAGES = "net-snmp-dbg net-snmp-doc net-snmp-dev net-snmp-libs net-snmp-mibs net-snmp-server net-snmp-client"
-FILES_net-snmp-libs = "${libdir}/*"
-FILES_net-snmp-mibs = "${datadir}/snmp/mibs"
-FILES_net-snmp-server = "${sbindir}/* ${sysconfdir}"
-FILES_net-snmp-client = "${bindir}/* ${datadir}/snmp/"
-FILES_net-snmp-dbg += "${libdir}/.debug/ ${sbindir}/.debug/ ${bindir}/.debug/"
-RDEPENDS_net-snmp-server += "net-snmp-mibs"
-RDEPENDS_net-snmp-client += "net-snmp-mibs"
-
-pkg_postinst_net-snmp-server() {
-if test "x$D" != "x"; then
- D="-r $D"
-else
- D="-s"
-fi
-update-rc.d $D snmpd defaults
-}
-
-pkg_postrm_net-snmp-server() {
-if test "x$D" != "x"; then
- D="-r $D"
-else
- /etc/init.d/snmpd stop
-fi
-update-rc.d $D snmpd remove
-}
-
CONFFILES_${PN}_nylon = "${sysconfdir}/snmp/snmpd.conf ${sysconfdir}/snmp/snmptrapd.conf"
+CCACHE = ""
+
diff --git a/packages/net-snmp/net-snmp_5.4.1.bb b/packages/net-snmp/net-snmp_5.4.1.bb
index d900019a0a..f76005b435 100644
--- a/packages/net-snmp/net-snmp_5.4.1.bb
+++ b/packages/net-snmp/net-snmp_5.4.1.bb
@@ -1,13 +1,5 @@
-DESCRIPTION = "Various tools relating to the Simple Network Management Protocol"
-HOMEPAGE = "http://www.net-snmp.org/"
-LICENSE = "BSD"
-DEPENDS = "openssl"
-RDEPENDS_${PN}-server += "net-snmp-mibs"
-RDEPENDS_${PN}-client += "net-snmp-mibs"
-RDEPENDS_${PN}-dev = "net-snmp-client (= ${EXTENDPV}) net-snmp-server (= ${EXTENDPV})"
-RRECOMMENDS_${PN}-dbg = "net-snmp-client (= ${EXTENDPV}) net-snmp-server (= ${EXTENDPV})"
-
-PR = "r1"
+require net-snmp.inc
+PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
file://configure-tail.patch;patch=1 \
@@ -15,43 +7,14 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
file://snmpd.conf \
file://snmptrapd.conf"
-inherit autotools update-rc.d
-
EXTRA_OECONF = "--enable-shared --disable-manuals --with-defaults \
--disable-embedded-perl --with-perl-modules=no"
EXTRA_OEMAKE = "INSTALL_PREFIX=${D}"
-do_configure() {
- # Additional flag based on target endiness (see siteinfo.bbclass)
- ENDIANESS="${@base_conditional('SITEINFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
- oenote Determined endianess as: $ENDIANESS
+do_configure_prepend() {
libtoolize --force
- oe_runconf $ENDIANESS
-}
-do_install_append() {
- install -d ${D}${sysconfdir}/snmp
- install -d ${D}${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/snmpd
- install -m 644 ${WORKDIR}/snmpd.conf ${D}${sysconfdir}/snmp/
- install -m 644 ${WORKDIR}/snmptrapd.conf ${D}${sysconfdir}/snmp/
}
-PACKAGES = "net-snmp-dbg net-snmp-doc net-snmp-dev net-snmp-libs \
- net-snmp-mibs net-snmp-server net-snmp-client"
-
-FILES_${PN}-libs = "${libdir}/*"
-FILES_${PN}-mibs = "${datadir}/snmp/mibs"
-FILES_${PN}-server = "${sbindir}/* ${sysconfdir}"
-FILES_${PN}-client = "${bindir}/* ${datadir}/snmp/"
-FILES_${PN}-dbg += "${libdir}/.debug/ ${sbindir}/.debug/ ${bindir}/.debug/"
-
-CONFFILES_${PN}-server = "${sysconfdir}/snmp/snmpd.conf \
- ${sysconfdir}/snmp/snmptrapd.conf"
-
-INITSCRIPT_PACKAGES = "${PN}-server"
-INITSCRIPT_NAME_${PN}-server = "snmpd"
-INITSCRIPT_PARAMS_${PN}-server = "defaults"
-
-LEAD_SONAME = "libnetsnmp.so"
-
PARALLEL_MAKE = ""
+CCACHE = ""
+
diff --git a/packages/net-snmp/net-snmp_svn.bb b/packages/net-snmp/net-snmp_svn.bb
new file mode 100644
index 0000000000..2f82865aaa
--- /dev/null
+++ b/packages/net-snmp/net-snmp_svn.bb
@@ -0,0 +1,27 @@
+require net-snmp.inc
+DEPENDS += "libtool libtool-native libtool-cross"
+
+PR = "r3"
+S = "${WORKDIR}/net-snmp"
+
+SRC_URI = "svn://net-snmp.svn.sourceforge.net/svnroot/net-snmp/trunk;rev=17367;module=net-snmp;proto=https \
+ file://init \
+ file://snmpd.conf \
+ file://snmptrapd.conf"
+
+EXTRA_OECONF = "--enable-shared --disable-manuals --with-defaults \
+ --disable-embedded-perl --with-perl-modules=no GREP=/bin/grep SED=/bin/sed"
+EXTRA_OEMAKE = "INSTALL_PREFIX=${D}"
+
+PARALLEL_MAKE = ""
+CCACHE = ""
+
+do_configure_prepend() {
+ gnu-configize -f
+ # We better change sources and re-autoconf here, but
+ # required autoconf is too new for us.
+ sed -e '/echo.*\".*\\\\.*\"/s/echo/echo -e/g' \
+ -e 's/tail -1/tail -n 1/g' \
+ -i configure
+}
+
diff --git a/packages/netatalk/files/init b/packages/netatalk/files/init
index 926f9bbb1e..380cc49e16 100755..100644
--- a/packages/netatalk/files/init
+++ b/packages/netatalk/files/init
@@ -1,62 +1,45 @@
-#!/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
-}
+#!/bin/sh
atalk_startup () {
-# . /etc/netatalk/netatalk.conf
-
if [ "${ATALKD_RUN}" != "no" ]; then
- ebegin "Starting atalkd"
+ echo "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"
+ echo " Registering $reg"
/usr/bin/nbprgstr "$reg"
- eend $?
done
if [ "${PAPD_RUN}" = "yes" ]; then
- ebegin " Starting papd"
+ echo " Starting papd"
start-stop-daemon --start --quiet --exec /usr/sbin/papd
- eend $?
fi
fi
if [ "${CNID_METAD_RUN}" = "yes" ] ; then
- ebegin "Starting cnid_metad"
+ echo "Starting cnid_metad"
start-stop-daemon --start --quiet --exec /usr/sbin/cnid_metad
- eend $?
fi
if [ "${AFPD_RUN}" = "yes" ]; then
- ebegin "Starting afpd"
+ echo "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"
+ echo "Starting timelord"
start-stop-daemon --start --quiet --exec /usr/sbin/timelord
- eend $?
fi
}
-start () {
+start_netatalk () {
. /etc/netatalk/netatalk.conf
if [ x"${ATALK_BGROUND}" = x"yes" ]; then
@@ -67,45 +50,54 @@ start () {
fi
}
-stop () {
+stop_netatalk () {
. /etc/netatalk/netatalk.conf
if [ "${AFPD_RUN}" = "yes" ]; then
- ebegin "Stopping afpd"
+ echo "Stopping afpd"
start-stop-daemon --stop --quiet --exec /usr/sbin/afpd
- eend $?
fi
if [ "${TIMELORD_RUN}" = "yes" ]; then
- ebegin "Stopping timelord"
+ echo "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"
+ echo "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"
+ echo "Unregistering $reg"
/usr/bin/nbpunrgstr "$reg"
- eend $?
done
- ebegin "Stopping atalkd"
+ echo "Stopping atalkd"
start-stop-daemon --stop --quiet --exec /usr/sbin/atalkd
- eend $?
fi
if [ "${CNID_METAD_RUN}" = "yes" ] ; then
- ebegin "Stopping cnid_metad"
+ echo "Stopping cnid_metad"
start-stop-daemon --stop --quiet --exec /usr/sbin/cnid_metad
- eend $?
fi
}
+
+case "$1" in
+ start)
+ start_netatalk
+ ;;
+ stop)
+ stop_netatalk
+ ;;
+ *)
+ echo "Usage: {start|stop}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/netatalk/files/netatalk.conf b/packages/netatalk/files/netatalk.conf
new file mode 100644
index 0000000000..dc0efbc249
--- /dev/null
+++ b/packages/netatalk/files/netatalk.conf
@@ -0,0 +1,44 @@
+# Appletalk configuration
+# Change this to increase the maximum number of clients that can connect:
+AFPD_MAX_CLIENTS=50
+
+# Change this to set the machine's atalk name and zone, the latter containing
+# the '@' sign as first character -- compare with nbp_name(3) if in doubt
+#
+# NOTE: If Netatalk should register AppleTalk services in the standard zone
+# then you need not to specify a zone name here.
+#
+# If your zone has spaces in it, you're better off specifying
+# it in afpd.conf if you realize that your distribution doesn't
+# handle spaces correctly in the startup script. Remember to use
+# quotes here if the zone name contains spaces.
+#
+#ATALK_ZONE="@some zone"
+ATALK_NAME=`echo ${HOSTNAME}|cut -d. -f1`
+
+# specify the Mac and unix charsets to be used
+ATALK_MAC_CHARSET='MAC_ROMAN'
+ATALK_UNIX_CHARSET='LOCALE'
+
+# specify this if you don't want guest, clrtxt, and dhx
+# available options: uams_guest.so, uams_clrtxt.so, uams_dhx.so,
+# uams_randnum.so
+#AFPD_UAMLIST="-U uams_clrtxt.so,uams_dhx.so"
+
+# Change this to set the id of the guest user
+AFPD_GUEST=nobody
+
+# Set which daemons to run (papd is dependent upon atalkd):
+ATALKD_RUN=no
+PAPD_RUN=yes
+CNID_METAD_RUN=yes
+AFPD_RUN=yes
+TIMELORD_RUN=no
+A2BOOT_RUN=no
+
+# Control whether the daemons are started in the background
+ATALK_BGROUND=no
+
+# export the charsets, read form ENV by apps
+export ATALK_MAC_CHARSET
+export ATALK_UNIX_CHARSET
diff --git a/packages/netatalk/netatalk_2.0.3.bb b/packages/netatalk/netatalk_2.0.3.bb
index 4f802dbcf6..0ed580d6f1 100644
--- a/packages/netatalk/netatalk_2.0.3.bb
+++ b/packages/netatalk/netatalk_2.0.3.bb
@@ -1,38 +1,46 @@
SECTION = "net"
-PR = "r0"
+PR = "r1"
LICENSE = "GPL"
-DEPENDS = "cups db openssl libpam"
+DEPENDS = "cups db openssl"
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 \
- "
+ file://netatalk.conf \
+ file://init"
+
+inherit autotools update-rc.d
+
INITSCRIPT_NAME = "atalk"
INITSCRIPT_PARAMS = "defaults 65"
-inherit autotools update-rc.d
+PACKAGES = "${PN}-atalkd ${PN}-pap ${PN}-timelord ${PN}-dbg ${PN} ${PN}-doc ${PN}-dev"
-do_configure () {
- autoreconf
- ac_cv_header_rpcsvc_rquota_h=no LDFLAGS="-lpthread -L${STAGING_LIBDIR}" ./configure \
- --build=${BUILD_SYS} \
- --host=${HOST_SYS} \
- --target=${TARGET_SYS} \
- --prefix=${prefix} \
- --with-bdb=${STAGING_DIR_TARGET}${layout_exec_prefix} \
- --with-ssl-dir=${STAGING_DIR_TARGET}${layout_exec_prefix} \
- --without-shadow \
- --sysconfdir=${sysconfdir} \
- --disable-nls \
- --disable-static \
- --with-pam \
- --mandir=${mandir}
- cp ${STAGING_BINDIR_NATIVE}/${TARGET_SYS}-libtool ./${TARGET_SYS}-libtool
-}
+RRECOMMENDS_${PN}-atalkd = "kernel-module-appletalk"
+
+FILES_${PN}-atalkd += "${sysconfdir}/netatalk/atalkd.conf \
+ /usr/sbin/atalkd"
+FILES_${PN}-pap += "/usr/bin/pap \
+ ${sysconfdir}/netatalk/papd.conf \
+ /usr/sbin/papd \
+ /usr/bin/papstatus"
+FILES_${PN}-timelord += "/usr/sbin/timelord"
+FILES_${PN}-dbg += "${sysconfdir}/netatalk/uams/.debug"
+
+EXTRA_OECONF += "ac_cv_path_KRB5_CONFIG=no \
+ ac_cv_header_rpcsvc_rquota_h=no \
+ --with-bdb=${STAGING_DIR_TARGET}${layout_exec_prefix} \
+ --enable-timelord \
+ --without-shadow \
+ --enable-static=no \
+ --disable-srvloc \
+ --without-pam \
+ --with-ssl-dir=${STAGING_DIR_TARGET}${layout_exec_prefix}"
+LDFLAGS += "-lpthread -L${STAGING_LIBDIR}"
do_install_append() {
install -D -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/atalk
+ install -D -m 0644 ${WORKDIR}/netatalk.conf ${D}${sysconfdir}/netatalk/netatalk.conf
}
diff --git a/packages/netbase/netbase/om-3d7k/interfaces b/packages/netbase/netbase/om-3d7k/interfaces
new file mode 100644
index 0000000000..dda0850d71
--- /dev/null
+++ b/packages/netbase/netbase/om-3d7k/interfaces
@@ -0,0 +1,21 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# No wireless interface
+
+# Ethernet/RNDIS gadget (g_ether)
+# ... or on host side, usbnet and random hwaddr
+allow-hotplug usb0
+iface usb0 inet static
+ address 192.168.0.202
+ netmask 255.255.255.0
+ network 192.168.0.0
+ gateway 192.168.0.200
+ up echo nameserver 208.67.222.222 >> /etc/resolv.conf
+ up echo nameserver 208.67.220.220 >> /etc/resolv.conf
+
+# Bluetooth networking
+iface bnep0 inet dhcp
diff --git a/packages/netbase/netbase/om-gta01/interfaces b/packages/netbase/netbase/om-gta01/interfaces
index df85b1e854..56c485ef75 100644
--- a/packages/netbase/netbase/om-gta01/interfaces
+++ b/packages/netbase/netbase/om-gta01/interfaces
@@ -16,7 +16,7 @@ iface eth1 inet dhcp
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
-auto usb0
+allow-hotplug usb0
iface usb0 inet static
address 192.168.0.202
netmask 255.255.255.0
diff --git a/packages/netbase/netbase/om-gta02/interfaces b/packages/netbase/netbase/om-gta02/interfaces
index 6caf915794..ceedfc59c2 100644
--- a/packages/netbase/netbase/om-gta02/interfaces
+++ b/packages/netbase/netbase/om-gta02/interfaces
@@ -16,7 +16,7 @@ iface eth1 inet dhcp
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
-auto usb0
+allow-hotplug usb0
iface usb0 inet static
address 192.168.0.202
netmask 255.255.255.0
diff --git a/packages/netbase/netbase/ronetix-pm9261/interfaces b/packages/netbase/netbase/ronetix-pm9261/interfaces
new file mode 100644
index 0000000000..ab20f5b37b
--- /dev/null
+++ b/packages/netbase/netbase/ronetix-pm9261/interfaces
@@ -0,0 +1,72 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+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
+#
+#
+# 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.
+# This is the best option for non-roaming, single-network usage.
+# Note that your card may require a firmware update to use WPA.
+# Some distributions install a temporary volatile firmware update on ifup.
+#
+#iface wlan0 inet dhcp
+# wpa-essid some-essid
+# wpa-psk My-PlainText-Password
+#
+# A WPA1 or WPA2 encrypted connection using an external configuration file
+# for wpa-supplicant. This is the way to go if you need to configure multiple
+# networks with different keys and / or WPA settings and roaming support.
+#
+# iface wlan0 inet dhcp
+# wpa-conf /etc/wpa_supplicant.conf
+# wpa-driver hostap
+
+
+
+iface atml0 inet dhcp
+
+# Wired or wireless interfaces
+auto eth0
+iface eth0 inet static
+ address 192.168.0.184
+ netmask 255.255.255.0
+ network 192.168.0.0
+ gateway 192.168.0.1
+
+iface eth1 inet dhcp
+
+# Ethernet/RNDIS gadget (g_ether)
+# ... or on host side, usbnet and random hwaddr
+iface usb0 inet static
+ address 192.168.0.202
+ netmask 255.255.255.0
+ network 192.168.0.0
+ gateway 192.168.0.200
+
+# Bluetooth networking
+iface bnep0 inet dhcp
+
diff --git a/packages/netbase/netbase/ronetix-pm9263/interfaces b/packages/netbase/netbase/ronetix-pm9263/interfaces
new file mode 100644
index 0000000000..ab20f5b37b
--- /dev/null
+++ b/packages/netbase/netbase/ronetix-pm9263/interfaces
@@ -0,0 +1,72 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+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
+#
+#
+# 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.
+# This is the best option for non-roaming, single-network usage.
+# Note that your card may require a firmware update to use WPA.
+# Some distributions install a temporary volatile firmware update on ifup.
+#
+#iface wlan0 inet dhcp
+# wpa-essid some-essid
+# wpa-psk My-PlainText-Password
+#
+# A WPA1 or WPA2 encrypted connection using an external configuration file
+# for wpa-supplicant. This is the way to go if you need to configure multiple
+# networks with different keys and / or WPA settings and roaming support.
+#
+# iface wlan0 inet dhcp
+# wpa-conf /etc/wpa_supplicant.conf
+# wpa-driver hostap
+
+
+
+iface atml0 inet dhcp
+
+# Wired or wireless interfaces
+auto eth0
+iface eth0 inet static
+ address 192.168.0.184
+ netmask 255.255.255.0
+ network 192.168.0.0
+ gateway 192.168.0.1
+
+iface eth1 inet dhcp
+
+# Ethernet/RNDIS gadget (g_ether)
+# ... or on host side, usbnet and random hwaddr
+iface usb0 inet static
+ address 192.168.0.202
+ netmask 255.255.255.0
+ network 192.168.0.0
+ gateway 192.168.0.200
+
+# Bluetooth networking
+iface bnep0 inet dhcp
+
diff --git a/packages/netbase/netbase_4.21.bb b/packages/netbase/netbase_4.21.bb
index 9d5f2c6826..1437094b71 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 = "r30"
+PR = "r33"
inherit update-rc.d
@@ -16,15 +16,17 @@ INITSCRIPT_PARAMS_openmn = "start 85 1 2 3 4 5 . stop 85 0 6 1 ."
# Do not stop in single user - there's no way to sulogin!
INITSCRIPT_PARAMS_slugos = "start 42 S 0 6 ."
-SRC_URI = "${DEBIAN_MIRROR}/main/n/netbase/netbase_${PV}.tar.gz \
- file://options \
- file://init \
- file://hosts \
- file://interfaces \
- file://if-pre-up.d \
- file://if-up.d \
- file://if-down.d \
- file://if-post-down.d"
+SRC_URI = "\
+ http://developer.irexnet.com/pub/iOn/Sources/1.0/Third%20party/all/netbase-${PV}.tar.gz \
+ file://options \
+ file://init \
+ file://hosts \
+ 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
diff --git a/packages/networkmanager/cnetworkmanager_git.bb b/packages/networkmanager/cnetworkmanager_git.bb
new file mode 100644
index 0000000000..2a8ba64a2b
--- /dev/null
+++ b/packages/networkmanager/cnetworkmanager_git.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Command line interface for Network Manager"
+HOMEPAGE = "http://vidner.net/martin/software/cnetworkmanager/"
+LICENSE = "GPL"
+SECTION = "console/network"
+RDEPENDS = "python-core python-crypt python-dbus python-math python-pygobject python-re python-textutils python-uuid python-xml"
+PR = "r1"
+PV = "0.8+git"
+
+SRC_URI = "git://repo.or.cz/r/cnetworkmanager.git;protocol=http;tag=801f95b5fd856cd8ec25dc56839f47c1a12e6041"
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+}
+
+do_install(){
+ install -d ${D}${bindir}
+ install -m 755 cnetworkmanager ${D}${bindir}
+ install -d ${D}${sysconfdir}/dbus-1/system.d
+ install -m 644 cnetworkmanager.conf ${D}${sysconfdir}/dbus-1/system.d
+}
diff --git a/packages/networkmanager/files/008-BACKEND-debian-fallback-to-generic-loopback.loom.patch b/packages/networkmanager/files/008-BACKEND-debian-fallback-to-generic-loopback.loom.patch
new file mode 100644
index 0000000000..f29fa77979
--- /dev/null
+++ b/packages/networkmanager/files/008-BACKEND-debian-fallback-to-generic-loopback.loom.patch
@@ -0,0 +1,64 @@
+=== modified file 'ChangeLog'
+---
+ ChangeLog | 10 ++++++++++
+ src/backends/NetworkManagerDebian.c | 6 +++++-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+Index: network-manager-0.7~~svn20081015t024626/ChangeLog
+===================================================================
+--- network-manager-0.7~~svn20081015t024626.orig/ChangeLog
++++ network-manager-0.7~~svn20081015t024626/ChangeLog
+@@ -120,16 +120,26 @@
+
+ 2008-10-10 Tambet Ingo <tambet@gmail.com>
+
+ * src/nm-logging.c (nm_logging_setup): Don't use LOG_CONS when running as
+ a daemon to prevent NM logging spew on console on startup and shutdown (due
+ to dependency loop between NM and syslog).
+
+ 2008-10-10 Alexander Sack <asac@ubuntu.com>
++
++ Fallback to generic enable_loopback if /sbin/ifup isnt installed or
++ fails.
++ * src/backends/NetworkManagerDebian.c
++ - (nm_system_enable_loopback): test for /sbin/ifconfig binary
++ and fallback to nm_generic_enable_loopback if it
++ doesnt exist or when /sbin/ifconfig lo up fails for
++ whatever reason.
++
++2008-10-10 Alexander Sack <asac@ubuntu.com>
+
+ Implement managed mode. We bind devices configured in /etc/network/interfaces
+ to their connections by updating wired/wireless setting with the
+ mac address of the device.
+
+ * system-settings/plugins/ifupdown/plugin.c
+ - (get_net_address_for_udi): implement function to retrieve MAC
+ address of udi from hal in GByteArray format
+Index: network-manager-0.7~~svn20081015t024626/src/backends/NetworkManagerDebian.c
+===================================================================
+--- network-manager-0.7~~svn20081015t024626.orig/src/backends/NetworkManagerDebian.c
++++ network-manager-0.7~~svn20081015t024626/src/backends/NetworkManagerDebian.c
+@@ -39,17 +39,21 @@
+ /*
+ * nm_system_enable_loopback
+ *
+ * Bring up the loopback interface
+ *
+ */
+ void nm_system_enable_loopback (void)
+ {
+- nm_spawn_process ("/sbin/ifup lo");
++ // if wrapper fails we gonna try our own
++ if(!g_file_test ("/sbin/ifconfig", G_FILE_TEST_IS_EXECUTABLE) ||
++ nm_spawn_process ("/sbin/ifconfig lo up") != 0) {
++ nm_generic_enable_loopback ();
++ }
+ }
+
+ /*
+ * nm_system_update_dns
+ *
+ * Invalidate the nscd host cache, if it exists, since
+ * we changed resolv.conf.
+ *
diff --git a/packages/networkmanager/files/02-dbus_access_network_manager.patch b/packages/networkmanager/files/02-dbus_access_network_manager.patch
new file mode 100644
index 0000000000..7dc2ddd0eb
--- /dev/null
+++ b/packages/networkmanager/files/02-dbus_access_network_manager.patch
@@ -0,0 +1,14 @@
+diff -Nur bzr.debian.0.9.4.patchupdate/src/NetworkManager.conf bzr.debian.0.9.4.patchupdate.new/src/NetworkManager.conf
+--- bzr.debian.0.9.4.patchupdate/src/NetworkManager.conf 2007-06-25 17:14:46.000000000 +0200
++++ bzr.debian.0.9.4.patchupdate.new/src/NetworkManager.conf 2007-06-25 17:15:51.000000000 +0200
+@@ -8,6 +8,10 @@
+ <allow send_destination="org.freedesktop.NetworkManager"/>
+ <allow send_interface="org.freedesktop.NetworkManager"/>
+ </policy>
++ <policy user="haldaemon">
++ <allow send_destination="org.freedesktop.NetworkManager"/>
++ <allow send_interface="org.freedesktop.NetworkManager"/>
++ </policy>
+ <policy at_console="true">
+ <allow send_destination="org.freedesktop.NetworkManager"/>
+ <allow send_interface="org.freedesktop.NetworkManager"/>
diff --git a/packages/networkmanager/files/25NetworkManager b/packages/networkmanager/files/25NetworkManager
index 8e4dec167f..6b51bfa843 100644
--- a/packages/networkmanager/files/25NetworkManager
+++ b/packages/networkmanager/files/25NetworkManager
@@ -14,8 +14,8 @@ case $1 in
'stop')
echo -n "Stopping NetworkManager daemon: NetworkManager"
- kill `ps |grep /usr/sbin/NetworkManagerDispatcher | grep -v grep | cut "-d " -f2`
- kill `ps |grep /usr/sbin/NetworkManager | grep -v grep | cut "-d " -f2`
+ kill `pidof NetworkManagerDispatcher`
+ kill `pidof NetworkManager`
echo "."
;;
diff --git a/packages/networkmanager/files/add_probe_for_v250_modems.patch b/packages/networkmanager/files/add_probe_for_v250_modems.patch
new file mode 100644
index 0000000000..011bf93d9d
--- /dev/null
+++ b/packages/networkmanager/files/add_probe_for_v250_modems.patch
@@ -0,0 +1,342 @@
+=== modified file 'src/Makefile.am'
+---
+ src/Makefile.am | 4 -
+ src/nm-hal-manager.c | 24 ++++++-
+ src/probe-modem.c | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/probe-modem.h | 29 ++++++++
+ 4 files changed, 220 insertions(+), 3 deletions(-)
+
+Index: network-manager.07.ubuntu/src/Makefile.am
+===================================================================
+--- network-manager.07.ubuntu.orig/src/Makefile.am
++++ network-manager.07.ubuntu/src/Makefile.am
+@@ -67,17 +67,19 @@
+ nm-cdma-device.h \
+ nm-hso-gsm-device.c \
+ nm-hso-gsm-device.h \
+ wpa.c \
+ wpa.h \
+ nm-netlink.c \
+ nm-netlink.h \
+ nm-dhcp4-config.c \
+- nm-dhcp4-config.h
++ nm-dhcp4-config.h \
++ probe-modem.c \
++ probe-modem.h
+
+ nm-access-point-glue.h: $(top_srcdir)/introspection/nm-access-point.xml
+ dbus-binding-tool --prefix=nm_access_point --mode=glib-server --output=$@ $<
+
+ nm-manager-glue.h: $(top_srcdir)/introspection/nm-manager.xml
+ dbus-binding-tool --prefix=nm_manager --mode=glib-server --output=$@ $<
+
+ nm-device-interface-glue.h: $(top_srcdir)/introspection/nm-device.xml
+Index: network-manager.07.ubuntu/src/nm-hal-manager.c
+===================================================================
+--- network-manager.07.ubuntu.orig/src/nm-hal-manager.c
++++ network-manager.07.ubuntu/src/nm-hal-manager.c
+@@ -12,16 +12,19 @@
+ #include "nm-dbus-manager.h"
+ #include "nm-utils.h"
+ #include "nm-device-wifi.h"
+ #include "nm-device-ethernet.h"
+ #include "nm-gsm-device.h"
+ #include "nm-hso-gsm-device.h"
+ #include "nm-cdma-device.h"
+
++#include "probe-modem.h"
++
++
+ /* Killswitch poll frequency in seconds */
+ #define RFKILL_POLL_FREQUENCY 6
+
+ #define HAL_DBUS_SERVICE "org.freedesktop.Hal"
+
+ typedef struct {
+ LibHalContext *hal_ctx;
+ NMDBusManager *dbus_mgr;
+@@ -269,43 +272,51 @@
+ modem_device_creator (NMHalManager *self, const char *udi, gboolean managed)
+ {
+ NMHalManagerPrivate *priv = NM_HAL_MANAGER_GET_PRIVATE (self);
+ char *serial_device;
+ char *parent_udi;
+ char *driver_name = NULL;
+ GObject *device = NULL;
+ char **capabilities, **iter;
+- gboolean type_gsm = FALSE;
+- gboolean type_cdma = FALSE;
++ gboolean type_gsm;
++ gboolean type_cdma;
++ gboolean type_v250;
+ char *netdev = NULL;
+
+ serial_device = libhal_device_get_property_string (priv->hal_ctx, udi, "serial.device", NULL);
+
+ /* Get the driver */
+ parent_udi = libhal_device_get_property_string (priv->hal_ctx, udi, "info.parent", NULL);
+ if (parent_udi) {
+ driver_name = libhal_device_get_property_string (priv->hal_ctx, parent_udi, "info.linux.driver", NULL);
+ libhal_free_string (parent_udi);
+ }
+
+ if (!serial_device || !driver_name)
+ goto out;
+
++ type_gsm = FALSE;
++ type_cdma = FALSE;
++ type_v250 = FALSE;
+ capabilities = libhal_device_get_property_strlist (priv->hal_ctx, udi, "modem.command_sets", NULL);
+ /* 'capabilites' may be NULL */
+ for (iter = capabilities; iter && *iter; iter++) {
+ if (!strcmp (*iter, "GSM-07.07")) {
+ type_gsm = TRUE;
+ break;
+ }
+ if (!strcmp (*iter, "IS-707-A")) {
+ type_cdma = TRUE;
+ break;
+ }
++ if (!strcmp (*iter, "V.250")) {
++ type_v250 = TRUE;
++ /* no break here! */
++ }
+ }
+ g_strfreev (capabilities);
+
+ /* Compatiblity with the pre-specification bits */
+ if (!type_gsm && !type_cdma) {
+ capabilities = libhal_device_get_property_strlist (priv->hal_ctx, udi, "info.capabilities", NULL);
+ for (iter = capabilities; *iter; iter++) {
+ if (!strcmp (*iter, "gsm")) {
+@@ -315,16 +326,25 @@
+ if (!strcmp (*iter, "cdma")) {
+ type_cdma = TRUE;
+ break;
+ }
+ }
+ g_strfreev (capabilities);
+ }
+
++ /* V.250 probe */
++ if (!type_gsm && !type_cdma && type_v250) {
++ gint probed_type = probe_modem (serial_device, udi, priv->hal_ctx);
++ if (probed_type == 1)
++ type_gsm = TRUE;
++ else if (probed_type == 2)
++ type_cdma = TRUE;
++ }
++
+ /* Special handling of 'hso' cards (until punted out to a modem manager) */
+ if (type_gsm && !strcmp (driver_name, "hso"))
+ netdev = get_hso_netdev (priv->hal_ctx, udi);
+
+ if (type_gsm) {
+ if (netdev)
+ device = (GObject *) nm_hso_gsm_device_new (udi, serial_device + strlen ("/dev/"), NULL, netdev, driver_name, managed);
+ else
+Index: network-manager.07.ubuntu/src/probe-modem.c
+===================================================================
+--- /dev/null
++++ network-manager.07.ubuntu/src/probe-modem.c
+@@ -0,0 +1,166 @@
++/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
++/* Probe modem capabilities
++ *
++ * Copyright (c) 2008 Vitja Makarov, <vitja.makarov@gmail.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.
++ *
++ */
++
++#include <termios.h>
++#include <unistd.h>
++#include <fcntl.h>
++#include <errno.h>
++
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++
++#include "nm-utils.h"
++#include "probe-modem.h"
++
++
++#define MODEM_CAP_GSM 0x0001 /* GSM commands */
++#define MODEM_CAP_IS707_A 0x0002 /* CDMA circuit switched data commands */
++#define MODEM_CAP_DS 0x0004 /* data compression */
++#define MODEM_CAP_ES 0x0008 /* error control */
++#define MODEM_CAP_FCLASS 0x0010 /* Fax commands */
++#define MODEM_CAP_MS 0x0020 /* Modulation control commands */
++#define MODEM_CAP_W 0x0040 /* Wireless commands */
++
++struct modem_caps {
++ char *name;
++ int bits;
++};
++
++static struct modem_caps modem_caps[] = {
++ {"+CGSM", MODEM_CAP_GSM},
++ /* TODO: are they the same? */
++ {"+CIS707-A", MODEM_CAP_IS707_A},
++ {"+CIS707", MODEM_CAP_IS707_A},
++ {"+CIS707P", MODEM_CAP_IS707_A},
++ {NULL}
++} ;
++
++#define AT_CAPS_PROBE "AT+GCAP\r\n"
++
++static int modem_probe_caps(int fd)
++{
++ char buf[200];
++ char *ptr, *field = NULL;
++ int err, ret = 0;
++
++ err = write(fd, AT_CAPS_PROBE, sizeof(AT_CAPS_PROBE) - 1);
++
++ if (err != sizeof(AT_CAPS_PROBE) - 1)
++ return -1;
++
++ /* 100ms is enough for modem to send all the data */
++ usleep(100000);
++
++ err = read(fd, buf, sizeof(buf) - 1);
++ if (err <= 0)
++ return -1;
++ buf[err] = 0;
++
++ /* check okay reply */
++ ptr = strstr(buf, "\r\nOK\r\n");
++ if (!ptr)
++ return -1;
++ *ptr = 0;
++
++ /* find +GCAP: string */
++ ptr = strstr(buf, "\r\n+GCAP:");
++
++ if (ptr == NULL)
++ return -1;
++ ptr += 8;
++
++ /* and parse it */
++ do {
++ err = *ptr == '\0' || *ptr == '\r' || *ptr == '\n';
++ if (*ptr == ' ' || *ptr == ',' || err) {
++ *ptr = 0;
++ if (field) {
++ struct modem_caps *cap = modem_caps;
++
++ while (cap->name) {
++ if (!strcmp(cap->name, field))
++ ret |= cap->bits;
++ cap++;
++ }
++ }
++ field = NULL;
++ } else if (NULL == field) {
++ field = ptr;
++ }
++ ptr++;
++ } while (!err);
++
++ return ret;
++}
++
++int probe_modem (const char* device, const char *udi, LibHalContext *ctx)
++{
++ struct termios orig, attrs;
++ int fd, caps;
++ int rv = -1;
++
++ fd = open(device, O_RDWR|O_NDELAY);
++
++ if (-1 == fd) {
++ nm_warning ("open(%s): %s", device, strerror(errno));
++ return rv;
++ }
++
++ if (tcgetattr(fd, &orig))
++ goto close_and_out;
++
++ memcpy(&attrs, &orig, sizeof(attrs));
++ attrs.c_iflag &= ~(IGNCR | ICRNL | IUCLC | INPCK | IXON | IXANY | IGNPAR);
++ attrs.c_oflag &= ~(OPOST | OLCUC | OCRNL | ONLCR | ONLRET);
++ attrs.c_lflag &= ~(ICANON | XCASE | ECHO | ECHOE | ECHONL);
++ attrs.c_lflag &= ~(ECHO | ECHOE);
++ attrs.c_cc[VMIN] = 1;
++ attrs.c_cc[VTIME] = 0;
++ attrs.c_cc[VEOF] = 1;
++
++ tcsetattr(fd, TCSANOW, &attrs);
++ caps = modem_probe_caps(fd);
++ tcsetattr(fd, TCSANOW, &orig);
++
++ if (caps < 0) {
++ nm_debug("Couldn't get caps");
++ goto close_and_out;
++ }
++
++ if (caps & MODEM_CAP_GSM) {
++ nm_debug("Found GSM modem");
++ rv = 1;
++ goto close_and_out;
++ }
++
++ if (caps & MODEM_CAP_IS707_A) {
++ nm_debug("Found CDMA modem");
++ rv = 2;
++ goto close_and_out;
++ }
++
++ rv = 0;
++
++close_and_out:
++ close (fd);
++ return rv;
++}
+Index: network-manager.07.ubuntu/src/probe-modem.h
+===================================================================
+--- /dev/null
++++ network-manager.07.ubuntu/src/probe-modem.h
+@@ -0,0 +1,29 @@
++/* Copyright (c) 2008 Antti Kaijanmäki, <antti@kaijanmaki.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 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 PROBE_MODEM_H
++#define PROBE_MODEM_H
++
++
++#include <glib.h>
++#include <libhal.h>
++
++/* returns '1' if properties were changed */
++int probe_modem (const char* device, const char* udi, LibHalContext *ctx);
++
++#endif /* PROBE_MODEM_H */
diff --git a/packages/networkmanager/files/adding_no_scan_by_default.patch b/packages/networkmanager/files/adding_no_scan_by_default.patch
new file mode 100644
index 0000000000..31682c5c29
--- /dev/null
+++ b/packages/networkmanager/files/adding_no_scan_by_default.patch
@@ -0,0 +1,12 @@
+Index: NetworkManager-0.6.6/initscript/Debian/NetworkManager
+===================================================================
+--- NetworkManager-0.6.6.orig/initscript/Debian/NetworkManager 2008-09-03 17:44:23.000000000 -0300
++++ NetworkManager-0.6.6/initscript/Debian/NetworkManager 2008-09-03 18:01:35.000000000 -0300
+@@ -18,6 +18,7 @@
+ DESC="Network connection manager daemon"
+ NAME="NetworkManager"
+ DAEMON=/usr/sbin/$NAME
++DAEMON_OPTS=--no-scan
+ PIDFILE=/var/run/$NAME.pid
+ SCRIPTNAME=/etc/init.d/$NAME
+ USER=root
diff --git a/packages/networkmanager/files/avoid_frequent_scan.patch b/packages/networkmanager/files/avoid_frequent_scan.patch
new file mode 100644
index 0000000000..43f84f7674
--- /dev/null
+++ b/packages/networkmanager/files/avoid_frequent_scan.patch
@@ -0,0 +1,226 @@
+Index: NetworkManager-0.6.6/src/nm-device-802-11-wireless.c
+===================================================================
+--- NetworkManager-0.6.6.orig/src/nm-device-802-11-wireless.c 2008-09-05 15:01:32.000000000 -0300
++++ NetworkManager-0.6.6/src/nm-device-802-11-wireless.c 2008-09-08 11:37:23.000000000 -0300
+@@ -624,9 +624,12 @@
+ NMDevice80211Wireless * self = NM_DEVICE_802_11_WIRELESS (dev);
+ GSource * source;
+ guint source_id;
++ NMData * app_data;
++
++ app_data = nm_device_get_app_data (NM_DEVICE (self));
+
+ /* Start the scanning timeout for devices that can do scanning */
+- if (nm_device_get_capabilities (dev) & NM_DEVICE_CAP_WIRELESS_SCAN) {
++ if (!app_data->no_scan && nm_device_get_capabilities (dev) & NM_DEVICE_CAP_WIRELESS_SCAN) {
+ /* Stupid orinoco has problems scanning immediately after being up,
+ * so wait a bit before triggering a scan.
+ */
+@@ -1063,9 +1066,14 @@
+ NMWirelessScanInterval interval)
+ {
+ guint8 seconds = nm_wireless_scan_interval_to_seconds (interval);
++ NMData *app_data;
+
+ g_return_if_fail (self != NULL);
+
++ app_data = nm_device_get_app_data (NM_DEVICE (self));
++ if (app_data->no_scan)
++ return;
++
+ self->priv->scan_interval = seconds;
+
+ if (interval == NM_WIRELESS_SCAN_INTERVAL_ACTIVE && !self->priv->scanning) {
+@@ -1974,9 +1982,13 @@
+ scan_results_timeout (NMDevice80211Wireless *self)
+ {
+ GTimeVal cur_time;
++ NMData * app_data;
+
+ g_return_val_if_fail (self != NULL, FALSE);
+
++ app_data = nm_device_get_app_data (NM_DEVICE (self));
++ g_assert (app_data);
++
+ request_and_convert_scan_results (self);
+
+ self->priv->scanning = FALSE;
+@@ -1984,11 +1996,39 @@
+ g_get_current_time (&cur_time);
+ self->priv->last_scan = cur_time.tv_sec;
+
+- /* After the first successful scan back down to the ACTIVE scan interval */
+- if (self->priv->scan_interval == nm_wireless_scan_interval_to_seconds (NM_WIRELESS_SCAN_INTERVAL_INIT))
+- nm_device_802_11_wireless_set_scan_interval (self, NM_WIRELESS_SCAN_INTERVAL_ACTIVE);
+- else
+- schedule_scan (self, 0);
++ if (!app_data->no_scan)
++ {
++ /* After the first successful scan back down to the ACTIVE scan interval */
++ if (self->priv->scan_interval == nm_wireless_scan_interval_to_seconds (NM_WIRELESS_SCAN_INTERVAL_INIT))
++ nm_device_802_11_wireless_set_scan_interval (self, NM_WIRELESS_SCAN_INTERVAL_ACTIVE);
++ else
++ schedule_scan (self, 0);
++ }
++ else
++ {
++ /* If we're in "no scan" mode, lets always signalize that we've performed a scan */
++ DBusMessage *message;
++ char *dev_path = NULL;
++
++ if (!(dev_path = nm_dbus_get_object_path_for_device (NM_DEVICE (self))))
++ goto out;
++
++ if (!(message = dbus_message_new_signal (NM_DBUS_PATH, NM_DBUS_INTERFACE, "ScanPerformed")))
++ {
++ nm_warning ("scan_results_timeout(): Not enough memory for new dbus message!");
++ goto out;
++ }
++
++ dbus_message_append_args (message, DBUS_TYPE_OBJECT_PATH, &dev_path, DBUS_TYPE_INVALID);
++
++ if (!dbus_connection_send (app_data->dbus_connection, message, NULL))
++ nm_warning ("scan_results_timeout(): Could not raise the ScanPerformed signal!");
++
++ dbus_message_unref (message);
++
++out:
++ g_free (dev_path);
++ }
+
+ return FALSE;
+ }
+@@ -2134,7 +2174,7 @@
+ }
+ schedule_scan_results_timeout (self, 10);
+ }
+- return FALSE;
++ return TRUE;
+
+ reschedule:
+ schedule_scan (self, 0);
+@@ -2156,6 +2196,13 @@
+ }
+
+
++gboolean
++nm_device_802_11_wireless_perform_scan (NMDevice80211Wireless *self)
++{
++ return nm_device_802_11_wireless_scan ((gpointer) self);
++}
++
++
+ /*
+ * schedule_scan
+ *
+Index: NetworkManager-0.6.6/src/NetworkManager.c
+===================================================================
+--- NetworkManager-0.6.6.orig/src/NetworkManager.c 2008-03-06 17:14:39.000000000 -0300
++++ NetworkManager-0.6.6/src/NetworkManager.c 2008-09-05 15:01:32.000000000 -0300
+@@ -929,6 +929,7 @@
+ gboolean become_daemon = FALSE;
+ gboolean enable_test_devices = FALSE;
+ gboolean show_usage = FALSE;
++ gboolean no_scan = FALSE;
+ char * owner;
+ char * pidfile = NULL;
+ char * user_pidfile = NULL;
+@@ -951,6 +952,7 @@
+ {"pid-file", 0, 0, G_OPTION_ARG_STRING, &user_pidfile, "Specify the location of a PID file", NULL},
+ {"enable-test-devices", 0, 0, G_OPTION_ARG_NONE, &enable_test_devices, "Allow dummy devices to be created via DBUS methods [DEBUG]", NULL},
+ {"info", 0, 0, G_OPTION_ARG_NONE, &show_usage, "Show application information", NULL},
++ {"no-scan", 0, 0, G_OPTION_ARG_NONE, &no_scan, "Prevent background scan", NULL},
+ {NULL}
+ };
+ opt_ctx = g_option_context_new("");
+@@ -1009,6 +1011,8 @@
+ exit (EXIT_FAILURE);
+ }
+
++ nm_data->no_scan = no_scan;
++
+ /* Create our dbus service */
+ nm_data->dbus_connection = nm_dbus_init (nm_data);
+ if (!nm_data->dbus_connection)
+Index: NetworkManager-0.6.6/src/NetworkManagerMain.h
+===================================================================
+--- NetworkManager-0.6.6.orig/src/NetworkManagerMain.h 2008-03-06 17:14:39.000000000 -0300
++++ NetworkManager-0.6.6/src/NetworkManagerMain.h 2008-09-05 15:01:32.000000000 -0300
+@@ -87,6 +87,7 @@
+ gboolean modem_active;
+ gboolean asleep;
+ gboolean disconnected;
++ gboolean no_scan;
+
+ GSList * dialup_list;
+ GMutex * dialup_list_mutex;
+Index: NetworkManager-0.6.6/src/nm-dbus-device.c
+===================================================================
+--- NetworkManager-0.6.6.orig/src/nm-dbus-device.c 2008-03-06 17:14:39.000000000 -0300
++++ NetworkManager-0.6.6/src/nm-dbus-device.c 2008-09-08 15:12:43.000000000 -0300
+@@ -500,6 +500,44 @@
+ }
+
+
++static DBusMessage *nm_dbus_device_perform_scan (DBusConnection *connection, DBusMessage *message, NMDbusCBData *data)
++{
++ NMDevice *dev;
++ DBusMessage *reply = NULL;
++ NMData * app_data;
++
++ g_return_val_if_fail (data && data->data && data->dev && connection && message, NULL);
++
++ dev = data->dev;
++
++ app_data = nm_device_get_app_data (NM_DEVICE (dev));
++ if (!app_data->no_scan)
++ {
++ nm_warning ("You cannot ask for a scan if you're not in 'No scan' mode");
++ reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "Cannot perform scan", "You cannot ask for a scan if you're not in 'No scan' mode");
++ goto out;
++ }
++
++ if (!nm_device_is_802_11_wireless (dev))
++ {
++ reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "DeviceNotWireless",
++ "Wired devices cannot scan for wireless networks.");
++ goto out;
++ }
++
++ if (nm_device_802_11_wireless_perform_scan ((NMDevice80211Wireless *) dev))
++ reply = dbus_message_new_method_return (message); /* Success */
++ else
++ reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "Cannot perform scan", "The device cannot perform network scanning.");
++
++out:
++ if (!reply)
++ nm_warning ("Could not allocate dbus message.");
++
++ return reply;
++}
++
++
+ /*
+ * nm_dbus_device_methods_setup
+ *
+@@ -523,6 +561,7 @@
+ nm_dbus_method_list_add_method (list, "setLinkActive", nm_dbus_device_set_link_active);
+ nm_dbus_method_list_add_method (list, "getCapabilities", nm_dbus_device_get_capabilities);
+ nm_dbus_method_list_add_method (list, "getDriver", nm_dbus_device_get_driver);
++ nm_dbus_method_list_add_method (list, "performScan", nm_dbus_device_perform_scan);
+
+ return (list);
+ }
+Index: NetworkManager-0.6.6/src/nm-device-802-11-wireless.h
+===================================================================
+--- NetworkManager-0.6.6.orig/src/nm-device-802-11-wireless.h 2008-03-06 17:14:39.000000000 -0300
++++ NetworkManager-0.6.6/src/nm-device-802-11-wireless.h 2008-09-05 15:01:32.000000000 -0300
+@@ -110,6 +110,8 @@
+
+ gint8 nm_device_802_11_wireless_get_signal_strength (NMDevice80211Wireless *self);
+
++gboolean nm_device_802_11_wireless_perform_scan (NMDevice80211Wireless *self);
++
+
+ G_END_DECLS
+
diff --git a/packages/networkmanager/files/cx3110_bring_up.patch b/packages/networkmanager/files/cx3110_bring_up.patch
new file mode 100644
index 0000000000..3317ff6479
--- /dev/null
+++ b/packages/networkmanager/files/cx3110_bring_up.patch
@@ -0,0 +1,19 @@
+Index: NetworkManager-0.6.6/src/nm-device-802-11-wireless.c
+===================================================================
+--- NetworkManager-0.6.6.orig/src/nm-device-802-11-wireless.c 2008-09-03 15:10:43.000000000 -0300
++++ NetworkManager-0.6.6/src/nm-device-802-11-wireless.c 2008-09-03 15:27:23.000000000 -0300
+@@ -295,6 +295,14 @@
+ guint32 caps = NM_DEVICE_CAP_NONE;
+ iwrange range;
+ struct iwreq wrq;
++ NMDevice80211Wireless *self = NM_DEVICE_802_11_WIRELESS (dev);
++
++ /* The cx3110 driver has to be UP in order to get its capabilities. */
++ if (!self->priv->is_initialized) {
++ const char *kernel_driver = nm_device_get_driver (dev);
++ if (nm_null_safe_strcmp("cx3110", kernel_driver))
++ nm_device_bring_up (dev);
++ }
+
+ /* Check for Wireless Extensions support >= 16 for wireless devices */
+
diff --git a/packages/networkmanager/files/define_kernel_types_for_old_linux_headers.patch b/packages/networkmanager/files/define_kernel_types_for_old_linux_headers.patch
new file mode 100644
index 0000000000..cc966f453d
--- /dev/null
+++ b/packages/networkmanager/files/define_kernel_types_for_old_linux_headers.patch
@@ -0,0 +1,15 @@
+Index: trunk/src/nm-device-802-3-ethernet.c
+===================================================================
+--- trunk.orig/src/nm-device-802-3-ethernet.c 2008-05-07 11:06:53.000000000 -0300
++++ trunk/src/nm-device-802-3-ethernet.c 2008-09-04 15:03:11.000000000 -0300
+@@ -28,6 +28,10 @@
+ #include <net/ethernet.h>
+ #include <stdlib.h>
+ #include <linux/sockios.h>
++typedef unsigned long long u64;
++typedef unsigned int u32;
++typedef unsigned short u16;
++typedef unsigned char u8;
+ #include <linux/ethtool.h>
+ #include <sys/ioctl.h>
+ #include <unistd.h>
diff --git a/packages/networkmanager/files/define_kernel_types_for_old_linux_headers_and_warn_functions_from_glib_2_16.patch b/packages/networkmanager/files/define_kernel_types_for_old_linux_headers_and_warn_functions_from_glib_2_16.patch
new file mode 100644
index 0000000000..e6a2a537ce
--- /dev/null
+++ b/packages/networkmanager/files/define_kernel_types_for_old_linux_headers_and_warn_functions_from_glib_2_16.patch
@@ -0,0 +1,57 @@
+Index: trunk/src/nm-device-ethernet.c
+===================================================================
+--- trunk.orig/src/nm-device-ethernet.c 2008-08-21 18:44:59.000000000 -0300
++++ trunk/src/nm-device-ethernet.c 2008-08-21 18:44:59.000000000 -0300
+@@ -28,6 +28,10 @@
+ #include <net/ethernet.h>
+ #include <stdlib.h>
+ #include <linux/sockios.h>
++typedef unsigned long long u64;
++typedef unsigned int u32;
++typedef unsigned short u16;
++typedef unsigned char u8;
+ #include <linux/ethtool.h>
+ #include <sys/ioctl.h>
+ #include <unistd.h>
+Index: trunk/src/nm-device-wifi.c
+===================================================================
+--- trunk.orig/src/nm-device-wifi.c 2008-08-21 18:54:24.000000000 -0300
++++ trunk/src/nm-device-wifi.c 2008-08-21 19:17:17.000000000 -0300
+@@ -165,6 +165,9 @@
+ gboolean has_scan_capa_ssid;
+ };
+
++#define g_warn_if_fail(expr) do { if G_LIKELY (expr) ; else \
++ g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); } while (0)
++
+ static guint32 nm_device_wifi_get_frequency (NMDeviceWifi *self);
+
+ static void nm_device_wifi_set_ssid (NMDeviceWifi *self, const GByteArray * ssid);
+@@ -220,6 +223,27 @@
+ const GValue *handler_return,
+ gpointer data);
+
++void
++g_warn_message (const char *domain,
++ const char *file,
++ int line,
++ const char *func,
++ const char *warnexpr)
++{
++ char *s, lstr[32];
++ g_snprintf (lstr, 32, "%d", line);
++ if (warnexpr)
++ s = g_strconcat ("(", file, ":", lstr, "):",
++ func, func[0] ? ":" : "",
++ " runtime check failed: (", warnexpr, ")", NULL);
++ else
++ s = g_strconcat ("(", file, ":", lstr, "):",
++ func, func[0] ? ":" : "",
++ " ", "code should not be reached", NULL);
++ g_log (domain, G_LOG_LEVEL_WARNING, "%s", s);
++ g_free (s);
++}
++
+ static GQuark
+ nm_wifi_error_quark (void)
+ {
diff --git a/packages/networkmanager/files/fix_seg_fault.patch b/packages/networkmanager/files/fix_seg_fault.patch
new file mode 100644
index 0000000000..679ca8e172
--- /dev/null
+++ b/packages/networkmanager/files/fix_seg_fault.patch
@@ -0,0 +1,13 @@
+Index: NetworkManager-0.6.6/src/nm-device-802-11-wireless.c
+===================================================================
+--- NetworkManager-0.6.6.orig/src/nm-device-802-11-wireless.c 2008-03-06 17:14:39.000000000 -0300
++++ NetworkManager-0.6.6/src/nm-device-802-11-wireless.c 2008-08-26 13:53:22.000000000 -0300
+@@ -944,6 +944,8 @@
+ /* If we didn't get any security info, make some up. */
+ if (!security)
+ security = nm_ap_security_new_from_ap (ap);
++ else
++ g_object_ref (security);
+ }
+ g_assert (security);
+ nm_ap_set_security (ap, security);
diff --git a/packages/networkmanager/files/mamona/25NetworkManager b/packages/networkmanager/files/mamona/25NetworkManager
new file mode 100644
index 0000000000..606d2bc33d
--- /dev/null
+++ b/packages/networkmanager/files/mamona/25NetworkManager
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# NetworkManager startup script
+
+. /etc/profile
+
+case $1 in
+ 'start')
+ echo -n "Starting NetworkManager daemon: NetworkManager"
+ /usr/sbin/NetworkManager --no-scan
+ /usr/sbin/NetworkManagerDispatcher
+ echo "."
+ ;;
+
+ 'stop')
+ echo -n "Stopping NetworkManager daemon: NetworkManager"
+ kill `pidof NetworkManagerDispatcher`
+ kill `pidof NetworkManager`
+ echo "."
+ ;;
+
+ 'restart')
+ $0 stop
+ $0 start
+ ;;
+
+ *)
+ echo "Usage: $0 { start | stop | restart }"
+ ;;
+esac
diff --git a/packages/networkmanager/files/remove-gtk-doc-make.patch b/packages/networkmanager/files/remove-gtk-doc-make.patch
new file mode 100644
index 0000000000..b4137c69a7
--- /dev/null
+++ b/packages/networkmanager/files/remove-gtk-doc-make.patch
@@ -0,0 +1,11 @@
+Index: trunk/docs/libnm-glib/Makefile.am
+===================================================================
+--- trunk.orig/docs/libnm-glib/Makefile.am 2008-11-17 19:37:20.000000000 -0300
++++ trunk/docs/libnm-glib/Makefile.am 2008-11-17 19:37:30.000000000 -0300
+@@ -75,5 +75,5 @@
+
+
+ # include common portion ...
+-include $(top_srcdir)/gtk-doc.make
++#include $(top_srcdir)/gtk-doc.make
+
diff --git a/packages/networkmanager/netm-cli-0.2/scan_support.patch b/packages/networkmanager/netm-cli-0.2/scan_support.patch
new file mode 100644
index 0000000000..efa3cd89b4
--- /dev/null
+++ b/packages/networkmanager/netm-cli-0.2/scan_support.patch
@@ -0,0 +1,69 @@
+diff --git a/netm-cli/netm-cli b/netm-cli/netm-cli
+index 46c3fa6..0a53036 100755
+--- a/netm-cli/netm-cli
++++ b/netm-cli/netm-cli
+@@ -29,6 +29,7 @@ __version__ = "0.2"
+ import dbus
+ import gobject
+ import os
++import sys
+ from dbus.mainloop.glib import DBusGMainLoop
+ from ConfigParser import ConfigParser
+ from optparse import OptionParser, OptionGroup
+@@ -499,6 +500,14 @@ class NMCLI:
+ self._we_cipher, self._hexkey,
+ self._wpa_version, self._key_mgmt)
+
++ def scan(self):
++ """Scan the network and update the NM device struct."""
++ for devname in self.devices:
++ device = self.devices[devname]
++ if device['type'] == DEVICE_TYPE_802_11_WIRELESS:
++ devobj = self.bus.get_object(NM_DBUS_SERVICE, device['path'])
++ devobj.performScan()
++
+ def sleep(self):
+ """Tell NetworkManager to go into offline mode mode."""
+ self.nm.sleep(ignore_reply=True)
+@@ -782,7 +791,33 @@ def main():
+ nm = NMCLI(device, essid, hexkey, contype, wep_alg, wpa_pairwise,
+ options.verbose)
+
++ loop = gobject.MainLoop()
++
+ # Main actions
++ if options.networks:
++ print "Performing scan...",
++ sys.stdout.flush()
++ devices = [nm.devices[dev]['path'] for dev in nm.devices if
++ nm.devices[dev]['type'] == DEVICE_TYPE_802_11_WIRELESS]
++
++ def scan_performed(device):
++ """Scan helper."""
++ if device in devices:
++ devices.remove(device)
++ if not devices:
++ loop.quit()
++
++ nm.bus.add_signal_receiver(
++ handler_function=scan_performed, signal_name="ScanPerformed",
++ path=NM_DBUS_PATH, dbus_interface=NM_DBUS_INTERFACE)
++ nm.scan()
++ loop.run()
++ nm.bus.remove_signal_receiver(
++ handler_or_match=scan_performed, signal_name="ScanPerformed",
++ path=NM_DBUS_PATH, dbus_interface=NM_DBUS_INTERFACE)
++ print "OK"
++ sys.stdout.flush()
++ nm.update_devices()
+ if options.monitor:
+ nm.set_signals()
+ if options.nmstatus:
+@@ -811,7 +846,6 @@ def main():
+ config.save()
+
+ if options.monitor:
+- loop = gobject.MainLoop()
+ loop.run()
+
+ # Run the program
diff --git a/packages/networkmanager/netm-cli_0.2.bb b/packages/networkmanager/netm-cli_0.2.bb
new file mode 100644
index 0000000000..9166c44a52
--- /dev/null
+++ b/packages/networkmanager/netm-cli_0.2.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Command Line interface for Network Manager"
+HOMEPAGE = "http://dev.openbossa.org/mamona/gitweb?p=users/salveti/netm-cli.git;a=summary"
+LICENSE = "GPLv2"
+SECTION = "console/network"
+RDEPENDS = "python-dbus python-pygobject python-textutils networkmanager (>=0.6) networkmanager (<0.7)"
+PR = "r3"
+
+inherit setuptools
+
+SRC_URI = "git://dev.openbossa.org/mamona/users/salveti/netm-cli.git;protocol=http;tag=netm-cli-${PV}"
+SRC_URI_append_mamona = " file://scan_support.patch;patch=1"
+
+S = "${WORKDIR}/git"
diff --git a/packages/networkmanager/netm-cli_git.bb b/packages/networkmanager/netm-cli_git.bb
new file mode 100644
index 0000000000..c85dc2e784
--- /dev/null
+++ b/packages/networkmanager/netm-cli_git.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Command Line interface for Network Manager"
+HOMEPAGE = "http://dev.openbossa.org/mamona/gitweb?p=users/salveti/netm-cli.git;a=summary"
+LICENSE = "GPLv2"
+SECTION = "console/network"
+RDEPENDS = "python-dbus python-pygobject python-textutils networkmanager (>= 0.7)"
+PR = "r3"
+PV = "0.3+git"
+
+inherit setuptools
+
+SRC_URI = "git://dev.openbossa.org/mamona/users/salveti/netm-cli.git;protocol=http"
+
+S = "${WORKDIR}/git"
+
+FILES_${PN} += "${sysconfdir}/dbus-1/system.d/netm-cli.conf"
diff --git a/packages/networkmanager/networkmanager-0.7.inc b/packages/networkmanager/networkmanager-0.7.inc
new file mode 100644
index 0000000000..f3927e8a1b
--- /dev/null
+++ b/packages/networkmanager/networkmanager-0.7.inc
@@ -0,0 +1,68 @@
+DESCRIPTION = "NetworkManager"
+SECTION = "net/misc"
+LICENSE = "GPL"
+PRIORITY = "optional"
+DEPENDS = "libnl dbus dbus-glib hal wireless-tools policykit gnutls e2fsprogs-libs ppp"
+RDEPENDS = "wpa-supplicant dhcp-client \
+ ${@base_contains('COMBINED_FEATURES', '3gmodem', 'ppp', '', d)} \
+ "
+
+EXTRA_OECONF = " \
+ --with-distro=debian \
+ --with-crypto=gnutls \
+ --disable-more-warnings"
+
+inherit autotools pkgconfig update-rc.d
+
+INITSCRIPT_NAME = "NetworkManager"
+INITSCRIPT_PARAMS = "defaults 28"
+
+do_stage () {
+ autotools_stage_all
+}
+
+do_install_append () {
+ install -d ${D}/etc/default/volatiles
+ install -d ${D}/etc/dbus-1/event.d
+ # Test binaries
+ install -d ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-tool ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/libnm_glib_test ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-online ${D}/usr/bin
+}
+
+pkg_postinst_${PN} () {
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ /etc/init.d/populate-volatile.sh update
+}
+
+PACKAGES =+ "libnmutil libnmglib libnmglib-vpn ${PN}-tests"
+
+FILES_libnmutil += "${libdir}/libnm-util.so.*"
+FILES_libnmglib += "${libdir}/libnm_glib.so.*"
+FILES_libnmglib-vpn += "${libdir}/libnm_glib_vpn.so.*"
+
+FILES_${PN} += " \
+ ${libexecdir} \
+ ${libdir}/pppd/*/nm-pppd-plugin.so \
+ ${libdir}/NetworkManager/*.so \
+ ${datadir}/PolicyKit \
+ ${datadir}/dbus-1"
+
+FILES_${PN}-dbg += "${libdir}/NetworkManager/.debug/ \
+ ${libdir}/pppd/*/.debug/ "
+
+FILES_${PN}-dev += "${datadir}/NetworkManager/gdb-cmd \
+ ${libdir}/pppd/*/*.a \
+ ${libdir}/pppd/*/*.la \
+ ${libdir}/NetworkManager/*.a \
+ ${libdir}/NetworkManager/*.la"
+
+FILES_${PN}-tests = "${bindir}/nm-tool \
+ ${bindir}/libnm_glib_test \
+ ${bindir}/nminfotest \
+ ${bindir}/nm-online \
+ ${bindir}/nm-supplicant \
+ ${bindir}/nm-testdevices"
diff --git a/packages/networkmanager/networkmanager-0.7/NetworkManager b/packages/networkmanager/networkmanager-0.7/NetworkManager
new file mode 100755
index 0000000000..4cde8cc003
--- /dev/null
+++ b/packages/networkmanager/networkmanager-0.7/NetworkManager
@@ -0,0 +1,69 @@
+#! /bin/sh
+#
+# NetworkManager NetworkManager daemon
+# Daemon for automatically switching network
+# connections to the best available connection.
+# This file should be placed in /etc/init.d.
+#
+# Authors: <j@bootlab.org>
+# Mark Roach <mrroach@okmaybe.com>
+# Thom May <thom@debian.org>
+#
+# Version: @(#)skeleton 2.85-23 28-Jul-2004 miquels@cistron.nl
+#
+
+set -e
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DESC="Network connection manager daemon"
+NAME="NetworkManager"
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+USER=root
+
+# Gracefully exit if the package has been removed.
+test -x $DAEMON || exit 0
+
+#
+# Function that starts the daemon/service.
+#
+d_start() {
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --user $USER --exec $DAEMON -- $DAEMON_OPTS
+}
+
+#
+# Function that stops the daemon/service.
+#
+d_stop() {
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+ --oknodo --user $USER --exec $DAEMON
+}
+
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: $NAME"
+ d_start
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: $NAME"
+ d_stop
+ echo "."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $DESC: $NAME"
+ d_stop
+ sleep 1
+ d_start
+ echo "."
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/networkmanager/networkmanager-0.7/cx3110_bring_up.patch b/packages/networkmanager/networkmanager-0.7/cx3110_bring_up.patch
new file mode 100644
index 0000000000..db420ce2ba
--- /dev/null
+++ b/packages/networkmanager/networkmanager-0.7/cx3110_bring_up.patch
@@ -0,0 +1,20 @@
+Index: NetworkManager-0.7.0/src/nm-device-wifi.c
+===================================================================
+--- NetworkManager-0.7.0.orig/src/nm-device-wifi.c
++++ NetworkManager-0.7.0/src/nm-device-wifi.c
+@@ -364,6 +364,15 @@ real_get_generic_capabilities (NMDevice
+ const char *iface = nm_device_get_iface (dev);
+ gboolean success;
+
++ /* The cx3110 driver has to be UP in order to get its capabilities. */
++ gboolean no_firmware = FALSE;
++ const char *driver = nm_device_get_driver (dev);
++ if (driver && !strcmp ("wlan-omap", driver) && !nm_system_device_is_up (dev)) {
++ if (!nm_device_hw_bring_up (dev, TRUE, &no_firmware))
++ nm_warning ("(%s): couldn't bring up interface to get capabilities.",
++ iface);
++ }
++
+ memset (&range, 0, sizeof (struct iw_range));
+ success = wireless_get_range (NM_DEVICE_WIFI (dev), &range, &response_len);
+ if (!success)
diff --git a/packages/networkmanager/networkmanager-0.7/disable_wireless_by_default.patch b/packages/networkmanager/networkmanager-0.7/disable_wireless_by_default.patch
new file mode 100644
index 0000000000..d194d96ea5
--- /dev/null
+++ b/packages/networkmanager/networkmanager-0.7/disable_wireless_by_default.patch
@@ -0,0 +1,22 @@
+Index: NetworkManager-0.7.0/src/nm-manager.c
+===================================================================
+--- NetworkManager-0.7.0.orig/src/nm-manager.c 2009-01-15 17:23:09.000000000 -0300
++++ NetworkManager-0.7.0/src/nm-manager.c 2009-01-15 17:32:36.000000000 -0300
+@@ -286,7 +286,7 @@
+ DBusGConnection *g_connection;
+ guint id;
+
+- priv->wireless_enabled = TRUE;
++ priv->wireless_enabled = FALSE;
+ priv->wireless_hw_enabled = TRUE;
+ priv->sleeping = FALSE;
+ priv->state = NM_STATE_DISCONNECTED;
+@@ -613,7 +613,7 @@
+ g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED,
+ "WirelessEnabled",
+ "Is wireless enabled",
+- TRUE,
++ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property
diff --git a/packages/networkmanager/networkmanager-0.7/nm-system-settings.conf b/packages/networkmanager/networkmanager-0.7/nm-system-settings.conf
new file mode 100644
index 0000000000..fb9ef1ff97
--- /dev/null
+++ b/packages/networkmanager/networkmanager-0.7/nm-system-settings.conf
@@ -0,0 +1,6 @@
+[main]
+plugins=ifupdown,keyfile
+
+[ifupdown]
+managed=true
+
diff --git a/packages/networkmanager/networkmanager-applet_0.6.6.bb b/packages/networkmanager/networkmanager-applet_0.6.6.bb
new file mode 100644
index 0000000000..b9adba70f7
--- /dev/null
+++ b/packages/networkmanager/networkmanager-applet_0.6.6.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "GTK+ applet for NetworkManager"
+LICENSE = "GPL"
+DEPENDS = "networkmanager dbus-glib libglade gconf gnome-keyring"
+#TODO DEPENDS libnotify
+RDEPENDS = "networkmanager"
+
+inherit gnome gtk-icon-cache
+
+SRC_URI = "http://people.redhat.com/dcbw/NetworkManager/0.6.6/nm-applet-0.6.6.tar.gz \
+ file://applet-no-gnome.diff;patch=1;pnum=0"
+
+FILES_${PN} += "${datadir}/nm-applet/ \
+ ${datadir}/gnome-vpn-properties/ \
+ ${datadir}/gnome/autostart/ \
+ "
diff --git a/packages/networkmanager/networkmanager-pre0.7.inc b/packages/networkmanager/networkmanager-pre0.7.inc
new file mode 100644
index 0000000000..e1b80919d5
--- /dev/null
+++ b/packages/networkmanager/networkmanager-pre0.7.inc
@@ -0,0 +1,79 @@
+DESCRIPTION = "NetworkManager"
+SECTION = "net/misc"
+LICENSE = "GPL"
+PRIORITY = "optional"
+DEPENDS = "libnl dbus dbus-glib hal wireless-tools ppp policykit gnutls"
+RDEPENDS = "hal wpa-supplicant iproute2 dhcp-client dhcdbd"
+
+# Providers that require this file MUST append the source to SRC_URI
+# These are just the common patches
+SRC_URI = " \
+ file://25NetworkManager \
+ file://99_networkmanager"
+
+S = "${WORKDIR}/git"
+
+
+EXTRA_OECONF = " \
+ --with-distro=debian \
+ --with-wpa_supplicant=/usr/sbin/wpa_supplicant \
+ --with-dhcdbd=/sbin/dhcdbd \
+ --with-ip=/sbin/ip.iproute2 \
+ --with-crypto=gnutls \
+ --disable-more-warnings"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
+
+do_install_append () {
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_networkmanager ${D}/etc/default/volatiles
+ install -d ${D}/etc/dbus-1/event.d
+ install -m 0755 ${WORKDIR}/25NetworkManager ${D}/etc/dbus-1/event.d
+ sed -i s,/sbin/ip,/sbin/ip.iproute2, ${D}/etc/init.d/NetworkManager
+ # Test binaries
+ install -d ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-tool ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/libnm_glib_test ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-online ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nmtestdevices ${D}/usr/bin
+}
+
+pkg_postinst_${PN} () {
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ /etc/init.d/populate-volatile.sh update
+}
+
+PACKAGES =+ "libnmutil libnmglib libnmglib-vpn ${PN}-tests"
+
+FILES_libnmutil += "${libdir}/libnm-util.so.*"
+FILES_libnmglib += "${libdir}/libnm_glib.so.*"
+FILES_libnmglib-vpn += "${libdir}/libnm_glib_vpn.so.*"
+
+FILES_${PN} += " \
+ ${libexecdir} \
+ ${libdir}/pppd/*/nm-pppd-plugin.so \
+ ${libdir}/NetworkManager/*.so \
+ ${datadir}/PolicyKit \
+ ${datadir}/dbus-1"
+
+FILES_${PN}-dbg += "${libdir}/NetworkManager/.debug/ \
+ ${libdir}/pppd/*/.debug/ "
+
+FILES_${PN}-dev += "${datadir}/NetworkManager/gdb-cmd \
+ ${libdir}/pppd/*/*.a \
+ ${libdir}/pppd/*/*.la \
+ ${libdir}/NetworkManager/*.a \
+ ${libdir}/NetworkManager/*.la"
+
+FILES_${PN}-tests = "${bindir}/nm-tool \
+ ${bindir}/libnm_glib_test \
+ ${bindir}/nminfotest \
+ ${bindir}/nm-online \
+ ${bindir}/nm-supplicant \
+ ${bindir}/nm-testdevices"
diff --git a/packages/networkmanager/networkmanager.inc b/packages/networkmanager/networkmanager.inc
index 2a0f28753f..ead854ca58 100644
--- a/packages/networkmanager/networkmanager.inc
+++ b/packages/networkmanager/networkmanager.inc
@@ -3,19 +3,18 @@ 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 = "r1"
+DEPENDS = "libnl dbus dbus-glib hal gconf-dbus wireless-tools ppp"
+RDEPENDS = "hal wpa-supplicant iproute2 dhcp-client dhcdbd"
SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.6/NetworkManager-${PV}.tar.bz2 \
- file://NetworkManager \
+ file://25NetworkManager \
file://99_networkmanager"
S = "${WORKDIR}/NetworkManager-${PV}/"
EXTRA_OECONF = " \
- --with-gnome \
+ --without-gnome \
--with-distro=debian \
--without-gcrypt \
--with-wpa_supplicant=/usr/sbin/wpa_supplicant \
@@ -28,26 +27,30 @@ 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}/
+do_install_append () {
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_networkmanager ${D}/etc/default/volatiles
+ install -d ${D}/etc/dbus-1/event.d
+ install -m 0755 ${WORKDIR}/25NetworkManager ${D}/etc/dbus-1/event.d
+ sed -i s,/sbin/ip,/sbin/ip.iproute2, ${D}/etc/init.d/NetworkManager
+ # Test binaries
+ install -d ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-tool ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/libnm_glib_test ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nminfotest ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-online ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nm-supplicant-test ${D}/usr/bin
+ install -m 0755 ${S}/test/.libs/nmtestdevices ${D}/usr/bin
}
pkg_postinst_${PN} () {
-if [ "x$D" != "x" ]; then
- exit 1
-fi
-/etc/init.d/populate-volatile.sh update
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ /etc/init.d/populate-volatile.sh update
}
-PACKAGES =+ "libnmutil libnmglib libnmglib-vpn"
+PACKAGES =+ "libnmutil libnmglib libnmglib-vpn ${PN}-tests"
FILES_libnmutil += "${libdir}/libnm-util.so.*"
FILES_libnmglib += "${libdir}/libnm_glib.so.*"
@@ -62,3 +65,9 @@ FILES_${PN}-dbg += "${libdir}/NetworkManager/.debug/ \
FILES_${PN}-dev += " ${datadir}/NetworkManager/gdb-cmd "
+FILES_${PN}-tests = "${bindir}/nm-tool \
+ ${bindir}/libnm_glib_test \
+ ${bindir}/nminfotest \
+ ${bindir}/nm-online \
+ ${bindir}/nm-supplicant \
+ ${bindir}/nm-testdevices"
diff --git a/packages/networkmanager/networkmanager_0.6.5.bb b/packages/networkmanager/networkmanager_0.6.5.bb
index 2817124887..9744820abd 100644
--- a/packages/networkmanager/networkmanager_0.6.5.bb
+++ b/packages/networkmanager/networkmanager_0.6.5.bb
@@ -1,10 +1,3 @@
require networkmanager.inc
-PR = "r2"
-
-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}/"
-
+PR = "r5"
diff --git a/packages/networkmanager/networkmanager_0.6.6.bb b/packages/networkmanager/networkmanager_0.6.6.bb
new file mode 100644
index 0000000000..03a573928a
--- /dev/null
+++ b/packages/networkmanager/networkmanager_0.6.6.bb
@@ -0,0 +1,19 @@
+require networkmanager.inc
+
+PR = "r7"
+
+# Release candidate for 0.6.6, Hosted in dcbw's redhat space.
+SRC_URI = "http://people.redhat.com/dcbw/NetworkManager/0.6.6/NetworkManager-0.6.6.tar.gz \
+ file://25NetworkManager \
+ file://99_networkmanager \
+ file://fix_seg_fault.patch;patch=1 \
+ "
+
+SRC_URI_append_mamona = " \
+ file://avoid_frequent_scan.patch;patch=1 \
+ file://adding_no_scan_by_default.patch;patch=1 \
+ "
+
+SRC_URI_append_nokia770 = " file://cx3110_bring_up.patch;patch=1 "
+SRC_URI_append_nokia800 = " file://cx3110_bring_up.patch;patch=1 "
+SRC_URI_append_nokia810 = " file://cx3110_bring_up.patch;patch=1 "
diff --git a/packages/networkmanager/networkmanager_0.7.bb b/packages/networkmanager/networkmanager_0.7.bb
new file mode 100644
index 0000000000..9c19be9139
--- /dev/null
+++ b/packages/networkmanager/networkmanager_0.7.bb
@@ -0,0 +1,25 @@
+require networkmanager-0.7.inc
+
+PV = "0.7"
+PR = "r10"
+
+SRC_URI += "http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.7/NetworkManager-0.7.0.tar.bz2 \
+ file://remove-gtk-doc-make.patch;patch=1 \
+ file://008-BACKEND-debian-fallback-to-generic-loopback.loom.patch;patch=1 \
+ file://02-dbus_access_network_manager.patch;patch=1 \
+ file://add_probe_for_v250_modems.patch;patch=1 \
+ file://cx3110_bring_up.patch;patch=1 \
+ file://nm-system-settings.conf \
+ file://NetworkManager \
+"
+
+SRC_URI_append_mamona += " file://disable_wireless_by_default.patch;patch=1 "
+
+S = "${WORKDIR}/NetworkManager-0.7.0"
+
+do_install_append () {
+ install -d ${D}/etc/NetworkManager/
+ install -m 0644 ${WORKDIR}/nm-system-settings.conf ${D}/etc/NetworkManager/
+ install -m 0755 ${WORKDIR}/NetworkManager ${D}/etc/init.d
+}
+
diff --git a/packages/networkmanager/networkmanager_0.7olpc.bb b/packages/networkmanager/networkmanager_0.7olpc.bb
new file mode 100644
index 0000000000..230360168d
--- /dev/null
+++ b/packages/networkmanager/networkmanager_0.7olpc.bb
@@ -0,0 +1,11 @@
+require networkmanager-pre0.7.inc
+
+PR = "r2"
+PV = "0.7olpc+git"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "git://dev.laptop.org/users/sjoerd/NetworkManager.git;protocol=git;branch=olpc-patches;tag=f1fa6c27710196b7327402c59b2c55d920a12bb0 \
+ file://define_kernel_types_for_old_linux_headers_and_warn_functions_from_glib_2_16.patch;patch=1 \
+ "
+S = "${WORKDIR}/git"
diff --git a/packages/networkmanager/networkmanager_svn.bb b/packages/networkmanager/networkmanager_svn.bb
index e6bd318063..4045b817de 100644
--- a/packages/networkmanager/networkmanager_svn.bb
+++ b/packages/networkmanager/networkmanager_svn.bb
@@ -1,57 +1,13 @@
-DESCRIPTION = "NetworkManager"
-SECTION = "net/misc"
-LICENSE = "GPL"
-HOMEPAGE = "http://www.gnome.org"
-PRIORITY = "optional"
-DEPENDS = "libnl dbus dbus-glib hal gconf-dbus wireless-tools ppp"
-RDEPENDS = "hal wpa-supplicant iproute2 dhcp-client"
+require networkmanager-pre0.7.inc
PV = "0.7+svnr${SRCREV}"
-PR = "r5"
+PR = "r1"
-SRC_URI="svn://svn.gnome.org/svn/NetworkManager/;module=trunk;proto=http \
- file://no-restarts.diff;patch=1;pnum=0 \
- file://25NetworkManager \
- file://99_networkmanager"
+DEFAULT_PREFERENCE = "-1"
-S = "${WORKDIR}/trunk"
-
-EXTRA_OECONF = " \
- --with-distro=debian \
- --with-ip=/sbin/ip.iproute2"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
-
-do_install_append () {
- install -d ${D}/etc/default/volatiles
- install -m 0644 ${WORKDIR}/99_networkmanager ${D}/etc/default/volatiles
- install -d ${D}/etc/dbus-1/event.d
- install -m 0755 ${WORKDIR}/25NetworkManager ${D}/etc/dbus-1/event.d
- sed -i s,/sbin/ip,/sbin/ip.iproute2, ${D}/etc/init.d/NetworkManager
-}
-
-pkg_postinst () {
- if [ "x$D" != "x" ]; then
- exit 1
- fi
- /etc/init.d/populate-volatile.sh update
-}
-
-PACKAGES =+ "libnmutil libnmglib libnmglib-vpn"
-
-FILES_libnmutil += "${libdir}/libnm-util.so.*"
-FILES_libnmglib += "${libdir}/libnm_glib.so.*"
-FILES_libnmglib-vpn += "${libdir}/libnm_glib_vpn.so.*"
-
-FILES_${PN} += " \
- ${libexecdir} \
- ${libdir}/pppd/*/nm-pppd-plugin.so \
- ${libdir}/NetworkManager/*.so"
-FILES_${PN}-dbg += "${libdir}/NetworkManager/.debug/ \
- ${libdir}/pppd/*/.debug/ "
-FILES_${PN}-dev += " ${datadir}/NetworkManager/gdb-cmd "
+SRC_URI += "svn://svn.gnome.org/svn/NetworkManager/;module=trunk;proto=http \
+ file://define_kernel_types_for_old_linux_headers.patch;patch=1 \
+ file://no-restarts.diff;patch=1;pnum=0 \
+ "
+S = "${WORKDIR}/trunk"
diff --git a/packages/nfs-utils/nfs-utils-1.1.2/nfs-utils-tools-unset-cflags.patch b/packages/nfs-utils/nfs-utils-1.1.2/nfs-utils-tools-unset-cflags.patch
new file mode 100644
index 0000000000..16bdebf12e
--- /dev/null
+++ b/packages/nfs-utils/nfs-utils-1.1.2/nfs-utils-tools-unset-cflags.patch
@@ -0,0 +1,92 @@
+Index: nfs-utils-1.1.2/tools/Makefile.am
+===================================================================
+--- nfs-utils-1.1.2.orig/tools/Makefile.am 2008-03-14 08:46:29.000000000 -0700
++++ nfs-utils-1.1.2/tools/Makefile.am 2009-03-04 01:58:50.000000000 -0800
+@@ -5,7 +5,10 @@
+ if CONFIG_RPCGEN
+ OPTDIRS += rpcgen
+ endif
+-
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++CXXFLAGS=$(CXXFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
+ SUBDIRS = locktest rpcdebug nlmtest $(OPTDIRS)
+
+ MAINTAINERCLEANFILES = Makefile.in
+Index: nfs-utils-1.1.2/tools/locktest/Makefile.am
+===================================================================
+--- nfs-utils-1.1.2.orig/tools/locktest/Makefile.am 2008-03-14 08:46:29.000000000 -0700
++++ nfs-utils-1.1.2/tools/locktest/Makefile.am 2009-03-04 01:58:50.000000000 -0800
+@@ -1,12 +1,13 @@
+ ## Process this file with automake to produce Makefile.in
+
+ CC=$(CC_FOR_BUILD)
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++CXXFLAGS=$(CXXFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
+ LIBTOOL = @LIBTOOL@ --tag=CC
+
+ noinst_PROGRAMS = testlk
+ testlk_SOURCES = testlk.c
+-testlk_CFLAGS=$(CFLAGS_FOR_BUILD)
+-testlk_CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
+-testlk_LDFLAGS=$(LDFLAGS_FOR_BUILD)
+
+ MAINTAINERCLEANFILES = Makefile.in
+Index: nfs-utils-1.1.2/tools/nlmtest/Makefile.am
+===================================================================
+--- nfs-utils-1.1.2.orig/tools/nlmtest/Makefile.am 2008-03-14 08:46:29.000000000 -0700
++++ nfs-utils-1.1.2/tools/nlmtest/Makefile.am 2009-03-04 01:58:50.000000000 -0800
+@@ -1,5 +1,8 @@
+ ## Process this file with automake to produce Makefile.in
+-
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++CXXFLAGS=$(CXXFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
+ EXTRA_DIST = \
+ README \
+ host.h \
+Index: nfs-utils-1.1.2/tools/rpcgen/Makefile.am
+===================================================================
+--- nfs-utils-1.1.2.orig/tools/rpcgen/Makefile.am 2008-03-14 08:46:29.000000000 -0700
++++ nfs-utils-1.1.2/tools/rpcgen/Makefile.am 2009-03-04 01:58:50.000000000 -0800
+@@ -1,6 +1,10 @@
+ ## Process this file with automake to produce Makefile.in
+
+ CC=$(CC_FOR_BUILD)
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++CXXFLAGS=$(CXXFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
+ LIBTOOL = @LIBTOOL@ --tag=CC
+
+ noinst_PROGRAMS = rpcgen
+@@ -9,10 +13,6 @@
+ rpc_util.c rpc_sample.c rpc_output.h rpc_parse.h \
+ rpc_scan.h rpc_util.h
+
+-rpcgen_CFLAGS=$(CFLAGS_FOR_BUILD)
+-rpcgen_CPPLAGS=$(CPPFLAGS_FOR_BUILD)
+-rpcgen_LDFLAGS=$(LDFLAGS_FOR_BUILD)
+-
+ MAINTAINERCLEANFILES = Makefile.in
+
+ EXTRA_DIST = rpcgen.new.1
+Index: nfs-utils-1.1.2/tools/rpcdebug/Makefile.am
+===================================================================
+--- nfs-utils-1.1.2.orig/tools/rpcdebug/Makefile.am 2009-03-04 02:01:41.000000000 -0800
++++ nfs-utils-1.1.2/tools/rpcdebug/Makefile.am 2009-03-04 02:02:42.000000000 -0800
+@@ -1,6 +1,10 @@
+ ## Process this file with automake to produce Makefile.in
+
+ CC=$(CC_FOR_BUILD)
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++CXXFLAGS=$(CXXFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
+ LIBTOOL = @LIBTOOL@ --tag=CC
+
+ man8_MANS = rpcdebug.man
diff --git a/packages/nfs-utils/nfs-utils_1.1.2.bb b/packages/nfs-utils/nfs-utils_1.1.2.bb
index 353eb574ae..350c195d92 100644
--- a/packages/nfs-utils/nfs-utils_1.1.2.bb
+++ b/packages/nfs-utils/nfs-utils_1.1.2.bb
@@ -3,11 +3,12 @@ PRIORITY = "optional"
SECTION = "console/network"
LICENSE = "GPL"
-PR = "3"
+PR = "r4"
DEPENDS = "e2fsprogs-libs tcp-wrappers libevent"
SRC_URI = "${SOURCEFORGE_MIRROR}/nfs/nfs-utils-${PV}.tar.gz \
+ file://nfs-utils-tools-unset-cflags.patch;patch=1 \
file://nfsserver \
"
diff --git a/packages/e2fsprogs/e2fsprogs_1.41.2.bb b/packages/nonworking/e2fsprogs/e2fsprogs_1.41.2.bb
index 1b139d2a9c..1b139d2a9c 100644
--- a/packages/e2fsprogs/e2fsprogs_1.41.2.bb
+++ b/packages/nonworking/e2fsprogs/e2fsprogs_1.41.2.bb
diff --git a/packages/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch b/packages/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch
new file mode 100644
index 0000000000..92af69f4f3
--- /dev/null
+++ b/packages/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch
@@ -0,0 +1,120 @@
+diff -Nurd nrlolsr/protolib/unix/Makefile.common nrlolsr.new/protolib/unix/Makefile.common
+--- nrlolsr/protolib/unix/Makefile.common 2006-12-15 12:30:58.000000000 -0500
++++ nrlolsr.new/protolib/unix/Makefile.common 2009-02-13 10:43:26.000000000 -0500
+@@ -12,9 +12,9 @@
+
+ INCLUDES = $(TCL_INCL_PATH) $(SYSTEM_INCLUDES) -I$(UNIX) -I$(COMMON)
+
+-CFLAGS = -g -DPROTO_DEBUG -DUNIX -D_FILE_OFFSET_BITS=64 -O -Wall -Wcast-align -pedantic -fPIC $(SYSTEM_HAVES) $(INCLUDES)
++NRL_CFLAGS = -g -DPROTO_DEBUG -DUNIX -D_FILE_OFFSET_BITS=64 -O -Wall -Wcast-align -pedantic -fPIC $(SYSTEM_HAVES) $(INCLUDES)
+
+-LDFLAGS = $(SYSTEM_LDFLAGS)
++NRL_LDFLAGS = $(SYSTEM_LDFLAGS)
+
+ LIBS = $(SYSTEM_LIBS) -lm -lpthread
+
+@@ -22,7 +22,7 @@
+
+ # Rule for C++ .cpp extension
+ .cpp.o:
+- $(CC) -c $(CFLAGS) -o $*.o $*.cpp
++ $(CC) -c $(CFLAGS) $(NRL_CFLAGS) -o $*.o $*.cpp
+
+ KIT_SRC = $(COMMON)/protoDebug.cpp $(COMMON)/protoAddress.cpp \
+ $(COMMON)/protoSocket.cpp $(COMMON)/protoTimer.cpp \
+@@ -50,37 +50,37 @@
+ EXAMPLE_OBJ = $(EXAMPLE_SRC:.cpp=.o)
+
+ protoExample: $(EXAMPLE_OBJ) libProtokit.a
+- $(CC) $(CFLAGS) -o $@ $(EXAMPLE_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a
++ $(CC) $(CFLAGS) $(NRLCFLAGS) -o $@ $(EXAMPLE_OBJ) $(LDFLAGS) $(NRL_LDFLAGS) $(LIBS) libProtokit.a
+
+ THREAD_SRC = $(COMMON)/threadExample.cpp
+ THREAD_OBJ = $(THREAD_SRC:.cpp=.o)
+
+ threadExample: $(THREAD_OBJ) libProtokit.a
+- $(CC) $(CFLAGS) -o $@ $(THREAD_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a
++ $(CC) $(CFLAGS) $(BRL_CFLAGS) -o $@ $(THREAD_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a
+
+ PIPE_SRC = $(COMMON)/pipeExample.cpp
+ PIPE_OBJ = $(PIPE_SRC:.cpp=.o)
+
+ pipeExample: $(PIPE_OBJ) libProtokit.a
+- $(CC) $(CFLAGS) -o $@ $(PIPE_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a
++ $(CC) $(CFLAGS) $(NRLCFLAGS) -o $@ $(PIPE_OBJ) $(LDFLAGS) $(NRL_LDFLAGS) $(LIBS) libProtokit.a
+
+ PCAP_SRC = $(COMMON)/pcapExample.cpp $(COMMON)/protoPacketeer.cpp linuxPacketeer.cpp
+ PCAP_OBJ = $(PCAP_SRC:.cpp=.o)
+
+ pcapExample: $(PCAP_OBJ) libProtokit.a
+- $(CC) $(CFLAGS) -o $@ $(PCAP_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a -lpcap
++ $(CC) $(CFLAGS) $(NRL_CFLAGS) -o $@ $(PCAP_OBJ) $(LDFLAGS) $(NRL_LDFLAGS) $(LIBS) libProtokit.a -lpcap
+
+ CAP_SRC = $(COMMON)/protoCapExample.cpp
+ CAP_OBJ = $(CAP_SRC:.cpp=.o)
+
+ protoCapExample: $(CAP_OBJ) libProtokit.a
+- $(CC) $(CFLAGS) -o $@ $(CAP_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a
++ $(CC) $(CFLAGS) $(NRL_CFLAGS) -o $@ $(CAP_OBJ) $(LDFLAGS) $(NRL_LDFLAGS) $(LIBS) libProtokit.a
+
+ DETOUR_SRC = $(COMMON)/detourExample.cpp $(SYSTEM_SRC_EX)
+ DETOUR_OBJ = $(DETOUR_SRC:.cpp=.o)
+
+ detourExample: $(DETOUR_OBJ) libProtokit.a
+- $(CC) $(CFLAGS) -o $@ $(DETOUR_OBJ) $(LDFLAGS) $(LIBS) libProtokit.a
++ $(CC) $(CFLAGS) $(NRL_CFLAGS) -o $@ $(DETOUR_OBJ) $(LDFLAGS) $(NRL_LDFLOAGS) $(LIBS) libProtokit.a
+
+ clean:
+ rm -f *.o $(COMMON)/*.o $(NS)/*.o ../wx/*.o *.a \
+diff -Nurd nrlolsr/unix/Makefile.common nrlolsr.new/unix/Makefile.common
+--- nrlolsr/unix/Makefile.common 2005-11-03 12:09:57.000000000 -0500
++++ nrlolsr.new/unix/Makefile.common 2009-02-13 11:12:23.000000000 -0500
+@@ -13,11 +13,11 @@
+
+ INCLUDES = $(TCL_INCL_PATH) $(SYSTEM_INCLUDES) $(WX_INCLUDES) -I$(UNIX) -I$(COMMON) -I$(PROTOLIB)/common
+
+-CFLAGS = -g -DPROTO_DEBUG -DUNIX -Wall -O -fPIC $(SYSTEM_HAVES) $(INCLUDES)
++NRL_CFLAGS = -g -DPROTO_DEBUG -DUNIX -Wall -O -fPIC $(SYSTEM_HAVES) $(INCLUDES)
+
+ WXCFLAGS = -g -DPROTO_DEBUG -DUNIX -Wall -O -fPIC $(WX_FLAGS) $(SYSTEM_HAVES) $(INCLUDES)
+
+-LDFLAGS = $(SYSTEM_LDFLAGS)
++NRL_LDFLAGS = $(SYSTEM_LDFLAGS)
+
+ LIBS = $(SYSTEM_LIBS) -lm
+
+@@ -25,7 +25,7 @@
+
+ # Rule for C++ .cpp extension
+ .cpp.o:
+- $(CC) -c $(CFLAGS) -o $*.o $*.cpp
++ $(CC) -c $(CFLAGS) $(NRL_CFLAGS) -o $*.o $*.cpp
+
+ all: nrlolsrd
+
+@@ -40,13 +40,13 @@
+ OLSR_OBJ = $(OLSR_SRC:.cpp=.o)
+
+ nrlolsrd: $(LIBPROTO) $(OLSR_OBJ)
+- $(CC) -g $(CFLAGS) -o $@ $(OLSR_OBJ) $(LDFLAGS) $(LIBS) $(LIBPROTO) -l pcap
++ $(CXX) -g $(CFLAGS) -o $@ $(OLSR_OBJ) $(LDFLAGS) $(NRL_LDFLAGS) $(LIBS) $(LIBPROTO) -l pcap
+
+ MNM_SRC = $(COMMON)/mnmMacMsg.cpp $(COMMON)/mnmExample.cpp
+ MNM_OBJ = $(MNM_SRC:.cpp=.o)
+
+ mnmExample: $(LIBPROTO) $(MNM_OBJ)
+- $(CC) -g $(CFLAGS) -o $@ $(MNM_OBJ) $(LDFLAGS) $(LIBS) $(LIBPROTO)
++ $(CC) -g $(CFLAGS) $(NRL_CFLAGS) -o $@ $(MNM_OBJ) $(LDFLAGS) $(NRL_LDFLAGS) $(LIBS) $(LIBPROTO)
+
+ # Re-define rule for C++ .cpp extension
+ .cpp.o:
+@@ -56,7 +56,7 @@
+ NRLOLSRGUI_OBJ = $(NRLOLSRGUI_SRC:.cpp=.o)
+
+ olsrgui: $(NRLOLSRGUI_OBJ) $(LIBPROTO)
+- $(CC) -g $(WXCFLAGS) -o $@ $(NRLOLSRGUI_OBJ) $(LIBPROTO) $(LDFLAGS) $(WX_FLAGS) $(LIBS) $(WX_LIBS)
++ $(CC) -g $(WXCFLAGS) -o $@ $(NRLOLSRGUI_OBJ) $(LIBPROTO) $(LDFLAGS) $(NRL_LDFLAGS) $(WX_FLAGS) $(LIBS) $(WX_LIBS)
+
+ clean:
+ rm -f *.o $(COMMON)/*.o $(NS)/*.o nrlolsrd olsrgui
+Binary files nrlolsr/unix/.Makefile.common.swp and nrlolsr.new/unix/.Makefile.common.swp differ
diff --git a/packages/nrlolsr/nrlolsr_7.8.1.bb b/packages/nrlolsr/nrlolsr_7.8.1.bb
new file mode 100644
index 0000000000..3fa5e2f4df
--- /dev/null
+++ b/packages/nrlolsr/nrlolsr_7.8.1.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "NRL OLSR - added to OE to support the Maniac Challenge (http://www.maniacchallenge.org/)"
+SECTION = "applications"
+LICENSE = "Public Domain"
+
+S="${WORKDIR}/nrlolsr/"
+
+SRC_URI = "http://downloads.pf.itd.nrl.navy.mil/olsr/nrlolsrdv7.8.1.tgz \
+ file://nrlolsr-cross.patch;patch=1 \
+ "
+
+do_compile () {
+ cd ${S}/unix
+
+ sed -i -e 's:-I/usr/X11R6/include:-I${STAGING_INCDIR}:g' Makefile.linux
+ sed -i -e 's:-L/usr/X11R6/lib:-L${STAGING_LIBDIR}:g' Makefile.linux
+ sed -i -e 's:/usr/local/bin:${STAGING_BINDIR}:g' Makefile.linux
+ sed -i -e 's:make -f Makefile:make -e -f Makefile:g' Makefile.common
+
+# EXTRA_OEMAKE="-f Makefile.linux"
+ oe_runmake -f Makefile.linux
+
+}
+
+do_install () {
+ install -d ${D}/${bindir}
+ install unix/nrlolsrd ${D}/${bindir}
+}
diff --git a/packages/ntfs-3g/ntfs-3g_1.0.bb b/packages/ntfs-3g/ntfs-3g_1.0.bb
index 7d73b79ac9..ac2b384c9e 100644
--- a/packages/ntfs-3g/ntfs-3g_1.0.bb
+++ b/packages/ntfs-3g/ntfs-3g_1.0.bb
@@ -5,6 +5,8 @@ DEPENDS = "fuse"
RDEPENDS = "fuse"
PR = "r0"
+DEFAULT_PREFERENCE = "-1"
+
SRC_URI = http://www.ntfs-3g.org/ntfs-3g-${PV}.tgz
inherit autotools
diff --git a/packages/ntfs-3g/ntfs-3g_2009.1.1.bb b/packages/ntfs-3g/ntfs-3g_2009.1.1.bb
new file mode 100644
index 0000000000..7d73b79ac9
--- /dev/null
+++ b/packages/ntfs-3g/ntfs-3g_2009.1.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "The NTFS-3G driver is an open source, freely available NTFS driver for Linux with read and write support."
+HOMEPAGE = "http://www.ntfs-3g.org/"
+LICENSE = "GPLv2"
+DEPENDS = "fuse"
+RDEPENDS = "fuse"
+PR = "r0"
+
+SRC_URI = http://www.ntfs-3g.org/ntfs-3g-${PV}.tgz
+
+inherit autotools
+
+EXTRA_OEMAKE = "LDCONFIG=echo"
diff --git a/packages/ntpclient/ntpclient_2007_365.bb b/packages/ntpclient/ntpclient_2007_365.bb
index b892f384e7..b7988ab5bb 100644
--- a/packages/ntpclient/ntpclient_2007_365.bb
+++ b/packages/ntpclient/ntpclient_2007_365.bb
@@ -4,7 +4,7 @@ AUTHOR = "Larry Doolittle <larry@doolittle.boa.org>"
RDEPENDS = "busybox"
SECTION = "admin"
LICENSE = "GPLv2"
-PR = "r0"
+PR = "r2"
# The ntpclient package uses version numbers that include an underscore :(
PV = "2007_365"
# ntpclient unpacks into a directory that doesn't include version info :(
@@ -27,8 +27,15 @@ do_compile() {
do_install () {
# Install the binary and tools
install -D -m 0755 ${S}/ntpclient ${D}${base_sbindir}/ntpclient
- install -D -m 0755 ${S}/adjtimex ${D}${base_sbindir}/adjtimex
+ install -D -m 0755 ${S}/adjtimex ${D}${base_sbindir}/adjtimex.${PN}
install -D -m 0755 ${S}/rate.awk ${D}${sbindir}/ntpclient-drift-rate.awk
install -D -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ntpclient
}
+pkg_postinst_${PN} () {
+ update-alternatives --install ${base_sbindir}/adjtimex adjtimex adjtimex.${PN} 100
+}
+
+pkg_prerm_${PN} () {
+ update-alternatives --remove adjtimex adjtimex.${PN}
+}
diff --git a/packages/numptyphysics/numptyphysics/numptyphysics.desktop b/packages/numptyphysics/numptyphysics/numptyphysics.desktop
index b85265ab6f..5ebefb66d9 100644
--- a/packages/numptyphysics/numptyphysics/numptyphysics.desktop
+++ b/packages/numptyphysics/numptyphysics/numptyphysics.desktop
@@ -2,7 +2,7 @@
Name=numptyphysics
Comment=Physics Game
Note=Simulate Objects
-Exec=xrandr -o 3 && numptyphysics -geometry 640x480; xrandr -o 0
+Exec=numptyphysics
Icon=star.png
Type=Application
Categories=Games
diff --git a/packages/numptyphysics/numptyphysics_svn.bb b/packages/numptyphysics/numptyphysics_svn.bb
index 6dc49649d0..d8247b588a 100644
--- a/packages/numptyphysics/numptyphysics_svn.bb
+++ b/packages/numptyphysics/numptyphysics_svn.bb
@@ -1,10 +1,12 @@
DESCRIPTION = "Numpty Physics is a drawing puzzle game in the spirit (and style?) \
of Crayon Physics using the same excellent Box2D engine."
DEPENDS = "virtual/libsdl libsdl-image libpng"
+RDEPENDS += "libpng"
LICENSE = "GPL"
HOMEPAGE = "http://numptyphysics.garage.maemo.org/"
SECTION = "x11/games"
PV = "0.2+svnr${SRCREV}"
+PR = "r1"
inherit autotools
diff --git a/packages/ogre/files/ogre-egl-update.diff b/packages/ogre/files/ogre-egl-update.diff
new file mode 100644
index 0000000000..9173715ee3
--- /dev/null
+++ b/packages/ogre/files/ogre-egl-update.diff
@@ -0,0 +1,165 @@
+Index: RenderSystems/GLES/include/OgreGLESSupport.h
+===================================================================
+--- RenderSystems/GLES/include/OgreGLESSupport.h (revision 8310)
++++ RenderSystems/GLES/include/OgreGLESSupport.h (working copy)
+@@ -80,6 +80,11 @@
+ virtual void initialiseExtensions();
+ virtual bool checkExtension(const String& ext) const;
+
++ virtual unsigned int getDisplayMonitorCount() const
++ {
++ return 1;
++ }
++
+ virtual void start() = 0;
+ virtual void stop() = 0;
+
+Index: RenderSystems/GLES/include/OgreGLESRenderSystem.h
+===================================================================
+--- RenderSystems/GLES/include/OgreGLESRenderSystem.h (revision 8310)
++++ RenderSystems/GLES/include/OgreGLESRenderSystem.h (working copy)
+@@ -139,9 +139,11 @@
+ void _setTextureBorderColour(size_t stage, const ColourValue& colour);
+ void _setTextureMipmapBias(size_t unit, float bias);
+ void _setTextureMatrix(size_t stage, const Matrix4& xform);
+- void _setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor);
+- void _setSeparateSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendFactor sourceFactorAlpha, SceneBlendFactor destFactorAlpha);
+- void _setAlphaRejectSettings(CompareFunction func, unsigned char value);
++ void _setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendOperation op );
++ void _setSeparateSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendFactor sourceFactorAlpha, SceneBlendFactor destFactorAlpha, SceneBlendOperation op, SceneBlendOperation alphaOp );
++ void _setSceneBlendingOperation(SceneBlendOperation op);
++ void _setSeparateSceneBlendingOperation(SceneBlendOperation op, SceneBlendOperation alphaOp);
++ void _setAlphaRejectSettings(CompareFunction func, unsigned char value, bool alphaToCoverage);
+ void _setViewport(Viewport *vp);
+ void _beginFrame(void);
+ void _endFrame(void);
+@@ -195,6 +197,7 @@
+
+ GLESContext* _getMainContext() { return mMainContext; }
+ void _unregisterContext(GLESContext *context);
++ unsigned int getDisplayMonitorCount() const;
+ void _switchContext(GLESContext *context);
+ void _oneTimeContextInitialization();
+ void initialiseContext(RenderWindow* primary);
+Index: RenderSystems/GLES/include/OgreGLESDefaultHardwareBufferManager.h
+===================================================================
+--- RenderSystems/GLES/include/OgreGLESDefaultHardwareBufferManager.h (revision 8310)
++++ RenderSystems/GLES/include/OgreGLESDefaultHardwareBufferManager.h (working copy)
+@@ -110,6 +110,8 @@
+ HardwareIndexBufferSharedPtr
+ createIndexBuffer(HardwareIndexBuffer::IndexType itype, size_t numIndexes,
+ HardwareBuffer::Usage usage, bool useShadowBuffer = false);
++ // Create a render to vertex buffer
++ RenderToVertexBufferSharedPtr createRenderToVertexBuffer();
+ };
+ }
+
+Index: RenderSystems/GLES/src/OgreGLESRenderSystem.cpp
+===================================================================
+--- RenderSystems/GLES/src/OgreGLESRenderSystem.cpp (revision 8310)
++++ RenderSystems/GLES/src/OgreGLESRenderSystem.cpp (working copy)
+@@ -1182,7 +1182,8 @@
+ return GL_ONE;
+ }
+
+- void GLESRenderSystem::_setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor)
++
++ void GLESRenderSystem::_setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendOperation op )
+ {
+ GLint sourceBlend = getBlendMode(sourceFactor);
+ GLint destBlend = getBlendMode(destFactor);
+@@ -1199,17 +1200,19 @@
+ GL_CHECK_ERROR;
+ }
+ }
+-
+- void GLESRenderSystem::_setSeparateSceneBlending(SceneBlendFactor sourceFactor,
+- SceneBlendFactor destFactor,
+- SceneBlendFactor sourceFactorAlpha,
+- SceneBlendFactor destFactorAlpha)
++
++ void GLESRenderSystem::_setSeparateSceneBlending(
++ SceneBlendFactor sourceFactor, SceneBlendFactor destFactor,
++ SceneBlendFactor sourceFactorAlpha, SceneBlendFactor destFactorAlpha,
++ SceneBlendOperation op, SceneBlendOperation alphaOp )
+ {
+ // Not supported
+ }
+
+- void GLESRenderSystem::_setAlphaRejectSettings(CompareFunction func, unsigned char value)
++ void GLESRenderSystem::_setAlphaRejectSettings(CompareFunction func, unsigned char value, bool alphaToCoverage)
+ {
++ bool a2c = false;
++ static bool lasta2c = false;
+ if (func == CMPF_ALWAYS_PASS)
+ {
+ glDisable(GL_ALPHA_TEST);
+@@ -1222,6 +1225,15 @@
+ glAlphaFunc(convertCompareFunction(func), value / 255.0f);
+ GL_CHECK_ERROR;
+ }
++ if (a2c != lasta2c && getCapabilities()->hasCapability(RSC_ALPHA_TO_COVERAGE))
++ {
++ if (a2c)
++ glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
++ else
++ glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
++
++ lasta2c = a2c;
++ }
+ }
+
+ void GLESRenderSystem::_setViewport(Viewport *vp)
+@@ -2084,7 +2096,12 @@
+ {
+ // Not implemented
+ }
+-
++
++ unsigned int GLESRenderSystem::getDisplayMonitorCount() const
++ {
++ return mGLSupport->getDisplayMonitorCount();
++ }
++
+ void GLESRenderSystem::setClipPlanesImpl(const Ogre::PlaneList& clipPlanes)
+ {
+ // A note on GL user clipping:
+Index: RenderSystems/GLES/src/OgreGLESDefaultHardwareBufferManager.cpp
+===================================================================
+--- RenderSystems/GLES/src/OgreGLESDefaultHardwareBufferManager.cpp (revision 8310)
++++ RenderSystems/GLES/src/OgreGLESDefaultHardwareBufferManager.cpp (working copy)
+@@ -164,4 +164,12 @@
+ return HardwareIndexBufferSharedPtr(
+ new GLESDefaultHardwareIndexBuffer(itype, numIndexes, usage));
+ }
++
++ RenderToVertexBufferSharedPtr
++ GLESDefaultHardwareBufferManager::createRenderToVertexBuffer()
++ {
++ OGRE_EXCEPT(Exception::ERR_RENDERINGAPI_ERROR,
++ "Cannot create RenderToVertexBuffer in GLESDefaultHardwareBufferManager",
++ "GLESDefaultHardwareBufferManager::createRenderToVertexBuffer");
++ }
+ }
+Index: RenderSystems/GLES/src/EGL/OgreEGLWindow.cpp
+===================================================================
+--- RenderSystems/GLES/src/EGL/OgreEGLWindow.cpp (revision 8310)
++++ RenderSystems/GLES/src/EGL/OgreEGLWindow.cpp (working copy)
+@@ -182,7 +182,7 @@
+
+ if ((opt = miscParams->find("parentWindowHandle")) != end)
+ {
+- std::vector<String> tokens = StringUtil::split(opt->second, " :");
++ StringVector tokens = StringUtil::split(opt->second, " :");
+
+ if (tokens.size() == 3)
+ {
+@@ -197,7 +197,7 @@
+ }
+ else if ((opt = miscParams->find("externalWindowHandle")) != end)
+ {
+- std::vector<String> tokens = StringUtil::split(opt->second, " :");
++ StringVector tokens = StringUtil::split(opt->second, " :");
+
+ LogManager::getSingleton().logMessage(
+ "EGLWindow::create: The externalWindowHandle parameter is deprecated.\n"
diff --git a/packages/ogre/freeimage_3.11.0.bb b/packages/ogre/freeimage_3.11.0.bb
new file mode 100644
index 0000000000..8281aaf371
--- /dev/null
+++ b/packages/ogre/freeimage_3.11.0.bb
@@ -0,0 +1,29 @@
+LICENSE = "MIT"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/freeimage/FreeImage3110.zip"
+
+S = "${WORKDIR}/FreeImage/"
+
+do_configure() {
+ sed -i -e /^CC/d \
+ -e /^CXX\ /d \
+ -e /^AR/d \
+ -e /^INCDIR\ /d \
+ -e /^INSTALLDIR\ /d \
+ -e s:'-o root -g root'::g \
+ -e /ldconfig/d \
+ ${S}/Makefile.gnu
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -d ${D}${includedir}
+ oe_runmake INSTALLDIR="${D}${libdir}" INCDIR="${D}${includedir}" install
+}
+
+do_stage() {
+ install -d ${STAGING_LIBDIR}
+ install -d ${STAGING_INCDIR}
+ oe_runmake INSTALLDIR="${STAGING_LIBDIR}" INCDIR="${STAGING_INCDIR}" install
+}
+
diff --git a/packages/ogre/ogre-egl_svn.bb b/packages/ogre/ogre-egl_svn.bb
new file mode 100644
index 0000000000..9ca9e8f54f
--- /dev/null
+++ b/packages/ogre/ogre-egl_svn.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine "
+LICENSE = "LGPL"
+DEPENDS = "gtk+ wgois cppunit zziplib boost freeimage freetype virtual/libx11 virtual/egl"
+
+PR = "r3"
+
+SRCREV = "8310"
+PV = "1.6.1+svnr${SRCREV}"
+
+SRC_URI = "svn://ogre.svn.sourceforge.net/svnroot/ogre;module=trunk;proto=https \
+ file://ogre-egl-update.diff;patch=1;pnum=0 \
+ "
+
+inherit autotools_stage
+
+# This is the EGL version
+EXTRA_OECONF = " --with-gui=gtk --disable-freetypetest --enable-ogre-demos --with-allocator=std --enable-threading=no --disable-cg --enable-gles "
+
+S = "${WORKDIR}/trunk"
+
+
+EXTRA_OEMAKE = " ZZIPLIB_CFLAGS=\"${@base_conditional('SITEINFO_ENDIANESS', 'le', '-DOGRE_CONFIG_LITTLE_ENDIAN', '-DOGRE_CONFIG_BIG_ENDIAN', d)}\" "
+
+do_configure_prepend() {
+ sed -i -e /OGRE_DETECT_ENDIAN/d ${S}/configure.in
+}
+
+do_install_append() {
+ install -d ${D}${datadir}/ogre3d/samples
+ mv ${D}${S}/Samples/* ${D}${datadir}/ogre3d/samples/
+ cp ${S}/Samples/Common/bin/Release/*cfg ${D}${datadir}/ogre3d/samples/Common/bin
+
+ install -d ${D}${datadir}/ogre3d/Media
+ cp -r ${S}/Samples/Media/* ${D}${datadir}/ogre3d/Media/
+ find ${D} -name ".svn" | xargs rm -rf
+}
+
+PACKAGES += "${PN}-samples"
+
+FILES_${PN}-samples = "${datadir}/ogre3d/"
+FILES_${PN}-dbg += "${libdir}/OGRE/.debug ${datadir}/ogre3d/samples/*/*/.debug"
+FILES_${PN}-dev += "${libdir}/OGRE/*.la"
+FILES_${PN} += "${libdir}/libOgreMain-*.so ${libdir}/OGRE/*.so"
+
diff --git a/packages/ogre/wgois_1.2.0.bb b/packages/ogre/wgois_1.2.0.bb
new file mode 100644
index 0000000000..ff59a3bcae
--- /dev/null
+++ b/packages/ogre/wgois_1.2.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Object Oriented Input System (OIS) is meant to be a cross platform, simple solution for using all kinds of Input Devices."
+LICENSE = "zlib"
+DEPENDS = "virtual/libx11"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wgois/ois_${PV}.tar.gz"
+
+inherit autotools_stage
+
+S = "${WORKDIR}/ois"
+
+FILES_${PN} += "${libdir}/libOIS-1*.so"
+
+
+
+
diff --git a/packages/opkg/files/opkg_unarchive.patch b/packages/opkg/files/opkg_unarchive.patch
new file mode 100644
index 0000000000..9e5ccfb714
--- /dev/null
+++ b/packages/opkg/files/opkg_unarchive.patch
@@ -0,0 +1,13 @@
+--- trunk/libbb/unarchive.c.orig 2009-02-11 22:14:58.000000000 +0100
++++ trunk/libbb/unarchive.c 2009-02-11 22:15:07.000000000 +0100
+@@ -606,6 +606,10 @@
+ tar_entry->name = concat_path_file(tar.formated.prefix, tar.formated.name);
+ }
+
++ if (strlen(tar_entry->name) > 100) {
++ tar_entry->name[100] = 0;
++ }
++
+ // tar_entry->name = xstrdup(tar.formated.name);
+
+ /*
diff --git a/packages/opkg/files/opkg_wget_nogpg_04_default_tmpdir.patch b/packages/opkg/files/opkg_wget_nogpg_04_default_tmpdir.patch
new file mode 100644
index 0000000000..403073fced
--- /dev/null
+++ b/packages/opkg/files/opkg_wget_nogpg_04_default_tmpdir.patch
@@ -0,0 +1,20 @@
+# This patch moves the default tmpdir from /tmp, which is
+# normally an in-memory filesystem to /root, which is not.
+# This is desirable on very small-memory systems -- for
+# example, the ipk for samba is nearly 20MB in size, and
+# simply won't fit in /tmp, and attempting to do so very
+# often causes a silent failure due to the OOM killer.
+#
+# Mike Westerhof, Feb 2009
+#
+--- orig/libopkg/opkg_conf.h 2009-02-13 21:56:27.000000000 -0600
++++ opkg/libopkg/opkg_conf.h 2009-02-13 21:56:39.000000000 -0600
+@@ -28,7 +28,7 @@ typedef struct opkg_conf opkg_conf_t;
+ #include "pkg_dest_list.h"
+ #include "nv_pair_list.h"
+
+-#define OPKG_CONF_DEFAULT_TMP_DIR_BASE "/tmp"
++#define OPKG_CONF_DEFAULT_TMP_DIR_BASE "/root"
+ #define OPKG_CONF_TMP_DIR_SUFFIX "opkg-XXXXXX"
+ #define OPKG_CONF_LISTS_DIR OPKG_STATE_DIR_PREFIX "/lists"
+ #define OPKG_CONF_PENDING_DIR OPKG_STATE_DIR_PREFIX "/pending"
diff --git a/packages/opkg/opkg-native_svn.bb b/packages/opkg/opkg-native_svn.bb
index 57c6e61fb0..82c74e0b86 100644
--- a/packages/opkg/opkg-native_svn.bb
+++ b/packages/opkg/opkg-native_svn.bb
@@ -1,7 +1,7 @@
require opkg.inc
DEPENDS = "curl-native"
-PR = "r2"
+PR = "r3"
target_libdir := "${libdir}"
diff --git a/packages/opkg/opkg-nogpg-nocurl_svn.bb b/packages/opkg/opkg-nogpg-nocurl_svn.bb
index 4daa58f274..6f8b446ead 100644
--- a/packages/opkg/opkg-nogpg-nocurl_svn.bb
+++ b/packages/opkg/opkg-nogpg-nocurl_svn.bb
@@ -9,8 +9,9 @@ SRC_URI += " \
file://opkg_wget_nogpg_01_use_vfork_gunzip.patch;patch=1 \
file://opkg_wget_nogpg_02_use_vfork_system.patch;patch=1 \
file://opkg_wget_nogpg_03_fix_tmpdirs.patch;patch=1 \
+ file://opkg_wget_nogpg_04_default_tmpdir.patch;patch=1 \
"
-PR = "r3"
+PR = "r5"
SRCREV = "${SRCREV_pn-opkg}"
diff --git a/packages/opkg/opkg-nogpg_svn.bb b/packages/opkg/opkg-nogpg_svn.bb
index f58df2fb18..a9297d7645 100644
--- a/packages/opkg/opkg-nogpg_svn.bb
+++ b/packages/opkg/opkg-nogpg_svn.bb
@@ -3,7 +3,7 @@ require opkg_svn.bb
DEPENDS = "curl"
PROVIDES += "opkg"
-PR = "r2"
+PR = "r3"
SRCREV = "${SRCREV_pn-opkg}"
diff --git a/packages/opkg/opkg-sdk_svn.bb b/packages/opkg/opkg-sdk_svn.bb
index c28fe97591..d9b3727d82 100644
--- a/packages/opkg/opkg-sdk_svn.bb
+++ b/packages/opkg/opkg-sdk_svn.bb
@@ -1,7 +1,7 @@
require opkg.inc
DEPENDS = "curl-sdk"
-PR = "r2"
+PR = "r3"
target_libdir := "${libdir}"
inherit sdk
diff --git a/packages/opkg/opkg.inc b/packages/opkg/opkg.inc
index b586e70ab9..be8287734b 100644
--- a/packages/opkg/opkg.inc
+++ b/packages/opkg/opkg.inc
@@ -5,7 +5,8 @@ LICENSE = "GPL"
DEPENDS = "curl gpgme"
PV = "0.1.6+svnr${SRCREV}"
-SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;proto=http"
+SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;proto=http \
+ file://opkg_unarchive.patch;patch=1;maxrev=201"
S = "${WORKDIR}/trunk"
inherit autotools pkgconfig
diff --git a/packages/opkg/opkg_svn.bb b/packages/opkg/opkg_svn.bb
index 4cf1c5caab..a4728970ce 100644
--- a/packages/opkg/opkg_svn.bb
+++ b/packages/opkg/opkg_svn.bb
@@ -1,6 +1,6 @@
require opkg.inc
-PR = "r1"
+PR = "r2"
PACKAGES =+ "libopkg-dev libopkg"
diff --git a/packages/parted/files/parted-1.8.x.patch b/packages/parted/files/parted-1.8.x.patch
new file mode 100644
index 0000000000..167a0fbeff
--- /dev/null
+++ b/packages/parted/files/parted-1.8.x.patch
@@ -0,0 +1,1492 @@
+diff --git a/configure.ac b/configure.ac
+index f1284a0..9f0971b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@ dnl
+ dnl This file may be modified and/or distributed without restriction.
+
+ AC_PREREQ(2.61)
+-AC_INIT([GNU parted],[1.8.8],[bug-parted@gnu.org])
++AC_INIT([GNU parted],[1.8.9],[bug-parted@gnu.org])
+
+ AC_CONFIG_SRCDIR(include/parted/parted.h)
+
+@@ -24,7 +24,7 @@ dnl function signatures changed),
+ dnl set PED_BINARY_AGE _and_ PED_INTERFACE_AGE to 0.
+ PED_MAJOR_VERSION=1
+ PED_MINOR_VERSION=8
+-PED_MICRO_VERSION=8
++PED_MICRO_VERSION=9
+ PED_INTERFACE_AGE=0
+ PED_BINARY_AGE=0
+ PED_VERSION_SUFFIX=
+@@ -471,14 +471,7 @@ AC_CHECK_HEADER([execinfo.h], [
+ ])
+ ])
+
+-dnl Checks for #defines.
+-AC_COMPILE_IFELSE([
+- AC_LANG_PROGRAM([[
+- #if defined __s390__ || defined __s390x__
+- # message s390 defined
+- #endif
+- ]])], [compile_for_s390="no"], [compile_for_s390="yes"])
+-AM_CONDITIONAL([COMPILE_FOR_S390], [test "$compile_for_s390" = "yes"])
++AM_CONDITIONAL([COMPILE_FOR_S390], [test "$host_cpu" = s390 || test "$host_cpu" = s390x])
+
+ dnl check for "check", unit testing library/header
+ PKG_CHECK_MODULES([CHECK], [check >= 0.9.3], have_check=yes, have_check=no)
+diff --git a/doc/C/parted.8 b/doc/C/parted.8
+index 7040402..fdf3d04 100644
+--- a/doc/C/parted.8
++++ b/doc/C/parted.8
+@@ -124,6 +124,18 @@ and a human-friendly form for output).
+ .B version
+ Display version information and a copyright message.
+ .RE
++.SH KNOWN ISSUES
++ext3 filesystem resizing does not currently work, please use
++.BR resize2fs (8)
++instead.
++
++Resizing partitions with an ext3 filesystem will not generally work because
++of the above issue. Use
++.BR resize2fs (8)
++to resize the filesystem and resize the partition manually using
++.BR fdisk (8)
++or a similar tool. For LVM situations, you will need to use the LVM commands
++to resize the LVM elements.
+ .SH REPORTING BUGS
+ Report bugs to <bug-parted@gnu.org>
+ .SH SEE ALSO
+diff --git a/doc/parted.texi b/doc/parted.texi
+index 139ea77..86ec076 100644
+--- a/doc/parted.texi
++++ b/doc/parted.texi
+@@ -14,7 +14,7 @@ resizing, checking and copy partitions and file systems on them.
+ @ifnottex @c texi2pdf don't understand copying and insertcopying ???
+ @c modifications must also be done in the titlepage
+ @copying
+-Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
++Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+@@ -63,7 +63,7 @@ Free Documentation License''.
+
+ @c WTF doesn't texi2html include the titlepage?
+ @ifhtml
+-@insertcopying
++@insertcopying
+ @end ifhtml
+
+ This document describes the use of GNU Parted, a program for creating,
+@@ -257,7 +257,7 @@ $ @kbd{make}
+ However, there are a few options for @command{configure}:
+
+ @table @code
+-@item --without-readline
++@item --without-readline
+ turns off use of readline. This is useful for making rescue disks,
+ etc., where few libraries are available.
+
+@@ -275,12 +275,12 @@ you don't need the flexibility.
+ @item --disable-fs
+ disable all file system support
+
+-@item --disable-nls
++@item --disable-nls
+ turns off native language support. This is useful for use with old
+ versions of glibc, or a trimmed down version of glibc suitable for
+ rescue disks.
+
+-@item --disable-shared
++@item --disable-shared
+ turns off shared libraries. This may be necessary for use with old
+ versions of GNU libc, if you get a compile error about a ``spilled
+ register''. Also useful for boot/rescue disks.
+@@ -301,7 +301,7 @@ disable writing (for debugging)
+
+ @node Static binaries
+ @section Using static binaries of GNU Parted
+-@cindex static binary
++@cindex static binary
+ @cindex unsupported platforms
+ @cindex resizing root device
+
+@@ -320,7 +320,7 @@ of the latest GNU Parted version is available, which you can use thus:
+
+ @subsection Creating the Parted disk
+ @enumerate
+-@item Boot your system
++@item Boot your system
+
+ @item Download @file{parted-static-VERSION.tgz} from @uref{ftp://ftp.gnu.org/gnu/parted/static}
+ @item Unpack the tarball, resulting in a file called ``parted.static".
+@@ -329,7 +329,7 @@ of the latest GNU Parted version is available, which you can use thus:
+
+ @item Do a low-level format on it (on GNU/Linux this can be achieved with
+ the tool ``fdformat" from the ``util-linux" package.
+- This is basically a sanity check because floppy disks often
++ This is basically a sanity check because floppy disks often
+ contain bad blocks.
+
+ @item Create a file system. Example:
+@@ -359,7 +359,7 @@ $ @kbd{umount /mnt/floppy}
+
+ @subsection Using the Parted disk
+ @enumerate
+-@item Choose a rescue disk that suits you.
++@item Choose a rescue disk that suits you.
+
+ @item Boot off your rescue disk. Mount the disk you copied Parted onto.
+
+@@ -383,7 +383,7 @@ $ @kbd{umount /mnt/floppy}
+ @end menu
+
+ @node Partitioning
+-@section Introduction to Partitioning
++@section Introduction to Partitioning
+ @cindex partitioning overview
+
+ Unfortunately, partitioning your disk is rather complicated. This is
+@@ -566,7 +566,7 @@ Supported file systems:
+ (provided the destination partition is larger than the source partition)
+
+ @item fat16, fat32
+-@item linux-swap
++@item linux-swap
+ (equivalent to mkswap on destination partition)
+ @item reiserfs (if libreiserfs is installed)
+
+@@ -918,7 +918,7 @@ partitions can be resized only so long as the new extended partition
+ completely contains all logical partitions.
+
+ Note that Parted can manipulate partitions whether or not they have been
+-defragmented, so you do not need to defragmenting the disk before
++defragmented, so you do not need to defragment the disk before
+ using Parted.
+
+ Supported file systems:
+@@ -1031,7 +1031,7 @@ Microsoft operating systems.
+
+ @item raid
+ (MS-DOS) - this flag can be enabled to tell linux the partition is a
+-software RAID partition.
++software RAID partition.
+
+ @item LVM
+ (MS-DOS) - this flag can be enabled to tell linux the partition is a
+@@ -1109,59 +1109,59 @@ specified after an input number. Input numbers can be followed by
+ an unit (without any space or other character between them), in
+ which case this unit apply instead of the default unit for this
+ particular number, but CHS and cylinder units are not supported as
+-a suffix. If no suffix is given, then the default unit is assumed.
++a suffix. If no suffix is given, then the default unit is assumed.
+ Parted will compute sensible ranges for the locations you specify
+ (e.g. a range of +/- 500 MB when you specify the location in ``G'')
+ and will select the nearest location in this range from the one you
+ wrote that satisfies constraints from both the operation, the
+ filesystem being worked on, the disk label, other partitions and so
+ on. Use the sector unit ``s'' to specify exact locations (if they
+-do not satisfy all onstraints, Parted will ask you for the nearest
++do not satisfy all onstraints, Parted will ask you for the nearest
+ solution). Note that negative numbers count back from the end of
+-the disk, with ``-1s'' pointing to the end of the disk.
++the disk, with ``-1s'' pointing to the end of the disk.
+
+ Example:
+
+ @example
+ @group
+-(parted) unit compact
+-(parted) print
++(parted) unit compact
++(parted) print
+ Disk geometry for /dev/hda: 0kB - 123GB
+ Disk label type: msdos
+ Number Start End Size Type File system Flags
+ 1 32kB 1078MB 1077MB primary reiserfs boot
+-2 1078MB 2155MB 1078MB primary linux-swap
+-3 2155MB 123GB 121GB extended
+-5 2155MB 7452MB 5297MB logical reiserfs
++2 1078MB 2155MB 1078MB primary linux-swap
++3 2155MB 123GB 121GB extended
++5 2155MB 7452MB 5297MB logical reiserfs
+ @end group
+ @group
+-(parted) unit chs print
++(parted) unit chs print
+ Disk geometry for /dev/hda: 0,0,0 - 14946,225,62
+ BIOS cylinder,head,sector geometry: 14946,255,63. Each cylinder
+ is 8225kB.
+ Disk label type: msdos
+ Number Start End Type File system Flags
+ 1 0,1,0 130,254,62 primary reiserfs boot
+-2 131,0,0 261,254,62 primary linux-swap
+-3 262,0,0 14945,254,62 extended
+-5 262,2,0 905,254,62 logical reiserfs
++2 131,0,0 261,254,62 primary linux-swap
++3 262,0,0 14945,254,62 extended
++5 262,2,0 905,254,62 logical reiserfs
+ @end group
+ @group
+-(parted) unit mb print
++(parted) unit mb print
+ Disk geometry for /dev/hda: 0MB - 122942MB
+ Disk label type: msdos
+ Number Start End Size Type File system Flags
+ 1 0MB 1078MB 1077MB primary reiserfs boot
+-2 1078MB 2155MB 1078MB primary linux-swap
+-3 2155MB 122935MB 120780MB extended
+-5 2155MB 7452MB 5297MB logical reiserfs
++2 1078MB 2155MB 1078MB primary linux-swap
++3 2155MB 122935MB 120780MB extended
++5 2155MB 7452MB 5297MB logical reiserfs
+ @end group
+ @end example
+
+ @end deffn
+
+ @node Related information
+-@chapter Related information
++@chapter Related information
+ @cindex further reading
+ @cindex related documentation
+
+diff --git a/include/parted/constraint.h b/include/parted/constraint.h
+index 7a39602..6496926 100644
+--- a/include/parted/constraint.h
++++ b/include/parted/constraint.h
+@@ -22,6 +22,7 @@
+ typedef struct _PedConstraint PedConstraint;
+
+ #include <parted/device.h>
++#include <parted/geom.h>
+ #include <parted/natmath.h>
+
+ struct _PedConstraint {
+diff --git a/include/parted/device.h b/include/parted/device.h
+index cf32dba..e669688 100644
+--- a/include/parted/device.h
++++ b/include/parted/device.h
+@@ -26,6 +26,7 @@
+ #ifndef PED_DEVICE_H_INCLUDED
+ #define PED_DEVICE_H_INCLUDED
+
++#include <parted/constraint.h>
+ #include <parted/timer.h>
+
+ /** We can address 2^63 sectors */
+@@ -45,9 +46,7 @@ typedef enum {
+ PED_DEVICE_DASD = 9,
+ PED_DEVICE_VIODASD = 10,
+ PED_DEVICE_SX8 = 11,
+-#ifdef ENABLE_DEVICE_MAPPER
+ PED_DEVICE_DM = 12,
+-#endif
+ PED_DEVICE_XVD = 13
+ } PedDeviceType;
+
+diff --git a/include/parted/disk.h b/include/parted/disk.h
+index b82ea0f..1b0133d 100644
+--- a/include/parted/disk.h
++++ b/include/parted/disk.h
+@@ -1,6 +1,6 @@
+ /*
+ libparted - a library for manipulating disk partitions
+- Copyright (C) 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
++ Copyright (C) 1999, 2000, 2001, 2002, 2007, 2008 Free Software Foundation, 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
+@@ -52,10 +52,11 @@ enum _PedPartitionFlag {
+ PED_PARTITION_HPSERVICE=8,
+ PED_PARTITION_PALO=9,
+ PED_PARTITION_PREP=10,
+- PED_PARTITION_MSFT_RESERVED=11
++ PED_PARTITION_MSFT_RESERVED=11,
++ PED_PARTITION_BIOS_GRUB=12
+ };
+ #define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
+-#define PED_PARTITION_LAST_FLAG PED_PARTITION_MSFT_RESERVED
++#define PED_PARTITION_LAST_FLAG PED_PARTITION_BIOS_GRUB
+
+ enum _PedDiskTypeFeature {
+ PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
+diff --git a/include/parted/linux.h b/include/parted/linux.h
+index 52d28be..05a2f0e 100644
+--- a/include/parted/linux.h
++++ b/include/parted/linux.h
+@@ -22,7 +22,7 @@
+ #include <parted/parted.h>
+ #include <parted/device.h>
+
+-#if defined __s390__ || defined __s390x__
++#if defined(__s390__) || defined(__s390x__)
+ # include <parted/fdasd.h>
+ #endif
+
+diff --git a/include/parted/natmath.h b/include/parted/natmath.h
+index 32a6e28..e387833 100644
+--- a/include/parted/natmath.h
++++ b/include/parted/natmath.h
+@@ -30,6 +30,7 @@
+ typedef struct _PedAlignment PedAlignment;
+
+ #include <parted/disk.h>
++#include <parted/device.h>
+
+ #define PED_MIN(a, b) ( ((a)<(b)) ? (a) : (b) )
+ #define PED_MAX(a, b) ( ((a)>(b)) ? (a) : (b) )
+diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
+index 462ab92..9876956 100644
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -64,7 +64,7 @@
+ #define HDIO_GETGEO 0x0301 /* get device geometry */
+ #define HDIO_GET_IDENTITY 0x030d /* get IDE identification info */
+
+-#if defined(O_DIRECT) && (!defined(__s390__) || !defined(__s390x__))
++#if defined(O_DIRECT) && !(defined(__s390__) || defined(__s390x__))
+ #define RD_MODE (O_RDONLY | O_DIRECT)
+ #define WR_MODE (O_WRONLY | O_DIRECT)
+ #define RW_MODE (O_RDWR | O_DIRECT)
+@@ -986,7 +986,7 @@ error:
+ }
+
+ static int
+-init_dasd (PedDevice* dev, char* model_name)
++init_dasd (PedDevice* dev, const char* model_name)
+ {
+ struct stat dev_stat;
+ struct hd_geometry geo;
+@@ -1042,7 +1042,7 @@ error:
+ }
+
+ static int
+-init_generic (PedDevice* dev, char* model_name)
++init_generic (PedDevice* dev, const char* model_name)
+ {
+ struct stat dev_stat;
+ PedExceptionOption ex_status;
+diff --git a/libparted/cs/natmath.c b/libparted/cs/natmath.c
+index b8b4a95..fd376cd 100644
+--- a/libparted/cs/natmath.c
++++ b/libparted/cs/natmath.c
+@@ -74,16 +74,16 @@ ped_round_down_to (PedSector sector, PedSector grain_size)
+ return sector - abs_mod (sector, grain_size);
+ }
+
+-inline PedSector
++PedSector
+ ped_div_round_up (PedSector numerator, PedSector divisor)
+ {
+- return (numerator + divisor - 1) / divisor;
++ return (numerator + divisor - 1) / divisor;
+ }
+
+-inline PedSector
++PedSector
+ ped_div_round_to_nearest (PedSector numerator, PedSector divisor)
+ {
+- return (numerator + divisor/2) / divisor;
++ return (numerator + divisor/2) / divisor;
+ }
+
+ /* Rounds a number up to the closest number that is a multiple of
+diff --git a/libparted/disk.c b/libparted/disk.c
+index 1582f26..c465d40 100644
+--- a/libparted/disk.c
++++ b/libparted/disk.c
+@@ -224,23 +224,24 @@ static int
+ _add_duplicate_part (PedDisk* disk, PedPartition* old_part)
+ {
+ PedPartition* new_part;
+- PedConstraint* constraint_exact;
++ int ret;
+
+ new_part = disk->type->ops->partition_duplicate (old_part);
+ if (!new_part)
+ goto error;
+ new_part->disk = disk;
+
+- constraint_exact = ped_constraint_exact (&new_part->geom);
+- if (!constraint_exact)
++ _disk_push_update_mode (disk);
++ ret = _disk_raw_add (disk, new_part);
++ _disk_pop_update_mode (disk);
++ if (!ret)
+ goto error_destroy_new_part;
+- if (!ped_disk_add_partition (disk, new_part, constraint_exact))
+- goto error_destroy_constraint_exact;
+- ped_constraint_destroy (constraint_exact);
++#ifdef DEBUG
++ if (!_disk_check_sanity (disk))
++ goto error_destroy_new_part;
++#endif
+ return 1;
+
+-error_destroy_constraint_exact:
+- ped_constraint_destroy (constraint_exact);
+ error_destroy_new_part:
+ ped_partition_destroy (new_part);
+ error:
+@@ -2161,6 +2162,8 @@ ped_partition_flag_get_name (PedPartitionFlag flag)
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ return N_("boot");
++ case PED_PARTITION_BIOS_GRUB:
++ return N_("bios_grub");
+ case PED_PARTITION_ROOT:
+ return N_("root");
+ case PED_PARTITION_SWAP:
+diff --git a/libparted/exception.c b/libparted/exception.c
+index 0940d65..230a9b7 100644
+--- a/libparted/exception.c
++++ b/libparted/exception.c
+@@ -1,6 +1,6 @@
+ /*
+ libparted - a library for manipulating disk partitions
+- Copyright (C) 1999, 2000, 2007 Free Software Foundation, Inc.
++ Copyright (C) 1999, 2000, 2007-2008 Free Software Foundation, 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
+@@ -73,7 +73,7 @@ static PedExceptionHandler* ex_handler = default_handler;
+ static PedException* ex = NULL;
+ static int ex_fetch_count = 0;
+
+-static char* type_strings [] = {
++static const char *const type_strings [] = {
+ N_("Information"),
+ N_("Warning"),
+ N_("Error"),
+@@ -82,7 +82,7 @@ static char* type_strings [] = {
+ N_("No Implementation")
+ };
+
+-static char* option_strings [] = {
++static const char *const option_strings [] = {
+ N_("Fix"),
+ N_("Yes"),
+ N_("No"),
+@@ -98,7 +98,7 @@ static char* option_strings [] = {
+ char*
+ ped_exception_get_type_string (PedExceptionType ex_type)
+ {
+- return type_strings [ex_type - 1];
++ return (char *) type_strings [ex_type - 1];
+ }
+
+ /* FIXME: move this out to the prospective math.c */
+@@ -121,7 +121,7 @@ ped_log2 (int n)
+ char*
+ ped_exception_get_option_string (PedExceptionOption ex_opt)
+ {
+- return option_strings [ped_log2 (ex_opt)];
++ return (char *) option_strings [ped_log2 (ex_opt)];
+ }
+
+ static PedExceptionOption
+@@ -243,8 +243,8 @@ ped_exception_throw (PedExceptionType ex_type,
+ ex->type = ex_type;
+ ex->options = ex_opts;
+
+- while (1) {
+- ex->message = (char*) malloc (size);
++ while (message) {
++ ex->message = (char*) malloc (size * sizeof (char));
+ if (!ex->message)
+ goto no_memory;
+
+@@ -256,6 +256,7 @@ ped_exception_throw (PedExceptionType ex_type,
+ break;
+
+ size += 10;
++ ped_free (ex->message);
+ }
+
+ return do_throw ();
+diff --git a/libparted/fs/ext2/ext2.c b/libparted/fs/ext2/ext2.c
+index 618fca9..79fc6f6 100644
+--- a/libparted/fs/ext2/ext2.c
++++ b/libparted/fs/ext2/ext2.c
+@@ -727,7 +727,10 @@ struct ext2_fs *ext2_open(struct ext2_dev_handle *handle, int state)
+ EXT2_FEATURE_RO_COMPAT_LARGE_FILE)))
+ {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+- _("File system has an incompatible feature enabled."));
++ _("File system has an incompatible feature enabled. "
++ "Compatible features are has_journal, dir_index, "
++ "filetype, sparse_super and large_file. "
++ "Use tune2fs or debugfs to remove features."));
+ goto error_free_fs;
+ }
+
+diff --git a/libparted/fs/ext2/ext2_block_relocator.c b/libparted/fs/ext2/ext2_block_relocator.c
+index b75a4c5..60f3d50 100644
+--- a/libparted/fs/ext2/ext2_block_relocator.c
++++ b/libparted/fs/ext2/ext2_block_relocator.c
+@@ -691,10 +691,11 @@ static int ext2_block_relocator_flush(struct ext2_fs *fs, struct ext2_block_relo
+ {
+ /* FIXXXME gross hack */
+ fprintf(stderr, "relocating %s blocks",
+- ((char *[4]){"direct",
+- "singly indirect",
+- "doubly indirect",
+- "triply indirect"})[i]);
++ ((const char *const [4])
++ {"direct",
++ "singly indirect",
++ "doubly indirect",
++ "triply indirect"})[i]);
+ fflush(stderr);
+ }
+
+diff --git a/libparted/fs/ext2/ext2_mkfs.c b/libparted/fs/ext2/ext2_mkfs.c
+index 19931dd..b1a8ce3 100644
+--- a/libparted/fs/ext2/ext2_mkfs.c
++++ b/libparted/fs/ext2/ext2_mkfs.c
+@@ -1,6 +1,6 @@
+ /*
+ ext2_mkfs.c -- ext2 fs creator
+- Copyright (C) 1999, 2000, 2001, 2007 Free Software Foundation, Inc.
++ Copyright (C) 1999, 2000, 2001, 2007-2008 Free Software Foundation, 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
+@@ -263,7 +263,7 @@ error:
+
+ /* returns the offset into the buffer of the start of the next dir entry */
+ static int _set_dirent(void* buf, int offset, int block_size, int is_last,
+- uint32_t inode, char* name, int file_type)
++ uint32_t inode, const char* name, int file_type)
+ {
+ struct ext2_dir_entry_2 *dirent = (void*) (((char*)buf) + offset);
+ int name_len = strlen(name);
+diff --git a/libparted/fs/fat/resize.c b/libparted/fs/fat/resize.c
+index 7386948..5f24ec2 100644
+--- a/libparted/fs/fat/resize.c
++++ b/libparted/fs/fat/resize.c
+@@ -1,6 +1,6 @@
+ /*
+ libparted
+- Copyright (C) 1998, 1999, 2000, 2007 Free Software Foundation, Inc.
++ Copyright (C) 1998, 1999, 2000, 2007-2008 Free Software Foundation, 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
+@@ -481,8 +481,8 @@ ask_type (PedFileSystem* fs, int fat16_ok, int fat32_ok, FatType* out_fat_type)
+ {
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedExceptionOption status;
+- char* fat16_msg;
+- char* fat32_msg;
++ const char* fat16_msg;
++ const char* fat32_msg;
+
+ if (fs_info->fat_type == FAT_TYPE_FAT16)
+ fat16_msg = _("If you leave your file system as FAT16, "
+diff --git a/libparted/fs/fat/traverse.c b/libparted/fs/fat/traverse.c
+index 3d2e2b5..4ef2044 100644
+--- a/libparted/fs/fat/traverse.c
++++ b/libparted/fs/fat/traverse.c
+@@ -120,7 +120,7 @@ fat_traverse_mark_dirty (FatTraverseInfo* trav_info)
+
+ FatTraverseInfo*
+ fat_traverse_begin (PedFileSystem* fs, FatCluster start_cluster,
+- char* dir_name)
++ const char* dir_name)
+ {
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatTraverseInfo* trav_info;
+diff --git a/libparted/fs/fat/traverse.h b/libparted/fs/fat/traverse.h
+index 21e4c27..afb24a5 100644
+--- a/libparted/fs/fat/traverse.h
++++ b/libparted/fs/fat/traverse.h
+@@ -42,7 +42,8 @@ extern int fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info);
+ /* starts traversal at an arbitary cluster. if start_cluster==0, then uses
+ root directory */
+ extern FatTraverseInfo* fat_traverse_begin (PedFileSystem* fs,
+- FatCluster start_cluster, char* dir_name);
++ FatCluster start_cluster,
++ const char* dir_name);
+
+ extern int fat_traverse_complete (FatTraverseInfo* trav_info);
+
+diff --git a/libparted/labels/bsd.c b/libparted/labels/bsd.c
+index f25353b..ee9aba0 100644
+--- a/libparted/labels/bsd.c
++++ b/libparted/labels/bsd.c
+@@ -108,6 +108,9 @@ typedef struct {
+
+ typedef struct {
+ uint8_t type;
++ int boot;
++ int raid;
++ int lvm;
+ } BSDPartitionData;
+
+ static PedDiskType bsd_disk_type;
+@@ -394,6 +397,9 @@ bsd_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ if (!bsd_data)
+ goto error_free_part;
+ bsd_data->type = 0;
++ bsd_data->boot = 0;
++ bsd_data->raid = 0;
++ bsd_data->lvm = 0;
+ } else {
+ part->disk_specific = NULL;
+ }
+@@ -423,6 +429,9 @@ bsd_partition_duplicate (const PedPartition* part)
+ old_bsd_data = (BSDPartitionData*) part->disk_specific;
+ new_bsd_data = (BSDPartitionData*) new_part->disk_specific;
+ new_bsd_data->type = old_bsd_data->type;
++ new_bsd_data->boot = old_bsd_data->boot;
++ new_bsd_data->raid = old_bsd_data->raid;
++ new_bsd_data->lvm = old_bsd_data->lvm;
+ return new_part;
+ }
+
+@@ -456,14 +465,60 @@ bsd_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+ static int
+ bsd_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+ {
+- /* no flags for bsd */
++ PedDisk* disk;
++// PedPartition* walk; // since -Werror, this unused variable would break build
++ BSDPartitionData* bsd_data;
++
++ PED_ASSERT (part != NULL, return 0);
++ PED_ASSERT (part->disk_specific != NULL, return 0);
++ PED_ASSERT (part->disk != NULL, return 0);
++
++ bsd_data = part->disk_specific;
++ disk = part->disk;
++
++ switch (flag) {
++ case PED_PARTITION_BOOT:
++ bsd_data->boot = state;
++ return 1;
++ case PED_PARTITION_RAID:
++ if (state) {
++ bsd_data->lvm = 0;
++ }
++ bsd_data->raid = state;
++ return 1;
++ case PED_PARTITION_LVM:
++ if (state) {
++ bsd_data->raid = 0;
++ }
++ bsd_data->lvm = state;
++ default:
++ ;
++ }
+ return 0;
+ }
+
+ static int
+ bsd_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+ {
+- /* no flags for bsd */
++ BSDPartitionData* bsd_data;
++
++ PED_ASSERT (part != NULL, return 0);
++ PED_ASSERT (part->disk_specific != NULL, return 0);
++
++ bsd_data = part->disk_specific;
++ switch (flag) {
++ case PED_PARTITION_BOOT:
++ return bsd_data->boot;
++
++ case PED_PARTITION_RAID:
++ return bsd_data->raid;
++
++ case PED_PARTITION_LVM:
++ return bsd_data->lvm;
++
++ default:
++ ;
++ }
+ return 0;
+ }
+
+@@ -471,7 +526,14 @@ static int
+ bsd_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+ {
+- /* no flags for bsd */
++ switch (flag) {
++ case PED_PARTITION_BOOT:
++ case PED_PARTITION_RAID:
++ case PED_PARTITION_LVM:
++ return 1;
++ default:
++ ;
++ }
+ return 0;
+ }
+
+diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
+index c686658..641257c 100644
+--- a/libparted/labels/dos.c
++++ b/libparted/labels/dos.c
+@@ -190,14 +190,16 @@ msdos_probe (const PedDevice *dev)
+ if (PED_LE16_TO_CPU (part_table->magic) != MSDOS_MAGIC)
+ goto probe_fail;
+
+- /* if this is a FAT fs, fail here. Note that the Smart Boot Manager
+- * Loader (SBML) signature indicates a partition table, not a file
+- * system.
++ /* If this is a FAT fs, fail here. Checking for the FAT signature
++ * has some false positives; instead, do what the Linux kernel does
++ * and ensure that each partition has a boot indicator that is
++ * either 0 or 0x80.
+ */
+- if ((!strncmp (part_table->boot_code + 0x36, "FAT", 3)
+- && strncmp (part_table->boot_code + 0x40, "SBML", 4) != 0)
+- || !strncmp (part_table->boot_code + 0x52, "FAT", 3))
+- goto probe_fail;
++ for (i = 0; i < 4; i++) {
++ if (part_table->partitions[i].boot_ind != 0
++ && part_table->partitions[i].boot_ind != 0x80)
++ goto probe_fail;
++ }
+
+ /* If this is a GPT disk, fail here */
+ for (i = 0; i < 4; i++) {
+diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
+index e4ecf52..7adf12f 100644
+--- a/libparted/labels/fdasd.c
++++ b/libparted/labels/fdasd.c
+@@ -149,7 +149,7 @@ fdasd_error (fdasd_anchor_t *anc, enum fdasd_failure why, char * str)
+ case device_verification_failed:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Device verification failed"),
+- _("The specified device is not a valid DASD device"));,
++ _("The specified device is not a valid DASD device"));
+ break;
+ default:
+ sprintf(error, "fdasd: %s: %s\n", _("Fatal error"), str);
+diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
+index 4dc4f10..cb90d11 100644
+--- a/libparted/labels/gpt.c
++++ b/libparted/labels/gpt.c
+@@ -4,7 +4,7 @@
+ original version by Matt Domsch <Matt_Domsch@dell.com>
+ Disclaimed into the Public Domain
+
+- Portions Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007
++ Portions Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007, 2008
+ Free Software Foundation, Inc.
+
+ EFI GUID Partition Table handling
+@@ -86,6 +86,10 @@ typedef struct {
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xC12A7328), PED_CPU_TO_LE16 (0xF81F), \
+ PED_CPU_TO_LE16 (0x11d2), 0xBA, 0x4B, \
+ { 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B }})
++#define PARTITION_BIOS_GRUB_GUID \
++ ((efi_guid_t) { PED_CPU_TO_LE32 (0x21686148), PED_CPU_TO_LE16 (0x6449), \
++ PED_CPU_TO_LE16 (0x6E6f), 0x74, 0x4E, \
++ { 0x65, 0x65, 0x64, 0x45, 0x46, 0x49 }})
+ #define LEGACY_MBR_PARTITION_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x024DEE41), PED_CPU_TO_LE16 (0x33E7), \
+ PED_CPU_TO_LE16 (0x11d3, 0x9D, 0x69, \
+@@ -245,6 +249,7 @@ typedef struct _GPTPartitionData {
+ int lvm;
+ int raid;
+ int boot;
++ int bios_grub;
+ int hp_service;
+ int hidden;
+ int msftres;
+@@ -753,13 +758,16 @@ _parse_part_entry (PedDisk* disk, GuidPartitionEntry_t* pte)
+
+ gpt_part_data->lvm = gpt_part_data->raid
+ = gpt_part_data->boot = gpt_part_data->hp_service
+- = gpt_part_data->hidden = gpt_part_data->msftres = 0;
++ = gpt_part_data->hidden = gpt_part_data->msftres
++ = gpt_part_data->bios_grub = 0;
+
+ if (pte->Attributes.RequiredToFunction & 0x1)
+ gpt_part_data->hidden = 1;
+
+ if (!guid_cmp (gpt_part_data->type, PARTITION_SYSTEM_GUID))
+ gpt_part_data->boot = 1;
++ else if (!guid_cmp (gpt_part_data->type, PARTITION_BIOS_GRUB_GUID))
++ gpt_part_data->bios_grub = 1;
+ else if (!guid_cmp (gpt_part_data->type, PARTITION_RAID_GUID))
+ gpt_part_data->raid = 1;
+ else if (!guid_cmp (gpt_part_data->type, PARTITION_LVM_GUID))
+@@ -1130,6 +1138,7 @@ gpt_partition_new (const PedDisk* disk,
+ gpt_part_data->lvm = 0;
+ gpt_part_data->raid = 0;
+ gpt_part_data->boot = 0;
++ gpt_part_data->bios_grub = 0;
+ gpt_part_data->hp_service = 0;
+ gpt_part_data->hidden = 0;
+ gpt_part_data->msftres = 0;
+@@ -1208,6 +1217,10 @@ gpt_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+ gpt_part_data->type = PARTITION_SYSTEM_GUID;
+ return 1;
+ }
++ if (gpt_part_data->bios_grub) {
++ gpt_part_data->type = PARTITION_BIOS_GRUB_GUID;
++ return 1;
++ }
+ if (gpt_part_data->hp_service) {
+ gpt_part_data->type = PARTITION_HPSERVICE_GUID;
+ return 1;
+@@ -1306,6 +1319,16 @@ gpt_partition_set_flag(PedPartition *part,
+ if (state)
+ gpt_part_data->raid
+ = gpt_part_data->lvm
++ = gpt_part_data->bios_grub
++ = gpt_part_data->hp_service
++ = gpt_part_data->msftres = 0;
++ return gpt_partition_set_system (part, part->fs_type);
++ case PED_PARTITION_BIOS_GRUB:
++ gpt_part_data->bios_grub = state;
++ if (state)
++ gpt_part_data->raid
++ = gpt_part_data->lvm
++ = gpt_part_data->boot
+ = gpt_part_data->hp_service
+ = gpt_part_data->msftres = 0;
+ return gpt_partition_set_system (part, part->fs_type);
+@@ -1314,6 +1337,7 @@ gpt_partition_set_flag(PedPartition *part,
+ if (state)
+ gpt_part_data->boot
+ = gpt_part_data->lvm
++ = gpt_part_data->bios_grub
+ = gpt_part_data->hp_service
+ = gpt_part_data->msftres = 0;
+ return gpt_partition_set_system (part, part->fs_type);
+@@ -1322,6 +1346,7 @@ gpt_partition_set_flag(PedPartition *part,
+ if (state)
+ gpt_part_data->boot
+ = gpt_part_data->raid
++ = gpt_part_data->bios_grub
+ = gpt_part_data->hp_service
+ = gpt_part_data->msftres = 0;
+ return gpt_partition_set_system (part, part->fs_type);
+@@ -1331,6 +1356,7 @@ gpt_partition_set_flag(PedPartition *part,
+ gpt_part_data->boot
+ = gpt_part_data->raid
+ = gpt_part_data->lvm
++ = gpt_part_data->bios_grub
+ = gpt_part_data->msftres = 0;
+ return gpt_partition_set_system (part, part->fs_type);
+ case PED_PARTITION_MSFT_RESERVED:
+@@ -1339,6 +1365,7 @@ gpt_partition_set_flag(PedPartition *part,
+ gpt_part_data->boot
+ = gpt_part_data->raid
+ = gpt_part_data->lvm
++ = gpt_part_data->bios_grub
+ = gpt_part_data->hp_service = 0;
+ return gpt_partition_set_system (part, part->fs_type);
+ case PED_PARTITION_HIDDEN:
+@@ -1367,6 +1394,8 @@ gpt_partition_get_flag(const PedPartition *part, PedPartitionFlag flag)
+ return gpt_part_data->lvm;
+ case PED_PARTITION_BOOT:
+ return gpt_part_data->boot;
++ case PED_PARTITION_BIOS_GRUB:
++ return gpt_part_data->bios_grub;
+ case PED_PARTITION_HPSERVICE:
+ return gpt_part_data->hp_service;
+ case PED_PARTITION_MSFT_RESERVED:
+@@ -1390,6 +1419,7 @@ gpt_partition_is_flag_available(const PedPartition * part,
+ case PED_PARTITION_RAID:
+ case PED_PARTITION_LVM:
+ case PED_PARTITION_BOOT:
++ case PED_PARTITION_BIOS_GRUB:
+ case PED_PARTITION_HPSERVICE:
+ case PED_PARTITION_MSFT_RESERVED:
+ case PED_PARTITION_HIDDEN:
+diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
+index f014194..538e0c0 100644
+--- a/libparted/labels/mac.c
++++ b/libparted/labels/mac.c
+@@ -1,6 +1,6 @@
+ /*
+ libparted - a library for manipulating disk partitions
+- Copyright (C) 2000, 2002, 2004, 2007 Free Software Foundation, Inc.
++ Copyright (C) 2000, 2002, 2004, 2007-2008 Free Software Foundation, 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
+@@ -376,19 +376,19 @@ mac_clobber (PedDevice* dev)
+ #endif /* !DISCOVER_ONLY */
+
+ static int
+-_rawpart_cmp_type (MacRawPartition* raw_part, char* type)
++_rawpart_cmp_type (const MacRawPartition* raw_part, const char* type)
+ {
+ return strncasecmp (raw_part->type, type, 32) == 0;
+ }
+
+ static int
+-_rawpart_cmp_name (MacRawPartition* raw_part, char* name)
++_rawpart_cmp_name (const MacRawPartition* raw_part, const char* name)
+ {
+ return strncasecmp (raw_part->name, name, 32) == 0;
+ }
+
+ static int
+-_rawpart_is_partition_map (MacRawPartition* raw_part)
++_rawpart_is_partition_map (const MacRawPartition* raw_part)
+ {
+ return _rawpart_cmp_type (raw_part, "Apple_partition_map");
+ }
+@@ -408,7 +408,7 @@ strncasestr (const char* haystack, const char* needle, int n)
+ }
+
+ static int
+-_rawpart_is_boot (MacRawPartition* raw_part)
++_rawpart_is_boot (const MacRawPartition* raw_part)
+ {
+ if (!strcasecmp(raw_part->type, "Apple_Bootstrap"))
+ return 1;
+@@ -420,7 +420,7 @@ _rawpart_is_boot (MacRawPartition* raw_part)
+ }
+
+ static int
+-_rawpart_is_driver (MacRawPartition* raw_part)
++_rawpart_is_driver (const MacRawPartition* raw_part)
+ {
+ if (strncmp (raw_part->type, "Apple_", 6) != 0)
+ return 0;
+@@ -430,7 +430,7 @@ _rawpart_is_driver (MacRawPartition* raw_part)
+ }
+
+ static int
+-_rawpart_has_driver (MacRawPartition* raw_part, MacDiskData* mac_disk_data)
++_rawpart_has_driver (const MacRawPartition* raw_part, MacDiskData* mac_disk_data)
+ {
+ MacDeviceDriver *driverlist;
+ uint16_t i, bsz;
+diff --git a/libparted/tests/Makefile.am b/libparted/tests/Makefile.am
+index 12ad29f..d526207 100644
+--- a/libparted/tests/Makefile.am
++++ b/libparted/tests/Makefile.am
+@@ -3,13 +3,17 @@
+ #
+ # This file may be modified and/or distributed without restriction.
+
+-TESTS = t1000-label.sh
++TESTS = t1000-label.sh t2000-disk.sh
+ EXTRA_DIST = $(TESTS)
+-bin_PROGRAMS = label
++bin_PROGRAMS = label disk
+ label_CFLAGS = $(CHECK_CFLAGS) -I$(top_srcdir)/include
+ label_LDADD = $(CHECK_LIBS) $(top_builddir)/libparted/libparted.la
+ label_SOURCES = common.h common.c label.c
+
++disk_CFLAGS = $(CHECK_CFLAGS) -I$(top_srcdir)/include
++disk_LDADD = $(CHECK_LIBS) $(top_builddir)/libparted/libparted.la
++disk_SOURCES = common.h common.c disk.c
++
+ MAINTAINERCLEANFILES = Makefile.in
+
+ CLEANFILES = init.sh
+diff --git a/libparted/tests/disk.c b/libparted/tests/disk.c
+new file mode 100644
+index 0000000..295ec05
+--- /dev/null
++++ b/libparted/tests/disk.c
+@@ -0,0 +1,111 @@
++#include <config.h>
++#include <unistd.h>
++
++#include <check.h>
++
++#include <parted/parted.h>
++
++#include "common.h"
++
++static char* temporary_disk;
++
++static void
++create_disk (void)
++{
++ temporary_disk = _create_disk (20);
++ fail_if (temporary_disk == NULL, "Failed to create temporary disk");
++}
++
++static void
++destroy_disk (void)
++{
++ unlink (temporary_disk);
++ free (temporary_disk);
++}
++
++/* TEST: Create a disklabel on a simple disk image */
++START_TEST (test_duplicate)
++{
++ PedDevice* dev = ped_device_get (temporary_disk);
++ if (dev == NULL)
++ return;
++
++ PedDiskType* type;
++ PedDisk* disk;
++ PedDisk* disk_dup;
++ PedPartition *part;
++ PedPartition *part_dup;
++ PedConstraint *constraint;
++
++ int part_num[] = {1, 5, 6, 0};
++
++ disk = _create_disk_label (dev, ped_disk_type_get ("msdos"));
++
++ constraint = ped_constraint_any (dev);
++
++ /* Primary partition from 16,4kB to 15MB */
++ part = ped_partition_new (disk, PED_PARTITION_EXTENDED,
++ NULL,
++ 32, 29311);
++ ped_disk_add_partition (disk, part, constraint);
++
++ /* Logical partition from 10MB to 15MB */
++ part = ped_partition_new (disk, PED_PARTITION_LOGICAL,
++ ped_file_system_type_get ("ext2"),
++ 19584, 29311);
++ ped_disk_add_partition (disk, part, constraint);
++
++ /* Logical partition from 16,4kB to 4981kB */
++ part = ped_partition_new (disk, PED_PARTITION_LOGICAL,
++ ped_file_system_type_get ("ext2"),
++ 32, 9727);
++ ped_disk_add_partition (disk, part, constraint);
++
++ ped_disk_commit (disk);
++
++ ped_constraint_destroy (constraint);
++
++ disk_dup = ped_disk_duplicate (disk);
++
++ /* Checks if both partitions match */
++ for (int *i = part_num; *i != 0; i++) {
++ part = ped_disk_get_partition (disk, *i);
++ part_dup = ped_disk_get_partition (disk_dup, *i);
++
++ fail_if (part->geom.start != part_dup->geom.start ||
++ part->geom.end != part_dup->geom.end,
++ "Duplicated partition %d doesn't match. "
++ "Details are start: %d/%d end: %d/%d\n",
++ *i, part->geom.start, part_dup->geom.start,
++ part->geom.end, part_dup->geom.end);
++ }
++
++ ped_disk_destroy (disk);
++ ped_device_destroy (dev);
++}
++END_TEST
++
++int
++main (void)
++{
++ int number_failed;
++ Suite* suite = suite_create ("Disk");
++ TCase* tcase_duplicate = tcase_create ("Duplicate");
++
++ /* Fail when an exception is raised */
++ ped_exception_set_handler (_test_exception_handler);
++
++ tcase_add_checked_fixture (tcase_duplicate, create_disk, destroy_disk);
++ tcase_add_test (tcase_duplicate, test_duplicate);
++ /* Disable timeout for this test */
++ tcase_set_timeout (tcase_duplicate, 0);
++ suite_add_tcase (suite, tcase_duplicate);
++
++ SRunner* srunner = srunner_create (suite);
++ srunner_run_all (srunner, CK_VERBOSE);
++
++ number_failed = srunner_ntests_failed (srunner);
++ srunner_free (srunner);
++
++ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
++}
+diff --git a/libparted/tests/t2000-disk.sh b/libparted/tests/t2000-disk.sh
+new file mode 100755
+index 0000000..7a85b98
+--- /dev/null
++++ b/libparted/tests/t2000-disk.sh
+@@ -0,0 +1,27 @@
++#!/bin/sh
++
++# Copyright (C) 2007 Free Software Foundation, 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 3 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, see <http://www.gnu.org/licenses/>.
++
++test_description='run the disk unit tests in a directory supporting O_DIRECT'
++# This wrapper around the ./label binary is used to find a directory
++# in which one can open a file with the O_DIRECT flag.
++
++. ./init.sh
++
++test_expect_success \
++ 'run the actual tests' 'disk'
++
++test_done
+diff --git a/parted/parted.c b/parted/parted.c
+index 6a606ae..2afc2c1 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -79,7 +79,7 @@ typedef struct {
+ time_t predicted_time_left;
+ } TimerContext;
+
+-static struct option options[] = {
++static const struct option const options[] = {
+ /* name, has-arg, string-return-val, char-return-val */
+ {"help", 0, NULL, 'h'},
+ {"list", 0, NULL, 'l'},
+@@ -90,7 +90,7 @@ static struct option options[] = {
+ {NULL, 0, NULL, 0}
+ };
+
+-static char* options_help [][2] = {
++static const char *const options_help [][2] = {
+ {"help", N_("displays this help message")},
+ {"list", N_("lists partition layout on all block devices")},
+ {"machine", N_("displays machine parseable output")},
+@@ -107,26 +107,26 @@ int opt_machine_mode = 0;
+ int disk_is_modified = 0;
+ int is_toggle_mode = 0;
+
+-static char* number_msg = N_(
++static const char* number_msg = N_(
+ "NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+ "primary partitions number from 1 to 4, logical partitions from 5 onwards.\n");
+
+-static char* label_type_msg_start = N_("LABEL-TYPE is one of: ");
+-static char* flag_msg_start = N_("FLAG is one of: ");
+-static char* unit_msg_start = N_("UNIT is one of: ");
+-static char* part_type_msg = N_("PART-TYPE is one of: primary, logical, "
++static const char* label_type_msg_start = N_("LABEL-TYPE is one of: ");
++static const char* flag_msg_start = N_("FLAG is one of: ");
++static const char* unit_msg_start = N_("UNIT is one of: ");
++static const char* part_type_msg = N_("PART-TYPE is one of: primary, logical, "
+ "extended\n");
+-static char* fs_type_msg_start = N_("FS-TYPE is one of: ");
+-static char* start_end_msg = N_("START and END are disk locations, such as "
++static const char* fs_type_msg_start = N_("FS-TYPE is one of: ");
++static const char* start_end_msg = N_("START and END are disk locations, such as "
+ "4GB or 10%. Negative values count from the end of the disk. "
+ "For example, -1s specifies exactly the last sector.\n");
+-static char* state_msg = N_("STATE is one of: on, off\n");
+-static char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n");
+-static char* name_msg = N_("NAME is any word you want\n");
+-static char* resize_msg_start = N_("The partition must have one of the "
++static const char* state_msg = N_("STATE is one of: on, off\n");
++static const char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n");
++static const char* name_msg = N_("NAME is any word you want\n");
++static const char* resize_msg_start = N_("The partition must have one of the "
+ "following FS-TYPEs: ");
+
+-static char* copyright_msg = N_(
++static const char* copyright_msg = N_(
+ "Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+ "This program is free software, covered by the GNU General Public License.\n"
+ "\n"
+@@ -1226,7 +1226,7 @@ partition_print (PedPartition* part)
+ putchar ('\n');
+
+ flags = partition_print_flags (part);
+-
++
+ printf (_("Minor: %d\n"), part->num);
+ printf (_("Flags: %s\n"), flags);
+ printf (_("File System: %s\n"), fs->type->name);
+@@ -1264,15 +1264,17 @@ do_print (PedDevice** dev)
+ int has_free_arg = 0;
+ int has_list_arg = 0;
+ int has_num_arg = 0;
+- char* transport[13] = {"unknown", "scsi", "ide", "dac960",
+- "cpqarray", "file", "ataraid", "i2o",
+- "ubd", "dasd", "viodasd", "sx8", "dm"};
++ const char *const transport[14] = {"unknown", "scsi", "ide", "dac960",
++ "cpqarray", "file", "ataraid", "i2o",
++ "ubd", "dasd", "viodasd", "sx8", "dm",
++ "xvd"};
+ char* peek_word;
+ char* start;
+ char* end;
+ char* size;
+ const char* name;
+ char* tmp;
++ char* flags;
+ wchar_t* table_rendered;
+
+ disk = ped_disk_new (*dev);
+@@ -1472,7 +1474,9 @@ do_print (PedDevice** dev)
+ str_list_append (row, name);
+ }
+
+- str_list_append (row, partition_print_flags (part));
++ flags = partition_print_flags (part);
++ str_list_append (row, flags);
++ ped_free (flags);
+ } else {
+ if (has_extended)
+ str_list_append (row, "");
+@@ -1485,6 +1489,10 @@ do_print (PedDevice** dev)
+ //PED_ASSERT (row.cols == caption.cols)
+ table_add_row_from_strlist (table, row);
+ str_list_destroy (row);
++ ped_free (tmp);
++ ped_free (start);
++ ped_free (end);
++ ped_free (size);
+ }
+
+ table_rendered = table_render (table);
+diff --git a/parted/ui.c b/parted/ui.c
+index a53643f..f854a54 100644
+--- a/parted/ui.c
++++ b/parted/ui.c
+@@ -154,17 +154,17 @@ struct siginfo_t {
+ # define ILL_BADSTK (INTMAX - 8)
+ #endif
+
+-char* prog_name = "GNU Parted " VERSION "\n";
++const char* prog_name = "GNU Parted " VERSION "\n";
+
+-static char* banner_msg = N_(
++static const char* banner_msg = N_(
+ "Welcome to GNU Parted! Type 'help' to view a list of commands.\n");
+
+-static char* usage_msg = N_(
++static const char* usage_msg = N_(
+ "Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+ "Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, "
+ "run in\ninteractive mode.\n");
+
+-static char* bug_msg = N_(
++static const char* bug_msg = N_(
+ "\n\nYou found a bug in GNU Parted! Here's what you have to do:\n\n"
+ "Don't panic! The bug has most likely not affected any of your data.\n"
+ "Help us to fix this bug by doing the following:\n\n"
+@@ -218,7 +218,7 @@ screen_width ()
+
+ /* HACK: don't specify termcap separately - it'll annoy the users. */
+ #ifdef HAVE_LIBREADLINE
+- width = tgetnum ("co");
++ width = tgetnum ((char *) "co");
+ #endif
+
+ if (width <= 0)
+@@ -569,7 +569,9 @@ _readline (const char* prompt, const StrList* possibilities)
+ fputs (line, stdout);
+ fflush (stdout);
+ #endif
+- line [strlen (line) - 1] = 0; /* kill trailing CR */
++ /* kill trailing NL */
++ if (strlen (line))
++ line [strlen (line) - 1] = 0;
+ } else {
+ free (line);
+ line = NULL;
+diff --git a/parted/ui.h b/parted/ui.h
+index f5cf760..77bb194 100644
+--- a/parted/ui.h
++++ b/parted/ui.h
+@@ -1,6 +1,6 @@
+ /*
+ parted - a frontend to libparted
+- Copyright (C) 1999, 2000, 2001, 2007 Free Software Foundation, Inc.
++ Copyright (C) 1999, 2000, 2001, 2007-2008 Free Software Foundation, 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
+@@ -21,7 +21,7 @@
+
+ #include "strlist.h"
+
+-extern char* prog_name;
++extern const char *prog_name;
+
+ extern int init_ui ();
+ extern int non_interactive_mode (PedDevice** dev, Command* cmd_list[],
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 0a42a8d..3a694fe 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -5,8 +5,10 @@ TESTS = \
+ t1100-busy-label.sh \
+ t1500-small-ext2.sh \
+ t2000-mkfs.sh \
++ t2200-dos-label-recog.sh \
+ t3000-constraints.sh \
+- t3100-resize-ext2-partion.sh
++ t3100-resize-ext2-partion.sh \
++ t5000-tags.sh
+
+ EXTRA_DIST = \
+ $(TESTS) test-lib.sh mkdtemp
+diff --git a/tests/t2200-dos-label-recog.sh b/tests/t2200-dos-label-recog.sh
+new file mode 100755
+index 0000000..d5d2670
+--- /dev/null
++++ b/tests/t2200-dos-label-recog.sh
+@@ -0,0 +1,61 @@
++#!/bin/sh
++
++# Copyright (C) 2008 Free Software Foundation, 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 3 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, see <http://www.gnu.org/licenses/>.
++
++test_description='improved MSDOS partition-table recognition'
++
++. ./init.sh
++
++######################################################################
++# With vestiges of a preceding FAT file system boot sector in the MBR,
++# parted 1.8.8.1.29 and earlier would fail to recognize a DOS
++# partition table.
++######################################################################
++N=100k
++dev=loop-file
++test_expect_success \
++ 'create a file to simulate the underlying device' \
++ 'dd if=/dev/null of=$dev bs=1 seek=$N 2> /dev/null'
++
++test_expect_success \
++ 'label the test disk' \
++ 'parted -s $dev mklabel msdos > out 2>&1'
++test_expect_success 'expect no output' '$compare out /dev/null'
++
++test_expect_success \
++ 'create two partition' \
++ '
++ parted -s $dev mkpart primary 1s 40s > out 2>&1 &&
++ parted -s $dev mkpart primary 41s 80s > out 2>&1
++
++ '
++test_expect_success 'expect no output' '$compare out /dev/null'
++
++test_expect_success \
++ 'write "FAT" where it would cause trouble' \
++ 'printf FAT|dd bs=1c seek=82 count=3 of=$dev conv=notrunc'
++
++test_expect_success \
++ 'print the partition table' \
++ '
++ parted -m -s $dev unit s p > out &&
++ tail -2 out > k && mv k out &&
++ printf "1:1s:40s:40s:::;\n2:41s:80s:40s:::;\n" > exp
++
++ '
++test_expect_success 'expect two partitions' '$compare out exp'
++
++test_done
+diff --git a/tests/t5000-tags.sh b/tests/t5000-tags.sh
+new file mode 100755
+index 0000000..dab48ae
+--- /dev/null
++++ b/tests/t5000-tags.sh
+@@ -0,0 +1,81 @@
++#!/bin/sh
++
++# Copyright (C) 2007,2008 Free Software Foundation, 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 3 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, see <http://www.gnu.org/licenses/>.
++
++test_description="test bios_grub flag in gpt labels"
++
++. ./init.sh
++
++dev=loop-file
++
++test_expect_success \
++ "setup: create zeroed device" \
++ '{ dd if=/dev/zero bs=1024 count=64; } > $dev'
++
++test_expect_success \
++ 'create gpt label' \
++ 'parted -s $dev mklabel gpt >out 2>&1'
++
++test_expect_success \
++ 'add a partition' \
++ 'parted -s $dev mkpart primary 0 1 >>out 2>&1'
++
++test_expect_success \
++ 'print the table (before manual modification)' \
++ 'parted -s $dev print >>out 2>&1'
++
++# Using bios_boot_magic='\x48\x61' looks nicer, but isn't portable.
++# dash's builtin printf doesn't recognize such \xHH hexadecimal escapes.
++bios_boot_magic='\110\141\150\41\111\144\157\156\164\116\145\145\144\105\106\111'
++
++printf "$bios_boot_magic" | dd of=$dev bs=1024 seek=1 conv=notrunc
++
++test_expect_success \
++ 'print the table (after manual modification)' \
++ 'parted -s $dev print >>out 2>&1'
++
++pwd=`pwd`
++
++fail=0
++{
++ cat <<EOF
++Model: (file)
++Disk .../$dev: 65.5kB
++Sector size (logical/physical): 512B/512B
++Partition Table: gpt
++
++Number Start End Size File system Name Flags
++ 1 17.4kB 48.6kB 31.2kB primary
++
++Model: (file)
++Disk .../$dev: 65.5kB
++Sector size (logical/physical): 512B/512B
++Partition Table: gpt
++
++Number Start End Size File system Name Flags
++ 1 17.4kB 48.6kB 31.2kB primary bios_grub
++
++EOF
++} > exp || fail=1
++
++test_expect_success \
++ 'prepare actual and expected output' \
++ 'test $fail = 0 &&
++ mv out o2 && sed "s,^Disk .*/$dev:,Disk .../$dev:," o2 > out'
++
++test_expect_success 'check for expected output' '$compare out exp'
++
++test_done
diff --git a/packages/parted/files/syscalls.h b/packages/parted/files/syscalls.h
deleted file mode 100644
index 9278704b29..0000000000
--- a/packages/parted/files/syscalls.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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
deleted file mode 100644
index be9b91cb9c..0000000000
--- a/packages/parted/files/syscalls.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- 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/files/use_llseek_syscall.patch b/packages/parted/files/use_llseek_syscall.patch
new file mode 100644
index 0000000000..ce305635ca
--- /dev/null
+++ b/packages/parted/files/use_llseek_syscall.patch
@@ -0,0 +1,28 @@
+--- a/libparted/arch/linux.c~ 2009-02-06 17:22:22.000000000 -0200
++++ a/libparted/arch/linux.c 2009-02-06 17:39:28.000000000 -0200
+@@ -53,6 +53,11 @@
+
+ #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+
++#ifndef HAVE_LLSEEK
++#define _llseek(fd, offset_high, offset_low, result, origin) \
++ syscall(SYS__llseek, fd, offset_high, offset_low, result, origin)
++#endif
++
+ #ifndef __NR__llseek
+ #define __NR__llseek 140
+ #endif
+@@ -1362,13 +1367,6 @@
+
+ #if SIZEOF_OFF_T < 8
+
+-static _syscall5(int,_llseek,
+- unsigned int, fd,
+- unsigned long, offset_high,
+- unsigned long, offset_low,
+- loff_t*, result,
+- unsigned int, origin)
+-
+ loff_t
+ llseek (unsigned int fd, loff_t offset, unsigned int whence)
+ {
diff --git a/packages/parted/parted-1.8.0/memory_allocation.patch b/packages/parted/parted-1.8.0/memory_allocation.patch
deleted file mode 100644
index ba3709680b..0000000000
--- a/packages/parted/parted-1.8.0/memory_allocation.patch
+++ /dev/null
@@ -1,42 +0,0 @@
---- parted-1.8.0/libparted/exception.c_orig 2006-12-11 19:44:23.000000000 +0000
-+++ parted-1.8.0/libparted/exception.c 2006-12-11 19:47:53.000000000 +0000
-@@ -231,6 +231,9 @@
- PedExceptionOption ex_opts, const char* message, ...)
- {
- va_list arg_list;
-+ int result;
-+ static int size = 1000;
-+
-
- if (ex)
- ped_exception_catch ();
-@@ -239,16 +242,22 @@
- if (!ex)
- goto no_memory;
-
-- ex->message = (char*) malloc (8192);
-- if (!ex->message)
-- goto no_memory;
--
- ex->type = ex_type;
- ex->options = ex_opts;
-
-- va_start (arg_list, message);
-- vsnprintf (ex->message, 8192, message, arg_list);
-- va_end (arg_list);
-+ while (1) {
-+ ex->message = (char*) malloc (size);
-+ if (!ex->message)
-+ goto no_memory;
-+ va_start (arg_list, message);
-+ result = vsnprintf (ex->message, size, message, arg_list);
-+ va_end (arg_list);
-+
-+ if (result > -1 && result < size)
-+ break;
-+ size += 10;
-+ }
-+
-
- return do_throw ();
-
diff --git a/packages/parted/parted_1.6.23.bb b/packages/parted/parted_1.6.23.bb
deleted file mode 100644
index cb9b08f407..0000000000
--- a/packages/parted/parted_1.6.23.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-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 = "r0"
-
-SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.gz"
-
-EXTRA_OECONF = "--disable-Werror"
-
-inherit autotools
diff --git a/packages/parted/parted_1.6.25.1.bb b/packages/parted/parted_1.6.25.1.bb
deleted file mode 100644
index 8681055855..0000000000
--- a/packages/parted/parted_1.6.25.1.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-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 = "r0"
-
-SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.gz"
-
-EXTRA_OECONF = "--disable-Werror"
-#export CFLAGS = "-mstructure-size-boundary=8"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/parted/parted_1.8.0.bb b/packages/parted/parted_1.8.0.bb
deleted file mode 100644
index bff27a62e8..0000000000
--- a/packages/parted/parted_1.8.0.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-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 = "r0"
-
-SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.gz \
- file://memory_allocation.patch;patch=0"
-
-EXTRA_OECONF = "--disable-Werror"
-#export CFLAGS = "-mstructure-size-boundary=8"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/parted/parted_1.8.2.bb b/packages/parted/parted_1.8.2.bb
deleted file mode 100644
index 1185014aa3..0000000000
--- a/packages/parted/parted_1.8.2.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-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 = "r0"
-
-SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.gz"
-
-#EXTRA_OECONF = "--disable-Werror"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/parted/parted_1.8.7.bb b/packages/parted/parted_1.8.7.bb
deleted file mode 100644
index 59e3aeaece..0000000000
--- a/packages/parted/parted_1.8.7.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-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/parted/parted_1.8.8.bb b/packages/parted/parted_1.8.8.bb
index d1b5cbe5b3..e93dbc8dfc 100644
--- a/packages/parted/parted_1.8.8.bb
+++ b/packages/parted/parted_1.8.8.bb
@@ -4,21 +4,17 @@ LICENSE = "GPLv3"
SECTION = "console/tools"
DEPENDS = "readline e2fsprogs-libs"
-PR = "r1"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.gz \
- file://syscalls.h \
- file://syscalls.patch;patch=1 \
+ file://use_llseek_syscall.patch;patch=1 \
+ file://parted-1.8.x.patch;patch=1 \
"
EXTRA_OECONF = "--disable-Werror ac_cv_func_calloc_0_nonnull=yes"
inherit autotools pkgconfig
-do_configure_prepend() {
- cp ${WORKDIR}/syscalls.h ${S}/libparted/arch/
-}
-
do_stage() {
autotools_stage_all
}
diff --git a/packages/pax-utils/pax-utils-native_0.1.19.bb b/packages/pax-utils/pax-utils-native_0.1.19.bb
new file mode 100644
index 0000000000..5a56c01aa4
--- /dev/null
+++ b/packages/pax-utils/pax-utils-native_0.1.19.bb
@@ -0,0 +1,12 @@
+inherit native
+
+require pax-utils_${PV}.bb
+
+do_stage() {
+ oe_runmake PREFIX=${STAGING_DIR_HOST}${layout_prefix} install
+}
+
+do_install() {
+ :
+}
+
diff --git a/packages/pax-utils/pax-utils_0.1.13.bb b/packages/pax-utils/pax-utils_0.1.13.bb
index 6fc6850142..c704d288b8 100644
--- a/packages/pax-utils/pax-utils_0.1.13.bb
+++ b/packages/pax-utils/pax-utils_0.1.13.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "Various ELF utilities"
HOMEPAGE = "http://www.gentoo.org/proj/en/hardened/pax-utils.xml"
LICENSE = "GPLv2"
-
-SRC_URI = "${GENTOO_MIRROR}/pax-utils-${PV}.tar.bz2;md5sum=5f09df47a16e83462384b44b75310539"
+PR = "r1"
+SRC_URI = "http://gentoo.osuosl.org/distfiles/pax-utils-${PV}.tar.bz2"
S = "${WORKDIR}/pax-utils-${PV}"
CPPFLAGS += "-D_GNU_SOURCE "
diff --git a/packages/pax-utils/pax-utils_0.1.19.bb b/packages/pax-utils/pax-utils_0.1.19.bb
new file mode 100644
index 0000000000..bd657d7997
--- /dev/null
+++ b/packages/pax-utils/pax-utils_0.1.19.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Various ELF utilities"
+HOMEPAGE = "http://www.gentoo.org/proj/en/hardened/pax-utils.xml"
+LICENSE = "GPLv2"
+
+SRC_URI = "http://gentoo.osuosl.org/distfiles/pax-utils-${PV}.tar.bz2"
+S = "${WORKDIR}/pax-utils-${PV}"
+
+CPPFLAGS += "-D_GNU_SOURCE "
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
diff --git a/packages/pciutils/pciutils-3.1.2/pciutils.patch b/packages/pciutils/pciutils-3.1.2/pciutils.patch
new file mode 100644
index 0000000000..c058d6ef99
--- /dev/null
+++ b/packages/pciutils/pciutils-3.1.2/pciutils.patch
@@ -0,0 +1,362 @@
+diff -urN pciutils-3.1.2.orig/lib/configure pciutils-3.1.2.new/lib/configure
+--- pciutils-3.1.2.orig/lib/configure 2009-01-30 14:06:25.000000000 +0100
++++ pciutils-3.1.2.new/lib/configure 2009-02-04 18:45:31.000000000 +0100
+@@ -14,11 +14,6 @@
+ fi
+ }
+
+-if [ -z "$VERSION" -o -z "$IDSDIR" ] ; then
+- echo >&2 "Please run the configure script from the top-level Makefile"
+- exit 1
+-fi
+-
+ echo_n "Configuring libpci for your system..."
+ if [ -z "$HOST" ] ; then
+ sys=`uname -s`
+@@ -44,8 +39,8 @@
+ [ -n "$RELEASE" ] && rel="${RELEASE}"
+ # CAVEAT: tr on Solaris is a bit weird and the extra [] is otherwise harmless.
+ host=`echo $HOST | sed -e 's/^\([^-]*\)-\([^-]*\)-\([^-]*\)-\([^-]*\)$/\1-\3/' -e 's/^\([^-]*\)-\([^-]*\)$/\1--\2/' | tr '[A-Z]' '[a-z]'`
+-cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+-sys=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
++sys=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
++cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ echo " $host $rel $cpu $sys"
+
+ c=config.h
+diff -urN pciutils-3.1.2.orig/Makefile pciutils-3.1.2.new/Makefile
+--- pciutils-3.1.2.orig/Makefile 2009-02-01 17:49:22.000000000 +0100
++++ pciutils-3.1.2.new/Makefile 2009-02-04 13:32:50.000000000 +0100
+@@ -52,7 +52,8 @@
+
+ export
+
+-all: lib/$(PCILIB) lspci setpci example lspci.8 setpci.8 pcilib.7 update-pciids update-pciids.8 $(PCI_IDS)
++all: lib/$(PCILIB) lspci setpci example lspci.8 setpci.8 pcilib.7 update-pciids update-pciids.8 $(PCI_IDS) \
++ pcimodules pcimodules.8
+
+ lib/$(PCILIB): $(PCIINC) force
+ $(MAKE) -C lib all
+@@ -62,9 +63,11 @@
+ lib/config.h lib/config.mk:
+ cd lib && ./configure
+
++pcimodules: pcimodules.o common.o lib/$(PCILIB)
+ lspci: lspci.o ls-vpd.o ls-caps.o ls-ecaps.o ls-kernel.o ls-tree.o ls-map.o common.o lib/$(PCILIB)
+ setpci: setpci.o common.o lib/$(PCILIB)
+
++pcimodules.o: pcimodules.c pciutils.h
+ LSPCIINC=lspci.h pciutils.h $(PCIINC)
+ lspci.o: lspci.c $(LSPCIINC)
+ ls-vpd.o: ls-vpd.c $(LSPCIINC)
+@@ -101,10 +104,10 @@
+ install: all
+ # -c is ignored on Linux, but required on FreeBSD
+ $(DIRINSTALL) -m 755 $(DESTDIR)$(SBINDIR) $(DESTDIR)$(IDSDIR) $(DESTDIR)$(MANDIR)/man8 $(DESTDIR)$(MANDIR)/man7
+- $(INSTALL) -c -m 755 $(STRIP) lspci setpci $(DESTDIR)$(SBINDIR)
++ $(INSTALL) -c -m 755 $(STRIP) lspci setpci pcimodules $(DESTDIR)$(SBINDIR)
+ $(INSTALL) -c -m 755 update-pciids $(DESTDIR)$(SBINDIR)
+ $(INSTALL) -c -m 644 $(PCI_IDS) $(DESTDIR)$(IDSDIR)
+- $(INSTALL) -c -m 644 lspci.8 setpci.8 update-pciids.8 $(DESTDIR)$(MANDIR)/man8
++ $(INSTALL) -c -m 644 lspci.8 setpci.8 update-pciids.8 pcimodules.8 $(DESTDIR)$(MANDIR)/man8
+ $(INSTALL) -c -m 644 pcilib.7 $(DESTDIR)$(MANDIR)/man7
+ ifeq ($(SHARED),yes)
+ $(DIRINSTALL) -m 755 $(DESTDIR)$(LIBDIR)
+@@ -122,9 +125,10 @@
+ endif
+
+ uninstall: all
+- rm -f $(DESTDIR)$(SBINDIR)/lspci $(DESTDIR)$(SBINDIR)/setpci $(DESTDIR)$(SBINDIR)/update-pciids
++ rm -f $(DESTDIR)$(SBINDIR)/lspci $(DESTDIR)$(SBINDIR)/setpci $(DESTDIR)$(SBINDIR)/update-pciids $(DESTDIR)$(SBINDIR)/pcimodules
++
+ rm -f $(DESTDIR)$(IDSDIR)/$(PCI_IDS)
+- rm -f $(DESTDIR)$(MANDIR)/man8/lspci.8 $(DESTDIR)$(MANDIR)/man8/setpci.8 $(DESTDIR)$(MANDIR)/man8/update-pciids.8
++ rm -f $(DESTDIR)$(MANDIR)/man8/lspci.8 $(DESTDIR)$(MANDIR)/man8/setpci.8 $(DESTDIR)$(MANDIR)/man8/update-pciids.8 $(DESTDIR)$(MANDIR)/man8/pcimodules.8
+ rm -f $(DESTDIR)$(MANDIR)/man7/pcilib.7
+ ifeq ($(SHARED),yes)
+ rm -f $(DESTDIR)$(LIBDIR)/$(PCILIB) $(DESTDIR)$(LIBDIR)/$(LIBNAME).so$(ABI_VERSION)
+diff -urN pciutils-3.1.2.orig/pcimodules.c pciutils-3.1.2.new/pcimodules.c
+--- pciutils-3.1.2.orig/pcimodules.c 1970-01-01 01:00:00.000000000 +0100
++++ pciutils-3.1.2.new/pcimodules.c 2009-02-04 12:19:47.000000000 +0100
+@@ -0,0 +1,185 @@
++/*
++ * pcimodules: Load all kernel modules for PCI device currently
++ * plugged into any PCI slot.
++ *
++ * Copyright 2000 Yggdrasil Computing, Incorporated
++ * This file may be copied under the terms and conditions of version
++ * two of the GNU General Public License, as published by the Free
++ * Software Foundation (Cambridge, Massachusetts, USA).
++ *
++ * This file is based on pciutils/lib/example.c, which has the following
++ * authorship and copyright statement:
++ *
++ * Written by Martin Mares and put to public domain. You can do
++ * with it anything you want, but I don't give you any warranty.
++ */
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <malloc.h>
++#include <string.h>
++#include <unistd.h>
++#include <sys/utsname.h>
++#include <sys/param.h>
++#include <sys/types.h>
++
++#define _GNU_SOURCE
++#include <getopt.h>
++
++#include "pciutils.h"
++
++#define MODDIR "/lib/modules"
++#define PCIMAP "modules.pcimap"
++
++#define LINELENGTH 8000
++
++#define DEVICE_ANY 0xffffffff
++#define VENDOR_ANY 0xffffffff
++
++#include "lib/pci.h"
++
++ const char program_name[] = "lspci";
++
++struct pcimap_entry {
++ unsigned int vendor, subsys_vendor, dev, subsys_dev, class, class_mask;
++ char *module;
++ struct pcimap_entry *next;
++};
++
++static struct pcimap_entry *pcimap_list = NULL;
++
++#define OPT_STRING "h"
++static struct option long_options[] = {
++ {"class", required_argument, NULL, 'c'},
++ {"classmask", required_argument, NULL, 'm'},
++ {"help", no_argument, NULL, 'h'},
++ { 0, 0, 0, 0}
++};
++
++static unsigned long desired_class;
++static unsigned long desired_classmask; /* Default is 0: accept all classes.*/
++
++void
++read_pcimap(void)
++{
++ struct utsname utsname;
++ char filename[MAXPATHLEN];
++ FILE *pcimap_file;
++ char line[LINELENGTH];
++ struct pcimap_entry *entry;
++ unsigned int driver_data;
++ char *prevmodule = "";
++ char module[LINELENGTH];
++
++ if (uname(&utsname) < 0) {
++ perror("uname");
++ exit(1);
++ }
++ sprintf(filename, "%s/%s/%s", MODDIR, utsname.release, PCIMAP);
++ if ((pcimap_file = fopen(filename, "r")) == NULL) {
++ perror(filename);
++ exit(1);
++ }
++
++ while(fgets(line, LINELENGTH, pcimap_file) != NULL) {
++ if (line[0] == '#')
++ continue;
++
++ entry = xmalloc(sizeof(struct pcimap_entry));
++
++ if (sscanf(line, "%s 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x",
++ module,
++ &entry->vendor, &entry->dev,
++ &entry->subsys_vendor, &entry->subsys_dev,
++ &entry->class, &entry->class_mask,
++ &driver_data) != 8) {
++ fprintf (stderr,
++ "modules.pcimap unparsable line: %s.\n", line);
++ free(entry);
++ continue;
++ }
++
++ /* Optimize memory allocation a bit, in case someday we
++ have Linux systems with ~100,000 modules. It also
++ allows us to just compare pointers to avoid trying
++ to load a module twice. */
++ if (strcmp(module, prevmodule) != 0) {
++ prevmodule = xmalloc(strlen(module)+1);
++ strcpy(prevmodule, module);
++ }
++ entry->module = prevmodule;
++ entry->next = pcimap_list;
++ pcimap_list = entry;
++ }
++ fclose(pcimap_file);
++}
++
++/* Return a filled in pci_access->dev tree, with the device classes
++ stored in dev->aux.
++*/
++static void
++match_pci_modules(void)
++{
++ struct pci_access *pacc;
++ struct pci_dev *dev;
++ unsigned int class, subsys_dev, subsys_vendor;
++ struct pcimap_entry *map;
++ const char *prevmodule = "";
++
++ pacc = pci_alloc(); /* Get the pci_access structure */
++ /* Set all options you want -- here we stick with the defaults */
++ pci_init(pacc); /* Initialize the PCI library */
++ pci_scan_bus(pacc); /* We want to get the list of devices */
++ for(dev=pacc->devices; dev; dev=dev->next) {
++ pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES);
++ class = (pci_read_word(dev, PCI_CLASS_DEVICE) << 8)
++ | pci_read_byte(dev, PCI_CLASS_PROG);
++ subsys_dev = pci_read_word(dev, PCI_SUBSYSTEM_ID);
++ subsys_vendor = pci_read_word(dev,PCI_SUBSYSTEM_VENDOR_ID);
++ for(map = pcimap_list; map != NULL; map = map->next) {
++ if (((map->class ^ class) & map->class_mask) == 0 &&
++ ((desired_class ^ class) & desired_classmask)==0 &&
++ (map->dev == DEVICE_ANY ||
++ map->dev == dev->device_id) &&
++ (map->vendor == VENDOR_ANY ||
++ map->vendor == dev->vendor_id) &&
++ (map->subsys_dev == DEVICE_ANY ||
++ map->subsys_dev == subsys_dev) &&
++ (map->subsys_vendor == VENDOR_ANY ||
++ map->subsys_vendor == subsys_vendor) &&
++ prevmodule != map->module) {
++ printf("%s\n", map->module);
++ prevmodule = map->module;
++ }
++ }
++
++ }
++ pci_cleanup(pacc);
++}
++
++int
++main (int argc, char **argv)
++{
++ int opt_index = 0;
++ int opt;
++
++ while ((opt = getopt_long(argc, argv, OPT_STRING, long_options,
++ &opt_index)) != -1) {
++ switch(opt) {
++ case 'c':
++ desired_class = strtol(optarg, NULL, 0);
++ break;
++ case 'm':
++ desired_classmask = strtol(optarg, NULL, 0);
++ break;
++ case 'h':
++ printf ("Usage: pcimodules [--help]\n"
++ " Lists kernel modules corresponding to PCI devices currently plugged"
++ " into the computer.\n");
++ }
++ }
++
++ read_pcimap();
++ match_pci_modules();
++ return 0;
++}
+diff -urN pciutils-3.1.2.orig/pcimodules.man pciutils-3.1.2.new/pcimodules.man
+--- pciutils-3.1.2.orig/pcimodules.man 1970-01-01 01:00:00.000000000 +0100
++++ pciutils-3.1.2.new/pcimodules.man 2009-02-04 12:19:53.000000000 +0100
+@@ -0,0 +1,92 @@
++.TH pcimodules 8 "@TODAY@" "@VERSION@" "Linux PCI Utilities"
++.IX pcimodules
++.SH NAME
++pcimodules \- List kernel driver modules available for all currently plugged
++in PCI devices
++.SH SYNOPSIS
++.B pcimodules
++.RB [ --class class_id ]
++.RB [ --classmask mask ]
++.RB [ --help ]
++.SH DESCRIPTION
++.B pcimodules
++lists all driver modules for all currently plugged in PCI devices.
++.B pcimodules
++should be run at boot time, and whenever a PCI device is "hot plugged"
++into the system. This can be done by the following Bourne shell syntax:
++.IP
++ for module in $(pcimodules) ; do
++.IP
++ modprobe -s -k "$module"
++.IP
++ done
++.PP
++When a PCI device is removed from the system, the Linux kernel will
++decrement a usage count on PCI driver module. If this count drops
++to zero (i.e., there are no PCI drivers), then the
++.B modprobe -r
++process that is normally configured to run from cron every few minutes
++will eventually remove the unneeded module.
++.PP
++The --class and --classmask arguments can be used to limit the search
++to certain classes of PCI devices. This is useful, for example, to
++generate a list of ethernet card drivers to be loaded when the kernel
++has indicated that it is trying to resolve an unknown network interface.
++.PP
++Modules are listed in the order in which the PCI devices are physically
++arranged so that the computer owner can arrange things like having scsi
++device 0 be on a controller that is not alphabetically the first scsi
++controller.
++.SH OPTIONS
++.TP
++.B --class class --classmask mask
++.PP
++--class and --classmask limit the search to PCI
++cards in particular classes. These arguments are always used together.
++The arguments to --class and --classmask
++can be given as hexadecimal numbers by prefixing a leading "0x".
++Note that the classes used by pcimodules are in "Linux" format,
++meaning the class value that you see with lspci would be shifted
++left eight bits, with the new low eight bits programming interface ID.
++An examples of how to use class and classmask is provided below.
++.B --help, -h
++Print a help message and exit.
++.SH EXAMPLES
++.TP
++pcimodules
++lists all modules corresponding to currently plugged in PCI devices.
++.TP
++pcimodules --class 0x200000 --classmask 0xffff00
++lists all modules corresponding to currently plugged in ethernet PCI devices.
++.SH FILES
++.TP
++.B /lib/modules/<kernel-version>/modules.pcimap
++This file is automatically generated by
++.B depmod,
++and used by
++.B pcimodules
++to determine which modules correspond to which PCI ID's.
++.TP
++.B /proc/bus/pci
++An interface to PCI bus configuration space provided by the post-2.1.82 Linux
++kernels. Contains per-bus subdirectories with per-card config space files and a
++.I devices
++file containing a list of all PCI devices.
++
++.SH SEE ALSO
++.BR lspci (8)
++
++.SH MAINTAINER
++The Linux PCI Utilities are maintained by Martin Mares <mj@suse.cz>.
++
++.SH AUTHOR
++.B pcimodules
++was written by Adam J. Richter <adam@yggdrasil.com>, based on public
++domain example code by Martin Mares <mj@suse.cz>.
++
++.SH COPYRIGHT
++.B pcimodules
++is copyright 2000, Yggdrasil Computing, Incorporated, and may
++be copied under the terms and conditions of version 2 of the GNU
++General Public License as published by the Free Software Foundation
++(Cambrige, Massachusetts, United States of America).
diff --git a/packages/pciutils/pciutils_3.1.2.bb b/packages/pciutils/pciutils_3.1.2.bb
new file mode 100644
index 0000000000..25782a5549
--- /dev/null
+++ b/packages/pciutils/pciutils_3.1.2.bb
@@ -0,0 +1,59 @@
+DESCRIPTION = 'The PCI Utilities package contains a library for portable access \
+to PCI bus configuration space and several utilities based on this library.'
+DESCRIPTION_pciutils-ids = 'The list of PCI IDs for pciutils'
+SECTION = "console/utils"
+HOMEPAGE = "http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml"
+LICENSE = "GPLv2"
+DEPENDS = "zlib"
+
+SRC_URI = "ftp://ftp.kernel.org/pub/software/utils/pciutils/pciutils-${PV}.tar.bz2 \
+ file://pciutils.patch;patch=1 "
+
+PARALLEL_MAKE = ""
+
+PR ="r2"
+
+EXTRA_OEMAKE += "'STRIP = '"
+export SHARED=yes
+
+do_configure () {
+ (cd lib && ./configure ${datadir} ${PV} ${TARGET_OS} 2.4.21 ${TARGET_ARCH})
+}
+
+export PREFIX = "${D}${prefix}"
+export SBINDIR = "${D}${sbindir}"
+export SHAREDIR = "${D}${datadir}"
+export MANDIR = "${D}${mandir}"
+
+do_install () {
+ oe_runmake install
+}
+
+do_install_append () {
+ install -d ${D}/${prefix}/share
+ install -m 6440 ${WORKDIR}/${PN}-${PV}/pci.ids ${D}/${prefix}/share
+
+ # The makefile does not install the development files:
+ # libpci.so pci.h header.h config.h types.h
+ install -d ${D}/${libdir}
+ install -d ${D}/${includedir}/pci
+
+ oe_libinstall -so -C lib libpci ${D}/${libdir}
+ install -m 0644 ${S}/lib/pci.h ${D}/${includedir}/pci/
+ install -m 0644 ${S}/lib/header.h ${D}/${includedir}/pci/
+ install -m 0644 ${S}/lib/config.h ${D}/${includedir}/pci/
+ install -m 0644 ${S}/lib/types.h ${D}/${includedir}/pci/
+}
+
+do_stage () {
+ oe_libinstall -so -C lib libpci ${STAGING_LIBDIR}
+ install -m 0755 -d ${STAGING_INCDIR}/pci
+ install -m 0644 ${S}/lib/pci.h ${STAGING_INCDIR}/pci/
+ install -m 0644 ${S}/lib/header.h ${STAGING_INCDIR}/pci/
+ install -m 0644 ${S}/lib/config.h ${STAGING_INCDIR}/pci/
+ install -m 0644 ${S}/lib/types.h ${STAGING_INCDIR}/pci/
+}
+
+
+PACKAGES =+ "pciutils-ids"
+FILES_pciutils-ids="${prefix}/share/pci.ids"
diff --git a/packages/perl/libdate-manip-perl-native_5.54.bb b/packages/perl/libdate-manip-perl-native_5.54.bb
new file mode 100644
index 0000000000..7199d9f8c5
--- /dev/null
+++ b/packages/perl/libdate-manip-perl-native_5.54.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libdate-manip-perl_${PV}.bb
diff --git a/packages/perl/libdate-manip-perl_5.54.bb b/packages/perl/libdate-manip-perl_5.54.bb
new file mode 100644
index 0000000000..9097ce39c6
--- /dev/null
+++ b/packages/perl/libdate-manip-perl_5.54.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Date and time manipulation routines."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+RDEPENDS = "perl-module-test-more \
+ perl-module-io-file \
+ perl-module-carp"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/S/SB/SBECK/Date-Manip-${PV}.tar.gz"
+
+S = "${WORKDIR}/Date-Manip-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libdbd-mysql-perl-native_4.010.bb b/packages/perl/libdbd-mysql-perl-native_4.010.bb
new file mode 100644
index 0000000000..180d1d0b13
--- /dev/null
+++ b/packages/perl/libdbd-mysql-perl-native_4.010.bb
@@ -0,0 +1,8 @@
+require libdbd-mysql-perl.inc
+
+DEPENDS = "libdbi-perl-native mysql-native"
+
+EXTRA_OECONF = " --mysql_config=${STAGING_BINDIR_NATIVE}"
+
+inherit native
+
diff --git a/packages/perl/libdbd-mysql-perl.inc b/packages/perl/libdbd-mysql-perl.inc
new file mode 100644
index 0000000000..6200c2844a
--- /dev/null
+++ b/packages/perl/libdbd-mysql-perl.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "The database interface driver for the MySQL database."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-${PV}.tar.gz"
+
+S = "${WORKDIR}/DBD-mysql-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libdbd-mysql-perl_4.010.bb b/packages/perl/libdbd-mysql-perl_4.010.bb
new file mode 100644
index 0000000000..95aa53b14b
--- /dev/null
+++ b/packages/perl/libdbd-mysql-perl_4.010.bb
@@ -0,0 +1,13 @@
+require libdbd-mysql-perl.inc
+
+DEPENDS = "libdbi-perl mysql"
+RDEPENDS = "perl-module-data-dumper \
+ libdbi-perl \
+ perl-module-scalar-util \
+ perl-module-file-spec \
+ perl-module-storable \
+ perl-module-test-simple"
+
+EXTRA_OECONF = " --mysql_config=${STAGING_BINDIR_CROSS}/mysql_config"
+
+CFLAGS_append = " -I${STAGING_INCDIR}/mysql"
diff --git a/packages/perl/libdbi-perl-native_1.607.bb b/packages/perl/libdbi-perl-native_1.607.bb
new file mode 100644
index 0000000000..c5e3b1dea7
--- /dev/null
+++ b/packages/perl/libdbi-perl-native_1.607.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libdbi-perl_${PV}.bb
diff --git a/packages/perl/libdbi-perl_1.607.bb b/packages/perl/libdbi-perl_1.607.bb
new file mode 100644
index 0000000000..af6853544c
--- /dev/null
+++ b/packages/perl/libdbi-perl_1.607.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Various MIME modules."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+RDEPENDS = "perl-module-scalar-util \
+ perl-module-file-spec \
+ perl-module-storable \
+ perl-module-test-simple"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.607.tar.gz"
+
+S = "${WORKDIR}/DBI-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libdevice-serialport-perl-native_1.04.bb b/packages/perl/libdevice-serialport-perl-native_1.04.bb
new file mode 100644
index 0000000000..af3b2dfeec
--- /dev/null
+++ b/packages/perl/libdevice-serialport-perl-native_1.04.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libdevice-serialport-perl_${PV}.bb
diff --git a/packages/perl/libemail-date-format-perl-native_1.002.bb b/packages/perl/libemail-date-format-perl-native_1.002.bb
new file mode 100644
index 0000000000..ebae345876
--- /dev/null
+++ b/packages/perl/libemail-date-format-perl-native_1.002.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libemail-date-format-perl_${PV}.bb
diff --git a/packages/perl/libemail-date-format-perl_1.002.bb b/packages/perl/libemail-date-format-perl_1.002.bb
new file mode 100644
index 0000000000..d83dac00bd
--- /dev/null
+++ b/packages/perl/libemail-date-format-perl_1.002.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Various MIME modules."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+RDEPENDS = "perl-module-test-more \
+ perl-module-time-local"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Email-Date-Format-${PV}.tar.gz"
+
+S = "${WORKDIR}/Email-Date-Format-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libhtml-parser-perl_3.60.bb b/packages/perl/libhtml-parser-perl_3.60.bb
new file mode 100644
index 0000000000..08525331db
--- /dev/null
+++ b/packages/perl/libhtml-parser-perl_3.60.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "HTML Parser bits."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+RDEPENDS = "perl-module-test-more \
+ perl-module-xsloader \
+ perl-module-test-simple \
+ libhtml-tagset-perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Parser-3.60.tar.gz"
+
+S = "${WORKDIR}/HTML-Parser-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libhtml-tagset-perl_3.20.bb b/packages/perl/libhtml-tagset-perl_3.20.bb
new file mode 100644
index 0000000000..788c37e094
--- /dev/null
+++ b/packages/perl/libhtml-tagset-perl_3.20.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "HTML Tagset bits."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz"
+
+S = "${WORKDIR}/HTML-Tagset-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libmime-lite-perl-native_3.024.bb b/packages/perl/libmime-lite-perl-native_3.024.bb
new file mode 100644
index 0000000000..50be9e11ff
--- /dev/null
+++ b/packages/perl/libmime-lite-perl-native_3.024.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libmime-lite-perl_${PV}.bb
diff --git a/packages/perl/libmime-lite-perl_3.024.bb b/packages/perl/libmime-lite-perl_3.024.bb
new file mode 100644
index 0000000000..80de33330f
--- /dev/null
+++ b/packages/perl/libmime-lite-perl_3.024.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Simple standalone module for generating MIME messages."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+RDEPENDS = "perl-module-file-spec \
+ libemail-date-format-perl \
+ perl-module-test-more \
+ perl-module-time-local"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/MIME-Lite-3.024.tar.gz"
+
+S = "${WORKDIR}/MIME-Lite-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libmodule-load-perl-native_0.16.bb b/packages/perl/libmodule-load-perl-native_0.16.bb
new file mode 100644
index 0000000000..f09c3f9741
--- /dev/null
+++ b/packages/perl/libmodule-load-perl-native_0.16.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libmodule-load-perl_${PV}.bb
diff --git a/packages/perl/libmodule-load-perl_0.16.bb b/packages/perl/libmodule-load-perl_0.16.bb
new file mode 100644
index 0000000000..1d5a3ebeab
--- /dev/null
+++ b/packages/perl/libmodule-load-perl_0.16.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "A module loading thingy for perl."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+RDEPENDS = "perl-module-test-more"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/K/KA/KANE/Module-Load-0.16.tar.gz"
+
+S = "${WORKDIR}/Module-Load-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libphp-serialization-perl-native_0.30.bb b/packages/perl/libphp-serialization-perl-native_0.30.bb
new file mode 100644
index 0000000000..9f83c5cc5a
--- /dev/null
+++ b/packages/perl/libphp-serialization-perl-native_0.30.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libphp-serialization-perl_${PV}.bb
diff --git a/packages/perl/libphp-serialization-perl_0.30.bb b/packages/perl/libphp-serialization-perl_0.30.bb
new file mode 100644
index 0000000000..07dd7de7e5
--- /dev/null
+++ b/packages/perl/libphp-serialization-perl_0.30.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "The standard database interface module for Perl."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/PHP-Serialization-0.30.tar.gz"
+
+S = "${WORKDIR}/PHP-Serialization-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libsys-mmap-perl-native_0.13.bb b/packages/perl/libsys-mmap-perl-native_0.13.bb
new file mode 100644
index 0000000000..15eb6308f1
--- /dev/null
+++ b/packages/perl/libsys-mmap-perl-native_0.13.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libsys-mmap-perl_${PV}.bb
diff --git a/packages/perl/libsys-mmap-perl_0.13.bb b/packages/perl/libsys-mmap-perl_0.13.bb
new file mode 100644
index 0000000000..e3037a2092
--- /dev/null
+++ b/packages/perl/libsys-mmap-perl_0.13.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Uses mmap to map in a file as a perl variable."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/S/SW/SWALTERS/Sys-Mmap-0.13.tar.gz"
+
+S = "${WORKDIR}/Sys-Mmap-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libx10-perl-native_0.03.bb b/packages/perl/libx10-perl-native_0.03.bb
new file mode 100644
index 0000000000..bc5702d42f
--- /dev/null
+++ b/packages/perl/libx10-perl-native_0.03.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libx10-perl_${PV}.bb
diff --git a/packages/perl/libx10-perl_0.03.bb b/packages/perl/libx10-perl_0.03.bb
new file mode 100644
index 0000000000..bd76e2060d
--- /dev/null
+++ b/packages/perl/libx10-perl_0.03.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "X10 support for Perl."
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r0"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RO/ROBF/X10-0.03.tar.gz"
+
+S = "${WORKDIR}/X10-${PV}"
+
+inherit cpan
diff --git a/packages/php/php-native.inc b/packages/php/php-native.inc
index 84f9a1a0ee..1698a80379 100644
--- a/packages/php/php-native.inc
+++ b/packages/php/php-native.inc
@@ -7,7 +7,7 @@ export LIBS=" -lxml2 "
export LD_LIBRARY_PATH = "${STAGING_LIBDIR_NATIVE}"
EXTRA_OECONF = "--with-cgi --enable-sockets --enable-pcntl \
- --with-zlib --with-zlib-dir=${STAGING_LIBDIR_NATIVE} \
+ --with-zlib --with-zlib-dir=${STAGING_LIBDIR_NATIVE}/.. \
--without-libpng --without-libjpeg \
--with-libxml-dir=${STAGING_BINDIR_NATIVE} \
"
diff --git a/packages/php/php-native_5.2.6.bb b/packages/php/php-native_5.2.6.bb
index 97064a6510..ac1c51fa3f 100644
--- a/packages/php/php-native_5.2.6.bb
+++ b/packages/php/php-native_5.2.6.bb
@@ -1,3 +1,3 @@
require php-native.inc
-PR = "r2"
+PR = "r3"
diff --git a/packages/pingus/pingus_0.7.2.bb b/packages/pingus/pingus_0.7.2.bb
index 8e48b7f237..a10131fa51 100644
--- a/packages/pingus/pingus_0.7.2.bb
+++ b/packages/pingus/pingus_0.7.2.bb
@@ -3,7 +3,9 @@ DEPENDS = "virtual/libsdl libsdl-image libsdl-mixer boost libpng"
LICENSE = "GPL"
HOMEPAGE = "http://pingus.seul.org/"
SECTION = "x11/games"
-PR = "r0"
+PR = "r1"
+
+ARM_INSTRUCTION_SET = "arm"
inherit scons
diff --git a/packages/pkgconfig/pkgconfig-0.15.0/configure.patch b/packages/pkgconfig/pkgconfig-0.15.0/configure.patch
deleted file mode 100644
index 4218e917d4..0000000000
--- a/packages/pkgconfig/pkgconfig-0.15.0/configure.patch
+++ /dev/null
@@ -1,495 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- pkgconfig-0.15.0/glib-1.2.8/Makefile.am~configure.patch
-+++ pkgconfig-0.15.0/glib-1.2.8/Makefile.am
-@@ -65,7 +65,7 @@
-
- CONFIGURE_DEPENDENCIES = acglib.m4
-
--BUILT_SOURCES = stamp-gc-h #note: not glibconfig.h
-+BUILT_SOURCES += stamp-gc-h #note: not glibconfig.h
- glibconfig.h: stamp-gc-h
- @:
- stamp-gc-h: config.status
---- pkgconfig-0.15.0/glib-1.2.8/configure.in~configure.patch
-+++ pkgconfig-0.15.0/glib-1.2.8/configure.in
-@@ -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 @@
- 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?)
--AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
-+#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_BINARY_AGE=8
- GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
- dnl
--AC_DIVERT_POP()dnl
-+#AC_DIVERT_POP()dnl
-
- AC_SUBST(GLIB_MAJOR_VERSION)
- AC_SUBST(GLIB_MINOR_VERSION)
-@@ -77,17 +115,15 @@
- dnl Initialize maintainer mode
- AM_MAINTAINER_MODE
-
--AC_CANONICAL_HOST
--
- dnl figure debugging default, prior to $ac_help setup
- dnl
--AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
-+#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
- if test `expr $GLIB_MINOR_VERSION \% 2` = 1 ; then
- debug_default=yes
- else
- debug_default=minimum
- fi
--AC_DIVERT_POP()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 @@
- 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
-
-@@ -384,11 +422,13 @@
- return realloc (0, sizeof (int)) == 0;
- }],
- glib_cv_sane_realloc=yes
-- AC_DEFINE(REALLOC_0_WORKS)
- ,
- glib_cv_sane_realloc=no
- ,)
- ])
-+if test "x$glib_cv_sane_realloc" = "xyes"; then
-+ AC_DEFINE(REALLOC_0_WORKS)
-+fi
- AC_MSG_RESULT($glib_cv_sane_realloc)
-
-
-@@ -464,7 +504,8 @@
- ])
- 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
-@@ -473,6 +514,7 @@
- fi
- AC_MSG_RESULT($glib_cv_va_val_copy)
-
-+AC_MSG_WARN([hi mom])
-
- dnl ***********************
- dnl *** g_module checks ***
-@@ -483,21 +525,27 @@
- 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
-@@ -576,6 +624,7 @@
- AC_SUBST(G_MODULE_HAVE_DLERROR)
- AC_SUBST(G_MODULE_NEED_USCORE)
- AC_SUBST(GLIB_DEBUG_FLAGS)
-+AC_MSG_WARN([hi mom])
-
-
- dnl ***********************
-@@ -812,38 +861,50 @@
- 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>
-- 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;}],
-- [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"
-@@ -887,13 +948,14 @@
- 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 ***
-@@ -950,7 +1012,7 @@
- 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
-@@ -963,60 +1025,60 @@
- #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
-@@ -1028,11 +1090,11 @@
- #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;
-@@ -1050,15 +1112,15 @@
- #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
-@@ -1067,15 +1129,15 @@
- 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))
-@@ -1086,14 +1148,14 @@
- #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
-
-@@ -1103,7 +1165,7 @@
- #endif /* __cplusplus */
-
- #endif /* GLIBCONFIG_H */
--_______EOF
-+EOF
-
-
- if cmp -s $outfile glibconfig.h; then
---- pkgconfig-0.15.0/glib-1.2.8/gmodule/Makefile.am~configure.patch
-+++ pkgconfig-0.15.0/glib-1.2.8/gmodule/Makefile.am
-@@ -41,7 +41,7 @@
- libgplugin_b_la_LIBADD = @G_MODULE_LIBS@ # $(libglib)
-
- noinst_PROGRAMS = testgmodule
--testgmodule_LDFLAGS += @G_MODULE_LDFLAGS@
-+testgmodule_LDFLAGS = @G_MODULE_LDFLAGS@
- testgmodule_LDADD = libgmodule.la $(libglib) @G_MODULE_LIBS@
-
- .PHONY: files release
---- pkgconfig-0.15.0/pkg.m4~configure.patch
-+++ pkgconfig-0.15.0/pkg.m4
-@@ -2,7 +2,7 @@
- dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
- dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
- dnl also defines GSTUFF_PKG_ERRORS on error
--AC_DEFUN(PKG_CHECK_MODULES, [
-+AC_DEFUN([PKG_CHECK_MODULES], [
- succeeded=no
-
- if test -z "$PKG_CONFIG"; then
---- pkgconfig-0.15.0/configure.in~configure.patch
-+++ pkgconfig-0.15.0/configure.in
-@@ -1,6 +1,7 @@
-
- AC_INIT(pkg-config.1)
-
-+AC_CONFIG_AUX_DIR(.)
- AM_INIT_AUTOMAKE(pkgconfig, 0.15.0)
- AM_MAINTAINER_MODE
-
-@@ -37,8 +38,6 @@
-
- AC_SUBST(GLIB_LIBS)
- AC_SUBST(GLIB_CFLAGS)
--
-- AC_CONFIG_AUX_DIR(.)
- else
- AC_CONFIG_SUBDIRS(glib-1.2.8)
- fi # !native_win32
diff --git a/packages/pkgconfig/pkgconfig-0.15.0/glibconfig-sysdefs.h b/packages/pkgconfig/pkgconfig-0.15.0/glibconfig-sysdefs.h
deleted file mode 100644
index 1329e7f21c..0000000000
--- a/packages/pkgconfig/pkgconfig-0.15.0/glibconfig-sysdefs.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#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-0.15.0/pkg.m4 b/packages/pkgconfig/pkgconfig-0.15.0/pkg.m4
deleted file mode 100644
index cbb46dbf83..0000000000
--- a/packages/pkgconfig/pkgconfig-0.15.0/pkg.m4
+++ /dev/null
@@ -1,156 +0,0 @@
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-#
-# Copyright © 2004 Scott James Remnant <scott@netsplit.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.
-#
-# 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.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=m4_default([$1], [0.9.0])
- AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- PKG_CONFIG=""
- fi
-
-fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists. Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-#
-# Similar to PKG_CHECK_MODULES, make sure that the first instance of
-# this or PKG_CHECK_MODULES is called, or make sure to call
-# PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test -n "$PKG_CONFIG" && \
- AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
- m4_ifval([$2], [$2], [:])
-m4_ifvaln([$3], [else
- $3])dnl
-fi])
-
-
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
-m4_define([_PKG_CONFIG],
-[if test -n "$PKG_CONFIG"; then
- if test -n "$$1"; then
- pkg_cv_[]$1="$$1"
- else
- PKG_CHECK_EXISTS([$3],
- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
- [pkg_failed=yes])
- fi
-else
- pkg_failed=untried
-fi[]dnl
-])# _PKG_CONFIG
-
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
-AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
-
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $1])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
- _PKG_SHORT_ERRORS_SUPPORTED
- if test $_pkg_short_errors_supported = yes; then
- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
- else
- $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
- ifelse([$4], , [AC_MSG_ERROR(dnl
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT
-])],
- [$4])
-elif test $pkg_failed = untried; then
- ifelse([$4], , [AC_MSG_FAILURE(dnl
-[The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
- [$4])
-else
- $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
- $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
- AC_MSG_RESULT([yes])
- ifelse([$3], , :, [$3])
-fi[]dnl
-])# PKG_CHECK_MODULES
diff --git a/packages/pkgconfig/pkgconfig-0.22/autofoo.patch b/packages/pkgconfig/pkgconfig-0.22/autofoo.patch
deleted file mode 100644
index 8d1869a407..0000000000
--- a/packages/pkgconfig/pkgconfig-0.22/autofoo.patch
+++ /dev/null
@@ -1,515 +0,0 @@
-upstream: more recent version is in OE
-
----
- 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
deleted file mode 100644
index 1329e7f21c..0000000000
--- a/packages/pkgconfig/pkgconfig-0.22/glibconfig-sysdefs.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#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-0.22/sysrootfix.patch b/packages/pkgconfig/pkgconfig-0.22/sysrootfix.patch
deleted file mode 100644
index 2e4f796cc9..0000000000
--- a/packages/pkgconfig/pkgconfig-0.22/sysrootfix.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Add support for PKG_CONFIG_SYSROOT_DIR to pkgconfig
-
----
- main.c | 5 ++++-
- pkg-config.1 | 9 +++++++++
- pkg.c | 14 +++++++++++++-
- pkg.h | 3 +++
- 4 files changed, 29 insertions(+), 2 deletions(-)
-
-Index: pkg-config-0.22/main.c
-===================================================================
---- pkg-config-0.22.orig/main.c 2007-09-14 10:20:15.000000000 +0100
-+++ pkg-config-0.22/main.c 2007-09-14 10:22:41.000000000 +0100
-@@ -46,6 +46,8 @@
- static int want_debug_spew = 0;
- static int want_verbose_errors = 0;
- static int want_stdout_errors = 0;
-+char *pcsysrootdir = NULL;
-+
-
- void
- debug_spew (const char *format, ...)
-@@ -196,7 +198,7 @@ main (int argc, char **argv)
- GString *str;
- GSList *packages = NULL;
- char *search_path;
-- char *pcbuilddir;
-+ char *pcbuilddir;
- const char *pkglibdir;
- char **search_dirs;
- char **iter;
-@@ -345,6 +347,7 @@ main (int argc, char **argv)
- }
- }
- #endif
-+ pcsysrootdir = getenv ("PKG_CONFIG_SYSROOT_DIR");
-
- pcbuilddir = getenv ("PKG_CONFIG_TOP_BUILD_DIR");
- if (pcbuilddir)
-Index: pkg-config-0.22/pkg.c
-===================================================================
---- pkg-config-0.22.orig/pkg.c 2007-09-14 10:20:15.000000000 +0100
-+++ pkg-config-0.22/pkg.c 2007-09-14 10:22:41.000000000 +0100
-@@ -479,11 +479,23 @@ string_list_to_string (GSList *list)
- GSList *tmp;
- GString *str = g_string_new ("");
- char *retval;
-+ int offset=0;
-
- tmp = list;
- while (tmp != NULL)
- {
-- g_string_append (str, tmp->data);
-+ if (pcsysrootdir != NULL)
-+ {
-+ if (!strncmp(tmp->data,"-I",2) ||
-+ !strncmp(tmp->data,"-L",2))
-+ {
-+ offset=2;
-+ g_string_append_c (str,((char*)tmp->data)[0]);
-+ g_string_append_c (str,((char*)tmp->data)[1]);
-+ g_string_append (str,pcsysrootdir);
-+ }
-+ }
-+ g_string_append (str, tmp->data+offset);
- g_string_append_c (str, ' ');
-
- tmp = g_slist_next (tmp);
-Index: pkg-config-0.22/pkg-config.1
-===================================================================
---- pkg-config-0.22.orig/pkg-config.1 2007-09-14 10:20:15.000000000 +0100
-+++ pkg-config-0.22/pkg-config.1 2007-09-14 10:23:08.000000000 +0100
-@@ -260,6 +260,15 @@ Don't strip -I/usr/include out of cflags
- Don't strip -L/usr/lib out of libs
-
- .TP
-+.I "PKG_CONFIG_SYSROOT_DIR"
-+Modify -I and -L to use the directories located in target sysroot.
-+this option is usefull when crosscompiling package that use pkg-config
-+to determine CFLAGS anf LDFLAGS. -I and -L are modified to point to
-+the new system root. this means that a -I/usr/include/libfoo will
-+become -I/var/target/usr/include/libfoo with a PKG_CONFIG_SYSROOT_DIR
-+equal to /var/target (same rule apply to -L)
-+
-+.TP
- .I "PKG_CONFIG_LIBDIR"
- Replaces the default \fIpkg-config\fP search directory.
-
-Index: pkg-config-0.22/pkg.h
-===================================================================
---- pkg-config-0.22.orig/pkg.h 2007-09-14 10:20:15.000000000 +0100
-+++ pkg-config-0.22/pkg.h 2007-09-14 10:22:41.000000000 +0100
-@@ -123,6 +123,9 @@ void disable_private_libs(void);
- /* If TRUE, do not automatically prefer uninstalled versions */
- extern gboolean disable_uninstalled;
-
-+/* string that contain environment */
-+extern char* pcsysrootdir;
-+
- #ifdef G_OS_WIN32
- /* If TRUE, do not automatically define "prefix" while
- * parsing each .pc file */
diff --git a/packages/pkgconfig/pkgconfig-native_0.15.0.bb b/packages/pkgconfig/pkgconfig-native_0.15.0.bb
deleted file mode 100644
index daab8ab422..0000000000
--- a/packages/pkgconfig/pkgconfig-native_0.15.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-SECTION = "console/utils"
-require pkgconfig_${PV}.bb
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/pkgconfig-${PV}"
-
-S = "${WORKDIR}/pkgconfig-${PV}"
-inherit native
-DEPENDS = ""
diff --git a/packages/pkgconfig/pkgconfig-native_0.22.bb b/packages/pkgconfig/pkgconfig-native_0.22.bb
deleted file mode 100644
index 0821fb8a69..0000000000
--- a/packages/pkgconfig/pkgconfig-native_0.22.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SECTION = "console/utils"
-require pkgconfig.inc
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/pkgconfig-${PV}"
-
-S = "${WORKDIR}/pkg-config-${PV}/"
-inherit native
-DEPENDS = ""
-
-do_configure() {
- gnu-configize
- libtoolize --force
- oe_runconf
-}
diff --git a/packages/pkgconfig/pkgconfig-native_0.23.bb b/packages/pkgconfig/pkgconfig-native_0.23.bb
index c4028ab43c..24497a9866 100644
--- a/packages/pkgconfig/pkgconfig-native_0.23.bb
+++ b/packages/pkgconfig/pkgconfig-native_0.23.bb
@@ -1,8 +1,6 @@
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 = ""
diff --git a/packages/pkgconfig/pkgconfig_0.15.0.bb b/packages/pkgconfig/pkgconfig_0.15.0.bb
deleted file mode 100644
index 31fc7820fe..0000000000
--- a/packages/pkgconfig/pkgconfig_0.15.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-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://www.freedesktop.org/software/pkgconfig/"
-LICENSE = "GPL"
-PR = "r2"
-
-SRC_URI = "http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-${PV}.tar.gz \
- file://configure.patch;patch=1 \
- file://pkg.m4 \
- file://glibconfig-sysdefs.h"
-
-inherit autotools
-
-acpaths = "-I ."
-do_configure_prepend () {
- install -m 0644 ${WORKDIR}/glibconfig-sysdefs.h glib-1.2.8/
- install -m 0644 ${WORKDIR}/pkg.m4 ${S}/
-}
-
-do_stage_append() {
- install -d -m 0755 ${STAGING_DATADIR}/pkgconfig
-
-}
diff --git a/packages/pkgconfig/pkgconfig_0.22.bb b/packages/pkgconfig/pkgconfig_0.22.bb
deleted file mode 100644
index a0f5241a12..0000000000
--- a/packages/pkgconfig/pkgconfig_0.22.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require pkgconfig.inc
-
diff --git a/packages/pkgconfig/pkgconfig_0.23.bb b/packages/pkgconfig/pkgconfig_0.23.bb
index 154e302844..10ce0fc9c3 100644
--- a/packages/pkgconfig/pkgconfig_0.23.bb
+++ b/packages/pkgconfig/pkgconfig_0.23.bb
@@ -1,6 +1,4 @@
require pkgconfig.inc
-DEFAULT_PREFERENCE = "-1"
-
DEPENDS += "glib-2.0"
EXTRA_OECONF = "--with-installed-glib"
diff --git a/packages/pmount/pmount-0.9.18/gettext.patch b/packages/pmount/pmount-0.9.18/gettext.patch
new file mode 100644
index 0000000000..dbac93f6ba
--- /dev/null
+++ b/packages/pmount/pmount-0.9.18/gettext.patch
@@ -0,0 +1,133 @@
+Index: pmount-0.9.17/src/pmount-hal.c
+===================================================================
+--- pmount-0.9.17.orig/src/pmount-hal.c 2007-07-01 13:58:49.000000000 +0200
++++ pmount-0.9.17/src/pmount-hal.c 2008-10-08 23:39:20.970178412 +0200
+@@ -16,7 +16,6 @@
+ #include <dirent.h>
+ #include <sys/stat.h>
+ #include <locale.h>
+-#include <libintl.h>
+ #include <libhal-storage.h>
+
+ #include "policy.h"
+@@ -26,7 +25,12 @@
+ #include "realpath.h"
+
+ /* gettext abbreviation */
++#ifdef ENABLE_NLS
++#include <libintl.h>
+ #define _(String) gettext(String)
++#else
++#define _(String) (String)
++#endif
+
+ void help() {
+ puts( _(
+@@ -196,10 +200,12 @@
+ char *dmask = NULL;
+ char *iocharset = NULL;
+
++#ifdef ENABLE_NLS
+ /* initialize locale */
+ setlocale( LC_ALL, "" );
+ bindtextdomain( "pmount", NULL );
+ textdomain( "pmount" );
++#endif
+
+ if( argc < 2 ) {
+ help();
+Index: pmount-0.9.17/src/utils.h
+===================================================================
+--- pmount-0.9.17.orig/src/utils.h 2007-07-07 09:05:06.000000000 +0200
++++ pmount-0.9.17/src/utils.h 2008-10-08 23:19:09.515475595 +0200
+@@ -12,7 +12,12 @@
+ #define __utils_h
+
+ /* gettext abbreviation */
++#ifdef ENABLE_NLS
++#include <libintl.h>
+ #define _(String) gettext(String)
++#else
++#define _(String) (String)
++#endif
+
+ /* global flag whether to print debug messages (false by default) */
+ extern int enable_debug;
+Index: pmount-0.9.17/configure.ac
+===================================================================
+--- pmount-0.9.17.orig/configure.ac 2007-12-14 20:27:23.000000000 +0100
++++ pmount-0.9.17/configure.ac 2008-10-08 23:19:09.598820915 +0200
+@@ -77,10 +77,7 @@
+ fi
+ AM_CONDITIONAL(PMOUNT_HAL, test -n "$BUILD_HAL")
+
+-GETTEXT_PACKAGE="pmount"
+-AC_SUBST(GETTEXT_PACKAGE)
+-AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
+-AM_GLIB_GNU_GETTEXT
++AM_GNU_GETTEXT([external])
+
+ AC_OUTPUT([
+ Makefile
+Index: pmount-0.9.17/src/pmount.c
+===================================================================
+--- pmount-0.9.17.orig/src/pmount.c 2008-10-08 23:36:44.452037557 +0200
++++ pmount-0.9.17/src/pmount.c 2008-10-08 23:37:38.778816969 +0200
+@@ -21,9 +21,12 @@
+ #include <errno.h>
+ #include <locale.h>
+ #include <langinfo.h>
+-#include <libintl.h>
+ #include <sys/stat.h>
+
++#ifdef ENABLE_NLS
++#include <libintl.h>
++#endif
++
+ #include "fs.h"
+ #include "policy.h"
+ #include "utils.h"
+@@ -619,10 +622,12 @@
+ { NULL, 0, NULL, 0}
+ };
+
++#ifdef ENABLE_NLS
+ /* initialize locale */
+ setlocale( LC_ALL, "" );
+ bindtextdomain( "pmount", NULL );
+ textdomain( "pmount" );
++#endif
+
+ /* If pmount is run without a single argument, print out the list
+ of removable devices. Does not require root privileges, just read access
+Index: pmount-0.9.17/src/pumount.c
+===================================================================
+--- pmount-0.9.17.orig/src/pumount.c 2008-10-08 23:38:21.122028300 +0200
++++ pmount-0.9.17/src/pumount.c 2008-10-08 23:38:47.972023678 +0200
+@@ -16,9 +16,12 @@
+ #include <sys/wait.h>
+ #include <limits.h>
+ #include <getopt.h>
+-#include <libintl.h>
+ #include <locale.h>
+
++#ifdef ENABLE_NLS
++#include <libintl.h>
++#endif
++
+ #include "policy.h"
+ #include "utils.h"
+ #include "luks.h"
+@@ -172,10 +175,12 @@
+ { NULL, 0, NULL, 0}
+ };
+
++#ifdef ENABLE_NLS
+ /* initialize locale */
+ setlocale( LC_ALL, "" );
+ bindtextdomain( "pmount", NULL );
+ textdomain( "pmount" );
++#endif
+
+ /* are we root? */
+ if( geteuid() ) {
diff --git a/packages/pmount/pmount-0.9.18/install.patch b/packages/pmount/pmount-0.9.18/install.patch
new file mode 100644
index 0000000000..b02942a591
--- /dev/null
+++ b/packages/pmount/pmount-0.9.18/install.patch
@@ -0,0 +1,15 @@
+Index: pmount-0.9.17/src/Makefile.am
+===================================================================
+--- pmount-0.9.17.orig/src/Makefile.am 2008-10-09 01:22:41.668067209 +0200
++++ pmount-0.9.17/src/Makefile.am 2008-10-09 01:23:22.144725902 +0200
+@@ -36,8 +36,8 @@
+
+ install-data-hook:
+ test -z $(INSTALL_DIR) || mkdir -p -- $(INSTALL_DIR)
+- $(INSTALL_DATA) -o root -g root -m 4755 -D $(INSTALL_SRC)/pmount $(INSTALL_DIR)/pmount
+- $(INSTALL_DATA) -o root -g root -m 4755 -D $(INSTALL_SRC)/pumount $(INSTALL_DIR)/pumount
++ $(INSTALL_DATA) -m 4755 -D $(INSTALL_SRC)/pmount $(INSTALL_DIR)/pmount
++ $(INSTALL_DATA) -m 4755 -D $(INSTALL_SRC)/pumount $(INSTALL_DIR)/pumount
+
+ uninstall-hook:
+ rm -f $(INSTALL_DIR)/pmount
diff --git a/packages/pmount/pmount_0.9.18.bb b/packages/pmount/pmount_0.9.18.bb
new file mode 100644
index 0000000000..26770b33a9
--- /dev/null
+++ b/packages/pmount/pmount_0.9.18.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Policy based mounter that gives the ability to mount removable devices as a user"
+HOMEPAGE = "http://pmount.alioth.debian.org/"
+LICENSE = "GPLv2"
+PR = "r0"
+
+DEPENDS = "hal e2fsprogs-libs sysfsutils"
+RDEPENDS_${PN}-hal = "${PN}"
+RRECOMMENDS_${PN}-hal = "hal"
+
+SRC_URI = "http://alioth.debian.org/frs/download.php/2624/${P}.tar.gz \
+ file://gettext.patch;patch=1 \
+ file://install.patch;patch=1 \
+ "
+
+inherit autotools gettext
+
+EXTRA_OECONF = "--enable-hal"
+
+PACKAGES =+ "${PN}-hal"
+
+FILES_${PN}-hal = "${bindir}/pmount-hal"
+
diff --git a/packages/pointercal/files/hx4700/pointercal b/packages/pointercal/files/hx4700/pointercal
new file mode 100755
index 0000000000..6bb809d1ad
--- /dev/null
+++ b/packages/pointercal/files/hx4700/pointercal
@@ -0,0 +1 @@
+-8793 -4 33430740 -137 12140 -5209048 65536
diff --git a/packages/pointercal/files/omapzoom/pointercal b/packages/pointercal/files/omapzoom/pointercal
new file mode 100755
index 0000000000..37899e94ea
--- /dev/null
+++ b/packages/pointercal/files/omapzoom/pointercal
Binary files differ
diff --git a/packages/pointercal/pointercal_0.0.bb b/packages/pointercal/pointercal_0.0.bb
index b22735c6be..dbb14c4432 100644
--- a/packages/pointercal/pointercal_0.0.bb
+++ b/packages/pointercal/pointercal_0.0.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Touchscreen calibration data"
SECTION = "base"
-PR = "r10"
+PR = "r12"
SRC_URI = "file://pointercal"
S = "${WORKDIR}"
diff --git a/packages/popt/popt-1.13/iconv.patch b/packages/popt/popt-1.13/iconv.patch
deleted file mode 100644
index 4faf4c4a1d..0000000000
--- a/packages/popt/popt-1.13/iconv.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Index: popt-1.13/Makefile.am
-===================================================================
---- popt-1.13.orig/Makefile.am 2007-11-14 20:42:27.000000000 +0000
-+++ popt-1.13/Makefile.am 2008-03-26 22:14:05.000000000 +0000
-@@ -39,7 +39,7 @@
- usrlib_LTLIBRARIES = libpopt.la
-
- libpopt_la_SOURCES = popt.c findme.c poptparse.c poptconfig.c popthelp.c poptint.c
--libpopt_la_LDFLAGS = -no-undefined @LTLIBINTL@
-+libpopt_la_LDFLAGS = -no-undefined @LTLIBINTL@ @LTLIBICONV@
-
- if HAVE_LD_VERSION_SCRIPT
- libpopt_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libpopt.vers
-Index: popt-1.13/configure.ac
-===================================================================
---- popt-1.13.orig/configure.ac 2007-11-14 20:42:27.000000000 +0000
-+++ popt-1.13/configure.ac 2008-03-26 22:20:16.000000000 +0000
-@@ -95,6 +95,7 @@
- AC_CHECK_FUNCS(getuid geteuid mtrace __secure_getenv setregid strerror iconv)
-
- AM_GNU_GETTEXT([external])
-+AM_ICONV_LINK
-
- popt_sysconfdir="${sysconfdir}"
- eval "popt_sysconfdir=\"${popt_sysconfdir}\"" # expand contained ${prefix}
diff --git a/packages/popt/popt-1.7/mkinstalldirs.patch b/packages/popt/popt-1.7/mkinstalldirs.patch
new file mode 100644
index 0000000000..2d791f2d30
--- /dev/null
+++ b/packages/popt/popt-1.7/mkinstalldirs.patch
@@ -0,0 +1,566 @@
+Index: popt-1.7/po/Makefile.in.in
+===================================================================
+--- popt-1.7.orig/po/Makefile.in.in 2002-08-11 10:17:55.000000000 -0700
++++ popt-1.7/po/Makefile.in.in 2009-02-18 15:49:21.000000000 -0800
+@@ -1,17 +1,19 @@
+-# Makefile for program source directory in GNU NLS utilities package.
+-# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
++# Makefile for PO directory in any package using GNU gettext.
++# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+ #
+-# This file file be copied and used freely without restrictions. It can
+-# be used in projects which are not available under the GNU Public License
+-# but which still want to provide support for the GNU gettext functionality.
+-# Please note that the actual code is *not* freely available.
++# This file can be copied and used freely without restrictions. It can
++# be used in projects which are not available under the GNU General Public
++# License but which still want to provide support for the GNU gettext
++# functionality.
++# Please note that the actual code of GNU gettext is covered by the GNU
++# General Public License and is *not* in the public domain.
++#
++# Origin: gettext-0.17
++GETTEXT_MACRO_VERSION = 0.17
+
+ PACKAGE = @PACKAGE@
+ VERSION = @VERSION@
+-
+-# These two variables depend on the location of this directory.
+-subdir = po
+-top_builddir = ..
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+ SHELL = /bin/sh
+ @SET_MAKE@
+@@ -22,125 +24,315 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
++datarootdir = @datarootdir@
+ datadir = @datadir@
+-localedir = $(datadir)/locale
++localedir = @localedir@
+ gettextsrcdir = $(datadir)/gettext/po
+
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+-MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+
+-CC = @CC@
+-GMSGFMT = @GMSGFMT@
+-MSGFMT = @MSGFMT@
+-XGETTEXT = @XGETTEXT@
++# We use $(mkdir_p).
++# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
++# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
++# @install_sh@ does not start with $(SHELL), so we add it.
++# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
++# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
++# versions, $(mkinstalldirs) and $(install_sh) are unused.
++mkinstalldirs = $(SHELL) @install_sh@ -d
++install_sh = $(SHELL) @install_sh@
++MKDIR_P = @MKDIR_P@
++mkdir_p = @mkdir_p@
++
++GMSGFMT_ = @GMSGFMT@
++GMSGFMT_no = @GMSGFMT@
++GMSGFMT_yes = @GMSGFMT_015@
++GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
++MSGFMT_ = @MSGFMT@
++MSGFMT_no = @MSGFMT@
++MSGFMT_yes = @MSGFMT_015@
++MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
++XGETTEXT_ = @XGETTEXT@
++XGETTEXT_no = @XGETTEXT@
++XGETTEXT_yes = @XGETTEXT_015@
++XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+ MSGMERGE = msgmerge
+-
+-DEFS = @DEFS@
+-CFLAGS = @CFLAGS@
+-CPPFLAGS = @CPPFLAGS@
+-
+-INCLUDES = -I.. -I$(top_srcdir)/intl
+-
+-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
++MSGMERGE_UPDATE = @MSGMERGE@ --update
++MSGINIT = msginit
++MSGCONV = msgconv
++MSGFILTER = msgfilter
+
+ POFILES = @POFILES@
+ GMOFILES = @GMOFILES@
+-DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+-$(POFILES) $(GMOFILES)
++UPDATEPOFILES = @UPDATEPOFILES@
++DUMMYPOFILES = @DUMMYPOFILES@
++DISTFILES.common = Makefile.in.in remove-potcdate.sin \
++$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
++DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
++$(POFILES) $(GMOFILES) \
++$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+ POTFILES = \
+
+ CATALOGS = @CATALOGS@
+
+-.SUFFIXES:
+-.SUFFIXES: .c .o .po .pox .gmo .mo
+-
+-.c.o:
+- $(COMPILE) $<
++# Makevars gets inserted here. (Don't remove this line!)
+
+-.po.pox:
+- $(MAKE) $(PACKAGE).pot
+- $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
++.SUFFIXES:
++.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+ .po.mo:
+- $(MSGFMT) -o $@ $<
++ @echo "$(MSGFMT) -c -o $@ $<"; \
++ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+ .po.gmo:
+- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+- && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
++ @lang=`echo $* | sed -e 's,.*/,,'`; \
++ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
++ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
++ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
++
++.sin.sed:
++ sed -e '/^#/d' $< > t-$@
++ mv t-$@ $@
+
+
+-all: all-@USE_NLS@
++all: check-macro-version all-@USE_NLS@
+
+-all-yes: $(CATALOGS)
++all-yes: stamp-po
+ all-no:
+
+-# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot',
++# Ensure that the gettext macros and this Makefile.in.in are in sync.
++check-macro-version:
++ @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
++ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
++ exit 1; \
++ }
++
++# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
++# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
++# we don't want to bother translators with empty POT files). We assume that
++# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
++# In this case, stamp-po is a nop (i.e. a phony target).
++
++# stamp-po is a timestamp denoting the last time at which the CATALOGS have
++# been loosely updated. Its purpose is that when a developer or translator
++# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
++# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
++# invocations of "make" will do nothing. This timestamp would not be necessary
++# if updating the $(CATALOGS) would always touch them; however, the rule for
++# $(POFILES) has been designed to not touch files that don't need to be
++# changed.
++stamp-po: $(srcdir)/$(DOMAIN).pot
++ test ! -f $(srcdir)/$(DOMAIN).pot || \
++ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
++ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
++ echo "touch stamp-po" && \
++ echo timestamp > stamp-poT && \
++ mv stamp-poT stamp-po; \
++ }
++
++# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+ # otherwise packages like GCC can not be built if only parts of the source
+ # have been downloaded.
+
+-$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
+- $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+- --add-comments --keyword=_ --keyword=N_ --keyword=POPT_ \
+- --files-from=$(srcdir)/POTFILES.in \
+- && test ! -f $(PACKAGE).po \
+- || ( rm -f $(srcdir)/$(PACKAGE).pot \
+- && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
++# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
++# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
++$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
++ if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
++ package_gnu='GNU '; \
++ else \
++ package_gnu=''; \
++ fi; \
++ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
++ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
++ else \
++ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
++ fi; \
++ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
++ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
++ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
++ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
++ --files-from=$(srcdir)/POTFILES.in \
++ --copyright-holder='$(COPYRIGHT_HOLDER)' \
++ --msgid-bugs-address="$$msgid_bugs_address" \
++ ;; \
++ *) \
++ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
++ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
++ --files-from=$(srcdir)/POTFILES.in \
++ --copyright-holder='$(COPYRIGHT_HOLDER)' \
++ --package-name="$${package_gnu}@PACKAGE@" \
++ --package-version='@VERSION@' \
++ --msgid-bugs-address="$$msgid_bugs_address" \
++ ;; \
++ esac
++ test ! -f $(DOMAIN).po || { \
++ if test -f $(srcdir)/$(DOMAIN).pot; then \
++ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
++ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
++ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
++ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
++ else \
++ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
++ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
++ fi; \
++ else \
++ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
++ fi; \
++ }
++
++# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
++# every "make" invocation, only create it when it is missing.
++# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
++$(srcdir)/$(DOMAIN).pot:
++ $(MAKE) $(DOMAIN).pot-update
++
++# This target rebuilds a PO file if $(DOMAIN).pot has changed.
++# Note that a PO file is not touched if it doesn't need to be changed.
++$(POFILES): $(srcdir)/$(DOMAIN).pot
++ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
++ if test -f "$(srcdir)/$${lang}.po"; then \
++ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
++ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
++ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
++ else \
++ $(MAKE) $${lang}.po-create; \
++ fi
+
+
+ install: install-exec install-data
+ install-exec:
+ install-data: install-data-@USE_NLS@
+- if test "$(PACKAGE)" = "gettext"; then \
+- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+- $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+- $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
++ if test "$(PACKAGE)" = "gettext-tools"; then \
++ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
++ for file in $(DISTFILES.common) Makevars.template; do \
++ $(INSTALL_DATA) $(srcdir)/$$file \
++ $(DESTDIR)$(gettextsrcdir)/$$file; \
++ done; \
++ for file in Makevars; do \
++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
++ done; \
+ else \
+ : ; \
+ fi
+ install-data-no: all
+ install-data-yes: all
+- $(mkinstalldirs) $(DESTDIR)$(datadir)
++ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
++ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+- $(mkinstalldirs) $(DESTDIR)$$dir; \
+- if test -r $$cat; then \
+- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+- echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
+- else \
+- $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+- echo "installing $(srcdir)/$$cat as" \
+- "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
+- fi; \
++ $(mkdir_p) $(DESTDIR)$$dir; \
++ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
++ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
++ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
++ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
++ if test -n "$$lc"; then \
++ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
++ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
++ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
++ for file in *; do \
++ if test -f $$file; then \
++ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
++ fi; \
++ done); \
++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++ else \
++ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
++ :; \
++ else \
++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++ fi; \
++ fi; \
++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
++ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
++ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
++ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
++ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
++ fi; \
++ done; \
+ done
+
+-# Define this as empty until I found a useful application.
+-installcheck:
++install-strip: install
+
+-uninstall:
+- catalogs='$(CATALOGS)'; \
++installdirs: installdirs-exec installdirs-data
++installdirs-exec:
++installdirs-data: installdirs-data-@USE_NLS@
++ if test "$(PACKAGE)" = "gettext-tools"; then \
++ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
++ else \
++ : ; \
++ fi
++installdirs-data-no:
++installdirs-data-yes:
++ $(mkdir_p) $(DESTDIR)$(datadir)
++ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+- rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
++ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
++ dir=$(localedir)/$$lang/LC_MESSAGES; \
++ $(mkdir_p) $(DESTDIR)$$dir; \
++ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
++ if test -n "$$lc"; then \
++ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
++ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
++ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
++ for file in *; do \
++ if test -f $$file; then \
++ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
++ fi; \
++ done); \
++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
++ else \
++ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
++ :; \
++ else \
++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
++ fi; \
++ fi; \
++ fi; \
++ done; \
+ done
+- if test "$(PACKAGE)" = "gettext"; then \
+- rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
++
++# Define this as empty until I found a useful application.
++installcheck:
++
++uninstall: uninstall-exec uninstall-data
++uninstall-exec:
++uninstall-data: uninstall-data-@USE_NLS@
++ if test "$(PACKAGE)" = "gettext-tools"; then \
++ for file in $(DISTFILES.common) Makevars.template; do \
++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
++ done; \
+ else \
+ : ; \
+ fi
++uninstall-data-no:
++uninstall-data-yes:
++ catalogs='$(CATALOGS)'; \
++ for cat in $$catalogs; do \
++ cat=`basename $$cat`; \
++ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
++ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
++ done; \
++ done
+
+ check: all
+
+-dvi info tags TAGS ID:
++info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+ mostlyclean:
+- rm -f core core.* *.pox $(PACKAGE).po *.new.po
++ rm -f remove-potcdate.sed
++ rm -f stamp-poT
++ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+ clean: mostlyclean
+@@ -151,45 +343,86 @@
+ maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+- rm -f $(GMOFILES)
++ rm -f stamp-po $(GMOFILES)
+
+ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+ dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+ # This is a separate target because 'update-po' must be executed before.
+-dist2: $(DISTFILES)
++dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
++ if test "$(PACKAGE)" = "gettext-tools"; then \
++ dists="$$dists Makevars.template"; \
++ fi; \
++ if test -f $(srcdir)/$(DOMAIN).pot; then \
++ dists="$$dists $(DOMAIN).pot stamp-po"; \
++ fi; \
++ if test -f $(srcdir)/ChangeLog; then \
++ dists="$$dists ChangeLog"; \
++ fi; \
++ for i in 0 1 2 3 4 5 6 7 8 9; do \
++ if test -f $(srcdir)/ChangeLog.$$i; then \
++ dists="$$dists ChangeLog.$$i"; \
++ fi; \
++ done; \
++ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+- cp -p $$dir/$$file $(distdir); \
++ if test -f $$file; then \
++ cp -p $$file $(distdir) || exit 1; \
++ else \
++ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
++ fi; \
+ done
+
+ update-po: Makefile
+- $(MAKE) $(PACKAGE).pot
+- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
++ $(MAKE) $(DOMAIN).pot-update
++ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
++ $(MAKE) update-gmo
++
++# General rule for creating PO files.
++
++.nop.po-create:
++ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
++ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
++ exit 1
++
++# General rule for updating PO files.
++
++.nop.po-update:
++ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
++ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
++ tmpdir=`pwd`; \
++ echo "$$lang:"; \
++ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
++ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+- catalogs='$(GMOFILES)'; \
+- for cat in $$catalogs; do \
+- cat=`basename $$cat`; \
+- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+- echo "$$lang:"; \
+- if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \
+- mv -f $$lang.new.po $$lang.po; \
++ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
++ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
++ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+- echo "msgmerge for $$cat failed!"; \
+- rm -f $$lang.new.po; \
++ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
++ :; \
++ else \
++ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
++ exit 1; \
++ fi; \
+ fi; \
+- done
+- $(MAKE) update-gmo
++ else \
++ echo "msgmerge for $$lang.po failed!" 1>&2; \
++ rm -f $$tmpdir/$$lang.new.po; \
++ fi
++
++$(DUMMYPOFILES):
+
+ update-gmo: Makefile $(GMOFILES)
+ @:
+
+-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
++Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+- $(SHELL) ./config.status
++ && $(SHELL) ./config.status $(subdir)/$@.in po-directories
++
++force:
+
+ # Tell versions [3.59,3.63) of GNU make not to export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+Index: popt-1.7/po/Makevars
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ popt-1.7/po/Makevars 2009-02-18 16:08:01.000000000 -0800
+@@ -0,0 +1,41 @@
++# Makefile variables for PO directory in any package using GNU gettext.
++
++# Usually the message domain is the same as the package name.
++DOMAIN = $(PACKAGE)
++
++# These two variables depend on the location of this directory.
++subdir = po
++top_builddir = ..
++
++# These options get passed to xgettext.
++XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=POPT_
++
++# This is the copyright holder that gets inserted into the header of the
++# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
++# package. (Note that the msgstr strings, extracted from the package's
++# sources, belong to the copyright holder of the package.) Translators are
++# expected to transfer the copyright for their translations to this person
++# or entity, or to disclaim their copyright. The empty string stands for
++# the public domain; in this case the translators are expected to disclaim
++# their copyright.
++COPYRIGHT_HOLDER =
++
++# This is the email address or URL to which the translators shall report
++# bugs in the untranslated strings:
++# - Strings which are not entire sentences, see the maintainer guidelines
++# in the GNU gettext documentation, section 'Preparing Strings'.
++# - Strings which use unclear terms or require additional context to be
++# understood.
++# - Strings which make invalid assumptions about notation of date, time or
++# money.
++# - Pluralisation problems.
++# - Incorrect English spelling.
++# - Incorrect formatting.
++# It can be your email address, or a mailing list address where translators
++# can write to without being subscribed, or the URL of a web page through
++# which the translators can contact you.
++MSGID_BUGS_ADDRESS = <popt-devel@rpm5.org>
++
++# This is the list of locale categories, beyond LC_MESSAGES, for which the
++# message catalogs shall be used. It is usually empty.
++EXTRA_LOCALE_CATEGORIES =
diff --git a/packages/popt/popt-native_1.14.bb b/packages/popt/popt-native_1.14.bb
index 54712ab812..dfad9fbf93 100644
--- a/packages/popt/popt-native_1.14.bb
+++ b/packages/popt/popt-native_1.14.bb
@@ -1,16 +1,5 @@
-require popt.inc
-
+require popt_${PV}.bb
DEPENDS = "gettext-native"
+inherit native
-PR = "r0"
-
-inherit native autotools
-
-SRC_URI = "http://rpm5.org/files/popt/popt-${PV}.tar.gz"
-
-S = "${WORKDIR}/popt-${PV}"
-
-do_install() {
- oe_libinstall -a -so libpopt ${STAGING_LIBDIR_NATIVE}
- install -m 0644 popt.h ${STAGING_INCDIR_NATIVE}
-}
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/popt-${PV}"
diff --git a/packages/popt/popt-native_1.7.bb b/packages/popt/popt-native_1.7.bb
index a83d384eee..320a2112e8 100644
--- a/packages/popt/popt-native_1.7.bb
+++ b/packages/popt/popt-native_1.7.bb
@@ -1,20 +1,7 @@
-require popt.inc
-
+require popt_${PV}.bb
DEPENDS = "gettext-native"
-
-PR = "r5"
-
-inherit native autotools
-
-SRC_URI = "ftp://ftp.rpm.org/pub/rpm/dist/rpm-4.1.x/popt-${PV}.tar.gz \
- file://m4.patch;patch=1 \
- file://intl.patch;patch=1"
+inherit native
S = "${WORKDIR}/popt-${PV}"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/popt-${PV}"
-
-do_install() {
- oe_libinstall -a -so libpopt ${STAGING_LIBDIR_NATIVE}
- install -m 0644 popt.h ${STAGING_INCDIR_NATIVE}
-}
diff --git a/packages/popt/popt.inc b/packages/popt/popt.inc
index bc4da2d2a7..07671d798f 100644
--- a/packages/popt/popt.inc
+++ b/packages/popt/popt.inc
@@ -3,3 +3,7 @@ HOMEPAGE = "http://rpm5.org"
AUTHOR = "Jeff Johnson"
LICENSE = "MIT"
SECTION = "libs"
+
+S = "${WORKDIR}/popt-${PV}"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/popt-${PV}"
+
diff --git a/packages/popt/popt_1.14.bb b/packages/popt/popt_1.14.bb
index 240ac52275..b3f8a89e91 100644
--- a/packages/popt/popt_1.14.bb
+++ b/packages/popt/popt_1.14.bb
@@ -1,17 +1,9 @@
require popt.inc
-
-DEPENDS = "gettext-native virtual/libintl"
-
+DEPENDS = "gettext virtual/libintl"
PR = "r1"
-inherit autotools
-
-SRC_URI = "http://rpm5.org/files/popt/popt-${PV}.tar.gz"
-
-
-do_stage() {
- oe_libinstall -a -so libpopt ${STAGING_LIBDIR}
- install -m 0644 popt.h ${STAGING_INCDIR}
-}
-
+inherit autotools_stage
+SRC_URI = "\
+ http://rpm5.org/files/popt/popt-${PV}.tar.gz \
+"
diff --git a/packages/popt/popt_1.7.bb b/packages/popt/popt_1.7.bb
index 7992db56e7..0b688c6217 100644
--- a/packages/popt/popt_1.7.bb
+++ b/packages/popt/popt_1.7.bb
@@ -1,16 +1,23 @@
require popt.inc
-DEPENDS = "gettext virtual/libintl"
+PR = "r1"
-PR = "r5"
+DEPENDS = "gettext virtual/libintl"
-inherit autotools
+inherit autotools autotools_stage
-SRC_URI = "ftp://ftp.rpm.org/pub/rpm/dist/rpm-4.1.x/popt-${PV}.tar.gz \
- file://m4.patch;patch=1 \
- file://intl.patch;patch=1"
+SRC_URI = "\
+ http://rpm.org/releases/historical/rpm-4.1.x/popt-${PV}.tar.gz \
+ file://m4.patch;patch=1 \
+ file://intl.patch;patch=1 \
+ file://mkinstalldirs.patch;patch=1 \
+"
-do_stage() {
- oe_libinstall -a -so libpopt ${STAGING_LIBDIR}
- install -m 0644 popt.h ${STAGING_INCDIR}
+do_configure() {
+ gnu-configize
+ aclocal
+ libtoolize --copy --force
+ automake --add-missing
+ autoreconf
+ oe_runconf
}
diff --git a/packages/powervr-drivers/libgles-omap3.inc b/packages/powervr-drivers/libgles-omap3.inc
index b9933aadfa..7e47bbc8ae 100644
--- a/packages/powervr-drivers/libgles-omap3.inc
+++ b/packages/powervr-drivers/libgles-omap3.inc
@@ -1,7 +1,23 @@
DESCRIPTION = "libGLES for the omap3"
LICENCE = "proprietary-binary"
-# Put "OMAP35x_Graphics_SDK_setuplinux_3_00_00_05.bin" in the same directory as this recipe
+PROVIDES += "virtual/egl"
+
+# some hints to get you going. as this isnt a totally "open" library, you need
+# to do some work. follow the steps below.
+#
+# 1. if you don't already have a ti account get one here. it's free:
+# http://www.ti.com/hdr_my_ti
+# 2. fetch the gl-es bin from here:
+# https://www-a.ti.com/downloads/sds_support/targetcontent/dvsdk/oslinux_dvsdk/v3_00_3530/OMAP35x_Graphics_SDK_setuplinux_3_00_00_06.bin
+# (replace version in .bin file as appropriate)
+# 3. put the OMAP35x_*.bin file in libgles-omap3/
+# mv OMAP35x_Graphics_SDK_setuplinux_3_00_00_06.bin ./libgles-omap3/
+# 4. make it executable:
+# chmod a+x ./libgles-omap3/OMAP35x_Graphics_SDK_setuplinux_3_00_00_06.bin
+#
+# voila!
+
SRC_URI = "file://OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin \
file://rc.pvr \
"
@@ -15,8 +31,6 @@ FILES_${PN} = "${sysconfdir} ${libdir}/lib*.so.* ${bindir}/pvrsrvinit"
FILES_xserver-kdrive-powervrsgx = "${bindir}/Xsgx"
FILES_${PN}-tests = "${bindir}/*"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
RRECOMMENDS_${PN} = "${PN}-tests \
omap3-sgx-modules"
@@ -32,16 +46,21 @@ Y
${S}" | ${WORKDIR}/OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin
}
-addtask accept_license after do_unpack before do_compile
+addtask accept_license after do_unpack before do_configure
-do_compile () {
- :
+do_compile() {
+ for sofile in $(find ${S} -name "lib*Open*.so") $(find ${S} -name "lib*srv*.so") $(find ${S} -name "lib*gl*.so") $(find ${S} -name "libpvr*.so") $(find ${S} -name "lib*GL*.so"); do
+ if [ "$(readlink -n ${sofile})" = "" ] ; then
+ mv $sofile ${sofile}.${IMGPV}
+ ln -sf $(basename ${sofile}.${IMGPV}) ${sofile}
+ fi
+ done
}
do_install () {
install -d ${D}${libdir}
- cp -pR ${BINLOCATION}/*.so* ${D}${libdir}
+ cp -pP ${BINLOCATION}/*.so* ${D}${libdir}
install -d ${D}${bindir}/
cp -pP ${BINLOCATION}/*_test ${D}${bindir}/
@@ -52,13 +71,21 @@ do_install () {
cp -pP ${BINLOCATION}/pvrsrvinit ${D}${bindir}/
cp -pP ${BINLOCATION}/xgles1test1 ${D}${bindir}/
- cp -pP ${BINLOCATION}/freedesktop/usr/X11R6_SGX/bin/Xsgx ${D}${bindir}/
+ cp -pP ${BINLOCATION}/freedesktop/kdrive/usr/X11R6_SGX/bin/Xsgx || true
+ cp -pP ${BINLOCATION}/freedesktop/usr/X11R6_SGX/bin/Xsgx ${D}${bindir}/ || true
install -d ${D}${includedir}
cp -pPR ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/Include/* ${D}${includedir}/
+ cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/Include/* ${D}${includedir}/
+ cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/LinuxOMAP3/Include/GLES/* ${D}${includedir}/GLES/
+ cp -pPr ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/LinuxOMAP3/Include/GLES/* ${D}${includedir}/GLES2/
install -d ${D}${sysconfdir}/init.d/
cp -pP ${WORKDIR}/rc.pvr ${D}${sysconfdir}/init.d/pvr-init
+
+ install -d ${D}${sysconfdir}
+ echo "[default]" > ${D}${sysconfdir}/powervr.ini
+ echo "WindowSystem=libpvrPVR2D_FRONTWSEGL.so" >> ${D}${sysconfdir}/powervr.ini
}
do_stage () {
@@ -68,6 +95,9 @@ do_stage () {
install -d ${STAGING_INCDIR}
cp -pPR ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/Include/* ${STAGING_INCDIR}/
+ cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/Include/* ${STAGING_INCDIR}/
+ cp -pPR ${S}/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/LinuxOMAP3/Include/GLES/* ${STAGING_INCDIR}/GLES/
+ cp -pPr ${S}/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/LinuxOMAP3/Include/GLES/* ${STAGING_INCDIR}/GLES2/
}
pkg_postinst() {
diff --git a/packages/powervr-drivers/libgles-omap3/rc.pvr b/packages/powervr-drivers/libgles-omap3/rc.pvr
index f9877e4992..244f480f2c 100755
--- a/packages/powervr-drivers/libgles-omap3/rc.pvr
+++ b/packages/powervr-drivers/libgles-omap3/rc.pvr
@@ -1,12 +1,12 @@
#!/bin/sh
-rmmod bc_example
+#rmmod bc_example
rmmod omaplfb
rmmod pvrsrvkm
insmod $(busybox find /lib/modules/$(uname -r) -name "pvrsrvkm.ko")
-modprobe -f bc_example
-modprobe -f omaplfb
+#modprobe bc_example
+modprobe omaplfb
pvr_maj=`grep "pvrsrvkm$" /proc/devices | cut -b1,2,3`
@@ -15,6 +15,10 @@ if [ -e /dev/pvrsrvkm ] ; then
fi
mknod /dev/pvrsrvkm c $pvr_maj 0
+chmod 666 /dev/pvrsrvkm
/usr/bin/pvrsrvinit
+# Set SGX to full speed
+devmem2 0x48004b40 w 0
+
diff --git a/packages/powervr-drivers/libgles-omap3_3.00.00.05.bb b/packages/powervr-drivers/libgles-omap3_3.00.00.05.bb
index 62c69a0ed0..814ca04637 100644
--- a/packages/powervr-drivers/libgles-omap3_3.00.00.05.bb
+++ b/packages/powervr-drivers/libgles-omap3_3.00.00.05.bb
@@ -2,11 +2,11 @@ require libgles-omap3.inc
# Not released yet
DEFAULT_PREFERENCE = "-1"
-PR = "r2"
+PR = "r3"
SGXPV = "3_00_00_05"
+IMGPV = "1.2.12.838"
# Quality control is really poor on these SDKs, so hack around the latest madness:
FILES_${PN} += "${libdir}/*.so"
FILES_${PN}-dev = "${includedir}"
-
diff --git a/packages/powervr-drivers/libgles-omap3_3.00.00.06.bb b/packages/powervr-drivers/libgles-omap3_3.00.00.06.bb
new file mode 100644
index 0000000000..cc8ddca0f5
--- /dev/null
+++ b/packages/powervr-drivers/libgles-omap3_3.00.00.06.bb
@@ -0,0 +1,21 @@
+require libgles-omap3.inc
+
+# Not released yet
+#DEFAULT_PREFERENCE = "-1"
+PR = "r7"
+
+SGXPV = "3_00_00_06"
+IMGPV = "1.3.13.1397"
+
+do_accept_license() {
+ export HOME="${WORKDIR}"
+ echo "Y
+q
+Y
+${S}" | ${WORKDIR}/OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin
+}
+
+# Quality control is really poor on these SDKs, so hack around the latest madness:
+FILES_${PN} += "${libdir}/*.so"
+FILES_${PN}-dev = "${includedir}"
+
diff --git a/packages/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch b/packages/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch
new file mode 100644
index 0000000000..9751bcd88d
--- /dev/null
+++ b/packages/powervr-drivers/omap3-sgx-modules/0001-New-build-system-for-SGX.patch
@@ -0,0 +1,247 @@
+From 36065340e13e6888e7399a1e5b5b11045e8474c6 Mon Sep 17 00:00:00 2001
+From: Tomba <tomba@bat.org>
+Date: Sun, 1 Feb 2009 15:39:15 +0200
+Subject: [PATCH] New build system for SGX
+
+---
+ Kbuild | 53 ++++++++++
+ Makefile | 151 +++++++++++++++++++++++++++
+ services4/3rdparty/dc_omap3430_linux/Kbuild | 8 ++
+ 3 files changed, 212 insertions(+), 0 deletions(-)
+ create mode 100644 Kbuild
+ create mode 100644 Makefile
+ create mode 100644 services4/3rdparty/dc_omap3430_linux/Kbuild
+
+diff --git a/Kbuild b/Kbuild
+new file mode 100644
+index 0000000..19f9a24
+--- /dev/null
++++ b/Kbuild
+@@ -0,0 +1,53 @@
++obj-m := pvrsrvkm.o
++
++FILES := \
++services4/srvkm/common/queue.c \
++services4/srvkm/common/hash.c \
++services4/srvkm/common/perproc.c \
++services4/srvkm/common/mem.c \
++services4/srvkm/common/power.c \
++services4/srvkm/common/deviceclass.c \
++services4/srvkm/common/metrics.c \
++services4/srvkm/common/resman.c \
++services4/srvkm/common/buffer_manager.c \
++services4/srvkm/common/pvrsrv.c \
++services4/srvkm/common/handle.c \
++services4/srvkm/common/ra.c \
++services4/srvkm/common/devicemem.c \
++services4/srvkm/env/linux/pvr_debug.c \
++services4/srvkm/env/linux/mm.c \
++services4/srvkm/env/linux/mutex.c \
++services4/srvkm/env/linux/mmap.c \
++services4/srvkm/env/linux/module.c \
++services4/srvkm/env/linux/proc.c \
++services4/srvkm/env/linux/event.c \
++services4/srvkm/env/linux/osfunc.c \
++services4/srvkm/env/linux/pvr_bridge_k.c \
++services4/srvkm/env/linux/pdump.c \
++services4/srvkm/devices/sgx/sgxtransfer.c \
++services4/srvkm/devices/sgx/sgxinit.c \
++services4/srvkm/devices/sgx/sgxutils.c \
++services4/srvkm/devices/sgx/pb.c \
++services4/srvkm/devices/sgx/sgxkick.c \
++services4/srvkm/devices/sgx/mmu.c \
++services4/srvkm/devices/sgx/sgxreset.c \
++services4/srvkm/bridged/bridged_pvr_bridge.c \
++services4/system/omap3430/sysutils_linux.c \
++services4/system/omap3430/sysconfig.c
++
++EXTRA_CFLAGS += -I$(src)/include4
++EXTRA_CFLAGS += -I$(src)/services4/include
++EXTRA_CFLAGS += -I$(src)/services4/srvkm/include
++EXTRA_CFLAGS += -I$(src)/services4/srvkm/hwdefs
++EXTRA_CFLAGS += -I$(src)/services4/srvkm/bridged
++EXTRA_CFLAGS += -I$(src)/services4/srvkm/devices/sgx
++EXTRA_CFLAGS += -I$(src)/services4/srvkm/env/linux
++EXTRA_CFLAGS += -I$(src)/services4/system/include
++EXTRA_CFLAGS += -I$(src)/services4/system/omap3430
++
++EXTRA_CFLAGS += $(ALL_CFLAGS)
++
++pvrsrvkm-y := $(FILES:.c=.o)
++
++obj-y := services4/3rdparty/dc_omap3430_linux/
++
+diff --git a/Makefile b/Makefile
+new file mode 100644
+index 0000000..74e9761
+--- /dev/null
++++ b/Makefile
+@@ -0,0 +1,151 @@
++export DISCIMAGE = /tmp/asdada
++export KERNELDIR = /home/tomba/work/linux
++
++export BUILD = debug
++
++export KERNELDIR = /home/tomba/work/linux
++export KBUILD_EXTRA_SYMBOLS = `pwd`/services4/srvkm/env/linux/kbuild/Module.symvers
++
++SGXCORE = 530
++CORE = -DSGX530 -DSUPPORT_SGX530 -DSGX_CORE_REV=103
++
++SUPPORT_SGX = 1
++SUPPORT_HW_RECOVERY = 1
++SUPPORT_SGX_HWPERF = 1
++SYS_USING_INTERRUPTS = 1
++
++PVR2D_ALT_2DHW = 1
++
++LDM_PLATFORM ?= 1
++
++# Only enable active power management if passive power management is
++# enabled, as indicated by LDM_PLATFORM being set to 1. On OMAP,
++# the system can suspend in the case where active power management is
++# enabled in the SGX driver, but passive power management isn't. As
++# passive power management isn't enabled, the driver won't see the
++# system suspend/resume events, and so won't take appropriate action.
++ifeq ($(LDM_PLATFORM),1)
++SUPPORT_ACTIVE_POWER_MANAGEMENT ?= 1
++else
++SUPPORT_ACTIVE_POWER_MANAGEMENT = 0
++endif
++
++export PVR_BUILD_DIR := $(shell pwd)
++
++DATE := $(shell date "+%a %B %d %Z %Y" )
++
++CBUILD = -DPVR_BUILD_DIR="\"$(PVR_BUILD_DIR)\"" \
++ -DPVR_BUILD_DATE="\"$(DATE)\"" \
++ -DPVR_BUILD_TYPE="\"$(BUILD)\""
++
++# Don't support HW recovery on debug builds
++CBUILD.debug = -DDEBUG
++CBUILD.timing = -DTIMING
++CBUILD.release = -DRELEASE
++CFLAGS.debug = -g -O0 -DDLL_METRIC=1
++CFLAGS.timing = $(OPTIM) -g -DDLL_METRIC=1 -DTIMING
++CFLAGS.release = $(OPTIM) -g
++CFLAGS = $(CFLAGS.$(BUILD))
++
++
++ifeq ("$(BUILD)", "debug")
++DEBUG_LINUX_MEMORY_ALLOCATIONS ?= 1
++DEBUG_LINUX_MEM_AREAS ?= 1
++DEBUG_LINUX_MMAP_AREAS ?= 1
++DEBUG_LINUX_XML_PROC_FILES ?= 0
++DEBUG_LINUX_SLAB_ALLOCATIONS ?= 0
++DEBUG_BRIDGE_KM ?= 1
++DEBUG_TRACE_BRIDGE_KM ?= 0
++DEBUG_BRIDGE_KM_DISPATCH_TABLE ?= 0
++endif
++
++TRANSFER_QUEUE ?= 1
++SUPPORT_SGX_EVENT_OBJECT ?= 1
++SUPPORT_SECURE_HANDLES ?= 1
++SUPPORT_SRVINIT = 1
++SUPPORT_PERCONTEXT_PB = 1
++
++SYS_CFLAGS += -DSERVICES4 -D_XOPEN_SOURCE=600 -DPVR2D_VALIDATE_INPUT_PARAMS
++
++# Thread support
++USE_PTHREADS ?= 1
++USE_GCC__thread_KEYWORD ?= 0
++OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP ?= 0
++DISABLE_THREADS ?= 0
++
++# Automatically define C compiler macros for features possible (or not) in use.
++
++SYS_CFLAGS.$(SUPPORT_SRVINIT) += -DSUPPORT_SRVINIT
++
++SYS_CFLAGS.$(SUPPORT_SGX) += -DSUPPORT_SGX
++SYS_CFLAGS.$(SUPPORT_XWS) += -DSUPPORT_XWS
++SYS_CFLAGS.$(PDUMP) += -DPDUMP
++SYS_CFLAGS.$(SUPPORT_POWER_MANAGEMENT) += -DSUPPORT_POWER_MANAGEMENT
++SYS_CFLAGS.$(SUPPORT_BUFFER_CLASS) += -DSUPPORT_BUFFER_CLASS
++
++SYS_CFLAGS.$(SUPPORT_PERCONTEXT_PB) += -DSUPPORT_PERCONTEXT_PB
++SYS_CFLAGS.$(SUPPORT_DYNAMIC_PBRESIZE) += -DSUPPORT_DYNAMIC_PBRESIZE
++
++SYS_CFLAGS.$(USE_FBDEV) += -DUSE_FBDEV
++SYS_CFLAGS.$(USE_FBDEV) += -DFBDEV_NAME="\"$(FBDEV_NAME)\""
++SYS_CFLAGS.$(SUPPORT_DYNAMIC_3DCLOCKGATING) += -DSUPPORT_DYNAMIC_3DCLOCKGATING
++SYS_CFLAGS.$(REENTRANCY_PROTECTION) += -DREENTRANCY_PROTECTION
++SYS_CFLAGS.$(SCHEDULER_CONTROL_SUPPORT) += -DSCHEDULER_CONTROL_SUPPORT
++SYS_CFLAGS.$(USE_IMG_POWER_DOMAIN_FUNCTION) += -DUSE_IMG_POWER_DOMAIN_FUNCTION
++
++SYS_CFLAGS.$(USE_DMALLOC) += -DDMALLOC
++
++SYS_CFLAGS.$(DEBUG_LINUX_MEMORY_ALLOCATIONS) += -DDEBUG_LINUX_MEMORY_ALLOCATIONS
++SYS_CFLAGS.$(DEBUG_LINUX_MEM_AREAS) += -DDEBUG_LINUX_MEM_AREAS
++SYS_CFLAGS.$(DEBUG_LINUX_MMAP_AREAS) += -DDEBUG_LINUX_MMAP_AREAS
++SYS_CFLAGS.$(DEBUG_LINUX_XML_PROC_FILES) += -DDEBUG_LINUX_XML_PROC_FILES
++SYS_CFLAGS.$(DEBUG_LINUX_SLAB_ALLOCATIONS) += -DDEBUG_LINUX_SLAB_ALLOCATIONS
++SYS_CFLAGS.$(DEBUG_BRIDGE_KM) += -DDEBUG_BRIDGE_KM
++SYS_CFLAGS.$(DEBUG_TRACE_BRIDGE_KM) += -DDEBUG_TRACE_BRIDGE_KM
++SYS_CFLAGS.$(DEBUG_BRIDGE_KM_DISPATCH_TABLE) += -DDEBUG_BRIDGE_KM_DISPATCH_TABLE
++
++SYS_CFLAGS.$(SUPPORT_LINUX_X86_WRITECOMBINE) += -DSUPPORT_LINUX_X86_WRITECOMBINE
++
++SYS_CFLAGS.$(SGX_PDS_EVENTS_DISABLED) += -DSGX_PDS_EVENTS_DISABLED
++SYS_CFLAGS.$(USE_SUPPORT_NO_TA3D_OVERLAP) += -DUSE_SUPPORT_NO_TA3D_OVERLAP
++SYS_CFLAGS.$(SUPPORT_SGX_TILING) += -DSUPPORT_SGX_TILING
++SYS_CFLAGS.$(TRANSFER_QUEUE) += -DTRANSFER_QUEUE
++
++SYS_CFLAGS.$(SUPPORT_SGX_MMU_DUMMY_PAGE) += -DSUPPORT_SGX_MMU_DUMMY_PAGE
++
++SYS_CFLAGS.$(PVRSRV_USSE_EDM_STATUS_DEBUG) += -DPVRSRV_USSE_EDM_STATUS_DEBUG
++
++SYS_CFLAGS.$(SUPPORT_DRI_DRM) += -DSUPPORT_DRI_DRM
++
++SYS_CFLAGS.$(SYS_USING_INTERRUPTS) += -DSYS_USING_INTERRUPTS
++SYS_CFLAGS.$(SUPPORT_HW_RECOVERY) += -DSUPPORT_HW_RECOVERY
++SYS_CFLAGS.$(SUPPORT_ACTIVE_POWER_MANAGEMENT) += -DSUPPORT_ACTIVE_POWER_MANAGEMENT
++
++SYS_CFLAGS.$(SUPPORT_SECURE_HANDLES) += -DPVR_SECURE_HANDLES
++
++SYS_CFLAGS.$(USE_PTHREADS) += -DUSE_PTHREADS
++SYS_CFLAGS.$(USE_GCC__thread_KEYWORD) += -DUSE_GCC__thread_KEYWORD
++SYS_CFLAGS.$(OPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP) += -DOPTIMISE_NON_NPTL_SINGLE_THREAD_TLS_LOOKUP
++SYS_CFLAGS.$(DISABLE_THREADS) += -DDISABLE_THREADS
++SYS_CFLAGS.$(SUPPORT_SGX_EVENT_OBJECT) += -DSUPPORT_SGX_EVENT_OBJECT
++SYS_CFLAGS.$(LDM_PLATFORM) += -DLDM_PLATFORM
++SYS_CFLAGS.$(LDM_PCI) += -DLDM_PCI
++SYS_CFLAGS.$(PVR_MANUAL_POWER_CONTROL) += -DPVR_MANUAL_POWER_CONTROL
++
++SYS_CFLAGS.$(PVR2D_ALT_2DHW) += -DPVR2D_ALT_2DHW
++
++SYS_CFLAGS.$(SUPPORT_SGX_HWPERF) += -DSUPPORT_SGX_HWPERF
++
++export ALL_CFLAGS = -DLINUX \
++ $(CBUILD) $(CBUILD.$(BUILD)) \
++ $(SYS_CFLAGS) $(SYS_CFLAGS.1) \
++ $(MODULE_CFLAGS) $(MODULE_CFLAGS.$(BUILD)) \
++ $(CORE) \
++ $(CFLAGS)
++
++all:
++ $(MAKE) -C $(KERNELDIR) M=`pwd` $*
++
++clean:
++ $(MAKE) -C $(KERNELDIR) M=`pwd` clean
++
+diff --git a/services4/3rdparty/dc_omap3430_linux/Kbuild b/services4/3rdparty/dc_omap3430_linux/Kbuild
+new file mode 100644
+index 0000000..c08b240
+--- /dev/null
++++ b/services4/3rdparty/dc_omap3430_linux/Kbuild
+@@ -0,0 +1,8 @@
++EXTRA_CFLAGS = -DLINUX \
++ -I$(PVR_BUILD_DIR)/include4 \
++ -I$(PVR_BUILD_DIR)/services4/include \
++ -I$(PVR_BUILD_DIR)/services4/system/$(PVR_SYSTEM) \
++ -I$(PVR_BUILD_DIR)/services4/system/include \
++
++obj-m := omaplfb.o
++omaplfb-y := omaplfb_displayclass.o omaplfb_linux.o
+--
+1.5.6.3
+
diff --git a/packages/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff b/packages/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff
new file mode 100644
index 0000000000..c857fe713f
--- /dev/null
+++ b/packages/powervr-drivers/omap3-sgx-modules/spurious-irq-fix.diff
@@ -0,0 +1,11 @@
+--- /tmp/sgxinit.c 2009-02-20 21:24:01.000000000 +0100
++++ omap3-sgx-modules-1.3.13.1397/services4/srvkm/devices/sgx/sgxinit.c 2009-02-20 21:25:17.000000000 +0100
+@@ -1139,6 +1139,8 @@
+
+
+ OSWriteHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR, ui32EventClear);
++ //Read back to flush posted write to fix spurious IRQ
++ OSReadHWReg(psDevInfo->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR);
+ }
+ }
+
diff --git a/packages/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb b/packages/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb
index 20bce6091c..985a0c044b 100644
--- a/packages/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb
+++ b/packages/powervr-drivers/omap3-sgx-modules_1.3.13.1397.bb
@@ -1,22 +1,25 @@
DESCRIPTION = "Kernel drivers for the PowerVR SGX chipset found in the omap3 SoCs"
LICENSE = "GPLv2"
-PR = "r3"
+PR = "r6"
inherit module
SRC_URI = "http://dominion.thruhere.net/koen/OE/omap3-sgx-modules-${PV}.tar.bz2 \
-# file://0001-Compile-fixes-for-DSS2.patch;patch=1 \
+ file://0001-Compile-fixes-for-DSS2.patch;patch=1 \
+ file://0001-New-build-system-for-SGX.patch;patch=1 \
+ file://spurious-irq-fix.diff;patch=1 \
"
-MAKE_TARGETS = "BUILD=debug"
+PVRBUILD = "release"
+
+MAKE_TARGETS = " BUILD=${PVRBUILD}"
do_compile_prepend() {
- cd ${S}/eurasiacon/build/linux/omap3430_linux/kbuild/
+ find ${S} -name "*.*o" | xargs rm
}
do_install() {
- cd ${S}/eurasiacon/build/linux/omap3430_linux/kbuild/
mkdir -p ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
- cp ${WORKDIR}/${PN}-${PV}/eurasiacon/binary_omap3430_linux_debug/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
+ cp ${S}/pvrsrvkm.ko ${S}/services4/3rdparty/dc_omap3430_linux/omaplfb.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/gpu/pvr
}
diff --git a/packages/procps/procps_3.2.7.bb b/packages/procps/procps_3.2.7.bb
index 724e1fdc67..689fc33503 100644
--- a/packages/procps/procps_3.2.7.bb
+++ b/packages/procps/procps_3.2.7.bb
@@ -1,6 +1,6 @@
require procps.inc
-PR = "r6"
+PR = "r7"
inherit update-rc.d
@@ -40,6 +40,7 @@ do_install_append () {
mv ${D}${base_bindir}/ps ${D}${base_bindir}/ps.${PN}
mv ${D}${bindir}/free ${D}${bindir}/free.${PN}
mv ${D}${base_sbindir}/sysctl ${D}${base_sbindir}/sysctl.${PN}
+ mv ${D}${bindir}/pkill ${D}${bindir}/pkill.${PN}
}
pkg_postinst() {
@@ -49,6 +50,7 @@ pkg_postinst() {
update-alternatives --install ${base_bindir}/kill kill kill.${PN} 90
update-alternatives --install ${bindir}/free free free.${PN} 90
update-alternatives --install ${base_sbindir}/sysctl sysctl sysctl.${PN} 90
+ update-alternatives --install ${bindir}/pkill pkill pkill.${PN} 90
}
pkg_postrm() {
@@ -58,4 +60,5 @@ pkg_postrm() {
update-alternatives --remove kill kill.${PN}
update-alternatives --remove free free.${PN}
update-alternatives --remove sysctl sysctl.${PN}
+ update-alternatives --remove pkill pkill.${PN}
}
diff --git a/packages/proftpd/files/make.patch b/packages/proftpd/files/make.patch
new file mode 100644
index 0000000000..66ebf2ce89
--- /dev/null
+++ b/packages/proftpd/files/make.patch
@@ -0,0 +1,51 @@
+Index: proftpd-1.3.2/Makefile.in
+===================================================================
+--- proftpd-1.3.2.orig/Makefile.in
++++ proftpd-1.3.2/Makefile.in
+@@ -76,7 +76,6 @@ check: proftpd$(EXEEXT)
+ $(DESTDIR)$(localedir) $(DESTDIR)$(includedir) $(DESTDIR)$(includedir)/proftpd $(DESTDIR)$(libdir) $(DESTDIR)$(pkgconfigdir) $(DESTDIR)$(libdir)/proftpd $(DESTDIR)$(libexecdir) $(DESTDIR)$(localstatedir) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(rundir) $(DESTDIR)$(bindir) $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir) $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man8:
+ @if [ ! -d $@ ]; then \
+ mkdir -p $@; \
+- chown $(INSTALL_USER):$(INSTALL_GROUP) $@; \
+ chmod 0755 $@; \
+ fi
+
+@@ -86,7 +85,6 @@ install-proftpd: proftpd $(DESTDIR)$(inc
+ rm -f $(DESTDIR)$(sbindir)/in.proftpd ; \
+ fi
+ ln -s proftpd $(DESTDIR)$(sbindir)/in.proftpd
+- -chown -h $(INSTALL_USER):$(INSTALL_GROUP) $(DESTDIR)$(sbindir)/in.proftpd
+
+ install-libs: $(DESTDIR)$(libdir)/proftpd
+ cd lib/ && $(MAKE) install
+@@ -121,11 +119,11 @@ install-utils: $(DESTDIR)$(sbindir) $(DE
+ $(INSTALL_SBIN) ftpshut $(DESTDIR)$(sbindir)/ftpshut
+ $(INSTALL_BIN) ftptop $(DESTDIR)$(bindir)/ftptop
+ $(INSTALL_BIN) ftpwho $(DESTDIR)$(bindir)/ftpwho
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755 src/prxs $(DESTDIR)$(bindir)/prxs
++ $(INSTALL) -m 0755 src/prxs $(DESTDIR)$(bindir)/prxs
+
+ install-conf: $(DESTDIR)$(sysconfdir)
+ if [ ! -f $(DESTDIR)$(sysconfdir)/proftpd.conf ] ; then \
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0644 \
++ $(INSTALL) -m 0644 \
+ $(top_srcdir)/sample-configurations/basic.conf \
+ $(DESTDIR)$(sysconfdir)/proftpd.conf ; \
+ fi
+Index: proftpd-1.3.2/Make.rules.in
+===================================================================
+--- proftpd-1.3.2.orig/Make.rules.in
++++ proftpd-1.3.2/Make.rules.in
+@@ -29,9 +29,9 @@ UTILS_LIBS=@UTILS_LIBS@ @LIBS@
+ INSTALL=@INSTALL@
+ INSTALL_USER=@install_user@
+ INSTALL_GROUP=@install_group@
+-INSTALL_BIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
+-INSTALL_SBIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
+-INSTALL_MAN=$(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0644
++INSTALL_BIN=$(INSTALL) @INSTALL_STRIP@ -m 0755
++INSTALL_SBIN=$(INSTALL) @INSTALL_STRIP@ -m 0755
++INSTALL_MAN=$(INSTALL) -m 0644
+
+ RM=rm -f
+ SHELL=/bin/sh
diff --git a/packages/proftpd/proftpd_1.3.2.bb b/packages/proftpd/proftpd_1.3.2.bb
new file mode 100644
index 0000000000..1a9736dbf3
--- /dev/null
+++ b/packages/proftpd/proftpd_1.3.2.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "Secure ftp daemon"
+SECTION = "console/network"
+LICENSE = "GPL"
+PR = "r2"
+
+SRC_URI = "ftp://ftp.nl.uu.net/pub/unix/ftp/proftpd/ftp/distrib/source/${PN}-${PV}.tar.gz \
+ file://make.patch;patch=1 \
+ "
+
+
+EXTRA_OECONF = "ac_cv_func_setpgrp_void=yes ac_cv_func_setgrent_void=yes"
+LDFLAGS += "-Llib"
+PARALLEL_MAKE = ""
+
+do_configure () {
+ ./configure \
+ --disable-auth-pam \
+ --build=${BUILD_SYS} \
+ --host=${HOST_SYS} \
+ --target=${TARGET_SYS} \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --sharedstatedir=/com \
+ --localstatedir=/var \
+ ${EXTRA_OECONF} \
+ $@;
+}
+
+do_install () {
+ oe_runmake DESTDIR=${D} install
+}
+
+pkg_postinst () {
+ # more chown's might be needed
+ chown root:root /usr/sbin/proftpd
+}
diff --git a/packages/psplash/files/kaeilos/psplash-hand-img.h b/packages/psplash/files/kaeilos/psplash-hand-img.h
new file mode 100644
index 0000000000..d262d6cc17
--- /dev/null
+++ b/packages/psplash/files/kaeilos/psplash-hand-img.h
@@ -0,0 +1,958 @@
+/* GdkPixbuf RGB C-Source image dump 1-byte-run-length-encoded */
+
+#define HAND_IMG_ROWSTRIDE (720)
+#define HAND_IMG_WIDTH (240)
+#define HAND_IMG_HEIGHT (136)
+#define HAND_IMG_BYTES_PER_PIXEL (3) /* 3:RGB, 4:RGBA */
+#define HAND_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
+ "\377\377\377\377\377\377\235\377\377\377\13\350\351\351\246\247\247\200" \
+ "\201\202efgIJK0238:;IJKhjj\233\234\234\335\336\336\377\377\377\377\343" \
+ "\377\377\377\4\374\374\374\257\260\260JKL\25\27\30\211\23\25\26\4\24" \
+ "\26\27RTT\257\260\260\371\371\371\377\377\377\377\337\377\377\377\2\270" \
+ "\271\271345\217\23\25\26\2""567\270\271\271\377\377\377\377\334\377\377" \
+ "\377\2\372\372\372mno\223\23\25\26\2efg\367\367\367\377\377\377\377\331" \
+ "\377\377\377\2\374\374\374YZ[\217\23\25\26\4\"&'6=@6<\77\32\35\37\202" \
+ "\23\25\26\2KLM\356\356\356\377\377\377\377\330\377\377\377\1\203\204" \
+ "\205\220\23\25\26\5""7=A^dgagkJQT!%'\202\23\25\26\2""8:;\354\354\354" \
+ "\377\377\377\377\326\377\377\377\2\333\333\333\26\30\31\220\23\25\26" \
+ "\6@GJcimeko_ei9\77B\30\32\33\202\23\25\26\2Y[\\\376\376\376\377\377\377" \
+ "\377\325\377\377\377\1ijk\221\23\25\26\1ELO\202djn\3[ae=DG\35!#\203\23" \
+ "\25\26\1\252\252\253\377\377\377\377\324\377\377\377\2\366\366\366\36" \
+ "\37\40\221\23\25\26\5""5;>W]`KQU6<\77\40#%\204\23\25\26\2/12\367\367" \
+ "\367\377\377\377\377\323\377\377\377\1\271\272\272\222\23\25\26\2\27" \
+ "\31\32\34\37!\210\23\25\26\1\243\244\244\377\377\377\377\323\377\377" \
+ "\377\1\211\212\212\234\23\25\26\1EGH\377\377\377\377\323\377\377\377" \
+ "\1^_`\235\23\25\26\1\332\332\332\377\377\377\377\322\377\377\377\1IJ" \
+ "K\235\23\25\26\1\226\227\230\377\377\377\377\322\377\377\377\1<>>\205" \
+ "\23\25\26\3&*,058\27\31\33\213\23\25\26\3BHKmswKPT\207\23\25\26\1UVW" \
+ "\377\377\377\377\322\377\377\377\1.01\205\23\25\26\4\24\27\31EKOZ`c!" \
+ "%(\206\23\25\26\10\27\32\33FKMbgj\\be<@B>ADuz~SX[\206\23\25\26\1*+,\377" \
+ "\377\377\377\322\377\377\377\1!#$\203\23\25\26\6ntw\226\232\236\212\216" \
+ "\222BEGKQTQWZ\205\23\25\26\11""7:=\215\221\224\245\250\253\255\256\262" \
+ "\246\251\254\227\232\236|\201\204\37\"#agk\206\23\25\26\2\24\26\27\363" \
+ "\363\363\377\377\377\377\320\377\377\377\2\376\376\376\25\27\30\202\23" \
+ "\25\26\7glo\276\277\303\357\360\361\355\355\357\305\307\312cgj(-0\204" \
+ "\23\25\26\13\36!\"\241\244\250\332\333\335\351\351\353\355\355\357\346" \
+ "\347\350\327\330\332\274\276\301}\200\204\33\37!\36\40#\206\23\25\26" \
+ "\1\321\322\322\377\377\377\377\321\377\377\377\1\26\30\31\202\23\25\26" \
+ "\2\260\262\266\363\364\365\202\376\376\376\3\374\374\374\335\336\340" \
+ "\36\40!\204\23\25\26\3\213\216\222\357\360\361\376\376\376\202\377\377" \
+ "\377\5\376\376\376\375\375\375\364\365\366\303\305\310,02\207\23\25\26" \
+ "\1\260\261\261\377\377\377\377\321\377\377\377\12\37!\"\23\25\26CGJ\363" \
+ "\363\364\332\332\332\207\210\210\272\273\273\377\377\377\374\374\374" \
+ "\235\240\244\204\23\25\26\12\326\327\331\376\376\376\377\377\377\274" \
+ "\275\275qrrwxy\347\350\350\377\377\377\370\370\370\224\230\233\207\23" \
+ "\25\26\1\237\237\240\377\377\377\377\321\377\377\377\12)*+\23\25\26\206" \
+ "\213\216\375\375\375244\\bew{\177\243\244\244\377\377\377\327\330\333" \
+ "\203\23\25\26\13\35\40!\356\357\357\377\377\377\311\311\312\25\27\30" \
+ "\23\25\26\215\221\225^cg\365\365\365\376\376\376\344\345\346\207\23\25" \
+ "\26\1\255\256\256\377\377\377\377\321\377\377\377\12""134\23\25\26\221" \
+ "\224\230\332\332\332\23\25\26]ae\226\231\235-13\377\377\377\356\357\357" \
+ "\203\23\25\26\4\34\37\40\363\363\364\377\377\377stu\202\23\25\26\6sy" \
+ "|\207\212\216\240\240\241\377\377\377\367\367\370\27\31\32\206\23\25" \
+ "\26\1\275\276\276\377\377\377\377\321\377\377\377\4:<=\23\25\26cfj\322" \
+ "\323\323\202\23\25\26\4\217\222\226NSU\375\375\375\361\361\362\204\23" \
+ "\25\26\3\357\357\360\377\377\377WXY\204\23\25\26\4egg\377\377\377\372" \
+ "\372\373$()\206\23\25\26\1\307\310\310\377\377\377\377\321\377\377\377" \
+ "\12CEF\23\25\26*-/\371\371\371\40\"#\23\25\26""7=>\36\40!\346\331\311" \
+ "\304\216\40\202\342\257\13\5\344\263\10\333\247\20\301\213*\373\373\372" \
+ "abc\204\23\25\26\3qrr\377\377\377\373\373\373\207\23\25\26\1\271\272" \
+ "\272\377\377\377\377\321\377\377\377\1MNO\202\23\25\26\2\366\366\367" \
+ "\204\205\205\202\23\25\26\3\221c(\321\236\15\301\211\36\202\365\306\0" \
+ "\6\324\234\22\246i)\320\227\22\361\301\0\325\241\23\24\25\26\202\23\25" \
+ "\26\4\30\32\33\312\312\313\377\377\377\370\370\371\207\23\25\26\1\244" \
+ "\245\245\377\377\377\377\321\377\377\377\1Z\\\\\202\23\25\26\25\327\331" \
+ "\333\370\370\370ede\260w&\352\270\4\243g)\264{#\365\306\0\365\306\30" \
+ "\363\304\11\255r'\263z%\365\306\0\364\305\0\360\300\1\326\242\22mZD\305" \
+ "\306\306\377\377\377\376\376\376\336\337\341\207\23\25\26\1|}}\377\377" \
+ "\377\377\321\377\377\377\1lmn\202\23\25\26\5$')\346\333\322\274\202%" \
+ "\352\270\4\364\305\0\203\365\306\0\2\365\312+\365\307\35\205\365\306" \
+ "\0\5\364\305\0\363\304\0\357\277\1\335\251\20\333\316\302\210\23\25\26" \
+ "\1OQR\377\377\377\377\321\377\377\377\1}~~\202\23\25\26\4\77,\32\276" \
+ "\205%\351\267\6\364\305\0\203\365\306\0\3\365\306\14\365\312,\365\306" \
+ "\2\203\365\306\0\3\365\306\2\365\310\31\365\310\33\202\365\306\0\3\364" \
+ "\305\0\360\300\1\243q\35\207\23\25\26\2$&'\376\376\376\377\377\377\377" \
+ "\320\377\377\377\6\215\216\217\23\25\26'\40\27\272\200&\345\263\10\364" \
+ "\305\0\204\365\306\0\2\365\310\"\365\311$\203\365\306\0\11\365\306\1" \
+ "\365\311'\365\313,\365\312)\365\307\2\361\302\0\310\227\30\337\254\11" \
+ "\352\270\5\210\23\25\26\1\325\325\326\377\377\377\377\320\377\377\377" \
+ "\5\236\237\237\23\25\26\211X$\320\231\40\361\301\0\205\365\306\0\1\365" \
+ "\310\25\204\365\306\0\11\365\311%\365\312,\365\312*\365\307\15\265\204" \
+ "\31tD*uE*\335\254\11\353\271\3\210\23\25\26\1\225\226\227\377\377\377" \
+ "\377\320\377\377\377\5\256\257\257\23\25\26\227b&\306\222\31\363\304" \
+ "\0\211\365\306\0\12\365\311$\365\312,\365\311&\310\227\20wG*o\77*}M*" \
+ "\351\272\0\364\305\0\337\251\20\210\23\25\26\1UVW\377\377\377\377\320" \
+ "\377\377\377\5\277\277\300\23\25\26[=\36\202Q*\215]*\210\365\306\0\7" \
+ "\365\310\31\365\312)\324\244\23yI*n>*wG*\317\236\15\202\365\306\0\2\361" \
+ "\301\0\253t#\202\23\25\26\3\33\36\37\\be7=@\203\23\25\26\2\30\32\33\352" \
+ "\352\352\377\377\377\377\317\377\377\377\1\317\320\320\202\23\25\26\4" \
+ "\236g)\200O*uD*\310\230\21\205\365\306\0\6\364\305\0\320\237\20|L*n>" \
+ "*sD*\264\203\34\202\365\306\0\4\364\305\0\360\300\0\315\227\32_^[\203" \
+ "\23\25\26\4cimdjn]cg'-/\202\23\25\26\1\230\231\231\377\377\377\377\317" \
+ "\377\377\377\1\334\335\335\202\23\25\26\26x|~\245n+{J*\237m\35tD*zK*" \
+ "\205U)\202R)zK*qB*pA*wG*\262\201\35\362\303\0\365\306\0\364\304\0\357" \
+ "\276\1\333\246\22\265{'\251\243\237\221\224\230\23\26\27\202\23\25\26" \
+ "\1^dh\202eko\1bhl\202\23\25\26\2""9;<\374\374\374\212\377\377\377\1\257" \
+ "\270\306\204Ym\211\1\213\231\254\215\377\377\377\2\267\300\314ex\221" \
+ "\226\377\377\377\2\216\233\256\217\234\257\207\377\377\377\2\226\243" \
+ "\264\207\226\252\217\377\377\377\3\371\371\373Ym\211\312\321\332\204" \
+ "\377\377\377\6\362\363\366Ym\211\324\331\340\354\357\362Ym\211\331\336" \
+ "\344\361\377\377\377\1\312\312\313\202\23\25\26\26\214\220\223\223\225" \
+ "\230\243l,\302\213%\222b\"zJ*xH*zJ*\207W)\260~\40\344\264\4\365\306\0" \
+ "\364\305\0\363\304\0\355\275\2\330\242\26\262y(\303\274\266\324\326\331" \
+ "\321\322\325\271\273\276Y]`\202\23\25\26\5!$'cimekodjnCHL\202\23\25\26" \
+ "\1\252\252\253\212\377\377\377\2\224\240\262#=b\203Ka\177\1\200\217\245" \
+ "\215\377\377\377\2\237\252\2723Km\226\377\377\377\2gy\223j{\225\207\377" \
+ "\377\377\2s\203\233_q\214\217\377\377\377\3\366\367\371\"<a\271\301\315" \
+ "\204\377\377\377\6\355\357\362\"<a\305\314\326\345\350\355\"<a\315\323" \
+ "\333\361\377\377\377\1\242\243\243\202\23\25\26\26\232\234\240\261\263" \
+ "\266\226\232\235\232i4\303\212%\345\262\10\363\304\0\364\305\0\365\306" \
+ "\0\364\305\0\364\304\0\362\302\0\353\272\3\327\240\30\266|'\266\240\213" \
+ "\335\336\340\354\355\357\365\366\366\365\365\365\344\345\350\244\250" \
+ "\253\203\23\25\26\4>DGagk`fj\26\32\34\202\23\25\26\2""567\372\372\372" \
+ "\211\377\377\377\2\224\240\262*Cg\221\377\377\377\2\237\252\2723Km\202" \
+ "\377\377\377\1\363\365\367\207\377\377\377\2\371\372\373\355\357\362" \
+ "\207\377\377\377\1\365\366\370\202\377\377\377\2gy\223j{\225\204\377" \
+ "\377\377\1\365\366\370\202\377\377\377\2s\203\233_q\214\204\377\377\377" \
+ "\2\360\362\364\367\370\371\207\377\377\377\5\364\366\367\377\377\377" \
+ "\366\367\371\"<a\271\301\315\204\377\377\377\6\355\357\362\"<a\305\314" \
+ "\326\376\376\376\356\360\363\373\374\374\361\377\377\377\1QSS\202\23" \
+ "\25\26\22\246\250\254\315\316\321\267\270\274\222\225\231\217lF\274\203" \
+ "&\333\246\23\346\262\7\351\267\5\347\263\7\336\250\21\320\230\37\270" \
+ "\177'\251\200\\\317\320\323\347\350\351\370\370\371\376\376\376\202\377" \
+ "\377\377\3\375\375\375\340\341\343CGJ\211\23\25\26\1\242\243\243\211" \
+ "\377\377\377\2\224\240\262*Cg\205\377\377\377\23\216\234\257\200\217" \
+ "\244o\200\230-FiUi\206\345\350\354\266\277\313F\\{0Hkz\212\240\371\372" \
+ "\373\377\377\377\237\252\2723Km\301\310\323@Ww\"<a9Pr\241\254\274\203" \
+ "\377\377\377\6\365\366\370m\177\227)Bf\"<aMb\200\325\332\341\203\377" \
+ "\377\377\7\310\316\330F\\{#=b3Km\231\245\266fx\222j{\225\202\377\377" \
+ "\377\7\316\324\334J_}#=b2Jm\220\235\260q\202\231_q\214\202\377\377\377" \
+ "\6\322\330\337F\\{#=b%\77cw\207\236\366\367\371\202\377\377\377\10\376" \
+ "\376\376\216\234\2573Km#=bJ_}\310\316\330\"<a\271\301\315\204\377\377" \
+ "\377\21\355\357\362\"<a\305\314\326\351\354\357=Tu\323\330\340\342\345" \
+ "\352=Tu\255\267\304E[z,Eh_r\215\346\351\355\377\377\377\347\352\356=" \
+ "Tu\322\330\337\202\377\377\377\12\345\350\355=Tu\327\333\342\224\240" \
+ "\262Mb\200\371\371\373\377\377\377\301\310\323=Tu\323\330\340\331\377" \
+ "\377\377\2\301\301\302\24\26\27\202\23\25\26\20\271\273\276\352\353\355" \
+ "\332\333\335\260\262\265\221\224\230\203sb\243l,\254q+\262x*\261w*\247" \
+ "o,\243}Z\273\273\276\324\325\330\353\354\355\373\373\374\205\377\377" \
+ "\377\2\374\374\374\277\301\303\211\23\25\26\2/12\367\367\367\210\377" \
+ "\377\377\2\224\240\262*Cg\205\377\377\377\24\177\216\243$>cRg\204\223" \
+ "\240\262>UuH^|,Eh\203\222\247\200\217\244#=b\223\240\262\377\377\377" \
+ "\237\252\272$>c#=b_q\214\216\234\257Sg\204\"<a\235\251\271\202\377\377" \
+ "\377!Vj\206*Cg\204\222\247\225\242\264\77Vv/Gj\344\347\354\377\377\377" \
+ "\316\324\334&@d\77Vv\213\231\254u\205\235$>c'@ej{\225\377\377\377\327" \
+ "\333\342)Bf;Rs\210\226\252z\211\240&@d'@e_q\214\377\377\377\333\337\345" \
+ "*CgE[z\227\243\265\200\217\245(Aeat\216\202\377\377\377\10\204\222\247" \
+ "\"<a_r\215\216\234\257Sg\204'@e\"<a\271\301\315\204\377\377\377\21\355" \
+ "\357\362\"<a\305\314\326\345\350\355\"<a\315\323\333\336\342\347\"<a" \
+ "#=bfx\222{\213\241*CgTh\205\377\377\377\344\347\354\"<a\313\321\332\202" \
+ "\377\377\377\11\342\345\352\"<a\321\327\337\352\354\360*Cg\236\252\272" \
+ "\376\376\376Ka\177ew\221\331\377\377\377\2\367\367\367689\203\23\25\26" \
+ "\17\345\345\347\375\375\375\367\370\370\321\322\325\256\260\263\223\226" \
+ "\232\207\212\216\207\213\217\216\221\225\233\236\242\256\260\263\303" \
+ "\305\310\332\333\336\360\360\361\375\375\375\207\377\377\377\2\367\367" \
+ "\370JOP\211\23\25\26\1{||\210\377\377\377\2\224\240\262$>c\203k|\225" \
+ "\11\227\243\265\377\377\377\177\216\243)Cf\362\364\366\377\377\377\307" \
+ "\316\327\"<au\205\235\202\377\377\377\6u\205\235DZz\377\377\377\237\252" \
+ "\272\"<az\211\240\202\377\377\377\7\375\375\376hz\2230Hk\362\363\366" \
+ "\266\277\313\"<a\304\313\325\202\377\377\377\7\354\357\3625Mo}\214\242" \
+ "\377\377\377Xk\207AWw\362\363\366\202\377\377\377\7\257\270\306\"<aj" \
+ "{\225\377\377\377cu\220:Qr\355\357\362\202\377\377\377\7\272\302\316" \
+ "\"<a_q\214\377\377\377gy\223@Ww\364\366\367\202\377\377\377\6\260\272" \
+ "\307\"<a\314\322\333\342\345\352&@d\202\221\246\202\377\377\377\4\374" \
+ "\374\375cu\220\"<a\271\301\315\204\377\377\377\11\355\357\362\"<a\305" \
+ "\314\326\345\350\355\"<a\315\323\333\336\342\347\"<as\203\233\202\377" \
+ "\377\377\6\254\266\304\"<a\336\342\350\344\347\354\"<a\313\321\332\202" \
+ "\377\377\377\11\342\345\352\"<a\321\327\337\377\377\377\212\230\2546" \
+ "Mo\251\263\302'@e\336\342\350\331\377\377\377\1\210\211\211\203\23\25" \
+ "\26\17\244\245\251\374\374\374\377\377\377\376\376\376\357\360\361\311" \
+ "\312\316\256\260\263\240\243\246\241\244\247\250\253\256\266\270\273" \
+ "\311\312\316\337\340\342\364\364\365\375\375\376\210\377\377\377\2\376" \
+ "\376\376\331\332\334\211\23\25\26\2\24\26\27\274\276\274\207\372\374" \
+ "\371\2\221\237\257\"<a\203@Wv\4x\210\235\372\374\371}\215\241Pe\202\202" \
+ "\372\374\371\3\364\366\365\"<a\237\253\271\202\372\374\371\6\240\254" \
+ "\272)Cf\372\374\371\234\251\267\"<a\350\354\354\203\372\374\371\5\325" \
+ "\333\337\"<a\301\311\321w\207\235;Ss\204\301\310\323\5bu\217=Tt\371\371" \
+ "\373$>c\246\260\277\204\377\377\377\5F\\{j{\225\376\376\376*Cg\233\246" \
+ "\267\204\377\377\377\5Qe\202_q\214\377\377\377+Dht\205\234\203\301\310" \
+ "\323\6\277\307\321+Dh\214\231\255\254\266\304#=b\362\364\366\202\377" \
+ "\377\377\4\376\374\374\323\326\335\"<a\270\276\312\204\375\372\372\11" \
+ "\353\353\356\"<a\304\310\322\344\344\350\"<a\313\317\330\334\335\343" \
+ "\"<a\265\274\310\202\375\372\372\6\345\346\352\"<a\301\306\320\342\343" \
+ "\347\"<a\312\316\326\202\375\372\372\10\340\341\346\"<a\320\323\333\375" \
+ "\372\372\357\356\3600Hk%\77c\202\220\244\203\375\372\372\1\375\373\373" \
+ "\325\377\377\377\2\312\312\313\30\32\33\202\23\25\26\2\40\"$\362\363" \
+ "\364\203\377\377\377\12\375\375\375\346\347\351\310\312\315\272\273\277" \
+ "\273\274\300\302\304\307\321\322\325\345\346\347\367\367\370\376\376" \
+ "\376\212\377\377\377\2\371\372\3729>@\211\23\25\26\2+-.\346\350\343\206" \
+ "\366\370\363\2\217\235\254*Cg\205\366\370\363\2{\213\236^q\212\203\366" \
+ "\370\363\2)Bf\251\264\276\202\366\370\363\5\246\261\274%\77c\366\370" \
+ "\363\232\246\2642Kl\204\366\370\363\4\361\363\357\"<a\244\257\273[o\211" \
+ "\206\"<a\4'@e\336\342\350\"<a\305\314\326\204\377\377\377\202j{\225\3" \
+ "\353\355\361\"<a\272\302\316\204\377\377\377\3u\205\235_q\214\355\357" \
+ "\362\207\"<a\3t\205\234\221\236\2616Mo\203\377\377\377\4\374\367\367" \
+ "\363\355\356\"<a\265\270\304\204\371\362\362\11\350\343\346\"<a\301\302" \
+ "\314\340\335\341\"<a\310\311\321\330\327\334\"<a\306\307\320\202\371" \
+ "\362\362\6\360\353\354\"<a\262\266\302\336\334\340\"<a\307\307\320\202" \
+ "\371\362\362\3\331\327\335\"<a\315\314\324\202\371\362\362\3hw\220\"" \
+ "<a\307\307\320\203\371\362\362\1\373\365\365\324\377\377\377\2\356\356" \
+ "\356/12\203\23\25\26\2\322\323\325\376\376\376\204\377\377\377\10\373" \
+ "\373\373\343\344\346\324\325\330\326\327\332\336\337\341\353\354\355" \
+ "\372\372\373\376\376\376\213\377\377\377\2\376\376\376\311\312\315\212" \
+ "\23\25\26\1\\_]\206\361\365\354\2\214\233\251*Cf\205\361\365\354\2y\212" \
+ "\233^r\211\203\361\365\354\2+Dg\246\262\272\202\361\365\354\6\242\257" \
+ "\267%\77c\361\365\354\227\245\260#=b\350\355\346\203\361\365\354\5\322" \
+ "\332\330\"<a\270\302\306s\205\230G]{\206\335\341\347\3\366\367\371#=" \
+ "b\250\263\301\204\377\377\377\5Qe\202j{\225\375\375\376(Ae\235\251\271" \
+ "\204\377\377\377\5\\o\213_q\214\376\376\376+Dh\213\231\254\205\335\341" \
+ "\347\4\351\354\357\251\263\302#=b\365\366\370\202\377\377\377\4\372\364" \
+ "\364\330\323\330\"<a\264\264\300\204\367\354\354\11\346\336\341\"<a\277" \
+ "\276\310\336\330\334\"<a\307\304\315\327\321\327\"<a\313\310\317\202" \
+ "\367\354\354\6\357\345\347\"<a\261\262\276\344\334\340\"<a\270\270\303" \
+ "\202\367\354\354\10\315\311\321\"<a\313\310\317\367\354\354\325\320\326" \
+ "%\77c0Hjcr\214\203\367\354\354\1\371\360\360\323\377\377\377\2\376\376" \
+ "\376[]]\203\23\25\26\2\200\204\207\371\372\372\206\377\377\377\5\371" \
+ "\372\372\356\357\360\357\357\360\367\367\367\375\375\375\216\377\377" \
+ "\377\1\364\364\365\213\23\25\26\1\233\237\231\205\354\362\347\2\212\232" \
+ "\246*Cf\205\354\362\347\2w\210\231\\q\210\203\354\362\347\2*Dg\243\261" \
+ "\267\202\354\362\347\6\237\255\264%\77c\354\362\347\224\243\255\"<a\205" \
+ "\225\243\203\354\362\347\6p\203\225*Cf\334\343\334\244\261\267$>c\317" \
+ "\325\335\202\377\377\377\7\351\354\357Th\205\226\243\264\377\377\377" \
+ "Od\201I^}\371\371\373\202\377\377\377\7\305\314\326\"<aj{\225\377\377" \
+ "\377Zn\211@Ww\366\367\371\202\377\377\377\7\320\325\335#=b_q\214\377" \
+ "\377\377at\216H^|\371\372\373\202\377\377\377\6\260\272\307Ka\177\326" \
+ "\333\342\334\340\346#=b\221\236\261\202\377\377\377\4\371\357\357s}\224" \
+ "\"<a\262\260\273\204\365\345\345\11\344\327\332\"<a\276\271\303\335\321" \
+ "\326\"<a\305\277\307\325\313\321\"<a\311\302\312\202\365\345\345\6\355" \
+ "\337\340\"<a\260\256\272\365\345\345(Ae\210\216\241\202\365\345\345\11" \
+ "\217\224\245\"<a\311\302\312\365\345\345bo\211Qb\177\264\261\274\"<a" \
+ "\311\301\311\202\365\345\345\1\367\352\352\323\377\377\377\1\227\230" \
+ "\231\203\23\25\26\3\26\30\31\344\345\347\376\376\376\207\377\377\377" \
+ "\202\376\376\376\220\377\377\377\2\375\375\375nqt\212\23\25\26\2\37!" \
+ "!\312\322\305\204\346\357\340\2\207\230\242%\77c\203l\177\221\4\220\241" \
+ "\250\346\357\340t\207\226[p\206\203\346\357\340\2*Cf\237\257\262\202" \
+ "\346\357\340\4\234\253\260%\77c\346\357\340\221\241\251\202\"<a(o\202" \
+ "\223\233\252\257dx\214\"<a\204\226\241\346\357\340\345\356\337I_{/Gj" \
+ "\217\234\257\226\243\264BXx,Eh\336\342\350\377\377\377\306\315\326#=" \
+ "bPd\202\245\260\277\222\237\261+Dh#=bj{\225\377\377\377\320\325\335$" \
+ ">cK`~\244\257\276\224\241\263/Gj#=b_q\214\377\377\377\325\332\341%\77" \
+ "cNc\201\241\254\274\200\217\244)BfYm\211\202\377\377\377\5y\211\237#" \
+ "=by\211\237\251\263\302jw\220\202\"<a\1\261\253\267\204\364\337\337\11" \
+ "\343\322\325\"<a\275\264\276\334\314\320\"<a\305\272\303\324\306\314" \
+ "\"<a\311\275\305\202\364\337\337\21\354\331\332\"<a\257\251\266\364\337" \
+ "\337ku\215)Be\217\220\242\204\210\234'@d\"<a\311\275\305\300\266\300" \
+ "\"<a\302\270\301\364\337\337N^|[h\203\202\364\337\337\1\367\345\345\322" \
+ "\377\377\377\2\316\316\316\31\33\34\203\23\25\26\2z\177\202\371\371\372" \
+ "\233\377\377\377\1\343\344\345\213\23\25\26\2CGD\335\350\326\203\340" \
+ "\353\331\1\204\226\237\204\"<a\4Zp\205\340\353\331r\205\223Yo\204\203" \
+ "\340\353\331\2*Cf\234\254\256\202\340\353\331\12\230\251\254%>c\340\353" \
+ "\331\215\237\245.Gh\230\251\254+Dg\"<a*Cf\203\225\236\203\340\353\331" \
+ "\2\334\344\336Xl\210\202\"<a\2;Rs\304\313\325\203\377\377\377\7\275\304" \
+ "\3207Np\"<a&@d\201\220\245at\216j{\225\202\377\377\377\7\303\313\325" \
+ ":Qr\"<a$>cy\211\237j{\225_q\214\202\377\377\377\2\303\312\3244Ln\202" \
+ "\"<a\2`s\216\357\361\364\202\377\377\377\10\372\373\374\200\217\245(" \
+ "Ae\"<a3Ik\255\243\260\"<a\261\247\262\204\364\330\330\11\343\313\317" \
+ "\"<a\275\257\271\334\306\312\"<a\305\265\275\324\300\306\"<a\311\270" \
+ "\300\202\364\330\330\15\354\322\324\"<a\257\245\261\364\330\330\336\310" \
+ "\314KZx\"<a%>c\211\211\233\"<a\307\267\277L[ybl\205\202\364\330\330\5" \
+ "\273\256\270\"<a\300\261\272\364\330\330\367\340\340\321\377\377\377" \
+ "\2\360\360\360244\204\23\25\26\2\246\250\254\374\374\374\233\377\377" \
+ "\377\2\371\371\371\27\31\32\213\23\25\26\1{\203x\231\332\350\323\3\327" \
+ "\345\321\277\317\302\327\345\321\204\332\350\323\5\351\362\345\377\377" \
+ "\377\353\356\361\333\337\345\373\374\374\206\377\377\377\2\343\346\353" \
+ "\366\367\371\207\377\377\377\2\345\350\354\364\366\367\206\377\377\377" \
+ "\3\376\376\376\333\337\345\346\351\355\206\377\377\377\3\371\372\373" \
+ "\340\344\351\370\342\342\230\364\322\322\2\333\300\305\351\312\314\213" \
+ "\364\322\322\1\367\333\333\321\377\377\377\1`ab\204\23\25\26\3""8;=\262" \
+ "\264\267\372\372\372\224\377\377\377\11\376\376\376\373\374\374\367\370" \
+ "\371\361\362\363\354\354\355\355\356\357\374\374\374\376\376\376\253" \
+ "\255\260\213\23\25\26\2\27\31\32\257\275\252\237\324\346\316\1\346\360" \
+ "\342\246\377\377\377\1\371\340\340\245\364\314\314\1\367\326\326\320" \
+ "\377\377\377\1\254\254\255\205\23\25\26\4_eh\234\237\242\345\346\347" \
+ "\376\376\376\205\377\377\377\6\345\345\346\330\331\332\370\370\370\356" \
+ "\357\360\333\334\335\361\362\363\205\377\377\377\14\374\374\374\360\361" \
+ "\362\342\343\346\323\324\327\307\310\313\276\300\303\271\272\276\263" \
+ "\265\270\264\265\271\320\322\325\374\374\374\360\360\361\214\23\25\26" \
+ "\2:@;\313\340\305\236\316\343\310\1\342\357\336\246\377\377\377\1\370" \
+ "\334\334\245\363\307\307\1\366\322\322\317\377\377\377\2\371\371\371" \
+ "345\204\23\25\26\6\23\26\27ouy\220\223\227\266\267\273\346\347\350\374" \
+ "\374\374\204\377\377\377\6\362\362\362\304\305\311\277\300\304\301\302" \
+ "\306\316\317\323\372\372\372\204\377\377\377\7\375\375\375\354\354\356" \
+ "\325\326\331\277\300\304\250\252\255\234\237\243\231\234\240\203\230" \
+ "\233\237\4\236\240\244\314\315\320\373\373\374;=@\214\23\25\26\1z\211" \
+ "x\225\307\340\302\2\247\301\260\277\330\275\207\307\340\302\1\336\355" \
+ "\333\202\377\377\377\2\324\331\340\374\374\375\211\377\377\377\1\321" \
+ "\326\336\211\377\377\377\2\346\351\355\352\354\360\203\377\377\377\2" \
+ "\326\333\342\373\374\374\205\377\377\377\4\364\366\367\334\340\346\377" \
+ "\377\377\370\331\331\222\363\302\302\3\314\251\260\357\277\300\307\246" \
+ "\256\214\363\302\302\5\317\253\261\353\275\276\326\257\265\345\271\273" \
+ "\366\316\316\317\377\377\377\1\231\232\232\205\23\25\26\7),.}\201\205" \
+ "\235\237\243\274\276\301\330\331\333\361\362\363\376\376\376\204\377" \
+ "\377\377\3\365\365\365\315\317\322\361\361\361\207\377\377\377\10\374" \
+ "\374\374\356\357\361\331\332\334\302\304\307\257\261\265\242\245\251" \
+ "\234\237\242\231\234\240\202\230\233\237\3\235\240\244\337\341\342\337" \
+ "\340\343\202\23\25\26\2""179069\210\23\25\26\2\35\40\37\257\310\254\223" \
+ "\302\336\276\3\231\264\246:Uo\264\320\266\207\302\336\276\1\333\354\330" \
+ "\202\377\377\377\2fx\222\365\366\370\210\377\377\377\2\375\375\376DZ" \
+ "z\211\377\377\377\2\233\247\270\247\261\300\203\377\377\377\2l~\226\357" \
+ "\361\364\205\377\377\377\4\321\327\337r\202\232\377\377\377\367\326\325" \
+ "\222\362\274\273\3U[w\337\260\263X]x\214\362\274\273\5bc}\323\251\255" \
+ "\215~\217\276\234\245\365\311\310\316\377\377\377\2\363\363\363(**\205" \
+ "\23\25\26\6nrv\254\256\261\340\341\342\366\367\367\375\375\375\376\376" \
+ "\376\222\377\377\377\13\374\374\374\360\361\363\336\340\342\314\315\321" \
+ "\270\272\275\245\250\254\232\235\241\230\233\237\241\243\246\362\362" \
+ "\363\77BD\202\23\25\26\3FLOHNR\40%(\207\23\25\26\1JVK\223\274\334\270" \
+ "\13NjzPl{\261\320\262\253\312\256g\204\210l\211\213\261\320\262\274\334" \
+ "\270\200\236\226\210\246\233\321\344\321\202\377\377\377%\253\265\303" \
+ "\371\372\373\250\262\301\271\301\315\220\235\260\344\347\354\377\377" \
+ "\377\376\376\376\250\262\301\203\222\247\315\323\333DZz\353\355\361\270" \
+ "\301\314\377\377\377\371\372\373\253\265\303\377\377\377\257\271\306" \
+ "\224\240\262\354\357\362`s\216fx\222\327\334\343\272\302\316\275\305" \
+ "\320\256\267\305\366\367\371\375\375\376\243\256\276\203\222\247\316" \
+ "\324\334\251\263\302\321\327\337r\202\232\377\377\377\366\321\321\202" \
+ "\360\265\265\30\242\207\225|q\206\301\231\242\232\202\222\341\254\257" \
+ "\251\213\230\250\213\230\202t\210\303\233\243\360\265\265\301\232\242" \
+ "\275\227\240\216|\215\213z\214\337\253\256\360\265\265UZv\335\252\255" \
+ "\234\204\223\360\265\265\352\261\263\221}\216xo\204\312\236\245\202\360" \
+ "\265\265\26\260\220\233{p\205\262\221\234\234\204\223\312\236\245BOn" \
+ "\215{\215\270\224\236\323\244\251\363\303\303\264\275\311{\213\241\271" \
+ "\301\315\377\377\377\333\337\345\277\307\321\224\241\263\250\263\301" \
+ "\376\376\376\377\377\377\243\256\276\234\250\271\302\377\377\377\1\213" \
+ "\214\215\203\23\25\26\6\24\26\27\23\25\26\24\26\27\254\256\262\357\357" \
+ "\360\375\375\375\230\377\377\377\10\374\374\374\360\361\363\333\333\335" \
+ "\270\271\275\234\237\242\230\233\237\256\261\264\334\335\336\203\23\25" \
+ "\26\3;ADGNQ'-0\207\23\25\26\1\214\247\212\222\266\332\262\13Us}Xv\177" \
+ "\246\312\2528Smq\220\214j\211\210>Zq\264\330\2617SmFcu\317\344\316\202" \
+ "\377\377\377XQe\202\363\365\3675Mon\177\230\221\236\261DZz\376\376\376" \
+ "\205\223\250at\216\247\261\300Mb\200DZz\325\332\341l~\226\377\377\377" \
+ "\362\364\366Qe\202\342\345\352Ym\211z\211\240\267\300\314hz\223o\200" \
+ "\230\266\276\313-Fi\252\264\303Xk\207\354\357\362|\214\242fx\222\246" \
+ "\260\277H^|Nc\201\321\327\337r\202\232\377\377\377\366\316\315\360\260" \
+ "\257\206t\207Y[v\236\202\220MTq;Jj\321\236\243&>chc|\232\200\217<Kk\277" \
+ "\224\234\220z\213,Be\213w\211\205t\207@Mm\350\254\254UYt\335\245\250" \
+ "BNm\360\260\257^^xzn\202\221z\213>Ll\343\251\252\244\205\222IRp\236\202" \
+ "\220Z\\v&>b\313\233\241FPo\226}\215}o\204\265\217\231\237\212\231Xk\207" \
+ "\251\263\302Rg\204\256\267\305\264\275\311/Gj\233\246\267[n\212\236\252" \
+ "\272\316\324\334hz\223l~\226\326\333\342\300\377\377\377\2\373\373\373" \
+ ",./\202\23\25\26\6)/1\30\32\34\23\25\26tx|\352\353\355\376\376\376\233" \
+ "\377\377\377\7\375\375\375\356\356\357\303\304\307\236\241\244\233\236" \
+ "\242\333\335\337245\203\23\25\26\3+0339<\32\35\37\206\23\25\26\1<H=\222" \
+ "\260\330\254\4r\224\213u\230\215{\236\220b\202\203\202\260\330\254\5" \
+ "Ut|\212\256\2306Rl\242\311\245\320\350\316\202\377\377\3773Qe\202\363" \
+ "\365\3672Jm\350\353\357\377\377\377E[z\347\352\356:Qr\370\371\372\377" \
+ "\377\377\333\337\345DZz\325\332\341l~\226\377\377\377\362\364\366Qe\202" \
+ "\332\336\345DZy\322\330\337\377\377\377\233\247\270\247\261\300\275\304" \
+ "\320n\177\230\377\377\377Xk\207\345\350\355<St\372\373\374\377\377\377" \
+ "\322\330\337Nc\201\321\327\337r\202\232\377\377\377\365\312\312\357\252" \
+ "\251:Ii\346\245\246\357\252\251\326\234\240;Ij\320\231\236BMl\356\251" \
+ "\251\357\252\251\265\213\225haz\217w\207\200n\202\202\357\252\251\7u" \
+ "h~\250\204\220TWs\334\240\242BMl\317\231\236BMl\202\357\252\251\31\305" \
+ "\224\232\325\234\240LSp\322\233\237\357\252\251\347\245\246/Ce\353\250" \
+ "\247a^w\320\231\236}m\201\265\213\224DQo\355\357\362\377\377\377\345" \
+ "\350\355Nc\201\264\275\311fx\222\377\377\377\307\316\327gy\223\307\316" \
+ "\327Nc\201\334\340\346\301\377\377\377\1\267\267\270\202\23\25\26\2$" \
+ ")+069\202\23\25\26\2\325\327\331\375\375\375\236\377\377\377\5\371\371" \
+ "\371\313\314\317\247\251\255\271\273\276\324\325\330\204\23\25\26\2\33" \
+ "\40\"\34\37!\207\23\25\26\1\211\253\210\221\253\326\250\4o\222\211s\227" \
+ "\213n\221\210p\224\211\202\253\326\250\5b\204\202|\242\2206Rk\253\326" \
+ "\250\315\347\313\202\377\377\377\3Qe\202\363\365\367=Tu\202\377\377\377" \
+ "\3at\216\324\331\340E[z\202\377\377\377\23\371\371\373E[z\326\333\342" \
+ "ew\221\377\377\377\356\360\363Qe\202\377\377\377\272\302\316DZz\312\320" \
+ "\331\233\247\270\247\261\300\275\304\320\205\223\250\377\377\377Xk\207" \
+ "\331\336\344Nc\201\202\377\377\377\10\361\362\365Nc\201\321\327\337r" \
+ "\202\232\377\377\377\365\307\307\353\243\243=Jj\202\357\245\244\4\355" \
+ "\244\243\77Kj\320\225\232ZYs\202\357\245\244\4\321\225\232XWs\217t\205" \
+ "\233z\210\202\357\245\244\7\220t\205\227x\207TVq\334\233\236BLk\300\215" \
+ "\225iax\204\357\245\244\2\77Kj\352\242\242\202\357\245\244\7ALk\353\243" \
+ "\243a\\u\320\225\232}j\177\265\207\221;Kk\202\377\377\377\13\374\374" \
+ "\375AWw\264\275\311\210\226\252\377\377\377\343\346\353^q\214\377\377" \
+ "\377\255\267\304@Ww\332\336\345\300\377\377\377\10Y[\\\23\25\26\25\27" \
+ "\30""39<%)+\23\25\26\205\211\214\373\373\373\240\377\377\377\13\373\373" \
+ "\373\327\330\333\311\312\315\353\353\355\23\26\27\23\25\26\40$%*/1\"" \
+ "')\23\25\26\34\37!\206\23\25\26\1\77N@\221\246\324\242\13l\221\205p\225" \
+ "\207\212\264\224\77^o\241\316\240\235\312\2368Ul\227\302\2325Rj\246\324" \
+ "\242\312\346\307\202\377\377\377\3Qe\202\363\365\367BXx\202\377\377\377" \
+ "Sat\216\337\343\350Ka\177\310\316\330\377\377\377\240\253\273DZz\355" \
+ "\357\362:Qr\372\373\374\271\301\315Qe\202\275\305\320\267\300\314\256" \
+ "\267\305\234\250\271\233\247\270\247\261\300\275\304\320\205\223\250" \
+ "\377\377\377Xk\207\354\357\362DZz\317\325\335\377\377\377\226\243\264" \
+ "Nc\201\321\327\337r\202\232\377\377\377\365\303\303\356\237\236ORo\264" \
+ "\203\215\356\237\236\236x\206;Hh\317\220\225)\77c\315\217\224\356\237" \
+ "\236~i|\205l\177\217q\202ORn\347\234\234\344\232\233HNl\305\213\222T" \
+ "Tp\333\226\230BKj\343\232\233>Ii\330\224\227\353\236\235e\\u\307\214" \
+ "\222l`w\227u\204\356\237\236\271\205\216\"<a\352\235\235`Zt\317\220\225" \
+ "|h|\264\203\215daz\263\274\311\377\377\377\251\263\302u\205\235\264\275" \
+ "\311\216\233\256\377\377\377\343\346\353^q\214\255\267\304\310\316\330" \
+ "\231\245\266\261\272\310\277\377\377\377\10\345\345\345\26\30\31\23\25" \
+ "\26'-.4:=\23\25\26\23\26\27\356\357\360\242\377\377\377\13\375\375\375" \
+ "\355\356\357\354\354\356\255\257\262\23\25\26(-/-24+02\25\30\31""28;" \
+ "\40$&\205\23\25\26\2\24\26\27\206\256\203\220\241\322\235\13i\220\203" \
+ "m\224\204\241\322\235`\205~,Hf+Gem\225\205\241\322\2354Rj\241\322\235" \
+ "\307\344\304\202\377\377\377\3Qe\202\363\365\367BXx\202\377\377\377\3" \
+ "at\216\337\343\350\323\330\340\202>Uu\5at\216DZz\377\377\377|\214\242" \
+ "3Km\202Qe\202G\351\354\3578Pq<St\340\344\351\233\247\270\247\261\300" \
+ "\275\304\320\205\223\250\377\377\377Xk\207\354\357\362\315\323\333;R" \
+ "s=Tuat\216Nc\201\321\327\337r\202\232\377\377\377\364\300\300\355\232" \
+ "\231\311\211\217>Ii<HhZVq=Hh\316\214\221BKj@Ji:GgSSo\341\225\226\216" \
+ "n\177VTo7Fg1Ce\205j|\355\232\231TSo\332\221\224BKj\355\232\231\252{\207" \
+ "2Ce0Besaw\355\232\231\331\220\223JOl;HhLOm6Ef\351\230\230`Yr\316\214" \
+ "\221|fz\263\177\211\326\236\242E[z;RsLa\177\352\354\360\264\275\311\216" \
+ "\233\256\377\377\377\343\346\353^q\214\332\336\3457Np=Tu\357\361\364" \
+ "\277\377\377\377\10\217\220\220\23\25\26\25\27\30""3:<+14\23\25\26\241" \
+ "\243\246\375\375\375\244\377\377\377\11\376\376\376\361\361\362\23\25" \
+ "\26'*,,13).0\23\25\26:ADEKO\206\23\25\26\1BVB\224\235\320\227\2\226\310" \
+ "\224\230\312\225\204\235\320\227\1\304\343\301\213\377\377\377\1\361" \
+ "\362\365\204\377\377\377\1\361\362\365\203\377\377\377\202\365\366\370" \
+ "\211\377\377\377\2\376\376\376\362\363\366\205\377\377\377\1\364\275" \
+ "\274\203\354\225\223\1\337\217\220\202\354\225\223\4\315\207\213_Wp\353" \
+ "\224\223\334\216\217\202\354\225\223\4\216k|\236r\200\345\222\221\342" \
+ "\221\221\207\354\225\223\2\347\223\222\334\216\217\204\354\225\223\1" \
+ "\336\217\220\207\354\225\223\3\360\251\247\377\377\377\352\354\360\210" \
+ "\377\377\377\2\362\364\366\370\371\372\300\377\377\377\7""8:;\23\25\26" \
+ "\"&(4;=\23\25\26\24\26\27\357\357\357\246\377\377\377\1\371\371\372\202" \
+ "\23\25\26\1\34\40!\203\23\25\26\2KQT\23\25\27\205\23\25\26\2\27\33\32" \
+ "\221\303\214\231\231\316\223\1\302\342\276\246\377\377\377\1\363\272" \
+ "\270\206\353\220\215\2\323\206\210}bu\204\353\220\215\2\242q}\256w\200" \
+ "\227\353\220\215\1\357\245\243\271\377\377\377\3\340\341\341\353\353" \
+ "\353\374\374\374\205\377\377\377\3\364\364\364\350\351\351\373\373\373" \
+ "\207\377\377\377\1\314\314\314\202\23\25\26\5,2527:\23\25\26\201\205" \
+ "\210\373\373\373\246\377\377\377\2\375\375\375)+,\205\23\25\26\2JPT-" \
+ "25\206\23\25\26\1f\212c\231\225\314\216\1\300\341\273\246\377\377\377" \
+ "\1\362\267\265\245\352\213\210\1\356\241\237\270\377\377\377\6Z\\`02" \
+ "5-/28;>npr\360\360\360\202\377\377\377\5ORT>AF8;\77""024\353\353\354" \
+ "\206\377\377\377\10qss\23\25\26\27\32\33+13\32\36\40\23\25\26\332\333" \
+ "\335\376\376\376\246\377\377\377\2\376\376\376\303\306\310\205\23\25" \
+ "\26\2GNQ7>A\206\23\25\26\1""9L9\231\220\312\211\1\275\340\270\246\377" \
+ "\377\377\1\362\263\262\245\351\205\203\1\356\234\232\266\377\377\377" \
+ "\17\256\257\2617:\77VZe\207\210\212\276\277\300>@D\203\213\237jmr\347" \
+ "\347\347;=Amu\210HKO\203\205\211\224\225\227RTU\205\377\377\377\10\347" \
+ "\350\350\33\35\36\23\25\26\33\35\37#&(\23\25\26\26\30\31\365\366\366" \
+ "\215\377\377\377\1\372\372\372\232\377\377\377\1\354\355\356\205\23\25" \
+ "\26\2:AD4:=\206\23\25\26\2\26\32\31\205\276~\230\215\311\205\1\273\337" \
+ "\266\246\377\377\377\1\362\260\256\245\351\200}\1\356\230\226\265\377" \
+ "\377\377\4\267\267\270lp{QVd\300\301\303\203\377\377\377\7<\77B\203\214" \
+ "\244.15\233\245\303)+-\277\277\300\343\343\343\207\377\377\377\1}~~\202" \
+ "\23\25\26\202\26\31\32\3\23\25\26egk\373\373\374\214\377\377\377\2\371" \
+ "\371\371\325\326\331\232\377\377\377\1\363\363\364\205\23\25\26\2).1" \
+ "*02\207\23\25\26\1]\205X\230\211\307\177\1\270\336\262\246\377\377\377" \
+ "\1\361\254\252\245\350zw\1\355\223\221\265\377\377\377\4TVY\215\227\262" \
+ ";>C\374\374\374\203\377\377\377\7\201\202\204MR``fx;>C\266\267\267\33" \
+ "\35\37\345\346\351\206\377\377\377\5\354\354\354\36\40!\23\25\26\24\26" \
+ "\30\32\35\36\202\23\25\26\2\302\303\306\376\376\376\214\377\377\377\2" \
+ "\340\341\344\257\261\265\232\377\377\377\1\366\366\367\205\23\25\26\2" \
+ "\34\37!\40#%\207\23\25\26\1:R8\230\204\305z\1\265\335\257\246\377\377" \
+ "\377\1\360\250\247\245\347tq\1\354\216\214\237\377\377\377\2\345\345" \
+ "\344\357\356\356\213\377\377\377\2\327\326\325\316\314\314\207\377\377" \
+ "\377\3=\77C\222\233\267HJO\204\377\377\377\10\307\310\31003:ho\202MP" \
+ "T\377\377\377~\200\203036\374\374\374\205\377\377\377\1\202\203\204\202" \
+ "\23\25\26\2\33\36\40""5<>\202\23\25\26\1\355\355\356\215\377\377\377" \
+ "\2\304\306\311\241\244\247\232\377\377\377\1\370\371\371\206\23\25\26" \
+ "\1\25\27\31\207\23\25\26\1#.$\230\200\303v\1\263\333\255\246\377\377" \
+ "\377\1\360\246\244\245\346pm\1\353\213\211\236\377\377\377\3\334\334" \
+ "\333742\354\354\353\213\377\377\377\2FB@.*'\206\377\377\377\4\373\373" \
+ "\373\77AE\217\230\264MOS\204\377\377\377\10\316\316\316.17ho\202OQU\377" \
+ "\377\377\204\206\2108;@\347\347\347\204\377\377\377\2\345\345\345\34" \
+ "\36\37\202\23\25\26\2#'*ELO\202\23\25\26\1\365\366\367\215\377\377\377" \
+ "\2\254\257\263\237\242\246\232\377\377\377\1\372\372\373\205\23\25\26" \
+ "\2$)+\30\33\34\207\23\25\26\2\23\26\26v\267m\227|\301s\1\261\332\253" \
+ "\246\377\377\377\1\357\242\240\245\345jg\1\352\206\204\236\377\377\377" \
+ "\32\316\315\315($\"853jgfMJH@=<nlk\214\213\213>;9QML\222\223\223VSR\345" \
+ "\345\344NKJkjkNLL\377\377\377\321\321\322842][Y\245\244\244DA@da_X[^" \
+ "\210\221\253<\77D\204\377\377\377\7\247\247\250>BLhn\202=@D\361\361\361" \
+ "=@Cjlp\205\377\377\377\1nop\203\23\25\26\5+12HOR\23\25\26\25\30\31\371" \
+ "\371\372\215\377\377\377\2\244\247\252\241\244\250\232\377\377\377\1" \
+ "\373\373\373\205\23\25\26\2<CF\32\35\37\210\23\25\26\1g\243_\227x\277" \
+ "n\1\256\331\250\246\377\377\377\1\356\236\235\245\343db\1\351\201\200" \
+ "\236\377\377\377\33\316\315\315+'%952-*(A\77>kih732+(&62151/531BAA=:" \
+ "7:76A=;:76\373\373\373;98WUT421.*(842520\264\265\266Z^kDHR\333\333\334" \
+ "\203\377\377\377\6CEI\226\240\275(+0ek{;=>[]`\205\377\377\377\2\344\344" \
+ "\344\26\30\31\203\23\25\26\5-36IOR\23\25\26""267\373\373\374\215\377" \
+ "\377\377\2\241\244\250\243\246\251\232\377\377\377\1\372\372\373\205" \
+ "\23\25\26\1SY]\211\23\25\26\1\\\224U\227s\275i\1\253\330\245\246\377" \
+ "\377\377\1\355\233\231\245\342_\\\1\350}{\236\377\377\377'\316\314\314" \
+ "CBA\236\235\235*%#A\77>\263\263\263/-+EA\77\77==($\"'#!LJH620853GDBL" \
+ "IH\333\332\331B@\77\223\221\220.+)0,*\233\231\227520\356\356\355\212" \
+ "\214\220\177\206\232NQW\340\340\340\371\371\371\177\200\202|\203\226" \
+ "8;@\334\335\33758>w}\216|~\202\321\322\322\336\337\337\222\223\223\202" \
+ "\377\377\377\1\246\247\247\204\23\25\26\5$)+GMQ\23\25\26ilo\375\375\375" \
+ "\215\377\377\377\2\236\241\245\246\251\254\232\377\377\377\1\371\371" \
+ "\372\204\23\25\26\2)/1Y_c\211\23\25\26\1W\220P\227o\274e\1\251\327\243" \
+ "\246\377\377\377\1\355\230\226\245\342ZW\1\350yw\237\377\377\377&YVT" \
+ "1.,\207\206\206\237\237\240DCC;75=;951/\353\355\356LKJ742\234\232\230" \
+ "\\[[621\217\215\213\377\377\377\267\266\26641/YWVLJH\233\231\227XVU\356" \
+ "\356\355\377\377\377}\177\200:=A/15+.1PT\\CEH\377\377\377\364\364\364" \
+ "\245\246\247>AEKOZ7;BRV\\\246\250\254\202\377\377\377\1\207\210\210\204" \
+ "\23\25\26\5\32\34\35ELO;BE\177\203\206\374\374\374\215\377\377\377\2" \
+ "\235\240\244\251\254\257\232\377\377\377\2\371\371\372\25\27\30\203\23" \
+ "\25\26\2W^a>DH\211\23\25\26\1]\240U\227k\272a\1\246\326\240\246\377\377" \
+ "\377\1\355\226\223\245\341VR\1\347vs\240\377\377\377\1\370\367\367\202" \
+ "\377\377\377\1\362\360\360\203\376\376\376\202\377\377\377\1\366\366" \
+ "\365\202\377\377\377\1\366\366\365\203\377\377\377\5\370\367\367\373" \
+ "\373\373\376\376\376\353\353\353\376\376\376\203\377\377\377\4\361\361" \
+ "\361\270\270\270\252\252\253\334\335\335\204\377\377\377\4\372\372\372" \
+ "\270\270\270\246\247\247\325\325\326\203\377\377\377\1\265\265\266\205" \
+ "\23\25\26\4""39<HORqvy\374\374\374\215\377\377\377\2\233\236\242\254" \
+ "\257\262\232\377\377\377\2\371\371\372\24\26\27\203\23\25\26\1FLO\211" \
+ "\23\25\26\2\23\26\26b\261Y\227f\271]\1\243\325\236\246\377\377\377\1" \
+ "\355\223\220\245\341QM\1\347rn\233\377\377\377\1\363\362\362\253\347" \
+ "\346\346\1\331\331\331\202WXX\7\256\226U\324\265P\206wUXYZtwyimo\345" \
+ "\344\345\215\347\346\346\2\252\254\256\262\264\266\232\347\346\346\1" \
+ "\342\342\343\202WXX\10\177\202\205\202\205\207{~\201WXXptvwz}vy{jno\204" \
+ "WXX\1boa\230\207\272\201\1\255\314\251\246\347\346\346\1\333\243\241" \
+ "\245\324zw\1\327\216\213\224\347\346\346\1\350\347\347\206\377\377\377" \
+ "\1\340\340\340\377\302\301\301\351\302\301\301\12\304\303\303\377\377" \
+ "\377\371\371\371\311\310\307\270\266\266\351\351\350\377\377\377\340" \
+ "\340\340\302\301\301\305\304\304\254\320\317\317\1\314\313\313\377\302" \
+ "\301\301\272\302\301\301\12\304\303\303\370\370\370\221\217\216\265\264" \
+ "\263\317\316\316\237\235\235\324\323\323\340\340\340\302\301\301\322" \
+ "\321\321\254\377\377\377\1\362\317\315\377\323PK\270\323PK\14\306\240" \
+ "\237\302\301\301\304\303\303\275\273\273\322\321\321\203\201\200\226" \
+ "\224\223\325\324\324\235\232\232\340\340\340\302\301\301\322\321\321" \
+ "\254\377\377\377\1\364\303\301\377\332%\35\270\332%\35\14\310\223\221" \
+ "\302\301\301\304\303\303\243\241\240\355\355\355urrxtt\367\367\367\236" \
+ "\234\233\340\340\340\302\301\301\322\321\321\254\377\377\377\1\364\303" \
+ "\301\377\332%\35\270\332%\35\14\310\223\221\302\301\301\304\303\303\321" \
+ "\320\320\262\261\260\260\256\255\276\274\274\307\306\306\235\233\233" \
+ "\340\340\340\302\301\301\322\321\321\254\377\377\377\1\364\303\301\310" \
+ "\332%\35\212\333(\40\1\333&\36\206\332%\35\1\333'\37\211\333(\40\324" \
+ "\332%\35\14\310\223\221\302\301\301\304\303\303\377\377\377\264\262\262" \
+ "\237\235\234\247\245\245\227\225\224\364\364\364\340\340\340\302\301" \
+ "\301\322\321\321\254\377\377\377\1\364\303\301\307\332%\35\1\334.&\212" \
+ "\377\377\377\1\341KE\206\332%\35\1\364\274\271\210\377\377\377\1\377" \
+ "\373\373\230\332%\35\3\333&\36\334.&\333&\36\271\332%\35\3\310\223\221" \
+ "\302\301\301\304\303\303\202\377\377\377\2\375\375\375\366\366\366\202" \
+ "\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1" \
+ "\375\363\363\207\367\317\316\1\376\370\367\222\377\377\377\1\374\353" \
+ "\352\210\367\317\316\1\374\351\350\203\377\377\377\1\364\303\301\307" \
+ "\332%\35\1\334.&\212\377\377\377\1\341KE\206\332%\35\1\364\274\271\210" \
+ "\377\377\377\1\377\373\373\222\332%\35\17\3352*\346hb\357\241\236\366" \
+ "\312\310\371\333\332\374\355\354\377\374\374\377\377\377\377\372\372" \
+ "\374\351\350\371\330\327\366\307\305\357\234\230\345d^\334.&\232\332" \
+ "%\35\20\333*\"\342SM\352\200{\361\253\250\367\313\311\371\332\330\373" \
+ "\347\347\375\363\362\374\355\354\373\342\341\371\330\327\366\310\306" \
+ "\360\246\243\353\206\202\345f`\336:3\211\332%\35\3\310\223\221\302\301" \
+ "\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321" \
+ "\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\221\377\377" \
+ "\377\2\373\344\343\337>6\207\332%\35\2\342QK\375\362\361\203\377\377" \
+ "\377\1\364\303\301\307\332%\35\1\334.&\212\377\377\377\1\341KE\206\332" \
+ "%\35\1\364\274\271\210\377\377\377\1\377\373\373\217\332%\35\4\333'\37" \
+ "\350tn\367\317\315\377\374\374\215\377\377\377\4\377\372\372\366\311" \
+ "\307\346id\333&\36\225\332%\35\3\342SM\360\243\237\375\357\357\217\377" \
+ "\377\377\4\372\337\336\361\253\250\347rm\334/'\205\332%\35\3\310\223" \
+ "\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301" \
+ "\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334" \
+ "\220\377\377\377\2\374\352\351\340D=\207\332%\35\2\342PJ\375\361\360" \
+ "\204\377\377\377\1\364\303\301\307\332%\35\1\334.&\212\377\377\377\1" \
+ "\341KE\206\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\215\332" \
+ "%\35\3\333&\36\347rm\372\336\335\223\377\377\377\3\370\325\324\346id" \
+ "\333&\36\221\332%\35\2\341KE\366\307\305\225\377\377\377\3\376\366\366" \
+ "\362\262\257\341JC\203\332%\35\3\310\223\221\302\301\301\304\303\303" \
+ "\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377" \
+ "\1\366\312\310\207\332%\35\1\372\335\334\217\377\377\377\2\375\356\356" \
+ "\341JC\207\332%\35\2\341OH\375\360\357\205\377\377\377\1\364\303\301" \
+ "\307\332%\35\1\334.&\212\377\377\377\1\341KE\206\332%\35\1\364\274\271" \
+ "\210\377\377\377\1\377\373\373\214\332%\35\2\3355.\366\307\305\227\377" \
+ "\377\377\2\364\275\273\3341)\216\332%\35\3\333)!\357\240\235\377\375" \
+ "\375\230\377\377\377\1\352\203~\203\332%\35\3\310\223\221\302\301\301" \
+ "\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204" \
+ "\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\216\377\377\377" \
+ "\2\375\363\362\342PI\207\332%\35\2\341NG\375\357\357\206\377\377\377" \
+ "\1\364\303\301\307\332%\35\1\334.&\212\377\377\377\1\341KE\206\332%\35" \
+ "\1\364\274\271\210\377\377\377\1\377\373\373\213\332%\35\2\340HA\372" \
+ "\341\337\231\377\377\377\2\371\333\331\337B;\214\332%\35\2\3352+\366" \
+ "\306\304\232\377\377\377\1\352\203~\203\332%\35\3\310\223\221\302\301" \
+ "\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321" \
+ "\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\215\377\377" \
+ "\377\2\376\366\366\343XR\207\332%\35\2\341MF\375\357\357\207\377\377" \
+ "\377\1\364\303\301\307\332%\35\1\334.&\212\377\377\377\1\341KE\206\332" \
+ "%\35\1\364\274\271\210\377\377\377\1\377\373\373\212\332%\35\2\343UN" \
+ "\375\363\362\233\377\377\377\2\375\357\357\341LF\212\332%\35\2\334.&" \
+ "\371\331\327\233\377\377\377\1\352\203~\203\332%\35\3\310\223\221\302" \
+ "\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321" \
+ "\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\214\377" \
+ "\377\377\2\376\371\370\344_Y\207\332%\35\2\341KE\374\355\355\210\377" \
+ "\377\377\1\364\303\301\307\332%\35\1\333&\36\212\341NG\1\334,%\206\332" \
+ "%\35\1\364\274\271\210\377\377\377\1\377\373\373\211\332%\35\2\33680" \
+ "\373\347\347\235\377\377\377\2\372\341\340\3352+\211\332%\35\1\361\253" \
+ "\247\234\377\377\377\1\352\203~\203\332%\35\3\310\223\221\302\301\301" \
+ "\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204" \
+ "\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\213\377\377\377" \
+ "\2\377\373\373\346hb\207\332%\35\2\341JD\374\355\355\211\377\377\377" \
+ "\1\364\303\301\331\332%\35\1\364\274\271\210\377\377\377\1\377\373\373" \
+ "\210\332%\35\2\333'\37\366\307\305\214\377\377\377\7\372\336\335\357" \
+ "\240\235\352\203~\350up\353\205\200\361\250\245\374\351\350\214\377\377" \
+ "\377\2\364\276\274\333&\36\207\332%\35\1\345b\\\213\377\377\377\13\377" \
+ "\374\374\366\311\307\353\207\203\346kf\343ZT\343VO\346id\352~y\356\230" \
+ "\224\367\317\316\377\375\375\207\377\377\377\1\352\203~\203\332%\35\3" \
+ "\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302" \
+ "\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372" \
+ "\335\334\212\377\377\377\2\377\376\376\347ql\207\332%\35\2\340IB\374" \
+ "\355\354\212\377\377\377\1\364\303\301\331\332%\35\1\364\274\271\210" \
+ "\377\377\377\1\377\373\373\210\332%\35\1\354\215\211\213\377\377\377" \
+ "\2\373\342\341\345f`\206\332%\35\3\333&\36\350up\374\351\350\213\377" \
+ "\377\377\1\353\204\177\207\332%\35\1\364\274\271\212\377\377\377\2\367" \
+ "\316\314\337\77""8\211\332%\35\3\3357/\350to\366\311\307\205\377\377" \
+ "\377\1\352\203~\203\332%\35\3\310\223\221\302\301\301\304\303\303\206" \
+ "\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1" \
+ "\366\312\310\207\332%\35\1\372\335\334\212\377\377\377\1\351zv\207\332" \
+ "%\35\2\340IB\374\354\353\213\377\377\377\1\364\303\301\212\332%\35\14" \
+ "\333(\40\337@9\344[U\346kf\350up\352\200{\352\201}\351yt\347ni\345e_" \
+ "\341NG\334-&\232\332%\35\4\3354-\344]W\347ni\352\200{\202\354\217\213" \
+ "\4\352\200{\347pk\343YS\334,%\237\332%\35\1\364\274\271\210\377\377\377" \
+ "\1\377\373\373\207\332%\35\2\3340(\375\361\360\212\377\377\377\2\370" \
+ "\323\321\3355.\211\332%\35\2\33681\371\332\330\212\377\377\377\2\374" \
+ "\352\351\334,$\205\332%\35\2\33680\377\374\374\211\377\377\377\2\364" \
+ "\275\273\333(\40\215\332%\35\2\343WQ\364\276\274\203\377\377\377\1\352" \
+ "\203~\203\332%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377" \
+ "\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310" \
+ "\207\332%\35\1\372\335\334\211\377\377\377\1\353\206\201\207\332%\35" \
+ "\2\340G@\374\353\352\214\377\377\377\1\364\303\301\205\332%\35\6\335" \
+ "2+\344]W\354\212\206\363\266\263\373\342\341\377\375\375\212\377\377" \
+ "\377\5\377\376\376\373\346\345\363\267\264\350up\3357/\223\332%\35\4" \
+ "\342TN\357\237\234\371\326\325\377\376\376\210\377\377\377\4\377\372" \
+ "\372\367\316\314\354\212\206\3352*\213\332%\35\1\353\210\204\210\360" \
+ "\246\243\1\356\231\226\207\332%\35\1\364\274\271\210\377\377\377\1\377" \
+ "\373\373\207\332%\35\1\353\211\205\212\377\377\377\2\373\343\342\335" \
+ "2*\213\332%\35\2\3356.\373\347\347\212\377\377\377\1\352\177z\205\332" \
+ "%\35\1\344^X\212\377\377\377\1\342RL\220\332%\35\4\345b\\\373\347\346" \
+ "\377\377\377\352\203~\203\332%\35\3\310\223\221\302\301\301\304\303\303" \
+ "\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377" \
+ "\1\366\312\310\207\332%\35\1\372\335\334\210\377\377\377\1\354\217\213" \
+ "\207\332%\35\2\340F\77\374\352\351\215\377\377\377\1\364\303\301\205" \
+ "\332%\35\1\376\370\367\223\377\377\377\3\377\373\373\360\246\243\336" \
+ ":3\217\332%\35\2\344^X\366\307\305\217\377\377\377\3\375\363\362\355" \
+ "\223\217\333)!\211\332%\35\1\367\315\313\210\377\377\377\1\374\352\351" \
+ "\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\206\332%\35" \
+ "\2\334,$\374\352\351\212\377\377\377\1\344`Z\215\332%\35\1\346je\212" \
+ "\377\377\377\2\373\343\342\333(\40\204\332%\35\1\350xs\212\377\377\377" \
+ "\1\340D>\221\332%\35\3\3352*\357\234\230\345b\\\203\332%\35\3\310\223" \
+ "\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301" \
+ "\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334" \
+ "\207\377\377\377\1\356\232\227\207\332%\35\2\340E>\374\351\350\216\377" \
+ "\377\377\1\364\303\301\205\332%\35\1\376\370\367\225\377\377\377\2\376" \
+ "\365\365\345d^\214\332%\35\2\333*\"\360\245\241\223\377\377\377\2\367" \
+ "\314\312\33692\210\332%\35\1\367\315\313\210\377\377\377\1\374\352\351" \
+ "\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\206\332%\35" \
+ "\1\345b]\212\377\377\377\1\365\304\302\217\332%\35\1\367\316\314\212" \
+ "\377\377\377\1\343VP\204\332%\35\1\354\212\206\212\377\377\377\1\351" \
+ "}x\227\332%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377" \
+ "\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310" \
+ "\207\332%\35\1\372\335\334\206\377\377\377\1\360\245\241\207\332%\35" \
+ "\2\340D=\374\350\347\217\377\377\377\1\364\303\301\205\332%\35\1\376" \
+ "\370\367\226\377\377\377\2\377\374\374\347mg\212\332%\35\2\33692\367" \
+ "\317\315\225\377\377\377\2\373\343\342\3355.\207\332%\35\1\367\315\313" \
+ "\210\377\377\377\1\374\352\351\207\332%\35\1\364\274\271\210\377\377" \
+ "\377\1\377\373\373\206\332%\35\1\356\231\225\212\377\377\377\1\347nh" \
+ "\217\332%\35\1\350vq\212\377\377\377\1\354\214\210\204\332%\35\1\352" \
+ "\177z\212\377\377\377\2\376\365\365\345a[\226\332%\35\3\310\223\221\302" \
+ "\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321" \
+ "\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\205\377" \
+ "\377\377\2\362\257\254\333&\36\206\332%\35\2\337C<\373\347\347\220\377" \
+ "\377\377\1\364\303\301\205\332%\35\1\376\370\367\227\377\377\377\2\375" \
+ "\361\360\336:3\210\332%\35\2\334,%\370\323\321\227\377\377\377\2\365" \
+ "\301\277\333&\36\206\332%\35\1\367\315\313\210\377\377\377\1\374\352" \
+ "\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\206\332" \
+ "%\35\1\367\317\316\211\377\377\377\2\376\364\364\333*\"\217\332%\35\2" \
+ "\334-&\376\371\371\211\377\377\377\1\365\303\301\204\332%\35\1\346id" \
+ "\214\377\377\377\3\366\311\307\351zv\337>6\223\332%\35\3\310\223\221" \
+ "\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322" \
+ "\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\204" \
+ "\377\377\377\2\363\270\266\333(\40\206\332%\35\2\337B;\373\347\346\221" \
+ "\377\377\377\1\364\303\301\205\332%\35\1\376\370\367\230\377\377\377" \
+ "\1\361\251\246\207\332%\35\2\333&\36\363\263\260\211\377\377\377\6\374" \
+ "\351\350\364\271\267\355\225\221\353\211\205\361\253\250\370\325\324" \
+ "\212\377\377\377\1\351zu\206\332%\35\1\367\315\313\210\377\377\377\1" \
+ "\374\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373" \
+ "\205\332%\35\2\334/'\377\373\373\211\377\377\377\1\366\310\306\221\332" \
+ "%\35\1\370\321\317\211\377\377\377\2\376\366\366\333)!\203\332%\35\1" \
+ "\336;4\217\377\377\377\5\372\334\333\361\252\247\351zv\341JD\333&\36" \
+ "\216\332%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3" \
+ "\340\340\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207" \
+ "\332%\35\1\372\335\334\203\377\377\377\2\365\300\276\333*\"\206\332%" \
+ "\35\2\337A:\373\346\345\222\377\377\377\1\364\303\301\205\332%\35\1\376" \
+ "\370\367\203\377\377\377\13\375\360\357\363\265\262\355\223\217\347r" \
+ "m\342QK\336;4\340G@\343VP\346je\357\241\236\372\341\340\212\377\377\377" \
+ "\2\375\357\357\333(\40\206\332%\35\1\350sn\210\377\377\377\3\377\374" \
+ "\374\354\212\206\333*\"\205\332%\35\2\345c^\375\363\362\210\377\377\377" \
+ "\2\372\336\335\333&\36\205\332%\35\1\367\315\313\210\377\377\377\1\374" \
+ "\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\205" \
+ "\332%\35\1\341KE\212\377\377\377\1\356\231\226\221\332%\35\1\360\243" \
+ "\237\212\377\377\377\1\337>7\204\332%\35\1\371\327\326\222\377\377\377" \
+ "\4\375\362\361\363\267\265\351zv\336=6\213\332%\35\3\310\223\221\302" \
+ "\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321" \
+ "\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\202\377" \
+ "\377\377\2\366\311\307\334,%\206\332%\35\2\337@9\373\345\344\223\377" \
+ "\377\377\1\364\303\301\205\332%\35\5\376\370\367\375\363\362\362\257" \
+ "\254\345f`\333*\"\212\332%\35\2\347ni\377\372\372\211\377\377\377\1\343" \
+ "WQ\205\332%\35\2\333'\37\372\336\335\210\377\377\377\1\354\215\211\210" \
+ "\332%\35\1\351zv\211\377\377\377\1\345f`\205\332%\35\1\367\315\313\210" \
+ "\377\377\377\1\374\352\351\207\332%\35\1\364\274\271\210\377\377\377" \
+ "\1\377\373\373\205\332%\35\1\344\\V\212\377\377\377\1\350wr\221\332%" \
+ "\35\1\352\202~\212\377\377\377\1\341OH\204\332%\35\1\352~y\226\377\377" \
+ "\377\3\371\326\325\351yt\333*\"\210\332%\35\3\310\223\221\302\301\301" \
+ "\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204" \
+ "\377\377\377\1\366\312\310\207\332%\35\4\372\335\334\377\377\377\367" \
+ "\320\317\3340(\206\332%\35\2\337\77""8\373\344\343\224\377\377\377\1" \
+ "\364\303\301\205\332%\35\2\341KE\334,$\216\332%\35\1\355\224\220\211" \
+ "\377\377\377\1\347pk\205\332%\35\1\350sn\210\377\377\377\2\371\326\325" \
+ "\333)!\210\332%\35\2\333'\37\372\334\333\210\377\377\377\1\360\243\237" \
+ "\205\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35" \
+ "\1\364\274\271\210\377\377\377\1\377\373\373\205\332%\35\1\346kf\212" \
+ "\377\377\377\1\346id\221\332%\35\1\350to\212\377\377\377\1\344_Y\204" \
+ "\332%\35\2\333)!\371\327\326\227\377\377\377\3\374\350\347\353\210\204" \
+ "\3340(\206\332%\35\3\310\223\221\302\301\301\304\303\303\206\377\377" \
+ "\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1\366\312" \
+ "\310\207\332%\35\3\372\335\334\371\327\326\3353,\206\332%\35\2\337>7" \
+ "\373\342\341\225\377\377\377\1\364\303\301\225\332%\35\1\341MF\211\377" \
+ "\377\377\1\353\205\200\205\332%\35\1\365\300\276\210\377\377\377\1\353" \
+ "\204\177\212\332%\35\1\357\241\236\210\377\377\377\1\371\327\326\205" \
+ "\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364" \
+ "\274\271\210\377\377\377\1\377\373\373\205\332%\35\1\351{v\212\377\377" \
+ "\377\1\344\\V\221\332%\35\1\346hb\212\377\377\377\1\347oj\205\332%\35" \
+ "\2\341JC\375\360\357\230\377\377\377\2\373\346\345\343ZT\205\332%\35" \
+ "\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340" \
+ "\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\2" \
+ "\364\275\272\33681\206\332%\35\2\3340(\372\341\340\226\377\377\377\1" \
+ "\364\303\301\221\332%\35\5\334,$\337@9\343UN\346id\354\212\206\211\377" \
+ "\377\377\1\354\214\210\204\332%\35\2\333*\"\376\365\365\210\377\377\377" \
+ "\1\343VP\212\332%\35\1\352\200{\210\377\377\377\2\377\376\376\334,$\204" \
+ "\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364" \
+ "\274\271\210\377\377\377\1\377\373\373\205\332%\35\1\353\206\201\212" \
+ "\377\377\377\1\342TN\221\332%\35\1\344`Z\212\377\377\377\1\351zu\206" \
+ "\332%\35\2\342TN\374\352\351\230\377\377\377\2\377\374\374\346lf\204" \
+ "\332%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340" \
+ "\340\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332" \
+ "%\35\2\363\263\260\3341)\207\332%\35\1\355\224\220\226\377\377\377\1" \
+ "\364\303\301\212\332%\35\7\333+#\342QK\351|w\360\246\243\366\310\306" \
+ "\372\335\334\375\362\361\216\377\377\377\1\354\214\210\204\332%\35\1" \
+ "\343ZT\211\377\377\377\1\362\261\256\212\361\252\247\1\365\304\302\211" \
+ "\377\377\377\1\336=6\204\332%\35\1\367\315\313\210\377\377\377\1\374" \
+ "\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\205" \
+ "\332%\35\1\350xs\212\377\377\377\1\344^X\221\332%\35\1\346je\212\377" \
+ "\377\377\1\346lf\207\332%\35\2\33680\364\273\270\230\377\377\377\2\377" \
+ "\373\373\342TN\203\332%\35\3\310\223\221\302\301\301\304\303\303\206" \
+ "\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1" \
+ "\366\312\310\207\332%\35\3\372\335\334\366\311\307\334,$\207\332%\35" \
+ "\1\357\236\232\225\377\377\377\1\364\303\301\207\332%\35\4\333'\37\345" \
+ "a[\362\257\254\376\364\364\224\377\377\377\1\354\214\210\204\332%\35" \
+ "\1\351}x\236\377\377\377\1\341KE\204\332%\35\1\367\315\313\210\377\377" \
+ "\377\1\374\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373" \
+ "\373\205\332%\35\1\346hb\212\377\377\377\1\346je\221\332%\35\1\350up" \
+ "\212\377\377\377\1\344\\V\211\332%\35\2\343XR\366\305\303\227\377\377" \
+ "\377\2\371\333\332\333'\37\202\332%\35\3\310\223\221\302\301\301\304" \
+ "\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377" \
+ "\377\377\1\366\312\310\207\332%\35\4\372\335\334\377\377\377\364\273" \
+ "\270\333(\40\206\332%\35\2\333&\36\360\247\244\224\377\377\377\1\364" \
+ "\303\301\206\332%\35\2\343ZT\371\333\331\227\377\377\377\1\354\214\210" \
+ "\204\332%\35\1\354\216\212\236\377\377\377\1\343ZT\204\332%\35\1\367" \
+ "\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364\274\271\210" \
+ "\377\377\377\1\377\373\373\205\332%\35\1\343WQ\212\377\377\377\1\350" \
+ "xs\221\332%\35\1\352\203~\212\377\377\377\1\341KE\213\332%\35\4\337C" \
+ "<\355\223\217\367\316\314\377\374\374\224\377\377\377\1\346hb\202\332" \
+ "%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340" \
+ "\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35" \
+ "\1\372\335\334\202\377\377\377\2\361\254\251\333&\36\206\332%\35\2\333" \
+ "&\36\362\261\256\223\377\377\377\1\364\303\301\204\332%\35\2\333&\36" \
+ "\357\237\234\231\377\377\377\1\354\214\210\204\332%\35\1\357\237\234" \
+ "\236\377\377\377\1\344\\V\204\332%\35\1\367\315\313\210\377\377\377\1" \
+ "\374\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373" \
+ "\205\332%\35\1\340G@\212\377\377\377\1\357\235\231\221\332%\35\1\360" \
+ "\247\244\212\377\377\377\1\336;4\216\332%\35\5\3340(\345d^\357\236\232" \
+ "\370\321\317\377\373\373\220\377\377\377\1\362\261\256\202\332%\35\3" \
+ "\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302" \
+ "\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372" \
+ "\335\334\203\377\377\377\1\356\233\227\207\332%\35\2\333(\40\364\272" \
+ "\267\222\377\377\377\1\364\303\301\204\332%\35\1\356\232\227\232\377" \
+ "\377\377\1\354\214\210\204\332%\35\1\361\252\247\236\377\377\377\1\344" \
+ "\\V\204\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%" \
+ "\35\1\364\274\271\210\377\377\377\1\377\373\373\205\332%\35\2\333(\40" \
+ "\376\364\364\211\377\377\377\1\366\312\310\221\332%\35\1\370\324\322" \
+ "\211\377\377\377\2\374\355\355\333&\36\222\332%\35\5\334,%\343XR\353" \
+ "\210\204\365\277\275\377\372\372\214\377\377\377\1\372\341\340\202\332" \
+ "%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340" \
+ "\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35" \
+ "\1\372\335\334\204\377\377\377\1\354\212\206\207\332%\35\2\333+#\365" \
+ "\302\277\221\377\377\377\1\364\303\301\203\332%\35\1\346hb\214\377\377" \
+ "\377\6\372\335\334\361\254\251\354\212\206\350tn\344]W\344`Z\211\377" \
+ "\377\377\1\354\214\210\204\332%\35\1\356\232\227\211\377\377\377\1\376" \
+ "\366\366\224\376\365\365\1\343ZT\204\332%\35\1\367\315\313\210\377\377" \
+ "\377\1\374\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373" \
+ "\373\206\332%\35\1\365\302\277\211\377\377\377\2\376\366\366\334.&\217" \
+ "\332%\35\2\3355.\377\373\373\211\377\377\377\1\363\267\265\227\332%\35" \
+ "\3\3353,\356\231\225\377\372\372\212\377\377\377\1\377\373\373\202\332" \
+ "%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340" \
+ "\340\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35" \
+ "\1\372\335\334\205\377\377\377\1\351zu\207\332%\35\2\334-&\366\311\307" \
+ "\220\377\377\377\1\364\303\301\203\332%\35\1\367\313\311\211\377\377" \
+ "\377\3\373\347\346\351zv\3355.\205\332%\35\1\337C<\211\377\377\377\1" \
+ "\354\214\210\204\332%\35\1\353\207\203\211\377\377\377\1\340F\77\231" \
+ "\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364" \
+ "\274\271\210\377\377\377\1\377\373\373\206\332%\35\1\354\213\206\212" \
+ "\377\377\377\1\351zv\217\332%\35\1\353\206\202\212\377\377\377\1\352" \
+ "\200|\231\332%\35\2\345d^\377\375\375\212\377\377\377\5\334.&\332%\35" \
+ "\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302" \
+ "\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372" \
+ "\335\334\205\377\377\377\2\377\375\375\346id\207\332%\35\2\3340(\367" \
+ "\320\317\217\377\377\377\1\364\303\301\202\332%\35\1\341JC\211\377\377" \
+ "\377\2\373\347\346\33692\207\332%\35\1\337C<\211\377\377\377\1\354\214" \
+ "\210\204\332%\35\1\350to\211\377\377\377\1\346id\231\332%\35\1\367\315" \
+ "\313\210\377\377\377\1\374\352\351\207\332%\35\1\364\274\271\210\377" \
+ "\377\377\1\377\373\373\206\332%\35\1\342SM\212\377\377\377\2\371\326" \
+ "\325\333&\36\215\332%\35\2\333*\"\372\341\340\212\377\377\377\1\341J" \
+ "C\204\332%\35\3\354\216\212\353\205\200\333&\36\223\332%\35\1\364\275" \
+ "\273\211\377\377\377\6\377\372\372\333&\36\332%\35\310\223\221\302\301" \
+ "\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321" \
+ "\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\206\377\377" \
+ "\377\2\376\371\370\344\\V\207\332%\35\2\3353,\371\327\326\216\377\377" \
+ "\377\1\364\303\301\202\332%\35\1\347mg\211\377\377\377\1\353\205\200" \
+ "\210\332%\35\1\337C<\211\377\377\377\1\354\214\210\204\332%\35\1\340" \
+ "F\77\211\377\377\377\1\362\256\253\231\332%\35\1\367\315\313\210\377" \
+ "\377\377\1\374\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377" \
+ "\373\373\206\332%\35\2\333&\36\370\325\324\212\377\377\377\1\352\200" \
+ "{\215\332%\35\1\355\222\216\212\377\377\377\1\367\317\316\205\332%\35" \
+ "\4\366\305\303\377\377\377\367\314\312\337C<\222\332%\35\1\356\232\227" \
+ "\211\377\377\377\1\373\344\343\202\332%\35\3\310\223\221\302\301\301" \
+ "\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204" \
+ "\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\207\377\377\377" \
+ "\2\375\363\363\342PI\207\332%\35\2\33680\372\335\334\215\377\377\377" \
+ "\1\364\303\301\202\332%\35\1\353\206\201\211\377\377\377\1\344_Y\210" \
+ "\332%\35\1\337C<\211\377\377\377\1\354\214\210\205\332%\35\1\373\342" \
+ "\341\210\377\377\377\2\376\370\367\337@9\221\332%\35\2\340F\77\342PI" \
+ "\205\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35" \
+ "\1\364\274\271\210\377\377\377\1\377\373\373\207\332%\35\1\347nh\212" \
+ "\377\377\377\2\375\363\363\341LF\213\332%\35\2\343YS\376\371\371\212" \
+ "\377\377\377\1\346ga\205\332%\35\1\366\305\303\202\377\377\377\3\376" \
+ "\365\365\353\206\201\334-&\220\332%\35\1\364\276\274\211\377\377\377" \
+ "\1\366\306\304\202\332%\35\3\310\223\221\302\301\301\304\303\303\206" \
+ "\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377\377\1" \
+ "\366\312\310\207\332%\35\1\372\335\334\210\377\377\377\2\374\355\354" \
+ "\340D>\207\332%\35\2\336<5\373\342\341\214\377\377\377\1\364\303\301" \
+ "\202\332%\35\1\356\232\227\211\377\377\377\1\347pk\210\332%\35\1\337" \
+ "C<\211\377\377\377\1\354\214\210\205\332%\35\1\360\244\240\211\377\377" \
+ "\377\2\367\315\313\334.&\216\332%\35\4\3341)\356\233\227\377\374\374" \
+ "\364\276\274\205\332%\35\1\367\315\313\210\377\377\377\1\374\352\351" \
+ "\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\207\332%\35" \
+ "\2\333&\36\372\336\335\212\377\377\377\2\375\356\356\342RL\211\332%\35" \
+ "\2\344]W\376\364\364\212\377\377\377\2\371\331\327\333&\36\205\332%\35" \
+ "\1\366\305\303\204\377\377\377\3\375\356\356\355\223\217\3356.\215\332" \
+ "%\35\1\347mg\212\377\377\377\1\352\177z\202\332%\35\3\310\223\221\302" \
+ "\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321" \
+ "\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\211\377" \
+ "\377\377\2\373\344\343\336<5\207\332%\35\2\337B;\374\350\347\213\377" \
+ "\377\377\1\364\303\301\202\332%\35\1\354\214\210\211\377\377\377\1\360" \
+ "\245\242\210\332%\35\1\354\213\206\211\377\377\377\1\354\214\210\205" \
+ "\332%\35\2\340HA\377\374\374\211\377\377\377\2\370\324\322\341JC\213" \
+ "\332%\35\3\3356.\355\221\215\375\360\357\202\377\377\377\1\364\276\274" \
+ "\205\332%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35" \
+ "\1\364\274\271\210\377\377\377\1\377\373\373\210\332%\35\1\346id\213" \
+ "\377\377\377\3\377\374\374\360\243\237\337B;\205\332%\35\2\340IB\362" \
+ "\255\252\214\377\377\377\1\345d^\206\332%\35\1\366\305\303\206\377\377" \
+ "\377\4\376\367\367\363\267\264\351|w\337A:\210\332%\35\2\336=6\361\252" \
+ "\247\212\377\377\377\2\377\372\372\3354-\202\332%\35\3\310\223\221\302" \
+ "\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321" \
+ "\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334\212\377" \
+ "\377\377\2\371\333\331\3354-\207\332%\35\2\340G@\374\355\354\212\377" \
+ "\377\377\1\364\303\301\202\332%\35\1\347rm\211\377\377\377\3\377\376" \
+ "\376\351}x\333*\"\204\332%\35\2\342TN\365\303\300\212\377\377\377\1\354" \
+ "\214\210\206\332%\35\1\360\246\243\212\377\377\377\15\377\375\375\364" \
+ "\271\267\350to\341LF\3356.\333&\36\332%\35\333&\36\33680\342PI\353\205" \
+ "\200\366\311\307\377\374\374\204\377\377\377\1\364\276\274\205\332%\35" \
+ "\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364\274\271" \
+ "\210\377\377\377\1\377\373\373\211\332%\35\1\357\235\231\215\377\377" \
+ "\377\5\372\334\333\364\271\267\361\250\245\364\271\267\372\336\335\215" \
+ "\377\377\377\1\356\230\224\207\332%\35\1\366\305\303\212\377\377\377" \
+ "\10\372\341\337\365\302\277\362\255\252\356\231\225\354\215\211\357\236" \
+ "\232\362\262\257\372\341\337\214\377\377\377\1\356\231\226\203\332%\35" \
+ "\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340" \
+ "\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1" \
+ "\372\335\334\213\377\377\377\2\367\317\315\334.&\207\332%\35\2\341MF" \
+ "\375\361\360\211\377\377\377\1\364\303\301\202\332%\35\2\33680\377\376" \
+ "\376\212\377\377\377\5\374\355\355\366\305\303\362\261\257\364\271\267" \
+ "\373\342\341\214\377\377\377\1\354\214\210\206\332%\35\2\33680\374\355" \
+ "\354\216\377\377\377\3\376\371\371\374\351\350\376\371\371\211\377\377" \
+ "\377\1\364\276\274\205\332%\35\1\367\315\313\210\377\377\377\1\374\352" \
+ "\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\211\332" \
+ "%\35\2\333(\40\366\312\310\235\377\377\377\2\366\305\303\333'\37\207" \
+ "\332%\35\1\366\305\303\235\377\377\377\2\371\331\327\333+#\203\332%\35" \
+ "\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340" \
+ "\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1" \
+ "\372\335\334\214\377\377\377\2\365\302\277\333*\"\207\332%\35\2\342T" \
+ "N\376\364\364\210\377\377\377\1\364\303\301\203\332%\35\1\364\276\274" \
+ "\233\377\377\377\1\354\214\210\207\332%\35\2\341OH\375\363\362\231\377" \
+ "\377\377\1\364\276\274\205\332%\35\1\367\315\313\210\377\377\377\1\374" \
+ "\352\351\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\212" \
+ "\332%\35\2\33681\370\324\322\233\377\377\377\2\370\323\321\3356.\210" \
+ "\332%\35\1\366\305\303\234\377\377\377\2\374\350\347\340HA\204\332%\35" \
+ "\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340" \
+ "\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1" \
+ "\372\335\334\215\377\377\377\2\363\263\260\333&\36\207\332%\35\2\344" \
+ "[U\376\367\367\207\377\377\377\1\364\303\301\203\332%\35\2\341KE\377" \
+ "\373\373\220\377\377\377\1\377\375\375\211\377\377\377\1\354\214\210" \
+ "\210\332%\35\2\343YS\376\364\364\230\377\377\377\1\364\276\274\205\332" \
+ "%\35\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364\274" \
+ "\271\210\377\377\377\1\377\373\373\213\332%\35\2\334.&\363\270\266\231" \
+ "\377\377\377\2\362\261\257\334,%\211\332%\35\1\366\305\303\233\377\377" \
+ "\377\2\372\335\334\337\77""8\205\332%\35\3\310\223\221\302\301\301\304" \
+ "\303\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377" \
+ "\377\377\1\366\312\310\207\332%\35\1\372\335\334\216\377\377\377\1\360" \
+ "\244\240\210\332%\35\2\345b]\376\371\371\206\377\377\377\1\364\303\301" \
+ "\204\332%\35\1\351{v\217\377\377\377\2\373\343\342\347mg\211\377\377" \
+ "\377\1\354\214\210\211\332%\35\2\337A:\366\311\307\227\377\377\377\1" \
+ "\364\276\274\205\332%\35\1\367\315\313\210\377\377\377\1\374\352\351" \
+ "\207\332%\35\1\364\274\271\210\377\377\377\1\377\373\373\214\332%\35" \
+ "\3\333&\36\355\223\217\377\372\372\225\377\377\377\3\376\371\371\354" \
+ "\213\206\333&\36\212\332%\35\1\360\245\242\231\377\377\377\3\377\375" \
+ "\375\360\246\243\3354-\206\332%\35\3\310\223\221\302\301\301\304\303" \
+ "\303\206\377\377\377\3\340\340\340\302\301\301\322\321\321\204\377\377" \
+ "\377\1\366\312\310\207\332%\35\1\372\335\334\217\377\377\377\1\355\222" \
+ "\216\210\332%\35\2\346je\377\374\374\205\377\377\377\1\364\303\301\205" \
+ "\332%\35\2\352\201}\377\373\373\214\377\377\377\3\362\255\252\3355.\337" \
+ "C<\211\377\377\377\1\354\214\210\212\332%\35\3\333&\36\352\177z\373\342" \
+ "\341\224\377\377\377\2\370\325\323\347nh\205\332%\35\1\367\315\313\210" \
+ "\377\377\377\1\374\352\351\207\332%\35\1\364\274\271\210\377\377\377" \
+ "\1\377\373\373\216\332%\35\3\337@9\361\252\247\377\373\373\221\377\377" \
+ "\377\3\376\371\371\360\243\237\336=6\215\332%\35\3\337B;\355\223\217" \
+ "\372\341\340\225\377\377\377\2\366\305\303\342PI\210\332%\35\3\310\223" \
+ "\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301" \
+ "\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1\372\335\334" \
+ "\220\377\377\377\1\352\200|\210\332%\35\2\350tn\377\376\376\204\377\377" \
+ "\377\1\364\303\301\206\332%\35\2\343VO\367\315\313\210\377\377\377\3" \
+ "\377\375\375\365\303\300\343XR\202\332%\35\1\337C<\211\377\377\377\1" \
+ "\354\214\210\214\332%\35\4\333&\36\345b]\364\272\267\375\363\362\215" \
+ "\377\377\377\4\377\372\372\366\311\307\354\214\207\341JD\207\332%\35" \
+ "\1\367\315\313\210\377\377\377\1\374\352\351\207\332%\35\1\364\274\271" \
+ "\210\377\377\377\1\377\373\373\220\332%\35\4\337A:\356\230\224\370\321" \
+ "\317\377\375\375\213\377\377\377\4\377\375\375\370\321\317\355\225\221" \
+ "\336=6\222\332%\35\4\340G@\353\205\200\365\303\300\375\363\362\215\377" \
+ "\377\377\4\377\375\375\371\332\330\354\217\213\337\77""8\212\332%\35" \
+ "\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340" \
+ "\302\301\301\322\321\321\204\377\377\377\1\366\312\310\207\332%\35\1" \
+ "\372\335\334\220\377\377\377\2\377\376\376\347ql\210\332%\35\1\351}x" \
+ "\204\377\377\377\1\364\303\301\210\332%\35\3\342RL\354\217\213\363\266" \
+ "\263\202\366\311\307\4\363\264\261\357\237\234\352\201}\336:3\236\332" \
+ "%\35\17\333&\36\340G@\350up\356\233\227\361\252\247\363\267\265\366\305" \
+ "\303\367\317\316\366\307\305\364\273\270\362\255\252\357\237\233\351" \
+ "zv\342PI\333*\"\270\332%\35\15\3353,\346kf\355\223\217\360\245\241\363" \
+ "\266\263\366\307\305\370\322\320\366\305\303\363\266\263\360\245\241" \
+ "\355\223\217\346id\3352+\230\332%\35\17\333&\36\336=6\345a[\353\205\200" \
+ "\356\227\223\357\241\236\361\253\250\363\266\263\364\272\267\362\257" \
+ "\254\360\243\237\355\225\221\352~y\343UN\334.&\215\332%\35\3\310\223" \
+ "\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302\301\301" \
+ "\322\321\321\254\377\377\377\1\364\303\301\377\332%\35\270\332%\35\3" \
+ "\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340\340\302" \
+ "\301\301\322\321\321\254\377\377\377\1\364\303\301\377\332%\35\270\332" \
+ "%\35\3\310\223\221\302\301\301\304\303\303\206\377\377\377\3\340\340" \
+ "\340\302\301\301\322\321\321\254\377\377\377\1\363\313\311\377\325B;" \
+ "\270\325B;\3\307\234\232\302\301\301\304\303\303\206\377\377\377\3\340" \
+ "\340\340\302\301\301\307\306\306\254\326\325\325\1\320\317\317\377\302" \
+ "\301\301\272\302\301\301\1\304\303\303\206\377\377\377\1\340\340\340" \
+ "\377\302\301\301\351\302\301\301\1\304\303\303\206\377\377\377\1\357" \
+ "\357\357\377\340\340\340\351\340\340\340\1\341\341\341\206\377\377\377")
+
+
diff --git a/packages/psplash/files/psplash-init b/packages/psplash/files/psplash-init
index 7796a79064..a4fb1dc7d1 100644
--- a/packages/psplash/files/psplash-init
+++ b/packages/psplash/files/psplash-init
@@ -1,13 +1,9 @@
#!/bin/sh
-for x in $(cat /proc/cmdline); do
- case $x in
- psplash=false)
- echo "Boot splashscreen disabled"
- exit 0;
- ;;
- esac
-done
+if grep -qE '\s?psplash=false\s?' /proc/cmdline; then
+ echo "Boot splashscreen disabled"
+ exit 0;
+fi
. /etc/init.d/functions
. /etc/default/psplash
diff --git a/packages/psplash/psplash-openmoko_svn.bb b/packages/psplash/psplash-openmoko_svn.bb
index 4e7dbcce59..1114645040 100644
--- a/packages/psplash/psplash-openmoko_svn.bb
+++ b/packages/psplash/psplash-openmoko_svn.bb
@@ -10,6 +10,7 @@ ALTERNATIVE_PRIORITY = "30"
# 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://logo-math.patch;patch=1 \
file://psplash-hand-img.h \
file://psplash-bar-img.h \
file://psplash-default \
diff --git a/packages/psplash/psplash.inc b/packages/psplash/psplash.inc
index d1df18ff45..89464694bc 100644
--- a/packages/psplash/psplash.inc
+++ b/packages/psplash/psplash.inc
@@ -3,8 +3,11 @@ HOMEPAGE = "http://projects.o-hand.com/psplash"
SECTION = "base"
LICENSE = "GPL"
RDEPENDS = "initscripts"
+PROVIDES = "virtual/psplash"
+RPROVIDES_${PN} = "virtual/psplash"
PV = "0.0+svnr${SRCREV}"
+PR = "r2"
# You can create your own pslash-hand-img.h by doing
# ./make-image-header.sh <file>.png HAND
diff --git a/packages/psplash/psplash_svn.bb b/packages/psplash/psplash_svn.bb
index 7e0d7c6177..cb370b7627 100644
--- a/packages/psplash/psplash_svn.bb
+++ b/packages/psplash/psplash_svn.bb
@@ -3,7 +3,7 @@ require psplash-ua.inc
ALTERNATIVE_PRIORITY = "10"
-PR = "r16"
+PR = "r19"
SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=psplash;proto=http \
file://psplash-hand-img.h \
diff --git a/packages/pyneo/epydial_svn.bb b/packages/pyneo/epydial_svn.bb
deleted file mode 100644
index f0fa5a5eba..0000000000
--- a/packages/pyneo/epydial_svn.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-DESCRIPTION = "epydial"
-HOMEPAGE = "http://neo1973-germany.de/epydial"
-AUTHOR = "fgau"
-LICENSE = "GPL3"
-SECTION = "python/ui"
-DEPENDS = "edje"
-PV = "1.0+svnr${SRCREV}"
-PR = "r0"
-
-SRC_URI = "svn://neo1973-germany.de/svn;proto=http;module=epydial"
-S = "${WORKDIR}/${PN}"
-
-do_compile() {
- ./compile_theme
-}
-
-do_install() {
- install -m 0755 -d ${D}/etc/X11/Xsession.d/
- install -m 0755 ${S}/80${PN} ${D}/etc/X11/Xsession.d/
- install -m 0755 -d ${D}/usr/share/${PN}/
- install -m 0644 ${S}/*.py ${D}/usr/share/${PN}/
- install -m 0755 -d ${D}/usr/share/${PN}/data/
- install -m 0755 -d ${D}/usr/share/${PN}/data/themes/
- for n in data/themes/*/*.edj; do
- install -m 0755 -d ${D}/usr/share/${PN}/`dirname $n`
- install -m 0644 ${S}/$n ${D}/usr/share/${PN}/`dirname $n`
- done
-}
-
-RDEPENDS = "\
- task-python-efl \
- pyneod \
- pyneo \
-"
diff --git a/packages/pyneo/gsm0710muxd_1.7.bb b/packages/pyneo/gsm0710muxd_1.7.bb
deleted file mode 100644
index 23e1dbdb76..0000000000
--- a/packages/pyneo/gsm0710muxd_1.7.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "gsm 07.10 muxer userspace daemon"
-HOMEPAGE = "http://pyneo.org/muxer"
-AUTHOR = "M. Dietrich"
-LICENSE = "GPL3"
-SECTION = "console/network"
-DEPENDS = "dbus dbus-glib intltool-native"
-PR = "r6"
-
-SRC_URI = "http://pyneo.org/downloads/${PN}-${PV}.tgz"
-
-inherit autotools update-rc.d
-
-INITSCRIPT_NAME = "gsm0710muxd"
-INITSCRIPT_PARAMS = "defaults 55"
-
-FILES_${PN} += "${datadir} ${sysconfdir}"
-
-RDEPENDS = "dbus dbus-glib"
-RCONFLICTS = "gsmmux fso-gsm0710muxd"
-RREPLACES = "gsmmux"
-
diff --git a/packages/python/divmod.inc b/packages/python/divmod.inc
new file mode 100644
index 0000000000..20be1b2e38
--- /dev/null
+++ b/packages/python/divmod.inc
@@ -0,0 +1,17 @@
+SRC_URI = "http://divmod.org/trac/attachment/wiki/SoftwareReleases/${REALPN}-${PV}.tar.gz?format=raw"
+
+DEPENDS += "python-twisted-native"
+
+do_unpack2() {
+ cd ${WORKDIR}
+ tar zxvf ${REALPN}-${PV}.tar.gz?format=raw
+}
+
+addtask unpack2 after do_unpack before do_configure
+
+inherit distutils
+
+S = "${WORKDIR}/${REALPN}-${PV}"
+
+
+
diff --git a/packages/python/files/06-libffi-enable-default-mips.patch b/packages/python/files/06-libffi-enable-default-mips.patch
new file mode 100644
index 0000000000..b01f0c751d
--- /dev/null
+++ b/packages/python/files/06-libffi-enable-default-mips.patch
@@ -0,0 +1,12 @@
+Index: Python-2.6.1/Modules/_ctypes/libffi/fficonfig.py.in
+===================================================================
+--- Python-2.6.1.orig/Modules/_ctypes/libffi/fficonfig.py.in
++++ Python-2.6.1/Modules/_ctypes/libffi/fficonfig.py.in
+@@ -5,6 +5,7 @@ src/prep_cif.c
+ ffi_platforms = {
+ 'MIPS_IRIX': ['src/mips/ffi.c', 'src/mips/o32.S', 'src/mips/n32.S'],
+ 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S'],
++ 'MIPS': ['src/mips/ffi.c', 'src/mips/o32.S'],
+ 'X86': ['src/x86/ffi.c', 'src/x86/sysv.S'],
+ 'X86_FREEBSD': ['src/x86/ffi.c', 'src/x86/sysv.S'],
+ 'X86_WIN32': ['src/x86/ffi.c', 'src/x86/win32.S'],
diff --git a/packages/python/python-2.6.1/99-ignore-optimization-flag.patch b/packages/python/python-2.6.1/99-ignore-optimization-flag.patch
new file mode 100644
index 0000000000..02dc44c847
--- /dev/null
+++ b/packages/python/python-2.6.1/99-ignore-optimization-flag.patch
@@ -0,0 +1,19 @@
+# Reinstate the empty -O option to fix weird mixing of native and target
+# binaries and libraries with LD_LIBRARY_PATH when host==target
+#
+# Signed-off-by: Denys Dmytriyenko <denis@denix.org>
+
+Index: Python-2.6.1/Modules/main.c
+===================================================================
+--- Python-2.6.1-orig/Modules/main.c
++++ Python-2.6.1/Modules/main.c
+@@ -352,6 +352,9 @@ Py_Main(int argc, char **argv)
+
+ /* case 'J': reserved for Jython */
+
++ case 'O': /* ignore it */
++ break;
++
+ case 'N':
+ Py_OptimizeFlag=0;
+ break;
diff --git a/packages/python/python-coherence_0.6.0.bb b/packages/python/python-coherence_0.6.0.bb
deleted file mode 100644
index f22d1039c2..0000000000
--- a/packages/python/python-coherence_0.6.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Coherence is a DLNA/UPnP mediaserver + backends"
-SECTION = "python/devel"
-LICENSE = "MIT"
-HOMEPAGE = "http://coherence.beebits.net/wiki"
-PR = "r0"
-
-inherit setuptools
-
-SRC_URI = "http://coherence.beebits.net/download/Coherence-${PV}.tar.gz"
-S = "${WORKDIR}/Coherence-${PV}"
-
-FILES_${PN} += "${datadir}"
-
diff --git a/packages/python/python-coherence_0.6.2.bb b/packages/python/python-coherence_0.6.2.bb
new file mode 100644
index 0000000000..54eed59574
--- /dev/null
+++ b/packages/python/python-coherence_0.6.2.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Coherence is a DLNA/UPnP mediaserver + backends"
+SECTION = "devel/python"
+LICENSE = "MIT"
+HOMEPAGE = "http://coherence.beebits.net/wiki"
+PR = "r1"
+
+inherit setuptools
+
+SRC_URI = "http://coherence.beebits.net/download/Coherence-${PV}.tar.gz"
+S = "${WORKDIR}/Coherence-${PV}"
+
+FILES_${PN} += "${datadir}"
+
+DEPENDS = "libxml2 libxml2-native"
+RDEPENDS_${PN} += "python-twisted-pair python-divmodepsilon python-nevow python-gst python-dbus \
+ python-configobj python-twisted python-twisted-core python-twisted-protocols python-misc \
+ python-zopeinterface python-modules python-pygobject python-gdata \
+ python-divmodaxiom"
+
+
diff --git a/packages/python/python-coherence_svn.bb b/packages/python/python-coherence_svn.bb
new file mode 100644
index 0000000000..031067672e
--- /dev/null
+++ b/packages/python/python-coherence_svn.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Coherence is a DLNA/UPnP mediaserver + backends"
+SECTION = "devel/python"
+LICENSE = "MIT"
+HOMEPAGE = "http://coherence.beebits.net/wiki"
+
+PR = "r1"
+
+PV = "0.6.0+svnr${SRCREV}"
+
+inherit setuptools
+
+DISTUTILS_INSTALL_ARGS = "--root=${D} \
+ --prefix=${prefix} \
+ --install-data=${datadir}"
+
+SRC_URI = "svn://coherence.beebits.net/svn/trunk;module=Coherence;proto=https"
+S = "${WORKDIR}/Coherence"
+
+FILES_${PN} += "${datadir}"
+RDEPENDS_${PN} += "python-twisted-pair python-divmodepsilon python-nevow python-gst python-dbus \
+ python-configobj python-twisted python-twisted-core python-twisted-protocols python-misc \
+ python-zopeinterface zope python-modules python-pygobject python-gdata python-inotify \
+ python-divmodaxiom"
+
+
diff --git a/packages/python/python-configobj_4.5.3.bb b/packages/python/python-configobj_4.5.3.bb
new file mode 100644
index 0000000000..89ea344bae
--- /dev/null
+++ b/packages/python/python-configobj_4.5.3.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "ConfigObj is a simple but powerful config file reader and writer"
+LICENSE = "BSD"
+
+SRC_URI = "http://pypi.python.org/packages/source/C/ConfigObj/configobj-${PV}.tar.gz"
+
+inherit distutils
+
+S = "${WORKDIR}/configobj-${PV}"
+
+
diff --git a/packages/python/python-divmodaxiom_0.5.30.bb b/packages/python/python-divmodaxiom_0.5.30.bb
new file mode 100644
index 0000000000..94c8a5317b
--- /dev/null
+++ b/packages/python/python-divmodaxiom_0.5.30.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "An object oriented database"
+LICENSE = "MIT"
+
+REALPN = "Axiom"
+
+DEPENDS += "python-divmodepsilon-native"
+
+require divmod.inc
diff --git a/packages/python/python-divmodepsilon-native_0.5.11.bb b/packages/python/python-divmodepsilon-native_0.5.11.bb
new file mode 100644
index 0000000000..185708b611
--- /dev/null
+++ b/packages/python/python-divmodepsilon-native_0.5.11.bb
@@ -0,0 +1,11 @@
+require python-divmodepsilon_${PV}.bb
+inherit native
+
+DEPENDS = "python-native python-twisted-native zope-native"
+
+do_stage() {
+ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ STAGING_LIBDIR=${STAGING_LIBDIR} STAGING_INCDIR=${STAGING_INCDIR} \
+ ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR}
+}
+
diff --git a/packages/python/python-divmodepsilon_0.5.11.bb b/packages/python/python-divmodepsilon_0.5.11.bb
new file mode 100644
index 0000000000..5184b69252
--- /dev/null
+++ b/packages/python/python-divmodepsilon_0.5.11.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "A small utility package that depends on tools too recent for Twisted "
+LICENSE = "MIT"
+
+REALPN = "Epsilon"
+
+require divmod.inc
+
diff --git a/packages/python/python-dweba_0.9.9+1.0.0pre14.bb b/packages/python/python-dweba_0.9.9+1.0.0pre14.bb
new file mode 100644
index 0000000000..ddc5979eab
--- /dev/null
+++ b/packages/python/python-dweba_0.9.9+1.0.0pre14.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Dweba is a framework to develop distributed and web applications \
+for the python programming language."
+HOMEPAGE = "http://www.threekong.com"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "MIT"
+PR = "ml0"
+
+RPV = "1.0.0-pre14"
+
+SRC_URI = "http://www.threekong.com/download/dweba/dweba-${RPV}.tar.gz"
+S = "${WORKDIR}/dweba-${RPV}"
+
+inherit distutils
diff --git a/packages/python/python-elementtree_1.2.7-20070827-preview.bb b/packages/python/python-elementtree_1.2.7-20070827-preview.bb
new file mode 100644
index 0000000000..f1e4c8b322
--- /dev/null
+++ b/packages/python/python-elementtree_1.2.7-20070827-preview.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Lightweight Python components for handling XML"
+SECTION = "devel/python"
+LICENSE = "Python"
+HOMEPAGE = "http://effbot.org/zone/element-index.htm"
+PR = "r0"
+
+inherit distutils
+
+SRC_URI = "http://effbot.org/media/downloads/elementtree-${PV}.zip"
+S = "${WORKDIR}/elementtree-${PV}"
+
+FILES_${PN} += "${datadir}"
+
+
diff --git a/packages/python/python-gdata_1.2.4.bb b/packages/python/python-gdata_1.2.4.bb
new file mode 100644
index 0000000000..2e7e424976
--- /dev/null
+++ b/packages/python/python-gdata_1.2.4.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Google Data APIs Python Client Library"
+SECTION = "devel/python"
+LICENSE = "Apache"
+HOMEPAGE = "http://code.google.com/p/gdata-python-client/"
+PR = "r0"
+
+inherit distutils
+
+SRC_URI = "http://gdata-python-client.googlecode.com/files/gdata.py-${PV}.tar.gz"
+S = "${WORKDIR}/gdata.py-${PV}"
+
+FILES_${PN} += "${datadir}"
+
+RDEPENDS = "python-elementtree"
+
diff --git a/packages/python/python-native-2.5.1/bindir-libdir.patch b/packages/python/python-native-2.5.1/bindir-libdir.patch
deleted file mode 100644
index 999bddc449..0000000000
--- a/packages/python/python-native-2.5.1/bindir-libdir.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#
-# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- Python-2.3.1/Makefile.pre.in~bindir-libdir 2003-09-20 12:50:28.000000000 +0200
-+++ Python-2.3.1/Makefile.pre.in 2003-11-02 19:53:17.000000000 +0100
-@@ -78,8 +78,8 @@
- exec_prefix= @exec_prefix@
-
- # Expanded directories
--BINDIR= $(exec_prefix)/bin
--LIBDIR= $(exec_prefix)/lib
-+BINDIR= @bindir@
-+LIBDIR= @libdir@
- MANDIR= @mandir@
- INCLUDEDIR= @includedir@
- CONFINCLUDEDIR= $(exec_prefix)/include
diff --git a/packages/python/python-native-2.5.1/catchup-with-swig.patch b/packages/python/python-native-2.5.1/catchup-with-swig.patch
deleted file mode 100644
index f049b759f4..0000000000
--- a/packages/python/python-native-2.5.1/catchup-with-swig.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: Python-2.5.1/Lib/distutils/command/build_ext.py
-===================================================================
---- Python-2.5.1.orig/Lib/distutils/command/build_ext.py
-+++ Python-2.5.1/Lib/distutils/command/build_ext.py
-@@ -513,7 +513,7 @@ class build_ext (Command):
- target_lang=language)
-
-
-- def swig_sources (self, sources, extension):
-+ def swig_sources (self, sources, extension=None):
-
- """Walk the list of source files in 'sources', looking for SWIG
- interface (.i) files. Run SWIG on all that are found, and
diff --git a/packages/python/python-native-2.5.1/cross-distutils.patch b/packages/python/python-native-2.5.1/cross-distutils.patch
deleted file mode 100644
index 3356c1abbe..0000000000
--- a/packages/python/python-native-2.5.1/cross-distutils.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- Python-2.3.3/Lib/distutils/sysconfig.py~cross-distutils 2003-02-10 15:02:33.000000000 +0100
-+++ Python-2.3.3/Lib/distutils/sysconfig.py 2004-03-02 20:15:05.000000000 +0100
-@@ -19,8 +19,8 @@
- from errors import DistutilsPlatformError
-
- # These are needed in a couple of spots, so just compute them once.
--PREFIX = os.path.normpath(sys.prefix)
--EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
-+PREFIX = os.path.normpath(sys.prefix).replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
-+EXEC_PREFIX = os.path.normpath(sys.exec_prefix).replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
-
- # python_build: (Boolean) if true, we're either building Python or
- # building an extension with an un-installed Python, so we use
-@@ -192,7 +192,7 @@
- else:
- # The name of the config.h file changed in 2.2
- config_h = 'pyconfig.h'
-- return os.path.join(inc_dir, config_h)
-+ return os.path.join(inc_dir, config_h).replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
-
-
- def get_makefile_filename():
-@@ -200,7 +200,7 @@
- if python_build:
- return os.path.join(os.path.dirname(sys.executable), "Makefile")
- lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
-- return os.path.join(lib_dir, "config", "Makefile")
-+ return os.path.join(lib_dir, "config", "Makefile").replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
-
-
- def parse_config_h(fp, g=None):
diff --git a/packages/python/python-native-2.5.1/default-is-optimized.patch b/packages/python/python-native-2.5.1/default-is-optimized.patch
deleted file mode 100644
index 6beeb6e022..0000000000
--- a/packages/python/python-native-2.5.1/default-is-optimized.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: Python-2.5.1/Python/compile.c
-===================================================================
---- Python-2.5.1.orig/Python/compile.c
-+++ Python-2.5.1/Python/compile.c
-@@ -30,7 +30,7 @@
- #include "symtable.h"
- #include "opcode.h"
-
--int Py_OptimizeFlag = 0;
-+int Py_OptimizeFlag = 1;
-
- /*
- ISSUES:
diff --git a/packages/python/python-native-2.5.1/dont-modify-shebang-line.patch b/packages/python/python-native-2.5.1/dont-modify-shebang-line.patch
deleted file mode 100644
index 54109afd62..0000000000
--- a/packages/python/python-native-2.5.1/dont-modify-shebang-line.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Signed off by Michael 'Mickey' Lauer <mickey@Vanille.de>
-#
-
---- Python-2.4/Lib/distutils/command/build_scripts.py~dont-modify-shebang-line
-+++ Python-2.4/Lib/distutils/command/build_scripts.py
-@@ -87,7 +87,7 @@
- continue
-
- match = first_line_re.match(first_line)
-- if match:
-+ if False: #match:
- adjust = 1
- post_interp = match.group(1) or ''
-
diff --git a/packages/python/python-native-2.5.1/fix-staging.patch b/packages/python/python-native-2.5.1/fix-staging.patch
deleted file mode 100644
index 087c813fd4..0000000000
--- a/packages/python/python-native-2.5.1/fix-staging.patch
+++ /dev/null
@@ -1,38 +0,0 @@
----
- Lib/distutils/sysconfig.py | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
---- Python-2.5.1.orig/Lib/distutils/sysconfig.py
-+++ Python-2.5.1/Lib/distutils/sysconfig.py
-@@ -52,11 +52,14 @@ def get_python_inc(plat_specific=0, pref
-
- If 'prefix' is supplied, use it instead of sys.prefix or
- sys.exec_prefix -- i.e., ignore 'plat_specific'.
- """
- if prefix is None:
-- prefix = plat_specific and EXEC_PREFIX or PREFIX
-+ if plat_specific:
-+ prefix = plat_specific and os.environ['STAGING_INCDIR'].rstrip('include')
-+ else:
-+ prefix = plat_specific and EXEC_PREFIX or PREFIX
- if os.name == "posix":
- if python_build:
- base = os.path.dirname(os.path.abspath(sys.executable))
- if plat_specific:
- inc_dir = base
-@@ -94,11 +97,14 @@ def get_python_lib(plat_specific=0, stan
-
- If 'prefix' is supplied, use it instead of sys.prefix or
- sys.exec_prefix -- i.e., ignore 'plat_specific'.
- """
- if prefix is None:
-- prefix = plat_specific and EXEC_PREFIX or PREFIX
-+ if plat_specific:
-+ prefix = plat_specific and os.environ['STAGING_LIBDIR'].rstrip('lib')
-+ else:
-+ prefix = plat_specific and EXEC_PREFIX or PREFIX
-
- if os.name == "posix":
- libpython = os.path.join(prefix,
- "lib", "python" + get_python_version())
- if standard_lib:
diff --git a/packages/python/python-nevow_0.9.32.bb b/packages/python/python-nevow_0.9.32.bb
new file mode 100644
index 0000000000..155157c517
--- /dev/null
+++ b/packages/python/python-nevow_0.9.32.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Nevow is a web application construction kit written in Python"
+LICENSE = "MIT"
+
+REALPN = "Nevow"
+
+require divmod.inc
+
+FILES_${PN} += "${datadir}"
+DEPENDS += "python-twisted-native"
+
diff --git a/packages/python/python-pycairo_1.4.0.bb b/packages/python/python-pycairo_1.4.0.bb
index db628a5b0e..0cccd76d0f 100644
--- a/packages/python/python-pycairo_1.4.0.bb
+++ b/packages/python/python-pycairo_1.4.0.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Python Bindings for the Cairo canvas library"
-SECTION = "python-devel"
+SECTION = "devel/python"
HOMEPAGE = "http://cairographics.org/pycairo"
LICENSE = "LGPL MPL"
DEPENDS = "cairo"
diff --git a/packages/python/python-pycairo_1.8.0.bb b/packages/python/python-pycairo_1.8.0.bb
index fdcb6521f9..4e3e4633ba 100644
--- a/packages/python/python-pycairo_1.8.0.bb
+++ b/packages/python/python-pycairo_1.8.0.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Python Bindings for the Cairo canvas library"
-SECTION = "python-devel"
+SECTION = "devel/python"
HOMEPAGE = "http://cairographics.org/pycairo"
LICENSE = "LGPL MPL"
# cairo >= 1.8.0
diff --git a/packages/python/python-pycrypto_git.bb b/packages/python/python-pycrypto_git.bb
new file mode 100644
index 0000000000..9e6eecbebd
--- /dev/null
+++ b/packages/python/python-pycrypto_git.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "A collection of cryptographic algorithms and protocols"
+SECTION = "devel/python"
+PRIORITY = "optional"
+DEPENDS = "gmp"
+SRCNAME = "pycrypto"
+LICENSE = "pycrypto"
+PR = "ml0"
+
+PV = "2.0.1+gitr${SRCREV}"
+SRC_URI = "git://git.pycrypto.org:9419/crypto/pycrypto-2.x.git;protocol=git;branch=master"
+S = "${WORKDIR}/git"
+
+inherit distutils
diff --git a/packages/python/python-pyflakes_0.2.1.bb b/packages/python/python-pyflakes_0.2.1.bb
deleted file mode 100644
index 8be6d54478..0000000000
--- a/packages/python/python-pyflakes_0.2.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Python Source-Code Testing Utility"
-SECTION = "devel/python"
-HOMEPAGE = "http://divmod.org/projects/pyflakes"
-PRIORITY = "optional"
-LICENSE = "BSD"
-SRCNAME = "pyflakes"
-PR = "ml1"
-
-SRC_URI = "http://www.divmod.org/static/projects/pyflakes/pyflakes-${PV}.tar.gz"
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-inherit distutils
diff --git a/packages/python/python-pyflakes_0.3.0.bb b/packages/python/python-pyflakes_0.3.0.bb
new file mode 100644
index 0000000000..4a6580ea05
--- /dev/null
+++ b/packages/python/python-pyflakes_0.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python Source-Code Testing Utility"
+SECTION = "devel/python"
+HOMEPAGE = "http://divmod.org/projects/pyflakes"
+PRIORITY = "optional"
+LICENSE = "BSD"
+SRCNAME = "pyflakes"
+PR = "ml0"
+
+SRC_URI = "http://pypi.python.org/packages/source/p/pyflakes/${SRCNAME}-${PV}.tar.gz"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
diff --git a/packages/python/python-pygobject_2.16.0.bb b/packages/python/python-pygobject_2.16.0.bb
index ef9fe0e6c8..d7bd1c041f 100644
--- a/packages/python/python-pygobject_2.16.0.bb
+++ b/packages/python/python-pygobject_2.16.0.bb
@@ -2,9 +2,7 @@ DESCRIPTION = "Python GObject bindings"
SECTION = "devel/python"
LICENSE = "LGPL"
DEPENDS = "python-pygobject-native-${PV}"
-PR = "ml1"
-
-DEFAULT_PREFERENCE = "-1"
+PR = "ml2"
MAJ_VER = "${@bb.data.getVar('PV',d,1).split('.')[0]}.${@bb.data.getVar('PV',d,1).split('.')[1]}"
@@ -32,6 +30,8 @@ do_stage() {
PACKAGES += "${PN}-lib"
+RDEPENDS_${PN} += "python-textutils"
+
FILES_${PN} = "${libdir}/python*"
FILES_${PN}-lib = "${libdir}/lib*.so.*"
FILES_${PN}-dev += "${bindir} ${datadir}"
diff --git a/packages/python/python-pygtk-1.2_0.6.12.bb b/packages/python/python-pygtk-1.2_0.6.12.bb
index 502c4cde39..0b153ce1e5 100644
--- a/packages/python/python-pygtk-1.2_0.6.12.bb
+++ b/packages/python/python-pygtk-1.2_0.6.12.bb
@@ -5,14 +5,14 @@ LICENSE = "LGPL"
DEPENDS = "gtk+-1.2"
RDEPENDS = "python-shell python-re"
SRCNAME = "pygtk"
-PR = "r2"
+PR = "r3"
SRC_URI = "ftp://ftp.gtk.org/pub/gtk/python/v1.2/${SRCNAME}-${PV}.tar.gz \
file://remove-imlib-et-al.patch;patch=1 \
file://acinclude.m4"
S = "${WORKDIR}/${SRCNAME}-${PV}"
-inherit autotools pkgconfig distutils-base
+inherit autotools_stage pkgconfig distutils-base
EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
@@ -22,6 +22,4 @@ do_configure_prepend() {
rm -f aclocal.m4
}
-do_stage() {
- autotools_stage_includes
-}
+FILES_${PN}-dev += "${datadir}/pygtk"
diff --git a/packages/python/python-pylinda_0.6.bb b/packages/python/python-pylinda_0.6.bb
index 3c7124f2ac..a43dd7e7f8 100644
--- a/packages/python/python-pylinda_0.6.bb
+++ b/packages/python/python-pylinda_0.6.bb
@@ -6,7 +6,7 @@ LICENSE = "LGPL"
SRCNAME = "linda"
PR = "r1"
-SRC_URI = "http://www-users.cs.york.ac.uk/~aw/pylinda/dist/linda-${PV}.tar.gz \
+SRC_URI = "http://www.handhelds.org/~aquadran/distro/latest/sources/linda-${PV}.tar.gz \
file://honor-datadir.patch;patch=1"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/packages/python/python-spyro_0.9.22.bb b/packages/python/python-spyro_0.9.22.bb
deleted file mode 100644
index 9cafd883a4..0000000000
--- a/packages/python/python-spyro_0.9.22.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Simplified Python Remote Objects is a multilingual object request broker. \
-SPyRO uses the most efficient (or available) connection between peers to minimize costs \
-of transport and parsing in the communication."
-HOMEPAGE = "http://www.spyron.org/"
-SECTION = "devel/python"
-PRIORITY = "optional"
-LICENSE = "MIT"
-PR = "ml1"
-
-SRC_URI = "http://lsc.fie.umich.mx/%7esadit/spyro/download/SPyRO-${PV}.tar.gz"
-S="${WORKDIR}/SPyRO-${PV}"
-
-inherit distutils
diff --git a/packages/python/python-twisted-native_8.2.0.bb b/packages/python/python-twisted-native_8.2.0.bb
new file mode 100644
index 0000000000..d35b9f2482
--- /dev/null
+++ b/packages/python/python-twisted-native_8.2.0.bb
@@ -0,0 +1,9 @@
+require python-twisted_${PV}.bb
+
+RDEPENDS_${PN} = ""
+
+inherit native
+
+do_stage() {
+ distutils_stage_all
+}
diff --git a/packages/python/python-twisted_8.2.0.bb b/packages/python/python-twisted_8.2.0.bb
new file mode 100644
index 0000000000..78234187fb
--- /dev/null
+++ b/packages/python/python-twisted_8.2.0.bb
@@ -0,0 +1,212 @@
+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"
+PR = "r1"
+
+SRC_URI = "http://tmrc.mit.edu/mirror/twisted/Twisted/8.2/Twisted-${PV}.tar.bz2 "
+S = "${WORKDIR}/Twisted-${PV}"
+
+inherit setuptools
+
+PACKAGES += "\
+ ${PN}-zsh \
+ ${PN}-test \
+ ${PN}-protocols \
+ ${PN}-bin \
+ ${PN}-conch \
+ ${PN}-lore \
+ ${PN}-mail \
+ ${PN}-names \
+ ${PN}-news \
+ ${PN}-runner \
+ ${PN}-web \
+ ${PN}-words \
+ ${PN}-flow \
+ ${PN}-pair \
+ ${PN}-core \
+"
+
+RDEPENDS = "python-core python-zopeinterface"
+RDEPENDS_${PN} += "\
+ ${PN}-bin \
+ ${PN}-conch \
+ ${PN}-lore \
+ ${PN}-mail \
+ ${PN}-names \
+ ${PN}-news \
+ ${PN}-runner \
+ ${PN}-web \
+ ${PN}-words \
+"
+
+ALLOW_EMPTY = "1"
+FILES_${PN} = ""
+
+FILES_${PN}-test = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/test \
+"
+
+FILES_${PN}-protocols = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/ \
+"
+
+FILES_${PN}-zsh = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zsh \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zshcomp.* \
+"
+
+FILES_${PN}-bin = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/_c_urlarg.so \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/spread/cBanana.so \
+"
+
+FILES_${PN}-conch = " \
+ ${bindir}/ckeygen \
+ ${bindir}/tkconch \
+ ${bindir}/conch \
+ ${bindir}/conchftp \
+ ${bindir}/cftp \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_conch.py* \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/conch \
+"
+
+FILES_${PN}-core = " \
+${bindir}/manhole \
+${bindir}/mktap \
+${bindir}/twistd \
+${bindir}/tap2deb \
+${bindir}/tap2rpm \
+${bindir}/tapconvert \
+${bindir}/tkmktap \
+${bindir}/trial \
+${bindir}/easy_install* \
+${bindir}/pyhtmlizer \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/notestplugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/testplugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_ftp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_inet.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_manhole.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_portforward.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_socks.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_telnet.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_trial.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/dropin.cache \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/application \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/cred \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/enterprise \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/internet \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/manhole \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/manhole \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/persisted \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols\
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python\
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/timeoutqueue.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/filepath.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dxprofile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/plugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/htmlizer.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dispatch.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/hook.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/threadpool.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/otp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/usage.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/roots.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/versions.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/urlpath.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/util.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/components.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/logfile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/runtime.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/reflect.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/context.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/threadable.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/rebuild.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/failure.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/lockfile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/formmethod.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/finalize.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/win32.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dist.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/shortcut.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zipstream.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/release.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/syslog.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/log.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/compat.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zshcomp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/procutils.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/text.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/_twisted_zsh_stub \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/scripts/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/spread/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/tap/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/trial/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/_version.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/copyright.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/im.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/*.py* \
+"
+
+FILES_${PN}-lore = " \
+${bindir}/bookify \
+${bindir}/lore \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_lore.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/lore \
+"
+
+FILES_${PN}-mail = " \
+${bindir}/mailmail \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_mail.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/mail \
+"
+
+FILES_${PN}-names = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_names.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/names \
+"
+
+FILES_${PN}-news = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_news.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/news \
+"
+
+FILES_${PN}-runner = " \
+${libdir}/site-packages/twisted/runner/portmap.so \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/runner\
+"
+
+FILES_${PN}-web = " \
+${bindir}/websetroot \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_web.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/web\
+"
+
+FILES_${PN}-words = " \
+${bindir}/im \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_words.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/words\
+"
+
+FILES_${PN}-flow = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_flow.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/flow \"
+
+FILES_${PN}-pair = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_pair.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/pair \
+"
+
+FILES_${PN}-dbg += " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*/.debug \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*/.debug \
+"
diff --git a/packages/python/python-xappy_0.5.bb b/packages/python/python-xappy_0.5.bb
index ae9cda69fb..5c5f1ae6d1 100644
--- a/packages/python/python-xappy_0.5.bb
+++ b/packages/python/python-xappy_0.5.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "The xappy python module is an easy-to-use interface to the Xapian search engine"
-SECTION = "python/devel"
+SECTION = "devel/python"
LICENSE = "GPLv2"
DEPENDS = "xapian-core"
PR = "ml0"
diff --git a/packages/python/python_2.6.1.bb b/packages/python/python_2.6.1.bb
index c0eb596c02..57c64dfa55 100644
--- a/packages/python/python_2.6.1.bb
+++ b/packages/python/python_2.6.1.bb
@@ -1,7 +1,7 @@
require python.inc
DEPENDS = "python-native db gdbm openssl readline sqlite3 tcl tk zlib"
DEPENDS_sharprom = "python-native db readline zlib gdbm openssl"
-PR = "ml1"
+PR = "ml4"
SRC_URI = "\
http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \
@@ -11,6 +11,8 @@ SRC_URI = "\
file://03-fix-tkinter-detection.patch;patch=1 \
file://04-default-is-optimized.patch;patch=1 \
file://05-enable-ctypes-cross-build.patch;patch=1 \
+ file://06-libffi-enable-default-mips.patch;patch=1 \
+ file://99-ignore-optimization-flag.patch;patch=1 \
\
# not yet pushed forward
# sitecustomize, sitebranding
@@ -26,6 +28,11 @@ S = "${WORKDIR}/Python-${PV}"
inherit autotools
+# The 3 lines below are copied from the libffi recipe, ctypes ships its own copy of the libffi sources
+#Somehow gcc doesn't set __SOFTFP__ when passing -mfloatabi=softp :(
+TARGET_CC_ARCH_append_armv6 = " -D__SOFTFP__"
+TARGET_CC_ARCH_append_armv7a = " -D__SOFTFP__"
+
#
# copy config.h and an appropriate Makefile for distutils.sysconfig
# which laters uses the information out of these to compile extensions
diff --git a/packages/qhull/qhull_2003.1.bb b/packages/qhull/qhull_2003.1.bb
new file mode 100644
index 0000000000..9e19749ce1
--- /dev/null
+++ b/packages/qhull/qhull_2003.1.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Qhull computes the convex hull, Delaunay triangulation, Voronoi diagram, halfspace intersection about a point, furthest-site Delaunay triangulation, and furthest-site Voronoi diagram. "
+LICENSE = "unknown"
+
+SRC_URI = "http://www.qhull.org/download/qhull-${PV}.tar.gz"
+
+inherit autotools_stage lib_package
+
+
+
+
diff --git a/packages/qhull/tetgen_1.4.2.bb b/packages/qhull/tetgen_1.4.2.bb
new file mode 100644
index 0000000000..ce6feb54e7
--- /dev/null
+++ b/packages/qhull/tetgen_1.4.2.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A Quality Tetrahedral Mesh Generator and Three-Dimensional Delaunay Triangulator."
+LICENSE = "MIT"
+
+SRC_URI = "http://www.wias-berlin.de/people/si/tetgen${PV}.tar.gz"
+
+S = "${WORKDIR}/tetgen${PV}"
+
+CXX += " ${LDFLAGS}"
+
+do_configure() {
+ sed -i -e s:ar\ :'${AR}'\ :g makefile
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 tetgen ${D}${bindir}/
+}
+
diff --git a/packages/qi/files/sanitize-makefile.patch b/packages/qi/files/sanitize-makefile.patch
new file mode 100644
index 0000000000..cd1abf3f58
--- /dev/null
+++ b/packages/qi/files/sanitize-makefile.patch
@@ -0,0 +1,27 @@
+Index: git/Makefile
+===================================================================
+--- git.orig/Makefile
++++ git/Makefile
+@@ -16,12 +16,6 @@
+
+ include config.mk
+
+-BUILD_DATE := $(shell date)
+-BUILD_HOST := $(shell hostname)
+-BUILD_BRANCH := $(shell git branch | grep ^\* | cut -d' ' -f2)
+-BUILD_HEAD := $(shell git show --pretty=oneline | head -n1 | cut -d' ' -f1 | cut -b1-16)
+-BUILD_VERSION := ${BUILD_BRANCH}_${BUILD_HEAD}
+-
+ LDS = src/cpu/$(CPU)/qi.lds
+ INCLUDE = include
+ IMAGE_DIR = image
+@@ -73,7 +67,7 @@ all:${UDFU_IMAGE}
+ ${OBJS}:${SRCS} ${INCLUDE}/*.h
+
+ ${MKUDFU}:
+- make -C $(TOOLS)
++ gcc tools/mkudfu.c -o ${MKUDFU} -Itools/
+
+ ${UDFU_IMAGE}:${OBJS} ${MKUDFU}
+ mkdir -p image
+
diff --git a/packages/qi/qi.inc b/packages/qi/qi.inc
index ce28508fec..949a011463 100644
--- a/packages/qi/qi.inc
+++ b/packages/qi/qi.inc
@@ -1,45 +1,55 @@
-DESCRIPTION = "Qi bootloader w/ Openmoko GTA02 and GTA03 support"
+DESCRIPTION = "Qi bootloader w/ Openmoko GTA01, GTA02, and GTA03 support"
LICENSE = "GPL"
SECTION = "bootloader"
PROVIDES = "virtual/bootloader"
LOCALVERSION = "gitr${SRCREV}"
-PV = "0.0.0+${LOCALVERSION}"
+PV = "1.0.2+${LOCALVERSION}"
EXTRA_OEMAKE = ""
PARALLEL_MAKE = ""
-BUILD_BRANCH ?= "master"
-
-QI_MACHINES = "s3c2442 s3c6410"
do_configure() {
echo >config.mk
- #sed -i s,@,, Makefile
+ # uncomment to debug
+ sed -i s,@,, Makefile
+ cat >config.mk <<EOF
+
+BUILD_HOST=\$(shell hostname)
+BUILD_VERSION=${PV}
+BUILD_DATE=\$(shell date)
+
+# NOTE: The following depends on the fact that only one version of the cross-compiler
+# has been built. If it bails out with something like: "| arm-linux-ld: 4.3.3: No such file or directory"
+# then you need to remove all previously built toolchain directories out of the cross library path.
+GCCV="`${CC} -dumpversion`"
+COMPILER_LIB_PATH_PRE=${CROSS_DIR}/lib/gcc/${TARGET_SYS}/$(GCCV)
+COMPILER_LIB_PATH=\$(COMPILER_LIB_PATH_PRE)/\$(shell ls \$(COMPILER_LIB_PATH_PRE))
+
+AS=${AS}
+LD=${LD}
+CC=${HOST_PREFIX}gcc
+OBJCOPY=${OBJCOPY}
+OBJDUMP=${OBJDUMP}
+HOSTCC=${BUILD_CC}
+
+export HOSTCC BUILD_HOST BUILD_VERSION BUILD_DATE CROSS_COMPILE AD LD CC OBJCOPY OBJDUMP MKUDFU
+EOF
}
-do_compile () {
- gccv=`${CC} -dumpversion`
- for mach in ${QI_MACHINES}
- do
- ${MAKE} clean
- ${MAKE} CPU=$mach \
- HOSTCC="${BUILD_CC}" \
- COMPILER_LIB_PATH="${CROSS_DIR}/lib/gcc/${TARGET_SYS}/$gccv/" \
- BUILD_BRANCH="master" \
- BUILD_HEAD="${LOCALVERSION}"
- cp -f image/qi-$mach* ${S}
- done
+do_compile() {
+ make clean && \
+ make CPU=s3c2442 && \
+ make CPU=s3c2410 && \
+ make CPU=s3c6410
}
do_deploy () {
install -d ${DEPLOY_DIR_IMAGE}
- for mach in ${QI_MACHINES}
- do
- cat qi-$mach-${BUILD_BRANCH}_${LOCALVERSION} >> qi-$mach-${BUILD_BRANCH}_${LOCALVERSION}.udfu
- install -m 0644 qi-$mach-${BUILD_BRANCH}_${LOCALVERSION}.udfu ${DEPLOY_DIR_IMAGE}/qi-$mach-${BUILD_BRANCH}-${PV}-${PR}.bin
- ln -sf ${DEPLOY_DIR_IMAGE}/qi-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/qi-${mach}-${BUILD_BRANCH}-latest.bin
- done
+ cp -f image/qi-*.udfu ${DEPLOY_DIR_IMAGE}
}
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
do_deploy[dirs] = "${S}"
addtask deploy before do_package after do_install
addtask quilt before do_patch after do_unpack
diff --git a/packages/qi/qi_git.bb b/packages/qi/qi_git.bb
index 37bf9af11f..968f688da4 100644
--- a/packages/qi/qi_git.bb
+++ b/packages/qi/qi_git.bb
@@ -1,7 +1,9 @@
require qi.inc
-BUILD_BRANCH = "master"
PR = "r0"
-SRC_URI = "git://git.openmoko.org/git/qi.git;protocol=git;branch=${BUILD_BRANCH}"
+SRC_URI = "\
+ git://git.openmoko.org/git/qi.git;protocol=git;branch=master \
+ file://sanitize-makefile.patch;patch=1 \
+"
S = "${WORKDIR}/git"
diff --git a/packages/qmake/files/0008-backport-qt-lib-infix.patch b/packages/qmake/files/0008-backport-qt-lib-infix.patch
deleted file mode 100644
index f87576a07b..0000000000
--- a/packages/qmake/files/0008-backport-qt-lib-infix.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
-index 32a7fd5..48d584f 100644
---- a/mkspecs/features/qt_functions.prf
-+++ b/mkspecs/features/qt_functions.prf
-@@ -28,7 +28,7 @@ defineTest(qtAddLibrary) {
- INCLUDEPATH -= $$FRAMEWORK_INCLUDE
- INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
- }
-- LINKAGE = -framework $${LIB_NAME}
-+ LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX}
- } else:!qt_no_framework { #detection
- for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) {
- exists($${frmwrk_dir}/$${LIB_NAME}.framework) {
-@@ -46,15 +46,15 @@ defineTest(qtAddLibrary) {
- }
- isEmpty(LINKAGE) {
- CONFIG(debug, debug|release) {
-- win32:LINKAGE = -l$${LIB_NAME}d
-- mac:LINKAGE = -l$${LIB_NAME}_debug
-+ win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d
-+ mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug
- }
-- isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}
-+ isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
- }
- !isEmpty(QMAKE_LSB) {
- QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT
- QMAKE_LFLAGS *= -L/opt/lsb/lib
-- QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}
-+ QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}${QT_LIBINFIX}
- }
- LIBS += $$LINKAGE
- export(LIBS)
diff --git a/packages/qmake/qmake2-native_2.10a.bb b/packages/qmake/qmake2-native_2.10a.bb
index 8bc537132d..4579838b43 100644
--- a/packages/qmake/qmake2-native_2.10a.bb
+++ b/packages/qmake/qmake2-native_2.10a.bb
@@ -1,7 +1,7 @@
QTVERSION="4.4.3"
FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2-native"
-inherit cross
+inherit native
require ${PN}.inc
diff --git a/packages/qt4/qt-embedded-4.4.3/allow-configure-plugins.patch b/packages/qt4/qt-embedded-4.4.3/allow-configure-plugins.patch
deleted file mode 100644
index 601f2fc369..0000000000
--- a/packages/qt4/qt-embedded-4.4.3/allow-configure-plugins.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-Index: qtopia-core-opensource-src-4.3.3/configure
-===================================================================
---- qtopia-core-opensource-src-4.3.3.orig/configure 2008-01-20 11:42:07.000000000 +0100
-+++ qtopia-core-opensource-src-4.3.3/configure 2008-01-20 22:31:37.000000000 +0100
-@@ -639,10 +639,10 @@
-
- CFG_SQL_AVAILABLE=
- if [ -d "$relpath/src/plugins/sqldrivers" ]; then
-- for a in "$relpath/src/plugins/sqldrivers/"*; do
-- if [ -d "$a" ]; then
-- base_a=`basename $a`
-- CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${base_a}"
-+ for a in `ls $relpath/src/plugins/sqldrivers/`; do
-+ dir="$relpath/src/plugins/sqldrivers/$a"
-+ if [ -d "$dir" ]; then
-+ CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${a}"
- eval "CFG_SQL_${base_a}=auto"
- fi
- done
-@@ -650,30 +650,30 @@
-
- CFG_DECORATION_PLUGIN_AVAILABLE=
- if [ -d "$relpath/src/plugins/decorations" ]; then
-- for a in "$relpath/src/plugins/decorations/"*; do
-- if [ -d "$a" ]; then
-- base_a=`basename $a`
-- CFG_DECORATION_PLUGIN_AVAILABLE="${CFG_DECORATION_PLUGIN_AVAILABLE} ${base_a}"
-+ for a in `ls $relpath/src/plugins/decorations/`; do
-+ dir="$relpath/src/plugins/decorations/$a"
-+ if [ -d "$dir" ]; then
-+ CFG_DECORATION_PLUGIN_AVAILABLE="${CFG_DECORATION_PLUGIN_AVAILABLE} ${a}"
- fi
- done
- fi
-
- CFG_MOUSE_PLUGIN_AVAILABLE=
- if [ -d "$relpath/src/plugins/mousedrivers" ]; then
-- for a in "$relpath/src/plugins/mousedrivers/"*; do
-- if [ -d "$a" ]; then
-- base_a=`basename $a`
-- CFG_MOUSE_PLUGIN_AVAILABLE="${CFG_MOUSE_PLUGIN_AVAILABLE} ${base_a}"
-+ for a in `ls $relpath/src/plugins/mousedrivers/`; do
-+ dir="$relpath/src/plugins/mousedrivers/$a"
-+ if [ -d "$dir" ]; then
-+ CFG_MOUSE_PLUGIN_AVAILABLE="${CFG_MOUSE_PLUGIN_AVAILABLE} ${a}"
- fi
- done
- fi
-
- CFG_GFX_PLUGIN_AVAILABLE=
- if [ -d "$relpath/src/plugins/gfxdrivers" ]; then
-- for a in "$relpath/src/plugins/gfxdrivers/"*; do
-- if [ -d "$a" ]; then
-- base_a=`basename $a`
-- CFG_GFX_PLUGIN_AVAILABLE="${CFG_GFX_PLUGIN_AVAILABLE} ${base_a}"
-+ for a in `ls $relpath/src/plugins/gfxdrivers/`; do
-+ dir="$relpath/src/plugins/gfxdrivers/$a"
-+ if [ -d "$dir" ]; then
-+ CFG_GFX_PLUGIN_AVAILABLE="${CFG_GFX_PLUGIN_AVAILABLE} ${a}"
- fi
- done
- CFG_GFX_OFF="$CFG_GFX_AVAILABLE" # assume all off
diff --git a/packages/qt4/qt-embedded.inc b/packages/qt4/qt-embedded.inc
new file mode 100644
index 0000000000..7de7a80a47
--- /dev/null
+++ b/packages/qt4/qt-embedded.inc
@@ -0,0 +1,46 @@
+SUMMARY = "Qt is a versatile cross-platform application framework -- this is the embedded version."
+SECTION = "libs"
+LICENSE = "GPL"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+DEPENDS += "tslib"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \
+ file://qconfig-oe.h \
+ file://0001-cross-compile.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 \
+ file://qt-lib-infix.patch;patch=1 \
+ file://build-tools.patch;patch=1 \
+ file://support-2bpp.patch;patch=1 \
+ "
+S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}"
+
+QT_CONFIG_FLAGS += " \
+ -nomake demos -nomake examples -nomake tools -qtlibinfix E\
+ -embedded ${QT_ARCH} \
+ -qt-decoration-styled -plugin-decoration-default -plugin-decoration-windows \
+ -plugin-gfx-transformed -plugin-gfx-qvfb -plugin-gfx-vnc\
+ -plugin-mouse-tslib -qt-mouse-pc -qt-mouse-qvfb\
+ -qt-kbd-tty -qt-kbd-usb -qt-kbd-qvfb\
+ -webkit \
+ -DQT_KEYPAD_NAVIGATION \
+ "
+
+do_configure_prepend() {
+ cp ${WORKDIR}/qconfig-oe.h ${S}/src/corelib/global
+}
+
+QT_BASE_NAME = "qt-embedded"
+QT_BASE_LIB = "libqt-embedded"
+QT_DIR_NAME = "qtopia"
+QT_LIBINFIX="E"
+require qt_depends.inc
+require qt_configuration.inc
+require qt_packaging.inc
+require qt_staging.inc
+
+inherit qt4e
diff --git a/packages/qt4/qt-embedded_4.4.3.bb b/packages/qt4/qt-embedded_4.4.3.bb
index a407dd58ca..22715cc382 100644
--- a/packages/qt4/qt-embedded_4.4.3.bb
+++ b/packages/qt4/qt-embedded_4.4.3.bb
@@ -1,33 +1,2 @@
-require qtopia-core.inc
-
-PROVIDES += "qtopia-core"
-RPROVIDES_${PN} = "qtopia-core"
-
-PR = "r4"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \
- file://qconfig-oe.h \
- file://0001-cross-compile.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://qt-lib-infix.patch;patch=1 \
- file://build-tools.patch;patch=1"
-S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}"
-
-SRC_URI += " \
- file://0006-freetype-host-includes.patch;patch=1 \
- file://0007-openssl-host-includes.patch;patch=1 \
- file://support-2bpp.patch;patch=1 \
-# file://allow-configure-plugins.patch;patch=1 \
-"
-
-QT_CONFIG_FLAGS += " \
- -no-phonon -webkit \
- -DQT_KEYPAD_NAVIGATION \
- "
-
-QT_BASE_NAME = "qt-embedded"
-QT_BASE_LIB = "libqt-embedded"
-
-
+require qt-embedded.inc
+PR = "r6"
diff --git a/packages/qt4/qt4-x11-free_4.4.3.bb b/packages/qt4/qt4-x11-free_4.4.3.bb
index 1d5f924bc0..987a489e97 100644
--- a/packages/qt4/qt4-x11-free_4.4.3.bb
+++ b/packages/qt4/qt4-x11-free_4.4.3.bb
@@ -1,5 +1,5 @@
require qt4-x11-free.inc
-PR = "r3"
+PR = "r4"
SRC_URI += " \
file://0002-fix-resinit-declaration.patch;patch=1 \
diff --git a/packages/qt4/qt_configuration.inc b/packages/qt4/qt_configuration.inc
index 252a80a408..8fd5262397 100644
--- a/packages/qt4/qt_configuration.inc
+++ b/packages/qt4/qt_configuration.inc
@@ -5,8 +5,8 @@ QT_ENDIAN = "${@qt_endian(d)}"
QT_CONFIG_FLAGS += "-release -no-cups -no-accessibility -reduce-relocations \
-shared -no-nas-sound -no-sm -no-nis \
-qt-gif -system-libjpeg -system-libpng -system-zlib \
- -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
- -no-pch -qdbus -stl -glib"
+ -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
+ -no-pch -qdbus -stl -glib -phonon"
EXTRA_OEMAKE = "-e"
diff --git a/packages/qt4/qt_depends.inc b/packages/qt4/qt_depends.inc
index 289b625d0e..26cffa224f 100644
--- a/packages/qt4/qt_depends.inc
+++ b/packages/qt4/qt_depends.inc
@@ -1,3 +1,3 @@
inherit pkgconfig qmake_base
-DEPENDS += " uicmoc4-native qmake2-native freetype jpeg libpng zlib dbus openssl glib-2.0"
+DEPENDS += " uicmoc4-native qmake2-native freetype jpeg libpng zlib dbus openssl glib-2.0 gstreamer gst-plugins-base"
diff --git a/packages/qt4/qt_packaging.inc b/packages/qt4/qt_packaging.inc
index 4e8bbf6c16..68b3a406eb 100644
--- a/packages/qt4/qt_packaging.inc
+++ b/packages/qt4/qt_packaging.inc
@@ -124,8 +124,12 @@ FILES_${QT_BASE_LIB}clucene-dbg = "${libdir}/.debug/libQtCLucene*"
FILES_${QT_BASE_LIB}webkit = "${libdir}/libQtWebKit${QT_LIBINFIX}.so.*"
FILES_${QT_BASE_LIB}webkit-dev = "${@qt_default_dev('WebKit')}"
FILES_${QT_BASE_LIB}webkit-dbg = "${libdir}/.debug/libQtWebKit*"
-FILES_${QT_BASE_LIB}phonon = "${libdir}/libphonon*.so.*"
-FILES_${QT_BASE_LIB}phonon-dev = "${includedir}/qt4/phonon ${libdir}/libphonon.* ${libdir}/pkgconfig/phonon.pc"
+FILES_${QT_BASE_LIB}phonon = "${libdir}/libphonon${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}phonon-dev = "${libdir}/libphonon${QT_LIBINFIX}.la \
+ ${libdir}/libphonon${QT_LIBINFIX}.prl \
+ ${libdir}/libphonon${QT_LIBINFIX}.so \
+ ${includedir}/${QT_DIR_NAME}/phonon \
+ ${libdir}/pkgconfig/phonon${QT_LIBINFIX}.pc"
FILES_${QT_BASE_LIB}phonon-dbg = "${libdir}/.debug/libphonon*"
FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant*"
diff --git a/packages/qt4/qtopia-core/0004-no-qmake.patch b/packages/qt4/qtopia-core-4.3.3/0004-no-qmake.patch
index 28f8d3ad9d..28f8d3ad9d 100644
--- a/packages/qt4/qtopia-core/0004-no-qmake.patch
+++ b/packages/qt4/qtopia-core-4.3.3/0004-no-qmake.patch
diff --git a/packages/qt4/qtopia-core/build-tools.patch b/packages/qt4/qtopia-core-4.3.3/build-tools.patch
index 54ad666374..54ad666374 100644
--- a/packages/qt4/qtopia-core/build-tools.patch
+++ b/packages/qt4/qtopia-core-4.3.3/build-tools.patch
diff --git a/packages/qt4/qtopia-core/linux-oe-qmake.conf b/packages/qt4/qtopia-core-4.3.3/linux-oe-qmake.conf
index fc5ac6dc5c..fc5ac6dc5c 100644
--- a/packages/qt4/qtopia-core/linux-oe-qmake.conf
+++ b/packages/qt4/qtopia-core-4.3.3/linux-oe-qmake.conf
diff --git a/packages/qt4/qtopia-core.inc b/packages/qt4/qtopia-core.inc
deleted file mode 100644
index eab7e1b3e1..0000000000
--- a/packages/qt4/qtopia-core.inc
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Qt is a versatile cross-platform application framework -- this is the QtopiaCore/Embedded version."
-SECTION = "libs"
-LICENSE = "GPL"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-DEPENDS += "tslib"
-PR = "r3"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
- file://qconfig-oe.h \
- file://0001-cross-compile.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://build-tools.patch;patch=1"
-S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
-
-
-QT_CONFIG_FLAGS += " \
- -nomake demos -nomake examples -nomake tools -qtlibinfix E\
- -embedded ${QT_ARCH} \
- -qt-decoration-styled -plugin-decoration-default -plugin-decoration-windows \
- -plugin-gfx-transformed -plugin-gfx-qvfb -plugin-gfx-vnc\
- -plugin-mouse-tslib -qt-mouse-pc -qt-mouse-qvfb\
- -qt-kbd-tty -qt-kbd-usb -qt-kbd-qvfb\
- ${QT_QCONFIG} \
- "
-
-do_configure_prepend() {
- cp ${WORKDIR}/qconfig-oe.h ${S}/src/corelib/global
-}
-
-QT_QCONFIG = ""
-QT_BASE_NAME = "qtopiacore"
-QT_BASE_LIB = "libqtopiacore"
-QT_DIR_NAME = "qtopia"
-QT_LIBINFIX="E"
-require qt_depends.inc
-require qt_configuration.inc
-require qt_packaging.inc
-require qt_staging.inc
-
-inherit qtopia4core
diff --git a/packages/qt4/qtopia-core_4.3.3.bb b/packages/qt4/qtopia-core_4.3.3.bb
index 40ec78ef04..7888a8e7d3 100644
--- a/packages/qt4/qtopia-core_4.3.3.bb
+++ b/packages/qt4/qtopia-core_4.3.3.bb
@@ -1,6 +1,46 @@
-require qtopia-core.inc
-SRC_URI += " \
+SUMMARY = "Qt is a versatile cross-platform application framework -- this is the embedded version."
+SECTION = "libs"
+LICENSE = "GPL"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+DEPENDS += "tslib"
+PR = "r4"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
+ file://qconfig-oe.h \
+ file://0001-cross-compile.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://build-tools.patch;patch=1 \
file://0006-freetype-host-includes.patch;patch=1 \
file://0007-openssl-host-includes.patch;patch=1 \
file://0008-backport-qt-lib-infix.patch;patch=1 \
file://allow-configure-plugins.patch;patch=1 "
+S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
+
+QT_CONFIG_FLAGS += " \
+ -nomake demos -nomake examples -nomake tools -qtlibinfix E\
+ -embedded ${QT_ARCH} \
+ -qt-decoration-styled -plugin-decoration-default -plugin-decoration-windows \
+ -plugin-gfx-transformed -plugin-gfx-qvfb -plugin-gfx-vnc\
+ -plugin-mouse-tslib -qt-mouse-pc -qt-mouse-qvfb\
+ -qt-kbd-tty -qt-kbd-usb -qt-kbd-qvfb\
+ ${QT_QCONFIG} \
+ "
+
+do_configure_prepend() {
+ cp ${WORKDIR}/qconfig-oe.h ${S}/src/corelib/global
+}
+
+QT_QCONFIG = ""
+QT_BASE_NAME = "qtopiacore"
+QT_BASE_LIB = "libqtopiacore"
+QT_DIR_NAME = "qtopia"
+QT_LIBINFIX="E"
+require qt_depends.inc
+require qt_configuration.inc
+require qt_packaging.inc
+require qt_staging.inc
+
+inherit qtopia4core
diff --git a/packages/qt4/qtopia-core_4.4.3.bb b/packages/qt4/qtopia-core_4.4.3.bb
deleted file mode 100644
index 061fd2cd6c..0000000000
--- a/packages/qt4/qtopia-core_4.4.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-#Empty recipe to break a recursive loop
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_angstrom = "1"
-
-#keep in sync with qt-embedded_${PV}.bb
-PR = "r1"
diff --git a/packages/resolvconf/resolvconf_1.28.bb b/packages/resolvconf/resolvconf_1.28.bb
deleted file mode 100644
index 48017bce27..0000000000
--- a/packages/resolvconf/resolvconf_1.28.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "Resolvconf is a framework for keeping track of the system's \
-information about currently available nameservers. It sets \
-itself up as the intermediary between programs that supply \
-nameserver information and programs that need nameserver \
-information."
-SECTION = "console/network"
-LICENSE = "GPL"
-AUTHOR = "Thomas Hood"
-HOMEPAGE = "http://packages.debian.org/resolvconf"
-DEPENDS = "bash"
-RDEPENDS = "bash"
-PR = "r2"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/r/resolvconf/resolvconf_${PV}.tar.gz"
-
-do_compile () {
- :
-}
-
-do_install () {
- install -d ${D}${sysconfdir} ${D}${sbindir} ${D}${base_sbindir} ${D}${localstatedir}/run/resolvconf/interface
- install -d ${D}${mandir}/man8 ${D}${docdir}/${P}
- cp -pPR etc/* ${D}${sysconfdir}/
- mkdir -p ${D}${sysconfdir}/resolvconf/run/interface
- install -m 0755 bin/resolvconf ${D}${base_sbindir}/
- install -m 0644 README ${D}${docdir}/${P}/
- install -m 0644 man/resolvconf.8 ${D}${mandir}/man8/
-}
diff --git a/packages/resolvconf/resolvconf_1.41.bb b/packages/resolvconf/resolvconf_1.43.bb
index 2c210ef1ec..2c210ef1ec 100644
--- a/packages/resolvconf/resolvconf_1.41.bb
+++ b/packages/resolvconf/resolvconf_1.43.bb
diff --git a/packages/rpm2cpio/rpm2cpio-native_1.2_2.bb b/packages/rpm2cpio/rpm2cpio-native_1.2_2.bb
index 3a12fba3ca..6670896a5e 100644
--- a/packages/rpm2cpio/rpm2cpio-native_1.2_2.bb
+++ b/packages/rpm2cpio/rpm2cpio-native_1.2_2.bb
@@ -4,7 +4,7 @@
DEPENDS="perl-native"
LICENSE="BSD"
-SRC_URI="${FREEBSD_MIRROR}/ports/packages/archivers/rpm2cpio-1.2_2.tbz"
+SRC_URI="http://www.freebsd.org/cgi/cvsweb.cgi/%7Echeckout%7E/ports/archivers/rpm2cpio/files/rpm2cpio?rev=1.2"
inherit native
@@ -15,7 +15,7 @@ do_compile() {
do_stage() {
install -d ${STAGING_BINDIR}
- sed -e '1,1s|${bindir}/|${bindir}/env |' bin/rpm2cpio.pl \
+ sed -e '1,1s|${bindir}/|${bindir}/env |' "rpm2cpio?rev=1.2" \
> ${STAGING_BINDIR}/rpm2cpio.pl
my_PERL="/usr/bin/env perl"
diff --git a/packages/rt-tests/rt-tests_0.21.bb b/packages/rt-tests/rt-tests_0.21.bb
deleted file mode 100644
index 83600d5329..0000000000
--- a/packages/rt-tests/rt-tests_0.21.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Real-time tests, such as cyclictest, for real-time linux PREEMPT RT kernels"
-HOMEPAGE = "http://rt.wiki.kernel.org/index.php/Cyclictest"
-LICENSE = "GPL"
-PR = "r2"
-
-SRC_URI = "http://www.kernel.org/pub/linux/kernel/people/tglx/rt-tests/rt-tests-${PV}.tar.bz2"
-
-S = "${WORKDIR}/rt-tests"
-
-# Limit to cyclictest only for non-real-time kernels.
-# EXTRA_OEMAKE = "cyclictest"
-
-do_install() {
- install -d ${D}${bindir}
- # any file that is executable by user and/or group
- for binary in `find . -perm /u+x,g+x -type f`
- do
- install -m 0755 $binary ${D}${bindir}
- done
-}
diff --git a/packages/rt-tests/rt-tests_0.28.bb b/packages/rt-tests/rt-tests_0.28.bb
new file mode 100644
index 0000000000..4c278ccd2d
--- /dev/null
+++ b/packages/rt-tests/rt-tests_0.28.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Real-time tests, such as cyclictest, for real-time linux PREEMPT RT kernels"
+HOMEPAGE = "http://rt.wiki.kernel.org/index.php/Cyclictest"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.kernel.org/pub/linux/kernel/people/tglx/rt-tests/rt-tests-${PV}.tar.bz2"
+
+S = "${WORKDIR}/rt-tests"
+
+# Limit to cyclictest only for non-real-time kernels.
+# EXTRA_OEMAKE = "cyclictest"
+
+do_install() {
+ install -d ${D}${bindir}
+ # any file that is executable by user and/or group
+ for binary in `find . -perm /u+x,g+x -type f`
+ do
+ install -m 0755 $binary ${D}${bindir}
+ done
+}
diff --git a/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb b/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb
index b22a3955a6..32d17f3e56 100644
--- a/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb
+++ b/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb
@@ -3,6 +3,8 @@ HOMEPAGE = "http://rt2x00.serialmonkey.com/"
SECTION = "kernel/modules"
LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "http://homepages.tu-darmstadt.de/~p_larbig/wlan/${PN}-${PV}.tar.bz2"
inherit module
diff --git a/packages/rt2x00/rt2570-k2wrlz_1.6.1.bb b/packages/rt2x00/rt2570-k2wrlz_1.6.1.bb
index 78589a5c64..98fe660177 100644
--- a/packages/rt2x00/rt2570-k2wrlz_1.6.1.bb
+++ b/packages/rt2x00/rt2570-k2wrlz_1.6.1.bb
@@ -3,6 +3,8 @@ HOMEPAGE = "http://homepages.tu-darmstadt.de/~p_larbig/wlan"
SECTION = "kernel/modules"
LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "http://homepages.tu-darmstadt.de/~p_larbig/wlan/${PN}-${PV}.tar.bz2"
inherit module
diff --git a/packages/rt2x00/rt2570_1.1.0-b2.bb b/packages/rt2x00/rt2570_1.1.0-b2.bb
index a3cc233351..4d4ef038c6 100644
--- a/packages/rt2x00/rt2570_1.1.0-b2.bb
+++ b/packages/rt2x00/rt2570_1.1.0-b2.bb
@@ -3,6 +3,8 @@ HOMEPAGE = "http://rt2x00.serialmonkey.com/"
SECTION = "kernel/modules"
LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "${SOURCEFORGE_MIRROR}/rt2400/rt2570-${PV}.tar.gz"
inherit module
diff --git a/packages/rt2x00/rt61-firmware_1.2.bb b/packages/rt2x00/rt61-firmware_1.2.bb
new file mode 100644
index 0000000000..ae683c8060
--- /dev/null
+++ b/packages/rt2x00/rt61-firmware_1.2.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Firmware for rt61 based USB wifi adaptors"
+LICENSE = "unknown"
+
+SRC_URI = "http://www.ralinktech.com.tw/data/RT61_Firmware_V${PV}.zip"
+
+S = "${WORKDIR}/RT61_Firmware_V${PV}"
+
+do_install() {
+ install -d ${D}/${base_libdir}/firmware
+ install -m 0644 rt61.bin ${D}/${base_libdir}/firmware/
+}
+
+FILES_${PN} = "${base_libdir}/firmware/"
+PACKAGE_ARCH = "all"
diff --git a/packages/rt2x00/rt73-chumby_1.2.bb b/packages/rt2x00/rt73-chumby_1.2.bb
index 3d6cd0cb51..3c03fc94a8 100644
--- a/packages/rt2x00/rt73-chumby_1.2.bb
+++ b/packages/rt2x00/rt73-chumby_1.2.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Driver for Ralink rt73 USB 802.11g WiFi sticks found in the Chumb
HOMEPAGE = "http://www.chumby.com"
SECTION = "kernel/modules"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
SRC_URI="http://files.chumby.com/source/ironforge/build396/${PN}-${PV}.tar.gz"
diff --git a/packages/rt2x00/rt73-firmware_1.8.bb b/packages/rt2x00/rt73-firmware_1.8.bb
index 288acfd68f..0f3a2e4a5c 100644
--- a/packages/rt2x00/rt73-firmware_1.8.bb
+++ b/packages/rt2x00/rt73-firmware_1.8.bb
@@ -1,6 +1,8 @@
DESCRIPTION = "Firmware for rt73 based USB wifi adaptors"
LICENSE = "unknown"
+PR = "r1"
+
SRC_URI = "http://www.ralinktech.com.tw/data/RT71W_Firmware_V${PV}.zip"
S = "${WORKDIR}/RT71W_Firmware_V${PV}"
diff --git a/packages/rt2x00/rt73-k2wrlz_1.0.0.bb b/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
index 094cb264a3..39b146a99f 100644
--- a/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
+++ b/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
@@ -2,7 +2,7 @@ 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"
-PR = "r1"
+PR = "r2"
SRC_URI= "http://homepages.tu-darmstadt.de/~p_larbig/wlan/rt73-k2wrlz-1.0.0.tar.bz2"
inherit module
diff --git a/packages/rt2x00/rt73-k2wrlz_2.0.1.bb b/packages/rt2x00/rt73-k2wrlz_2.0.1.bb
index 93d371986a..b9f6fa1145 100644
--- a/packages/rt2x00/rt73-k2wrlz_2.0.1.bb
+++ b/packages/rt2x00/rt73-k2wrlz_2.0.1.bb
@@ -2,7 +2,7 @@ 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"
-PR = "r1"
+PR = "r2"
SRC_URI="http://homepages.tu-darmstadt.de/~p_larbig/wlan/${PN}-${PV}.tar.bz2"
diff --git a/packages/rt2x00/rt73-k2wrlz_3.0.0.bb b/packages/rt2x00/rt73-k2wrlz_3.0.0.bb
index 68b6b5710b..b9f6fa1145 100644
--- a/packages/rt2x00/rt73-k2wrlz_3.0.0.bb
+++ b/packages/rt2x00/rt73-k2wrlz_3.0.0.bb
@@ -2,7 +2,7 @@ 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"
-PR = "r0"
+PR = "r2"
SRC_URI="http://homepages.tu-darmstadt.de/~p_larbig/wlan/${PN}-${PV}.tar.bz2"
diff --git a/packages/ruby/files/openssl.patch b/packages/ruby/files/openssl.patch
new file mode 100644
index 0000000000..9de37ef3e7
--- /dev/null
+++ b/packages/ruby/files/openssl.patch
@@ -0,0 +1,156 @@
+This patch backports changes from ruby 1.8.7 which only includes the
+openssl prototypes for functions that are not in the system openssl
+library.
+
+diff -u ruby-1.8.5.orig/ext/openssl/extconf.rb ruby-1.8.5/ext/openssl/extconf.rb
+--- ruby-1.8.5.orig/ext/openssl/openssl_missing.c 2007-02-13 00:01:19.000000000 +0100
++++ ruby-1.8.5/ext/openssl/openssl_missing.c 2008-05-19 05:00:52.000000000 +0200
+@@ -22,17 +22,15 @@
+ #include "openssl_missing.h"
+
+ #if !defined(HAVE_HMAC_CTX_COPY)
+-int
++void
+ HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in)
+ {
+- if (!out || !in) return 0;
++ if (!out || !in) return;
+ memcpy(out, in, sizeof(HMAC_CTX));
+
+- if (!EVP_MD_CTX_copy(&out->md_ctx, &in->md_ctx)
+- || !EVP_MD_CTX_copy(&out->i_ctx, &in->i_ctx)
+- || !EVP_MD_CTX_copy(&out->o_ctx, &in->o_ctx))
+- return 0;
+- return 1;
++ EVP_MD_CTX_copy(&out->md_ctx, &in->md_ctx);
++ EVP_MD_CTX_copy(&out->i_ctx, &in->i_ctx);
++ EVP_MD_CTX_copy(&out->o_ctx, &in->o_ctx);
+ }
+ #endif /* HAVE_HMAC_CTX_COPY */
+ #endif /* NO_HMAC */
+diff -u ruby-1.8.5.orig/ext/openssl/openssl_missing.h ruby-1.8.5/ext/openssl/openssl_missing.h
+--- ruby-1.8.5.orig/ext/openssl/openssl_missing.h 2008-08-04 06:43:34.000000000 +0200
++++ ruby-1.8.5/ext/openssl/openssl_missing.h 2008-08-04 06:44:17.000000000 +0200
+@@ -60,14 +60,33 @@
+ (char *(*)())d2i_PKCS7_RECIP_INFO, (char *)ri)
+ #endif
+
++#if !defined(HAVE_EVP_MD_CTX_INIT)
+ void HMAC_CTX_init(HMAC_CTX *ctx);
+-int HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in);
++#endif
++
++#if !defined(HAVE_HMAC_CTX_COPY)
++void HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in);
++#endif
++
++#if !defined(HAVE_HMAC_CTX_CLEANUP)
+ void HMAC_CTX_cleanup(HMAC_CTX *ctx);
++#endif
+
++#if !defined(HAVE_EVP_MD_CTX_CREATE)
+ EVP_MD_CTX *EVP_MD_CTX_create(void);
++#endif
++
++#if !defined(HAVE_EVP_MD_CTX_INIT)
+ void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
++#endif
++
++#if !defined(HAVE_EVP_MD_CTX_CLEANUP)
+ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
++#endif
++
++#if !defined(HAVE_EVP_MD_CTX_DESTROY)
+ void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
++#endif
+
+ #if !defined(HAVE_EVP_CIPHER_CTX_COPY)
+ int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in);
+@@ -111,19 +130,54 @@
+ #define OPENSSL_cleanse(p, l) memset(p, 0, l)
+ #endif
+
++#if !defined(HAVE_X509_STORE_SET_EX_DATA)
+ void *X509_STORE_get_ex_data(X509_STORE *str, int idx);
+ int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data);
++#endif
++
++#if !defined(HAVE_X509_CRL_SET_VERSION)
+ int X509_CRL_set_version(X509_CRL *x, long version);
++#endif
++
++#if !defined(HAVE_X509_CRL_SET_ISSUER_NAME)
+ int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);
++#endif
++
++#if !defined(HAVE_X509_CRL_SORT)
+ int X509_CRL_sort(X509_CRL *c);
++#endif
++
++#if !defined(HAVE_X509_CRL_ADD0_REVOKED)
+ int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
++#endif
++
++#if !defined(HAVE_BN_MOD_SQR)
+ int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
++#endif
++
++#if !defined(HAVE_BN_MOD_ADD)
+ int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
++#endif
++
++#if !defined(HAVE_BN_MOD_SUB)
+ int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
++#endif
++
++#if !defined(HAVE_BN_RAND_RANGE)
+ int BN_rand_range(BIGNUM *r, BIGNUM *range);
++#endif
++
++#if !defined(HAVE_BN_PSEUDO_RAND_RANGE)
+ int BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range);
++#endif
++
++#if !defined(HAVE_CONF_GET1_DEFAULT_CONFIG_FILE)
+ char *CONF_get1_default_config_file(void);
++#endif
++
++#if !defined(HAVE_PEM_DEF_CALLBACK)
+ int PEM_def_callback(char *buf, int num, int w, void *key);
++#endif
+
+ #if defined(__cplusplus)
+ }
+diff -u ruby-1.8.5.orig/ext/openssl/ossl_hmac.c ruby-1.8.5/ext/openssl/ossl_hmac.c
+--- ruby-1.8.5.orig/ext/openssl/ossl_hmac.c 2007-03-12 05:12:32.000000000 +0100
++++ ruby-1.8.5/ext/openssl/ossl_hmac.c 2008-05-19 05:00:52.000000000 +0200
+@@ -81,12 +87,15 @@
+ GetHMAC(self, ctx1);
+ SafeGetHMAC(other, ctx2);
+
+- if (!HMAC_CTX_copy(ctx1, ctx2)) {
+- ossl_raise(eHMACError, NULL);
+- }
++ HMAC_CTX_copy(ctx1, ctx2);
+ return self;
+ }
+
++/*
++ * call-seq:
++ * hmac.update(string) -> self
++ *
++ */
+ static VALUE
+ ossl_hmac_update(VALUE self, VALUE data)
+ {
+@@ -104,9 +113,7 @@
+ {
+ HMAC_CTX final;
+
+- if (!HMAC_CTX_copy(&final, ctx)) {
+- ossl_raise(eHMACError, NULL);
+- }
++ HMAC_CTX_copy(&final, ctx);
+ if (!(*buf = OPENSSL_malloc(HMAC_size(&final)))) {
+ HMAC_CTX_cleanup(&final);
+ OSSL_Debug("Allocating %d mem", HMAC_size(&final));
diff --git a/packages/ruby/ruby.inc b/packages/ruby/ruby.inc
index 9fe8333f6f..978bf4b229 100644
--- a/packages/ruby/ruby.inc
+++ b/packages/ruby/ruby.inc
@@ -6,6 +6,7 @@ LICENSE = "GPL"
SRC_URI = "ftp://ftp.ruby-lang.org/pub/ruby/ruby-${PV}.tar.gz \
file://extmk_run.patch;patch=1 \
+ file://openssl.patch;patch=1 \
file://disable_wide_getaddrinfo_check.patch;patch=1"
S = "${WORKDIR}/ruby-${PV}"
diff --git a/packages/samba/samba-3.2.7/config-h.patch b/packages/samba/files/config-h.patch
index eeb22684ee..eeb22684ee 100644
--- a/packages/samba/samba-3.2.7/config-h.patch
+++ b/packages/samba/files/config-h.patch
diff --git a/packages/samba/files/configure-3.2.8.patch b/packages/samba/files/configure-3.2.8.patch
new file mode 100644
index 0000000000..2668b9d632
--- /dev/null
+++ b/packages/samba/files/configure-3.2.8.patch
@@ -0,0 +1,92 @@
+diff -urN source.old//configure source//configure
+--- source.old//configure 2009-02-03 16:34:41.000000000 +0000
++++ source//configure 2009-02-06 00:25:49.502205687 +0000
+@@ -43860,13 +43860,14 @@
+ *linux*)
+ # glibc <= 2.3.2 has a broken getgrouplist
+ if test "$cross_compiling" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
++# { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++#$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++#{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
++#See \`config.log' for more details." >&5
++#$as_echo "$as_me: error: cannot run test program while cross compiling
++#See \`config.log' for more details." >&2;}
++# { (exit 1); exit 1; }; }; }
++linux_getgrouplist_ok=no
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+diff -urN source.old//configure.in source//configure.in
+--- source.old//configure.in 2009-02-03 16:10:07.000000000 +0000
++++ source//configure.in 2009-02-06 00:23:27.346211236 +0000
+@@ -275,6 +275,8 @@
+ fi
+ AC_SUBST(BROKEN_CC)
+
++AC_TRY_COMPILE([],[(void)sizeof(char[-1])],AC_MSG_ERROR([configure's compilation assert doesn't work with $CC]))
++
+ dnl Check if the C compiler understands -Werror
+ AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
+ AC_TRY_RUN_STRICT([
+@@ -325,25 +327,11 @@
+ # a runtime test is needed here
+ AC_SUBST(PIDL_ARGS)
+ AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
+- AC_TRY_RUN(
++ AC_TRY_COMPILE([],
+ [
+- #include <stdio.h>
+ enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
+- int main(void) {
+- enum negative_values v1 = NEGATIVE_VALUE;
+- unsigned v2 = NEGATIVE_VALUE;
+-
+- if (v1 != 0xFFFFFFFF) {
+- printf("%u != 0xFFFFFFFF\n", v1);
+- return 1;
+- }
+- if (v2 != 0xFFFFFFFF) {
+- printf("%u != 0xFFFFFFFF\n", v2);
+- return 1;
+- }
+-
+- return 0;
+- }
++ (void)sizeof(char[1-2*( (unsigned)NEGATIVE_VALUE != 0xFFFFFFFF)]);
++ (void)sizeof(char[1-2*((enum negative_values)NEGATIVE_VALUE != 0xFFFFFFFF)]);
+ ],
+ samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
+ if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
+@@ -1204,22 +1192,12 @@
+ case "$host_os" in
+ *linux*)
+ # glibc <= 2.3.2 has a broken getgrouplist
+- AC_TRY_RUN([
+-#include <unistd.h>
++ AC_TRY_COMPILE([
+ #include <sys/utsname.h>
+-main() {
+- /* glibc up to 2.3 has a broken getgrouplist */
++],[
+ #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
+- int libc_major = __GLIBC__;
+- int libc_minor = __GLIBC_MINOR__;
+-
+- if (libc_major < 2)
+- exit(1);
+- if ((libc_major == 2) && (libc_minor <= 3))
+- exit(1);
++ (void)sizeof(char[1-2*(__GLIBC__ < 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)]);
+ #endif
+- exit(0);
+-}
+ ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
+ if test x"$linux_getgrouplist_ok" = x"yes"; then
+ AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
diff --git a/packages/samba/files/configure-3.3.0.patch b/packages/samba/files/configure-3.3.0.patch
new file mode 100644
index 0000000000..19fb9864da
--- /dev/null
+++ b/packages/samba/files/configure-3.3.0.patch
@@ -0,0 +1,85 @@
+diff -urN source.old//configure source//configure
+--- source.old//configure 2009-01-27 07:53:11.000000000 +0000
++++ source//configure 2009-01-31 21:07:25.811887936 +0000
+@@ -43860,13 +43860,7 @@
+ *linux*)
+ # glibc <= 2.3.2 has a broken getgrouplist
+ if test "$cross_compiling" = yes; then
+- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-$as_echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+- { (exit 1); exit 1; }; }; }
++linux_getgrouplist_ok=no
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+diff -urN source.old//configure.in source//configure.in
+--- source.old//configure.in 2009-01-26 13:56:34.000000000 +0000
++++ source//configure.in 2009-01-31 21:04:39.051889949 +0000
+@@ -280,6 +280,8 @@
+ fi
+ AC_SUBST(BROKEN_CC)
+
++AC_TRY_COMPILE([],[(void)sizeof(char[-1])],AC_MSG_ERROR([configure's compilation assert doesn't work with $CC]))
++
+ dnl Check if the C compiler understands -Werror
+ AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
+ AC_TRY_RUN_STRICT([
+@@ -330,25 +332,11 @@
+ # a runtime test is needed here
+ AC_SUBST(PIDL_ARGS)
+ AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
+- AC_TRY_RUN(
++ AC_TRY_COMPILE([],
+ [
+- #include <stdio.h>
+ enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
+- int main(void) {
+- enum negative_values v1 = NEGATIVE_VALUE;
+- unsigned v2 = NEGATIVE_VALUE;
+-
+- if (v1 != 0xFFFFFFFF) {
+- printf("%u != 0xFFFFFFFF\n", v1);
+- return 1;
+- }
+- if (v2 != 0xFFFFFFFF) {
+- printf("%u != 0xFFFFFFFF\n", v2);
+- return 1;
+- }
+-
+- return 0;
+- }
++ (void)sizeof(char[1-2*( (unsigned)NEGATIVE_VALUE != 0xFFFFFFFF)]);
++ (void)sizeof(char[1-2*((enum negative_values)NEGATIVE_VALUE != 0xFFFFFFFF)]);
+ ],
+ samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
+ if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
+@@ -1224,22 +1212,12 @@
+ case "$host_os" in
+ *linux*)
+ # glibc <= 2.3.2 has a broken getgrouplist
+- AC_TRY_RUN([
+-#include <unistd.h>
++ AC_TRY_COMPILE([
+ #include <sys/utsname.h>
+-main() {
+- /* glibc up to 2.3 has a broken getgrouplist */
++],[
+ #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
+- int libc_major = __GLIBC__;
+- int libc_minor = __GLIBC_MINOR__;
+-
+- if (libc_major < 2)
+- exit(1);
+- if ((libc_major == 2) && (libc_minor <= 3))
+- exit(1);
++ (void)sizeof(char[1-2*(__GLIBC__ < 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)]);
+ #endif
+- exit(0);
+-}
+ ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
+ if test x"$linux_getgrouplist_ok" = x"yes"; then
+ AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
diff --git a/packages/samba/samba-3.2.7/mtab.patch b/packages/samba/files/mtab.patch
index 2ee8ba0941..2ee8ba0941 100644
--- a/packages/samba/samba-3.2.7/mtab.patch
+++ b/packages/samba/files/mtab.patch
diff --git a/packages/samba/files/smb.conf b/packages/samba/files/smb.conf
index 3854621c3e..f07e3e4ec7 100644
--- a/packages/samba/files/smb.conf
+++ b/packages/samba/files/smb.conf
@@ -160,7 +160,7 @@
#============================ Share Definitions ==============================
[homes]
comment = Home Directories
- browseable = no
+ browseable = yes
writable = yes
# Un-comment the following and create the netlogon directory for Domain Logons
diff --git a/packages/samba/files/volatiles.03_samba b/packages/samba/files/volatiles.03_samba
new file mode 100644
index 0000000000..469bc9e7b0
--- /dev/null
+++ b/packages/samba/files/volatiles.03_samba
@@ -0,0 +1,2 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d root root 0755 /var/log/samba none
diff --git a/packages/samba/samba-3.0.34/smb.conf b/packages/samba/samba-3.0.34/smb.conf
deleted file mode 100644
index 3854621c3e..0000000000
--- a/packages/samba/samba-3.0.34/smb.conf
+++ /dev/null
@@ -1,266 +0,0 @@
-# This is the main Samba configuration file. You should read the
-# smb.conf(5) manual page in order to understand the options listed
-# here. Samba has a huge number of configurable options (perhaps too
-# many!) most of which are not shown in this example
-#
-# For a step to step guide on installing, configuring and using samba,
-# read the Samba-HOWTO-Collection. This may be obtained from:
-# http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
-#
-# Many working examples of smb.conf files can be found in the
-# Samba-Guide which is generated daily and can be downloaded from:
-# http://www.samba.org/samba/docs/Samba-Guide.pdf
-#
-# Any line which starts with a ; (semi-colon) or a # (hash)
-# is a comment and is ignored. In this example we will use a #
-# for commentry and a ; for parts of the config file that you
-# may wish to enable
-#
-# NOTE: Whenever you modify this file you should run the command "testparm"
-# to check that you have not made any basic syntactic errors.
-#
-#======================= Global Settings =====================================
-[global]
-
-# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
- workgroup = MYGROUP
-
-# server string is the equivalent of the NT Description field
- server string = Samba Server
-
-# Security mode. Defines in which mode Samba will operate. Possible
-# values are share, user, server, domain and ads. Most people will want
-# user level security. See the Samba-HOWTO-Collection for details.
- security = user
-
-# This option is important for security. It allows you to restrict
-# connections to machines which are on your local network. The
-# following example restricts access to two C class networks and
-# the "loopback" interface. For more examples of the syntax see
-# the smb.conf man page
-; hosts allow = 192.168.1. 192.168.2. 127.
-
-# If you want to automatically load your printer list rather
-# than setting them up individually then you'll need this
- load printers = yes
-
-# you may wish to override the location of the printcap file
-; printcap name = /etc/printcap
-
-# on SystemV system setting printcap name to lpstat should allow
-# you to automatically obtain a printer list from the SystemV spool
-# system
-; printcap name = lpstat
-
-# It should not be necessary to specify the print system type unless
-# it is non-standard. Currently supported print systems include:
-# bsd, cups, sysv, plp, lprng, aix, hpux, qnx
-; printing = cups
-
-# Uncomment this if you want a guest account, you must add this to /etc/passwd
-# otherwise the user "nobody" is used
-; guest account = pcguest
-
-# this tells Samba to use a separate log file for each machine
-# that connects
- log file = /var/log/samba/log.%m
-
-# Put a capping on the size of the log files (in Kb).
- max log size = 50
-
-# Use password server option only with security = server
-# The argument list may include:
-# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
-# or to auto-locate the domain controller/s
-# password server = *
-; password server = <NT-Server-Name>
-
-# Use the realm option only with security = ads
-# Specifies the Active Directory realm the host is part of
-; realm = MY_REALM
-
-# Backend to store user information in. New installations should
-# use either tdbsam or ldapsam. smbpasswd is available for backwards
-# compatibility. tdbsam requires no further configuration.
-; passdb backend = tdbsam
-
-# Using the following line enables you to customise your configuration
-# on a per machine basis. The %m gets replaced with the netbios name
-# of the machine that is connecting.
-# Note: Consider carefully the location in the configuration file of
-# this line. The included file is read at that point.
-; include = /usr/local/samba/lib/smb.conf.%m
-
-# Configure Samba to use multiple interfaces
-# If you have multiple network interfaces then you must list them
-# here. See the man page for details.
-; interfaces = 192.168.12.2/24 192.168.13.2/24
-
-# Browser Control Options:
-# set local master to no if you don't want Samba to become a master
-# browser on your network. Otherwise the normal election rules apply
-; local master = no
-
-# OS Level determines the precedence of this server in master browser
-# elections. The default value should be reasonable
-; os level = 33
-
-# Domain Master specifies Samba to be the Domain Master Browser. This
-# allows Samba to collate browse lists between subnets. Don't use this
-# if you already have a Windows NT domain controller doing this job
-; domain master = yes
-
-# Preferred Master causes Samba to force a local browser election on startup
-# and gives it a slightly higher chance of winning the election
-; preferred master = yes
-
-# Enable this if you want Samba to be a domain logon server for
-# Windows95 workstations.
-; domain logons = yes
-
-# if you enable domain logons then you may want a per-machine or
-# per user logon script
-# run a specific logon batch file per workstation (machine)
-; logon script = %m.bat
-# run a specific logon batch file per username
-; logon script = %U.bat
-
-# Where to store roving profiles (only for Win95 and WinNT)
-# %L substitutes for this servers netbios name, %U is username
-# You must uncomment the [Profiles] share below
-; logon path = \\%L\Profiles\%U
-
-# Windows Internet Name Serving Support Section:
-# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
-; wins support = yes
-
-# WINS Server - Tells the NMBD components of Samba to be a WINS Client
-# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
-; wins server = w.x.y.z
-
-# WINS Proxy - Tells Samba to answer name resolution queries on
-# behalf of a non WINS capable client, for this to work there must be
-# at least one WINS Server on the network. The default is NO.
-; wins proxy = yes
-
-# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
-# via DNS nslookups. The default is NO.
- dns proxy = no
-
-# These scripts are used on a domain controller or stand-alone
-# machine to add or delete corresponding unix accounts
-; add user script = /usr/sbin/useradd %u
-; add group script = /usr/sbin/groupadd %g
-; add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
-; delete user script = /usr/sbin/userdel %u
-; delete user from group script = /usr/sbin/deluser %u %g
-; delete group script = /usr/sbin/groupdel %g
-
-
-#============================ Share Definitions ==============================
-[homes]
- comment = Home Directories
- browseable = no
- writable = yes
-
-# Un-comment the following and create the netlogon directory for Domain Logons
-; [netlogon]
-; comment = Network Logon Service
-; path = /usr/local/samba/lib/netlogon
-; guest ok = yes
-; writable = no
-; share modes = no
-
-
-# Un-comment the following to provide a specific roving profile share
-# the default is to use the user's home directory
-;[Profiles]
-; path = /usr/local/samba/profiles
-; browseable = no
-; guest ok = yes
-
-
-# NOTE: If you have a BSD-style print system there is no need to
-# specifically define each individual printer
-[printers]
- comment = All Printers
- path = /var/spool/samba
- browseable = no
-# Set public = yes to allow user 'guest account' to print
- guest ok = no
- writable = no
- printable = yes
-
-# This one is useful for people to share files
-;[tmp]
-; comment = Temporary file space
-; path = /tmp
-; read only = no
-; public = yes
-
-# A publicly accessible directory, but read only, except for people in
-# the "staff" group
-;[public]
-; comment = Public Stuff
-; path = /home/samba
-; public = yes
-; writable = yes
-; printable = no
-; write list = @staff
-
-# Other examples.
-#
-# A private printer, usable only by fred. Spool data will be placed in fred's
-# home directory. Note that fred must have write access to the spool directory,
-# wherever it is.
-;[fredsprn]
-; comment = Fred's Printer
-; valid users = fred
-; path = /homes/fred
-; printer = freds_printer
-; public = no
-# A private directory, usable only by fred. Note that fred requires write
-# access to the directory.
-;[fredsdir]
-; comment = Fred's Service
-; path = /usr/somewhere/private
-; valid users = fred
-; public = no
-; writable = yes
-; printable = no
-
-# a service which has a different directory for each machine that connects
-# this allows you to tailor configurations to incoming machines. You could
-# also use the %U option to tailor it by user name.
-# The %m gets replaced with the machine name that is connecting.
-;[pchome]
-; comment = PC Directories
-; path = /usr/pc/%m
-; public = no
-; writable = yes
-
-# A publicly accessible directory, read/write to all users. Note that all files
-# created in the directory by users will be owned by the default user, so
-# any user with access can delete any other user's files. Obviously this
-# directory must be writable by the default user. Another user could of course
-# be specified, in which case all files would be owned by that user instead.
-;[public]
-; path = /usr/somewhere/else/public
-; public = yes
-; only guest = yes
-; writable = yes
-; printable = no
-
-# The following two entries demonstrate how to share a directory so that two
-# users can place files there that will be owned by the specific users. In this
-# setup, the directory should be writable by both users and should have the
-# sticky bit set on it to prevent abuse. Obviously this could be extended to
-# as many users as required.
-;[myshare]
-; comment = Mary's and Fred's stuff
-; path = /usr/somewhere/shared
-; valid users = mary fred
-; public = no
-; writable = yes
-; printable = no
-; create mask = 0765
diff --git a/packages/samba/samba-3.2.7/configure.patch b/packages/samba/samba-3.2.7/configure.patch
deleted file mode 100644
index 94d684813e..0000000000
--- a/packages/samba/samba-3.2.7/configure.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-diff -urN source.old/configure source/configure
---- source.old/configure 2008-11-20 14:45:08.000000000 +0000
-+++ source/configure 2008-11-30 17:53:02.116791281 +0000
-@@ -40777,11 +40777,10 @@
- *linux*)
- # glibc <= 2.3.2 has a broken getgrouplist
- if test "$cross_compiling" = yes; then
-- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
--See \`config.log' for more details." >&5
--echo "$as_me: error: cannot run test program while cross compiling
--See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }
-+# { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5
-+# echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;}
-+# { (exit 1); exit 1; }; }
-+linux_getgrouplist_ok=no
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-diff -urN source.old/configure.in source/configure.in
---- source.old/configure.in 2008-11-18 15:17:17.000000000 +0000
-+++ source/configure.in 2008-11-30 17:33:10.960791551 +0000
-@@ -275,6 +275,8 @@
- fi
- AC_SUBST(BROKEN_CC)
-
-+AC_TRY_COMPILE([],[(void)sizeof(char[-1])],AC_MSG_ERROR([configure's compilation assert doesn't work with $CC]))
-+
- dnl Check if the C compiler understands -Werror
- AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
- AC_TRY_RUN_STRICT([
-@@ -325,25 +327,11 @@
- # a runtime test is needed here
- AC_SUBST(PIDL_ARGS)
- AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
-- AC_TRY_RUN(
-+ AC_TRY_COMPILE([],
- [
-- #include <stdio.h>
- enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
-- int main(void) {
-- enum negative_values v1 = NEGATIVE_VALUE;
-- unsigned v2 = NEGATIVE_VALUE;
--
-- if (v1 != 0xFFFFFFFF) {
-- printf("%u != 0xFFFFFFFF\n", v1);
-- return 1;
-- }
-- if (v2 != 0xFFFFFFFF) {
-- printf("%u != 0xFFFFFFFF\n", v2);
-- return 1;
-- }
--
-- return 0;
-- }
-+ (void)sizeof(char[1-2*( (unsigned)NEGATIVE_VALUE != 0xFFFFFFFF)]);
-+ (void)sizeof(char[1-2*((enum negative_values)NEGATIVE_VALUE != 0xFFFFFFFF)]);
- ],
- samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
- if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
-@@ -1187,22 +1175,12 @@
- case "$host_os" in
- *linux*)
- # glibc <= 2.3.2 has a broken getgrouplist
-- AC_TRY_RUN([
--#include <unistd.h>
-+ AC_TRY_COMPILE([
- #include <sys/utsname.h>
--main() {
-- /* glibc up to 2.3 has a broken getgrouplist */
-+],[
- #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
-- int libc_major = __GLIBC__;
-- int libc_minor = __GLIBC_MINOR__;
--
-- if (libc_major < 2)
-- exit(1);
-- if ((libc_major == 2) && (libc_minor <= 3))
-- exit(1);
-+ (void)sizeof(char[1-2*(__GLIBC__ < 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)]);
- #endif
-- exit(0);
--}
- ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
- if test x"$linux_getgrouplist_ok" = x"yes"; then
- AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
diff --git a/packages/samba/samba-3.2.7/smb.conf b/packages/samba/samba-3.2.7/smb.conf
deleted file mode 100644
index 3854621c3e..0000000000
--- a/packages/samba/samba-3.2.7/smb.conf
+++ /dev/null
@@ -1,266 +0,0 @@
-# This is the main Samba configuration file. You should read the
-# smb.conf(5) manual page in order to understand the options listed
-# here. Samba has a huge number of configurable options (perhaps too
-# many!) most of which are not shown in this example
-#
-# For a step to step guide on installing, configuring and using samba,
-# read the Samba-HOWTO-Collection. This may be obtained from:
-# http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
-#
-# Many working examples of smb.conf files can be found in the
-# Samba-Guide which is generated daily and can be downloaded from:
-# http://www.samba.org/samba/docs/Samba-Guide.pdf
-#
-# Any line which starts with a ; (semi-colon) or a # (hash)
-# is a comment and is ignored. In this example we will use a #
-# for commentry and a ; for parts of the config file that you
-# may wish to enable
-#
-# NOTE: Whenever you modify this file you should run the command "testparm"
-# to check that you have not made any basic syntactic errors.
-#
-#======================= Global Settings =====================================
-[global]
-
-# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
- workgroup = MYGROUP
-
-# server string is the equivalent of the NT Description field
- server string = Samba Server
-
-# Security mode. Defines in which mode Samba will operate. Possible
-# values are share, user, server, domain and ads. Most people will want
-# user level security. See the Samba-HOWTO-Collection for details.
- security = user
-
-# This option is important for security. It allows you to restrict
-# connections to machines which are on your local network. The
-# following example restricts access to two C class networks and
-# the "loopback" interface. For more examples of the syntax see
-# the smb.conf man page
-; hosts allow = 192.168.1. 192.168.2. 127.
-
-# If you want to automatically load your printer list rather
-# than setting them up individually then you'll need this
- load printers = yes
-
-# you may wish to override the location of the printcap file
-; printcap name = /etc/printcap
-
-# on SystemV system setting printcap name to lpstat should allow
-# you to automatically obtain a printer list from the SystemV spool
-# system
-; printcap name = lpstat
-
-# It should not be necessary to specify the print system type unless
-# it is non-standard. Currently supported print systems include:
-# bsd, cups, sysv, plp, lprng, aix, hpux, qnx
-; printing = cups
-
-# Uncomment this if you want a guest account, you must add this to /etc/passwd
-# otherwise the user "nobody" is used
-; guest account = pcguest
-
-# this tells Samba to use a separate log file for each machine
-# that connects
- log file = /var/log/samba/log.%m
-
-# Put a capping on the size of the log files (in Kb).
- max log size = 50
-
-# Use password server option only with security = server
-# The argument list may include:
-# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
-# or to auto-locate the domain controller/s
-# password server = *
-; password server = <NT-Server-Name>
-
-# Use the realm option only with security = ads
-# Specifies the Active Directory realm the host is part of
-; realm = MY_REALM
-
-# Backend to store user information in. New installations should
-# use either tdbsam or ldapsam. smbpasswd is available for backwards
-# compatibility. tdbsam requires no further configuration.
-; passdb backend = tdbsam
-
-# Using the following line enables you to customise your configuration
-# on a per machine basis. The %m gets replaced with the netbios name
-# of the machine that is connecting.
-# Note: Consider carefully the location in the configuration file of
-# this line. The included file is read at that point.
-; include = /usr/local/samba/lib/smb.conf.%m
-
-# Configure Samba to use multiple interfaces
-# If you have multiple network interfaces then you must list them
-# here. See the man page for details.
-; interfaces = 192.168.12.2/24 192.168.13.2/24
-
-# Browser Control Options:
-# set local master to no if you don't want Samba to become a master
-# browser on your network. Otherwise the normal election rules apply
-; local master = no
-
-# OS Level determines the precedence of this server in master browser
-# elections. The default value should be reasonable
-; os level = 33
-
-# Domain Master specifies Samba to be the Domain Master Browser. This
-# allows Samba to collate browse lists between subnets. Don't use this
-# if you already have a Windows NT domain controller doing this job
-; domain master = yes
-
-# Preferred Master causes Samba to force a local browser election on startup
-# and gives it a slightly higher chance of winning the election
-; preferred master = yes
-
-# Enable this if you want Samba to be a domain logon server for
-# Windows95 workstations.
-; domain logons = yes
-
-# if you enable domain logons then you may want a per-machine or
-# per user logon script
-# run a specific logon batch file per workstation (machine)
-; logon script = %m.bat
-# run a specific logon batch file per username
-; logon script = %U.bat
-
-# Where to store roving profiles (only for Win95 and WinNT)
-# %L substitutes for this servers netbios name, %U is username
-# You must uncomment the [Profiles] share below
-; logon path = \\%L\Profiles\%U
-
-# Windows Internet Name Serving Support Section:
-# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
-; wins support = yes
-
-# WINS Server - Tells the NMBD components of Samba to be a WINS Client
-# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
-; wins server = w.x.y.z
-
-# WINS Proxy - Tells Samba to answer name resolution queries on
-# behalf of a non WINS capable client, for this to work there must be
-# at least one WINS Server on the network. The default is NO.
-; wins proxy = yes
-
-# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
-# via DNS nslookups. The default is NO.
- dns proxy = no
-
-# These scripts are used on a domain controller or stand-alone
-# machine to add or delete corresponding unix accounts
-; add user script = /usr/sbin/useradd %u
-; add group script = /usr/sbin/groupadd %g
-; add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
-; delete user script = /usr/sbin/userdel %u
-; delete user from group script = /usr/sbin/deluser %u %g
-; delete group script = /usr/sbin/groupdel %g
-
-
-#============================ Share Definitions ==============================
-[homes]
- comment = Home Directories
- browseable = no
- writable = yes
-
-# Un-comment the following and create the netlogon directory for Domain Logons
-; [netlogon]
-; comment = Network Logon Service
-; path = /usr/local/samba/lib/netlogon
-; guest ok = yes
-; writable = no
-; share modes = no
-
-
-# Un-comment the following to provide a specific roving profile share
-# the default is to use the user's home directory
-;[Profiles]
-; path = /usr/local/samba/profiles
-; browseable = no
-; guest ok = yes
-
-
-# NOTE: If you have a BSD-style print system there is no need to
-# specifically define each individual printer
-[printers]
- comment = All Printers
- path = /var/spool/samba
- browseable = no
-# Set public = yes to allow user 'guest account' to print
- guest ok = no
- writable = no
- printable = yes
-
-# This one is useful for people to share files
-;[tmp]
-; comment = Temporary file space
-; path = /tmp
-; read only = no
-; public = yes
-
-# A publicly accessible directory, but read only, except for people in
-# the "staff" group
-;[public]
-; comment = Public Stuff
-; path = /home/samba
-; public = yes
-; writable = yes
-; printable = no
-; write list = @staff
-
-# Other examples.
-#
-# A private printer, usable only by fred. Spool data will be placed in fred's
-# home directory. Note that fred must have write access to the spool directory,
-# wherever it is.
-;[fredsprn]
-; comment = Fred's Printer
-; valid users = fred
-; path = /homes/fred
-; printer = freds_printer
-; public = no
-# A private directory, usable only by fred. Note that fred requires write
-# access to the directory.
-;[fredsdir]
-; comment = Fred's Service
-; path = /usr/somewhere/private
-; valid users = fred
-; public = no
-; writable = yes
-; printable = no
-
-# a service which has a different directory for each machine that connects
-# this allows you to tailor configurations to incoming machines. You could
-# also use the %U option to tailor it by user name.
-# The %m gets replaced with the machine name that is connecting.
-;[pchome]
-; comment = PC Directories
-; path = /usr/pc/%m
-; public = no
-; writable = yes
-
-# A publicly accessible directory, read/write to all users. Note that all files
-# created in the directory by users will be owned by the default user, so
-# any user with access can delete any other user's files. Obviously this
-# directory must be writable by the default user. Another user could of course
-# be specified, in which case all files would be owned by that user instead.
-;[public]
-; path = /usr/somewhere/else/public
-; public = yes
-; only guest = yes
-; writable = yes
-; printable = no
-
-# The following two entries demonstrate how to share a directory so that two
-# users can place files there that will be owned by the specific users. In this
-# setup, the directory should be writable by both users and should have the
-# sticky bit set on it to prevent abuse. Obviously this could be extended to
-# as many users as required.
-;[myshare]
-; comment = Mary's and Fred's stuff
-; path = /usr/somewhere/shared
-; valid users = mary fred
-; public = no
-; writable = yes
-; printable = no
-; create mask = 0765
diff --git a/packages/samba/samba-ads-3.3.0/wbstatic.patch b/packages/samba/samba-ads-3.3.0/wbstatic.patch
new file mode 100644
index 0000000000..1d2260cb55
--- /dev/null
+++ b/packages/samba/samba-ads-3.3.0/wbstatic.patch
@@ -0,0 +1,194 @@
+diff -urN source.old//Makefile.in source//Makefile.in
+--- source.old//Makefile.in 2009-01-26 13:56:34.000000000 +0000
++++ source//Makefile.in 2009-02-13 22:53:43.197061293 +0000
+@@ -690,7 +690,7 @@
+ $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
+ $(LIBADS_OBJ) $(KRBCLIENT_OBJ) $(LIBADS_SERVER_OBJ) \
+ $(REG_FULL_OBJ) $(POPT_LIB_OBJ) $(BUILDOPT_OBJ) \
+- $(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) @LIBWBCLIENT_STATIC@ \
++ $(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) bin/libwbclient.a \
+ $(LIBSMBCONF_OBJ) \
+ $(PRIVILEGES_BASIC_OBJ)
+
+@@ -725,7 +725,7 @@
+ web/swat.o web/neg_lang.o
+
+ SWAT_OBJ = $(SWAT_OBJ1) $(PARAM_OBJ) $(PRINTING_OBJ) $(PRINTBASE_OBJ) $(LIBSMB_OBJ) \
+- $(LOCKING_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(KRBCLIENT_OBJ) \
++ $(LOCKING_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(KRBCLIENT_OBJ) \
+ $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) $(PLAINTEXT_AUTH_OBJ) \
+ $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
+ $(PASSCHANGE_OBJ) $(LDB_OBJ)
+@@ -745,7 +745,7 @@
+ $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
+ rpc_client/cli_pipe.o librpc/rpc/binding.o $(RPC_PARSE_OBJ2) \
+ $(RPC_CLIENT_OBJ1) \
+- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
++ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
+ $(LIBMSRPC_GEN_OBJ)
+
+ TESTPARM_OBJ = utils/testparm.o \
+@@ -755,18 +755,18 @@
+ PASSWD_UTIL_OBJ = utils/passwd_util.o
+
+ SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \
+- $(PARAM_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
++ $(PARAM_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) bin/libwbclient.a \
+ $(GROUPDB_OBJ) $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
+ $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) \
+ $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) $(LDB_OBJ)
+
+-PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
++PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) bin/libwbclient.a \
+ $(LIBSAMBA_OBJ) \
+ $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \
+ $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) libsmb/asn1.o \
+ $(LDB_OBJ)
+
+-SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ1) @LIBWBCLIENT_STATIC@
++SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ1) bin/libwbclient.a
+
+ DISPLAY_SEC_OBJ= lib/display_sec.o
+
+@@ -782,7 +782,7 @@
+
+ RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
+ $(PARAM_OBJ) $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) \
+- $(RPC_PARSE_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
++ $(RPC_PARSE_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
+ $(READLINE_OBJ) $(GROUPDB_OBJ) $(KRBCLIENT_OBJ) \
+ $(LIBADS_OBJ) $(POPT_LIB_OBJ) \
+ $(SMBLDAP_OBJ) $(DCUTIL_OBJ) $(LDB_OBJ)
+@@ -810,7 +810,7 @@
+ $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
+ $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
+
+-LIBSMBCLIENT_OBJ = $(LIBSMBCLIENT_OBJ1) @LIBWBCLIENT_STATIC@
++LIBSMBCLIENT_OBJ = $(LIBSMBCLIENT_OBJ1) bin/libwbclient.a
+
+ # This shared library is intended for linking with unit test programs
+ # to test Samba internals. It's called libbigballofmud.so to
+@@ -819,7 +819,7 @@
+ LIBBIGBALLOFMUD_MAJOR = 0
+
+ LIBBIGBALLOFMUD_OBJ = $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+- $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
++ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_OBJ) bin/libwbclient.a \
+ $(GROUPDB_OBJ) $(KRBCLIENT_OBJ) $(SMBLDAP_OBJ) $(LDB_OBJ)
+
+ CLIENT_OBJ1 = client/client.o client/clitar.o rpc_client/cli_pipe.o \
+@@ -831,7 +831,7 @@
+ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
+ $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(LIBMSRPC_GEN_OBJ) \
+ $(READLINE_OBJ) $(POPT_LIB_OBJ) \
+- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
++ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
+ $(DISPLAY_SEC_OBJ)
+
+ LIBSMBCONF_OBJ = lib/smbconf/smbconf.o lib/smbconf/smbconf_util.o \
+@@ -886,7 +886,7 @@
+ $(LDB_OBJ) $(LIBGPO_OBJ) @BUILD_INIPARSER@ $(DISPLAY_SEC_OBJ) \
+ $(REG_SMBCONF_OBJ) @LIBNETAPI_STATIC@ $(LIBNET_OBJ) \
+ $(LIBSMBCONF_OBJ) \
+- @LIBWBCLIENT_STATIC@ \
++ bin/libwbclient.a \
+ $(PRIVILEGES_BASIC_OBJ)
+
+ CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
+@@ -926,7 +926,7 @@
+ $(LIBNDR_GEN_OBJ0)
+
+ PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+- $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
++ $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) \
+ $(SMBLDAP_OBJ) $(POPT_LIB_OBJ) $(LDB_OBJ) \
+ $(LIBNDR_GEN_OBJ0)
+
+@@ -942,14 +942,14 @@
+
+ SMBCACLS_OBJ = utils/smbcacls.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
+ $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
+- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
++ $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
+ $(POPT_LIB_OBJ) $(DCUTIL_OBJ) $(LIBADS_OBJ) $(SMBLDAP_OBJ) $(LDB_OBJ)
+
+ SMBCQUOTAS_OBJ = utils/smbcquotas.o $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+ $(PARAM_OBJ) \
+ $(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
+ $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(POPT_LIB_OBJ) \
+- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
++ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
+
+ EVTLOGADM_OBJ0 = utils/eventlogadm.o
+
+@@ -988,7 +988,7 @@
+
+ PAM_SMBPASS_OBJ_0 = pam_smbpass/pam_smb_auth.o pam_smbpass/pam_smb_passwd.o \
+ pam_smbpass/pam_smb_acct.o pam_smbpass/support.o
+-PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
++PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) \
+ $(SMBLDAP_OBJ) $(LIBSAMBA_OBJ) \
+ $(LDB_OBJ)
+
+@@ -1036,7 +1036,7 @@
+ smbd/connection.o
+
+ WINBINDD_OBJ = \
+- $(WINBINDD_OBJ1) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
++ $(WINBINDD_OBJ1) $(PASSDB_OBJ) bin/libwbclient.a $(GROUPDB_OBJ) \
+ $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
+ $(PROFILE_OBJ) $(SLCACHE_OBJ) $(SMBLDAP_OBJ) \
+@@ -1047,7 +1047,7 @@
+
+ WBINFO_OBJ = nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+ $(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) \
+- lib/winbind_util.o $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@
++ lib/winbind_util.o $(WBCOMMON_OBJ) bin/libwbclient.a
+
+ WINBIND_NSS_OBJ = $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ) @WINBIND_NSS_EXTRA_OBJS@
+
+@@ -1111,7 +1111,7 @@
+ $(SERVER_MUTEX_OBJ) $(LIBADS_SERVER_OBJ) \
+ $(PASSDB_OBJ) $(GROUPDB_OBJ) \
+ $(SMBLDAP_OBJ) $(LIBNMB_OBJ) \
+- $(LDB_OBJ) $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@ \
++ $(LDB_OBJ) $(WBCOMMON_OBJ) bin/libwbclient.a \
+ $(LIBNDR_GEN_OBJ0) $(LIBNDR_GEN_OBJ1)
+
+
+@@ -1120,14 +1120,14 @@
+ VLP_OBJ = $(VLP_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
+ $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(LIBMSRPC_GEN_OBJ) \
+ $(READLINE_OBJ) $(POPT_LIB_OBJ) \
+- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
++ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
+ $(DISPLAY_SEC_OBJ)
+
+ RPC_OPEN_TCP_OBJ = torture/rpc_open_tcp.o \
+ $(LIBSMB_OBJ) \
+ $(PARAM_OBJ) \
+ $(PASSDB_OBJ) \
+- @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
++ bin/libwbclient.a $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
+ $(LIB_NONSMBD_OBJ) \
+ $(KRBCLIENT_OBJ) \
+ $(RPC_PARSE_OBJ2) \
+@@ -1743,7 +1743,7 @@
+ LIBWBCLIENT_SOVER=@LIBWBCLIENT_SOVER@
+ LIBWBCLIENT_SHARED_TARGET_SONAME=$(LIBWBCLIENT_SHARED_TARGET).$(LIBWBCLIENT_SOVER)
+ LIBWBCLIENT_STATIC_TARGET=@LIBWBCLIENT_STATIC_TARGET@
+-LIBWBCLIENT=@LIBWBCLIENT_STATIC@ @LIBWBCLIENT_SHARED@
++LIBWBCLIENT=bin/libwbclient.a @LIBWBCLIENT_SHARED@
+ LIBWBCLIENT_SYMS=$(srcdir)/exports/libwbclient.@SYMSEXT@
+ LIBWBCLIENT_HEADERS=$(srcdir)/nsswitch/libwbclient/wbclient.h
+
+@@ -1880,7 +1880,7 @@
+ $(PARAM_WITHOUT_REG_OBJ) $(LIB_NONSMBD_OBJ) \
+ $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+ $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
+- $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
++ $(PASSDB_OBJ) bin/libwbclient.a $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
+ $(DCUTIL_OBJ) $(LIBADS_OBJ) $(PRIVILEGES_BASIC_OBJ) \
+ auth/token_util.o
+
diff --git a/packages/samba/samba-ads.inc b/packages/samba/samba-ads.inc
new file mode 100644
index 0000000000..e2f77b8cd9
--- /dev/null
+++ b/packages/samba/samba-ads.inc
@@ -0,0 +1,38 @@
+# openldap and kerberos are for active directory support
+# netatalk is needed to support a vfs module
+DEPENDS += " openldap krb5 netatalk"
+
+EXTRA_OECONF += "\
+ SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
+ samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \
+ linux_getgrouplist_ok=no \
+ samba_cv_HAVE_BROKEN_GETGROUPS=no \
+ samba_cv_HAVE_FTRUNCATE_EXTEND=yes \
+ ac_cv_path_KRB5CONFIG=${STAGING_BINDIR_CROSS}/krb5-config \
+ samba_cv_have_setresuid=yes \
+ samba_cv_have_setresgid=yes \
+ samba_cv_HAVE_WRFILE_KEYTAB=yes \
+ smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes \
+ smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes \
+ --with-krb5=${STAGING_LIBDIR} \
+ --with-ads \
+ "
+
+PACKAGES =+ "libsmbclient-ads libsmbclient-ads-dev cifs-ads cifs-ads-doc swat-ads"
+
+RCONFLICTS_${PN} = "samba"
+RCONFLICTS_libsmbclient-ads = "libsmbclient"
+RCONFLICTS_libsmbclient-ads-dev = "libsmbclient-dev"
+RCONFLICTS_cifs-ads = "cifs"
+RCONFLICTS_cifs-ads-doc = "cifs-doc"
+RCONFLICTS_swat-ads = "swat"
+
+FILES_cifs-ads = "${base_sbindir}/mount.cifs ${base_sbindir}/umount.cifs"
+FILES_cifs-ads-doc = "${mandir}/man8/mount.cifs.8 ${mandir}/man8/umount.cifs.8"
+FILES_libsmbclient-ads = "${libdir}/libsmbclient.so.*"
+FILES_libsmbclient-ads-dev = "${libdir}/libsmbclient.so ${includedir}"
+FILES_swat-ads = "${sbindir}/swat ${datadir}/swat ${libdir}/*.msg"
+
+do_configure() {
+ oe_runconf
+}
diff --git a/packages/samba/samba-ads_3.2.8.bb b/packages/samba/samba-ads_3.2.8.bb
new file mode 100644
index 0000000000..95f09c16cb
--- /dev/null
+++ b/packages/samba/samba-ads_3.2.8.bb
@@ -0,0 +1,10 @@
+require samba.inc
+require samba-ads.inc
+
+PR = "r2"
+SRC_URI += "file://config-lfs.patch;patch=1 \
+ file://quota.patch;patch=1;pnum=0 \
+ file://configure-3.2.8.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ "
diff --git a/packages/samba/samba-ads_3.3.0.bb b/packages/samba/samba-ads_3.3.0.bb
new file mode 100644
index 0000000000..9fd4303143
--- /dev/null
+++ b/packages/samba/samba-ads_3.3.0.bb
@@ -0,0 +1,15 @@
+require samba.inc
+require samba-ads.inc
+
+PR = "r3"
+SRC_URI += "file://config-lfs.patch;patch=1 \
+ file://quota.patch;patch=1;pnum=0 \
+ file://configure-3.3.0.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ file://wbstatic.patch;patch=1 \
+ "
+
+do_compile () {
+ base_do_compile
+}
diff --git a/packages/samba/samba-basic.inc b/packages/samba/samba-basic.inc
new file mode 100644
index 0000000000..f1bda65286
--- /dev/null
+++ b/packages/samba/samba-basic.inc
@@ -0,0 +1,24 @@
+SRC_URI += "file://config-lfs.patch;patch=1 \
+ file://quota.patch;patch=1;pnum=0 \
+ "
+
+EXTRA_OECONF += "\
+ --without-ads \
+ --without-winbind \
+ --without-ldap \
+ --without-krb5"
+
+PACKAGES =+ "libsmbclient libsmbclient-dev cifs cifs-doc swat"
+
+RCONFLICTS_${PN} = "samba-ads"
+RCONFLICTS_libsmbclient = "libsmbclient-ads"
+RCONFLICTS_libsmbclient-dev = "libsmbclient-ads-dev"
+RCONFLICTS_cifs = "cifs-ads"
+RCONFLICTS_cifs-doc = "cifs-ads-doc"
+RCONFLICTS_swat = "swat-ads"
+
+FILES_cifs = "${base_sbindir}/mount.cifs ${base_sbindir}/umount.cifs"
+FILES_cifs-doc = "${mandir}/man8/mount.cifs.8 ${mandir}/man8/umount.cifs.8"
+FILES_libsmbclient = "${libdir}/libsmbclient.so.*"
+FILES_libsmbclient-dev = "${libdir}/libsmbclient.so ${includedir}"
+FILES_swat = "${sbindir}/swat ${datadir}/swat ${libdir}/*.msg"
diff --git a/packages/samba/samba.inc b/packages/samba/samba.inc
index 85ac612de6..36de08beca 100644
--- a/packages/samba/samba.inc
+++ b/packages/samba/samba.inc
@@ -3,16 +3,20 @@ LICENSE = "GPL"
DEPENDS = "readline virtual/libiconv"
SRC_URI = "http://samba.org/samba/ftp/stable/samba-${PV}.tar.gz \
- file://configure.patch;patch=1 \
- file://config-lfs.patch;patch=1 \
- file://quota.patch;patch=1;pnum=0 \
+ file://volatiles.03_samba \
file://smb.conf \
- file://init"
+ file://init \
+ "
S = "${WORKDIR}/samba-${PV}/source"
inherit autotools update-rc.d
+FILES_${PN} += "${libdir}/vfs/*.so ${libdir}/charset/*.so ${libdir}/*.dat \
+ ${libdir}/auth/*.so ${libdir}/security/*.so"
+FILES_${PN}-dbg += "${libdir}/vfs/.debug/*.so ${libdir}/charset/.debug/*.so \
+ ${libdir}/auth/.debug/*.so ${libdir}/security/.debug/*.so"
+
# The file system settings --foodir=dirfoo and overridden unconditionally
# in the samba config by --with-foodir=dirfoo - even if the --with is not
# specified! Fix that here. Set the privatedir to /etc/samba/private.
@@ -20,7 +24,6 @@ EXTRA_OECONF='--disable-cups \
--with-readline=${STAGING_LIBDIR}/.. \
--with-libiconv=${STAGING_LIBDIR}/.. \
--without-automount \
- --with-smbmount \
--with-configdir=${sysconfdir}/samba \
--with-privatedir=${sysconfdir}/samba/private \
--with-lockdir=${localstatedir}/lock \
@@ -38,19 +41,6 @@ INITSCRIPT_NAME = "samba"
INITSCRIPT_PARAMS = "defaults"
CONFFILES_${PN} = "${sysconfdir}/samba/smb.conf"
-PACKAGES =+ "libsmbclient libsmbclient-dev cifs cifs-doc smbfs smbfs-doc swat"
-FILES_cifs = "${base_sbindir}/mount.cifs ${base_sbindir}/umount.cifs"
-FILES_cifs-doc = "${mandir}/man8/mount.cifs.8 ${mandir}/man8/umount.cifs.8"
-FILES_libsmbclient = "${libdir}/libsmbclient.so.*"
-FILES_libsmbclient-dev = "${libdir}/libsmbclient.so ${includedir}"
-FILES_smbfs = "${bindir}/smbmount ${bindir}/smbumount ${bindir}/smbmnt ${base_sbindir}/mount.smbfs ${base_sbindir}/mount.smb"
-FILES_smbfs-doc = "${mandir}/man8/smbmount.8 ${mandir}/man8/smbumount.8 ${mandir}/man8/smbmnt.8"
-FILES_swat = "${sbindir}/swat ${datadir}/swat ${libdir}/*.msg"
-FILES_${PN} += "${libdir}/vfs/*.so ${libdir}/charset/*.so ${libdir}/*.dat \
- ${libdir}/auth/*.so ${libdir}/security/*.so"
-FILES_${PN}-dbg += "${libdir}/vfs/.debug/*.so ${libdir}/charset/.debug/*.so \
- ${libdir}/auth/.debug/*.so ${libdir}/security/.debug/*.so"
-
do_configure_prepend () {
./script/mkversion.sh
if [ ! -e acinclude.m4 ]; then
@@ -68,19 +58,22 @@ do_install_append() {
mv ${D}${libdir}/libsmbclient.so ${D}${libdir}/libsmbclient.so.0 || true
ln -sf libsmbclient.so.0 ${D}${libdir}/libsmbclient.so
mkdir -p ${D}${base_sbindir}
- rm -f ${D}${sbindir}/mount.smbfs ${D}${base_sbindir}/mount.smbfs
- ln -sf ${bindir}/smbmount ${D}${base_sbindir}/mount.smb
- ln -sf ${bindir}/smbmount ${D}${base_sbindir}/mount.smbfs
rm -f ${D}${bindir}/*.old
rm -f ${D}${sbindir}/*.old
[ -f ${D}${sbindir}/mount.cifs ] && mv ${D}${sbindir}/mount.cifs ${D}${base_sbindir}/
[ -f ${D}${sbindir}/umount.cifs ] && mv ${D}${sbindir}/umount.cifs ${D}${base_sbindir}/
- install -d "${D}/var/log/samba"
- install -d "${D}${sysconfdir}/init.d"
- install -c -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/samba
- install -d "${D}${sysconfdir}/samba"
- install -c -m 644 ${WORKDIR}/smb.conf ${D}${sysconfdir}/samba/smb.conf
+ # This is needed for < 3.2.4
+ rm -f ${D}${sbindir}/mount.smbfs ${D}${base_sbindir}/mount.smbfs
+ if [ -f ${D}${bindir}/smbmount ]; then
+ ln -sf ${bindir}/smbmount ${D}${base_sbindir}/mount.smb
+ ln -sf ${bindir}/smbmount ${D}${base_sbindir}/mount.smbfs
+ fi
+
+ install -D -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/samba
+ install -D -m 644 ${WORKDIR}/smb.conf ${D}${sysconfdir}/samba/smb.conf
+ install -D -m 644 ${WORKDIR}/volatiles.03_samba ${D}${sysconfdir}/default/volatiles/volatiles.03_samba
+ install -d ${D}/var/log/samba
install -d ${D}/var/spool/samba
}
diff --git a/packages/samba/samba_3.0.23c.bb b/packages/samba/samba_3.0.23c.bb
index 3a2cfd30aa..c08dc04cce 100644
--- a/packages/samba/samba_3.0.23c.bb
+++ b/packages/samba/samba_3.0.23c.bb
@@ -1,13 +1,19 @@
require samba.inc
+require samba-basic.inc
-PR = "r4"
+SRC_URI += "file://configure.patch;patch=1 \
+ file://cifs.patch;patch=1"
-SRC_URI += "file://cifs.patch;patch=1 \
- "
+PR = "r7"
EXTRA_OECONF += "\
- --without-ads \
- "
+ --with-smbmount \
+ "
+
+PACKAGES =+ " smbfs smbfs-doc"
+RCONFLICTS_smbfs-doc = "smbfs-ads-doc"
+FILES_smbfs = "${bindir}/smbmount ${bindir}/smbumount ${bindir}/smbmnt ${base_sbindir}/mount.smbfs ${base_sbindir}/mount.smb"
+FILES_smbfs-doc = "${mandir}/man8/smbmount.8 ${mandir}/man8/smbumount.8 ${mandir}/man8/smbmnt.8"
do_compile () {
oe_runmake proto_exists
diff --git a/packages/samba/samba_3.0.34.bb b/packages/samba/samba_3.0.34.bb
index ecd11badcc..d43c50dcdb 100644
--- a/packages/samba/samba_3.0.34.bb
+++ b/packages/samba/samba_3.0.34.bb
@@ -1,15 +1,22 @@
require samba.inc
+require samba-basic.inc
-PR = "r2"
+SRC_URI += "file://configure.patch;patch=1 \
+ "
+SRC_URI_append_linux-uclibc = "file://uclibc-strlcpy-strlcat.patch;patch=1"
+SRC_URI_append_linux-uclibcgnueabi = "file://uclibc-strlcpy-strlcat.patch;patch=1"
-SRC_URI_append_linux-uclibc = " \
- file://uclibc-strlcpy-strlcat.patch;patch=1"
-SRC_URI_append_linux-uclibcgnueabi = " \
- file://uclibc-strlcpy-strlcat.patch;patch=1"
+PR = "r5"
+
+PACKAGES =+ " smbfs smbfs-doc"
+
+FILES_smbfs = "${bindir}/smbmount ${bindir}/smbumount ${bindir}/smbmnt ${base_sbindir}/mount.smbfs ${base_sbindir}/mount.smb"
+RCONFLICTS_smbfs-doc = "smbfs-ads-doc"
+FILES_smbfs-doc = "${mandir}/man8/smbmount.8 ${mandir}/man8/smbumount.8 ${mandir}/man8/smbmnt.8"
EXTRA_OECONF += "\
- --without-ads \
SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
+ --with-smbmount \
"
do_stage() {
diff --git a/packages/samba/samba_3.2.7.bb b/packages/samba/samba_3.2.7.bb
deleted file mode 100644
index 3653a5dfe3..0000000000
--- a/packages/samba/samba_3.2.7.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-require samba.inc
-
-PR = "r1"
-DEPENDS += " openldap krb5"
-SRC_URI += "file://config-h.patch;patch=1 \
- file://mtab.patch;patch=1 \
- "
-
-EXTRA_OECONF += "\
- SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
- samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \
- linux_getgrouplist_ok=no \
- samba_cv_HAVE_BROKEN_GETGROUPS=no \
- samba_cv_HAVE_FTRUNCATE_EXTEND=yes \
- ac_cv_path_KRB5CONFIG=${STAGING_BINDIR_CROSS}/krb5-config \
- samba_cv_have_setresuid=yes \
- samba_cv_have_setresgid=yes \
- samba_cv_HAVE_WRFILE_KEYTAB=yes \
- smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes \
- smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes \
- --with-krb5=${STAGING_LIBDIR} \
- --with-ads \
- "
-
-do_configure() {
- oe_runconf
-}
diff --git a/packages/samba/samba_3.2.8.bb b/packages/samba/samba_3.2.8.bb
new file mode 100644
index 0000000000..2e2cb959f8
--- /dev/null
+++ b/packages/samba/samba_3.2.8.bb
@@ -0,0 +1,24 @@
+require samba.inc
+require samba-basic.inc
+
+SRC_URI += "file://configure-3.2.8.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ "
+
+PR = "r1"
+
+EXTRA_OECONF += "\
+ SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
+ samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \
+ linux_getgrouplist_ok=no \
+ samba_cv_HAVE_BROKEN_GETGROUPS=no \
+ samba_cv_HAVE_FTRUNCATE_EXTEND=yes \
+ samba_cv_have_setresuid=yes \
+ samba_cv_have_setresgid=yes \
+ samba_cv_HAVE_WRFILE_KEYTAB=yes \
+ "
+
+do_configure() {
+ oe_runconf
+}
diff --git a/packages/samba/samba_3.3.0.bb b/packages/samba/samba_3.3.0.bb
new file mode 100644
index 0000000000..6270c8c0d7
--- /dev/null
+++ b/packages/samba/samba_3.3.0.bb
@@ -0,0 +1,34 @@
+require samba.inc
+require samba-basic.inc
+
+# 3.3.0 and newer will upgrade your tdb database to a
+# new version that you can not downgrade to use with older
+# releases. More testing will happen before this is removed
+# should there be further issues. Appears to work though :)
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "file://configure-3.3.0.patch;patch=1 \
+ file://config-h.patch;patch=1 \
+ file://mtab.patch;patch=1 \
+ "
+
+PR = "r2"
+
+EXTRA_OECONF += "\
+ SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
+ samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \
+ linux_getgrouplist_ok=no \
+ samba_cv_HAVE_BROKEN_GETGROUPS=no \
+ samba_cv_HAVE_FTRUNCATE_EXTEND=yes \
+ samba_cv_have_setresuid=yes \
+ samba_cv_have_setresgid=yes \
+ samba_cv_HAVE_WRFILE_KEYTAB=yes \
+ "
+
+do_configure() {
+ oe_runconf
+}
+
+do_compile () {
+ base_do_compile
+}
diff --git a/packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb b/packages/samsung-soc-utils/s3c2410-boot-usb-native_svn.bb
index 675d07c910..675d07c910 100644
--- a/packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb
+++ b/packages/samsung-soc-utils/s3c2410-boot-usb-native_svn.bb
diff --git a/packages/s3c24xx-utils/s3c24xx-gpio_svn.bb b/packages/samsung-soc-utils/s3c24xx-gpio_svn.bb
index 0a57d2c0e6..0a57d2c0e6 100644
--- a/packages/s3c24xx-utils/s3c24xx-gpio_svn.bb
+++ b/packages/samsung-soc-utils/s3c24xx-gpio_svn.bb
diff --git a/packages/samsung-soc-utils/s3c64xx-gpio_svn.bb b/packages/samsung-soc-utils/s3c64xx-gpio_svn.bb
new file mode 100644
index 0000000000..92110691cf
--- /dev/null
+++ b/packages/samsung-soc-utils/s3c64xx-gpio_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A user-space tool to show and modify the state of GPIOs on the S3c64xx platform"
+SECTION = "console/utils"
+AUTHOR = "Werner Almesberger <werner@openmoko.org>"
+LICENSE = "GPL"
+PV = "1.0+svnr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;proto=http"
+S = "${WORKDIR}/gpio"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -static -o ${PN} gpio-s3c6410.c
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${PN} ${D}${sbindir}
+}
diff --git a/packages/s3c24xx-utils/sjf2410-linux-native_svn.bb b/packages/samsung-soc-utils/sjf2410-linux-native_svn.bb
index fcfbba923d..fcfbba923d 100644
--- a/packages/s3c24xx-utils/sjf2410-linux-native_svn.bb
+++ b/packages/samsung-soc-utils/sjf2410-linux-native_svn.bb
diff --git a/packages/screen/screen-4.0.2/screen_4.0.2-4.1sarge1.diff.gz b/packages/screen/screen-4.0.2/screen_4.0.2-4.1sarge1.diff.gz
new file mode 100644
index 0000000000..966d39b0fb
--- /dev/null
+++ b/packages/screen/screen-4.0.2/screen_4.0.2-4.1sarge1.diff.gz
Binary files differ
diff --git a/packages/screen/screen-4.0.3/configure.patch b/packages/screen/screen-4.0.3/configure.patch
new file mode 100644
index 0000000000..2770a7a481
--- /dev/null
+++ b/packages/screen/screen-4.0.3/configure.patch
@@ -0,0 +1,970 @@
+
+#
+# Patch by Hannes Reich (hannes@skynet.ie) 22-Jul-2005
+# Resolves _some_ of the cross-compilation issues in screen's configure.in
+#
+
+--- screen-4.0.1/configure.in~configure
++++ screen-4.0.1/configure.in
+@@ -37,6 +37,323 @@
+ VERSION="$rev.$vers.$pat"
+ AC_NOTE(this is screen version $VERSION)
+ AC_SUBST(VERSION)
++
++AH_TOP([
++/* Copyright (c) 1993-2000
++ * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
++ * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
++ * Copyright (c) 1987 Oliver Laumann
++ *
++ * This program is free software; you can redistribute 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 (see the file COPYING); if not, write to the
++ * Free Software Foundation, Inc.,
++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
++ *
++ */
++
++
++/**********************************************************************
++ *
++ * User Configuration Section
++ */
++
++/*
++ * Maximum of simultaneously allowed windows per screen session.
++ */
++#ifndef MAXWIN
++# define MAXWIN 40
++#endif
++
++/*
++ * Define SOCKDIR to be the directory to contain the named sockets
++ * screen creates. This should be in a common subdirectory, such as
++ * /usr/local or /tmp. It makes things a little more secure if you
++ * choose a directory which is not writable by everyone or where the
++ * "sticky" bit is on, but this isn't required.
++ * If SOCKDIR is not defined screen will put the named sockets in
++ * the user's home directory. Notice that this can cause you problems
++ * if some user's HOME directories are AFS- or NFS-mounted. Especially
++ * AFS is unlikely to support named sockets.
++ *
++ * Screen will name the subdirectories "S-$USER" (e.g /tmp/S-davison).
++ */
++#undef SOCKDIR
++
++/*
++ * Define this if the SOCKDIR is not shared between hosts.
++ */
++#define SOCKDIR_IS_LOCAL_TO_HOST
++
++/*
++ * Screen sources two startup files. First a global file with a path
++ * specified here, second your local $HOME/.screenrc
++ * Don't define this, if you don't want it.
++ */
++#ifndef ETCSCREENRC
++# define ETCSCREENRC "/usr/local/etc/screenrc"
++#endif
++
++/*
++ * Screen can look for the environment variable $SYSSCREENRC and -if it
++ * exists- load the file specified in that variable as global screenrc.
++ * If you want to enable this feature, define ALLOW_SYSSCREENRC to one (1).
++ * Otherwise ETCSCREENRC is always loaded.
++ */
++#define ALLOW_SYSSCREENRC 1
++
++/*
++ * Screen needs encoding files for the translation of utf8
++ * into some encodings, e.g. JIS, BIG5.
++ * Only needed if FONT, ENCODINGS and UTF8 are defined.
++ */
++#ifndef SCREENENCODINGS
++# define SCREENENCODINGS "/usr/local/lib/screen/encodings"
++#endif
++/*
++ * Define CHECKLOGIN to force Screen users to enter their Unix password
++ * in addition to the screen password.
++ *
++ * Define NOSYSLOG if yo do not have logging facilities. Currently
++ * syslog() will be used to trace ``su'' commands only.
++ */
++#define CHECKLOGIN 1
++#undef NOSYSLOG
++
++
++/*
++ * define PTYMODE if you do not like the default of 0622, which allows
++ * public write to your pty.
++ * define PTYGROUP to some numerical group-id if you do not want the
++ * tty to be in "your" group.
++ * Note, screen is unable to change mode or group of the pty if it
++ * is not installed with sufficient privilege. (e.g. set-uid-root)
++ * define PTYROFS if the /dev/pty devices are mounted on a read-only
++ * filesystem so screen should not even attempt to set mode or group
++ * even if running as root (e.g. on TiVo).
++ */
++#undef PTYMODE
++#undef PTYGROUP
++#undef PTYROFS
++
++/*
++ * If screen is NOT installed set-uid root, screen can provide tty
++ * security by exclusively locking the ptys. While this keeps other
++ * users from opening your ptys, it also keeps your own subprocesses
++ * from being able to open /dev/tty. Define LOCKPTY to add this
++ * exclusive locking.
++ */
++#undef LOCKPTY
++
++/*
++ * If you'd rather see the status line on the first line of your
++ * terminal rather than the last, define TOPSTAT.
++ */
++#undef TOPSTAT
++
++/*
++ * define DETACH can detach a session. An absolute 'must'.
++ */
++#define DETACH
++
++/*
++ * here come the erlangen extensions to screen:
++ * define LOCK if you want to use a lock program for a screenlock.
++ * define PASSWORD for secure reattach of your screen.
++ * define COPY_PASTE to use the famous hacker's treasure zoo.
++ * define POW_DETACH to have a detach_and_logout key (requires DETACH).
++ * define REMOTE_DETACH (-d option) to move screen between terminals.
++ * define AUTO_NUKE to enable Tim MacKenzies clear screen nuking
++ * define PSEUDOS to allow window input/output filtering
++ * define MULTI to allow multiple attaches.
++ * define MULTIUSER to allow other users attach to your session
++ * (if they are in the acl, of course)
++ * define MAPKEYS to include input keyboard translation.
++ * define FONT to support ISO2022/alternet charset support
++ * define COLOR to include ansi color support. This may expose
++ * a bug in x11r6-color-xterm.
++ * define DW_CHARS to include support for double-width character
++ * sets.
++ * define ENCODINGS to include support for encodings like euc or big5.
++ * Needs FONT to work.
++ * define UTF8 if you want support for UTF-8 encoding.
++ * Needs FONT and ENCODINGS to work.
++ * define COLORS16 if you want 16 colors.
++ * Needs COLOR to work.
++ * define BUILTIN_TELNET to add telnet support to screen.
++ * Syntax: screen //telnet host [port]
++ * define RXVT_OSC if you want support for rxvts special
++ * change fgcolor/bgcolor/bgpicture sequences
++ */
++#undef SIMPLESCREEN
++#ifndef SIMPLESCREEN
++# define LOCK
++# define PASSWORD
++# define COPY_PASTE
++# define REMOTE_DETACH
++# define POW_DETACH
++# define AUTO_NUKE
++# define PSEUDOS
++# define MULTI
++# define MULTIUSER
++# define MAPKEYS
++# define COLOR
++# define FONT
++# define DW_CHARS
++# define ENCODINGS
++# define UTF8
++# define COLORS16
++# define ZMODEM
++# define BLANKER_PRG
++#endif /* SIMPLESCREEN */
++
++#undef BUILTIN_TELNET
++#undef RXVT_OSC
++#undef COLORS256
++
++
++/*
++ * If you have a braille display you should define HAVE_BRAILLE.
++ * The code inside #ifdef HAVE_BRAILLE was contributed by Hadi Bargi
++ * Rangin (bargi@dots.physics.orst.edu).
++ * WARNING: this is more or less unsupported code, it may be full of
++ * bugs leading to security holes, enable at your own risk!
++ */
++#undef HAVE_BRAILLE
++
++
++/*
++ * As error messages are mostly meaningless to the user, we
++ * try to throw out phrases that are somewhat more familiar
++ * to ...well, at least familiar to us NetHack players.
++ */
++#ifndef NONETHACK
++# define NETHACK
++#endif /* NONETHACK */
++
++/*
++ * If screen is installed with permissions to update /etc/utmp (such
++ * as if it is installed set-uid root), define UTMPOK.
++ */
++#define UTMPOK
++
++/* Set LOGINDEFAULT to one (1)
++ * if you want entries added to /etc/utmp by default, else set it to
++ * zero (0).
++ * LOGINDEFAULT will be one (1) whenever LOGOUTOK is undefined!
++ */
++#define LOGINDEFAULT 1
++
++/* Set LOGOUTOK to one (1)
++ * if you want the user to be able to log her/his windows out.
++ * (Meaning: They are there, but not visible in /etc/utmp).
++ * Disabling this feature only makes sense if you have a secure /etc/utmp
++ * database.
++ * Negative examples: suns usually have a world writable utmp file,
++ * xterm will run perfectly without s-bit.
++ *
++ * If LOGOUTOK is undefined and UTMPOK is defined, all windows are
++ * initially and permanently logged in.
++ *
++ * Set CAREFULUTMP to one (1) if you want that users have at least one
++ * window per screen session logged in.
++ */
++#define LOGOUTOK 1
++#undef CAREFULUTMP
++
++
++/*
++ * If UTMPOK is defined and your system (incorrectly) counts logins by
++ * counting non-null entries in /etc/utmp (instead of counting non-null
++ * entries with no hostname that are not on a pseudo tty), define USRLIMIT
++ * to have screen put an upper-limit on the number of entries to write
++ * into /etc/utmp. This helps to keep you from exceeding a limited-user
++ * license.
++ */
++#undef USRLIMIT
++
++/*
++ * both must be defined if you want to favor tcsendbreak over
++ * other calls to generate a break condition on serial lines.
++ * (Do not bother, if you are not using plain tty windows.)
++ */
++#define POSIX_HAS_A_GOOD_TCSENDBREAK
++#define SUNOS4_AND_WE_TRUST_TCSENDBREAK
++
++/*
++ * to lower the interrupt load on the host machine, you may want to
++ * adjust the VMIN and VTIME settings used for plain tty windows.
++ * See the termio(4) manual page (Non-Canonical Mode Input Processing)
++ * for details.
++ * if undefined, VMIN=1, VTIME=0 is used as a default - this gives you
++ * best user responsiveness, but highest interrupt frequency.
++ * (Do not bother, if you are not using plain tty windows.)
++ */
++#define TTYVMIN 100
++#define TTYVTIME 2
++
++/*
++ * looks like the above values are ignored by setting FNDELAY.
++ * This is default for all pty/ttys, you may disable it for
++ * ttys here. After playing with it for a while, one may find out
++ * that this feature may cause screen to lock up.
++ */
++#ifdef bsdi
++# define TTY_DISABLE_FNBLOCK /* select barfs without it ... */
++#endif
++
++
++/*
++ * Some terminals, e.g. Wyse 120, use a bitfield to select attributes.
++ * This doesn't work with the standard so/ul/m? terminal entries,
++ * because they will cancel each other out.
++ * On TERMINFO machines, "sa" (sgr) may work. If you want screen
++ * to switch attributes only with sgr, define USE_SGR.
++ * This is *not* recomended, do this only if you must.
++ */
++#undef USE_SGR
++
++
++/*
++ * Define USE_LOCALE if you want screen to use the locale names
++ * for the name of the month and day of the week.
++ */
++#define USE_LOCALE
++
++/*
++ * Define USE_PAM if your system supports PAM (Pluggable Authentication
++ * Modules) and you want screen to use it instead of calling crypt().
++ * (You may also need to add -lpam to LIBS in the Makefile.)
++ */
++#undef USE_PAM
++
++/*
++ * Define CHECK_SCREEN_W if you want screen to set TERM to screen-w
++ * if the terminal width is greater than 131 columns. No longer needed
++ * on modern systems which use $COLUMNS or the tty settings instead.
++ */
++#undef CHECK_SCREEN_W
++
++/**********************************************************************
++ *
++ * End of User Configuration Section
++ *
++ * Rest of this file is modified by 'configure'
++ * Change at your own risk!
++ *
++ */
++])
++# end of AH_TOP
++
+ AC_PREFIX_PROGRAM(screen)
+ AC_PREFIX_PROGRAM(gzip)
+
+@@ -46,6 +363,7 @@
+ AC_PROG_GCC_TRADITIONAL
+ AC_ISC_POSIX
+
++AC_MSG_CHECKING([for compiler sanity])
+ AC_TRY_RUN(main(){exit(0);},,[
+ if test $CC != cc ; then
+ AC_NOTE(Your $CC failed - restarting with CC=cc)
+@@ -54,22 +372,17 @@
+ export CC
+ exec $0 $configure_args
+ fi
+-])
+-
+-AC_TRY_RUN(main(){exit(0);},,
+-exec 5>&2
+-eval $ac_link
+-AC_NOTE(CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;)
+-AC_NOTE($ac_compile)
+-AC_MSG_ERROR(Can't run the compiler - sorry))
++],AC_MSG_WARN([skipping test due to crosscompilation]))
+
++AC_MSG_CHECKING([if compiler sets exit status])
+ AC_TRY_RUN([
+ main()
+ {
+ int __something_strange_();
+ __something_strange_(0);
+ }
+-],AC_MSG_ERROR(Your compiler does not set the exit status - sorry))
++],AC_MSG_ERROR(Your compiler does not set the exit status - sorry),,
++AC_MSG_WARN(skipping test due to crosscompilation))
+
+ AC_PROG_AWK
+
+@@ -103,6 +416,7 @@
+ dnl
+ dnl **** special unix variants ****
+ dnl
++AH_TEMPLATE(ISC,[])
+ if test -n "$ISC"; then
+ AC_DEFINE(ISC) LIBS="$LIBS -linet"
+ fi
+@@ -114,11 +428,13 @@
+ dnl fi
+ dnl fi
+
++AH_TEMPLATE([sysV68],[])
+ if test -f /sysV68 ; then
+ AC_DEFINE(sysV68)
+ fi
+
+ AC_CHECKING(for MIPS)
++AH_TEMPLATE([MIPS],[])
+ if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then
+ oldlibs="$LIBS"
+ test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha.
+@@ -132,6 +448,8 @@
+ AC_CHECKING(wait3)
+ AC_TRY_LINK(,[wait3();], ,
+ AC_CHECKING(wait2)
++AH_TEMPLATE([USE_WAIT2],[On RISCOS we prefer wait2() over wait3(). rouilj@sni-usa.com])
++dnl TODO(Hannes) shipped config.h.in wraps the define in #ifdef BSDWAIT
+ AC_TRY_LINK(,[wait2();],
+ dnl John Rouillard (rouilj@sni-usa.com):
+ dnl need -I/usr/include/bsd in RISCOS otherwise sockets are broken, no
+@@ -154,9 +472,11 @@
+ oldlibs="$LIBS"
+ LIBS="$LIBS -lpyr"
+ AC_CHECKING(Pyramid OSX)
++AH_TEMPLATE([OSX], [Pyramid OSX])
+ AC_TRY_LINK(,[open_controlling_pty("")], AC_DEFINE(OSX), LIBS="$oldlibs")
+ fi
+
++AH_TEMPLATE([POSIX],[Define POSIX if your system supports IEEE Std 1003.1-1988 (POSIX).])
+ dnl ghazi@caip.rutgers.edu (Kaveh R. Ghazi):
+ dnl BBN butterfly is not POSIX, but a MACH BSD system.
+ dnl Do not define POSIX and TERMIO.
+@@ -183,6 +503,7 @@
+ fi
+
+ AC_CHECKING(for System V)
++AH_TEMPLATE([SYSV], [Define SYSV if your machine is SYSV complient (Sys V, HPUX, A/UX)])
+ AC_TRY_COMPILE(
+ [#include <sys/types.h>
+ #include <signal.h>
+@@ -198,6 +519,11 @@
+ oldlibs="$LIBS"
+ LIBS="$LIBS -lelf"
+ AC_CHECKING(SVR4)
++AH_TEMPLATE([SVR4],[])
++AH_TEMPLATE([BUGGYGETLOGIN],
++[If ttyslot() breaks getlogin() by returning indexes to utmp entries
++ of type DEAD_PROCESS, then our getlogin() replacement should be
++ selected by defining BUGGYGETLOGIN.])
+ AC_TRY_LINK([#include <utmpx.h>
+ ],,
+ [AC_CHECK_HEADER(dwarf.h, AC_DEFINE(SVR4) AC_DEFINE(BUGGYGETLOGIN),
+@@ -235,6 +561,9 @@
+ dnl
+
+ AC_CHECKING(BSD job jontrol)
++AH_TEMPLATE([BSDJOBS],
++[Define BSDJOBS if you have BSD-style job control (both process
++ groups and a tty that deals correctly with them)])
+ AC_TRY_LINK(
+ [#include <sys/types.h>
+ #include <sys/ioctl.h>
+@@ -255,6 +584,10 @@
+ dnl **** setreuid(), seteuid() ****
+ dnl
+ AC_CHECKING(setreuid)
++AH_TEMPLATE([HAVE_SETREUID],
++[If your system has the calls setreuid() and setregid(),
++ define HAVE_SETREUID. Otherwise screen will use a forked process to
++ safely create output files without retaining any special privileges.])
+ AC_TRY_LINK(,[
+ #ifdef __hpux
+ setresuid(0, 0, 0);
+@@ -269,6 +602,9 @@
+ dnl Solaris seteuid doesn't change the saved uid, bad for
+ dnl multiuser screen sessions
+ AC_CHECKING(seteuid)
++AH_TEMPLATE([HAVE_SETEUID],
++[If your system supports BSD4.4's seteuid() and setegid(), define
++ HAVE_SETEUID.])
+ AC_TRY_LINK(,[
+ #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news)
+ seteuid_is_broken(0);
+@@ -292,7 +628,8 @@
+ dnl **** FIFO tests ****
+ dnl
+
+-AC_CHECKING(fifos)
++AC_CACHE_CHECK([usable fifos],
++ [screen_cv_sys_fifo_usable],
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -357,12 +694,14 @@
+ exit(1);
+ exit(0);
+ }
+-], AC_NOTE(- your fifos are usable) fifo=1,
+-AC_NOTE(- your fifos are not usable))
+-rm -f /tmp/conftest*
++], screen_cv_sys_fifo_usable=yes, screen_cv_sys_fifo_usable=no))
+
+-if test -n "$fifo"; then
+-AC_CHECKING(for broken fifo implementation)
++if test X"$screen_cv_sys_fifo_usable" = Xyes; then
++AH_TEMPLATE([BROKEN_PIPE],
++[Define this if your system exits select() immediatly if a pipe is
++ opened read-only and no writer has opened it.])
++AC_CACHE_CHECK([broken fifo implementation],
++ [screen_cv_sys_fifo_broken_impl],
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <fcntl.h>
+@@ -407,9 +746,11 @@
+ exit(1);
+ exit(0);
+ }
+-], AC_NOTE(- your implementation is ok),
+-AC_NOTE(- you have a broken implementation) AC_DEFINE(BROKEN_PIPE) fifobr=1)
+-rm -f /tmp/conftest*
++], screen_cv_sys_fifo_broken_impl=no,
++screen_cv_sys_fifo_broken_impl=yes))
++if test X"$screen_cv_sys_fifo_broken_impl" = Xyes; then
++ AC_DEFINE(BROKEN_PIPE)
++fi
+ fi
+
+ dnl
+@@ -418,7 +759,8 @@
+ dnl may need LIBS="$LIBS -lsocket" here
+ dnl
+
+-AC_CHECKING(sockets)
++AC_CACHE_CHECK([sockets are usable],
++ [screen_cv_sys_sockets_usable],
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+@@ -469,12 +811,16 @@
+ exit(1);
+ exit(0);
+ }
+-], AC_NOTE(- your sockets are usable) sock=1,
+-AC_NOTE(- your sockets are not usable))
+-rm -f /tmp/conftest*
++], screen_cv_sys_sockets_usable=yes,
++screen_cv_sys_sockets_usable=no))
+
+-if test -n "$sock"; then
++if test X"$screen_cv_sys_sockets_usable" = Xyes; then
+ AC_CHECKING(socket implementation)
++AH_TEMPLATE([SOCK_NOT_IN_FS],
++[Define this if the unix-domain socket implementation doesn't
++ create a socket in the filesystem.])
++AC_CACHE_CHECK([if sockets are not stored in the filesystem],
++ [screen_cv_sys_sockets_nofs],
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -500,22 +846,25 @@
+ close(s);
+ exit(0);
+ }
+-],AC_NOTE(- you are normal),
+-AC_NOTE(- unix domain sockets are not kept in the filesystem)
+-AC_DEFINE(SOCK_NOT_IN_FS) socknofs=1)
+-rm -f /tmp/conftest*
++], screen_cv_sys_sockets_nofs=no,
++screen_cv_sys_sockets_nofs=yes))
++
++if test X"$screen_cv_sys_sockets_nofs" = Xyes; then
++ AC_DEFINE(SOCK_NOT_IN_FS)
++fi
+ fi
+
+
+ dnl
+ dnl **** choose sockets or fifos ****
+ dnl
+-if test -n "$fifo"; then
+- if test -n "$sock"; then
+- if test -n "$nore"; then
++AH_TEMPLATE([NAMEDPIPE], [Define this if your system supports named pipes.])
++if test X"$screen_cv_sys_fifo_usable" = Xyes; then
++ if test X"$screen_cv_sys_sockets_usable" = Xyes; then
++ if test X"$screen_cv_sys_sockets_nofs" = Xyes; then
+ AC_NOTE(- hmmm... better take the fifos)
+ AC_DEFINE(NAMEDPIPE)
+- elif test -n "$fifobr"; then
++ elif test X"$screen_cv_sys_fifo_broken_impl" = Xyes; then
+ AC_NOTE(- as your fifos are broken lets use the sockets.)
+ else
+ AC_NOTE(- both sockets and fifos usable. let's take fifos.)
+@@ -525,7 +874,7 @@
+ AC_NOTE(- using named pipes, of course)
+ AC_DEFINE(NAMEDPIPE)
+ fi
+-elif test -n "$sock"; then
++elif test X"$screen_cv_sys_sockets_usable" = Xyes; then
+ AC_NOTE(- using unix-domain sockets, of course)
+ else
+ AC_MSG_ERROR(you have neither usable sockets nor usable pipes -> no screen)
+@@ -535,7 +884,11 @@
+ dnl **** check the select implementation ****
+ dnl
+
+-AC_CHECKING(select return value)
++AH_TEMPLATE([SELECT_BROKEN],
++[If the select return value doesn't treat a descriptor that is
++ usable for reading and writing as two hits, define SELECT_BROKEN.])
++AC_CACHE_CHECK([for broken select return value],
++ [screen_cv_sys_select_broken_retval],
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -634,19 +987,26 @@
+ exit(1);
+ exit(0);
+ }
+-],AC_NOTE(- select is ok),
+-AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN))
++], screen_cv_sys_select_broken_retval=no,
++screen_cv_sys_select_broken_retval=yes))
++if test X"$screen_cv_sys_select_broken_retval" = Xyes; then
++ AC_DEFINE(SELECT_BROKEN)
++fi
+
+ dnl
+ dnl **** termcap or terminfo ****
+ dnl
++AH_TEMPLATE([TERMINFO],
++[Define TERMINFO if your machine emulates the termcap routines
++ with the terminfo database.
++ Thus the .screenrc file is parsed for
++ the command 'terminfo' and not 'termcap'])
++
+ AC_CHECKING(for tgetent)
+ AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
+ olibs="$LIBS"
+-if test -f /usr/lib/libncursesw.so ; then
+- LIBS="-lncursesw $olibs"
+-fi
+ AC_CHECKING(libncursesw)
++AC_CHECK_LIB(ncursesw,tgetent)
+ AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
+ LIBS="-lcurses $olibs"
+ AC_CHECKING(libcurses)
+@@ -668,24 +1028,39 @@
+ AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
+ AC_MSG_ERROR(!!! no tgetent - no screen)))))))
+
+-AC_TRY_RUN([
++AC_CACHE_CHECK([using terminfo database],[screen_cv_sys_terminfo_used],
++ AC_TRY_RUN([
+ main()
+ {
+ exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1);
+-}], AC_NOTE(- you use the termcap database),
+-AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO))
++}
++ ], screen_cv_sys_terminfo_used=no,
++ screen_cv_sys_terminfo_used=yes)
++)
++
++if test X"$screen_cv_sys_terminfo_used" = Xyes; then
++ AC_DEFINE(TERMINFO)
++fi
++
+ AC_CHECKING(ospeed)
++AH_TEMPLATE([NEED_OSPEED],[If your library does not define ospeed, define this.])
+ AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED))
+
+ dnl
+ dnl **** PTY specific things ****
+ dnl
++AH_TEMPLATE([HAVE_DEV_PTC],
++[define HAVE_DEV_PTC if you have a /dev/ptc character special
++ device.])
+ AC_CHECKING(for /dev/ptc)
+ if test -r /dev/ptc; then
+ AC_DEFINE(HAVE_DEV_PTC)
+ fi
+
+ AC_CHECKING(for SVR4 ptys)
++AH_TEMPLATE([HAVE_SVR4_PTYS],
++[define HAVE_SVR4_PTYS if you have a /dev/ptmx character special
++ device and support the ptsname(), grantpt(), unlockpt() functions.])
+ sysvr4ptys=
+ if test -c /dev/ptmx ; then
+ AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS)
+@@ -701,6 +1076,13 @@
+ fi
+
+ AC_CHECKING(for ptyranges)
++AH_TEMPLATE([PTYRANGE0],
++[define PTYRANGE0 and or PTYRANGE1 if you want to adapt screen
++ to unusual environments. E.g. For SunOs the defaults are "qpr" and
++ "0123456789abcdef". For SunOs 4.1.2
++ #define PTYRANGE0 "pqrstuvwxyzPQRST"
++ is recommended by Dan Jacobson.])
++AH_TEMPLATE([PTYRANGE1],[])
+ if test -d /dev/ptym ; then
+ pdir='/dev/ptym'
+ else
+@@ -817,6 +1199,9 @@
+ dnl **** utmp handling ****
+ dnl
+ AC_CHECKING(getutent)
++AH_TEMPLATE([GETUTENT],
++[If your system has getutent(), pututline(), etc. to write to the
++ utmp file, define GETUTENT.])
+ AC_TRY_LINK([
+ #include <time.h> /* to get time_t on SCO */
+ #include <sys/types.h>
+@@ -850,6 +1235,7 @@
+ [int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent();], AC_DEFINE(GETUTENT), LIBS="$olibs")
+ )
+ AC_CHECKING(ut_host)
++AH_TEMPLATE([UTHOST],[Define UTHOST if the utmp file has a host field.])
+ AC_TRY_COMPILE([
+ #include <time.h>
+ #include <sys/types.h>
+@@ -860,8 +1246,9 @@
+ #include <utmp.h>
+ #endif
+ ],[struct utmp u; u.ut_host[0] = 0;], AC_DEFINE(UTHOST))
++AH_TEMPLATE([HAVE_UTEMPTER],[Define if you have the utempter utmp helper program])
+ AC_CHECK_HEADER(utempter.h, have_utempter=yes, have_utempter=no)
+-if test "$have_utempter" = yes; then
++if test X"$have_utempter" = Xyes; then
+ AC_DEFINE(HAVE_UTEMPTER)
+ LIBS="$LIBS -lutempter"
+ fi
+@@ -869,20 +1256,39 @@
+ dnl
+ dnl **** loadav ****
+ dnl
++
++AH_TEMPLATE([LOADAV],
++[If you want the "time" command to display the current load average
++ define LOADAV. Maybe you must install screen with the needed
++ privileges to read /dev/kmem.
++ Note that NLIST_ stuff is only checked, when getloadavg() is not available.
++])
++AH_TEMPLATE([LOADAV_NUM])
++AH_TEMPLATE([LOADAV_TYPE])
++AH_TEMPLATE([LOADAV_SCALE])
++AH_TEMPLATE([LOADAV_GETLOADAVG])
++AH_TEMPLATE([LOADAV_UNIX])
++AH_TEMPLATE([LOADAV_AVENRUN])
++AH_TEMPLATE([LOADAV_USE_NLIST64])
++
++AH_TEMPLATE([NLIST_DECLARED])
++AH_TEMPLATE([NLIST_STRUCT])
++AH_TEMPLATE([NLIST_NAME_UNION])
++
+ AC_CHECKING(for libutil(s))
+-test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils"
+-test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil"
++dnl I have no idea whether "login" is an appropriate symbol to check for here - Hannes
++AC_CHECK_LIB(utils,login)
++AC_CHECK_LIB(util,login)
+
+ AC_CHECKING(getloadavg)
+ AC_TRY_LINK(,[getloadavg((double *)0, 0);],
+ AC_DEFINE(LOADAV_GETLOADAVG) load=1,
+-if test -f /usr/lib/libkvm.a ; then
+ olibs="$LIBS"
+-LIBS="$LIBS -lkvm"
++AC_CHECK_LIB(kvm,kvm_open,
+ AC_CHECKING(getloadavg with -lkvm)
+ AC_TRY_LINK(,[getloadavg((double *)0, 0);],
+ AC_DEFINE(LOADAV_GETLOADAVG) load=1, LIBS="$olibs")
+-fi
++)
+ )
+
+ if test -z "$load" ; then
+@@ -1024,6 +1430,11 @@
+ dnl
+ dnl **** signal handling ****
+ dnl
++
++AH_TEMPLATE([SIGVOID],
++[Define SIGVOID if your signal handlers return void. On older
++ systems, signal returns int, but on newer ones, it returns void.])
++
+ if test -n "$posix" ; then
+
+ dnl POSIX has reliable signals with void return type.
+@@ -1041,6 +1452,7 @@
+ #endif
+ extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID))
+ AC_CHECKING(sigset)
++AH_TEMPLATE([USESIGSET], [Define USESIGSET if you have sigset for BSD 4.1 reliable signals.])
+ AC_TRY_LINK([
+ #include <sys/types.h>
+ #include <signal.h>
+@@ -1052,6 +1464,9 @@
+ #endif
+ ], AC_DEFINE(USESIGSET))
+ AC_CHECKING(signal implementation)
++AH_TEMPLATE([SYSVSIGS],
++[Define SYSVSIGS if signal handlers must be reinstalled after
++ they have been called.])
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <signal.h>
+@@ -1094,13 +1509,14 @@
+ dnl
+
+ AC_CHECKING(for crypt and sec libraries)
+-test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d"
++dnl I have no idea whether "crypt" is an appropriate symbol to check for here - Hannes
++AC_CHECK_LIB(crypt_d,crypt)
+ oldlibs="$LIBS"
+-LIBS="$LIBS -lcrypt"
+ AC_CHECKING(crypt)
+ AC_TRY_LINK(,,,LIBS="$oldlibs")
+-test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec"
+-test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow"
++AC_CHECK_LIB(crypt,crypt)
++AC_CHECK_LIB(sec,crypt)
++AC_CHECK_LIB(shadow,getspnam)
+ oldlibs="$LIBS"
+ LIBS="$LIBS -lsun"
+ AC_CHECKING(IRIX sun library)
+@@ -1123,6 +1539,13 @@
+ dnl **** misc things ****
+ dnl
+ AC_CHECKING(wait union)
++AH_TEMPLATE([BSDWAIT],
++[Define BSDWAIT if your system defines a 'union wait' in <sys/wait.h>
++
++ Only allow BSDWAIT i.e. wait3 on nonposix systems, since
++ posix implies wait(3) and waitpid(3). vdlinden@fwi.uva.nl
++ TODO(Hannes) shipped config.h.in does that with a #ifdef
++])
+ AC_TRY_COMPILE([#include <sys/types.h>
+ #include <sys/wait.h>
+ ],[
+@@ -1133,6 +1556,12 @@
+ #endif
+ ],AC_DEFINE(BSDWAIT))
+
++AH_TEMPLATE([TERMIO],
++[Define TERMIO if you have struct termio instead of struct sgttyb.
++ This is usually the case for SVID systems, where BSD uses sgttyb.
++ POSIX systems should define this anyway, even though they use
++ struct termios.])
++
+ if test -z "$butterfly"; then
+ AC_CHECKING(for termio or termios)
+ AC_TRY_CPP([#include <termio.h>], AC_DEFINE(TERMIO),
+@@ -1142,17 +1571,35 @@
+ )
+ fi
+
++AH_TEMPLATE([CYTERMIO], [Define CYTERMIO if you have cyrillic termio modes.])
++
+ dnl AC_CHECK_HEADER(shadow.h, AC_DEFINE(SHADOWPW))
+ AC_CHECKING(getspnam)
++AH_TEMPLATE([SHADOWPW],
++[If the passwords are stored in a shadow file and you want the
++ builtin lock to work properly, define SHADOWPW.])
+ AC_TRY_LINK([#include <shadow.h>], [getspnam("x");],AC_DEFINE(SHADOWPW))
+
+ AC_CHECKING(getttyent)
++AH_TEMPLATE([GETTTYENT],
++[If your system has the new format /etc/ttys (like 4.3 BSD) and the
++ getttyent(3) library functions, define GETTTYENT.])
+ AC_TRY_LINK(,[getttyent();], AC_DEFINE(GETTTYENT))
+
+ AC_CHECKING(fdwalk)
++AH_TEMPLATE([HAVE_FDWALK],
++[Newer versions of Solaris include fdwalk, which can greatly improve
++ the startup time of screen; otherwise screen spends a lot of time
++ closing file descriptors.])
+ AC_TRY_LINK([#include <stdlib.h>], [fdwalk(NULL, NULL);],AC_DEFINE(HAVE_FDWALK))
+
+-AC_CHECKING(whether memcpy/memmove/bcopy handles overlapping arguments)
++AH_TEMPLATE([USEBCOPY],
++[Define USEBCOPY if the bcopy/memcpy from your system's C library
++ supports the overlapping of source and destination blocks. When
++ undefined, screen uses its own (probably slower) version of bcopy().])
++
++AC_CACHE_CHECK([if bcopy handles overlap],
++ [screen_cv_sys_bcopy_overlap],
+ AC_TRY_RUN([
+ main() {
+ char buf[10];
+@@ -1165,8 +1612,21 @@
+ if (strncmp(buf, "cdedef", 6))
+ exit(1);
+ exit(0); /* libc version works properly. */
+-}], AC_DEFINE(USEBCOPY))
++}], screen_cv_sys_bcopy_overlap=yes,
++screen_cv_sys_bcopy_overlap=no))
++if test X"$screen_cv_sys_bcopy_overlap" = Xyes; then
++ AC_DEFINE(USEBCOPY)
++fi
+
++AH_TEMPLATE([USEMEMMOVE],
++[SYSV machines may have a working memcpy() -- Oh, this is
++ quite unlikely. Tell me if you see one.
++ "But then, memmove() should work, if at all available" he thought...
++ Boing, never say "works everywhere" unless you checked SCO UNIX.
++ Their memove fails the test in the configure script. Sigh. (Juergen)
++])
++AC_CACHE_CHECK([if memmove handles overlap],
++ [screen_cv_sys_memmove_overlap],
+ AC_TRY_RUN([
+ #define bcopy(s,d,l) memmove(d,s,l)
+ main() {
+@@ -1180,9 +1640,15 @@
+ if (strncmp(buf, "cdedef", 6))
+ exit(1);
+ exit(0); /* libc version works properly. */
+-}], AC_DEFINE(USEMEMMOVE))
+-
++}], screen_cv_sys_memmove_overlap=yes,
++screen_cv_sys_memmove_overlap=no))
++if test X"$screen_cv_sys_memmove_overlap" = Xyes; then
++ AC_DEFINE(USEMEMMOVE)
++fi
+
++AH_TEMPLATE([USEMEMCPY],[])
++AC_CACHE_CHECK([if memcpy handles overlap],
++ [screen_cv_sys_memcpy_overlap],
+ AC_TRY_RUN([
+ #define bcopy(s,d,l) memcpy(d,s,l)
+ main() {
+@@ -1196,9 +1662,19 @@
+ if (strncmp(buf, "cdedef", 6))
+ exit(1);
+ exit(0); /* libc version works properly. */
+-}], AC_DEFINE(USEMEMCPY))
++}], screen_cv_sys_memcpy_overlap=yes,
++screen_cv_sys_memcpy_overlap=no))
++if test X"$screen_cv_sys_memcpy_overlap" = Xyes; then
++ AC_DEFINE(USEMEMCPY)
++fi
+
+ AC_MSG_CHECKING(long file names)
++AH_TEMPLATE([NAME_MAX],
++[If you are on a SYS V machine that restricts filename length to 14
++ characters, you may need to enforce that by setting NAME_MAX to 14])
++dnl TODO(Hannes) shipped config.h.in has
++dnl #undef NAME_MAX /* KEEP_UNDEF_HERE override system value */
++dnl ahead of this
+ (echo 1 > /tmp/conftest9012345) 2>/dev/null
+ (echo 2 > /tmp/conftest9012346) 2>/dev/null
+ val=`cat /tmp/conftest9012345 2>/dev/null`
+@@ -1211,17 +1687,28 @@
+ rm -f /tmp/conftest*
+
+ AC_MSG_CHECKING(for vsprintf)
++AH_TEMPLATE([USEVARARGS],
++[If your system has vsprintf() and requires the use of the macros in
++ "varargs.h" to use functions with variable arguments,
++ define USEVARARGS.])
+ AC_TRY_LINK([#include <stdarg.h>],[va_list valist; vsprintf(0,0,valist);], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no))
+
+ AC_HEADER_DIRENT
+
+ AC_MSG_CHECKING(for setenv)
++AH_TEMPLATE([USESETENV], [If your system has setenv() and unsetenv() define USESETENV])
+ AC_TRY_LINK(,[setenv((char *)0,(char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes);AC_DEFINE(USESETENV),
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(for putenv)
++AH_TEMPLATE([NEEDPUTENV],
++[If your system does not come with a setenv()/putenv()/getenv()
++ functions, you may bring in our own code by defining NEEDPUTENV.])
+ AC_TRY_LINK(,[putenv((char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no);AC_DEFINE(NEEDPUTENV)
+ ))
+ AC_MSG_CHECKING([for nl_langinfo(CODESET)])
++AH_TEMPLATE([HAVE_NL_LANGINFO],
++[define HAVE_NL_LANGINFO if your system has the nl_langinfo() call
++ and <langinfo.h> defines CODESET.])
+ AC_TRY_LINK([
+ #include <langinfo.h>
+ ],[nl_langinfo(CODESET);], AC_MSG_RESULT(yes);AC_DEFINE(HAVE_NL_LANGINFO), AC_MSG_RESULT(no))
+@@ -1271,7 +1758,8 @@
+ dnl Ptx bug workaround -- insert -lc after -ltermcap
+ test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq"
+
+-AC_TRY_RUN(main(){exit(0);},,AC_MSG_ERROR(Can't run the compiler - internal error. Sorry.))
++AC_MSG_CHECKING(compiler sanity)
++AC_TRY_RUN(main(){exit(0);},,AC_MSG_ERROR(Can't run the compiler - internal error. Sorry.), AC_MSG_WARN(Skipping test due to crosscompilation))
+
+ ETCSCREENRC="\"/usr/local/etc/screenrc\""
+ if test -n "$prefix"; then
diff --git a/packages/screen/screen_4.0.2.bb b/packages/screen/screen_4.0.2.bb
index 29681304ec..0f79f40c1c 100644
--- a/packages/screen/screen_4.0.2.bb
+++ b/packages/screen/screen_4.0.2.bb
@@ -7,7 +7,7 @@ DEPENDS = "ncurses"
PR = "r2"
SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
- ${DEBIAN_MIRROR}/main/s/screen/screen_4.0.2-4.1sarge1.diff.gz;patch=1 \
+ file://screen_4.0.2-4.1sarge1.diff.gz;patch=1 \
file://configure.patch;patch=1"
inherit autotools
diff --git a/packages/screen/screen_4.0.3.bb b/packages/screen/screen_4.0.3.bb
new file mode 100644
index 0000000000..1165d46d33
--- /dev/null
+++ b/packages/screen/screen_4.0.3.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Screen is a full-screen window manager \
+that multiplexes a physical terminal between several \
+processes, typically interactive shells."
+LICENSE = "GPL"
+SECTION = "console/utils"
+DEPENDS = "ncurses"
+PR = "r0"
+
+# patch needs adapting
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
+ file://configure.patch;patch=1"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-pty-mode=0620 --with-pty-group=5"
diff --git a/packages/serial-utils/pty-forward-native.bb b/packages/serial-utils/pty-forward-native.bb
index 972070d6b6..54ff591928 100644
--- a/packages/serial-utils/pty-forward-native.bb
+++ b/packages/serial-utils/pty-forward-native.bb
@@ -1,7 +1,11 @@
-LICENSE="GPL"
-SUMMARY="Receive a forwarded serial from serial-forward and provide a PTY"
+DESCRIPTION = "Receive a forwarded serial from serial-forward and provide a PTY"
+AUTHOR = "Holger 'Zecke' Freyther"
+LICENSE = "GPL"
+SECTION = "console/network"
+PV = "1.0.0+svnr${SRCREV}""
+PR = "r0"
-SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http"
+SRC_URI = "svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http"
S = "${WORKDIR}/serial_forward"
inherit native
@@ -21,4 +25,3 @@ do_deploy() {
}
addtask deploy before do_package after do_install
-
diff --git a/packages/serial-utils/serial-forward.bb b/packages/serial-utils/serial-forward.bb
index 3cc33770d6..c3b879a0ee 100644
--- a/packages/serial-utils/serial-forward.bb
+++ b/packages/serial-utils/serial-forward.bb
@@ -1,8 +1,12 @@
-LICENSE="GPL"
-SUMMARY="Forward a serial using TCP/IP"
+DESCRIPTION = "Forward a serial using TCP/IP"
+AUTHOR = "Holger 'Zecke' Freyther'"
+LICENSE = "GPL"
+SECTION = "console/devel"
+PV = "1.0.0+svnr${SRCREV}"
+PR = "r0"
-SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http"
-S="${WORKDIR}/serial_forward"
+SRC_URI = "svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http"
+S = "${WORKDIR}/serial_forward"
do_compile() {
cd ${S}
diff --git a/packages/setpwc/files/Makefile.patch b/packages/setpwc/files/Makefile.patch
deleted file mode 100644
index 257f90a1ac..0000000000
--- a/packages/setpwc/files/Makefile.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-*** setpwc-0.9/Makefile.orig 2005-07-26 09:16:09.000000000 +0930
---- setpwc-0.9/Makefile 2005-07-26 09:16:18.000000000 +0930
-***************
-*** 22,30 ****
-
- setpwc: $(OBJS)
- $(CC) -Wall -W $(OBJS) $(LDFLAGS) -o setpwc
-- strip setpwc
-- echo
-- echo Oh, blatant plug: http://keetweej.vanheusden.com/wishlist.html
-
- install: setpwc
- cp setpwc /usr/bin
---- 22,27 ----
diff --git a/packages/setpwc/files/makefile.diff b/packages/setpwc/files/makefile.diff
deleted file mode 100644
index e129db7b56..0000000000
--- a/packages/setpwc/files/makefile.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- setpwc-1.1/Makefile.orig 2006-02-06 03:25:11.000000000 +0100
-+++ setpwc-1.1/Makefile 2006-02-06 03:25:27.000000000 +0100
-@@ -22,9 +22,6 @@
-
- setpwc: $(OBJS)
- $(CC) -Wall -W $(OBJS) $(LDFLAGS) -o setpwc
-- strip setpwc
-- #
-- # Oh, blatant plug: http://keetweej.vanheusden.com/wishlist.html
-
- install: setpwc
- cp setpwc /usr/bin
diff --git a/packages/setpwc/setpwc_0.9.bb b/packages/setpwc/setpwc_0.9.bb
deleted file mode 100644
index 79e24794d2..0000000000
--- a/packages/setpwc/setpwc_0.9.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "Set various aspects of Philips (and compatible) WebCams."
-SECTION = "console"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.vanheusden.com/setpwc/"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "http://www.vanheusden.com/setpwc/setpwc-${PV}.tgz \
- file://Makefile.patch;patch=1"
-
-inherit autotools
-
-INHIBIT_AUTO_STAGE = "1"
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 ${S}/setpwc ${D}${bindir}/setpwc
-}
diff --git a/packages/setpwc/setpwc_1.1.bb b/packages/setpwc/setpwc_1.1.bb
deleted file mode 100644
index 76b2ac6f82..0000000000
--- a/packages/setpwc/setpwc_1.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "Set various aspects of Philips (and compatible) WebCams."
-SECTION = "console"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.vanheusden.com/setpwc/"
-LICENSE = "GPL"
-PR = "r0"
-
-SRC_URI = "http://www.vanheusden.com/setpwc/setpwc-${PV}.tgz \
- file://makefile.diff;patch=1"
-
-inherit autotools
-
-INHIBIT_AUTO_STAGE = "1"
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 ${S}/setpwc ${D}${bindir}/setpwc
-}
diff --git a/packages/setpwc/setpwc_1.2.bb b/packages/setpwc/setpwc_1.2.bb
new file mode 100644
index 0000000000..5f67b94d2d
--- /dev/null
+++ b/packages/setpwc/setpwc_1.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Set various aspects of Philips (and compatible) WebCams."
+SECTION = "console"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.vanheusden.com/setpwc/"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.vanheusden.com/setpwc/setpwc-${PV}.tgz"
+
+TARGET_CC_ARCH += " ${LDFLAGS}"
+
+inherit autotools
+
+INHIBIT_AUTO_STAGE = "1"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/setpwc ${D}${bindir}/setpwc
+}
diff --git a/packages/sg3-utils/files/Makefile.patch b/packages/sg3-utils/files/Makefile.patch
new file mode 100644
index 0000000000..cc5babfa26
--- /dev/null
+++ b/packages/sg3-utils/files/Makefile.patch
@@ -0,0 +1,246 @@
+Index: sg3-utils-1.24/Makefile
+===================================================================
+--- sg3-utils-1.24.orig/Makefile 2009-01-27 16:29:26.000000000 -0800
++++ sg3-utils-1.24/Makefile 2009-01-27 22:31:04.000000000 -0800
+@@ -1,6 +1,6 @@
+ SHELL = /bin/sh
+
+-PREFIX=/usr/local
++PREFIX=/usr
+ LIBDIR=$(DESTDIR)/$(PREFIX)/lib
+ INSTDIR=$(DESTDIR)/$(PREFIX)/bin
+ MANDIR=$(DESTDIR)/$(PREFIX)/share/man
+@@ -8,6 +8,8 @@
+
+ CC = gcc
+ LD = gcc
++LIBTOOL = libtool
++LT_EXTRA = --tag=CC
+
+ EXECS = sg_dd sgp_dd sgm_dd sg_read sg_map sg_scan sg_rbuf \
+ sginfo sg_readcap sg_turs sg_inq sg_test_rwbuf \
+@@ -64,164 +66,164 @@
+ $(CC) $(INCLUDES) $(CFLAGS) $(S_CFLAGS) -c -o $@ $<
+
+ sg_lib.lo: sg_lib.o
+- libtool --mode=compile $(CC) -c sg_lib.c
++ $(LIBTOOL) $(LT_EXTRA) --mode=compile $(CC) -c sg_lib.c
+
+ sg_cmds_basic.lo: sg_cmds_basic.o
+- libtool --mode=compile $(CC) -c sg_cmds_basic.c
++ $(LIBTOOL) $(LT_EXTRA) --mode=compile $(CC) -c sg_cmds_basic.c
+
+ sg_cmds_extra.lo: sg_cmds_extra.o
+- libtool --mode=compile $(CC) -c sg_cmds_extra.c
++ $(LIBTOOL) $(LT_EXTRA) --mode=compile $(CC) -c sg_cmds_extra.c
+
+ sg_pt_linux.lo: sg_pt_linux.o
+- libtool --mode=compile $(CC) -c sg_pt_linux.c
++ $(LIBTOOL) $(LT_EXTRA) --mode=compile $(CC) -c sg_pt_linux.c
+
+ libsgutils.la: sg_lib.lo sg_cmds_basic.lo sg_cmds_extra.lo sg_pt_linux.lo
+- libtool --mode=link $(LD) -o libsgutils.la sg_lib.lo sg_cmds_basic.lo \
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o libsgutils.la sg_lib.lo sg_cmds_basic.lo \
+ sg_cmds_extra.lo sg_pt_linux.lo -rpath $(LIBDIR) \
+ -version-info $(LIB_VINFO)
+
+ # libsgutils.la: sg_lib.lo sg_cmds_basic.lo sg_cmds_extra.lo
+-# libtool --mode=link $(LD) -o libsgutils.la sg_lib.lo sg_cmds_basic.lo \
++# $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o libsgutils.la sg_lib.lo sg_cmds_basic.lo \
+ # sg_cmds_extra.lo -rpath $(LIBDIR) -release $(RELEASE)
+
+ sg_inq: sg_inq.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_dd: sg_dd.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_scan: sg_scan.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sginfo: sginfo.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_start: sg_start.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_rbuf: sg_rbuf.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_readcap: sg_readcap.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sgp_dd.o: sgp_dd.c
+ $(CC) $(INCLUDES) $(CFLAGS) $(S_CFLAGS) $(CFLAGS_PTHREADS) \
+ -c -o sgp_dd.o $<
+
+ sgp_dd: sgp_dd.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^ -lpthread
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^ -lpthread
+
+ sgm_dd: sgm_dd.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_map: sg_map.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_turs: sg_turs.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_test_rwbuf: sg_test_rwbuf.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_read: sg_read.o sg_io_linux.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_reset: sg_reset.o
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_modes: sg_modes.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_logs: sg_logs.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_senddiag: sg_senddiag.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_opcodes: sg_opcodes.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_persist: sg_persist.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_write_long: sg_write_long.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_read_long: sg_read_long.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_requests: sg_requests.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_ses: sg_ses.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_verify: sg_verify.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_emc_trespass: sg_emc_trespass.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_luns: sg_luns.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_sync: sg_sync.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_prevent: sg_prevent.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_get_config: sg_get_config.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_wr_mode: sg_wr_mode.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_rtpg: sg_rtpg.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_reassign: sg_reassign.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_format: sg_format.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_rmsn: sg_rmsn.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_ident: sg_ident.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_map26: sg_map26.o
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_rdac: sg_rdac.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_vpd: sg_vpd.o sg_vpd_vendor.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_sat_identify: sg_sat_identify.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_read_buffer: sg_read_buffer.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_write_buffer: sg_write_buffer.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+ sg_raw: sg_raw.o libsgutils.la
+- libtool --mode=link $(LD) -o $@ $(LDFLAGS) $^
++ $(LIBTOOL) $(LT_EXTRA) --mode=link $(LD) -o $@ $(LDFLAGS) $^
+
+
+ install: $(EXECS)
+ install -d $(INSTDIR)
+ install -d $(LIBDIR)
+- libtool --mode=install install -c libsgutils.la $(LIBDIR)/libsgutils.la
+- libtool --finish $(LIBDIR)
++ $(LIBTOOL) $(LT_EXTRA) --mode=install install -c libsgutils.la $(LIBDIR)/libsgutils.la
++ $(LIBTOOL) $(LT_EXTRA) --finish $(LIBDIR)
+ for name in $^; \
+- do libtool --mode=install install -m 755 \
++ do $(LIBTOOL) $(LT_EXTRA) --mode=install install -m 755 \
+ $$name $(INSTDIR); \
+ done
+ install -d $(MANDIR)/$(MAN_PREF)
+@@ -235,7 +237,7 @@
+ done
+
+ uninstall:
+- libtool --mode=uninstall rm -f $(LIBDIR)/libsgutils.la
++ $(LIBTOOL) $(LT_EXTRA) --mode=uninstall rm -f $(LIBDIR)/libsgutils.la
+ dists="$(EXECS)"; \
+ for name in $$dists; do \
+ rm -f $(INSTDIR)/$$name; \
diff --git a/packages/sg3-utils/sg3-utils_1.24.bb b/packages/sg3-utils/sg3-utils_1.24.bb
new file mode 100644
index 0000000000..135ba0f817
--- /dev/null
+++ b/packages/sg3-utils/sg3-utils_1.24.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Utilities for working with generic SCSI devices"
+AUTHOR = "Eric Schwartz (Skif) <emschwar@debian.org>"
+HOMEPAGE = "http://packages.qa.debian.org/s/sg3-utils.html"
+SECTION = "console/admin"
+LICENSE = "GPLv2"
+PR = "r0"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/s/sg3-utils/sg3-utils_${PV}.orig.tar.gz \
+ file://Makefile.patch;patch=1"
+
+S = "${WORKDIR}/sg3-utils-${PV}"
+
+inherit autotools
diff --git a/packages/slugos-init/files/setup-optware.sh b/packages/slugos-init/files/setup-optware.sh
new file mode 100644
index 0000000000..d4ae619491
--- /dev/null
+++ b/packages/slugos-init/files/setup-optware.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+if test 0 != `id -u`; then
+ echo 'Please run as root'
+ exit 1
+fi
+
+optware_target=slugos5be
+feed=http://ipkg.nslu2-linux.org/feeds/optware/${optware_target}/cross/unstable
+latest_xsh=`wget -q -O- ${feed} | grep '\.xsh' | sed -e 's/.*xsh">//' -e 's/<.*//'`
+
+if test -n "${latest_xsh}"; then
+ cd /tmp
+ rm -f ${latest_xsh}
+ wget ${feed}/${latest_xsh}
+ sh ${latest_xsh}
+fi
diff --git a/packages/slugos-init/files/sysconf b/packages/slugos-init/files/sysconf
index 3059a466da..8d59d5d6f3 100644
--- a/packages/slugos-init/files/sysconf
+++ b/packages/slugos-init/files/sysconf
@@ -381,7 +381,7 @@ sysconf_restore_conffiles(){
else
echo "sysconf_restore_conffiles: $file: timestamp copy failed (ignored)" >&2
fi
- elif test -h "$saved/file" -o -h "$ffsdir/$file"
+ elif test -h "$saved/$file" -o -h "$ffsdir/$file"
then
# new or old symbolic link
if test -h "$saved/$file" -a -h "$ffsdir/$file" &&
@@ -396,7 +396,7 @@ sysconf_restore_conffiles(){
echo "$file"
echo "$file" >&3;;
diff) # need user input
- if sysconf_verify_link "$file" <>/dev/tty >&0 2>&0
+ if sysconf_verify_link "$file" </dev/tty >/dev/tty 2>&1
then
echo "$file"
echo "$file" >&3
@@ -420,7 +420,7 @@ sysconf_restore_conffiles(){
echo "$file"
echo "$file" >&3;;
diff) # the files are different, get user input
- if sysconf_verify "$file" <>/dev/tty >&0 2>&0
+ if sysconf_verify "$file" </dev/tty >/dev/tty 2>&1
then
echo "$file"
echo "$file" >&3
@@ -456,7 +456,7 @@ sysconf_test_restore(){
elif test "$file" = "etc/.configured"
then
: # special handling
- elif test -h "$saved/file" -o -h "$ffsdir/$file"
+ elif test -h "$saved/$file" -o -h "$ffsdir/$file"
then
# new or old symbolic link
if test -h "$saved/$file" -a -h "$ffsdir/$file" &&
diff --git a/packages/slugos-init/slugos-init_5.0.bb b/packages/slugos-init/slugos-init_5.0.bb
index e7a45a94aa..beeaa34135 100644
--- a/packages/slugos-init/slugos-init_5.0.bb
+++ b/packages/slugos-init/slugos-init_5.0.bb
@@ -4,7 +4,7 @@ PRIORITY = "required"
LICENSE = "GPL"
DEPENDS = "base-files devio"
RDEPENDS = "busybox devio"
-PR = "r8"
+PR = "r10"
SRC_URI = "file://boot/flash \
file://boot/disk \
@@ -27,6 +27,7 @@ SRC_URI = "file://boot/flash \
file://conffiles \
file://sysconf \
file://leds \
+ file://setup-optware.sh \
file://turnup \
file://reflash \
file://usb \
@@ -35,7 +36,7 @@ SRC_URI = "file://boot/flash \
SBINPROGS = ""
USRSBINPROGS = ""
CPROGS = "${USRSBINPROGS} ${SBINPROGS}"
-SCRIPTS = "turnup leds sysconf"
+SCRIPTS = "turnup leds sysconf setup-optware.sh"
BOOTSCRIPTS = "flash disk nfs ram network udhcpc.script"
INITSCRIPTS = "syslog.buffer syslog.file syslog.network zleds\
leds_startup rmrecovery sysconfsetup umountinitrd.sh\
diff --git a/packages/sun-jre/sun-jre6_1.6.0.10.bb b/packages/sun-jre/sun-jre6_1.6.0.10.bb
new file mode 100644
index 0000000000..f67894c39a
--- /dev/null
+++ b/packages/sun-jre/sun-jre6_1.6.0.10.bb
@@ -0,0 +1,71 @@
+DESCRIPTION = "Sun J2SE Runtime Environment"
+LICENSE = "Sun Binary Code License Agreement"
+RDEPENDS_${PN} += "libx11-locale"
+RDEPENDS_${PN}-plugin += "${PN}"
+PR = "r1"
+PRIVATE_LIBS = "${@base_read_file('${WORKDIR}/${SD}.shlibs')}"
+
+SRC_URI = "http://download.java.net/dlj/binaries/jdk-6u10-dlj-linux-i586.bin"
+
+SP = "jdk-6u10-dlj-linux-i586.bin"
+SD = "jdk1.6.0_10"
+S = "${WORKDIR}"
+
+do_install() {
+ export MORE=10000
+ sh ${WORKDIR}/${SP} --accept-license >/dev/null
+ chmod -R go=u-w ${SD}
+ chmod -R u+w ${SD}
+ mkdir -p ${D}${libdir}/sun-java6-${PV}
+ mv ${S}/${SD}/jre/* ${D}${libdir}/sun-java6-${PV}
+ mkdir -p ${D}${libdir}/mozilla/plugins
+ cd ${D}${libdir}/mozilla/plugins
+ ln -s ${libdir}/sun-java6-${PV}/plugin/i386/ns7/libjavaplugin_oji.so .
+ cd ${D}${libdir}/sun-java6-${PV}
+ for p in `find . -name '*.pack'`; do
+ ./bin/unpack200 $p $(echo $p | sed 's,.pack$,.jar,g') || exit 1
+ rm $p
+ done
+ for i in bin/ControlPanel \
+ bin/javaws \
+ bin/jcontrol \
+ bin/keytool \
+ bin/orbd \
+ bin/pack200 \
+ bin/policytool \
+ bin/rmid \
+ bin/rmiregistry \
+ bin/servertool \
+ bin/tnameserv \
+ bin/unpack200
+ do
+ rm $i
+ done
+ rm -rf javaws lib/javaws*
+ rm -rf plugin/desktop plugin/i386/ns7-gcc29
+ rm -f lib/fontconfig.*.bfc lib/fontconfig.*.properties.src
+ rm -f lib/javaws.jar lib/ext/ldapsec.jar lib/cmm/PYCC.pf \
+ lib/audio/soundbank.gm
+ rm -rf lib/i386/server lib/i386/motif21 lib/i386/client/classes.jsa \
+ lib/i386/libjavaplugin_nscp_gcc29.so \
+ lib/i386/headless
+ rm -rf fonts oblique-fonts man
+ rm -rf lib/locale lib/zi lib/management
+ rm -rf lib/desktop LICENSE README COPYRIGHT THIRDPARTYLICENSEREADME.txt \
+ Welcome.html
+ # Find out what shared libs we contain and spit it out to a file
+ find . -name "*.so" -exec basename {} \; | sort | uniq > ${WORKDIR}/${SD}.shlibs
+}
+
+PACKAGES =+ "${PN}-plugin"
+FILES_${PN} = "/usr/"
+FILES_${PN}-dbg += "/usr/*/.debug /usr/*/*/.debug /usr/*/*/*/.debug /usr/*/*/*/*/.debug /usr/*/*/*/*/*/.debug"
+FILES_${PN}-plugin = "${libdir}/mozilla/plugins/* ${libdir}/sun-java6-${PV}/plugin/i386/ns7/libjavaplugin_oji.so"
+
+pkg_postinst_${PN} () {
+ grep -v JAVA_HOME /etc/environment > /etc/environment.new
+ mv /etc/environment.new /etc/environment
+ echo "JAVA_HOME=\"${libdir}/sun-java6-${PV}\"" >> /etc/environment
+}
+
+COMPATIBLE_HOST = "i.86.*-linux"
diff --git a/packages/swig/swig-native_1.3.38.bb b/packages/swig/swig-native_1.3.38.bb
new file mode 100644
index 0000000000..8210bb9cfb
--- /dev/null
+++ b/packages/swig/swig-native_1.3.38.bb
@@ -0,0 +1,7 @@
+require swig_${PV}.bb
+inherit native
+
+do_stage() {
+ oe_runmake install PREFIX=${STAGING_BINDIR}/..
+}
+
diff --git a/packages/swig/swig_1.3.38.bb b/packages/swig/swig_1.3.38.bb
new file mode 100644
index 0000000000..8a8138c21c
--- /dev/null
+++ b/packages/swig/swig_1.3.38.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "SWIG - Simplified Wrapper and Interface Generator"
+HOMEPAGE = "http://swig.sourceforge.net/"
+LICENSE = "BSD"
+SECTION = "devel"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/swig/swig-${PV}.tar.gz"
+S = "${WORKDIR}/swig-${PV}"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-python=${STAGING_BINDIR_NATIVE} --with-swiglibdir=${STAGING_DIR_NATIVE}/swig"
+
+do_configure() {
+ oe_runconf
+}
+
diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb
index 06fdd24f6c..c60ae4ff0b 100644
--- a/packages/tasks/task-base.bb
+++ b/packages/tasks/task-base.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Merge machine and distro options to create a basic machine task/package"
-PR = "r78"
+PR = "r79"
inherit task
@@ -61,6 +61,15 @@ HOTPLUG ?= "${@base_contains("MACHINE_FEATURES", "kernel24", "linux-hotplug",""
DISTRO_SSH_DAEMON ?= "dropbear"
#
+# bluetooth manager
+#
+DISTRO_BLUETOOTH_MANAGER ?= "\
+ blueprobe \
+ bluez-utils \
+ bluez-utils-compat \
+ "
+
+#
# pcmciautils for >= 2.6.13-rc1, pcmcia-cs for others
#
PCMCIA_MANAGER ?= "${@base_contains('MACHINE_FEATURES', 'kernel26','pcmciautils','pcmcia-cs',d)} "
@@ -234,10 +243,8 @@ task-base-pcmcia26 = "\
# Provide bluez-utils-compat utils for the time being, the binaries in that package will vanish soon from upstream releases, so beware!
-RDEPENDS_task-base-bluetooth = "\
- blueprobe \
- bluez-utils \
- bluez-utils-compat \
+RDEPENDS_task-base-bluetooth = "\
+ ${DISTRO_BLUETOOTH_MANAGER} \
"
RRECOMMENDS_task-base-bluetooth = "\
@@ -298,7 +305,10 @@ RRECOMMENDS_task-base-usbhost = "\
kernel-module-usbmouse \
kernel-module-mousedev \
kernel-module-usbserial \
- kernel-module-usb-storage "
+ kernel-module-usb-storage \
+ kernel-module-asix \
+ kernel-module-pegasus \
+"
RDEPENDS_task-base-uboot = "\
u-boot"
diff --git a/packages/tasks/task-beagleboard-demo.bb b/packages/tasks/task-beagleboard-demo.bb
index d176468ed7..72edd0646d 100644
--- a/packages/tasks/task-beagleboard-demo.bb
+++ b/packages/tasks/task-beagleboard-demo.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Task for Beagleboard-demo-image"
-PR = "r5"
+PR = "r7"
inherit task
@@ -36,6 +36,8 @@ RDEPENDS_${PN} = "\
x11vnc angstrom-x11vnc-xinit \
angstrom-gnome-icon-theme-enable \
openssh-scp openssh-ssh \
+ picodlp-control \
+ connman-gnome \
"
# Install all kernel modules
diff --git a/packages/tasks/task-boot.bb b/packages/tasks/task-boot.bb
index 3d69256e64..1a1b9f25c8 100644
--- a/packages/tasks/task-boot.bb
+++ b/packages/tasks/task-boot.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Basic task to get a device booting"
-PR = "r47"
+PR = "r49"
inherit task
@@ -8,22 +8,6 @@ inherit task
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"
-DISTRO_INITSCRIPTS ?= "initscripts"
-
-#
-# 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 ?= ""
@@ -40,14 +24,10 @@ RDEPENDS_task-boot = "\
base-files \
base-passwd \
busybox \
- ${DISTRO_INITSCRIPTS} \
${@base_contains("MACHINE_FEATURES", "keyboard", "keymaps", "", d)} \
modutils-initscripts \
netbase \
update-alternatives \
- ${DISTRO_DEV_MANAGER} \
- ${DISTRO_INIT_MANAGER} \
- ${DISTRO_LOGIN_MANAGER} \
${MACHINE_ESSENTIAL_EXTRA_RDEPENDS} \
"
diff --git a/packages/tasks/task-cli-tools.bb b/packages/tasks/task-cli-tools.bb
index 1717dd3251..24eb920f40 100644
--- a/packages/tasks/task-cli-tools.bb
+++ b/packages/tasks/task-cli-tools.bb
@@ -1,12 +1,12 @@
-DESCRIPTION = "A set of command line tools"
+DESCRIPTION = "A set of command line tools, python tools-based tools, debug tools"
SECTION = "console"
LICENSE = "MIT"
PV = "1.0"
-PR = "r3"
+PR = "r5"
inherit task
-PACKAGES += "${PN}-python"
+PACKAGES += "${PN}-debug ${PN}-python"
RDEPENDS_${PN} = "\
dosfstools \
@@ -19,7 +19,18 @@ RDEPENDS_${PN} = "\
screen \
sysstat \
tcpdump \
+"
+
+RDEPENDS_${PN}-debug = "\
+ evtest \
+ devmem2 \
+ i2c-tools \
+# ltrace \
+ procps \
+ pxaregs \
s3c24xx-gpio \
+ s3c64xx-gpio \
+ strace \
"
RDEPENDS_${PN}-python = "\
diff --git a/packages/tasks/task-fso-compliance.bb b/packages/tasks/task-fso-compliance.bb
index c39df67513..62193ff817 100644
--- a/packages/tasks/task-fso-compliance.bb
+++ b/packages/tasks/task-fso-compliance.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "The freesmartphone.org framework -- install this task to make you
SECTION = "fso/base"
LICENSE = "MIT"
PV = "1.0"
-PR = "r6"
+PR = "r7"
inherit task
@@ -11,13 +11,13 @@ RDEPENDS_${PN} = "\
frameworkd \
# fso-apmd \
fso-gpsd \
-# fso-monitord \
+ fso-monitord \
connman \
connman-scripts \
connman-plugin-bluetooth \
# connman-plugin-dhclient \
# connman-plugin-dnsproxy \
- connman-plugin-ethernet \
+# connman-plugin-ethernet \
# connman-plugin-fake \
connman-plugin-loopback \
connman-plugin-pppd \
diff --git a/packages/tasks/task-gstreamer-ti.bb b/packages/tasks/task-gstreamer-ti.bb
new file mode 100644
index 0000000000..cf05c7ce6b
--- /dev/null
+++ b/packages/tasks/task-gstreamer-ti.bb
@@ -0,0 +1,18 @@
+# Task for dsp accelerated gstreamer plugins
+
+PR = "r1"
+
+DEPENDS = "gst-plugins-base gst-plugins-bad gst-plugins-good gst-plugins-ugly gst-ffmpeg gstreamer-ti gst-openmax"
+
+RDEPENDS_${PN} = " \
+gst-plugins-base-meta \
+gst-plugins-good-meta \
+gst-plugins-bad-meta \
+gst-plugins-ugly-meta \
+gst-ffmpeg \
+gst-openmax \
+gstreamer-ti \
+"
+
+inherit task
+
diff --git a/packages/tasks/task-native-sdk.bb b/packages/tasks/task-native-sdk.bb
index c1c2392f22..387e7b56fe 100644
--- a/packages/tasks/task-native-sdk.bb
+++ b/packages/tasks/task-native-sdk.bb
@@ -3,12 +3,12 @@ LICENSE = "MIT"
DEPENDS = "virtual/libc gcc binutils make patch patchutils diffstat diffutils automake flex bison gawk sed grep"
RDEPENDS = "gcc-symlinks g++-symlinks cpp cpp-symlinks binutils-symlinks \
make virtual-libc-dev \
- flex flex-dev bison gawk sed grep autoconf automake make \
+ task-proper-tools perl-modules flex flex-dev bison gawk sed grep autoconf automake make \
patch patchutils diffstat diffutils libstdc++-dev"
RECOMMENDS = " g77-symlinks gfortran-symlinks "
-PR = "r5"
+PR = "r6"
ALLOW_EMPTY = "1"
PACKAGES = "${PN}"
diff --git a/packages/tasks/task-openmoko-feed.bb b/packages/tasks/task-openmoko-feed.bb
index 97807cc279..9a9e385cfa 100644
--- a/packages/tasks/task-openmoko-feed.bb
+++ b/packages/tasks/task-openmoko-feed.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Openmoko: Misc. Feed Items"
SECTION = "openmoko/base"
LICENSE = "MIT"
-PR = "r60"
+PR = "r61"
inherit task
@@ -29,7 +29,8 @@ RDEPENDS_task-openmoko-feed = "\
ntpclient ntp \
openssh openssh-scp openssh-ssh openssh-sshd openssh-sftp openssh-misc \
python python-pygtk python-pyserial python-gst python-pygame \
- python-lightblue python-pybluez \
+# python-lightblue \
+ python-pybluez \
obexpush \
ruby \
libsdl-x11 libsdl-mixer libsdl-net libsdl-ttf \
diff --git a/packages/tasks/task-python-everything.bb b/packages/tasks/task-python-everything.bb
index de3c555a83..a190c0f9e1 100644
--- a/packages/tasks/task-python-everything.bb
+++ b/packages/tasks/task-python-everything.bb
@@ -2,7 +2,7 @@ DESCRIPTION= "Everything Python"
HOMEPAGE = "http://www.vanille.de/projects/python.spy"
LICENSE = "MIT"
PV = "2.6"
-PR = "ml42"
+PR = "ml43"
RDEPENDS = "\
python-ao \
@@ -14,6 +14,7 @@ RDEPENDS = "\
python-dbus \
python-dialog \
python-docutils \
+ python-dweba \
task-python-efl \
task-python-efl-examples \
python-fam \
@@ -24,7 +25,7 @@ RDEPENDS = "\
python-fugrep \
python-fuse \
python-fusil \
- python-gammu \
+# python-gammu \
python-gmpy \
python-gnosis \
python-gst \
@@ -44,7 +45,8 @@ RDEPENDS = "\
python-ogg \
python-opendir \
python-pexpect \
- python-psyco \
+# only on x86
+# python-psyco \
python-ptrace \
python-pyalsa \
python-pyalsaaudio \
@@ -98,7 +100,6 @@ RDEPENDS = "\
python-sphinx \
python-sphinxsearch \
python-spydi \
- python-spyro \
python-sqlalchemy \
python-sqlobject \
python-traits \
diff --git a/packages/tasks/task-sdk-bare.bb b/packages/tasks/task-sdk-bare.bb
index ab338e6301..85d362612f 100644
--- a/packages/tasks/task-sdk-bare.bb
+++ b/packages/tasks/task-sdk-bare.bb
@@ -8,7 +8,7 @@ PACKAGES = "${PN}"
GLIBC_PKGS = "\
glibc \
glibc-dbg \
- glibc-dev \
+ virtual-libc-dev \
glibc-utils \
libsegfault \
glibc-thread-db \
diff --git a/packages/tasks/task-slugos-toolchain-target.bb b/packages/tasks/task-slugos-toolchain-target.bb
new file mode 100644
index 0000000000..489a41213b
--- /dev/null
+++ b/packages/tasks/task-slugos-toolchain-target.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "Packages for a standalone SDK or external toolchain"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+PR = "r1"
+
+PACKAGES = "${PN}"
+
+# Stuff contained in this SDK is largely taken from task-sdk-base.bb.
+# This is a starting point, and nothing more at present -- please fill
+# this out with a reasonable set of development tools for a SlugOS image.
+# Also feel free to remove stuff that's silly.
+
+RDEPENDS_${PN} = "\
+ libgcc \
+ linux-libc-headers-dev \
+ libssl \
+ libcrypto \
+ openssl-dev \
+ libstdc++ \
+ "
+
+# Not sure if we need these or not...
+NOT_SURE_ABOUT = "\
+ libsegfault \
+ "
+
+# This one needs further investigation; seems to be some sort
+# of naming problem that breaks the SDK when it is added directly.
+ODDLY_BROKEN_PACKAGES ="\
+ libz-dev \
+ "
diff --git a/packages/tcpdump/files/0001-minimal-IEEE802.15.4-allowed.patch b/packages/tcpdump/files/0001-minimal-IEEE802.15.4-allowed.patch
new file mode 100644
index 0000000000..f4358b5d49
--- /dev/null
+++ b/packages/tcpdump/files/0001-minimal-IEEE802.15.4-allowed.patch
@@ -0,0 +1,26 @@
+From 9a6a3f37b6715fafb79fd88d2a2db3b49183226e Mon Sep 17 00:00:00 2001
+From: Sergey Lapin <slapin@slind.org>
+Date: Wed, 28 Jan 2009 16:34:15 +0300
+Subject: [PATCH] minimal IEEE802.15.4 allowed
+
+---
+ tcpdump.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/tcpdump.c b/tcpdump.c
+index ba8b702..0a88343 100644
+--- a/tcpdump.c
++++ b/tcpdump.c
+@@ -273,6 +273,9 @@ static struct printer printers[] = {
+ #ifdef DLT_MFR
+ { mfr_if_print, DLT_MFR },
+ #endif
++#ifdef DLT_IEEE802_15_4
++ { raw_if_print, DLT_IEEE802_15_4 },
++#endif
+ #if defined(DLT_BLUETOOTH_HCI_H4_WITH_PHDR) && defined(HAVE_PCAP_BLUETOOTH_H)
+ { bt_if_print, DLT_BLUETOOTH_HCI_H4_WITH_PHDR},
+ #endif
+--
+1.5.6.2
+
diff --git a/packages/tcpdump/files/no-ipv6-tcpdump4.patch b/packages/tcpdump/files/no-ipv6-tcpdump4.patch
new file mode 100644
index 0000000000..a399d0508f
--- /dev/null
+++ b/packages/tcpdump/files/no-ipv6-tcpdump4.patch
@@ -0,0 +1,22 @@
+Compiling tcpdump 4.0.0 without ipv6 - linking against ipv6less
+libpcap too - generates the following error:
+
+print-enc.o: In function `enc_if_print':
+print-enc.c:(.text+0xce): undefined reference to `ip6_print'
+collect2: ld returned 1 exit status
+make: *** [tcpdump] Error 1
+
+--- tcpdump/print-enc.c.orig 2008-09-01 04:44:22 +0200
++++ tcpdump/print-enc.c 2008-11-11 14:48:00 +0100
+@@ -77,9 +77,11 @@
+ case AF_INET:
+ ip_print(gndo, p, length);
+ break;
++#ifdef INET6
+ case AF_INET6:
+ ip6_print(p, length);
+ break;
++#endif
+ }
+
+ out:
diff --git a/packages/tcpdump/tcpdump_4.0.0.bb b/packages/tcpdump/tcpdump_4.0.0.bb
new file mode 100644
index 0000000000..537cb36aed
--- /dev/null
+++ b/packages/tcpdump/tcpdump_4.0.0.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "A sophisticated network protocol analyzer"
+HOMEPAGE = "http://www.tcpdump.org/"
+LICENSE = "BSD"
+SECTION = "console/network"
+PRIORITY = "optional"
+DEPENDS = "libpcap"
+PR = "r1"
+
+SRC_URI = "http://www.tcpdump.org/release/tcpdump-${PV}.tar.gz \
+ file://tcpdump_configure_no_-O2.patch;patch=1 \
+ file://no-ipv6-tcpdump4.patch;patch=1 \
+ file://0001-minimal-IEEE802.15.4-allowed.patch;patch=1"
+
+inherit autotools
+# ac_cv_linux_vers=${ac_cv_linux_vers=2}
+
+EXTRA_OECONF = "--without-crypto"
+
+do_configure() {
+ gnu-configize
+ autoconf
+ oe_runconf
+ sed -i 's:/usr/lib:${STAGING_LIBDIR}:' ./Makefile
+ sed -i 's:/usr/include:${STAGING_INCDIR}:' ./Makefile
+}
diff --git a/packages/tnef/tnef.inc b/packages/tnef/tnef.inc
new file mode 100644
index 0000000000..2da8960e0d
--- /dev/null
+++ b/packages/tnef/tnef.inc
@@ -0,0 +1,7 @@
+DESCRIPTION = "TNEF is a program for unpacking ms-tnef type MIME attachments"
+SECTION = "net"
+LICENSE = "GPL"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/tnef/tnef-${PV}.tar.gz"
+
+inherit autotools
diff --git a/packages/tnef/tnef_1.4.5.bb b/packages/tnef/tnef_1.4.5.bb
new file mode 100644
index 0000000000..cec39d84d1
--- /dev/null
+++ b/packages/tnef/tnef_1.4.5.bb
@@ -0,0 +1,3 @@
+require tnef.inc
+
+PR = "r0"
diff --git a/packages/tuxmath/tuxmath_1.6.0.bb b/packages/tuxmath/tuxmath_1.6.0.bb
deleted file mode 100644
index 3898c601ce..0000000000
--- a/packages/tuxmath/tuxmath_1.6.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "Math game"
-HOMEPAGE = "http://tux4kids.alioth.debian.org/"
-PRIORITY = "optional"
-LICENSE = "GPL"
-DEPENDS = "virtual/libsdl libsdl-mixer libsdl-image libsdl-ttf"
-
-SRC_URI = "http://alioth.debian.org/frs/download.php/2241/tuxmath_w_fonts-${PV}.tar.gz"
-S = "${WORKDIR}/tuxmath_w_fonts-${PV}"
-
-inherit autotools
-
-PARALLEL_MAKE = ""
-
-export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
-export MKDIR_P = "mkdir -p"
-
-FILES_${PN} = "/"
diff --git a/packages/tuxmath/tuxmath_1.7.1.bb b/packages/tuxmath/tuxmath_1.7.1.bb
new file mode 100644
index 0000000000..e19f3e666f
--- /dev/null
+++ b/packages/tuxmath/tuxmath_1.7.1.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Math game"
+HOMEPAGE = "http://tux4kids.alioth.debian.org/"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "virtual/libsdl libsdl-mixer libsdl-image libsdl-ttf sdlpango"
+
+# warning: when changing package version the download number (2733)
+# must be changed as well
+SRC_URI = "http://alioth.debian.org/frs/download.php/2733/tuxmath_w_fonts-1.7.1.tar.gz"
+
+S = "${WORKDIR}/tuxmath_w_fonts-${PV}"
+
+inherit autotools
+
+FILES_${PN} = "/"
+
+export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+export MKDIR_P = "mkdir -p"
+
+PARALLEL_MAKE = ""
diff --git a/packages/tuxtype/tuxtype_1.7.3.bb b/packages/tuxtype/tuxtype_1.7.3.bb
new file mode 100644
index 0000000000..9712bcb753
--- /dev/null
+++ b/packages/tuxtype/tuxtype_1.7.3.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Typing game"
+HOMEPAGE = "http://tux4kids.alioth.debian.org/"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "virtual/libsdl libsdl-mixer libsdl-image libsdl-ttf sdlpango"
+
+# warning: when changing package version the download number (2767)
+# must be changed as well
+SRC_URI = "http://alioth.debian.org/frs/download.php/2767/tuxtype_w_fonts-1.7.3.tar.gz"
+
+S = "${WORKDIR}/tuxtype_w_fonts-${PV}"
+
+inherit autotools
+
+FILES_${PN} = "/"
+
+export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+export MKDIR_P = "mkdir -p"
+
+PARALLEL_MAKE = ""
diff --git a/packages/tzcode/tzcode-native_2007k.bb b/packages/tzcode/tzcode-native_2007k.bb
index 8e721d6d9a..6593cc3a24 100644
--- a/packages/tzcode/tzcode-native_2007k.bb
+++ b/packages/tzcode/tzcode-native_2007k.bb
@@ -1,10 +1,10 @@
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"
-
+SRC_URI = "\
+ http://bent.latency.net/bent/darcs/zoneinfo-2007k/src/tzcode${PV}.tar.gz \
+ http://bent.latency.net/bent/darcs/zoneinfo-2007k/src/tzdata${PV}.tar.gz \
+"
S = "${WORKDIR}"
inherit native
diff --git a/packages/u-boot/u-boot-1.1.2/oxe810.patch b/packages/u-boot/u-boot-1.1.2/oxnas.patch
index f1fff14822..f1fff14822 100644
--- a/packages/u-boot/u-boot-1.1.2/oxe810.patch
+++ b/packages/u-boot/u-boot-1.1.2/oxnas.patch
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/001-090115-SPI.patch b/packages/u-boot/u-boot-1.3.2/boc01/001-090115-SPI.patch
deleted file mode 100644
index 96b624b3a1..0000000000
--- a/packages/u-boot/u-boot-1.3.2/boc01/001-090115-SPI.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
-===================================================================
---- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c 2009-01-15 10:51:45.000000000 +0100
-+++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c 2009-01-15 12:18:31.000000000 +0100
-@@ -28,6 +28,7 @@
- #endif
- #include <pci.h>
- #include <mpc83xx.h>
-+#include <spi.h>
-
- DECLARE_GLOBAL_DATA_PTR;
-
-@@ -107,3 +108,29 @@
- #endif
- }
- #endif
-+
-+
-+/*
-+ * The following are used to control the SPI chip selects for the SPI command.
-+ */
-+#ifdef CONFIG_HARD_SPI
-+
-+void spi_rfid_chipsel(int cs)
-+{
-+ if(cs)
-+ gpio_clear(14);
-+ else
-+ gpio_set(14);
-+}
-+
-+/*
-+ * The SPI command uses this table of functions for controlling the SPI
-+ * chip selects.
-+ */
-+spi_chipsel_type spi_chipsel[] = {
-+ spi_rfid_chipsel,
-+};
-+int spi_chipsel_cnt = sizeof(spi_chipsel) / sizeof(spi_chipsel[0]);
-+
-+#endif /* CONFIG_HARD_SPI */
-+
-Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
-===================================================================
---- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2009-01-15 10:51:51.000000000 +0100
-+++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2009-01-15 12:16:57.000000000 +0100
-@@ -369,6 +369,7 @@
- #define CONFIG_CMD_PCI
- #define CONFIG_CMD_NAND
- #define CONFIG_CMD_JFFS2
-+#define CONFIG_CMD_SPI
-
- #if defined(CFG_RAMBOOT)
- #undef CONFIG_CMD_ENV
-@@ -386,6 +387,11 @@
- #define MTDPARTS_DEFAULT "mtdparts=physmap-flash.0:384k(uboot),64k(env)"
-
-
-+/* SPI */
-+#define CONFIG_MPC8XXX_SPI
-+#define CONFIG_HARD_SPI /* SPI with hardware support */
-+#undef CONFIG_SOFT_SPI /* SPI bit-banged */
-+
- /*
- * Miscellaneous configurable options
- */
-Index: u-boot-1.3.2/drivers/spi/mpc8xxx_spi.c
-===================================================================
---- u-boot-1.3.2.orig/drivers/spi/mpc8xxx_spi.c 2009-01-15 10:52:30.000000000 +0100
-+++ u-boot-1.3.2/drivers/spi/mpc8xxx_spi.c 2009-01-15 10:53:23.000000000 +0100
-@@ -34,6 +34,8 @@
- #define SPI_MODE_REV (0x80000000 >> 5) /* Reverse mode - MSB first */
- #define SPI_MODE_MS (0x80000000 >> 6) /* Always master */
- #define SPI_MODE_EN (0x80000000 >> 7) /* Enable interface */
-+#define SPI_MODE_DIV16 (0x80000000 >> 4) /*Divide by 16. */
-+#define SPI_MODE_LEN_8 (0x00700000) /*0111 8-bit characters*/
-
- #define SPI_TIMEOUT 1000
-
-@@ -45,9 +47,7 @@
- * SPI pins on the MPC83xx are not muxed, so all we do is initialize
- * some registers
- */
-- spi->mode = SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN;
-- spi->mode = (spi->mode & 0xfff0ffff) | (1 << 16); /* Use SYSCLK / 8
-- (16.67MHz typ.) */
-+ spi->mode = SPI_MODE_DIV16 |SPI_MODE_LEN_8| SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN;
- spi->event = 0xffffffff; /* Clear all SPI events */
- spi->mask = 0x00000000; /* Mask all SPI interrupts */
- spi->com = 0; /* LST bit doesn't do anything, so disregard */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/001-090205-SPI.patch b/packages/u-boot/u-boot-1.3.2/boc01/001-090205-SPI.patch
new file mode 100644
index 0000000000..6c0ed5c36a
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/001-090205-SPI.patch
@@ -0,0 +1,94 @@
+Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+===================================================================
+--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c
++++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+@@ -28,6 +28,7 @@
+ #endif
+ #include <pci.h>
+ #include <mpc83xx.h>
++#include <spi.h>
+
+ DECLARE_GLOBAL_DATA_PTR;
+
+@@ -107,3 +108,33 @@ void ft_board_setup(void *blob, bd_t *bd
+ #endif
+ }
+ #endif
++
++
++/*
++ * The following are used to control the SPI chip selects for the SPI command.
++ */
++#ifdef CONFIG_HARD_SPI
++
++#define SPI_CS_MASK 0x80000000
++
++void spi_eeprom_chipsel(int cs)
++{
++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
++
++ if (cs)
++ iopd->dat &= ~SPI_CS_MASK;
++ else
++ iopd->dat |= SPI_CS_MASK;
++}
++
++/*
++ * The SPI command uses this table of functions for controlling the SPI
++ * chip selects.
++ */
++spi_chipsel_type spi_chipsel[] = {
++ spi_eeprom_chipsel,
++};
++int spi_chipsel_cnt = sizeof(spi_chipsel) / sizeof(spi_chipsel[0]);
++
++#endif /* CONFIG_HARD_SPI */
++
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h
+@@ -369,6 +369,7 @@
+ #define CONFIG_CMD_PCI
+ #define CONFIG_CMD_NAND
+ #define CONFIG_CMD_JFFS2
++#define CONFIG_CMD_SPI
+
+ #if defined(CFG_RAMBOOT)
+ #undef CONFIG_CMD_ENV
+@@ -386,6 +387,11 @@
+ #define MTDPARTS_DEFAULT "mtdparts=physmap-flash.0:384k(uboot),64k(env)"
+
+
++/* SPI */
++#define CONFIG_MPC8XXX_SPI
++#define CONFIG_HARD_SPI /* SPI with hardware support */
++#undef CONFIG_SOFT_SPI /* SPI bit-banged */
++
+ /*
+ * Miscellaneous configurable options
+ */
+Index: u-boot-1.3.2/drivers/spi/mpc8xxx_spi.c
+===================================================================
+--- u-boot-1.3.2.orig/drivers/spi/mpc8xxx_spi.c
++++ u-boot-1.3.2/drivers/spi/mpc8xxx_spi.c
+@@ -34,6 +34,8 @@
+ #define SPI_MODE_REV (0x80000000 >> 5) /* Reverse mode - MSB first */
+ #define SPI_MODE_MS (0x80000000 >> 6) /* Always master */
+ #define SPI_MODE_EN (0x80000000 >> 7) /* Enable interface */
++#define SPI_MODE_DIV16 (0x80000000 >> 4) /*Divide by 16. */
++#define SPI_MODE_LEN_8 (0x00700000) /*0111 8-bit characters*/
+
+ #define SPI_TIMEOUT 1000
+
+@@ -45,9 +47,7 @@ void spi_init(void)
+ * SPI pins on the MPC83xx are not muxed, so all we do is initialize
+ * some registers
+ */
+- spi->mode = SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN;
+- spi->mode = (spi->mode & 0xfff0ffff) | (1 << 16); /* Use SYSCLK / 8
+- (16.67MHz typ.) */
++ spi->mode = SPI_MODE_DIV16 |SPI_MODE_LEN_8| SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN;
+ spi->event = 0xffffffff; /* Clear all SPI events */
+ spi->mask = 0x00000000; /* Mask all SPI interrupts */
+ spi->com = 0; /* LST bit doesn't do anything, so disregard */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/007-090112-CAPSENSE.patch b/packages/u-boot/u-boot-1.3.2/boc01/007-090112-CAPSENSE.patch
deleted file mode 100644
index cc176f20b1..0000000000
--- a/packages/u-boot/u-boot-1.3.2/boc01/007-090112-CAPSENSE.patch
+++ /dev/null
@@ -1,546 +0,0 @@
-Index: u-boot-1.3.2/common/cmd_capsense.c
-===================================================================
---- /dev/null
-+++ u-boot-1.3.2/common/cmd_capsense.c
-@@ -0,0 +1,105 @@
-+/*
-+ * (C) Copyright 2008
-+ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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
-+ *
-+ * CapSense Express touch-sensing buttons
-+ */
-+
-+#include <common.h>
-+#include <config.h>
-+#include <command.h>
-+
-+#include <capsense.h>
-+#include <i2c.h>
-+
-+#define ARG_SENSOR_NUMBER 1
-+
-+#define ARG_CMD 1
-+#define ARG_OLD_ADDRESS 2
-+
-+
-+int do_capsense (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
-+{
-+ int i;
-+ unsigned char sensors[] = CONFIG_CAPSENSE_SENSORS;
-+ int old_bus, old_address;
-+ char port[2];
-+ /* switch to correct I2C bus */
-+ old_bus = I2C_GET_BUS();
-+ I2C_SET_BUS(CFG_CAPSENSE_BUS_NUM);
-+
-+ /*
-+ * Loop through sensors, read
-+ * state, and output it.
-+ */
-+ if(argc==1)
-+ {
-+ port[0]=capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,0);
-+ port[1]=capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,1);
-+ capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,1);
-+ printf ("P0 0x%02x 0x%02x\n",port[0],port[1]);
-+ for (i = 0; i < 8; i++)
-+ {
-+ if(sensors[0]&(1<<i))
-+ {
-+ printf ("GP0[%d]: %i\n",i,port[0]&(1<<i)?1:0);
-+ }
-+ if(sensors[1]&(1<<i))
-+ {
-+ printf ("GP1[%d]: %i\n",i,port[1]&(1<<i)?1:0);
-+ }
-+
-+ }
-+ }
-+ else
-+ {
-+ if ( strncmp(argv[ARG_CMD], "config", 3) == 0 ) {
-+ if ( argc == 3 ) {
-+ old_address=simple_strtoul (argv[ARG_OLD_ADDRESS], NULL, 10);
-+ if ( capsense_change_i2c_address(old_address, CONFIG_CAPSENSE_I2C_ADDRESS) != 0 )
-+ printf("failed to change i2c address\n");
-+ else
-+ printf("i2c address changed to 0x%02X\n", CONFIG_CAPSENSE_I2C_ADDRESS);
-+ }
-+
-+ capsense_config(CONFIG_CAPSENSE_I2C_ADDRESS);
-+ capsense_store_nvm(CONFIG_CAPSENSE_I2C_ADDRESS);
-+ }
-+ else {
-+ printf ("Usage:\n%s\n", cmdtp->help);
-+ }
-+ }
-+
-+ /* switch back to original I2C bus */
-+ I2C_SET_BUS(old_bus);
-+
-+ return 0;
-+} /* do_capsense() */
-+
-+
-+/***************************************************/
-+
-+U_BOOT_CMD(
-+ capsense, 4, 1, do_capsense,
-+ "capsense - CapSense Express touch-sensing buttons\n",
-+ "capsense\n Read state of the CapSense Express touch-sensing buttons.\n"
-+ "capsense config [<old i2c address>]\n Setup default capsense configuration.\n"
-+ );
-Index: u-boot-1.3.2/common/Makefile
-===================================================================
---- u-boot-1.3.2.orig/common/Makefile
-+++ u-boot-1.3.2/common/Makefile
-@@ -50,6 +50,7 @@ endif
- COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o
- COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o
- COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
-+COBJS-$(CONFIG_CMD_CAPSENSE) += cmd_capsense.o
- COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o
- COBJS-y += cmd_eeprom.o
- COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
-Index: u-boot-1.3.2/drivers/i2c/CY8C201xx.c
-===================================================================
---- /dev/null
-+++ u-boot-1.3.2/drivers/i2c/CY8C201xx.c
-@@ -0,0 +1,289 @@
-+/*
-+ * (C) Copyright 2008
-+ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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
-+ */
-+
-+/*
-+ * CapSense Express touch-sensing buttons
-+ */
-+
-+#include <common.h>
-+
-+#ifdef CONFIG_CAPSENSE_CY8C201XX
-+
-+#include <i2c.h>
-+#include <capsense.h>
-+
-+int capsense_read(int address, int reg)
-+{
-+ int dlen;
-+ uchar data[2];
-+
-+ /*
-+ * Validate 'reg' param
-+ */
-+ if ( (reg < 0) || (reg > 0xA1) )
-+ return -1;
-+
-+ /*
-+ * Prepare to handle 1 byte result.
-+ */
-+ dlen = 1;
-+
-+ /*
-+ * Now try to read the register.
-+ */
-+ if (i2c_read(address, reg, 1, data, dlen) != 0)
-+ return -1;
-+
-+ return (int)data[0];
-+}
-+
-+
-+int capsense_write(int address, int reg, int val)
-+{
-+ int dlen;
-+ uchar data[2];
-+
-+ /*
-+ * Validate 'reg' param
-+ */
-+ if((reg < 0) || (reg > 0xA1))
-+ return -1;
-+
-+ /*
-+ * Handle 1 byte values.
-+ */
-+ dlen = 1;
-+ data[0] = (char)(val & 0xff);
-+
-+ /*
-+ * Write value to register.
-+ */
-+ if (i2c_write(address, reg, 1, data, dlen) != 0)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+
-+int capsense_write_N(int address, int reg, char *data, int dlen)
-+{
-+ /*
-+ * Validate 'reg' param
-+ */
-+ if ( (reg < 0) || (reg > 0xA1) )
-+ return -1;
-+
-+ /*
-+ * Write value to register.
-+ */
-+ if ( i2c_write(address, reg, 1, data, dlen) != 0 )
-+ return 1;
-+
-+ return 0;
-+}
-+
-+
-+int capsense_get_state(int address,char port)
-+{
-+ return capsense_read(address,CAPSENSE_REG_READ_STATUS+port);
-+}
-+
-+
-+int capsense_change_i2c_address(char old_address,char new_address)
-+{
-+ unsigned char data[4];
-+ int read_address;
-+ printf("capsense change i2c address\n");
-+ //checking if the I2C address is in the limits ( I2C address can have a value from 0 to 127 )
-+ if((old_address>0x7F)||(new_address>0x7F))
-+ {
-+ printf("I2C address is not in the limits\n");
-+ return 1;
-+ }
-+
-+ //reading old capsence address
-+ read_address=capsense_read(old_address, CAPSENSE_REG_I2C_ADDR_DM);
-+ if(read_address==0xFFFFFFFF)
-+ {
-+ printf("error reading old capsence address\n");
-+ return 1; //capsense do not respond at new address
-+ }
-+
-+ if((read_address&0x7F)!=old_address)
-+ {
-+ printf("reading old capsence address failed\n");
-+ return 1; //Capsense not respond correctly
-+ }
-+
-+ //writing command for unlocking the I2C device address lock
-+ data[0]=0x3C;
-+ data[1]=0xA5;
-+ data[2]=0x69;
-+ if(capsense_write_N(old_address, CAPSENSE_REG_I2C_DEV_LOCK, data , 3)!=0)
-+ {
-+ printf("writing command for unlocking the I2C device address lock failed\n");
-+ return 1;
-+ }
-+
-+ //writing the new I2C address to the device I2C address register
-+ if(capsense_write(old_address, CAPSENSE_REG_I2C_ADDR_DM,new_address|0x80)!=0)
-+ {
-+ printf("writing the new I2C address to the device I2C address register failed\n");
-+ return 1;
-+ }
-+
-+ //writing command for locking the I2C device address lock
-+ data[0]=0x96;
-+ data[1]=0x5A;
-+ data[2]=0xC3;
-+ if(capsense_write_N(old_address, CAPSENSE_REG_I2C_DEV_LOCK, data , 3)!=0)
-+ {
-+ printf("writing command for locking the I2C device failed\n");
-+ return 1;
-+ }
-+
-+ //reading new capsence address
-+ read_address=capsense_read(new_address, CAPSENSE_REG_I2C_ADDR_DM);
-+ if(read_address==0xFFFFFFFF)
-+ {
-+ printf("capsense do not respond at new address\n");
-+ return 1; //capsense do not respond at new address
-+ }
-+
-+ return 0;
-+}
-+
-+
-+static char data_GPIO_ENABLE[] = {
-+ 0x00, 0x00 // GPIO_ENABLE
-+};
-+
-+static char data_CS_ENABLE[] = {
-+ 0x1D, 0x10, // CS_ENABLE
-+ 0x02, 0x0F, // GPIO_ENABLE
-+ 0x00, 0x00, // INVERSION_MASK
-+ 0x00, 0x00, // INT_MASK
-+ 0x1F, 0x1F, // STATUS_HOLD_MSK
-+ 0x00, 0x02, 0x00, 0x00, // DM_PULL_UP0, DM_STRONG0, DM_HIGHZ0, DM_OD_LOW0
-+ 0x00, 0x0F, 0x00, 0x00, // DM_PULL_UP1, DM_STRONG1, DM_HIGHZ1, DM_OD_LOW1
-+};
-+
-+static char data_OUTPUT_PORT[] = {
-+ 0x00, 0x00 // OUTPUT_PORT
-+};
-+
-+static char data_OP_SEL[] = {
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_00
-+ 0x80, 0x01, 0x00, 0x00, 0x00, // OP_SEL_01
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_02
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_03
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_04
-+ 0x80, 0x10, 0x00, 0x00, 0x00, // OP_SEL_10
-+ 0x80, 0x08, 0x00, 0x00, 0x00, // OP_SEL_11
-+ 0x80, 0x04, 0x00, 0x00, 0x00, // OP_SEL_12
-+ 0x80, 0x00, 0x10, 0x00, 0x00, // OP_SEL_13
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_14
-+};
-+
-+static char data_CS_NOISE_TH[] = {
-+ 0x28, // CS_NOISE_TH
-+ 0x64, // CS_BL_UPD_TH
-+ 0xA0, // CS_SETL_TIME
-+ 0x22, // CS_OTH_SET
-+ 0x0A, // CS_HYSTERESIS
-+ 0x03, // CS_DEBOUNCE
-+ 0x14, // CS_NEG_NOISE_TH
-+ 0x14, // CS_LOW_BL_RST
-+ 0x00, // CS_FILTERING
-+};
-+
-+static char data_CS_SCAN_POS[] = {
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // CS_SCAN_POS_0x
-+ 0x00, 0x00, 0x00, 0x00, 0x00, // CS_SCAN_POS_1x
-+ 0x32, 0x00, 0x32, 0x32, 0x32, // CS_FINGER_TH_0x
-+ 0x00, 0x00, 0x00, 0x00, 0x32, // CS_FINGER_TH_1x
-+ 0x08, 0x00, 0x08, 0x08, 0x08, // CS_IDAC_0x
-+ 0x00, 0x00, 0x00, 0x00, 0x08 // CS_IDAC_1x
-+};
-+
-+static char data_SLEEP[] = {
-+ 0x00, // SLEEP_PIN
-+ 0x20, // SLEEP_CTRL
-+ 0x00, // SLEEP_SA_CTR
-+};
-+
-+int capsense_config(char address)
-+{
-+ printf("Setting default capsense configuration at i2c address 0x%02X...\n", address);
-+
-+ //entering setup operation mode
-+ if ( capsense_write(address, CAPSENSE_COMMAND_REG, CAPSENSE_CMD_SETUP_OPERATION_MODE) != 0 ) {
-+ printf("CAPSENSE_COMMAND_REG SETUP_OPERATION_MODE\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_GPIO_ENABLE, data_GPIO_ENABLE, sizeof(data_GPIO_ENABLE)) != 0 ) {
-+ printf("CAPSENSE_REG_GPIO_ENABLE\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_CS_ENABLE, data_CS_ENABLE, sizeof(data_CS_ENABLE)) != 0 ) {
-+ printf("CAPSENSE_REG_CS_ENABLE\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_OUTPUT_PORT, data_OUTPUT_PORT, sizeof(data_OUTPUT_PORT)) != 0 ) {
-+ printf("CAPSENSE_REG_OUTPUT_PORT\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_OP_SEL_0, data_OP_SEL, sizeof(data_OP_SEL)) != 0 ) {
-+ printf("CAPSENSE_REG_OP_SEL_0\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_CS_NOISE_TH, data_CS_NOISE_TH, sizeof(data_CS_NOISE_TH)) != 0 ) {
-+ printf("CAPSENSE_REG_CS_NOISE_TH\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_CS_SCAN_POS, data_CS_SCAN_POS, sizeof(data_CS_SCAN_POS)) != 0 ) {
-+ printf("CAPSENSE_REG_CS_SCAN_POS\n");
-+ return 1;
-+ }
-+ if ( capsense_write_N(address, CAPSENSE_REG_SLEEP_PIN, data_SLEEP, sizeof(data_SLEEP)) != 0 ) {
-+ printf("CAPSENSE_REG_SLEEP_PIN\n");
-+ return 1;
-+ }
-+ if ( capsense_write(address, CAPSENSE_COMMAND_REG, CAPSENSE_CMD_NORMAL_OPERATION_MODE) != 0 ) {
-+ printf("CAPSENSE_COMMAND_REG NORMAL_OPERATION_MODE\n");
-+ return 1;
-+ }
-+
-+ printf("...done.\n");
-+
-+ return 0;
-+}
-+
-+void capsense_store_nvm(char address)
-+{
-+ //storing the new current configuration to NVM
-+ printf("Storing capsense configuration to NVM\n");
-+ capsense_write(address, CAPSENSE_COMMAND_REG, CAPSENSE_CMD_STORE_TO_NVM);
-+}
-+
-+#endif /* CONFIG_CAPSENSE_CY8C201XX */
-Index: u-boot-1.3.2/drivers/i2c/Makefile
-===================================================================
---- u-boot-1.3.2.orig/drivers/i2c/Makefile
-+++ u-boot-1.3.2/drivers/i2c/Makefile
-@@ -29,6 +29,7 @@ COBJS-y += fsl_i2c.o
- COBJS-y += omap1510_i2c.o
- COBJS-y += omap24xx_i2c.o
- COBJS-y += tsi108_i2c.o
-+COBJS-y += CY8C201xx.o
-
- COBJS := $(COBJS-y)
- SRCS := $(COBJS:.o=.c)
-Index: u-boot-1.3.2/include/capsense.h
-===================================================================
---- /dev/null
-+++ u-boot-1.3.2/include/capsense.h
-@@ -0,0 +1,95 @@
-+/*
-+ * (C) Copyright 2008
-+ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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 USCY8C201xx.c:234:A
-+ */
-+
-+/*
-+ * CapSense Express touch-sensing buttons.
-+ */
-+#ifndef _CAPSENSE_H_
-+#define _CAPSENSE_H_
-+
-+#if defined(CONFIG_CAPSENSE_CY8C201XX)
-+
-+#define CONFIG_CAPSENSE /* We have a Capsense */
-+
-+#ifndef CONFIG_CAPSENSE_SENSORS
-+/*config for CY3218-CAPEXP1*/
-+#define CONFIG_CAPSENSE_LED {0x05,0x02} // port 0-{0,3} port 1-{2}
-+#define CONFIG_CAPSENSE_SENSOR {0x02,0x0C} // port 0-{2} port 1-{3,4}
-+#endif
-+#endif /* CONFIG_CAPSENSE_SENSORS */
-+
-+extern int capsense_read(int address, int reg);
-+extern int capsense_write(int address, int reg, int val);
-+extern int capsense_get_state(int address,char port);
-+extern int capsense_change_i2c_address(char old_address,char new_address);
-+extern int capsense_config(char address);
-+extern void capsense_store_nvm(char address);
-+#endif
-+
-+#if !defined(CFG_CAPSENSE_BUS_NUM)
-+#define CFG_CAPSENSE_BUS_NUM 1
-+
-+//-----------------------------------------------
-+// Register Map and corresponding constants
-+//-----------------------------------------------
-+
-+
-+#define CAPSENSE_REG_STATUS_PORT 0x02
-+#define CAPSENSE_REG_OUTPUT_PORT 0x04
-+#define CAPSENSE_REG_CS_ENABLE 0x06
-+#define CAPSENSE_REG_GPIO_ENABLE 0x08
-+#define CAPSENSE_REG_INVERSION_MASK 0x0A
-+#define CAPSENSE_REG_INT_MASK 0x0C
-+#define CAPSENSE_REG_STATUS_HOLD_MSK 0x0E
-+#define CAPSENSE_REG_DRIVE_MODE 0x10
-+#define CAPSENSE_REG_OP_SEL_0 0x1C
-+#define CAPSENSE_REG_OP_SEL_1 0x35
-+#define CAPSENSE_REG_CS_NOISE_TH 0x4E
-+#define CAPSENSE_REG_CS_SETL_TIME 0x50
-+#define CAPSENSE_REG_CS_OTH_SET 0x51
-+#define CAPSENSE_REG_CS_HYSTERESIS 0x52
-+#define CAPSENSE_REG_CS_DEBOUNCE 0x53
-+#define CAPSENSE_REG_CS_NEG_NOISE_TH 0x54
-+#define CAPSENSE_REG_CS_SCAN_POS 0x57
-+#define CAPSENSE_REG_CS_FINGER_TH 0x61
-+#define CAPSENSE_REG_CS_IDAC 0x6B
-+#define CAPSENSE_REG_CS_SLID_CONFIG 0x75
-+#define CAPSENSE_REG_CS_SLID_MUL 0x77
-+#define CAPSENSE_REG_I2C_DEV_LOCK 0x79
-+#define CAPSENSE_REG_DEVICE_ID 0x7A
-+#define CAPSENSE_REG_I2C_ADDR_DM 0x7C
-+#define CAPSENSE_REG_SLEEP_PIN 0x7E
-+#define CAPSENSE_REG_SLEEP_CTRL 0x7F
-+#define CAPSENSE_REG_SLEEP_SA_CTR 0x80
-+#define CAPSENSE_REG_CS_READ_BUTTON 0x81
-+#define CAPSENSE_REG_CS_READ_BL 0x82
-+#define CAPSENSE_REG_READ_STATUS 0x88
-+#define CAPSENSE_REG_READ_CEN_POS 0x8A
-+
-+#define CAPSENSE_COMMAND_REG 0xA0
-+
-+#define CAPSENSE_CMD_STORE_TO_NVM 0x01
-+#define CAPSENSE_CMD_NORMAL_OPERATION_MODE 0x07
-+#define CAPSENSE_CMD_SETUP_OPERATION_MODE 0x08
-+
-+#endif /* _CAPSENSE_H_ */
-Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
-===================================================================
---- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h
-+++ u-boot-1.3.2/include/configs/MPC8313ERDB.h
-@@ -407,6 +407,13 @@
- #define CFG_DTT_MAX_TEMP 70
- #define CFG_DTT_MIN_TEMP -30
-
-+/*Capsense touch sensing buttons (Cpe board)*/
-+#define CONFIG_CMD_CAPSENSE
-+#define CONFIG_CAPSENSE_CY8C201XX 1
-+#define CONFIG_CAPSENSE_I2C_ADDRESS 0x25
-+#define CONFIG_CAPSENSE_LEDS {0x02,0x0F} // port 0-{1} port 1-{0,1,2,3}
-+#define CONFIG_CAPSENSE_SENSORS {0x1D,0x10} // port 0-{0,2,3,4} port 1-{4}
-+
- /*
- * Miscellaneous configurable options
- */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/007-090217-CAPSENSE.patch b/packages/u-boot/u-boot-1.3.2/boc01/007-090217-CAPSENSE.patch
new file mode 100644
index 0000000000..1b7630536f
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/007-090217-CAPSENSE.patch
@@ -0,0 +1,546 @@
+Index: u-boot-1.3.2/common/cmd_capsense.c
+===================================================================
+--- /dev/null
++++ u-boot-1.3.2/common/cmd_capsense.c
+@@ -0,0 +1,105 @@
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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
++ *
++ * CapSense Express touch-sensing buttons
++ */
++
++#include <common.h>
++#include <config.h>
++#include <command.h>
++
++#include <capsense.h>
++#include <i2c.h>
++
++#define ARG_SENSOR_NUMBER 1
++
++#define ARG_CMD 1
++#define ARG_OLD_ADDRESS 2
++
++
++int do_capsense (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++{
++ int i;
++ unsigned char sensors[] = CONFIG_CAPSENSE_SENSORS;
++ int old_bus, old_address;
++ char port[2];
++ /* switch to correct I2C bus */
++ old_bus = I2C_GET_BUS();
++ I2C_SET_BUS(CFG_CAPSENSE_BUS_NUM);
++
++ /*
++ * Loop through sensors, read
++ * state, and output it.
++ */
++ if(argc==1)
++ {
++ port[0]=capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,0);
++ port[1]=capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,1);
++ capsense_get_state(CONFIG_CAPSENSE_I2C_ADDRESS,1);
++ printf ("P0 0x%02x 0x%02x\n",port[0],port[1]);
++ for (i = 0; i < 8; i++)
++ {
++ if(sensors[0]&(1<<i))
++ {
++ printf ("GP0[%d]: %i\n",i,port[0]&(1<<i)?1:0);
++ }
++ if(sensors[1]&(1<<i))
++ {
++ printf ("GP1[%d]: %i\n",i,port[1]&(1<<i)?1:0);
++ }
++
++ }
++ }
++ else
++ {
++ if ( strncmp(argv[ARG_CMD], "config", 3) == 0 ) {
++ if ( argc == 3 ) {
++ old_address=simple_strtoul (argv[ARG_OLD_ADDRESS], NULL, 10);
++ if ( capsense_change_i2c_address(old_address, CONFIG_CAPSENSE_I2C_ADDRESS) != 0 )
++ printf("failed to change i2c address\n");
++ else
++ printf("i2c address changed to 0x%02X\n", CONFIG_CAPSENSE_I2C_ADDRESS);
++ }
++
++ capsense_config(CONFIG_CAPSENSE_I2C_ADDRESS);
++ capsense_store_nvm(CONFIG_CAPSENSE_I2C_ADDRESS);
++ }
++ else {
++ printf ("Usage:\n%s\n", cmdtp->help);
++ }
++ }
++
++ /* switch back to original I2C bus */
++ I2C_SET_BUS(old_bus);
++
++ return 0;
++} /* do_capsense() */
++
++
++/***************************************************/
++
++U_BOOT_CMD(
++ capsense, 4, 1, do_capsense,
++ "capsense - CapSense Express touch-sensing buttons\n",
++ "capsense\n Read state of the CapSense Express touch-sensing buttons.\n"
++ "capsense config [<old i2c address>]\n Setup default capsense configuration.\n"
++ );
+Index: u-boot-1.3.2/common/Makefile
+===================================================================
+--- u-boot-1.3.2.orig/common/Makefile
++++ u-boot-1.3.2/common/Makefile
+@@ -50,6 +50,7 @@ endif
+ COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o
+ COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o
+ COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
++COBJS-$(CONFIG_CMD_CAPSENSE) += cmd_capsense.o
+ COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o
+ COBJS-y += cmd_eeprom.o
+ COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
+Index: u-boot-1.3.2/drivers/i2c/CY8C201xx.c
+===================================================================
+--- /dev/null
++++ u-boot-1.3.2/drivers/i2c/CY8C201xx.c
+@@ -0,0 +1,289 @@
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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
++ */
++
++/*
++ * CapSense Express touch-sensing buttons
++ */
++
++#include <common.h>
++
++#ifdef CONFIG_CAPSENSE_CY8C201XX
++
++#include <i2c.h>
++#include <capsense.h>
++
++int capsense_read(int address, int reg)
++{
++ int dlen;
++ uchar data[2];
++
++ /*
++ * Validate 'reg' param
++ */
++ if ( (reg < 0) || (reg > 0xA1) )
++ return -1;
++
++ /*
++ * Prepare to handle 1 byte result.
++ */
++ dlen = 1;
++
++ /*
++ * Now try to read the register.
++ */
++ if (i2c_read(address, reg, 1, data, dlen) != 0)
++ return -1;
++
++ return (int)data[0];
++}
++
++
++int capsense_write(int address, int reg, int val)
++{
++ int dlen;
++ uchar data[2];
++
++ /*
++ * Validate 'reg' param
++ */
++ if((reg < 0) || (reg > 0xA1))
++ return -1;
++
++ /*
++ * Handle 1 byte values.
++ */
++ dlen = 1;
++ data[0] = (char)(val & 0xff);
++
++ /*
++ * Write value to register.
++ */
++ if (i2c_write(address, reg, 1, data, dlen) != 0)
++ return 1;
++
++ return 0;
++}
++
++
++int capsense_write_N(int address, int reg, char *data, int dlen)
++{
++ /*
++ * Validate 'reg' param
++ */
++ if ( (reg < 0) || (reg > 0xA1) )
++ return -1;
++
++ /*
++ * Write value to register.
++ */
++ if ( i2c_write(address, reg, 1, data, dlen) != 0 )
++ return 1;
++
++ return 0;
++}
++
++
++int capsense_get_state(int address,char port)
++{
++ return capsense_read(address,CAPSENSE_REG_READ_STATUS+port);
++}
++
++
++int capsense_change_i2c_address(char old_address,char new_address)
++{
++ unsigned char data[4];
++ int read_address;
++ printf("capsense change i2c address\n");
++ //checking if the I2C address is in the limits ( I2C address can have a value from 0 to 127 )
++ if((old_address>0x7F)||(new_address>0x7F))
++ {
++ printf("I2C address is not in the limits\n");
++ return 1;
++ }
++
++ //reading old capsence address
++ read_address=capsense_read(old_address, CAPSENSE_REG_I2C_ADDR_DM);
++ if(read_address==0xFFFFFFFF)
++ {
++ printf("error reading old capsence address\n");
++ return 1; //capsense do not respond at new address
++ }
++
++ if((read_address&0x7F)!=old_address)
++ {
++ printf("reading old capsence address failed\n");
++ return 1; //Capsense not respond correctly
++ }
++
++ //writing command for unlocking the I2C device address lock
++ data[0]=0x3C;
++ data[1]=0xA5;
++ data[2]=0x69;
++ if(capsense_write_N(old_address, CAPSENSE_REG_I2C_DEV_LOCK, data , 3)!=0)
++ {
++ printf("writing command for unlocking the I2C device address lock failed\n");
++ return 1;
++ }
++
++ //writing the new I2C address to the device I2C address register
++ if(capsense_write(old_address, CAPSENSE_REG_I2C_ADDR_DM,new_address|0x80)!=0)
++ {
++ printf("writing the new I2C address to the device I2C address register failed\n");
++ return 1;
++ }
++
++ //writing command for locking the I2C device address lock
++ data[0]=0x96;
++ data[1]=0x5A;
++ data[2]=0xC3;
++ if(capsense_write_N(old_address, CAPSENSE_REG_I2C_DEV_LOCK, data , 3)!=0)
++ {
++ printf("writing command for locking the I2C device failed\n");
++ return 1;
++ }
++
++ //reading new capsence address
++ read_address=capsense_read(new_address, CAPSENSE_REG_I2C_ADDR_DM);
++ if(read_address==0xFFFFFFFF)
++ {
++ printf("capsense do not respond at new address\n");
++ return 1; //capsense do not respond at new address
++ }
++
++ return 0;
++}
++
++
++static char data_GPIO_ENABLE[] = {
++ 0x00, 0x00 // GPIO_ENABLE
++};
++
++static char data_CS_ENABLE[] = {
++ 0x1D, 0x10, // CS_ENABLE
++ 0x02, 0x0F, // GPIO_ENABLE
++ 0x00, 0x00, // INVERSION_MASK
++ 0x00, 0x00, // INT_MASK
++ 0x1F, 0x1F, // STATUS_HOLD_MSK
++ 0x00, 0x02, 0x00, 0x00, // DM_PULL_UP0, DM_STRONG0, DM_HIGHZ0, DM_OD_LOW0
++ 0x00, 0x0F, 0x00, 0x00, // DM_PULL_UP1, DM_STRONG1, DM_HIGHZ1, DM_OD_LOW1
++};
++
++static char data_OUTPUT_PORT[] = {
++ 0x00, 0x00 // OUTPUT_PORT
++};
++
++static char data_OP_SEL[] = {
++ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_00
++ 0x80, 0x01, 0x00, 0x00, 0x00, // OP_SEL_01
++ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_02
++ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_03
++ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_04
++ 0x80, 0x10, 0x00, 0x00, 0x00, // OP_SEL_10
++ 0x80, 0x08, 0x00, 0x00, 0x00, // OP_SEL_11
++ 0x80, 0x04, 0x00, 0x00, 0x00, // OP_SEL_12
++ 0x80, 0x00, 0x10, 0x00, 0x00, // OP_SEL_13
++ 0x00, 0x00, 0x00, 0x00, 0x00, // OP_SEL_14
++};
++
++static char data_CS_NOISE_TH[] = {
++ 0x28, // CS_NOISE_TH
++ 0x64, // CS_BL_UPD_TH
++ 0xA0, // CS_SETL_TIME
++ 0x22, // CS_OTH_SET
++ 0x0A, // CS_HYSTERESIS
++ 0x03, // CS_DEBOUNCE
++ 0x14, // CS_NEG_NOISE_TH
++ 0x14, // CS_LOW_BL_RST
++ 0x00, // CS_FILTERING
++};
++
++static char data_CS_SCAN_POS[] = {
++ 0x00, 0x00, 0x00, 0x00, 0x00, // CS_SCAN_POS_0x
++ 0x00, 0x00, 0x00, 0x00, 0x00, // CS_SCAN_POS_1x
++ 0x32, 0x00, 0x32, 0x32, 0x32, // CS_FINGER_TH_0x
++ 0x00, 0x00, 0x00, 0x00, 0x32, // CS_FINGER_TH_1x
++ 0x14, 0x00, 0x0C, 0x0A, 0x14, // CS_IDAC_0x
++ 0x00, 0x00, 0x00, 0x00, 0x0D // CS_IDAC_1x
++};
++
++static char data_SLEEP[] = {
++ 0x00, // SLEEP_PIN
++ 0x20, // SLEEP_CTRL
++ 0x00, // SLEEP_SA_CTR
++};
++
++int capsense_config(char address)
++{
++ printf("Setting default capsense configuration at i2c address 0x%02X...\n", address);
++
++ //entering setup operation mode
++ if ( capsense_write(address, CAPSENSE_COMMAND_REG, CAPSENSE_CMD_SETUP_OPERATION_MODE) != 0 ) {
++ printf("CAPSENSE_COMMAND_REG SETUP_OPERATION_MODE\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_GPIO_ENABLE, data_GPIO_ENABLE, sizeof(data_GPIO_ENABLE)) != 0 ) {
++ printf("CAPSENSE_REG_GPIO_ENABLE\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_CS_ENABLE, data_CS_ENABLE, sizeof(data_CS_ENABLE)) != 0 ) {
++ printf("CAPSENSE_REG_CS_ENABLE\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_OUTPUT_PORT, data_OUTPUT_PORT, sizeof(data_OUTPUT_PORT)) != 0 ) {
++ printf("CAPSENSE_REG_OUTPUT_PORT\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_OP_SEL_0, data_OP_SEL, sizeof(data_OP_SEL)) != 0 ) {
++ printf("CAPSENSE_REG_OP_SEL_0\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_CS_NOISE_TH, data_CS_NOISE_TH, sizeof(data_CS_NOISE_TH)) != 0 ) {
++ printf("CAPSENSE_REG_CS_NOISE_TH\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_CS_SCAN_POS, data_CS_SCAN_POS, sizeof(data_CS_SCAN_POS)) != 0 ) {
++ printf("CAPSENSE_REG_CS_SCAN_POS\n");
++ return 1;
++ }
++ if ( capsense_write_N(address, CAPSENSE_REG_SLEEP_PIN, data_SLEEP, sizeof(data_SLEEP)) != 0 ) {
++ printf("CAPSENSE_REG_SLEEP_PIN\n");
++ return 1;
++ }
++ if ( capsense_write(address, CAPSENSE_COMMAND_REG, CAPSENSE_CMD_NORMAL_OPERATION_MODE) != 0 ) {
++ printf("CAPSENSE_COMMAND_REG NORMAL_OPERATION_MODE\n");
++ return 1;
++ }
++
++ printf("...done.\n");
++
++ return 0;
++}
++
++void capsense_store_nvm(char address)
++{
++ //storing the new current configuration to NVM
++ printf("Storing capsense configuration to NVM\n");
++ capsense_write(address, CAPSENSE_COMMAND_REG, CAPSENSE_CMD_STORE_TO_NVM);
++}
++
++#endif /* CONFIG_CAPSENSE_CY8C201XX */
+Index: u-boot-1.3.2/drivers/i2c/Makefile
+===================================================================
+--- u-boot-1.3.2.orig/drivers/i2c/Makefile
++++ u-boot-1.3.2/drivers/i2c/Makefile
+@@ -29,6 +29,7 @@ COBJS-y += fsl_i2c.o
+ COBJS-y += omap1510_i2c.o
+ COBJS-y += omap24xx_i2c.o
+ COBJS-y += tsi108_i2c.o
++COBJS-y += CY8C201xx.o
+
+ COBJS := $(COBJS-y)
+ SRCS := $(COBJS:.o=.c)
+Index: u-boot-1.3.2/include/capsense.h
+===================================================================
+--- /dev/null
++++ u-boot-1.3.2/include/capsense.h
+@@ -0,0 +1,95 @@
++/*
++ * (C) Copyright 2008
++ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.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 USCY8C201xx.c:234:A
++ */
++
++/*
++ * CapSense Express touch-sensing buttons.
++ */
++#ifndef _CAPSENSE_H_
++#define _CAPSENSE_H_
++
++#if defined(CONFIG_CAPSENSE_CY8C201XX)
++
++#define CONFIG_CAPSENSE /* We have a Capsense */
++
++#ifndef CONFIG_CAPSENSE_SENSORS
++/*config for CY3218-CAPEXP1*/
++#define CONFIG_CAPSENSE_LED {0x05,0x02} // port 0-{0,3} port 1-{2}
++#define CONFIG_CAPSENSE_SENSOR {0x02,0x0C} // port 0-{2} port 1-{3,4}
++#endif
++#endif /* CONFIG_CAPSENSE_SENSORS */
++
++extern int capsense_read(int address, int reg);
++extern int capsense_write(int address, int reg, int val);
++extern int capsense_get_state(int address,char port);
++extern int capsense_change_i2c_address(char old_address,char new_address);
++extern int capsense_config(char address);
++extern void capsense_store_nvm(char address);
++#endif
++
++#if !defined(CFG_CAPSENSE_BUS_NUM)
++#define CFG_CAPSENSE_BUS_NUM 1
++
++//-----------------------------------------------
++// Register Map and corresponding constants
++//-----------------------------------------------
++
++
++#define CAPSENSE_REG_STATUS_PORT 0x02
++#define CAPSENSE_REG_OUTPUT_PORT 0x04
++#define CAPSENSE_REG_CS_ENABLE 0x06
++#define CAPSENSE_REG_GPIO_ENABLE 0x08
++#define CAPSENSE_REG_INVERSION_MASK 0x0A
++#define CAPSENSE_REG_INT_MASK 0x0C
++#define CAPSENSE_REG_STATUS_HOLD_MSK 0x0E
++#define CAPSENSE_REG_DRIVE_MODE 0x10
++#define CAPSENSE_REG_OP_SEL_0 0x1C
++#define CAPSENSE_REG_OP_SEL_1 0x35
++#define CAPSENSE_REG_CS_NOISE_TH 0x4E
++#define CAPSENSE_REG_CS_SETL_TIME 0x50
++#define CAPSENSE_REG_CS_OTH_SET 0x51
++#define CAPSENSE_REG_CS_HYSTERESIS 0x52
++#define CAPSENSE_REG_CS_DEBOUNCE 0x53
++#define CAPSENSE_REG_CS_NEG_NOISE_TH 0x54
++#define CAPSENSE_REG_CS_SCAN_POS 0x57
++#define CAPSENSE_REG_CS_FINGER_TH 0x61
++#define CAPSENSE_REG_CS_IDAC 0x6B
++#define CAPSENSE_REG_CS_SLID_CONFIG 0x75
++#define CAPSENSE_REG_CS_SLID_MUL 0x77
++#define CAPSENSE_REG_I2C_DEV_LOCK 0x79
++#define CAPSENSE_REG_DEVICE_ID 0x7A
++#define CAPSENSE_REG_I2C_ADDR_DM 0x7C
++#define CAPSENSE_REG_SLEEP_PIN 0x7E
++#define CAPSENSE_REG_SLEEP_CTRL 0x7F
++#define CAPSENSE_REG_SLEEP_SA_CTR 0x80
++#define CAPSENSE_REG_CS_READ_BUTTON 0x81
++#define CAPSENSE_REG_CS_READ_BL 0x82
++#define CAPSENSE_REG_READ_STATUS 0x88
++#define CAPSENSE_REG_READ_CEN_POS 0x8A
++
++#define CAPSENSE_COMMAND_REG 0xA0
++
++#define CAPSENSE_CMD_STORE_TO_NVM 0x01
++#define CAPSENSE_CMD_NORMAL_OPERATION_MODE 0x07
++#define CAPSENSE_CMD_SETUP_OPERATION_MODE 0x08
++
++#endif /* _CAPSENSE_H_ */
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h
+@@ -407,6 +407,13 @@
+ #define CFG_DTT_MAX_TEMP 70
+ #define CFG_DTT_MIN_TEMP -30
+
++/*Capsense touch sensing buttons (Cpe board)*/
++#define CONFIG_CMD_CAPSENSE
++#define CONFIG_CAPSENSE_CY8C201XX 1
++#define CONFIG_CAPSENSE_I2C_ADDRESS 0x25
++#define CONFIG_CAPSENSE_LEDS {0x02,0x0F} // port 0-{1} port 1-{0,1,2,3}
++#define CONFIG_CAPSENSE_SENSORS {0x1D,0x10} // port 0-{0,2,3,4} port 1-{4}
++
+ /*
+ * Miscellaneous configurable options
+ */
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/010-081212-LCD.patch b/packages/u-boot/u-boot-1.3.2/boc01/010-081212-LCD.patch
index 07c7b3840a..33a0c761f9 100644
--- a/packages/u-boot/u-boot-1.3.2/boc01/010-081212-LCD.patch
+++ b/packages/u-boot/u-boot-1.3.2/boc01/010-081212-LCD.patch
@@ -181,7 +181,7 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
===================================================================
--- /dev/null
+++ u-boot-1.3.2/common/cmd_lcd.c
-@@ -0,0 +1,243 @@
+@@ -0,0 +1,237 @@
+/*
+ * (C) Copyright 2008
+ * Alexandre Coffignal, CénoSYS, alexandre.coffignal@cenosys.com
@@ -216,13 +216,6 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
+#define DELAY 1
+#define AEL 0x0F
+
-+static void NT7506_init_lcd(char ael);
-+static void NT7506_print_splash(char * Picture,char width,char height);
-+static void NT7506_set_xaddr(unsigned char x);
-+static void NT7506_set_yaddr(unsigned char y);
-+static void NT7506_writeb_data(unsigned char value);
-+static void NT7506_writeb_ctl(unsigned char value);
-+static void iowrite16(unsigned short value);
+
+static void iowrite16(unsigned short value)
+{
@@ -269,7 +262,7 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
+ NT7506_writeb_ctl(NT_COL_LSB | (x & 0x0F) ); //Send low nibble
+}
+
-+static void ImageRota(char * src,char * dest, int w ,int h)
++static void ImageRota(unsigned char *src, unsigned char *dest, int w ,int h)
+{
+ int i,j,bit,IndexRead;
+ char mask=0;
@@ -290,14 +283,13 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
+}
+
+
-+static void NT7506_print_splash(char * picture,char width,char height)
++static void NT7506_print_splash(unsigned char *picture, char width, char height)
+{
+ int i;
-+ char value;
-+ char imagerota[2048];
++ unsigned char imagerota[2048];
+ int indeximage=0;
+
-+ int x,y,xfb,yfb,Index;
++ int x,y,xfb,yfb;
+ char src[2048];
+ if(width>128)
+ width=128;
@@ -379,7 +371,7 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
+
+
+/**************************************************/
-+void do_lcd(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++int do_lcd(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+ char lcd_ael=AEL;
+ if(argc>1)
@@ -390,6 +382,8 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
+
+ NT7506_init_lcd(lcd_ael);
+ NT7506_print_splash(Bollore_bits,Bollore_width,Bollore_height);
++
++ return 0;
+}
+
+U_BOOT_CMD(
@@ -398,7 +392,7 @@ Index: u-boot-1.3.2/common/cmd_lcd.c
+ "lcd\n"
+);
+
-+void do_backlight(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
++int do_backlight(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+ if (!strncmp(argv[1], "on", 7))
+ {
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/013-081211-FIX_OOB_8BITS_LARGEPAGE_NAND.patch b/packages/u-boot/u-boot-1.3.2/boc01/013-081211-FIX_OOB_8BITS_LARGEPAGE_NAND.patch
deleted file mode 100644
index 911dd2907e..0000000000
--- a/packages/u-boot/u-boot-1.3.2/boc01/013-081211-FIX_OOB_8BITS_LARGEPAGE_NAND.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Index: u-boot-1.3.2/drivers/mtd/nand/nand_bbt.c
-===================================================================
---- u-boot-1.3.2.orig/drivers/mtd/nand/nand_bbt.c 2008-12-11 10:15:52.000000000 +0100
-+++ u-boot-1.3.2/drivers/mtd/nand/nand_bbt.c 2008-12-11 10:16:39.000000000 +0100
-@@ -914,10 +914,11 @@
- .pattern = scan_ff_pattern
- };
-
-+//Samsung makes sure that either the 1st or 2nd page of every initial invalid block has non-FFh data at the column address of 2048.
- static struct nand_bbt_descr largepage_memorybased = {
- .options = 0,
- .offs = 0,
-- .len = 2,
-+ .len = 1,
- .pattern = scan_ff_pattern
- };
-
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/013-090206-FIX_OOB_8BITS_LARGEPAGE_NAND.patch b/packages/u-boot/u-boot-1.3.2/boc01/013-090206-FIX_OOB_8BITS_LARGEPAGE_NAND.patch
new file mode 100644
index 0000000000..803b46d8e9
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/013-090206-FIX_OOB_8BITS_LARGEPAGE_NAND.patch
@@ -0,0 +1,29 @@
+Index: u-boot-1.3.2/drivers/mtd/nand/nand_bbt.c
+===================================================================
+--- u-boot-1.3.2.orig/drivers/mtd/nand/nand_bbt.c 2008-03-09 16:20:02.000000000 +0100
++++ u-boot-1.3.2/drivers/mtd/nand/nand_bbt.c 2009-02-06 14:50:35.000000000 +0100
+@@ -914,10 +914,11 @@
+ .pattern = scan_ff_pattern
+ };
+
++//Samsung makes sure that either the 1st or 2nd page of every initial invalid block has non-FFh data at the column address of 2048.
+ static struct nand_bbt_descr largepage_memorybased = {
+ .options = 0,
+ .offs = 0,
+- .len = 2,
++ .len = 1,
+ .pattern = scan_ff_pattern
+ };
+
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2009-02-06 15:42:07.000000000 +0100
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2009-02-06 15:42:45.000000000 +0100
+@@ -205,6 +205,7 @@
+ | BR_MS_FCM /* MSEL = FCM */ \
+ | BR_V ) /* valid */
+ #define CFG_OR1_PRELIM ( 0xFFFF8000 /* length 32K */ \
++ | OR_FCM_PGS \
+ | OR_FCM_CSCT \
+ | OR_FCM_CST \
+ | OR_FCM_CHT \
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/014-081211-BOOT_RESCUE.patch b/packages/u-boot/u-boot-1.3.2/boc01/014-081211-BOOT_RESCUE.patch
index e18055e64c..d2ebdef772 100644
--- a/packages/u-boot/u-boot-1.3.2/boc01/014-081211-BOOT_RESCUE.patch
+++ b/packages/u-boot/u-boot-1.3.2/boc01/014-081211-BOOT_RESCUE.patch
@@ -2,7 +2,15 @@ Index: u-boot-1.3.2/common/main.c
===================================================================
--- u-boot-1.3.2.orig/common/main.c
+++ u-boot-1.3.2/common/main.c
-@@ -377,6 +377,15 @@ void main_loop (void)
+@@ -39,6 +39,7 @@
+ #endif
+
+ #include <post.h>
++#include <gpio.h>
+
+ #ifdef CONFIG_SILENT_CONSOLE
+ DECLARE_GLOBAL_DATA_PTR;
+@@ -377,6 +378,15 @@ void main_loop (void)
}
else
#endif /* CONFIG_BOOTCOUNT_LIMIT */
@@ -22,7 +30,7 @@ Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
===================================================================
--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h
+++ u-boot-1.3.2/include/configs/MPC8313ERDB.h
-@@ -405,6 +405,7 @@
+@@ -406,6 +406,7 @@
#define PRE_INIT_GPIO 0x28
#define INIT_GPIO 0x08
#define MAX_GPIO_OUT 7
@@ -30,7 +38,7 @@ Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
/* Digital Thermometer and Thermostat */
#define CONFIG_DTT_LM73 1
-@@ -558,6 +559,7 @@
+@@ -559,6 +560,7 @@
* Environment Configuration
*/
#define CONFIG_ENV_OVERWRITE
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/015-090205-EMC.patch b/packages/u-boot/u-boot-1.3.2/boc01/015-090205-EMC.patch
new file mode 100644
index 0000000000..afc43c47ed
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/015-090205-EMC.patch
@@ -0,0 +1,31 @@
+Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+===================================================================
+--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c
++++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+@@ -135,8 +135,9 @@ void pci_init_board(void)
+ struct pci_region *reg[] = { pci_regions };
+ int warmboot;
+
+- /* Enable all 3 PCI_CLK_OUTPUTs. */
+- clk->occr |= 0xe0000000;
++ /* Enable PCI_CLK_OUTPUT 1 only.
++ Disable others for better EMC footprint. */
++ clk->occr = (clk->occr & 0x1fffffff) | OCCR_PCICOE1;
+
+ /*
+ * Configure PCI Local Access Windows
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h
+@@ -133,8 +133,8 @@
+ #define CFG_DDR_CLK_CNTL DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05
+ /*0x02000000*/
+ #define CFG_DDRCDR_VALUE ( DDRCDR_EN \
+- | DDRCDR_PZ_NOMZ \
+- | DDRCDR_NZ_NOMZ \
++ | DDRCDR_PZ_MAXZ \
++ | DDRCDR_NZ_MAXZ \
+ | DDRCDR_M_ODR )
+
+ /*
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/016-090209-PM.patch b/packages/u-boot/u-boot-1.3.2/boc01/016-090209-PM.patch
new file mode 100644
index 0000000000..940e4ae40c
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.2/boc01/016-090209-PM.patch
@@ -0,0 +1,56 @@
+Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
+===================================================================
+--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h
++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h
+@@ -60,7 +60,7 @@
+ * to access the PMC registers, unless a JTAG debugger is
+ * connected, or some resistor modifications are made.
+ */
+-#define CFG_8313ERDB_BROKEN_PMC 1
++#undef CFG_8313ERDB_BROKEN_PMC
+
+ #define CFG_ACR_PIPE_DEP 3 /* Arbiter pipeline depth (0-3) */
+ #define CFG_ACR_RPTCNT 3 /* Arbiter repeat count (0-7) */
+Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+===================================================================
+--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c
++++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
+@@ -30,6 +30,7 @@
+ #include <mpc83xx.h>
+ #include <spi.h>
+ #include <gpio.h>
++#include <asm/processor.h>
+
+ DECLARE_GLOBAL_DATA_PTR;
+
+@@ -39,7 +40,29 @@ int board_early_init_f(void)
+ volatile immap_t *im = (immap_t *)CFG_IMMR;
+
+ if (im->pmc.pmccr1 & PMCCR1_POWER_OFF)
+- gd->flags |= GD_FLG_SILENT;
++ {
++ volatile immap_t *immap = (immap_t *) CFG_IMMR;
++ ulong msr;
++ /* Interrupts and MMU off */
++ __asm__ __volatile__ ("mfmsr %0":"=r" (msr):);
++
++ msr &= ~( MSR_EE | MSR_IR | MSR_DR);
++ __asm__ __volatile__ ("mtmsr %0"::"r" (msr));
++
++ /* enable Reset Control Reg */
++ immap->reset.rpr = 0x52535445;
++ __asm__ __volatile__ ("sync");
++ __asm__ __volatile__ ("isync");
++
++ /* confirm Reset Control Reg is enabled */
++ while(!((immap->reset.rcer) & RCER_CRE));
++
++ udelay(200);
++
++ /* perform reset, only one bit */
++ immap->reset.rcr = RCR_SWHR;
++ }
++
+ #endif
+
+ return 0;
diff --git a/packages/u-boot/u-boot_1.1.2.bb b/packages/u-boot/u-boot_1.1.2.bb
index 1afb3eec5a..c83e31f532 100644
--- a/packages/u-boot/u-boot_1.1.2.bb
+++ b/packages/u-boot/u-boot_1.1.2.bb
@@ -13,7 +13,7 @@ SRC_URI_append_mnci = "file://mnci.patch;patch=1 \
file://command-names.patch;patch=1"
SRC_URI_append_magicbox = "file://u-boot-emetec.patch;patch=1 "
-SRC_URI_append_oxe810 = "file://oxe810.patch;patch=1 "
+SRC_URI_append_oxnas = "file://oxnas.patch;patch=1 "
# TODO: SRC_URI_append_rt3000
@@ -23,7 +23,7 @@ TARGET_LDFLAGS = ""
UBOOT_MACHINE_mnci = "mnci_config"
UBOOT_MACHINE_vibren = "pxa255_idp_config"
UBOOT_MACHINE_magicbox = "EMETEC405_config"
-UBOOT_MACHINE_oxe810 = "oxnas_config"
+UBOOT_MACHINE_oxnas = "oxnas_config"
inherit base
diff --git a/packages/u-boot/u-boot_1.3.2.bb b/packages/u-boot/u-boot_1.3.2.bb
index 003838a670..59ebaecabd 100644
--- a/packages/u-boot/u-boot_1.3.2.bb
+++ b/packages/u-boot/u-boot_1.3.2.bb
@@ -2,7 +2,7 @@ require u-boot.inc
DEFAULT_PREFERENCE = "-1"
-PR = "r9"
+PR = "r11"
SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2"
@@ -22,18 +22,21 @@ SRC_URI_append_boc01 = "\
file://mpc8313e-rdb-nand.patch;patch=1 \
file://mpc8313e-rdb-mtdparts.patch;patch=1 \
file://mpc8313e-rdb-eeprom.patch;patch=1 \
- file://001-090115-SPI.patch;patch=1 \
+ file://001-090205-SPI.patch;patch=1 \
file://002-081212-GPIO.patch;patch=1 \
file://003-081205-DTT_LM73.patch;patch=1 \
+ file://004-081205-WATCHDOG.patch;patch=1 \
file://006-081211-EEPROM_M24C32.patch;patch=1 \
- file://007-090112-CAPSENSE.patch;patch=1 \
+ file://007-090217-CAPSENSE.patch;patch=1 \
file://008-090107-TSEC.patch;patch=1 \
file://009-081212-EXIO.patch;patch=1 \
file://010-081212-LCD.patch;patch=1 \
file://011-081211-CMD_TEST.patch;patch=1 \
file://012-081209-BUG_SETENV.patch;patch=1 \
- file://013-081211-FIX_OOB_8BITS_LARGEPAGE_NAND.patch;patch=1 \
+ file://013-090206-FIX_OOB_8BITS_LARGEPAGE_NAND.patch;patch=1 \
file://014-081211-BOOT_RESCUE.patch;patch=1 \
+ file://015-090205-EMC.patch;patch=1 \
+ file://016-090209-PM.patch;patch=1 \
"
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb
index 3e932c6466..e5a8d5d327 100644
--- a/packages/u-boot/u-boot_git.bb
+++ b/packages/u-boot/u-boot_git.bb
@@ -17,6 +17,10 @@ SRC_URI_omap3evm = "git://www.sakoman.net/git/u-boot-omap3.git;branch=omap3;prot
SRCREV_omap3evm = "1e329ec630b31803ee191d2ee335214662b5bfea"
PV_omap3evm = "2008.10+${PR}+gitr${SRCREV}"
+SRC_URI_omapzoom = "git://www.sakoman.net/git/u-boot-omap3.git;branch=omap3-dev;protocol=git"
+SRCREV_omapzoom = "d691b424f1f5bf7eea3a4131dfc578d272e8f335"
+PV_omapzoom = "2009.01+${PR}+gitr${SRCREV}"
+
SRC_URI_neuros-osd2 = "git://github.com/neuros/u-boot.git;protocol=git;branch=neuros"
SRCREV_neuros-osd2 = "8de979d346624c0e4cfe2e5c0f08ce20ca4b5d14"
diff --git a/packages/uclibc/uclibc-0.9.30.1/a780/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/a780/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/akita/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/akita/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/arm-linuxthreads.patch b/packages/uclibc/uclibc-0.9.30.1/arm-linuxthreads.patch
new file mode 100644
index 0000000000..e222668a66
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/arm-linuxthreads.patch
@@ -0,0 +1,218 @@
+Index: uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/vfork.S 2008-08-28 00:22:06.278340855 +0200
+@@ -0,0 +1,78 @@
++/* Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Philip Blundell <philb@gnu.org>.
++
++ 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-cancel.h>
++#define _ERRNO_H 1
++#include <bits/errno.h>
++#include <kernel-features.h>
++
++/* Clone the calling process, but without copying the whole address space.
++ The calling process is suspended until the new process exits or is
++ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
++ and the process ID of the new process to the old process. */
++
++ENTRY (__vfork)
++
++#ifdef __NR_vfork
++
++#ifdef SHARED
++ ldr ip, 1f
++ ldr r0, 2f
++3: add ip, pc, ip
++ ldr r0, [ip, r0]
++#else
++ ldr r0, 1f
++#endif
++ movs r0, r0
++ bne HIDDEN_JUMPTARGET (__fork)
++
++ DO_CALL (vfork, 0)
++ cmn a1, #4096
++ RETINSTR(cc, lr)
++
++#ifndef __ASSUME_VFORK_SYSCALL
++ /* Check if vfork syscall is known at all. */
++ cmn a1, #ENOSYS
++ bne PLTJMP(C_SYMBOL_NAME(__syscall_error))
++#endif
++
++#endif
++
++#ifndef __ASSUME_VFORK_SYSCALL
++ /* If we don't have vfork, fork is close enough. */
++ DO_CALL (fork, 0)
++ cmn a1, #4096
++ RETINSTR(cc, lr)
++#elif !defined __NR_vfork
++# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
++#endif
++ b PLTJMP(C_SYMBOL_NAME(__syscall_error))
++
++#ifdef SHARED
++1: .word _GLOBAL_OFFSET_TABLE_ - 3b - 8
++2: .word __libc_pthread_functions(GOTOFF)
++#else
++ .weak pthread_create
++1: .word pthread_create
++#endif
++
++PSEUDO_END (__vfork)
++libc_hidden_def (__vfork)
++
++weak_alias (__vfork, vfork)
+Index: uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc/libpthread/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 2008-08-28 00:28:04.301636993 +0200
+@@ -0,0 +1,130 @@
++/* Copyright (C) 2003, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Phil Blundell <pb@nexus.co.uk>, 2003.
++
++ 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 <tls.h>
++#include <pt-machine.h>
++#ifndef __ASSEMBLER__
++# include <linuxthreads/internals.h>
++#endif
++
++#if !defined NOT_IN_libc || defined IS_IN_libpthread
++
++/* We push lr onto the stack, so we have to use ldmib instead of ldmia
++ to find the saved arguments. */
++# ifdef PIC
++# undef DOARGS_5
++# undef DOARGS_6
++# undef DOARGS_7
++# define DOARGS_5 str r4, [sp, $-4]!; ldr r4, [sp, $8];
++# define DOARGS_6 mov ip, sp; stmfd sp!, {r4, r5}; ldmib ip, {r4, r5};
++# define DOARGS_7 mov ip, sp; stmfd sp!, {r4, r5, r6}; ldmib ip, {r4, r5, r6};
++# endif
++
++# undef PSEUDO_RET
++# define PSEUDO_RET \
++ ldrcc pc, [sp], $4; \
++ ldr lr, [sp], $4; \
++ b PLTJMP(SYSCALL_ERROR)
++
++# undef PSEUDO
++# define PSEUDO(name, syscall_name, args) \
++ .section ".text"; \
++ PSEUDO_PROLOGUE; \
++ ENTRY (name); \
++ SINGLE_THREAD_P; \
++ bne .Lpseudo_cancel; \
++ DO_CALL (syscall_name, args); \
++ cmn r0, $4096; \
++ RETINSTR(cc, lr); \
++ b PLTJMP(SYSCALL_ERROR); \
++ .Lpseudo_cancel: \
++ str lr, [sp, $-4]!; \
++ DOCARGS_##args; /* save syscall args around CENABLE. */ \
++ CENABLE; \
++ mov ip, r0; /* put mask in safe place. */ \
++ UNDOCARGS_##args; /* restore syscall args. */ \
++ swi SYS_ify (syscall_name); /* do the call. */ \
++ str r0, [sp, $-4]!; /* save syscall return value. */ \
++ mov r0, ip; /* get mask back. */ \
++ CDISABLE; \
++ ldr r0, [sp], $4; /* retrieve return value. */ \
++ UNDOC2ARGS_##args; /* fix register damage. */ \
++ cmn r0, $4096;
++
++# define DOCARGS_0
++# define UNDOCARGS_0
++# define UNDOC2ARGS_0
++
++# define DOCARGS_1 str r0, [sp, #-4]!;
++# define UNDOCARGS_1 ldr r0, [sp], #4;
++# define UNDOC2ARGS_1
++
++# define DOCARGS_2 str r1, [sp, #-4]!; str r0, [sp, #-4]!;
++# define UNDOCARGS_2 ldr r0, [sp], #4; ldr r1, [sp], #4;
++# define UNDOC2ARGS_2
++
++# define DOCARGS_3 str r2, [sp, #-4]!; str r1, [sp, #-4]!; str r0, [sp, #-4]!;
++# define UNDOCARGS_3 ldr r0, [sp], #4; ldr r1, [sp], #4; ldr r2, [sp], #4
++# define UNDOC2ARGS_3
++
++# define DOCARGS_4 stmfd sp!, {r0-r3}
++# define UNDOCARGS_4 ldmfd sp!, {r0-r3}
++# define UNDOC2ARGS_4
++
++# define DOCARGS_5 stmfd sp!, {r0-r3}
++# define UNDOCARGS_5 ldmfd sp, {r0-r3}; str r4, [sp, #-4]!; ldr r4, [sp, #24]
++# define UNDOC2ARGS_5 ldr r4, [sp], #20
++
++# ifdef IS_IN_libpthread
++# define CENABLE bl PLTJMP(__pthread_enable_asynccancel)
++# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel)
++# define __local_multiple_threads __pthread_multiple_threads
++# else
++# define CENABLE bl PLTJMP(__libc_enable_asynccancel)
++# define CDISABLE bl PLTJMP(__libc_disable_asynccancel)
++# define __local_multiple_threads __libc_multiple_threads
++# endif
++
++# ifndef __ASSEMBLER__
++extern int __local_multiple_threads attribute_hidden;
++# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
++# else
++# if !defined PIC
++# define SINGLE_THREAD_P \
++ ldr ip, =__local_multiple_threads; \
++ ldr ip, [ip]; \
++ teq ip, #0;
++# define PSEUDO_PROLOGUE
++# else
++# define SINGLE_THREAD_P \
++ ldr ip, 1b; \
++2: \
++ ldr ip, [pc, ip]; \
++ teq ip, #0;
++# define PSEUDO_PROLOGUE \
++ 1: .word __local_multiple_threads - 2f - 8;
++# endif
++# endif
++
++#elif !defined __ASSEMBLER__
++
++/* This code should never be used but we define it anyhow. */
++# define SINGLE_THREAD_P (1)
++
++#endif
diff --git a/packages/uclibc/uclibc-0.9.30.1/arm/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/arm/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/armeb/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/armeb/uClibc.machine
new file mode 100644
index 0000000000..2d9f63e531
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/armv4t/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/armv4t/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/armv4t/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.30.1/armv5te/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/armv5te/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/armv5te/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.30.1/armv6/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/armv6/uClibc.machine
new file mode 100644
index 0000000000..85f70f70c7
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/armv6/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=y
+UCLIBC_HAS_SOFT_FLOAT=n
+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.30.1/armv7a/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/armv7a/uClibc.machine
new file mode 100644
index 0000000000..85f70f70c7
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/armv7a/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=y
+UCLIBC_HAS_SOFT_FLOAT=n
+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.30.1/avr32/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/avr32/uClibc.machine
new file mode 100644
index 0000000000..ed8b1a447e
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/avr32/uClibc.machine
@@ -0,0 +1,54 @@
+#
+# Automatically generated make config: don't edit
+# Thu May 1 16:06:57 2008
+#
+# 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_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="avr32"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_AVR32_AP7=y
+LINKRELAX=y
+TARGET_SUBARCH=""
+
+#
+# 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 is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/home/stelios/proj/OE/tmp/uclibc/staging/avr32-angstrom-linux-uclibc/usr/include"
+HAVE_DOT_CONFIG=y
diff --git a/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.config b/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.config
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.config
diff --git a/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.distro b/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.distro
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.distro
diff --git a/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.machine
new file mode 100644
index 0000000000..0c565238e5
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/bfin/uClibc.machine
@@ -0,0 +1,192 @@
+#
+# Automatically generated make config: don't edit
+# Sat Oct 20 20:22:28 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=y
+# UCLIBC_FORMAT_FLAT is not set
+# UCLIBC_FORMAT_FLAT_SEP_DATA is not set
+# UCLIBC_FORMAT_SHARED_FLAT is not set
+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 is not set
+KERNEL_HEADERS="/usr/include"
+# UCLIBC_UCLINUX_BROKEN_MUNMAP is not set
+EXCLUDE_BRK=y
+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=y
+LDSO_RUNPATH=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+LINUXTHREADS_OLD=y
+UCLIBC_HAS_LFS=y
+MALLOC=y
+# MALLOC_SIMPLE is not set
+# MALLOC_STANDARD is not set
+# MALLOC_GLIBC_COMPAT is not set
+UCLIBC_DYNAMIC_ATEXIT=y
+# COMPAT_ATEXIT is not set
+# UCLIBC_SUSV3_LEGACY is not set
+# UCLIBC_SUSV3_LEGACY_MACROS is not set
+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"
+
+#
+# Networking Support
+#
+# UCLIBC_HAS_IPV6 is not set
+# UCLIBC_HAS_RPC is not set
+# UCLIBC_USE_NETLINK 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=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
+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 is not set
+# UCLIBC_HAS_FTW is not set
+UCLIBC_HAS_GLOB=y
+# UCLIBC_HAS_GNU_GLOB is not set
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="$(RUNTIME_PREFIX)lib"
+RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/"
+DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/"
+MULTILIB=""
+
+#
+# Security options
+#
+# 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=""
+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
diff --git a/packages/uclibc/uclibc-0.9.30.1/c7x0/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/c7x0/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/cm-x270/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/cm-x270/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/cm-x270/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.30.1/collie/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/collie/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/dht-walnut/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/dht-walnut/uClibc.machine
new file mode 100644
index 0000000000..2a38cfdd74
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/dht-walnut/uClibc.machine
@@ -0,0 +1,54 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 4 23:50:48 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 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 is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/home/stelios/proj/OE/tmp/uclibc/staging/powerpc-angstrom-linux-uclibc/usr/include"
+HAVE_DOT_CONFIG=y
diff --git a/packages/uclibc/uclibc-0.9.30.1/efika/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/efika/uClibc.machine
new file mode 100644
index 0000000000..e059257c09
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/ep93xx/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/ep93xx/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/gumstix-connex/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/gumstix-connex/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/gumstix-connex/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.30.1/gumstix-verdex/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/gumstix-verdex/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/gumstix-verdex/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.30.1/h2200/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/h2200/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/h3600/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/h3600/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/h3800/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/h3800/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/h3900/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/h3900/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/h4000/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/h4000/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/h5000/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/h5000/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/hx4700/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/hx4700/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/iwmmxt/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/iwmmxt/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/iwmmxt/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.30.1/ixp4xxbe/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/ixp4xxbe/uClibc.machine
new file mode 100644
index 0000000000..2d9f63e531
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/kilauea/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/kilauea/uClibc.machine
new file mode 100644
index 0000000000..effef11099
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/kilauea/uClibc.machine
@@ -0,0 +1,55 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 4 23:50:48 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 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 is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/home/stelios/proj/OE/tmp/uclibc/staging/powerpc-angstrom-linux-uclibc/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/linuxthreads-changes.patch b/packages/uclibc/uclibc-0.9.30.1/linuxthreads-changes.patch
new file mode 100644
index 0000000000..f6f32cdd29
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/linuxthreads-changes.patch
@@ -0,0 +1,291 @@
+Index: uClibc/libpthread/linuxthreads/descr.h
+===================================================================
+--- uClibc.orig/libpthread/linuxthreads/descr.h 2008-08-27 23:59:46.171809044 +0200
++++ uClibc/libpthread/linuxthreads/descr.h 2008-08-28 00:00:35.435134759 +0200
+@@ -123,9 +123,9 @@
+ union dtv *dtvp;
+ pthread_descr self; /* Pointer to this structure */
+ int multiple_threads;
+-# ifdef NEED_DL_SYSINFO
+ uintptr_t sysinfo;
+-# endif
++ uintptr_t stack_guard;
++ uintptr_t pointer_guard;
+ } data;
+ void *__padding[16];
+ } p_header;
+@@ -193,6 +193,13 @@
+ size_t p_alloca_cutoff; /* Maximum size which should be allocated
+ using alloca() instead of malloc(). */
+ /* New elements must be added at the end. */
++
++ /* This member must be last. */
++ char end_padding[];
++
++#define PTHREAD_STRUCT_END_PADDING \
++ (sizeof (struct _pthread_descr_struct) \
++ - offsetof (struct _pthread_descr_struct, end_padding))
+ } __attribute__ ((aligned(32))); /* We need to align the structure so that
+ doubles are aligned properly. This is 8
+ bytes on MIPS and 16 bytes on MIPS64.
+Index: uClibc/libpthread/linuxthreads/manager.c
+===================================================================
+--- uClibc.orig/libpthread/linuxthreads/manager.c 2008-08-27 23:59:54.185140485 +0200
++++ uClibc/libpthread/linuxthreads/manager.c 2008-08-28 00:00:35.435134759 +0200
+@@ -679,6 +679,17 @@
+ new_thread->p_inheritsched = attr ? attr->__inheritsched : 0;
+ new_thread->p_alloca_cutoff = stksize / 4 > __MAX_ALLOCA_CUTOFF
+ ? __MAX_ALLOCA_CUTOFF : stksize / 4;
++
++ /* Copy the stack guard canary. */
++#ifdef THREAD_COPY_STACK_GUARD
++ THREAD_COPY_STACK_GUARD (new_thread);
++#endif
++
++ /* Copy the pointer guard value. */
++#ifdef THREAD_COPY_POINTER_GUARD
++ THREAD_COPY_POINTER_GUARD (new_thread);
++#endif
++
+ /* Initialize the thread handle */
+ __pthread_init_lock(&__pthread_handles[sseg].h_lock);
+ __pthread_handles[sseg].h_descr = new_thread;
+@@ -742,15 +753,15 @@
+ pid = __clone2(pthread_start_thread_event,
+ (void **)new_thread_bottom,
+ (char *)stack_addr - new_thread_bottom,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
+ __pthread_sig_cancel, new_thread);
+ #elif _STACK_GROWS_UP
+ pid = __clone(pthread_start_thread_event, (void *) new_thread_bottom,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
+ __pthread_sig_cancel, new_thread);
+ #else
+ pid = __clone(pthread_start_thread_event, stack_addr,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
+ __pthread_sig_cancel, new_thread);
+ #endif
+ saved_errno = errno;
+@@ -783,15 +794,15 @@
+ pid = __clone2(pthread_start_thread,
+ (void **)new_thread_bottom,
+ (char *)stack_addr - new_thread_bottom,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
+ __pthread_sig_cancel, new_thread);
+ #elif _STACK_GROWS_UP
+ pid = __clone(pthread_start_thread, (void *) new_thread_bottom,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
+ __pthread_sig_cancel, new_thread);
+ #else
+ pid = __clone(pthread_start_thread, stack_addr,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM |
+ __pthread_sig_cancel, new_thread);
+ #endif /* !NEED_SEPARATE_REGISTER_STACK */
+ saved_errno = errno;
+@@ -892,10 +903,11 @@
+ #ifdef _STACK_GROWS_UP
+ # ifdef USE_TLS
+ size_t stacksize = guardaddr - th->p_stackaddr;
++ guardaddr = th->p_stackaddr;
+ # else
+ size_t stacksize = guardaddr - (char *)th;
+-# endif
+ guardaddr = (char *)th;
++# endif
+ #else
+ /* Guardaddr is always set, even if guardsize is 0. This allows
+ us to compute everything else. */
+Index: uClibc/libpthread/linuxthreads/pthread.c
+===================================================================
+--- uClibc.orig/libpthread/linuxthreads/pthread.c 2008-08-28 00:00:00.825141935 +0200
++++ uClibc/libpthread/linuxthreads/pthread.c 2008-08-28 00:00:35.438472147 +0200
+@@ -698,6 +698,16 @@
+ mgr = &__pthread_manager_thread;
+ #endif
+
++ /* Copy the stack guard canary. */
++#ifdef THREAD_COPY_STACK_GUARD
++ THREAD_COPY_STACK_GUARD (mgr);
++#endif
++
++ /* Copy the pointer guard value. */
++#ifdef THREAD_COPY_POINTER_GUARD
++ THREAD_COPY_POINTER_GUARD (mgr);
++#endif
++
+ __pthread_manager_request = manager_pipe[1]; /* writing end */
+ __pthread_manager_reader = manager_pipe[0]; /* reading end */
+
+@@ -738,17 +748,17 @@
+ pid = __clone2(__pthread_manager_event,
+ (void **) __pthread_manager_thread_bos,
+ THREAD_MANAGER_STACK_SIZE,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM,
+ mgr);
+ #elif _STACK_GROWS_UP
+ pid = __clone(__pthread_manager_event,
+ (void **) __pthread_manager_thread_bos,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM,
+ mgr);
+ #else
+ pid = __clone(__pthread_manager_event,
+ (void **) __pthread_manager_thread_tos,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM,
+ mgr);
+ #endif
+
+@@ -778,13 +788,13 @@
+ #ifdef NEED_SEPARATE_REGISTER_STACK
+ pid = __clone2(__pthread_manager, (void **) __pthread_manager_thread_bos,
+ THREAD_MANAGER_STACK_SIZE,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr);
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr);
+ #elif _STACK_GROWS_UP
+ pid = __clone(__pthread_manager, (void **) __pthread_manager_thread_bos,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr);
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr);
+ #else
+ pid = __clone(__pthread_manager, (void **) __pthread_manager_thread_tos,
+- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr);
++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr);
+ #endif
+ }
+ if (__builtin_expect (pid, 0) == -1) {
+@@ -971,6 +981,10 @@
+ struct pthread_request request;
+ pthread_descr self = thread_self();
+
++ /* Make sure we come back here after suspend(), in case we entered
++ from a signal handler. */
++ THREAD_SETMEM(self, p_signal_jmp, NULL);
++
+ request.req_thread = self;
+ request.req_kind = REQ_PROCESS_EXIT;
+ request.req_args.exit.code = retcode;
+@@ -1198,13 +1212,13 @@
+
+ void __pthread_restart_old(pthread_descr th)
+ {
+- if (atomic_increment(&th->p_resume_count) == -1)
++ if (pthread_atomic_increment(&th->p_resume_count) == -1)
+ kill(th->p_pid, __pthread_sig_restart);
+ }
+
+ void __pthread_suspend_old(pthread_descr self)
+ {
+- if (atomic_decrement(&self->p_resume_count) <= 0)
++ if (pthread_atomic_decrement(&self->p_resume_count) <= 0)
+ __pthread_wait_for_restart_signal(self);
+ }
+
+@@ -1215,7 +1229,7 @@
+ int was_signalled = 0;
+ sigjmp_buf jmpbuf;
+
+- if (atomic_decrement(&self->p_resume_count) == 0) {
++ if (pthread_atomic_decrement(&self->p_resume_count) == 0) {
+ /* Set up a longjmp handler for the restart signal, unblock
+ the signal and sleep. */
+
+@@ -1272,9 +1286,9 @@
+ being delivered. */
+
+ if (!was_signalled) {
+- if (atomic_increment(&self->p_resume_count) != -1) {
++ if (pthread_atomic_increment(&self->p_resume_count) != -1) {
+ __pthread_wait_for_restart_signal(self);
+- atomic_decrement(&self->p_resume_count); /* should be zero now! */
++ pthread_atomic_decrement(&self->p_resume_count); /* should be zero now! */
+ /* woke spontaneously and consumed restart signal */
+ return 1;
+ }
+Index: uClibc/libpthread/linuxthreads/specific.c
+===================================================================
+--- uClibc.orig/libpthread/linuxthreads/specific.c 2008-08-28 00:00:07.595139286 +0200
++++ uClibc/libpthread/linuxthreads/specific.c 2008-08-28 00:00:35.438472147 +0200
+@@ -104,13 +104,14 @@
+ that if the key is reallocated later by pthread_key_create, its
+ associated values will be NULL in all threads.
+
+- If no threads have been created yet, clear it just in the
+- current thread. */
++ If no threads have been created yet, or if we are exiting, clear
++ it just in the current thread. */
+
+ struct pthread_key_delete_helper_args args;
+ args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE;
+ args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE;
+- if (__pthread_manager_request != -1)
++ if (__pthread_manager_request != -1
++ && !(__builtin_expect (__pthread_exit_requested, 0)))
+ {
+ struct pthread_request request;
+
+@@ -203,8 +204,9 @@
+ __pthread_lock(THREAD_GETMEM(self, p_lock), self);
+ for (i = 0; i < PTHREAD_KEY_1STLEVEL_SIZE; i++) {
+ if (THREAD_GETMEM_NC(self, p_specific[i]) != NULL) {
+- free(THREAD_GETMEM_NC(self, p_specific[i]));
++ void *p = THREAD_GETMEM_NC(self, p_specific[i]);
+ THREAD_SETMEM_NC(self, p_specific[i], NULL);
++ free(p);
+ }
+ }
+ __pthread_unlock(THREAD_GETMEM(self, p_lock));
+Index: uClibc/libpthread/linuxthreads/spinlock.c
+===================================================================
+--- uClibc.orig/libpthread/linuxthreads/spinlock.c 2008-08-28 00:00:17.805140454 +0200
++++ uClibc/libpthread/linuxthreads/spinlock.c 2008-08-28 00:00:35.438472147 +0200
+@@ -637,8 +637,20 @@
+ #if defined HAS_COMPARE_AND_SWAP
+ wait_node_dequeue(pp_head, pp_max_prio, p_max_prio);
+ #endif
++
++ /* Release the spinlock before restarting. */
++#if defined TEST_FOR_COMPARE_AND_SWAP
++ if (!__pthread_has_cas)
++#endif
++#if !defined HAS_COMPARE_AND_SWAP || defined TEST_FOR_COMPARE_AND_SWAP
++ {
++ __pthread_release(&lock->__spinlock);
++ }
++#endif
++
+ restart(p_max_prio->thr);
+- break;
++
++ return;
+ }
+ }
+
+Index: uClibc/libpthread/linuxthreads/spinlock.h
+===================================================================
+--- uClibc.orig/libpthread/linuxthreads/spinlock.h 2008-08-28 00:00:24.768471655 +0200
++++ uClibc/libpthread/linuxthreads/spinlock.h 2008-08-28 00:02:42.971786951 +0200
+@@ -172,7 +172,7 @@
+
+ /* Operations on pthread_atomic, which is defined in internals.h */
+
+-static __inline__ long atomic_increment(struct pthread_atomic *pa)
++static __inline__ long pthread_atomic_increment(struct pthread_atomic *pa)
+ {
+ long oldval;
+
+@@ -184,7 +184,7 @@
+ }
+
+
+-static __inline__ long atomic_decrement(struct pthread_atomic *pa)
++static __inline__ long pthread_atomic_decrement(struct pthread_atomic *pa)
+ {
+ long oldval;
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/mipsel/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/mipsel/uClibc.machine
new file mode 100644
index 0000000000..07c45f7213
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/mipsel/uClibc.machine
@@ -0,0 +1,63 @@
+#
+# Automatically generated make config: don't edit
+# Wed Jul 9 13:37:36 2008
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_avr32 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=y
+# 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_xtensa is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="mips"
+FORCE_OPTIONS_FOR_ARCH=y
+ARCH_CFLAGS="-mno-split-addresses"
+CONFIG_MIPS_O32_ABI=y
+# CONFIG_MIPS_N32_ABI is not set
+# CONFIG_MIPS_N64_ABI is not set
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+# 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
+# DO_C99_MATH is not set
+# UCLIBC_HAS_FENV is not set
+KERNEL_HEADERS="/home/kraj/work/cross/mips-none-linux-uclibc/sysroot/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/mpc8313e-rdb/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/mpc8313e-rdb/uClibc.machine
new file mode 100644
index 0000000000..3ad8ff0da1
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/mpc8313e-rdb/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="will be mangled in bitbake"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/mpc8315e-rdb/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/mpc8315e-rdb/uClibc.machine
new file mode 100644
index 0000000000..3ad8ff0da1
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/mpc8315e-rdb/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="will be mangled in bitbake"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/mpc8323e-rdb/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/mpc8323e-rdb/uClibc.machine
new file mode 100644
index 0000000000..620676918b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/mpc8323e-rdb/uClibc.machine
@@ -0,0 +1,54 @@
+#
+# 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 is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="to be mangled by uclibc bitbake"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/n1200/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/n1200/uClibc.machine
new file mode 100644
index 0000000000..23ca904520
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/n1200/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="/stuff/build/tmp/cross/powerpc-angstrom-linux-uclibc/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/om-gta01/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/om-gta01/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/om-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.30.1/palmld/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/palmld/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/palmz31/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/palmz31/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/palmz72/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/palmz72/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/poodle/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/poodle/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/pthread_atfork.patch b/packages/uclibc/uclibc-0.9.30.1/pthread_atfork.patch
new file mode 100644
index 0000000000..92accc2a1a
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/pthread_atfork.patch
@@ -0,0 +1,42 @@
+Index: uClibc-0.9.30/libpthread/linuxthreads/Makefile.in
+===================================================================
+--- uClibc-0.9.30.orig/libpthread/linuxthreads/Makefile.in 2009-01-11 01:09:27.008515954 +0100
++++ uClibc-0.9.30/libpthread/linuxthreads/Makefile.in 2009-01-11 01:09:35.295181636 +0100
+@@ -45,7 +45,7 @@
+ pthread_SRC := \
+ attr barrier cancel condvar errno events join pthread \
+ lockfile manager mutex pt-machine ptcleanup \
+- ptclock_gettime ptclock_settime ptfork pthandles \
++ ptclock_gettime ptclock_settime ptfork pthandles pthread_atfork \
+ pthread_setegid pthread_seteuid pthread_setgid pthread_setregid \
+ pthread_setresgid pthread_setresuid pthread_setreuid pthread_setuid \
+ rwlock semaphore sighandler signals specific spinlock
+Index: uClibc-0.9.30/libpthread/linuxthreads/pthread_atfork.c
+===================================================================
+--- uClibc-0.9.30.orig/libpthread/linuxthreads/pthread_atfork.c 2009-01-11 01:09:44.931848926 +0100
++++ uClibc-0.9.30/libpthread/linuxthreads/pthread_atfork.c 2009-01-11 01:12:49.926539743 +0100
+@@ -43,12 +43,8 @@
+
+ /* Hide the symbol so that no definition but the one locally in the
+ executable or DSO is used. */
+-int
+-#ifndef __pthread_atfork
+-/* Don't mark the compatibility function as hidden. */
+-attribute_hidden
+-#endif
+-__pthread_atfork (prepare, parent, child)
++
++int attribute_hidden __pthread_atfork (prepare, parent, child)
+ void (*prepare) (void);
+ void (*parent) (void);
+ void (*child) (void);
+@@ -56,8 +52,5 @@
+ return __register_atfork (prepare, parent, child,
+ &__dso_handle == NULL ? NULL : __dso_handle);
+ }
+-#ifndef __pthread_atfork
+-extern int pthread_atfork (void (*prepare) (void), void (*parent) (void),
+- void (*child) (void)) attribute_hidden;
++
+ strong_alias (__pthread_atfork, pthread_atfork)
+-#endif
diff --git a/packages/uclibc/uclibc-0.9.30.1/qemux86/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/qemux86/uClibc.machine
new file mode 100644
index 0000000000..44fec169c8
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/qemux86/uClibc.machine
@@ -0,0 +1,68 @@
+#
+# Automatically generated make config: don't edit
+# Fri Nov 23 15:49:33 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=y
+# 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="i386"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_GENERIC_386=y
+# 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
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_LITTLE_ENDIAN=y
+
+#
+# Using Little Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.30.1/sequoia/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/sequoia/uClibc.machine
new file mode 100644
index 0000000000..e059257c09
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/sequoia/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.30.1/simpad/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/simpad/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/spitz/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/spitz/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/titan/uClibc.machine b/packages/uclibc/uclibc-0.9.30.1/titan/uClibc.machine
new file mode 100644
index 0000000000..75c5328056
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/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.30.1/uClibc.config b/packages/uclibc/uclibc-0.9.30.1/uClibc.config
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/uClibc.config
diff --git a/packages/uclibc/uclibc-0.9.30.1/uClibc.distro b/packages/uclibc/uclibc-0.9.30.1/uClibc.distro
new file mode 100644
index 0000000000..b072b2fd37
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/uClibc.distro
@@ -0,0 +1,147 @@
+#
+# 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
+LDSO_GNU_HASH_SUPPORT=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+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=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"
+
+#
+# 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=y
+
+#
+# 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=n
+# 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-0.9.30.1/uClibc.machine.armv4t b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.armv4t
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.armv4t
@@ -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.30.1/uClibc.machine.armv5te b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.armv5te
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.armv5te
@@ -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.30.1/uClibc.machine.iwmmxt b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.iwmmxt
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.iwmmxt
@@ -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.30.1/uClibc.machine.strongarm b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.strongarm
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.30.1/uClibc.machine.strongarm
@@ -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-initial_0.9.30.1.bb b/packages/uclibc/uclibc-initial_0.9.30.1.bb
new file mode 100644
index 0000000000..c56e5fb2f5
--- /dev/null
+++ b/packages/uclibc/uclibc-initial_0.9.30.1.bb
@@ -0,0 +1,36 @@
+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 ncurses-native virtual/${TARGET_PREFIX}gcc-initial"
+PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
+PACKAGES = ""
+
+do_stage() {
+ # Install initial headers into the cross dir
+ make PREFIX= DEVEL_PREFIX=${UCLIBC_STAGE_PREFIX}/ \
+ RUNTIME_PREFIX=${UCLIBC_STAGE_PREFIX}/ \
+ pregen install_dev
+ make PREFIX= DEVEL_PREFIX=${UCLIBC_STAGE_PREFIX}/ \
+ RUNTIME_PREFIX=${UCLIBC_STAGE_PREFIX}/ \
+ lib/crt1.o lib/crti.o lib/crtn.o
+
+ install -d ${CROSS_DIR}/${TARGET_SYS}
+ ln -sf include ${CROSS_DIR}/${TARGET_SYS}/sys-include
+
+ # This conflicts with the c++ version of this header
+ rm -f ${UCLIBC_STAGE_PREFIX}/include/bits/atomicity.h
+ install -m 644 lib/crt[1in].o ${UCLIBC_STAGE_PREFIX}/lib
+ ${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
+ -o ${UCLIBC_STAGE_PREFIX}/lib/libc.so
+
+}
+
+do_install() {
+ :
+}
+
+do_compile () {
+ :
+}
diff --git a/packages/uclibc/uclibc_0.9.30.1.bb b/packages/uclibc/uclibc_0.9.30.1.bb
new file mode 100644
index 0000000000..ca0147642c
--- /dev/null
+++ b/packages/uclibc/uclibc_0.9.30.1.bb
@@ -0,0 +1,33 @@
+# 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.30.1"
+PR = "r0"
+DEFAULT_PREFERENCE = "1"
+
+require uclibc.inc
+
+PROVIDES += "virtual/${TARGET_PREFIX}libc-for-gcc"
+
+SRC_URI += "file://uClibc.machine file://uClibc.distro \
+ file://arm-linuxthreads.patch;patch=1 \
+ file://linuxthreads-changes.patch;patch=1 \
+ file://pthread_atfork.patch;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 = "${STAGING_DIR_HOST}/${exec_prefix}"
+
+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/boc01/mount.sh b/packages/udev/files/boc01/mount.sh
deleted file mode 100644
index 07d2fd2b58..0000000000
--- a/packages/udev/files/boc01/mount.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/sh
-#
-# Called from udev
-# Attemp to mount any added block devices
-# and remove any removed devices
-#
-
-MOUNT="/bin/mount"
-PMOUNT="/usr/bin/pmount"
-UMOUNT="/bin/umount"
-name="`basename "$DEVNAME"`"
-
-for line in `cat /etc/udev/mount.blacklist | grep -v ^#`
-do
- if ( echo "$DEVNAME" | grep -q "$line" )
- then
- logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring"
- exit 0
- fi
-done
-
-automount() {
- ! test -d "/media/$name" && mkdir -p "/media/$name"
-
- if ! $MOUNT -t auto -o ro $DEVNAME "/media/$name"
- then
- #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/media/$name\" failed!"
- rm_dir "/media/$name"
- else
- logger "mount.sh/automount" "Auto-mount of [/media/$name] successful"
- touch "/tmp/.automount-$name"
- boc-script scripts:photos.js "/media/$name"
- fi
-}
-
-rm_dir() {
- # We do not want to rm -r populated directories
- if test "`find "$1" | wc -l | tr -d " "`" -lt 2 -a -d "$1"
- then
- ! test -z "$1" && rm -r "$1"
- else
- logger "mount.sh/automount" "Not removing non-empty directory [$1]"
- fi
-}
-
-if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then
- if [ -x "$PMOUNT" ]; then
- $PMOUNT $DEVNAME 2> /dev/null
- elif [ -x $MOUNT ]; then
- $MOUNT $DEVNAME 2> /dev/null
- fi
-
- # If the device isn't mounted at this point, it isn't configured in fstab
- # 20061107: Small correction: The rootfs partition may be called just "rootfs" and not by
- # its true device name so this would break. If the rootfs is mounted on two places
- # during boot, it confuses the heck out of fsck. So Im auto-adding the root-partition
- # to /etc/udev/mount.blacklist via postinst
-
- cat /proc/mounts | awk '{print $1}' | grep -q "^$DEVNAME$" || automount
-
-fi
-
-
-
-if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
- for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
- do
- $UMOUNT $mnt
- done
-
- # Remove empty directories from auto-mounter
- test -e "/tmp/.automount-$name" && rm_dir "/media/$name"
-fi
diff --git a/packages/udev/files/permissions.rules b/packages/udev/files/permissions.rules
index 86d771276b..efbe568a2b 100644
--- a/packages/udev/files/permissions.rules
+++ b/packages/udev/files/permissions.rules
@@ -11,7 +11,6 @@ BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
BUS=="scsi", SYSFS{type}=="1", GROUP="tape"
BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom"
-BUS=="scsi", SYSFS{type}=="6", GROUP="scanner"
# USB devices
BUS=="usb", KERNEL=="legousbtower*", MODE="0666"
@@ -50,7 +49,6 @@ KERNEL=="inotify", MODE="0666"
KERNEL=="sgi_fetchop", MODE="0666"
KERNEL=="sonypi", MODE="0666"
KERNEL=="agpgart", GROUP="video"
-KERNEL=="nvram", GROUP="nvram"
KERNEL=="rtc", MODE="0660", GROUP="audio"
KERNEL=="cdemu[0-9]*", GROUP="cdrom"
diff --git a/packages/udev/udev-092/permissions.rules b/packages/udev/udev-092/permissions.rules
index 8da35c3090..99e03b1036 100644
--- a/packages/udev/udev-092/permissions.rules
+++ b/packages/udev/udev-092/permissions.rules
@@ -21,9 +21,7 @@ BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
BUS=="scsi", SYSFS{type}=="1", GROUP="tape"
-BUS=="scsi", SYSFS{type}=="3", SYSFS{vendor}=="HP", GROUP="scanner"
BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom"
-BUS=="scsi", SYSFS{type}=="6", GROUP="scanner"
# USB devices
BUS=="usb", KERNEL=="legousbtower*", MODE="0666"
@@ -70,18 +68,12 @@ KERNEL=="inotify", MODE="0666"
KERNEL=="sgi_fetchop", MODE="0666"
KERNEL=="sonypi", MODE="0666"
KERNEL=="agpgart", GROUP="video"
-KERNEL=="nvram", GROUP="nvram"
KERNEL=="rtc", GROUP="audio"
-KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
-KERNEL=="fuse", GROUP="fuse"
KERNEL=="cdemu[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd", MODE="0644"
-KERNEL=="uverbs*", GROUP="rdma"
-KERNEL=="ucm*", GROUP="rdma"
-
# printers and parallel devices
SUBSYSTEM=="printer", GROUP="lp"
SUBSYSTEM=="ppdev", GROUP="lp"
diff --git a/packages/udev/udev-097/permissions.rules b/packages/udev/udev-097/permissions.rules
index 8da35c3090..99e03b1036 100644
--- a/packages/udev/udev-097/permissions.rules
+++ b/packages/udev/udev-097/permissions.rules
@@ -21,9 +21,7 @@ BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
BUS=="scsi", SYSFS{type}=="1", GROUP="tape"
-BUS=="scsi", SYSFS{type}=="3", SYSFS{vendor}=="HP", GROUP="scanner"
BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom"
-BUS=="scsi", SYSFS{type}=="6", GROUP="scanner"
# USB devices
BUS=="usb", KERNEL=="legousbtower*", MODE="0666"
@@ -70,18 +68,12 @@ KERNEL=="inotify", MODE="0666"
KERNEL=="sgi_fetchop", MODE="0666"
KERNEL=="sonypi", MODE="0666"
KERNEL=="agpgart", GROUP="video"
-KERNEL=="nvram", GROUP="nvram"
KERNEL=="rtc", GROUP="audio"
-KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
-KERNEL=="fuse", GROUP="fuse"
KERNEL=="cdemu[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd", MODE="0644"
-KERNEL=="uverbs*", GROUP="rdma"
-KERNEL=="ucm*", GROUP="rdma"
-
# printers and parallel devices
SUBSYSTEM=="printer", GROUP="lp"
SUBSYSTEM=="ppdev", GROUP="lp"
diff --git a/packages/udev/udev-100/permissions.rules b/packages/udev/udev-100/permissions.rules
index 8da35c3090..99e03b1036 100644
--- a/packages/udev/udev-100/permissions.rules
+++ b/packages/udev/udev-100/permissions.rules
@@ -21,9 +21,7 @@ BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
BUS=="scsi", SYSFS{type}=="1", GROUP="tape"
-BUS=="scsi", SYSFS{type}=="3", SYSFS{vendor}=="HP", GROUP="scanner"
BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom"
-BUS=="scsi", SYSFS{type}=="6", GROUP="scanner"
# USB devices
BUS=="usb", KERNEL=="legousbtower*", MODE="0666"
@@ -70,18 +68,12 @@ KERNEL=="inotify", MODE="0666"
KERNEL=="sgi_fetchop", MODE="0666"
KERNEL=="sonypi", MODE="0666"
KERNEL=="agpgart", GROUP="video"
-KERNEL=="nvram", GROUP="nvram"
KERNEL=="rtc", GROUP="audio"
-KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
-KERNEL=="fuse", GROUP="fuse"
KERNEL=="cdemu[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd", MODE="0644"
-KERNEL=="uverbs*", GROUP="rdma"
-KERNEL=="ucm*", GROUP="rdma"
-
# printers and parallel devices
SUBSYSTEM=="printer", GROUP="lp"
SUBSYSTEM=="ppdev", GROUP="lp"
diff --git a/packages/udev/udev-124/init b/packages/udev/udev-124/init
index b78a07b20f..9e11f08989 100644
--- a/packages/udev/udev-124/init
+++ b/packages/udev/udev-124/init
@@ -53,7 +53,7 @@ kill_udevd > "/dev/null" 2>&1
else
/sbin/udevadm trigger
/sbin/udevadm settle
- (cd /; tar cf /etc/dev.tar /dev)
+ (cd /; tar cf /etc/dev.tar dev)
fi
echo
diff --git a/packages/udev/udev-124/permissions.rules b/packages/udev/udev-124/permissions.rules
index 205b733292..940d163047 100644
--- a/packages/udev/udev-124/permissions.rules
+++ b/packages/udev/udev-124/permissions.rules
@@ -32,12 +32,8 @@ KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
SUBSYSTEMS=="scsi", ATTRS{type}=="1", GROUP="tape"
-SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="HP", GROUP="scanner"
-SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="Epson", GROUP="scanner"
-SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="EPSON", GROUP="scanner"
SUBSYSTEMS=="scsi", ATTRS{type}=="4", GROUP="cdrom"
SUBSYSTEMS=="scsi", ATTRS{type}=="5", GROUP="cdrom"
-SUBSYSTEMS=="scsi", ATTRS{type}=="6", GROUP="scanner"
SUBSYSTEMS=="scsi", ATTRS{type}=="8", GROUP="tape"
# USB devices
@@ -86,22 +82,14 @@ KERNEL=="inotify", MODE="0666"
KERNEL=="sgi_fetchop", MODE="0666"
KERNEL=="sonypi", MODE="0666"
KERNEL=="agpgart", GROUP="video"
-KERNEL=="nvram", GROUP="nvram"
KERNEL=="rtc|rtc[0-9]*", GROUP="audio"
-KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
-KERNEL=="fuse", GROUP="fuse"
KERNEL=="kqemu", MODE="0666"
-KERNEL=="kvm", GROUP="kvm"
KERNEL=="tun", MODE="0666",
KERNEL=="cdemu[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
KERNEL=="pktcdvd", MODE="0644"
-KERNEL=="uverbs*", GROUP="rdma"
-KERNEL=="ucm*", GROUP="rdma"
-KERNEL=="rdma_ucm", GROUP="rdma"
-
# printers and parallel devices
SUBSYSTEM=="printer", GROUP="lp"
SUBSYSTEM=="ppdev", GROUP="lp"
diff --git a/packages/udev/udev_092.bb b/packages/udev/udev_092.bb
index 37b95ca96a..d9f5cbaa68 100644
--- a/packages/udev/udev_092.bb
+++ b/packages/udev/udev_092.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r23"
+PR = "r24"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
diff --git a/packages/udev/udev_097.bb b/packages/udev/udev_097.bb
index e9a26940b3..a3dfa51a21 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 = "r12"
+PR = "r13"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
diff --git a/packages/udev/udev_100.bb b/packages/udev/udev_100.bb
index b0958c66b1..ef08aa4636 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 = "r14"
+PR = "r15"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
diff --git a/packages/udev/udev_124.bb b/packages/udev/udev_124.bb
index 77e414ee11..76edb2fa6f 100644
--- a/packages/udev/udev_124.bb
+++ b/packages/udev/udev_124.bb
@@ -2,8 +2,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
/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_${PN} = "hotplug"
-
-PR = "r12"
+PR = "r14"
SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -19,8 +18,6 @@ PACKAGE_ARCH_h2200 = "h2200"
require udev.inc
-DEFAULT_PREFERENCE = "-999"
-
INITSCRIPT_PARAMS = "start 03 S ."
FILES_${PN} += "${base_libdir}/udev/*"
diff --git a/packages/update-alternatives/update-alternatives-dpkg-1.13.25/paths.patch b/packages/update-alternatives/update-alternatives-dpkg-1.13.25/paths.patch
new file mode 100644
index 0000000000..a23bf9a99d
--- /dev/null
+++ b/packages/update-alternatives/update-alternatives-dpkg-1.13.25/paths.patch
@@ -0,0 +1,26 @@
+diff -ruN dpkg-1.13.22.orig/scripts/update-alternatives.pl dpkg-1.13.22/scripts/update-alternatives.pl
+--- dpkg-1.13.22.orig/scripts/update-alternatives.pl 2006-06-21 01:46:12.000000000 -0300
++++ dpkg-1.13.22/scripts/update-alternatives.pl 2007-08-02 19:36:47.000000000 -0300
+@@ -1,7 +1,7 @@
+ #!/usr/bin/perl --
+
+ $admindir= "/var/lib/dpkg"; # This line modified by Makefile
+-$dpkglibdir= "../utils"; # This line modified by Makefile
++$dpkglibdir= "/usr/lib/dpkg"; # This line modified by Makefile
+ $version= '0.93.80'; # This line modified by Makefile
+ push (@INC, $dpkglibdir);
+ require 'dpkg-gettext.pl';
+@@ -129,6 +129,12 @@
+ &checkmanymodes;
+ @ARGV >= 4 || &badusage(_g("--install needs <link> <name> <path> <priority>"));
+ ($alink,$name,$apath,$apriority,@ARGV) = @ARGV;
++ if (! -e $apath) {
++ $apath = substr($alink,0,rindex($alink,"/")+1).$apath;
++ }
++ if (! -e $apath) {
++ &quit(sprintf(_g("Error: file not found: %s"), $apath));
++ }
+ $apriority =~ m/^[-+]?\d+/ || &badusage(_g("priority must be an integer"));
+ $mode= 'install';
+ } elsif (m/^--(remove|set)$/) {
+
diff --git a/packages/update-alternatives/update-alternatives-dpkg-native_1.13.25.bb b/packages/update-alternatives/update-alternatives-dpkg-native_1.13.25.bb
new file mode 100644
index 0000000000..d0af4eac7b
--- /dev/null
+++ b/packages/update-alternatives/update-alternatives-dpkg-native_1.13.25.bb
@@ -0,0 +1,14 @@
+require update-alternatives-dpkg.inc
+inherit native
+
+PROVIDES += "virtual/update-alternatives-native"
+DEPENDS = "perl-native"
+DEFAULT_PREFERENCE = "-1"
+
+do_stage () {
+ install -d ${sbindir} \
+ ${localstatedir}/dpkg/alternatives \
+ ${sysconfdir}/alternatives
+
+ install -m 0755 scripts/update-alternatives ${sbindir}/update-alternatives
+}
diff --git a/packages/update-alternatives/update-alternatives-dpkg_1.13.25.bb b/packages/update-alternatives/update-alternatives-dpkg_1.13.25.bb
new file mode 100644
index 0000000000..a07d5e36d4
--- /dev/null
+++ b/packages/update-alternatives/update-alternatives-dpkg_1.13.25.bb
@@ -0,0 +1,12 @@
+require update-alternatives-dpkg.inc
+
+RPROVIDES_${PN} = "update-alternatives"
+RDEPENDS_${PN} = "perl dpkg"
+
+do_install () {
+ install -d ${D}${sbindir} \
+ ${D}${localstatedir}/dpkg/alternatives \
+ ${D}${sysconfdir}/alternatives
+
+ install -m 0755 scripts/update-alternatives ${D}${sbindir}/update-alternatives
+}
diff --git a/packages/util-linux-ng/util-linux-ng-2.14/util-linux-ng-replace-siginterrupt.patch b/packages/util-linux-ng/util-linux-ng-2.14/util-linux-ng-replace-siginterrupt.patch
new file mode 100644
index 0000000000..4b5eb73760
--- /dev/null
+++ b/packages/util-linux-ng/util-linux-ng-2.14/util-linux-ng-replace-siginterrupt.patch
@@ -0,0 +1,23 @@
+Index: util-linux-ng-2.14/login-utils/login.c
+===================================================================
+--- util-linux-ng-2.14.orig/login-utils/login.c 2008-05-28 16:01:02.000000000 -0700
++++ util-linux-ng-2.14/login-utils/login.c 2009-03-04 18:31:42.000000000 -0800
+@@ -358,6 +358,7 @@
+ char *childArgv[10];
+ char *buff;
+ int childArgc = 0;
++ struct sigaction act;
+ #ifdef HAVE_SECURITY_PAM_MISC_H
+ int retcode;
+ pam_handle_t *pamh = NULL;
+@@ -373,7 +374,9 @@
+ pid = getpid();
+
+ signal(SIGALRM, timedout);
+- siginterrupt(SIGALRM,1); /* we have to interrupt syscalls like ioclt() */
++ (void) sigaction(SIGALRM, NULL, &act);
++ act.sa_flags &= ~SA_RESTART;
++ sigaction(SIGALRM, &act, NULL);
+ alarm((unsigned int)timeout);
+ signal(SIGQUIT, SIG_IGN);
+ signal(SIGINT, SIG_IGN);
diff --git a/packages/util-linux-ng/util-linux-ng_2.14.bb b/packages/util-linux-ng/util-linux-ng_2.14.bb
index 1223aa72e8..587eb97120 100644
--- a/packages/util-linux-ng/util-linux-ng_2.14.bb
+++ b/packages/util-linux-ng/util-linux-ng_2.14.bb
@@ -1,9 +1,10 @@
require util-linux-ng.inc
-PR = "r3"
+PR = "r4"
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/util-linux-ng-2.14', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
SRC_URI += "file://util-linux-ng-uclibc-versionsort.patch;patch=1 \
+ file://util-linux-ng-replace-siginterrupt.patch;patch=1 \
"
LDFLAGS_append_linux-uclibc = " -lintl"
LDFLAGS_append_linux-uclibcgnueabi = " -lintl "
diff --git a/packages/v4l2apps/libv4l_0.5.7.bb b/packages/v4l2apps/libv4l_0.5.8.bb
index a53c52f223..a53c52f223 100644
--- a/packages/v4l2apps/libv4l_0.5.7.bb
+++ b/packages/v4l2apps/libv4l_0.5.8.bb
diff --git a/packages/v86d/v86d_0.1.8.bb b/packages/v86d/v86d_0.1.8.bb
index bb91e386a1..2601c64abe 100644
--- a/packages/v86d/v86d_0.1.8.bb
+++ b/packages/v86d/v86d_0.1.8.bb
@@ -8,7 +8,7 @@ PR = "r0"
RRECOMMENDS_${PN} = "kernel-module-uvesafb"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-COMPATIBLE_MACHINE = "(qemux86|bootcdx86|i586-generic)"
+COMPATIBLE_HOST = 'i.86.*-linux'
INITSCRIPT_NAME = "fbsetup"
INITSCRIPT_PARAMS = "start 0 S ."
diff --git a/packages/vagalume/vagalume_0.7.bb b/packages/vagalume/vagalume_0.7.bb
index bb7985337c..f541dcdbb3 100644
--- a/packages/vagalume/vagalume_0.7.bb
+++ b/packages/vagalume/vagalume_0.7.bb
@@ -3,6 +3,7 @@ AUTHOR = "agarcia@igalia.com"
HOMEPAGE = "http://people.igalia.com/berto/"
SECTION = "x11"
DEPENDS = "gtk+ gstreamer"
+RRECOMMENDS = "dbus-x11"
PR = "r0"
SRC_URI = "\
diff --git a/packages/vala-terminal/vala-terminal_git.bb b/packages/vala-terminal/vala-terminal_git.bb
index 00b92de07d..5bc4c79cb2 100644
--- a/packages/vala-terminal/vala-terminal_git.bb
+++ b/packages/vala-terminal/vala-terminal_git.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "A lightweight Terminal Emulator based on libvte, written in Vala."
SECTION = "x11/applications"
DEPENDS = "vala-native vte"
-PV = "1.0.0.0+gitr${SRCREV}"
-PR = "r1"
+PV = "1.1.1+gitr${SRCREV}"
+PR = "r0"
inherit autotools
diff --git a/packages/vala/files/static-dbus-methods.patch b/packages/vala/files/static-dbus-methods.patch
new file mode 100644
index 0000000000..7bf4144860
--- /dev/null
+++ b/packages/vala/files/static-dbus-methods.patch
@@ -0,0 +1,26 @@
+From: Frederik Sdun <frederik.sdun@googlemail.com>
+Hi,
+
+I figured out that vala generates wrong code on static methods. It tries
+to add a user_data pointer, but then the C function has no void*
+user_data.
+
+I appended a diff which fixes the problem for me.
+
+Regards, Frederik
+
+Index: vala/gobject/valadbusclientmodule.vala
+===================================================================
+--- vala/gobject/valadbusclientmodule.vala (Revision 2430)
++++ vala/gobject/valadbusclientmodule.vala (Arbeitskopie)
+@@ -133,7 +133,9 @@
+ cend_call.add_argument (new CCodeIdentifier ("call"));
+ cend_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("error")));
+ var creply_call = new CCodeFunctionCall ((CCodeExpression) callback.ccodenode);
+- creply_call.add_argument (new CCodeIdentifier ("user_data"));
++ if( reply_method.binding != MemberBinding.STATIC ) {
++ creply_call.add_argument (new CCodeIdentifier ("user_data"));
++ }
+ int param_count = reply_method.get_parameters ().size;
+ int i = 0;
+ foreach (FormalParameter param in reply_method.get_parameters ()) {
diff --git a/packages/vala/vala-native_0.5.6.bb b/packages/vala/vala-native_0.5.6.bb
deleted file mode 100644
index 8feab501b4..0000000000
--- a/packages/vala/vala-native_0.5.6.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require vala_${PV}.bb
-PR = "r0"
-
-inherit native
-DEPENDS = "glib-2.0-native"
diff --git a/packages/vala/vala-native_0.5.7.bb b/packages/vala/vala-native_0.5.7.bb
new file mode 100644
index 0000000000..735c93f3f6
--- /dev/null
+++ b/packages/vala/vala-native_0.5.7.bb
@@ -0,0 +1,10 @@
+require vala_${PV}.bb
+
+inherit native
+DEPENDS = "glib-2.0-native"
+
+# work around timestamp problem in tarball
+do_compile_prepend() {
+ touch gobject/gobject.vala.stamp
+}
+
diff --git a/packages/vala/vala-native_git.bb b/packages/vala/vala-native_git.bb
new file mode 100644
index 0000000000..b33dbc28ab
--- /dev/null
+++ b/packages/vala/vala-native_git.bb
@@ -0,0 +1,14 @@
+require vala_0.5.7.bb
+# vala from git always needs the latest released version to compile itself
+DEPENDS = "vala-native"
+
+SRCREV = "633493367757a8e5f663c69c975bf525ab8a6d53"
+PV := "0.5.7+0.5.8pre01-git${SRCREV}"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${GNOME_GIT}/vala;protocol=git;branch=master"
+S = "${WORKDIR}/git"
+
+inherit native
+DEPENDS = "glib-2.0-native"
diff --git a/packages/vala/vala.inc b/packages/vala/vala.inc
index efe2900e28..f5ea1ee520 100644
--- a/packages/vala/vala.inc
+++ b/packages/vala/vala.inc
@@ -7,15 +7,14 @@ LICENSE = "LGPL"
MAJV = "${@bb.data.getVar('PV',d,1)[:3]}"
-SRC_URI = "http://download.gnome.org/sources/vala/${MAJV}/vala-${PV}.tar.bz2"
+SRC_URI = "\
+ http://download.gnome.org/sources/vala/${MAJV}/vala-${PV}.tar.bz2 \
+ file://static-dbus-methods.patch;patch=1 \
+"
S = "${WORKDIR}/vala-${PV}"
-inherit autotools lib_package
+inherit autotools autotools_stage lib_package
EXTRA_OECONF = "--enable-vapigen"
-do_stage() {
- autotools_stage_all
-}
-
FILES_${PN}-doc += ${datadir}/devhelp
diff --git a/packages/vala/vala_0.5.6.bb b/packages/vala/vala_0.5.6.bb
deleted file mode 100644
index 8775f1a407..0000000000
--- a/packages/vala/vala_0.5.6.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require vala.inc
-PR = "r0"
diff --git a/packages/vala/vala_0.5.7.bb b/packages/vala/vala_0.5.7.bb
new file mode 100644
index 0000000000..7b2b4e293c
--- /dev/null
+++ b/packages/vala/vala_0.5.7.bb
@@ -0,0 +1,2 @@
+require vala.inc
+PR = "r2"
diff --git a/packages/vblade/files/cross.patch b/packages/vblade/files/cross.patch
new file mode 100644
index 0000000000..117f8c6578
--- /dev/null
+++ b/packages/vblade/files/cross.patch
@@ -0,0 +1,12 @@
+diff -urN vblade-19.old//makefile vblade-19//makefile
+--- vblade-19.old//makefile 2008-10-08 22:07:40.000000000 +0100
++++ vblade-19//makefile 2008-11-18 19:07:51.700365029 +0000
+@@ -9,8 +9,6 @@
+ mandir = ${sharedir}/man
+
+ O=aoe.o bpf.o ${PLATFORM}.o ata.o
+-CFLAGS += -Wall -g -O2
+-CC = gcc
+
+ vblade: $O
+ ${CC} -o vblade $O
diff --git a/packages/vblade/vblade_19.bb b/packages/vblade/vblade_19.bb
new file mode 100644
index 0000000000..55731840ed
--- /dev/null
+++ b/packages/vblade/vblade_19.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Virtual EtherDrive blade AoE target"
+SECTION = "console/network"
+PR = "r1"
+LICENSE = "GPL"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/aoetools/${PN}-${PV}.tgz \
+ file://cross.patch;patch=1"
+
+inherit autotools
+
+do_install() {
+ install -D -m 0755 ${S}/vblade ${D}/${sbindir}/vblade
+ install -D -m 0755 ${S}/vbladed ${D}/${sbindir}/vbladed
+ install -D -m 0644 ${S}/vblade.8 ${D}/${mandir}/man8/vblade.8
+}
diff --git a/packages/vlc/libdvdcss_1.2.10.bb b/packages/vlc/libdvdcss_1.2.10.bb
index ca471c2f4e..f6862d3dd3 100644
--- a/packages/vlc/libdvdcss_1.2.10.bb
+++ b/packages/vlc/libdvdcss_1.2.10.bb
@@ -1,10 +1,14 @@
DESCRIPTION = "libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption."
LICENSE = "GPLv2"
+PR = "r1"
+
SRC_URI = "http://download.videolan.org/pub/libdvdcss/${PV}/libdvdcss-${PV}.tar.bz2"
inherit autotools
+EXTRA_OECONF = " --disable-doc "
+
AUTOTOOLS_STAGE_PKGCONFIG = "1"
do_stage() {
autotools_stage_all
diff --git a/packages/vlc/vlc.inc b/packages/vlc/vlc.inc
index 30c22f800d..511d22675e 100644
--- a/packages/vlc/vlc.inc
+++ b/packages/vlc/vlc.inc
@@ -30,6 +30,7 @@ EXTRA_OECONF = "\
--enable-hal \
--without-contrib \
--disable-opengl --disable-glx \
+ --enable-realrtsp \
ac_cv_path_MOC=${STAGING_BINDIR_NATIVE}/moc4 \
ac_cv_path_RCC=${STAGING_BINDIR_NATIVE}/rcc4 \
ac_cv_path_UIC=${STAGING_BINDIR_NATIVE}/uic4 \
diff --git a/packages/vlc/vlc_0.9.8a.bb b/packages/vlc/vlc_0.9.8a.bb
index f98e909926..6127579b67 100644
--- a/packages/vlc/vlc_0.9.8a.bb
+++ b/packages/vlc/vlc_0.9.8a.bb
@@ -5,7 +5,7 @@
require vlc.inc
-PR = "r2"
+PR = "r3"
# ffmpeg from git (library version => 52) is required
# libtool-native must be >= 2.2.4
diff --git a/packages/vte/files/vte.desktop.in b/packages/vte/files/vte.desktop.in
new file mode 100644
index 0000000000..ef2bf17efc
--- /dev/null
+++ b/packages/vte/files/vte.desktop.in
@@ -0,0 +1,76 @@
+[Desktop Entry]
+TryExec=vte
+Exec=vte
+Icon=terminal
+Type=Application
+Categories=GTK;Utility;TerminalEmulator;GPE;
+StartupNotify=true
+Name=VTE Terminal
+Name[af]=Vte-terminaal
+Name[ar]=Vte Terminal
+Name[bg]=Vte терминал
+Name[ca]=Terminal del VTE
+Name[cs]=VTE terminál
+Name[da]=VTE terminal
+Name[de]=Vte-Terminal
+Name[el]=Τερματικό του Vte
+Name[es]=Terminal de Vte
+Name[et]=VTE terminal
+Name[fi]=Vte-pääteohjelma
+Name[fr]=Terminal Vte
+Name[gl]=Vte Terminal
+Name[hu]=Vte konzol
+Name[it]=Terminale Vte
+Name[ja]=Vte 端末
+Name[km]=ស្ថានីយ Vte
+Name[ko]=VTE 터미널
+Name[lt]=Vte terminalas
+Name[mr]=VTE टर्मिनल
+Name[nb]=Vte-terminal
+Name[nl]=Vte Terminal
+Name[pa]=VTE ਟਰਮੀਨਲ
+Name[pl]=Terminal Vte
+Name[pt]=Vte Terminal
+Name[pt_BR]=Terminal do Vte
+Name[ru]=Vte терминал
+Name[sk]=VTE Terminál
+Name[sv]=Vte-terminal
+Name[uk]=Термінал Vte
+Name[xh]=Isiphelo se-Vte
+Name[zh_CN]=Vte 终端
+Name[zh_TW]=Vte 終端機
+GenericName=Command Line Terminal
+GenericName[af]=Opdragreëlterminaal
+GenericName[bg]=Терминал с команден ред
+GenericName[cs]=Terminál
+GenericName[da]=Kommandolinje-terminal
+GenericName[de]=Befehlszeilen-Terminal
+GenericName[el]=Τερματικό Γραμμής Εντολών
+GenericName[es]=Terminal de línea de órdenes
+GenericName[et]=Käsurea terminal
+GenericName[fi]=Pääteohjelma
+GenericName[fr]=Terminal de ligne de commande
+GenericName[gl]=Terminal de Liña de Comandos
+GenericName[hu]=Parancssoros terminál
+GenericName[it]=Terminale a riga di comando
+GenericName[ja]=コマンドラインターミナル
+GenericName[km]=ស្ថានីយ​បន្ទាត់​ពាក្យបញ្ជា​
+GenericName[ko]=터미널 명령 라인
+GenericName[lt]=Komandinės eilutės terminalas
+GenericName[mr]=लाईन टर्मिनलचा आदेश
+GenericName[nb]=Vte-terminal
+GenericName[nl]=Commandoregelterminal
+GenericName[pa]=ਕਮਾਂਡ ਲਾਇਨ ਟਰਮੀਨਲ
+GenericName[pl]=Terminal - linia poleceń
+GenericName[pt]=Terminal de Linha de Comando
+GenericName[pt_BR]=Terminal de Linha de Comando
+GenericName[ru]=Терминал командной строки
+GenericName[sv]=Kommandoradsterminal
+GenericName[uk]=Термінал командного рядка
+GenericName[xh]=Isiphelo Somgca Womyalelo
+GenericName[zh_CN]=命令行终端
+GenericName[zh_TW]=指令行終端機
+X-GNOME-Bugzilla-Bugzilla=vte
+X-GNOME-Bugzilla-Product=gnome-terminal
+X-GNOME-Bugzilla-Component=BugBuddyBugs
+X-GNOME-Bugzilla-Version=@VERSION@
diff --git a/packages/vte/vte.inc b/packages/vte/vte.inc
index 9151172c59..08642287d5 100644
--- a/packages/vte/vte.inc
+++ b/packages/vte/vte.inc
@@ -1,20 +1,29 @@
DESCRIPTION = "vte is a virtual terminal emulator"
LICENSE = "LGPL"
-DEPENDS += " glib-2.0 gtk+ intltool-native ncurses "
-PR = "r2"
+DEPENDS += "glib-2.0 gtk+ intltool-native ncurses"
inherit gnome
-SRC_URI += "file://vte-pkgconfig-fixes.patch;patch=1"
+SRC_URI += "\
+ file://vte-pkgconfig-fixes.patch;patch=1 \
+ file://vte.desktop.in \
+"
EXTRA_OECONF = "--disable-gtk-doc --disable-python"
+# Upstream does not provide desktop file for vte considering it only as
+# a testing utility.
+do_install_append() {
+ mkdir -p ${D}${datadir}/applications
+ sed s/@VERSION@/${PV}/ <${WORKDIR}/vte.desktop.in >${D}${datadir}/applications/vte.desktop
+}
+
do_stage() {
autotools_stage_all
}
PACKAGES =+ "libvte vte-termcap gnome-pty-helper"
-FILES_libvte = "${libdir}/*.so*"
+FILES_libvte = "${libdir}/*.so.*"
FILES_gnome-pty-helper = "${libexecdir}/gnome-pty-helper"
-RDEPENDS_libvte = "vte-termcap"
+RDEPENDS_libvte = "vte-termcap gnome-pty-helper"
FILES_vte-termcap = "${datadir}/vte/termcap"
diff --git a/packages/vte/vte_0.16.13.bb b/packages/vte/vte_0.16.13.bb
deleted file mode 100644
index 9453fee206..0000000000
--- a/packages/vte/vte_0.16.13.bb
+++ /dev/null
@@ -1 +0,0 @@
-require vte.inc
diff --git a/packages/vte/vte_0.16.14.bb b/packages/vte/vte_0.16.14.bb
new file mode 100644
index 0000000000..4e88640b02
--- /dev/null
+++ b/packages/vte/vte_0.16.14.bb
@@ -0,0 +1,2 @@
+require vte.inc
+PR = "r1"
diff --git a/packages/webkit/webkit-gtk/GNUmakefile.am b/packages/webkit/webkit-gtk/GNUmakefile.am
index 7aec061bd2..c74e1fa428 100644
--- a/packages/webkit/webkit-gtk/GNUmakefile.am
+++ b/packages/webkit/webkit-gtk/GNUmakefile.am
@@ -77,7 +77,7 @@ no_undefined = -no-undefined
endif
if OS_GNU
-version_script = -Wl,--version-script,$(srcdir)/symbols.filter
+version_script = -Wl,--version-script,$(srcdir)/autotools/symbols.filter
endif
# Shared libraries
@@ -121,7 +121,7 @@ libJavaScriptCore_la_SOURCES = \
libJavaScriptCore_la_LIBADD = \
$(UNICODE_LIBS) \
- $(GLOBALDEPS_LIBS) \
+ $(GLIB_LIBS) \
-lpthread
libJavaScriptCore_la_CXXFLAGS = \
@@ -132,7 +132,7 @@ libJavaScriptCore_la_CFLAGS = \
-fstrict-aliasing \
-O3 \
$(global_cflags) \
- $(GLOBALDEPS_CFLAGS) \
+ $(GLIB_CFLAGS) \
$(UNICODE_CFLAGS)
libJavaScriptCore_la_CPPFLAGS = \
@@ -167,7 +167,7 @@ libWebCore_la_CXXFLAGS = \
libWebCore_la_CFLAGS = \
-fno-strict-aliasing \
$(global_cflags) \
- $(GLOBALDEPS_CFLAGS) \
+ $(GLIB_CFLAGS) \
$(UNICODE_CFLAGS) \
$(LIBXML_CFLAGS) \
$(CAIRO_CFLAGS) \
@@ -181,7 +181,8 @@ libWebCore_la_CFLAGS = \
$(GSTREAMER_CFLAGS) \
$(LIBXSLT_CFLAGS) \
$(COVERAGE_CFLAGS) \
- $(HILDON_CFLAGS)
+ $(HILDON_CFLAGS) \
+ $(GEOCLUE_CFLAGS)
libWebCore_la_CPPFLAGS = \
$(global_cppflags) \
@@ -194,7 +195,7 @@ libWebCore_la_LIBADD = \
libJavaScriptCore.la \
libWebCoreJS.la \
$(webcore_libadd) \
- $(GLOBALDEPS_LIBS) \
+ $(GLIB_LIBS) \
$(LIBXML_LIBS) \
$(CAIRO_LIBS) \
$(PANGO_LIBS) \
@@ -210,6 +211,7 @@ libWebCore_la_LIBADD = \
$(HILDON_LIBS) \
$(JPEG_LIBS) \
$(PNG_LIBS) \
+ $(GEOCLUE_LIBS) \
-lpthread
# WebKit
diff --git a/packages/webkit/webkit-gtk/acinclude.m4 b/packages/webkit/webkit-gtk/acinclude.m4
index 5353429010..e69de29bb2 100644
--- a/packages/webkit/webkit-gtk/acinclude.m4
+++ b/packages/webkit/webkit-gtk/acinclude.m4
@@ -1,359 +0,0 @@
-dnl dolt, a replacement for libtool
-dnl Copyright © 2007-2008 Josh Triplett <josh@freedesktop.org>
-dnl Copying and distribution of this file, with or without modification,
-dnl are permitted in any medium without royalty provided the copyright
-dnl notice and this notice are preserved.
-dnl
-dnl To use dolt, invoke the DOLT macro immediately after the libtool macros.
-dnl Optionally, copy this file into acinclude.m4, to avoid the need to have it
-dnl installed when running autoconf on your project.
-
-AC_DEFUN([DOLT], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-# dolt, a replacement for libtool
-# Josh Triplett <josh@freedesktop.org>
-AC_PATH_PROG(DOLT_BASH, bash)
-AC_MSG_CHECKING([if dolt supports this host])
-dolt_supported=yes
-if test x$DOLT_BASH = x; then
- dolt_supported=no
-fi
-if test x$GCC != xyes; then
- dolt_supported=no
-fi
-case $host in
-i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux* \
-|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*)
- pic_options='-fPIC'
- ;;
-i?86-apple-darwin*)
- pic_options='-fno-common'
- ;;
-*mingw32*)
- pic_options='-DDLL_EXPORT'
- ;;
-*)
- dolt_supported=no
- ;;
-esac
-if test x$dolt_supported = xno ; then
- AC_MSG_RESULT([no, falling back to libtool])
- LTCOMPILE='$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(COMPILE)'
- LTCXXCOMPILE='$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXXCOMPILE)'
-else
- AC_MSG_RESULT([yes, replacing libtool])
-
-dnl Start writing out doltcompile.
- cat <<__DOLTCOMPILE__EOF__ >doltcompile
-#!$DOLT_BASH
-__DOLTCOMPILE__EOF__
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-args=("$[]@")
-for ((arg=0; arg<${#args@<:@@@:>@}; arg++)) ; do
- if test x"${args@<:@$arg@:>@}" = x-o ; then
- objarg=$((arg+1))
- break
- fi
-done
-if test x$objarg = x ; then
- echo 'Error: no -o on compiler command line' 1>&2
- exit 1
-fi
-lo="${args@<:@$objarg@:>@}"
-obj="${lo%.lo}"
-if test x"$lo" = x"$obj" ; then
- echo "Error: libtool object file name \"$lo\" does not end in .lo" 1>&2
- exit 1
-fi
-objbase="${obj##*/}"
-__DOLTCOMPILE__EOF__
-
-dnl Write out shared compilation code.
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-libobjdir="${obj%$objbase}.libs"
-if test ! -d "$libobjdir" ; then
- mkdir_out="$(mkdir "$libobjdir" 2>&1)"
- mkdir_ret=$?
- if test "$mkdir_ret" -ne 0 && test ! -d "$libobjdir" ; then
- echo "$mkdir_out" 1>&2
- exit $mkdir_ret
- fi
-fi
-pic_object="$libobjdir/$objbase.o"
-args@<:@$objarg@:>@="$pic_object"
-__DOLTCOMPILE__EOF__
- cat <<__DOLTCOMPILE__EOF__ >>doltcompile
-"\${args@<:@@@:>@}" $pic_options -DPIC || exit \$?
-__DOLTCOMPILE__EOF__
- fi
-
-dnl Write out static compilation code.
-dnl Avoid duplicate compiler output if also building shared objects.
- if test x$enable_static = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-non_pic_object="$obj.o"
-args@<:@$objarg@:>@="$non_pic_object"
-__DOLTCOMPILE__EOF__
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-"${args@<:@@@:>@}" >/dev/null 2>&1 || exit $?
-__DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-"${args@<:@@@:>@}" || exit $?
-__DOLTCOMPILE__EOF__
- fi
- fi
-
-dnl Write out the code to write the .lo file.
-dnl The second line of the .lo file must match "^# Generated by .*libtool"
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-{
-echo "# $lo - a libtool object file"
-echo "# Generated by doltcompile, not libtool"
-__DOLTCOMPILE__EOF__
-
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo "pic_object='.libs/${objbase}.o'"
-__DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo pic_object=none
-__DOLTCOMPILE__EOF__
- fi
-
- if test x$enable_static = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo "non_pic_object='${objbase}.o'"
-__DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo non_pic_object=none
-__DOLTCOMPILE__EOF__
- fi
-
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-} > "$lo"
-__DOLTCOMPILE__EOF__
-
-dnl Done writing out doltcompile; substitute it for libtool compilation.
- chmod +x doltcompile
- LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)'
- LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)'
-
-dnl automake ignores LTCOMPILE and LTCXXCOMPILE when it has separate CFLAGS for
-dnl a target, so write out a libtool wrapper to handle that case.
-dnl Note that doltlibtool does not handle inferred tags or option arguments
-dnl without '=', because automake does not use them.
- cat <<__DOLTLIBTOOL__EOF__ > doltlibtool
-#!$DOLT_BASH
-__DOLTLIBTOOL__EOF__
- cat <<'__DOLTLIBTOOL__EOF__' >>doltlibtool
-top_builddir_slash="${0%%doltlibtool}"
-: ${top_builddir_slash:=./}
-args=()
-modeok=false
-tagok=false
-for arg in "$[]@"; do
- case "$arg" in
- --mode=compile) modeok=true ;;
- --tag=CC|--tag=CXX) tagok=true ;;
- *) args@<:@${#args[@]}@:>@="$arg" ;;
- esac
-done
-if $modeok && $tagok ; then
- . ${top_builddir_slash}doltcompile "${args@<:@@@:>@}"
-else
- exec ${top_builddir_slash}libtool "$[]@"
-fi
-__DOLTLIBTOOL__EOF__
-
-dnl Done writing out doltlibtool; substitute it for libtool.
- chmod +x doltlibtool
- LIBTOOL='$(top_builddir)/doltlibtool'
-fi
-AC_SUBST(LTCOMPILE)
-AC_SUBST(LTCXXCOMPILE)
-# end dolt
-])
-
-# ===========================================================================
-# http://autoconf-archive.cryp.to/ax_compare_version.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
-#
-# DESCRIPTION
-#
-# This macro compares two version strings. Due to the various number of
-# minor-version numbers that can exist, and the fact that string
-# comparisons are not compatible with numeric comparisons, this is not
-# necessarily trivial to do in a autoconf script. This macro makes doing
-# these comparisons easy.
-#
-# The six basic comparisons are available, as well as checking equality
-# limited to a certain number of minor-version levels.
-#
-# The operator OP determines what type of comparison to do, and can be one
-# of:
-#
-# eq - equal (test A == B)
-# ne - not equal (test A != B)
-# le - less than or equal (test A <= B)
-# ge - greater than or equal (test A >= B)
-# lt - less than (test A < B)
-# gt - greater than (test A > B)
-#
-# Additionally, the eq and ne operator can have a number after it to limit
-# the test to that number of minor versions.
-#
-# eq0 - equal up to the length of the shorter version
-# ne0 - not equal up to the length of the shorter version
-# eqN - equal up to N sub-version levels
-# neN - not equal up to N sub-version levels
-#
-# When the condition is true, shell commands ACTION-IF-TRUE are run,
-# otherwise shell commands ACTION-IF-FALSE are run. The environment
-# variable 'ax_compare_version' is always set to either 'true' or 'false'
-# as well.
-#
-# Examples:
-#
-# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
-# AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
-#
-# would both be true.
-#
-# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
-# AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
-#
-# would both be false.
-#
-# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
-#
-# would be true because it is only comparing two minor versions.
-#
-# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
-#
-# would be true because it is only comparing the lesser number of minor
-# versions of the two values.
-#
-# Note: The characters that separate the version numbers do not matter. An
-# empty string is the same as version 0. OP is evaluated by autoconf, not
-# configure, so must be a string, not a variable.
-#
-# The author would like to acknowledge Guido Draheim whose advice about
-# the m4_case and m4_ifvaln functions make this macro only include the
-# portions necessary to perform the specific comparison specified by the
-# OP argument in the final configure script.
-#
-# LAST MODIFICATION
-#
-# 2008-04-12
-#
-# COPYLEFT
-#
-# Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved.
-
-dnl #########################################################################
-AC_DEFUN([AX_COMPARE_VERSION], [
- AC_PROG_AWK
-
- # Used to indicate true or false condition
- ax_compare_version=false
-
- # Convert the two version strings to be compared into a format that
- # allows a simple string comparison. The end result is that a version
- # string of the form 1.12.5-r617 will be converted to the form
- # 0001001200050617. In other words, each number is zero padded to four
- # digits, and non digits are removed.
- AS_VAR_PUSHDEF([A],[ax_compare_version_A])
- A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
- -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/[[^0-9]]//g'`
-
- AS_VAR_PUSHDEF([B],[ax_compare_version_B])
- B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
- -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
- -e 's/[[^0-9]]//g'`
-
- dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
- dnl # then the first line is used to determine if the condition is true.
- dnl # The sed right after the echo is to remove any indented white space.
- m4_case(m4_tolower($2),
- [lt],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
- ],
- [gt],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
- ],
- [le],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
- ],
- [ge],[
- ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
- ],[
- dnl Split the operator from the subversion count if present.
- m4_bmatch(m4_substr($2,2),
- [0],[
- # A count of zero means use the length of the shorter version.
- # Determine the number of characters in A and B.
- ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
- ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
-
- # Set A to no more than B's length and B to no more than A's length.
- A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
- B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
- ],
- [[0-9]+],[
- # A count greater than zero means use only that many subversions
- A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
- B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
- ],
- [.+],[
- AC_WARNING(
- [illegal OP numeric parameter: $2])
- ],[])
-
- # Pad zeros at end of numbers to make same length.
- ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
- B="$B`echo $A | sed 's/./0/g'`"
- A="$ax_compare_version_tmp_A"
-
- # Check for equality or inequality as necessary.
- m4_case(m4_tolower(m4_substr($2,0,2)),
- [eq],[
- test "x$A" = "x$B" && ax_compare_version=true
- ],
- [ne],[
- test "x$A" != "x$B" && ax_compare_version=true
- ],[
- AC_WARNING([illegal OP parameter: $2])
- ])
- ])
-
- AS_VAR_POPDEF([A])dnl
- AS_VAR_POPDEF([B])dnl
-
- dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
- if test "$ax_compare_version" = "true" ; then
- m4_ifvaln([$4],[$4],[:])dnl
- m4_ifvaln([$5],[else $5])dnl
- fi
-]) dnl AX_COMPARE_VERSION
diff --git a/packages/webkit/webkit-gtk/autogen.sh b/packages/webkit/webkit-gtk/autogen.sh
index a929538d20..f87238cf92 100644
--- a/packages/webkit/webkit-gtk/autogen.sh
+++ b/packages/webkit/webkit-gtk/autogen.sh
@@ -8,6 +8,10 @@ test -z "$srcdir" && srcdir=.
ORIGDIR=`pwd`
cd $srcdir
+LIBTOOLIZE_FLAGS="--force --automake"
+ACLOCAL_FLAGS="-I autotools"
+AUTOMAKE_FLAGS="--foreign --add-missing"
+
DIE=0
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
@@ -46,10 +50,10 @@ rm -rf $top_srcdir/autom4te.cache
touch README INSTALL
-aclocal || exit $?
-$LIBTOOLIZE --force || exit $?
+aclocal $ACLOCAL_FLAGS || exit $?
+$LIBTOOLIZE $LIBTOOLIZE_FLAGS || exit $?
autoheader || exit $?
-automake --foreign --add-missing || exit $?
+automake $AUTOMAKE_FLAGS || exit $?
autoconf || exit $?
cd $ORIGDIR || exit 1
diff --git a/packages/webkit/webkit-gtk/configure.ac b/packages/webkit/webkit-gtk/configure.ac
index 7b451efe96..c7ed988329 100644
--- a/packages/webkit/webkit-gtk/configure.ac
+++ b/packages/webkit/webkit-gtk/configure.ac
@@ -6,6 +6,10 @@ m4_define([webkit_micro_version], [0])
AC_INIT([WebKit],[webkit_major_version.webkit_minor_version.webkit_micro_version],[http://bugs.webkit.org/])
+AC_CONFIG_MACRO_DIR([autotools])
+AC_CONFIG_AUX_DIR([autotools])
+AC_SUBST(ACLOCAL_AMFLAGS, "-I autotools")
+
AC_CONFIG_HEADERS([autotoolsconfig.h])
AC_CANONICAL_SYSTEM
@@ -23,10 +27,13 @@ dnl # see http://www.gnu.org/software/libtool/manual.html#Versioning
LIBWEBKITGTK_VERSION=1:0:0
AC_SUBST([LIBWEBKITGTK_VERSION])
+# Recent libtool+automake don't assume you want C++, explicitly enable it
+AC_PROG_CXX
+
AM_INIT_AUTOMAKE([foreign subdir-objects tar-ustar])
# host checking - inspired by the GTK+ configure.in
-# TODO: os_mac, os_bsd
+# TODO: move these to webkit.m4?
AC_MSG_CHECKING([for native Win32])
case "$host" in
*-*-mingw*)
@@ -59,57 +66,14 @@ case "$host_os" in
;;
esac
-# If CXXFLAGS and CFLAGS are unset, default to empty.
-# This is to tell automake not to include '-g' if CXXFLAGS is not set
-# For more info - http://www.gnu.org/software/automake/manual/autoconf.html#C_002b_002b-Compiler
-if test -z "$CXXFLAGS"; then
- CXXFLAGS=""
-fi
-if test -z "$CFLAGS"; then
- CFLAGS=""
-fi
-
-AM_PROG_CC_STDC
-AM_PROG_CC_C_O
-AC_PROG_CXX
-AC_PROG_INSTALL
+# initialize webkit options
+WEBKIT_INIT
AC_DISABLE_STATIC
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
-AC_SYS_LARGEFILE
+# use dolt to speedup the build
DOLT
-# check for -fvisibility=hidden compiler support (GCC >= 4)
-saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
-AC_MSG_CHECKING([if ${CXX} supports -fvisibility=hidden -fvisibility-inlines-hidden])
-AC_COMPILE_IFELSE([char foo;],
- [ AC_MSG_RESULT([yes])
- SYMBOL_VISIBILITY="-fvisibility=hidden" SYMBOL_VISIBILITY_INLINES="-fvisibility-inlines-hidden" ],
- AC_MSG_RESULT([no]))
-CFLAGS="$saved_CFLAGS"
-AC_SUBST(SYMBOL_VISIBILITY)
-AC_SUBST(SYMBOL_VISIBILITY_INLINES)
-
-AC_PATH_PROG(PERL, perl)
-if test -z "$PERL"; then
- AC_MSG_ERROR([You need 'perl' to compile WebKit])
-fi
-
-AC_PATH_PROG(BISON, bison)
-if test -z "$BISON"; then
- AC_MSG_ERROR([You need the 'bison' parser generator to compile WebKit])
-else
- case "$target_cpu" in
- arm)
- BISON_VERSION=`$BISON --version | head -n1 | sed 's,.*\ \([0-9]*\.[0-9]*\)$,\1,'`
- AX_COMPARE_VERSION([2.2],[gt],[$BISON_VERSION],
- echo "Autoconf say: I'm broken, ignore me")
- ;;
- *) ;;
- esac
-fi
-
AC_PATH_PROG(FLEX, flex)
if test -z "$FLEX"; then
AC_MSG_ERROR([You need the 'flex' lexer generator to compile WebKit])
@@ -124,34 +88,6 @@ if test -z "$GPERF"; then
AC_MSG_ERROR([You need the 'gperf' hash function generator to compile WebKit])
fi
-AC_PATH_PROG(MV, mv)
-if test -z "$MV"; then
- AC_MSG_ERROR([You need 'mv' to compile WebKit])
-fi
-
-# GTK+ port only
-# Check for glib-genmarshal and glib-mkenums
-AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
-AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
-if test -z "$GLIB_GENMARSHAL" || test -z "$GLIB_MKENUMS"; then
- AC_MSG_ERROR([You need the GLib dev tools in your path])
-fi
-
-# Check whether a C++ was found (AC_PROG_CXX sets $CXX to "g++" even when it
-# doesn't exist)
-AC_LANG_PUSH([C++])
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],[],[AC_MSG_ERROR([No C++ compiler found])])
-AC_LANG_POP([C++])
-
-# C/C++ Language Features
-AC_C_CONST
-AC_C_INLINE
-AC_C_VOLATILE
-
-# C/C++ Headers
-AC_HEADER_STDC
-AC_HEADER_STDBOOL
-
# pthread (not needed on Windows)
if test "$os_win32" = "no"; then
AC_CHECK_HEADERS([pthread.h],
@@ -183,12 +119,6 @@ if test "$jpeg_ok" = yes; then
fi
AC_SUBST([JPEG_LIBS])
-# check for pkg-config
-AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-if test "$PKG_CONFIG" = "no"; then
- AC_MSG_ERROR([Cannot find pkg-config, make sure it is installed in your PATH])
-fi
-
# Check for libpng the way Gtk+ does it
AC_MSG_CHECKING(for libpng12)
if $PKG_CONFIG --exists libpng12 ; then
@@ -219,44 +149,6 @@ else
fi
AC_SUBST([PNG_LIBS])
-# determine the Unicode backend
-AC_MSG_CHECKING([the Unicode backend to use])
-AC_ARG_WITH(unicode_backend,
- AC_HELP_STRING([--with-unicode-backend=@<:@icu@:>@],
- [Select Unicode backend [default=icu]]),
- [],[unicode_backend="icu"])
-
-case "$unicode_backend" in
- icu) ;;
- *) AC_MSG_ERROR([Invalid Unicode backend: must be icu.]) ;;
-esac
-
-AC_MSG_RESULT([$unicode_backend])
-
-if test "$unicode_backend" = "icu"; then
- AC_PATH_PROG(icu_config, icu-config, no)
- if test "$icu_config" = "no"; then
- if test "$os_darwin" = "yes"; then
- UNICODE_CFLAGS="-I\$(srcdir)/JavaScriptCore/icu -I\$(srcdir)/WebCore/icu"
- UNICODE_LIBS="-licucore"
- elif test "$os_win32" = "yes"; then
- UNICODE_CFLAGS=""
- UNICODE_LIBS="-licuin -licuuc"
- else
- AC_MSG_ERROR([Cannot find icu-config. The ICU library is needed.])
- fi
- else
- # We don't use --cflags as this gives us a lot of things that we don't
- # necessarily want, like debugging and optimization flags
- # See man (1) icu-config for more info.
- UNICODE_CFLAGS=`$icu_config --cppflags`
- UNICODE_LIBS=`$icu_config --ldflags`
- fi
-fi
-
-AC_SUBST([UNICODE_CFLAGS])
-AC_SUBST([UNICODE_LIBS])
-
# determine the GDK/GTK+ target
AC_MSG_CHECKING([the target windowing system])
AC_ARG_WITH(target,
@@ -307,9 +199,6 @@ FREETYPE2_REQUIRED_VERSION=9.0
LIBXML_REQUIRED_VERSION=2.6
# minimum GTK+ base dependencies
-GLIB_REQUIRED_VERSION=2.0
-GOBJECT_REQUIRED_VERSION=2.0
-GTHREAD_REQUIRED_VERSION=2.0
PANGO_REQUIRED_VERSION=1.0
GTK_REQUIRED_VERSION=2.8
@@ -320,13 +209,14 @@ LIBXSLT_REQUIRED_VERSION=1.1.7
SQLITE_REQUIRED_VERSION=3.0
GSTREAMER_REQUIRED_VERSION=0.10
-PKG_CHECK_MODULES([GLOBALDEPS],
- [glib-2.0 >= $GLIB_REQUIRED_VERSION
- gobject-2.0 >= $GOBJECT_REQUIRED_VERSION
- gthread-2.0 >= $GTHREAD_REQUIRED_VERSION])
-AC_SUBST([GLOBALDEPS_CFLAGS])
-AC_SUBST([GLOBALDEPS_LIBS])
-
+# Available modules
+#
+# glib - glib and includes gthread
+# unicode - check and identify which unicode backend to use
+#
+# todo: webcore gtk
+WEBKIT_CHECK_DEPENDENCIES([glib unicode])
+
PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= $LIBXML_REQUIRED_VERSION)
AC_SUBST(LIBXML_CFLAGS)
AC_SUBST(LIBXML_LIBS)
@@ -456,8 +346,8 @@ AC_MSG_RESULT([$enable_xslt])
AC_MSG_CHECKING([whether to enable geolocation support])
AC_ARG_ENABLE(geolocation,
AC_HELP_STRING([--enable-geolocation],
- [enable support for geolocation [default=yes]]),
- [],[enable_geolocation="yes"])
+ [enable support for geolocation [default=no]]),
+ [],[enable_geolocation="no"])
AC_MSG_RESULT([$enable_geolocation])
# check whether to enable SVG support
@@ -676,6 +566,14 @@ if test "$enable_xslt" = "yes"; then
AC_SUBST([LIBXSLT_LIBS])
fi
+# check if geoclue is available
+if test "$enable_geolocation" = "yes"; then
+ PKG_CHECK_MODULES([GEOCLUE], [geoclue])
+ AC_SUBST([GEOCLUE_CFLAGS])
+ AC_SUBST([GEOCLUE_LIBS])
+fi
+
+
# check if gstreamer is available
if test "$enable_video" = "yes"; then
PKG_CHECK_MODULES([GSTREAMER],
diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb
index 96ef562e75..98926727fe 100644
--- a/packages/webkit/webkit-gtk_svn.bb
+++ b/packages/webkit/webkit-gtk_svn.bb
@@ -1,11 +1,11 @@
DESCRIPTION = "WebKit browser engine, GTK+ edition"
-DEPENDS = "curl icu libxml2 cairo libxslt libxt libidn gnutls gtk+ gstreamer gst-plugins-base gnome-vfs bison-native flex-native gperf-native perl-native sqlite3"
+DEPENDS = "libsoup-2.4 curl icu libxml2 cairo libxslt libxt libidn gnutls gtk+ gstreamer gst-plugins-base gnome-vfs bison-native flex-native gperf-native perl-native sqlite3"
SRCREV_FORMAT = "webcore-rwebkit"
# Yes, this is wrong...
PV = "0.1+svnr${SRCREV}"
-PR = "r7"
+PR = "r8"
SRC_URI = "\
svn://svn.webkit.org/repository/webkit/trunk/;module=JavaScriptCore;proto=http \
@@ -14,7 +14,7 @@ SRC_URI = "\
svn://svn.webkit.org/repository/webkit/trunk/;module=WebKit;proto=http;name=webkit \
svn://svn.webkit.org/repository/webkit/trunk/;module=WebKitLibraries;proto=http \
svn://svn.webkit.org/repository/webkit/trunk/;module=WebKitTools;proto=http \
- file://acinclude.m4 \
+ svn://svn.webkit.org/repository/webkit/trunk/;module=autotools;proto=http \
file://Makefile \
file://Makefile.shared \
file://autogen.sh \
@@ -29,13 +29,13 @@ inherit autotools pkgconfig lib_package
export BISON="${STAGING_BINDIR_NATIVE}/bison"
ARM_INSTRUCTION_SET = "arm"
-# FIXME: Segfaulting without --with-http-backend=curl
EXTRA_OECONF = "\
--enable-debug=no \
--enable-svg \
--enable-icon-database=yes \
- --with-http-backend=curl \
+ --with-http-backend=soup \
"
+EXTRA_AUTORECONF = " -I autotools "
# Dolt gets used on x86 and ppc and hardcodes 'libtool'
do_configure_append() {
diff --git a/packages/wireshark/files/acinclude-net-snmp-fix.patch b/packages/wireshark/files/acinclude-net-snmp-fix.patch
new file mode 100644
index 0000000000..3f6dbf3b05
--- /dev/null
+++ b/packages/wireshark/files/acinclude-net-snmp-fix.patch
@@ -0,0 +1,13 @@
+Index: wireshark-0.99.4/acinclude.m4
+===================================================================
+--- wireshark-0.99.4.orig/acinclude.m4 2009-01-03 22:57:54.106829288 +0300
++++ wireshark-0.99.4/acinclude.m4 2009-01-03 22:57:59.806420438 +0300
+@@ -1117,7 +1117,7 @@ AC_DEFUN([AC_WIRESHARK_NETSNMP_CHECK],
+ #
+ AC_PATH_PROG(NETSNMPCONFIG, net-snmp-config)
+ else
+- NETSNMPCNFIG=$netsnmpconfig
++ NETSNMPCONFIG=$netsnmpconfig
+ if test ! -x $NETSNMPCONFIG -o ! -f $NETSNMPCONFIG ; then
+ NETSNMPCONFIG=$netsnmpconfig/bin/net-snmp-config
+ if test ! -x $NETSNMPCONFIG -o ! -f $NETSNMPCONFIG ; then
diff --git a/packages/wireshark/files/ieee80215.4.patch b/packages/wireshark/files/ieee80215.4.patch
new file mode 100644
index 0000000000..8bcdd93d97
--- /dev/null
+++ b/packages/wireshark/files/ieee80215.4.patch
@@ -0,0 +1,9 @@
+--- wireshark-1.0.5.orig/epan/dissectors/packet-ieee802154.c
++++ wireshark-1.0.5/epan/dissectors/packet-ieee802154.c
+@@ -1696,7 +1696,7 @@
+ dissector_handle_t ieee802154_handle;
+
+ /* Get the dissector handles. */
+- ieee802154_handle = find_dissector("wpan");
++ ieee802154_handle = find_dissector("wpan_nofcs");
+ data_handle = find_dissector("data");
diff --git a/packages/wireshark/files/libtool-fix.patch b/packages/wireshark/files/libtool-fix.patch
new file mode 100644
index 0000000000..4a978bad92
--- /dev/null
+++ b/packages/wireshark/files/libtool-fix.patch
@@ -0,0 +1,14 @@
+Index: wireshark-0.99.4/configure.in
+===================================================================
+--- wireshark-0.99.4.orig/configure.in 2009-01-05 01:23:50.887336868 +0300
++++ wireshark-0.99.4/configure.in 2009-01-05 01:24:03.136385630 +0300
+@@ -16,8 +16,7 @@ dnl Checks for programs.
+ AC_PROG_CC
+ AC_PROG_CPP
+ dnl Work around libtool bug (fixed in the version 1.5a?)
+-AC_DEFUN([AC_PROVIDE_AC_LIBTOOL_DLOPEN], )
+-AC_LIBTOOL_DLOPEN
++LT_INIT([dlopen])
+ AC_PROG_LIBTOOL
+ AC_PROG_YACC
+ AM_PROG_LEX
diff --git a/packages/wireshark/tshark_0.99.4.bb b/packages/wireshark/tshark_0.99.4.bb
index 7338efdda7..b7fe2afeed 100644
--- a/packages/wireshark/tshark_0.99.4.bb
+++ b/packages/wireshark/tshark_0.99.4.bb
@@ -1,21 +1,5 @@
DESCRIPTION = "tshark is the text based verion of wireshark - a popular network protocol analyzer"
-HOMEPAGE = "http://www.ethereal.com"
-SECTION = "network"
-LICENSE = "GPL"
-DEPENDS = "perl-native gnutls libpcap pcre expat"
+require wireshark.inc
-SRC_URI = "${SOURCEFORGE_MIRROR}/wireshark/wireshark-${PV}.tar.bz2 \
- file://use-our-lemon.patch;patch=1 \
- file://no-host-includes.patch;patch=1"
-
-S=${WORKDIR}/wireshark-${PV}
-
-inherit autotools
-
-EXTRA_OECONF = "--disable-wireshark"
-
-do_compile_prepend() {
- ${BUILD_CC} ${BUILD_CFLAGS} -o rdps rdps.c
- oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}"
-}
+EXTRA_OECONF = "--disable-wireshark --with-net-snmp=${STAGING_DIR_HOST}${layout_bindir}/net-snmp-config"
diff --git a/packages/wireshark/wireshark.inc b/packages/wireshark/wireshark.inc
new file mode 100644
index 0000000000..13715ea273
--- /dev/null
+++ b/packages/wireshark/wireshark.inc
@@ -0,0 +1,20 @@
+HOMEPAGE = "http://www.wireshark.org"
+SECTION = "network"
+LICENSE = "GPL"
+DEPENDS = "perl-native gnutls libpcap pcre expat glib-2.0 net-snmp"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wireshark/wireshark-${PV}.tar.bz2 \
+ file://use-our-lemon.patch;patch=1 \
+ file://acinclude-net-snmp-fix.patch;patch=1 \
+ file://libtool-fix.patch;patch=1 \
+ file://no-host-includes.patch;patch=1"
+
+S=${WORKDIR}/wireshark-${PV}
+
+inherit autotools
+
+do_compile_prepend() {
+ ${BUILD_CC} ${BUILD_CFLAGS} -o rdps rdps.c
+ oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}"
+}
+
diff --git a/packages/wireshark/wireshark_0.99.4.bb b/packages/wireshark/wireshark_0.99.4.bb
index e34ca849d4..f4c90fce48 100644
--- a/packages/wireshark/wireshark_0.99.4.bb
+++ b/packages/wireshark/wireshark_0.99.4.bb
@@ -1,21 +1,9 @@
-DESCRIPTION = "Ethereal is the world's most popular network protocol analyzer"
-HOMEPAGE = "http://www.ethereal.com"
-SECTION = "x11/network"
-LICENSE = "GPL"
-DEPENDS = "perl-native gtk+ gnutls libpcap pcre expat"
+DESCRIPTION = "Wireshark is the world's most popular network protocol analyzer"
+require wireshark.inc
+DEPENDS += "gtk+"
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"
-
-inherit autotools
-
-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/wireshark/wireshark_1.0.5.bb b/packages/wireshark/wireshark_1.0.5.bb
new file mode 100644
index 0000000000..aa8e66c2f4
--- /dev/null
+++ b/packages/wireshark/wireshark_1.0.5.bb
@@ -0,0 +1,70 @@
+DESCRIPTION = "wireshark - a popular network protocol analyzer"
+HOMEPAGE = "http://www.wireshark.org"
+SECTION = "network"
+LICENSE = "GPL"
+DEPENDS = "perl-native gnutls libpcap pcre expat glib-2.0 libsmi gtk+"
+EXTRA_OECONF = "--disable-usrlocal --with-pcap=${STAGING_DIR_HOST}${layout_prefix} \
+ --with-libsmi=${STAGING_DIR_HOST}${layout_prefix} --enable-tshark --enable-wireshark"
+
+PR = "r5"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wireshark/wireshark-${PV}.tar.bz2 \
+ file://ieee80215.4.patch;patch=1"
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES += "libwireshark1-dev libwireshark1 libwireshark1-dbg"
+FILES_libwireshark1 = "${libdir}/*.so*"
+FILES_libwireshark1-dev += "${libdir}/*.la ${libdir}/*.a ${libdir}/*.so ${includedir}"
+FILES_libwireshark1-dbg += "${libdir}/.debug"
+LEAD_SONAME_libwireshark1 = "libwireshark.so.0"
+
+PACKAGES += "${PN}-wireshark ${PN}-wireshark-dbg ${PN}-tshark ${PN}-tshark-dbg"
+FILES_${PN}-wireshark = "${bindir}/wireshark"
+FILES_${PN}-wireshark-dbg = "${bindir}/.debug/wireshark"
+FILES_${PN}-tshark = "${bindir}/tshark"
+FILES_${PN}-tshark-dbg = "${bindir}/.debug/tshark"
+RDEPENDS_${PN}-tshark += "libsmi-mibs libsmi-pibs ${PN}-data"
+RDEPENDS_${PN}-wireshark += "libsmi-mibs libsmi-pibs ${PN}-data"
+RCONFLICTS_${PN}-tshark = "tshark wireshark (<1.0.5)"
+RREPLACES_${PN}-tshark = "tshark wireshark (<1.0.5)"
+RCONFLICTS_${PN}-wireshark = "tshark wireshark (<1.0.5)"
+RREPLACES_${PN}-wireshark = "tshark wireshark (<1.0.5)"
+
+PACKAGES += "${PN}-plugins-dbg ${PN}-plugins"
+FILES_${PN}-plugins = "${libdir}/wireshark/plugins/${PV}/*.so ${libdir}/wireshark/plugins/${PV}/*.la"
+FILES_${PN}-plugins-dbg += "${libdir}/wireshark/plugins/${PV}/.debug"
+
+PACKAGES += "${PN}-data"
+FILES_${PN}-data = "${datadir}/wireshark"
+
+PACKAGES += "${PN}-utils ${PN}-utils-dbg"
+FILES_${PN}-utils = "${bindir}/text2pcap ${bindir}/dumpcap \
+ ${bindir}/rawshark ${bindir}/editcap \
+ ${bindir}/mergecap ${bindir}/idl2wrs \
+ ${bindir}/dftest ${bindir}/capinfos \
+ ${bindir}/randpkt"
+FILES_${PN}-utils-dbg = "${bindir}/.debug"
+
+FILES_${PN} = ""
+FILES_${PN}-dev = ""
+FILES_${PN}-dbg = ""
+ALLOW_EMPTY_${PN} = "1"
+RDEPENDS_${PN} = "${PN}-tshark ${PN}-wireshark ${PN}-plugins ${PN}-data"
+RCONFLICTS_${PN} = "tshark wireshark (<1.0.5)"
+RREPLACES_${PN} = "tshark wireshark (<1.0.5)"
+
+inherit autotools
+
+do_compile_prepend() {
+ find . -type f -name Makefile \
+ -exec sed -e 's@-I/usr/include @@g' \
+ -e 's@-I$(includedir)@@g' \
+ -e 's@-I/usr/local/include @@g' \
+ -e "s@-I${includedir} @@g" -i '{}' ';'
+
+ ${BUILD_CC} ${BUILD_CFLAGS} -o rdps rdps.c
+ oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" \
+ CC_FOR_BUILD="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}"
+}
+
diff --git a/packages/wpa-supplicant/wpa-supplicant-0.6.inc b/packages/wpa-supplicant/wpa-supplicant-0.6.inc
index 779bee7487..aee9ced4f7 100644
--- a/packages/wpa-supplicant/wpa-supplicant-0.6.inc
+++ b/packages/wpa-supplicant/wpa-supplicant-0.6.inc
@@ -63,7 +63,8 @@ do_install () {
install -d ${D}/${sysconfdir}/dbus-1/system.d
install -m 644 ${S}/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
install -d ${D}/${datadir}/dbus-1/system-services
- install -m 644 ${S}/dbus-wpa_supplicant.service ${D}/${datadir}/dbus-1/system-services
+ sed -i -e s:${base_sbindir}:${sbindir}:g ${S}/dbus-wpa_supplicant.service
+ install -m 644 ${S}/dbus-wpa_supplicant.service ${D}/${datadir}/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service
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.6.7.bb b/packages/wpa-supplicant/wpa-supplicant_0.6.7.bb
new file mode 100644
index 0000000000..4712d9ec26
--- /dev/null
+++ b/packages/wpa-supplicant/wpa-supplicant_0.6.7.bb
@@ -0,0 +1,3 @@
+require wpa-supplicant-0.6.inc
+
+PR = "r4"
diff --git a/packages/wt/wt3-2.99.0/ext.patch b/packages/wt/wt3-2.99.0/ext.patch
new file mode 100644
index 0000000000..89246ebbf6
--- /dev/null
+++ b/packages/wt/wt3-2.99.0/ext.patch
@@ -0,0 +1,7 @@
+--- wt-2.99.0/src/Wt/Ext/CMakeLists.txt 2009-03-11 21:30:10.000000000 +0100
++++ wt-2.99.0/src/Wt/Ext/CMakeLists.txt.new 2009-03-11 21:31:33.000000000 +0100
+@@ -1,2 +1,3 @@
+-INSTALL_FILES(/include/Wt/Ext "...+[^Ch~]$")
++# avoid CMake* getting included
++INSTALL_FILES(/include/Wt/Ext "^[A-Z][a-z].*[^Ch~]$")
+ INSTALL_FILES(/include/Wt/Ext ExtDllDefs.h)
diff --git a/packages/wt/wt3-2.99.0/src.patch b/packages/wt/wt3-2.99.0/src.patch
new file mode 100644
index 0000000000..a3ac249af0
--- /dev/null
+++ b/packages/wt/wt3-2.99.0/src.patch
@@ -0,0 +1,18 @@
+--- wt-2.99.0/src/CMakeLists.txt 2009-03-06 16:36:30.000000000 +0100
++++ wt-2.99.0/src/CMakeLists.txt.new 2009-03-11 21:39:06.000000000 +0100
+@@ -33,8 +33,13 @@
+
+ LINK_DIRECTORIES(${BOOST_LIB_DIRS})
+
+-ADD_EXECUTABLE(filetostring web/skeleton/FileToString.C)
+-GET_TARGET_PROPERTY(FILE_TO_STRING_EXE filetostring LOCATION)
++IF(CMAKE_CROSSCOMPILING)
++ ADD_EXECUTABLE(filetostring web/skeleton/FileToString.C)
++ GET_TARGET_PROPERTY(FILE_TO_STRING_EXE filetostring LOCATION)
++ELSE(CMAKE_CROSSCOMPILING)
++ SET(FILE_TO_STRING_EXE ${CMAKE_CURRENT_SOURCE_DIR}/filetostring)
++ENDIF(CMAKE_CROSSCOMPILING)
++
+
+ MACRO (FILE_TO_STRING infile outfile var)
+ ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${outfile}
diff --git a/packages/wt/wt3-2.99.0/wgooglemap.patch b/packages/wt/wt3-2.99.0/wgooglemap.patch
new file mode 100644
index 0000000000..071597fba6
--- /dev/null
+++ b/packages/wt/wt3-2.99.0/wgooglemap.patch
@@ -0,0 +1,15 @@
+--- wt-2.99.0/src/Wt/WGoogleMap.C.orig 2009-03-12 09:52:56.000000000 +0100
++++ wt-2.99.0/src/Wt/WGoogleMap.C 2009-03-12 10:13:21.000000000 +0100
+@@ -18,6 +18,12 @@
+ #include <sstream>
+ #include <utility>
+ #include <iostream>
++
++#if not defined(_GLIBCXX_HAVE__SINL) && not defined(acosl)
++#define cosl cos
++#define acosl acos
++#define sinl sin
++#endif
+
+ using std::string;
+ using std::vector;
diff --git a/packages/wt/wt3_2.99.0.bb b/packages/wt/wt3_2.99.0.bb
new file mode 100644
index 0000000000..fea28494ca
--- /dev/null
+++ b/packages/wt/wt3_2.99.0.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "A C++ Web Toolkit"
+PRIORITY = "optional"
+SECTION = "devel"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.webtoolkit.eu/wt"
+DEPENDS = "boost zlib openssl"
+PR = "r0"
+
+# package wt3 is for wt 2.99 and wt 3.*
+# the api of these versions is incompatible with 2.*
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/witty/wt-${PV}.tar.gz \
+ file://src.patch;patch=1 \
+ file://ext.patch;patch=1 \
+ file://wgooglemap.patch;patch=1"
+
+CXXFLAGS += "-Dsinl=sin -Dcosl=cos -Dasinl=asin"
+
+FILES_${PN} += "${datadir}/Wt"
+FILES_${PN}-dev += "${datadir}/cmake-2.*"
+
+S = "${WORKDIR}/wt-${PV}"
+
+inherit cmake
+
+STAGE_TEMP = "${WORKDIR}/temp-staging"
+
+do_configure_append() {
+ ${BUILD_CXX} ${BUILD_CXXFLAGS} -o src/filetostring src/web/skeleton/FileToString.C
+}
+
+do_stage() {
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake DESTDIR="${STAGE_TEMP}" install
+ cp -pPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
+ cp -pPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}
+ cp -pPR ${STAGE_TEMP}/${datadir}/cmake-2.* ${STAGING_DATADIR}
+ rm -rf ${STAGE_TEMP}
+}
+
diff --git a/packages/wt/wt_2.2.3.bb b/packages/wt/wt_2.2.3.bb
new file mode 100644
index 0000000000..b9ab7580f8
--- /dev/null
+++ b/packages/wt/wt_2.2.3.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "A C++ Web Toolkit"
+PRIORITY = "optional"
+SECTION = "devel"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.webtoolkit.eu/wt"
+DEPENDS = "boost zlib openssl"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/witty/wt-${PV}.tar.gz \
+ file://cmakelist.patch;patch=1"
+
+FILES_${PN} += "${datadir}/Wt"
+FILES_${PN}-dev += "${datadir}/cmake-2.*"
+
+inherit cmake
+
+STAGE_TEMP = "${WORKDIR}/temp-staging"
+
+do_configure_append() {
+ ${BUILD_CXX} ${BUILD_CXXFLAGS} -o src/filetostring src/web/skeleton/FileToString.C
+}
+
+do_stage() {
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake DESTDIR="${STAGE_TEMP}" install
+ cp -pPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
+ cp -pPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}
+ cp -pPR ${STAGE_TEMP}/${datadir}/cmake-2.* ${STAGING_DATADIR}
+ rm -rf ${STAGE_TEMP}
+}
+
diff --git a/packages/xdiskusage/files/running_from_menu.patch b/packages/xdiskusage/files/running_from_menu.patch
new file mode 100644
index 0000000000..7d0c08ee37
--- /dev/null
+++ b/packages/xdiskusage/files/running_from_menu.patch
@@ -0,0 +1,14 @@
+--- a/xdiskusage.C 29 Sep 2004 07:32:12 -0000 1.20
++++ b/xdiskusage.C 13 Oct 2004 03:20:26 -0000 1.21
+@@ -261,7 +261,8 @@
+ OutputWindow* d = OutputWindow::make(argv[n++]);
+ if (d) d->show(argc,argv);
+ }
+- } else if (!isatty(0)) {
++ } else if (!isatty(0) && (n=getc(stdin))>=0) {
++ ungetc(n,stdin);
+ // test for pipe, if so read stdin:
+ OutputWindow* d = OutputWindow::make(0);
+ if (d) d->show(argc,argv);
+
+
diff --git a/packages/xdiskusage/files/xdiskusage.desktop b/packages/xdiskusage/files/xdiskusage.desktop
new file mode 100644
index 0000000000..ab4d2fd901
--- /dev/null
+++ b/packages/xdiskusage/files/xdiskusage.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=XDiskUsage
+GenericName=Disk Usage
+Comment=Utility showing disk usage
+Type=Application
+Exec=xdiskusage
+Icon=xdiskusage
+Categories=System;Filesystem;
+Terminal=false
+
diff --git a/packages/xdiskusage/files/xdiskusage.png b/packages/xdiskusage/files/xdiskusage.png
new file mode 100644
index 0000000000..43b1924ed6
--- /dev/null
+++ b/packages/xdiskusage/files/xdiskusage.png
Binary files differ
diff --git a/packages/xdiskusage/xdiskusage_1.48.bb b/packages/xdiskusage/xdiskusage_1.48.bb
new file mode 100644
index 0000000000..baac5f88a3
--- /dev/null
+++ b/packages/xdiskusage/xdiskusage_1.48.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Xdiskusage shows graphically what is using up your disk space"
+AUTHOR = "Bill Spitzak"
+HOMEPAGE = "http://xdiskusage.sourceforge.net/"
+SECTION = "x11/applications"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "fltk"
+
+SRC_URI = "http://xdiskusage.sourceforge.net/xdiskusage-${PV}.tgz \
+ file://running_from_menu.patch;patch=1 \
+ file://xdiskusage.desktop \
+ file://xdiskusage.png"
+
+EXTRA_OEMAKE = "CXXFLAGS="${CXXFLAGS} `fltk-config --cxxflags`" \
+ LDLIBS="`fltk-config --ldflags`""
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -d ${D}/${mandir}/man1
+ install -d ${D}/${datadir}/applications
+ install -d ${D}/${datadir}/pixmaps
+ install -m 0755 ${S}/xdiskusage ${D}/${bindir}/
+ install -m 0644 ${S}/xdiskusage.1 ${D}/${mandir}/man1/
+ install -m 0644 ${WORKDIR}/xdiskusage.desktop ${D}/${datadir}/applications/
+ install -m 0644 ${WORKDIR}/xdiskusage.png ${D}/${datadir}/pixmaps/
+}
diff --git a/packages/xfsprogs/libattr_2.4.43.bb b/packages/xfsprogs/libattr_2.4.43.bb
new file mode 100644
index 0000000000..99890313f5
--- /dev/null
+++ b/packages/xfsprogs/libattr_2.4.43.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "library functions to get attribute bits"
+HOMEPAGE = "http://oss.sgi.com/projects/xfs"
+LICENSE = "GPL"
+SECTION = "base"
+PR = "r0"
+DEPENDS = "gettext"
+
+SRC_URI = "ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_${PV}-1.tar.gz"
+S = "${WORKDIR}/attr-${PV}"
+
+PARALLEL_MAKE = ""
+inherit autotools
+EXTRA_OECONF = "--enable-gettext=no --enable-shared=yes"
+
+do_configure () {
+ export LIBTOOL="${STAGING_BINDIR_NATIVE}/${HOST_SYS}-libtool"
+ export DEBUG="-DNDEBUG"
+ oe_runconf
+}
+
+do_install () {
+ export DIST_ROOT=${D}
+ oe_runmake install
+ oe_libinstall -a libattr ${D}${libdir}
+ oe_libinstall -a libattr ${STAGING_LIBDIR}
+}
+
diff --git a/packages/xfsprogs/xfsprogs_2.8.16.bb b/packages/xfsprogs/xfsprogs_2.8.16.bb
index 603b6cbb08..13c96eade3 100644
--- a/packages/xfsprogs/xfsprogs_2.8.16.bb
+++ b/packages/xfsprogs/xfsprogs_2.8.16.bb
@@ -5,7 +5,7 @@ SECTION = "base"
PR = "r2"
DEPENDS = "e2fsprogs-libs"
-SRC_URI = "ftp://oss.sgi.com/projects/xfs/download/download/cmd_tars/xfsprogs_2.8.16-1.tar.gz"
+SRC_URI = "http://slackware.osuosl.org/slackware-12.0/source/a/xfsprogs/xfsprogs_2.8.16-1.tar.gz"
PARALLEL_MAKE = ""
inherit autotools
diff --git a/packages/xorg-driver/xf86-video-geode_2.11.0.bb b/packages/xorg-driver/xf86-video-geode_2.11.0.bb
new file mode 100644
index 0000000000..380ce2ea0b
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-geode_2.11.0.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+PE = "1"
+
+COMPATIBLE_HOST = 'i.86.*-linux'
+DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
diff --git a/packages/xorg-driver/xf86-video-glamo_git.bb b/packages/xorg-driver/xf86-video-glamo_git.bb
new file mode 100644
index 0000000000..fecba818a5
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-glamo_git.bb
@@ -0,0 +1,11 @@
+require xorg-driver-video.inc
+SRC_URI = "git://git.openmoko.org/git/xf86-video-glamo;protocol=git;branch=master"
+PV = "0.1+gitr${SRCREV}"
+PE = "1"
+
+DESCRIPTION = "X.Org X server -- fbdev display driver"
+
+S = "${WORKDIR}/git"
+
+ARM_INSTRUCTION_SET = "arm"
+
diff --git a/packages/xorg-driver/xf86-video-omapfb/omapfb-neon.diff b/packages/xorg-driver/xf86-video-omapfb/omapfb-neon.diff
new file mode 100644
index 0000000000..325ca66f0c
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-omapfb/omapfb-neon.diff
@@ -0,0 +1,146 @@
+--- /tmp/image-format-conversions.h 2009-02-03 10:18:04.000000000 +0100
++++ git/src/image-format-conversions.h 2009-02-03 10:19:18.000000000 +0100
+@@ -30,6 +30,8 @@
+ /* Basic C implementation of YV12/I420 to UYVY conversion */
+ void uv12_to_uyvy(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest);
+
++/* NEON implementation of YV12/I420 to UYVY conversion */
++void uv12_to_uyvy_neon(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest);
+
+ #endif /* __IMAGE_FORMAT_CONVERSIONS_H__ */
+
+--- /tmp/image-format-conversions.c 2009-02-03 10:18:04.000000000 +0100
++++ git/src/image-format-conversions.c 2009-02-03 10:16:47.000000000 +0100
+@@ -2,6 +2,7 @@
+ * Copyright 2008 Kalle Vahlman, <zuh@iki.fi>
+ * Ilpo Ruotsalainen, <lonewolf@iki.fi>
+ * Tuomas Kulve, <tuomas.kulve@movial.com>
++ * Ian Rickards, <ian.rickards@arm.com>
+ *
+ *
+ * Permission to use, copy, modify, distribute and sell this software and its
+@@ -89,3 +90,104 @@
+ }
+ }
+
++void uv12_to_uyvy_neon(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest)
++{
++ int x, y;
++ uint8_t *dest_even = dest;
++ uint8_t *dest_odd = dest + w * 2;
++ uint8_t *y_p_even = y_p;
++ uint8_t *y_p_odd = y_p + y_pitch;
++
++ /*ErrorF("in uv12_to_uyvy, w: %d, pitch: %d\n", w, pitch);*/
++ if (w<16)
++ {
++ for (y=0; y<h; y+=2)
++ {
++ for (x=0; x<w; x+=2)
++ {
++ /* Output two 2x1 macroblocks to form a 2x2 block from input */
++ uint8_t u_val = *u_p++;
++ uint8_t v_val = *v_p++;
++
++ /* Even row, first pixel */
++ *dest_even++ = u_val;
++ *dest_even++ = *y_p_even++;
++
++ /* Even row, second pixel */
++ *dest_even++ = v_val;
++ *dest_even++ = *y_p_even++;
++
++ /* Odd row, first pixel */
++ *dest_odd++ = u_val;
++ *dest_odd++ = *y_p_odd++;
++
++ /* Odd row, second pixel */
++ *dest_odd++ = v_val;
++ *dest_odd++ = *y_p_odd++;
++ }
++
++ dest_even += w * 2;
++ dest_odd += w * 2;
++
++ u_p += ((uv_pitch << 1) - w) >> 1;
++ v_p += ((uv_pitch << 1) - w) >> 1;
++
++ y_p_even += (y_pitch - w) + y_pitch;
++ y_p_odd += (y_pitch - w) + y_pitch;
++ }
++ }
++ else
++ {
++ for (y=0; y<h; y+=2)
++ {
++ x=w;
++ do {
++ // avoid using d8-d15 (q4-q7) aapcs callee-save registers
++ asm volatile (
++ "1:\n\t"
++ "vld1.u8 {d0}, [%[u_p]]!\n\t"
++ "sub %[x],%[x],#16\n\t"
++ "cmp %[x],#16\n\t"
++ "vld1.u8 {d1}, [%[v_p]]!\n\t"
++ "vld1.u8 {q1}, [%[y_p_even]]!\n\t"
++ "vzip.u8 d0, d1\n\t"
++ "vld1.u8 {q2}, [%[y_p_odd]]!\n\t"
++ // use 2-element struct stores to zip up y with y&v
++ "vst2.u8 {q0,q1}, [%[dest_even]]!\n\t"
++ "vmov.u8 q1, q2\n\t"
++ "vst2.u8 {q0,q1}, [%[dest_odd]]!\n\t"
++ "bhs 1b\n\t"
++ : [u_p] "+r" (u_p), [v_p] "+r" (v_p), [y_p_even] "+r" (y_p_even), [y_p_odd] "+r" (y_p_odd),
++ [dest_even] "+r" (dest_even), [dest_odd] "+r" (dest_odd),
++ [x] "+r" (x)
++ :
++ : "cc", "memory", "d0","d1","d2","d3","d4","d5"
++ );
++ if (x!=0)
++ {
++ // overlap final 16-pixel block to process requested width exactly
++ x = 16-x;
++ u_p -= x/2;
++ v_p -= x/2;
++ y_p_even -= x;
++ y_p_odd -= x;
++ dest_even -= x*2;
++ dest_odd -= x*2;
++ x = 16;
++ // do another 16-pixel block
++ }
++ }
++ while (x!=0);
++
++ dest_even += w * 2;
++ dest_odd += w * 2;
++
++ u_p += ((uv_pitch << 1) - w) >> 1;
++ v_p += ((uv_pitch << 1) - w) >> 1;
++
++ y_p_even += (y_pitch - w) + y_pitch;
++ y_p_odd += (y_pitch - w) + y_pitch;
++ }
++ }
++}
++
+--- /tmp/omapfb-xv-generic.c 2009-02-03 10:52:18.000000000 +0100
++++ git/src/omapfb-xv-generic.c 2009-02-03 10:52:24.000000000 +0100
+@@ -240,7 +240,7 @@
+ uint8_t *yb = buf;
+ uint8_t *ub = yb + (src_y_pitch * src_h);
+ uint8_t *vb = ub + (src_uv_pitch * (src_h / 2));
+- uv12_to_uyvy(src_w & ~15,
++ uv12_to_uyvy_neon(src_w & ~15,
+ src_h & ~15,
+ src_y_pitch,
+ src_uv_pitch,
+@@ -256,7 +256,7 @@
+ uint8_t *yb = buf;
+ uint8_t *vb = yb + (src_y_pitch * src_h);
+ uint8_t *ub = vb + (src_uv_pitch * (src_h / 2));
+- uv12_to_uyvy(src_w & ~15,
++ uv12_to_uyvy_neon(src_w & ~15,
+ src_h & ~15,
+ src_y_pitch,
+ src_uv_pitch,
diff --git a/packages/xorg-driver/xf86-video-omapfb_git.bb b/packages/xorg-driver/xf86-video-omapfb_git.bb
index e364ecc4c6..f718e7684e 100644
--- a/packages/xorg-driver/xf86-video-omapfb_git.bb
+++ b/packages/xorg-driver/xf86-video-omapfb_git.bb
@@ -2,13 +2,16 @@ require xorg-driver-video.inc
DESCRIPTION = "X.Org X server -- OMAP display driver"
-PR ="r19"
+PR ="r20"
SRCREV = "ef0b41c332a710fb33f996df77bd4a96b56878da"
PV = "0.0.1+${PR}+gitr${SRCREV}"
PE = "1"
-SRC_URI = "git://git.pingu.fi/xf86-video-omapfb.git;protocol=http"
+SRC_URI = "git://git.pingu.fi/xf86-video-omapfb.git;protocol=http \
+ "
+
+SRC_URI_append_armv7a = " file://omapfb-neon.diff;patch=1"
S = "${WORKDIR}/git"
diff --git a/packages/xorg-font/xorg-font-common.inc b/packages/xorg-font/xorg-font-common.inc
index 429b9907c0..c2ea41e8e0 100644
--- a/packages/xorg-font/xorg-font-common.inc
+++ b/packages/xorg-font/xorg-font-common.inc
@@ -19,6 +19,7 @@ do_configure_prepend() {
fi
}
+EXTRA_OEMAKE += "FCCACHE=/bin/true"
do_install_append() {
find ${D}${libdir}/X11/fonts -type f -name fonts.dir | xargs rm -f
find ${D}${libdir}/X11/fonts -type f -name fonts.scale | xargs rm -f
diff --git a/packages/xorg-lib/libxfont-native_1.3.2.bb b/packages/xorg-lib/libxfont-native_1.3.2.bb
index efd1e07d6a..deb66a91cf 100644
--- a/packages/xorg-lib/libxfont-native_1.3.2.bb
+++ b/packages/xorg-lib/libxfont-native_1.3.2.bb
@@ -2,6 +2,7 @@ require libxfont_${PV}.bb
DEPENDS = "xproto-native zlib-native fontcacheproto-native fontsproto-native \
libfontenc-native xtrans-native freetype-native util-macros-native"
+PROVIDES = "${P} ${PF} ${PN}"
PE = "1"
# no need for patch used in libxfont
diff --git a/packages/xorg-lib/pixman/pixman-0.13.2-neon1.patch b/packages/xorg-lib/pixman/pixman-0.13.2-neon1.patch
new file mode 100644
index 0000000000..b3bb762415
--- /dev/null
+++ b/packages/xorg-lib/pixman/pixman-0.13.2-neon1.patch
@@ -0,0 +1,1702 @@
+diff --git a/configure.ac b/configure.ac
+index 063f6eb..bada55c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -278,11 +278,12 @@ AC_SUBST(VMX_CFLAGS)
+ AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
+
+ dnl Check for ARM SIMD instructions
++ARM_SIMD_CFLAGS=""
+
+ have_arm_simd=no
+ AC_MSG_CHECKING(whether to use ARM SIMD assembler)
+ xserver_save_CFLAGS=$CFLAGS
+-CFLAGS="$CFLAGS $ARM_CFLAGS"
++CFLAGS="$CFLAGS $ARM_SIMD_CFLAGS"
+ AC_COMPILE_IFELSE([
+ int main () {
+ asm("uqadd8 r1, r1, r2");
+@@ -302,7 +303,7 @@ fi
+ if test $have_arm_simd = yes ; then
+ AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
+ else
+- ARM_CFLAGS=
++ ARM_SIMD_CFLAGS=
+ fi
+
+ AC_MSG_RESULT($have_arm_simd)
+@@ -310,9 +311,48 @@ if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
+ AC_MSG_ERROR([ARM SIMD intrinsics not detected])
+ fi
+
+-AC_SUBST(ARM_CFLAGS)
++dnl Check for ARM NEON instructions
++ARM_NEON_CFLAGS="-mcpu=cortex-a8 -mfpu=neon"
++
++have_arm_neon=no
++AC_MSG_CHECKING(whether to use ARM NEON)
++xserver_save_CFLAGS=$CFLAGS
++CFLAGS="$CFLAGS $ARM_NEON_CFLAGS"
++AC_COMPILE_IFELSE([
++#include <arm_neon.h>
++int main () {
++ uint8x8_t neon_test=vmov_n_u8(0);
++ return 0;
++}], have_arm_neon=yes)
++CFLAGS=$xserver_save_CFLAGS
++
++AC_ARG_ENABLE(arm-neon,
++ [AC_HELP_STRING([--disable-arm-neon],
++ [disable ARM NEON fast paths])],
++ [enable_arm_neon=$enableval], [enable_arm_neon=auto])
++
++if test $enable_arm_neon = no ; then
++ have_arm_neon=disabled
++fi
++
++if test $have_arm_neon = yes ; then
++ AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
++else
++ ARM_NEON_CFLAGS=
++fi
++
++AC_MSG_RESULT($have_arm_neon)
++if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
++ AC_MSG_ERROR([ARM NEON intrinsics not detected])
++fi
++
++
++AC_SUBST(ARM_SIMD_CFLAGS)
++AC_SUBST(ARM_NEON_CFLAGS)
+
+ AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
++AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
++
+
+
+ AC_ARG_ENABLE(gtk,
+diff --git a/pixman/Makefile.am b/pixman/Makefile.am
+index c4612ea..4c1ec6b 100644
+--- a/pixman/Makefile.am
++++ b/pixman/Makefile.am
+@@ -80,15 +80,26 @@ libpixman_sse2_la_LIBADD = $(DEP_LIBS)
+ libpixman_1_la_LIBADD += libpixman-sse2.la
+ endif
+
+-# arm code
++# arm simd code
+ if USE_ARM_SIMD
+ noinst_LTLIBRARIES += libpixman-arm-simd.la
+ libpixman_arm_simd_la_SOURCES = \
+ pixman-arm-simd.c \
+ pixman-arm-simd.h
+-libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) $(ARM_CFLAGS)
++libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) $(ARM_SIMD_CFLAGS)
+ libpixman_arm_simd_la_LIBADD = $(DEP_LIBS)
+ libpixman_1_la_LIBADD += libpixman-arm-simd.la
+ endif
+
++# arm neon code
++if USE_ARM_NEON
++noinst_LTLIBRARIES += libpixman-arm-neon.la
++libpixman_arm_neon_la_SOURCES = \
++ pixman-arm-neon.c \
++ pixman-arm-neon.h
++libpixman_arm_neon_la_CFLAGS = $(DEP_CFLAGS) $(ARM_NEON_CFLAGS)
++libpixman_arm_neon_la_LIBADD = $(DEP_LIBS)
++libpixman_1_la_LIBADD += libpixman-arm-neon.la
++endif
++
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+new file mode 100644
+index 0000000..10050e4
+--- /dev/null
++++ b/pixman/pixman-arm-neon.c
+@@ -0,0 +1,1387 @@
++/*
++ * Copyright © 2009 Mozilla Corporation
++ *
++ * 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 Mozilla Corporation not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Mozilla Corporation makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
++ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS 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.
++ *
++ * Author: Ian Rickards (ian.rickards@arm.com)
++ *
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include "pixman-arm-neon.h"
++
++#include <arm_neon.h>
++
++
++#if !defined(__ARMCC_VERSION) && !defined(FORCE_NO_NEON_INLINE_ASM)
++// [both armcc & gcc set __GNUC__]
++// Use GNU style inline asm on gcc, for best performance
++// Use intrinsics on armcc
++// This switch determines if any GNU style inline asm is allowed
++#define USE_NEON_INLINE_ASM
++#endif
++
++
++static force_inline uint8x8x4_t unpack0565(uint16x8_t rgb)
++{
++ uint16x8_t gb, b;
++ uint8x8x4_t res;
++
++ res.val[3] = vdup_n_u8(0);
++ gb = vshrq_n_u16(rgb, 5);
++ b = vshrq_n_u16(rgb, 5+6);
++ res.val[0] = vmovn_u16(rgb); // get low 5 bits
++ res.val[1] = vmovn_u16(gb); // get mid 6 bits
++ res.val[2] = vmovn_u16(b); // get top 5 bits
++
++ res.val[0] = vshl_n_u8(res.val[0], 3); // shift to top
++ res.val[1] = vshl_n_u8(res.val[1], 2); // shift to top
++ res.val[2] = vshl_n_u8(res.val[2], 3); // shift to top
++
++ res.val[0] = vsri_n_u8(res.val[0], res.val[0], 5);
++ res.val[1] = vsri_n_u8(res.val[1], res.val[1], 6);
++ res.val[2] = vsri_n_u8(res.val[2], res.val[2], 5);
++
++ return res;
++}
++
++static force_inline uint16x8_t pack0565(uint8x8x4_t s)
++{
++ uint16x8_t rgb, val_g, val_r;
++
++ rgb = vshll_n_u8(s.val[2],8);
++ val_g = vshll_n_u8(s.val[1],8);
++ val_r = vshll_n_u8(s.val[0],8);
++ rgb = vsriq_n_u16(rgb, val_g, 5);
++ rgb = vsriq_n_u16(rgb, val_r, 5+6);
++
++ return rgb;
++}
++
++static force_inline uint8x8_t neon2mul(uint8x8_t x, uint8x8_t alpha)
++{
++ uint16x8_t tmp,tmp2;
++ uint8x8_t res;
++
++ tmp = vmull_u8(x,alpha);
++ tmp2 = vrshrq_n_u16(tmp,8);
++ res = vraddhn_u16(tmp,tmp2);
++
++ return res;
++}
++
++static force_inline uint8x8x4_t neon8mul(uint8x8x4_t x, uint8x8_t alpha)
++{
++ uint16x8x4_t tmp;
++ uint8x8x4_t res;
++ uint16x8_t qtmp1,qtmp2;
++
++ tmp.val[0] = vmull_u8(x.val[0],alpha);
++ tmp.val[1] = vmull_u8(x.val[1],alpha);
++ tmp.val[2] = vmull_u8(x.val[2],alpha);
++ tmp.val[3] = vmull_u8(x.val[3],alpha);
++
++ qtmp1 = vrshrq_n_u16(tmp.val[0],8);
++ qtmp2 = vrshrq_n_u16(tmp.val[1],8);
++ res.val[0] = vraddhn_u16(tmp.val[0],qtmp1);
++ qtmp1 = vrshrq_n_u16(tmp.val[2],8);
++ res.val[1] = vraddhn_u16(tmp.val[1],qtmp2);
++ qtmp2 = vrshrq_n_u16(tmp.val[3],8);
++ res.val[2] = vraddhn_u16(tmp.val[2],qtmp1);
++ res.val[3] = vraddhn_u16(tmp.val[3],qtmp2);
++
++ return res;
++}
++
++static force_inline uint8x8x4_t neon8qadd(uint8x8x4_t x, uint8x8x4_t y)
++{
++ uint8x8x4_t res;
++
++ res.val[0] = vqadd_u8(x.val[0],y.val[0]);
++ res.val[1] = vqadd_u8(x.val[1],y.val[1]);
++ res.val[2] = vqadd_u8(x.val[2],y.val[2]);
++ res.val[3] = vqadd_u8(x.val[3],y.val[3]);
++
++ return res;
++}
++
++
++void
++fbCompositeSrcAdd_8000x8000neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint8_t *dstLine, *dst;
++ uint8_t *srcLine, *src;
++ int dstStride, srcStride;
++ uint16_t w;
++
++ fbComposeGetStart (pSrc, xSrc, ySrc, uint8_t, srcStride, srcLine, 1);
++ fbComposeGetStart (pDst, xDst, yDst, uint8_t, dstStride, dstLine, 1);
++
++ if (width>=8)
++ {
++ // Use overlapping 8-pixel method
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ uint8_t *keep_dst;
++
++#ifndef USE_NEON_INLINE_ASM
++ uint8x8_t sval,dval,temp;
++
++ sval = vld1_u8((void*)src);
++ dval = vld1_u8((void*)dst);
++ keep_dst = dst;
++
++ temp = vqadd_u8(dval,sval);
++
++ src += (w & 7);
++ dst += (w & 7);
++ w -= (w & 7);
++
++ while (w)
++ {
++ sval = vld1_u8((void*)src);
++ dval = vld1_u8((void*)dst);
++
++ vst1_u8((void*)keep_dst,temp);
++ keep_dst = dst;
++
++ temp = vqadd_u8(dval,sval);
++
++ src+=8;
++ dst+=8;
++ w-=8;
++ }
++ vst1_u8((void*)keep_dst,temp);
++#else
++ asm volatile (
++// avoid using d8-d15 (q4-q7) aapcs callee-save registers
++ "vld1.8 {d0}, [%[src]]\n\t"
++ "vld1.8 {d4}, [%[dst]]\n\t"
++ "mov %[keep_dst], %[dst]\n\t"
++
++ "and ip, %[w], #7\n\t"
++ "add %[src], %[src], ip\n\t"
++ "add %[dst], %[dst], ip\n\t"
++ "subs %[w], %[w], ip\n\t"
++ "b 9f\n\t"
++// LOOP
++ "2:\n\t"
++ "vld1.8 {d0}, [%[src]]!\n\t"
++ "vld1.8 {d4}, [%[dst]]!\n\t"
++ "vst1.8 {d20}, [%[keep_dst]]\n\t"
++ "sub %[keep_dst], %[dst], #8\n\t"
++ "subs %[w], %[w], #8\n\t"
++ "9:\n\t"
++ "vqadd.u8 d20, d0, d4\n\t"
++
++ "bne 2b\n\t"
++
++ "1:\n\t"
++ "vst1.8 {d20}, [%[keep_dst]]\n\t"
++
++ : [w] "+r" (w), [src] "+r" (src), [dst] "+r" (dst), [keep_dst] "+r" (keep_dst)
++ :
++ : "ip", "cc", "memory", "d0","d4",
++ "d20"
++ );
++#endif
++ }
++ }
++ else
++ {
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++ uint8x8_t sval, dval;
++ uint8_t *dst4, *dst2;
++
++ if (w&4)
++ {
++ sval = vreinterpret_u8_u32(vld1_lane_u32((void*)src,vreinterpret_u32_u8(sval),1));
++ dval = vreinterpret_u8_u32(vld1_lane_u32((void*)dst,vreinterpret_u32_u8(dval),1));
++ dst4=dst;
++ src+=4;
++ dst+=4;
++ }
++ if (w&2)
++ {
++ sval = vreinterpret_u8_u16(vld1_lane_u16((void*)src,vreinterpret_u16_u8(sval),1));
++ dval = vreinterpret_u8_u16(vld1_lane_u16((void*)dst,vreinterpret_u16_u8(dval),1));
++ dst2=dst;
++ src+=2;
++ dst+=2;
++ }
++ if (w&1)
++ {
++ sval = vld1_lane_u8((void*)src,sval,1);
++ dval = vld1_lane_u8((void*)dst,dval,1);
++ }
++
++ dval = vqadd_u8(dval,sval);
++
++ if (w&1)
++ vst1_lane_u8((void*)dst,dval,1);
++ if (w&2)
++ vst1_lane_u16((void*)dst2,vreinterpret_u16_u8(dval),1);
++ if (w&4)
++ vst1_lane_u32((void*)dst4,vreinterpret_u32_u8(dval),1);
++ }
++ }
++}
++
++
++void
++fbCompositeSrc_8888x8888neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint32_t *dstLine, *dst;
++ uint32_t *srcLine, *src;
++ int dstStride, srcStride;
++ uint32_t w;
++
++ fbComposeGetStart (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ fbComposeGetStart (pSrc, xSrc, ySrc, uint32_t, srcStride, srcLine, 1);
++
++ if (width>=8)
++ {
++ // Use overlapping 8-pixel method
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ uint32_t *keep_dst;
++
++#ifndef USE_NEON_INLINE_ASM
++ uint8x8x4_t sval,dval,temp;
++
++ sval = vld4_u8((void*)src);
++ dval = vld4_u8((void*)dst);
++ keep_dst = dst;
++
++ temp = neon8mul(dval,vmvn_u8(sval.val[3]));
++ temp = neon8qadd(sval,temp);
++
++ src += (w & 7);
++ dst += (w & 7);
++ w -= (w & 7);
++
++ while (w)
++ {
++ sval = vld4_u8((void*)src);
++ dval = vld4_u8((void*)dst);
++
++ vst4_u8((void*)keep_dst,temp);
++ keep_dst = dst;
++
++ temp = neon8mul(dval,vmvn_u8(sval.val[3]));
++ temp = neon8qadd(sval,temp);
++
++ src+=8;
++ dst+=8;
++ w-=8;
++ }
++ vst4_u8((void*)keep_dst,temp);
++#else
++ asm volatile (
++// avoid using d8-d15 (q4-q7) aapcs callee-save registers
++ "vld4.8 {d0-d3}, [%[src]]\n\t"
++ "vld4.8 {d4-d7}, [%[dst]]\n\t"
++ "mov %[keep_dst], %[dst]\n\t"
++
++ "and ip, %[w], #7\n\t"
++ "add %[src], %[src], ip, LSL#2\n\t"
++ "add %[dst], %[dst], ip, LSL#2\n\t"
++ "subs %[w], %[w], ip\n\t"
++ "b 9f\n\t"
++// LOOP
++ "2:\n\t"
++ "vld4.8 {d0-d3}, [%[src]]!\n\t"
++ "vld4.8 {d4-d7}, [%[dst]]!\n\t"
++ "vst4.8 {d20-d23}, [%[keep_dst]]\n\t"
++ "sub %[keep_dst], %[dst], #8*4\n\t"
++ "subs %[w], %[w], #8\n\t"
++ "9:\n\t"
++ "vmvn.8 d31, d3\n\t"
++ "vmull.u8 q10, d31, d4\n\t"
++ "vmull.u8 q11, d31, d5\n\t"
++ "vmull.u8 q12, d31, d6\n\t"
++ "vmull.u8 q13, d31, d7\n\t"
++ "vrshr.u16 q8, q10, #8\n\t"
++ "vrshr.u16 q9, q11, #8\n\t"
++ "vraddhn.u16 d20, q10, q8\n\t"
++ "vraddhn.u16 d21, q11, q9\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vraddhn.u16 d22, q12, q8\n\t"
++ "vraddhn.u16 d23, q13, q9\n\t"
++// result in d20-d23
++ "vqadd.u8 d20, d0, d20\n\t"
++ "vqadd.u8 d21, d1, d21\n\t"
++ "vqadd.u8 d22, d2, d22\n\t"
++ "vqadd.u8 d23, d3, d23\n\t"
++
++ "bne 2b\n\t"
++
++ "1:\n\t"
++ "vst4.8 {d20-d23}, [%[keep_dst]]\n\t"
++
++ : [w] "+r" (w), [src] "+r" (src), [dst] "+r" (dst), [keep_dst] "+r" (keep_dst)
++ :
++ : "ip", "cc", "memory", "d0","d1","d2","d3","d4","d5","d6","d7",
++ "d16","d17","d18","d19","d20","d21","d22","d23"
++ );
++#endif
++ }
++ }
++ else
++ {
++ uint8x8_t alpha_selector=vreinterpret_u8_u64(vcreate_u64(0x0707070703030303ULL));
++
++ // Handle width<8
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ while (w>=2)
++ {
++ uint8x8_t sval,dval;
++
++ /* two 32-bit pixels packed into D-reg; ad-hoc vectorization */
++ sval = vreinterpret_u8_u32(vld1_u32((void*)src));
++ dval = vreinterpret_u8_u32(vld1_u32((void*)dst));
++ dval = neon2mul(dval,vtbl1_u8(vmvn_u8(sval),alpha_selector));
++ vst1_u8((void*)dst,vqadd_u8(sval,dval));
++
++ src+=2;
++ dst+=2;
++ w-=2;
++ }
++
++ if (w)
++ {
++ uint8x8_t sval,dval;
++
++ /* single 32-bit pixel in lane 0 */
++ sval = vreinterpret_u8_u32(vld1_dup_u32((void*)src)); // only interested in lane 0
++ dval = vreinterpret_u8_u32(vld1_dup_u32((void*)dst)); // only interested in lane 0
++ dval = neon2mul(dval,vtbl1_u8(vmvn_u8(sval),alpha_selector));
++ vst1_lane_u32((void*)dst,vreinterpret_u32_u8(vqadd_u8(sval,dval)),0);
++ }
++ }
++ }
++}
++
++
++
++void
++fbCompositeSrc_x888x0565neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint16_t *dstLine, *dst;
++ uint32_t *srcLine, *src;
++ int dstStride, srcStride;
++ uint32_t w;
++
++ fbComposeGetStart (pSrc, xSrc, ySrc, uint32_t, srcStride, srcLine, 1);
++ fbComposeGetStart (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++
++ if (width>=8)
++ {
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ do {
++ while (w>=8)
++ {
++#ifndef USE_NEON_INLINE_ASM
++ vst1q_u16(dst, pack0565(vld4_u8((void*)src)));
++#else
++ asm volatile (
++ "vld4.8 {d4-d7}, [%[src]]\n\t"
++ "vshll.u8 q0, d6, #8\n\t"
++ "vshll.u8 q1, d5, #8\n\t"
++ "vsriq.u16 q0, q1, #5\t\n"
++ "vshll.u8 q1, d4, #8\n\t"
++ "vsriq.u16 q0, q1, #11\t\n"
++ "vst1.16 {q0}, [%[dst]]\n\t"
++ :
++ : [dst] "r" (dst), [src] "r" (src)
++ : "memory", "d0","d1","d2","d3","d4","d5","d6","d7"
++ );
++#endif
++ src+=8;
++ dst+=8;
++ w-=8;
++ }
++ if (w != 0)
++ {
++ src -= (8-w);
++ dst -= (8-w);
++ w = 8; // do another vector
++ }
++ } while (w!=0);
++ }
++ }
++ else
++ {
++ // Handle width<8
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ while (w>=2)
++ {
++ uint32x2_t sval, rgb, g, b;
++ sval = vld1_u32(src);
++ rgb = vshr_n_u32(sval,8-5); // r (5 bits)
++ g = vshr_n_u32(sval,8+8-6); // g to bottom byte
++ rgb = vsli_n_u32(rgb, g, 5);
++ b = vshr_n_u32(sval,8+8+8-5); // b to bottom byte
++ rgb = vsli_n_u32(rgb, b, 11);
++ vst1_lane_u16(dst++,vreinterpret_u16_u32(rgb),0);
++ vst1_lane_u16(dst++,vreinterpret_u16_u32(rgb),2);
++ src+=2;
++ w-=2;
++ }
++ if (w)
++ {
++ uint32x2_t sval, rgb, g, b;
++ sval = vld1_dup_u32(src);
++ rgb = vshr_n_u32(sval,8-5); // r (5 bits)
++ g = vshr_n_u32(sval,8+8-6); // g to bottom byte
++ rgb = vsli_n_u32(rgb, g, 5);
++ b = vshr_n_u32(sval,8+8+8-5); // b to bottom byte
++ rgb = vsli_n_u32(rgb, b, 11);
++ vst1_lane_u16(dst++,vreinterpret_u16_u32(rgb),0);
++ }
++ }
++ }
++}
++
++
++void
++fbCompositeSrc_8888x8x8888neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint32_t *dstLine, *dst;
++ uint32_t *srcLine, *src;
++ uint32_t mask;
++ int dstStride, srcStride;
++ uint32_t w;
++ uint8x8_t mask_alpha;
++
++ fbComposeGetStart (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ fbComposeGetStart (pSrc, xSrc, ySrc, uint32_t, srcStride, srcLine, 1);
++
++ fbComposeGetSolid (pMask, mask, pDst->bits.format);
++ mask_alpha = vdup_n_u8((mask) >> 24);
++
++ if (width>=8)
++ {
++ // Use overlapping 8-pixel method
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ uint32_t *keep_dst;
++
++#ifndef USE_NEON_INLINE_ASM
++ uint8x8x4_t sval,dval,temp;
++
++ sval = vld4_u8((void*)src);
++ dval = vld4_u8((void*)dst);
++ keep_dst = dst;
++
++ sval = neon8mul(sval,mask_alpha);
++ temp = neon8mul(dval,vmvn_u8(sval.val[3]));
++ temp = neon8qadd(sval,temp);
++
++ src += (w & 7);
++ dst += (w & 7);
++ w -= (w & 7);
++
++ while (w)
++ {
++ sval = vld4_u8((void*)src);
++ dval = vld4_u8((void*)dst);
++
++ vst4_u8((void*)keep_dst,temp);
++ keep_dst = dst;
++
++ sval = neon8mul(sval,mask_alpha);
++ temp = neon8mul(dval,vmvn_u8(sval.val[3]));
++ temp = neon8qadd(sval,temp);
++
++ src+=8;
++ dst+=8;
++ w-=8;
++ }
++ vst4_u8((void*)keep_dst,temp);
++#else
++ asm volatile (
++// avoid using d8-d15 (q4-q7) aapcs callee-save registers
++ "vdup.32 d30, %[mask]\n\t"
++ "vdup.8 d30, d30[3]\n\t"
++
++ "vld4.8 {d0-d3}, [%[src]]\n\t"
++ "vld4.8 {d4-d7}, [%[dst]]\n\t"
++ "mov %[keep_dst], %[dst]\n\t"
++
++ "and ip, %[w], #7\n\t"
++ "add %[src], %[src], ip, LSL#2\n\t"
++ "add %[dst], %[dst], ip, LSL#2\n\t"
++ "subs %[w], %[w], ip\n\t"
++ "b 9f\n\t"
++// LOOP
++ "2:\n\t"
++ "vld4.8 {d0-d3}, [%[src]]!\n\t"
++ "vld4.8 {d4-d7}, [%[dst]]!\n\t"
++ "vst4.8 {d20-d23}, [%[keep_dst]]\n\t"
++ "sub %[keep_dst], %[dst], #8*4\n\t"
++ "subs %[w], %[w], #8\n\t"
++
++ "9:\n\t"
++ "vmull.u8 q10, d30, d0\n\t"
++ "vmull.u8 q11, d30, d1\n\t"
++ "vmull.u8 q12, d30, d2\n\t"
++ "vmull.u8 q13, d30, d3\n\t"
++ "vrshr.u16 q8, q10, #8\n\t"
++ "vrshr.u16 q9, q11, #8\n\t"
++ "vraddhn.u16 d0, q10, q8\n\t"
++ "vraddhn.u16 d1, q11, q9\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d3, q13, q9\n\t"
++ "vraddhn.u16 d2, q12, q8\n\t"
++
++ "vmvn.8 d31, d3\n\t"
++ "vmull.u8 q10, d31, d4\n\t"
++ "vmull.u8 q11, d31, d5\n\t"
++ "vmull.u8 q12, d31, d6\n\t"
++ "vmull.u8 q13, d31, d7\n\t"
++ "vrshr.u16 q8, q10, #8\n\t"
++ "vrshr.u16 q9, q11, #8\n\t"
++ "vraddhn.u16 d20, q10, q8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d21, q11, q9\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vraddhn.u16 d22, q12, q8\n\t"
++ "vraddhn.u16 d23, q13, q9\n\t"
++// result in d20-d23
++ "vqadd.u8 d20, d0, d20\n\t"
++ "vqadd.u8 d21, d1, d21\n\t"
++ "vqadd.u8 d22, d2, d22\n\t"
++ "vqadd.u8 d23, d3, d23\n\t"
++
++ "bne 2b\n\t"
++
++ "1:\n\t"
++ "vst4.8 {d20-d23}, [%[keep_dst]]\n\t"
++
++ : [w] "+r" (w), [src] "+r" (src), [dst] "+r" (dst), [keep_dst] "+r" (keep_dst)
++ : [mask] "r" (mask)
++ : "ip", "cc", "memory", "d0","d1","d2","d3","d4","d5","d6","d7",
++ "d16","d17","d18","d19","d20","d21","d22","d23","d24","d25","d26","d27",
++ "d30","d31"
++ );
++#endif
++ }
++ }
++ else
++ {
++ uint8x8_t alpha_selector=vreinterpret_u8_u64(vcreate_u64(0x0707070703030303ULL));
++
++ // Handle width<8
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ src = srcLine;
++ srcLine += srcStride;
++ w = width;
++
++ while (w>=2)
++ {
++ uint8x8_t sval,dval;
++
++ sval = vreinterpret_u8_u32(vld1_u32((void*)src));
++ dval = vreinterpret_u8_u32(vld1_u32((void*)dst));
++
++ /* sval * const alpha_mul */
++ sval = neon2mul(sval,mask_alpha);
++
++ /* dval * 255-(src alpha) */
++ dval = neon2mul(dval,vtbl1_u8(vmvn_u8(sval), alpha_selector));
++
++ vst1_u8((void*)dst,vqadd_u8(sval,dval));
++
++ src+=2;
++ dst+=2;
++ w-=2;
++ }
++
++ if (w)
++ {
++ uint8x8_t sval,dval;
++
++ sval = vreinterpret_u8_u32(vld1_dup_u32((void*)src));
++ dval = vreinterpret_u8_u32(vld1_dup_u32((void*)dst));
++
++ /* sval * const alpha_mul */
++ sval = neon2mul(sval,mask_alpha);
++
++ /* dval * 255-(src alpha) */
++ dval = neon2mul(dval,vtbl1_u8(vmvn_u8(sval), alpha_selector));
++
++ vst1_lane_u32((void*)dst,vreinterpret_u32_u8(vqadd_u8(sval,dval)),0);
++ }
++ }
++ }
++}
++
++
++
++void
++fbCompositeSolidMask_nx8x0565neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint32_t src, srca;
++ uint16_t *dstLine, *dst;
++ uint8_t *maskLine, *mask;
++ int dstStride, maskStride;
++ uint32_t w;
++ uint8x8_t sval2;
++ uint8x8x4_t sval8;
++
++ fbComposeGetSolid(pSrc, src, pDst->bits.format);
++
++ srca = src >> 24;
++ if (src == 0)
++ return;
++
++ sval2=vreinterpret_u8_u32(vdup_n_u32(src));
++ sval8.val[0]=vdup_lane_u8(sval2,0);
++ sval8.val[1]=vdup_lane_u8(sval2,1);
++ sval8.val[2]=vdup_lane_u8(sval2,2);
++ sval8.val[3]=vdup_lane_u8(sval2,3);
++
++ fbComposeGetStart (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ fbComposeGetStart (pMask, xMask, yMask, uint8_t, maskStride, maskLine, 1);
++
++ if (width>=8)
++ {
++ // Use overlapping 8-pixel method, modified to avoid rewritten dest being reused
++ while (height--)
++ {
++ uint16_t *keep_dst;
++
++ dst = dstLine;
++ dstLine += dstStride;
++ mask = maskLine;
++ maskLine += maskStride;
++ w = width;
++
++#ifndef USE_NEON_INLINE_ASM
++ uint8x8_t alpha;
++ uint16x8_t dval, temp;
++ uint8x8x4_t sval8temp;
++
++ alpha = vld1_u8((void*)mask);
++ dval = vld1q_u16((void*)dst);
++ keep_dst = dst;
++
++ sval8temp = neon8mul(sval8,alpha);
++ temp = pack0565(neon8qadd(sval8temp,neon8mul(unpack0565(dval),vmvn_u8(sval8temp.val[3]))));
++
++ mask += (w & 7);
++ dst += (w & 7);
++ w -= (w & 7);
++
++ while (w)
++ {
++ dval = vld1q_u16((void*)dst);
++ alpha = vld1_u8((void*)mask);
++
++ vst1q_u16((void*)keep_dst,temp);
++ keep_dst = dst;
++
++ sval8temp = neon8mul(sval8,alpha);
++ temp = pack0565(neon8qadd(sval8temp,neon8mul(unpack0565(dval),vmvn_u8(sval8temp.val[3]))));
++
++ mask+=8;
++ dst+=8;
++ w-=8;
++ }
++ vst1q_u16((void*)keep_dst,temp);
++#else
++ asm volatile (
++ "vdup.32 d0, %[src]\n\t"
++ "vdup.8 d1, d0[1]\n\t"
++ "vdup.8 d2, d0[2]\n\t"
++ "vdup.8 d3, d0[3]\n\t"
++ "vdup.8 d0, d0[0]\n\t"
++
++ "vld1.8 {q12}, [%[dst]]\n\t"
++ "vld1.8 {d31}, [%[mask]]\n\t"
++ "mov %[keep_dst], %[dst]\n\t"
++
++ "and ip, %[w], #7\n\t"
++ "add %[mask], %[mask], ip\n\t"
++ "add %[dst], %[dst], ip, LSL#1\n\t"
++ "subs %[w], %[w], ip\n\t"
++ "b 9f\n\t"
++// LOOP
++ "2:\n\t"
++
++ "vld1.16 {q12}, [%[dst]]!\n\t"
++ "vld1.8 {d31}, [%[mask]]!\n\t"
++ "vst1.16 {q10}, [%[keep_dst]]\n\t"
++ "sub %[keep_dst], %[dst], #8*2\n\t"
++ "subs %[w], %[w], #8\n\t"
++ "9:\n\t"
++// expand 0565 q12 to 8888 {d4-d7}
++ "vmovn.u16 d4, q12\t\n"
++ "vshr.u16 q11, q12, #5\t\n"
++ "vshr.u16 q10, q12, #6+5\t\n"
++ "vmovn.u16 d5, q11\t\n"
++ "vmovn.u16 d6, q10\t\n"
++ "vshl.u8 d4, d4, #3\t\n"
++ "vshl.u8 d5, d5, #2\t\n"
++ "vshl.u8 d6, d6, #3\t\n"
++ "vsri.u8 d4, d4, #5\t\n"
++ "vsri.u8 d5, d5, #6\t\n"
++ "vsri.u8 d6, d6, #5\t\n"
++
++ "vmull.u8 q10, d31, d0\n\t"
++ "vmull.u8 q11, d31, d1\n\t"
++ "vmull.u8 q12, d31, d2\n\t"
++ "vmull.u8 q13, d31, d3\n\t"
++ "vrshr.u16 q8, q10, #8\n\t"
++ "vrshr.u16 q9, q11, #8\n\t"
++ "vraddhn.u16 d20, q10, q8\n\t"
++ "vraddhn.u16 d21, q11, q9\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d23, q13, q9\n\t"
++ "vraddhn.u16 d22, q12, q8\n\t"
++
++// duplicate in 4/2/1 & 8pix vsns
++ "vmvn.8 d30, d23\n\t"
++ "vmull.u8 q14, d30, d6\n\t"
++ "vmull.u8 q13, d30, d5\n\t"
++ "vmull.u8 q12, d30, d4\n\t"
++ "vrshr.u16 q8, q14, #8\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vraddhn.u16 d6, q14, q8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d5, q13, q9\n\t"
++ "vqadd.u8 d6, d6, d22\n\t" // moved up
++ "vraddhn.u16 d4, q12, q8\n\t"
++// intentionally don't calculate alpha
++// result in d4-d6
++
++// "vqadd.u8 d6, d6, d22\n\t" ** moved up
++ "vqadd.u8 d5, d5, d21\n\t"
++ "vqadd.u8 d4, d4, d20\n\t"
++
++// pack 8888 {d20-d23} to 0565 q10
++ "vshll.u8 q10, d6, #8\n\t"
++ "vshll.u8 q3, d5, #8\n\t"
++ "vshll.u8 q2, d4, #8\n\t"
++ "vsri.u16 q10, q3, #5\t\n"
++ "vsri.u16 q10, q2, #11\t\n"
++
++ "bne 2b\n\t"
++
++ "1:\n\t"
++ "vst1.16 {q10}, [%[keep_dst]]\n\t"
++
++ : [w] "+r" (w), [dst] "+r" (dst), [mask] "+r" (mask), [keep_dst] "+r" (keep_dst)
++ : [src] "r" (src)
++ : "ip", "cc", "memory", "d0","d1","d2","d3","d4","d5","d6","d7",
++ "d16","d17","d18","d19","d20","d21","d22","d23","d24","d25","d26","d27","d28","d29",
++ "d30","d31"
++ );
++#endif
++ }
++ }
++ else
++ {
++ while (height--)
++ {
++ void *dst4, *dst2;
++
++ dst = dstLine;
++ dstLine += dstStride;
++ mask = maskLine;
++ maskLine += maskStride;
++ w = width;
++
++
++#ifndef USE_NEON_INLINE_ASM
++ uint8x8_t alpha;
++ uint16x8_t dval, temp;
++ uint8x8x4_t sval8temp;
++
++ if (w&4)
++ {
++ alpha = vreinterpret_u8_u32(vld1_lane_u32((void*)mask,vreinterpret_u32_u8(alpha),1));
++ dval = vreinterpretq_u16_u64(vld1q_lane_u64((void*)dst,vreinterpretq_u64_u16(dval),1));
++ dst4=dst;
++ mask+=4;
++ dst+=4;
++ }
++ if (w&2)
++ {
++ alpha = vreinterpret_u8_u16(vld1_lane_u16((void*)mask,vreinterpret_u16_u8(alpha),1));
++ dval = vreinterpretq_u16_u32(vld1q_lane_u32((void*)dst,vreinterpretq_u32_u16(dval),1));
++ dst2=dst;
++ mask+=2;
++ dst+=2;
++ }
++ if (w&1)
++ {
++ alpha = vld1_lane_u8((void*)mask,alpha,1);
++ dval = vld1q_lane_u16((void*)dst,dval,1);
++ }
++
++ sval8temp = neon8mul(sval8,alpha);
++ temp = pack0565(neon8qadd(sval8temp,neon8mul(unpack0565(dval),vmvn_u8(sval8temp.val[3]))));
++
++ if (w&1)
++ vst1q_lane_u16((void*)dst,temp,1);
++ if (w&2)
++ vst1q_lane_u32((void*)dst2,vreinterpretq_u32_u16(temp),1);
++ if (w&4)
++ vst1q_lane_u64((void*)dst4,vreinterpretq_u64_u16(temp),1);
++#else
++ asm volatile (
++ "vdup.32 d0, %[src]\n\t"
++ "vdup.8 d1, d0[1]\n\t"
++ "vdup.8 d2, d0[2]\n\t"
++ "vdup.8 d3, d0[3]\n\t"
++ "vdup.8 d0, d0[0]\n\t"
++
++ "tst %[w], #4\t\n"
++ "beq skip_load4\t\n"
++
++ "vld1.64 {d25}, [%[dst]]\n\t"
++ "vld1.32 {d31[1]}, [%[mask]]\n\t"
++ "mov %[dst4], %[dst]\t\n"
++ "add %[mask], %[mask], #4\t\n"
++ "add %[dst], %[dst], #4*2\t\n"
++
++ "skip_load4:\t\n"
++ "tst %[w], #2\t\n"
++ "beq skip_load2\t\n"
++ "vld1.32 {d24[1]}, [%[dst]]\n\t"
++ "vld1.16 {d31[1]}, [%[mask]]\n\t"
++ "mov %[dst2], %[dst]\t\n"
++ "add %[mask], %[mask], #2\t\n"
++ "add %[dst], %[dst], #2*2\t\n"
++
++ "skip_load2:\t\n"
++ "tst %[w], #1\t\n"
++ "beq skip_load1\t\n"
++ "vld1.16 {d24[1]}, [%[dst]]\n\t"
++ "vld1.8 {d31[1]}, [%[mask]]\n\t"
++
++ "skip_load1:\t\n"
++// expand 0565 q12 to 8888 {d4-d7}
++ "vmovn.u16 d4, q12\t\n"
++ "vshr.u16 q11, q12, #5\t\n"
++ "vshr.u16 q10, q12, #6+5\t\n"
++ "vmovn.u16 d5, q11\t\n"
++ "vmovn.u16 d6, q10\t\n"
++ "vshl.u8 d4, d4, #3\t\n"
++ "vshl.u8 d5, d5, #2\t\n"
++ "vshl.u8 d6, d6, #3\t\n"
++ "vsri.u8 d4, d4, #5\t\n"
++ "vsri.u8 d5, d5, #6\t\n"
++ "vsri.u8 d6, d6, #5\t\n"
++
++ "vmull.u8 q10, d31, d0\n\t"
++ "vmull.u8 q11, d31, d1\n\t"
++ "vmull.u8 q12, d31, d2\n\t"
++ "vmull.u8 q13, d31, d3\n\t"
++ "vrshr.u16 q8, q10, #8\n\t"
++ "vrshr.u16 q9, q11, #8\n\t"
++ "vraddhn.u16 d20, q10, q8\n\t"
++ "vraddhn.u16 d21, q11, q9\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d23, q13, q9\n\t"
++ "vraddhn.u16 d22, q12, q8\n\t"
++
++// duplicate in 4/2/1 & 8pix vsns
++ "vmvn.8 d30, d23\n\t"
++ "vmull.u8 q14, d30, d6\n\t"
++ "vmull.u8 q13, d30, d5\n\t"
++ "vmull.u8 q12, d30, d4\n\t"
++ "vrshr.u16 q8, q14, #8\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vraddhn.u16 d6, q14, q8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d5, q13, q9\n\t"
++ "vqadd.u8 d6, d6, d22\n\t" // moved up
++ "vraddhn.u16 d4, q12, q8\n\t"
++// intentionally don't calculate alpha
++// result in d4-d6
++
++// "vqadd.u8 d6, d6, d22\n\t" ** moved up
++ "vqadd.u8 d5, d5, d21\n\t"
++ "vqadd.u8 d4, d4, d20\n\t"
++
++// pack 8888 {d20-d23} to 0565 q10
++ "vshll.u8 q10, d6, #8\n\t"
++ "vshll.u8 q3, d5, #8\n\t"
++ "vshll.u8 q2, d4, #8\n\t"
++ "vsri.u16 q10, q3, #5\t\n"
++ "vsri.u16 q10, q2, #11\t\n"
++
++ "tst %[w], #1\n\t"
++ "beq skip_store1\t\n"
++ "vst1.16 {d20[1]}, [%[dst]]\t\n"
++ "skip_store1:\t\n"
++ "tst %[w], #2\n\t"
++ "beq skip_store2\t\n"
++ "vst1.32 {d20[1]}, [%[dst2]]\t\n"
++ "skip_store2:\t\n"
++ "tst %[w], #4\n\t"
++ "beq skip_store4\t\n"
++ "vst1.16 {d21}, [%[dst4]]\t\n"
++ "skip_store4:\t\n"
++
++ : [w] "+r" (w), [dst] "+r" (dst), [mask] "+r" (mask), [dst4] "+r" (dst4), [dst2] "+r" (dst2)
++ : [src] "r" (src)
++ : "ip", "cc", "memory", "d0","d1","d2","d3","d4","d5","d6","d7",
++ "d16","d17","d18","d19","d20","d21","d22","d23","d24","d25","d26","d27","d28","d29",
++ "d30","d31"
++ );
++#endif
++ }
++ }
++}
++
++
++void
++fbCompositeSolidMask_nx8x8888neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint32_t src, srca;
++ uint32_t *dstLine, *dst;
++ uint8_t *maskLine, *mask;
++ int dstStride, maskStride;
++ uint32_t w;
++ uint8x8_t sval2;
++ uint8x8x4_t sval8;
++ uint8x8_t mask_selector=vreinterpret_u8_u64(vcreate_u64(0x0101010100000000ULL));
++ uint8x8_t alpha_selector=vreinterpret_u8_u64(vcreate_u64(0x0707070703030303ULL));
++
++ fbComposeGetSolid(pSrc, src, pDst->bits.format);
++
++ srca = src >> 24;
++ if (src == 0)
++ return;
++
++ sval2=vreinterpret_u8_u32(vdup_n_u32(src));
++ sval8.val[0]=vdup_lane_u8(sval2,0);
++ sval8.val[1]=vdup_lane_u8(sval2,1);
++ sval8.val[2]=vdup_lane_u8(sval2,2);
++ sval8.val[3]=vdup_lane_u8(sval2,3);
++
++ fbComposeGetStart (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ fbComposeGetStart (pMask, xMask, yMask, uint8_t, maskStride, maskLine, 1);
++
++ if (width>=8)
++ {
++ // Use overlapping 8-pixel method, modified to avoid rewritten dest being reused
++ while (height--)
++ {
++ uint32_t *keep_dst;
++
++ dst = dstLine;
++ dstLine += dstStride;
++ mask = maskLine;
++ maskLine += maskStride;
++ w = width;
++
++#ifndef USE_NEON_INLINE_ASM
++ uint8x8_t alpha;
++ uint8x8x4_t dval, temp;
++
++ alpha = vld1_u8((void*)mask);
++ dval = vld4_u8((void*)dst);
++ keep_dst = dst;
++
++ temp = neon8mul(sval8,alpha);
++ dval = neon8mul(dval,vmvn_u8(temp.val[3]));
++ temp = neon8qadd(temp,dval);
++
++ mask += (w & 7);
++ dst += (w & 7);
++ w -= (w & 7);
++
++ while (w)
++ {
++ alpha = vld1_u8((void*)mask);
++ dval = vld4_u8((void*)dst);
++
++ vst4_u8((void*)keep_dst,temp);
++ keep_dst = dst;
++
++ temp = neon8mul(sval8,alpha);
++ dval = neon8mul(dval,vmvn_u8(temp.val[3]));
++ temp = neon8qadd(temp,dval);
++
++ mask+=8;
++ dst+=8;
++ w-=8;
++ }
++ vst4_u8((void*)keep_dst,temp);
++#else
++ asm volatile (
++ "vdup.32 d0, %[src]\n\t"
++ "vdup.8 d1, d0[1]\n\t"
++ "vdup.8 d2, d0[2]\n\t"
++ "vdup.8 d3, d0[3]\n\t"
++ "vdup.8 d0, d0[0]\n\t"
++
++ "vld4.8 {d4-d7}, [%[dst]]\n\t"
++ "vld1.8 {d31}, [%[mask]]\n\t"
++ "mov %[keep_dst], %[dst]\n\t"
++
++ "and ip, %[w], #7\n\t"
++ "add %[mask], %[mask], ip\n\t"
++ "add %[dst], %[dst], ip, LSL#2\n\t"
++ "subs %[w], %[w], ip\n\t"
++ "b 9f\n\t"
++// LOOP
++ "2:\n\t"
++ "vld4.8 {d4-d7}, [%[dst]]!\n\t"
++ "vld1.8 {d31}, [%[mask]]!\n\t"
++ "vst4.8 {d20-d23}, [%[keep_dst]]\n\t"
++ "sub %[keep_dst], %[dst], #8*4\n\t"
++ "subs %[w], %[w], #8\n\t"
++ "9:\n\t"
++
++ "vmull.u8 q10, d31, d0\n\t"
++ "vmull.u8 q11, d31, d1\n\t"
++ "vmull.u8 q12, d31, d2\n\t"
++ "vmull.u8 q13, d31, d3\n\t"
++ "vrshr.u16 q8, q10, #8\n\t"
++ "vrshr.u16 q9, q11, #8\n\t"
++ "vraddhn.u16 d20, q10, q8\n\t"
++ "vraddhn.u16 d21, q11, q9\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vraddhn.u16 d23, q13, q9\n\t"
++ "vraddhn.u16 d22, q12, q8\n\t"
++
++ "vmvn.8 d30, d23\n\t"
++ "vmull.u8 q12, d30, d4\n\t"
++ "vmull.u8 q13, d30, d5\n\t"
++ "vmull.u8 q14, d30, d6\n\t"
++ "vmull.u8 q15, d30, d7\n\t"
++
++ "vrshr.u16 q8, q12, #8\n\t"
++ "vrshr.u16 q9, q13, #8\n\t"
++ "vraddhn.u16 d4, q12, q8\n\t"
++ "vrshr.u16 q8, q14, #8\n\t"
++ "vraddhn.u16 d5, q13, q9\n\t"
++ "vrshr.u16 q9, q15, #8\n\t"
++ "vraddhn.u16 d6, q14, q8\n\t"
++ "vraddhn.u16 d7, q15, q9\n\t"
++// result in d4-d7
++
++ "vqadd.u8 d20, d4, d20\n\t"
++ "vqadd.u8 d21, d5, d21\n\t"
++ "vqadd.u8 d22, d6, d22\n\t"
++ "vqadd.u8 d23, d7, d23\n\t"
++
++ "bne 2b\n\t"
++
++ "1:\n\t"
++ "vst4.8 {d20-d23}, [%[keep_dst]]\n\t"
++
++ : [w] "+r" (w), [dst] "+r" (dst), [mask] "+r" (mask), [keep_dst] "+r" (keep_dst)
++ : [src] "r" (src)
++ : "ip", "cc", "memory", "d0","d1","d2","d3","d4","d5","d6","d7",
++ "d16","d17","d18","d19","d20","d21","d22","d23","d24","d25","d26","d27","d28","d29",
++ "d30","d31"
++ );
++#endif
++ }
++ }
++ else
++ {
++ while (height--)
++ {
++ uint8x8_t alpha;
++
++ dst = dstLine;
++ dstLine += dstStride;
++ mask = maskLine;
++ maskLine += maskStride;
++ w = width;
++
++ while (w>=2)
++ {
++ uint8x8_t dval, temp, res;
++
++ alpha = vtbl1_u8(vreinterpret_u8_u16(vld1_dup_u16((void*)mask)), mask_selector);
++ dval = vld1_u8((void*)dst);
++
++ temp = neon2mul(sval2,alpha);
++ res = vqadd_u8(temp,neon2mul(dval,vtbl1_u8(vmvn_u8(temp), alpha_selector)));
++
++ vst1_u8((void*)dst,res);
++
++ mask+=2;
++ dst+=2;
++ w-=2;
++ }
++ if (w)
++ {
++ uint8x8_t dval, temp, res;
++
++ alpha = vtbl1_u8(vld1_dup_u8((void*)mask), mask_selector);
++ dval = vreinterpret_u8_u32(vld1_dup_u32((void*)dst));
++
++ temp = neon2mul(sval2,alpha);
++ res = vqadd_u8(temp,neon2mul(dval,vtbl1_u8(vmvn_u8(temp), alpha_selector)));
++
++ vst1_lane_u32((void*)dst,vreinterpret_u32_u8(res),0);
++ }
++ }
++ }
++}
++
++
++void
++fbCompositeSrcAdd_8888x8x8neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ uint8_t *dstLine, *dst;
++ uint8_t *maskLine, *mask;
++ int dstStride, maskStride;
++ uint32_t w;
++ uint32_t src;
++ uint8x8_t sa;
++
++ fbComposeGetStart (pDst, xDst, yDst, uint8_t, dstStride, dstLine, 1);
++ fbComposeGetStart (pMask, xMask, yMask, uint8_t, maskStride, maskLine, 1);
++ fbComposeGetSolid (pSrc, src, pDst->bits.format);
++ sa = vdup_n_u8((src) >> 24);
++
++ if (width>=8)
++ {
++ // Use overlapping 8-pixel method, modified to avoid rewritten dest being reused
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ mask = maskLine;
++ maskLine += maskStride;
++ w = width;
++
++ uint8x8_t mval, dval, res;
++ uint8_t *keep_dst;
++
++ mval = vld1_u8((void *)mask);
++ dval = vld1_u8((void *)dst);
++ keep_dst = dst;
++
++ res = vqadd_u8(neon2mul(mval,sa),dval);
++
++ mask += (w & 7);
++ dst += (w & 7);
++ w -= w & 7;
++
++ while (w)
++ {
++ mval = vld1_u8((void *)mask);
++ dval = vld1_u8((void *)dst);
++ vst1_u8((void *)keep_dst, res);
++ keep_dst = dst;
++
++ res = vqadd_u8(neon2mul(mval,sa),dval);
++
++ mask += 8;
++ dst += 8;
++ w -= 8;
++ }
++ vst1_u8((void *)keep_dst, res);
++ }
++ }
++ else
++ {
++ // Use 4/2/1 load/store method to handle 1-7 pixels
++ while (height--)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++ mask = maskLine;
++ maskLine += maskStride;
++ w = width;
++
++ uint8x8_t mval, dval, res;
++ uint8_t *dst4, *dst2;
++
++ if (w&4)
++ {
++ mval = vreinterpret_u8_u32(vld1_lane_u32((void *)mask, vreinterpret_u32_u8(mval), 1));
++ dval = vreinterpret_u8_u32(vld1_lane_u32((void *)dst, vreinterpret_u32_u8(dval), 1));
++
++ dst4 = dst;
++ mask += 4;
++ dst += 4;
++ }
++ if (w&2)
++ {
++ mval = vreinterpret_u8_u16(vld1_lane_u16((void *)mask, vreinterpret_u16_u8(mval), 1));
++ dval = vreinterpret_u8_u16(vld1_lane_u16((void *)dst, vreinterpret_u16_u8(dval), 1));
++ dst2 = dst;
++ mask += 2;
++ dst += 2;
++ }
++ if (w&1)
++ {
++ mval = vld1_lane_u8((void *)mask, mval, 1);
++ dval = vld1_lane_u8((void *)dst, dval, 1);
++ }
++
++ res = vqadd_u8(neon2mul(mval,sa),dval);
++
++ if (w&1)
++ vst1_lane_u8((void *)dst, res, 1);
++ if (w&2)
++ vst1_lane_u16((void *)dst2, vreinterpret_u16_u8(res), 1);
++ if (w&4)
++ vst1_lane_u32((void *)dst4, vreinterpret_u32_u8(res), 1);
++ }
++ }
++}
++
+diff --git a/pixman/pixman-arm-neon.h b/pixman/pixman-arm-neon.h
+new file mode 100644
+index 0000000..bab4dee
+--- /dev/null
++++ b/pixman/pixman-arm-neon.h
+@@ -0,0 +1,137 @@
++/*
++ * Copyright © 2009 Mozilla Corporation
++ *
++ * 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 Mozilla Corporation not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Mozilla Corporation makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
++ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS 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.
++ *
++ * Author: Ian Rickards (ian.rickards@arm.com)
++ *
++ */
++
++#include "pixman-private.h"
++
++#ifdef USE_ARM_NEON
++
++static inline pixman_bool_t pixman_have_arm_neon(void) { return TRUE; }
++
++#else
++#define pixman_have_arm_neon() FALSE
++#endif
++
++#ifdef USE_ARM_NEON
++
++void
++fbCompositeSrcAdd_8000x8000neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++void
++fbCompositeSrc_8888x8888neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++void
++fbCompositeSrc_8888x8x8888neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++void
++fbCompositeSolidMask_nx8x0565neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++void
++fbCompositeSolidMask_nx8x8888neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++void
++fbCompositeSrc_x888x0565neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++void
++fbCompositeSrcAdd_8888x8x8neon (pixman_op_t op,
++ pixman_image_t * pSrc,
++ pixman_image_t * pMask,
++ pixman_image_t * pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height);
++
++#endif /* USE_ARM_NEON */
+diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
+index 1388517..b13947a 100644
+--- a/pixman/pixman-pict.c
++++ b/pixman/pixman-pict.c
+@@ -34,6 +34,7 @@
+ #include "pixman-mmx.h"
+ #include "pixman-vmx.h"
+ #include "pixman-sse2.h"
++#include "pixman-arm-neon.h"
+ #include "pixman-arm-simd.h"
+ #include "pixman-combine32.h"
+
+@@ -1518,6 +1519,31 @@ static const FastPathInfo vmx_fast_paths[] =
+ };
+ #endif
+
++#ifdef USE_ARM_NEON
++static const FastPathInfo arm_neon_fast_paths[] =
++{
++ { PIXMAN_OP_ADD, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSrcAdd_8888x8x8neon, 0 },
++ { PIXMAN_OP_ADD, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcAdd_8000x8000neon, 0 },
++ { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSrc_x888x0565neon, 0 },
++ { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSrc_x888x0565neon, 0 },
++ { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeSrc_x888x0565neon, 0 },
++ { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeSrc_x888x0565neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8x8888neon, NEED_SOLID_MASK },
++ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8x8888neon, NEED_SOLID_MASK },
++ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_r5g6b5, fbCompositeSolidMask_nx8x0565neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_b5g6r5, fbCompositeSolidMask_nx8x0565neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8x8888neon, 0 },
++ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8x8888neon, 0 },
++ { PIXMAN_OP_NONE },
++};
++#endif
++
+ #ifdef USE_ARM_SIMD
+ static const FastPathInfo arm_simd_fast_paths[] =
+ {
+@@ -1893,6 +1919,11 @@ pixman_image_composite (pixman_op_t op,
+ info = get_fast_path (vmx_fast_paths, op, pSrc, pMask, pDst, pixbuf);
+ #endif
+
++#ifdef USE_ARM_NEON
++ if (!info && pixman_have_arm_neon())
++ info = get_fast_path (arm_neon_fast_paths, op, pSrc, pMask, pDst, pixbuf);
++#endif
++
+ #ifdef USE_ARM_SIMD
+ if (!info && pixman_have_arm_simd())
+ info = get_fast_path (arm_simd_fast_paths, op, pSrc, pMask, pDst, pixbuf);
diff --git a/packages/xorg-lib/pixman_0.13.2.bb b/packages/xorg-lib/pixman_0.13.2.bb
index 9e25cd8a59..4b489f89a6 100644
--- a/packages/xorg-lib/pixman_0.13.2.bb
+++ b/packages/xorg-lib/pixman_0.13.2.bb
@@ -3,13 +3,19 @@ PRIORITY = "optional"
DESCRIPTION = "Low-level pixel manipulation library."
LICENSE = "X11"
+PR = "r2"
+
DEFAULT_PREFERENCE = "-1"
SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
+ file://pixman-0.13.2-neon1.patch;patch=1 \
"
inherit autotools
+# We have NEON
+EXTRA_OECONF_append_armv7a = " --disable-arm-simd"
+
AUTOTOOLS_STAGE_PKGCONFIG = "1"
do_stage () {
autotools_stage_all
diff --git a/packages/xorg-xserver/xserver-xorg-conf/omapzoom/xorg.conf b/packages/xorg-xserver/xserver-xorg-conf/omapzoom/xorg.conf
new file mode 100644
index 0000000000..983bb0823a
--- /dev/null
+++ b/packages/xorg-xserver/xserver-xorg-conf/omapzoom/xorg.conf
@@ -0,0 +1,29 @@
+Section "Module"
+ Load "extmod"
+ Load "dbe"
+ Load "glx"
+ Load "freetype"
+ Load "type1"
+ Load "record"
+ Load "dri"
+EndSection
+
+Section "Monitor"
+ Identifier "Builtin Default Monitor"
+EndSection
+
+Section "Device"
+ Identifier "Builtin Default fbdev Device 0"
+ Driver "omapfb"
+EndSection
+
+Section "Screen"
+ Identifier "Builtin Default fbdev Screen 0"
+ Device "Builtin Default fbdev Device 0"
+ Monitor "Builtin Default Monitor"
+EndSection
+
+Section "ServerLayout"
+ Identifier "Builtin Default Layout"
+ Screen "Builtin Default fbdev Screen 0"
+EndSection
diff --git a/packages/xorg-xserver/xserver-xorg-conf/overo/xorg.conf b/packages/xorg-xserver/xserver-xorg-conf/overo/xorg.conf
new file mode 100644
index 0000000000..983bb0823a
--- /dev/null
+++ b/packages/xorg-xserver/xserver-xorg-conf/overo/xorg.conf
@@ -0,0 +1,29 @@
+Section "Module"
+ Load "extmod"
+ Load "dbe"
+ Load "glx"
+ Load "freetype"
+ Load "type1"
+ Load "record"
+ Load "dri"
+EndSection
+
+Section "Monitor"
+ Identifier "Builtin Default Monitor"
+EndSection
+
+Section "Device"
+ Identifier "Builtin Default fbdev Device 0"
+ Driver "omapfb"
+EndSection
+
+Section "Screen"
+ Identifier "Builtin Default fbdev Screen 0"
+ Device "Builtin Default fbdev Device 0"
+ Monitor "Builtin Default Monitor"
+EndSection
+
+Section "ServerLayout"
+ Identifier "Builtin Default Layout"
+ Screen "Builtin Default fbdev Screen 0"
+EndSection
diff --git a/packages/xorg-xserver/xserver-xorg-conf_0.1.bb b/packages/xorg-xserver/xserver-xorg-conf_0.1.bb
index ea1581ba9a..95aa82bef9 100644
--- a/packages/xorg-xserver/xserver-xorg-conf_0.1.bb
+++ b/packages/xorg-xserver/xserver-xorg-conf_0.1.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Machine specific xorg.conf files"
-PR = "r2"
+PR = "r4"
SRC_URI = "file://xorg.conf"
diff --git a/packages/xqt2/files/fix_seqfault_qtscreen.patch b/packages/xqt2/files/fix_seqfault_qtscreen.patch
new file mode 100644
index 0000000000..43b97f4bdb
--- /dev/null
+++ b/packages/xqt2/files/fix_seqfault_qtscreen.patch
@@ -0,0 +1,13 @@
+--- xc/../xqt2.vanilla/xfree86/xqt-driver/qtscreen.cc 2009-02-08 15:47:33.000000000 +0100
++++ xc/../xqt2/xfree86/xqt-driver/qtscreen.cc 2009-02-08 15:52:09.000000000 +0100
+@@ -406,7 +406,9 @@
+ //
+ void qtScreen::keyPressEvent(QKeyEvent *ev)
+ {
+- static QTextCodec *codec = QTextCodec::codecForName("eucJP");
++ //static QTextCodec *codec = QTextCodec::codecForName("eucJP");
++ //Better to choose the locale - even better provide a command line switch!
++ static QTextCodec *codec = QTextCodec::codecForLocale();
+
+ #ifdef QWS
+ QCString euc;
diff --git a/packages/xqt2/xqt2_20060509.bb b/packages/xqt2/xqt2_20060509.bb
index 731385adb4..7b56c37f37 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 = "r3"
+PR = "r4"
inherit palmtop
@@ -22,7 +22,8 @@ SRC_URI = "cvs://anonymous@cvs.sourceforge.jp/cvsroot/xqt;module=xqt2;method=pse
file://fephack.patch;patch=1 \
file://xchar2b.patch;patch=1 \
file://xqt-make.patch;patch=1 \
- file://fix_qtscreen_HACK.patch;patch=1 "
+ file://fix_qtscreen_HACK.patch;patch=1 \
+ file://fix_seqfault_qtscreen.patch;patch=1 "
S = "${WORKDIR}/xc"
QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte",d)}'
diff --git a/packages/xqtlauncher/xqtlauncher.bb b/packages/xqtlauncher/xqtlauncher.bb
index 043ee566e3..5fc80b1e51 100644
--- a/packages/xqtlauncher/xqtlauncher.bb
+++ b/packages/xqtlauncher/xqtlauncher.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "xqtlauncher integrates X/Qt2 nicely into opie. You can launch applications with it from opies menue"
HOMEPAGE = "http://angstrom-distribution.org/"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
RDEPENDS = "xqt2 xorg-minimal-fonts"
diff --git a/packages/xqtlauncher/xqtlauncher/xqtlauncher-convert.sh b/packages/xqtlauncher/xqtlauncher/xqtlauncher-convert.sh
index 0356d332ff..59efad3be3 100755
--- a/packages/xqtlauncher/xqtlauncher/xqtlauncher-convert.sh
+++ b/packages/xqtlauncher/xqtlauncher/xqtlauncher-convert.sh
@@ -5,7 +5,7 @@ for i in `find /usr/share/applications -name *.desktop`; do
newfile=/usr/lib/opie/apps/XQt2/$name.desktop
if [ ! -f $newfile ] ; then
#cat $i | awk 'BEGIN {FS="="} {if ($1 == "Exec") {print "Exec=run"ENVIRON["name"]" " $2} else if ($1 == "Icon") {print "Icon=/usr/share/pixmaps/"$2} else {print $0} }' > $newfile
- cat $i | awk 'BEGIN {FS="="} {if ($1 == "Exec") {print "Exec=run"ENVIRON["name"]" " $2} else {print $0} }' > $newfile
+ cat $i | awk 'BEGIN {FS="="} {if ($1 == "Exec") {print "Exec=/usr/lib/opie/bin/run"ENVIRON["name"]" " $2} else {print $0} }' > $newfile
icon=$(cat $i | awk 'BEGIN {FS="="} {if ($1 == "Icon") {print $2} }')
ln -sf /usr/bin/xqtlauncher /usr/lib/opie/bin/run$name
#We need to make symlinks for the pics because opie can not handle pics with paths :(
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver b/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver
index 95f5751782..7c70b2f82f 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver
+++ b/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver
@@ -128,7 +128,7 @@ case `module_id` in
fi
ARGS="$ARGS -dpi 181 -screen 320x320 -hide-cursor $PPM" ;;
"Motorola Ezx Platform")
- ARGS="$ARGS -dpi 170 -screen ${SCREEN_SIZE} -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm vt1" ;;
+ ARGS="$ARGS -dpi 170 -screen ${SCREEN_SIZE} -hide-cursor -mouse tslib -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm vt1" ;;
"Glofiish M800")
ARGS="$ARGS -dpi 285 -screen ${SCREEN_SIZE} -mouse tslib -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-vga.ppm vt1" ;;
"Freescale MX21ADS")
diff --git a/packages/yasr/files/yasr-0.6.9-gcc43.patch b/packages/yasr/files/yasr-0.6.9-gcc43.patch
new file mode 100644
index 0000000000..ee2b1a6ef7
--- /dev/null
+++ b/packages/yasr/files/yasr-0.6.9-gcc43.patch
@@ -0,0 +1,26 @@
+diff -NrU5 yasr-0.6.9.orig/yasr/yasr.h yasr-0.6.9/yasr/yasr.h
+--- yasr-0.6.9.orig/yasr/yasr.h 2008-06-29 01:23:44.000000000 +0200
++++ yasr-0.6.9/yasr/yasr.h 2008-06-29 01:37:00.000000000 +0200
+@@ -306,22 +306,10 @@
+ extern void opt_say(int num, int flag);
+ extern void opt_set(int num, void *val);
+ extern void opt_queue_empty(int ll);
+ extern void opt_write(FILE * fp);
+
+-/* openpty.c prototypes */
+-extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
+-
+-/* cfmakeraw.c prototypes */
+-extern void cfmakeraw(struct termios *);
+-
+-/* login_tty.c prototypes */
+-extern int login_tty(int);
+-
+-/* forkpty.c prototypes */
+-extern int forkpty(int *, char *, struct termios *, struct winsize *);
+-
+ /* tbc - Would it be more efficient to ensure that "blank" grids always held
+ ascii 0x20 rather than ascii 0x00? */
+ #define y_isblank(ch) ((ch & 0xdf) == 0)
+ #define cblank(r, c) ((win->row[r][c] & 0xdf) == 0)
+ #define ttssend(x) if (x) tts_send(x, strlen(x))
diff --git a/packages/yasr/files/yasr-0.6.9-remove-m4.patch b/packages/yasr/files/yasr-0.6.9-remove-m4.patch
new file mode 100644
index 0000000000..fa05f0791f
--- /dev/null
+++ b/packages/yasr/files/yasr-0.6.9-remove-m4.patch
@@ -0,0 +1,29 @@
+diff -Naur yasr-0.6.9.orig/Makefile.am yasr-0.6.9/Makefile.am
+--- yasr-0.6.9.orig/Makefile.am 2008-02-02 06:44:05.000000000 -0600
++++ yasr-0.6.9/Makefile.am 2009-02-06 08:37:07.000000000 -0600
+@@ -7,7 +7,6 @@
+
+ SUBDIRS = \
+ $(yasr_DDIRS) \
+-m4 \
+ po
+
+ pkgdata_DATA = \
+@@ -25,4 +24,3 @@
+ README-fr \
+ README-ru
+
+-ACLOCAL_AMFLAGS = -I m4
+diff -Naur yasr-0.6.9.orig/configure.in yasr-0.6.9/configure.in
+--- yasr-0.6.9.orig/configure.in 2008-02-02 07:09:04.000000000 -0600
++++ yasr-0.6.9/configure.in 2009-02-06 08:36:43.000000000 -0600
+@@ -59,8 +59,7 @@
+ AM_GNU_GETTEXT(external)
+ AM_GNU_GETTEXT_VERSION([0.17])
+
+-AC_OUTPUT([ m4/Makefile
+-Makefile
++AC_OUTPUT([ Makefile
+ yasr/Makefile
+ acclogin/Makefile
+ po/Makefile.in
diff --git a/packages/yasr/yasr_0.6.9.bb b/packages/yasr/yasr_0.6.9.bb
new file mode 100644
index 0000000000..4d6fd28ede
--- /dev/null
+++ b/packages/yasr/yasr_0.6.9.bb
@@ -0,0 +1,16 @@
+# Copyright (C) 2009 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Yet Another Screen Reader(yasr) is a \
+ general-purpose console screen reader"
+HOMEPAGE = "http://yasr.sf.net"
+LICENSE = "GPLv2"
+SECTION = "console/utils"
+SUGGESTS = "speech-dispatcher"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/yasr/yasr-${PV}.tar.gz \
+ file://yasr-0.6.9-gcc43.patch;patch=1 \
+ file://yasr-0.6.9-remove-m4.patch;patch=1 \
+ "
+
+inherit autotools
diff --git a/packages/zope/zope-native_3.3.1.bb b/packages/zope/zope-native_3.3.1.bb
new file mode 100644
index 0000000000..970df6d785
--- /dev/null
+++ b/packages/zope/zope-native_3.3.1.bb
@@ -0,0 +1,10 @@
+require zope_${PV}.bb
+inherit native
+
+DEPENDS = "python-native"
+
+inherit distutils-base
+
+export BUILD_SYS
+export HOST_SYS
+
diff --git a/packages/zope/zope_3.3.1.bb b/packages/zope/zope_3.3.1.bb
index 78cf439e68..05df3dd48d 100644
--- a/packages/zope/zope_3.3.1.bb
+++ b/packages/zope/zope_3.3.1.bb
@@ -4,7 +4,7 @@ PRIORITY = "optional"
DEPENDS = "python"
RDEPENDS = "python-core python-shell"
LICENSE = "ZPL"
-PR = "r6"
+PR = "r8"
SRC_URI = "http://www.zope.org/Products/Zope3/${PV}/Zope-${PV}.tgz"
S = "${WORKDIR}/Zope-${PV}"
@@ -23,6 +23,8 @@ do_install() {
install -d ${D}${libdir}/${PYTHON_DIR}
oe_runmake install prefix=${D}${prefix} HOST_SYS=${HOST_SYS} BUILD_SYS=${BUILD_SYS}
mv ${D}${libdir}/python/* ${D}${libdir}/${PYTHON_DIR}
+ rm -rf ${D}${libdir}/${PYTHON_DIR}/twisted
+ rm -rf ${D}${libdir}/${PYTHON_DIR}/zope/app/twisted
}
PACKAGES =+ "python-zopeinterface python-zopeinterface-dbg"
@@ -41,4 +43,7 @@ ${libdir}/${PYTHON_DIR}/zope/i18nmessageid/.debug \
${libdir}/${PYTHON_DIR}/ZODB/.debug"
FILES_python-zopeinterface-dbg += "${libdir}/${PYTHON_DIR}/zope/interface/.debug "
-FILES_python-zopeinterface = "${libdir}/${PYTHON_DIR}/zope/interface/*.* ${libdir}/${PYTHON_DIR}/zope/interface/common"
+FILES_python-zopeinterface = " ${libdir}/${PYTHON_DIR}/zope/__init__.py* \
+ ${libdir}/${PYTHON_DIR}/zope/interface/*.* \
+ ${libdir}/${PYTHON_DIR}/zope/interface/common"
+
diff --git a/packages/zziplib/zziplib.inc b/packages/zziplib/zziplib.inc
index 602eae6315..e0ef3f2e58 100644
--- a/packages/zziplib/zziplib.inc
+++ b/packages/zziplib/zziplib.inc
@@ -14,7 +14,17 @@ do_configure_append() {
sed -i \
-e "s|tail -1|tail -n 1|" \
-e "s|dist dist-all dist-all:|dist dist-all:|" \
- Makefile
+ -e "s|docs||g" \
+ Makefile
mkdir ${S}/build
}
+
+
+do_compile_append() {
+for i in ${S}/*/*.pc ; do
+ sed -i -e s:${STAGING_DIR_TARGET}::g \
+ -e s:/${TARGET_SYS}::g \
+ $i
+done
+}
diff --git a/packages/zziplib/zziplib_0.13.49.bb b/packages/zziplib/zziplib_0.13.49.bb
index 3a6c148dc5..f90e41f5a9 100644
--- a/packages/zziplib/zziplib_0.13.49.bb
+++ b/packages/zziplib/zziplib_0.13.49.bb
@@ -1,5 +1,7 @@
require zziplib.inc
+PR = "r1"
+
SRC_URI += "\
file://zip_c.patch;patch=1 \
file://zziplib-autoconf.patch;patch=1 \